@orbit-work/ui 0.1.2-preview.0 → 0.1.2

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 (795) hide show
  1. package/README.md +59 -57
  2. package/dist/about-window.cjs +271 -1
  3. package/dist/about-window.cjs.map +1 -0
  4. package/dist/about-window.d.cts +20 -2
  5. package/dist/about-window.d.ts +20 -2
  6. package/dist/about-window.js +271 -1
  7. package/dist/about-window.js.map +1 -0
  8. package/dist/appearance-D7uh_ZTy.d.cts +192 -0
  9. package/dist/appearance-D7uh_ZTy.d.ts +192 -0
  10. package/dist/appearance.cjs +39 -1
  11. package/dist/appearance.cjs.map +1 -0
  12. package/dist/appearance.d.cts +1 -1
  13. package/dist/appearance.d.ts +1 -1
  14. package/dist/appearance.js +39 -1
  15. package/dist/appearance.js.map +1 -0
  16. package/dist/browser-annotation-popup.cjs +9 -1
  17. package/dist/browser-annotation-popup.cjs.map +1 -0
  18. package/dist/browser-annotation-popup.d.cts +6 -6
  19. package/dist/browser-annotation-popup.d.ts +6 -6
  20. package/dist/browser-annotation-popup.js +9 -1
  21. package/dist/browser-annotation-popup.js.map +1 -0
  22. package/dist/chunk-66VEV7G2.js +111 -0
  23. package/dist/chunk-66VEV7G2.js.map +1 -0
  24. package/dist/chunk-KRP43SUA.cjs +1130 -0
  25. package/dist/chunk-KRP43SUA.cjs.map +1 -0
  26. package/dist/chunk-QS55W5Q5.cjs +111 -0
  27. package/dist/chunk-QS55W5Q5.cjs.map +1 -0
  28. package/dist/chunk-S3R5QFO4.js +1130 -0
  29. package/dist/chunk-S3R5QFO4.js.map +1 -0
  30. package/dist/chunk-UT5LC6MR.js +38 -0
  31. package/dist/chunk-UT5LC6MR.js.map +1 -0
  32. package/dist/chunk-ZZTEY4YX.cjs +38 -0
  33. package/dist/chunk-ZZTEY4YX.cjs.map +1 -0
  34. package/dist/core.css +7886 -0
  35. package/dist/file-tree.css +85 -0
  36. package/dist/index-nLo7jMlP.d.cts +166 -0
  37. package/dist/index-nLo7jMlP.d.ts +166 -0
  38. package/dist/index.cjs +39161 -26
  39. package/dist/index.cjs.map +1 -0
  40. package/dist/index.d.cts +3769 -3032
  41. package/dist/index.d.ts +3769 -3032
  42. package/dist/index.js +39161 -26
  43. package/dist/index.js.map +1 -0
  44. package/dist/locale.cjs +15 -0
  45. package/dist/locale.cjs.map +1 -0
  46. package/dist/locale.d.cts +28 -0
  47. package/dist/locale.d.ts +28 -0
  48. package/dist/locale.js +15 -0
  49. package/dist/locale.js.map +1 -0
  50. package/dist/office.css +1146 -0
  51. package/dist/slot-core.cjs +200 -0
  52. package/dist/slot-core.cjs.map +1 -0
  53. package/dist/slot-core.d.cts +146 -0
  54. package/dist/slot-core.d.ts +146 -0
  55. package/dist/slot-core.js +200 -0
  56. package/dist/slot-core.js.map +1 -0
  57. package/dist/slot-react.cjs +153 -0
  58. package/dist/slot-react.cjs.map +1 -0
  59. package/dist/slot-react.d.cts +36 -0
  60. package/dist/slot-react.d.ts +36 -0
  61. package/dist/slot-react.js +153 -0
  62. package/dist/slot-react.js.map +1 -0
  63. package/dist/tailwind.css +137 -0
  64. package/dist/workbench.css +9014 -0
  65. package/package.json +112 -47
  66. package/dist/appearance-D5uQ53j3.d.cts +0 -210
  67. package/dist/appearance-D5uQ53j3.d.ts +0 -210
  68. package/dist/chunk-3KT7IU4X.js +0 -13
  69. package/dist/chunk-5VLBKOG7.cjs +0 -194
  70. package/dist/chunk-7YJY64LZ.js +0 -82
  71. package/dist/chunk-EF2BSN3K.cjs +0 -13
  72. package/dist/chunk-GMMYDILD.cjs +0 -82
  73. package/dist/chunk-VG7FQQ7K.js +0 -194
  74. package/dist/fonts/JetBrainsMono-Medium.ttf +0 -0
  75. package/dist/fonts/JetBrainsMono-Regular.ttf +0 -0
  76. package/dist/fonts/SpaceGrotesk-700-latin-ext.woff2 +0 -0
  77. package/dist/fonts/SpaceGrotesk-700-latin.woff2 +0 -0
  78. package/dist/index.css +0 -1
  79. package/dist/orbitwork.css +0 -22209
  80. package/src/components/Layout/AppLayout/AppLayout.stories.tsx +0 -246
  81. package/src/components/Layout/AppLayout/AppLayoutSource.test.mjs +0 -37
  82. package/src/components/Layout/AppLayout/index.tsx +0 -122
  83. package/src/components/Layout/Sidebar/index.tsx +0 -13
  84. package/src/components/Layout/SidebarShell/SidebarShell.stories.tsx +0 -676
  85. package/src/components/Layout/SidebarShell/SidebarShellSource.test.mjs +0 -161
  86. package/src/components/Layout/SidebarShell/index.tsx +0 -326
  87. package/src/components/Layout/index.ts +0 -10
  88. package/src/components/composite/ActionBar/ActionBar.stories.tsx +0 -26
  89. package/src/components/composite/ActionBar/index.tsx +0 -31
  90. package/src/components/composite/ActionStatus/ActionStatus.stories.tsx +0 -60
  91. package/src/components/composite/ActionStatus/index.tsx +0 -21
  92. package/src/components/composite/AskQuestionCardView/AskQuestionCardView.stories.tsx +0 -175
  93. package/src/components/composite/AskQuestionCardView/AskQuestionCardViewSource.test.mjs +0 -92
  94. package/src/components/composite/AskQuestionCardView/index.tsx +0 -119
  95. package/src/components/composite/AssistantChannelCard/AssistantChannelCard.stories.tsx +0 -265
  96. package/src/components/composite/AssistantChannelCard/AssistantChannelCardSource.test.mjs +0 -45
  97. package/src/components/composite/AssistantChannelCard/index.tsx +0 -102
  98. package/src/components/composite/AssistantToggleRow/AssistantToggleRow.stories.tsx +0 -197
  99. package/src/components/composite/AssistantToggleRow/index.tsx +0 -35
  100. package/src/components/composite/AttachmentCard/AttachmentCard.stories.tsx +0 -125
  101. package/src/components/composite/AttachmentCard/index.tsx +0 -80
  102. package/src/components/composite/BackButton/BackButton.stories.tsx +0 -93
  103. package/src/components/composite/BackButton/BackButtonSource.test.mjs +0 -29
  104. package/src/components/composite/BackButton/index.tsx +0 -48
  105. package/src/components/composite/Banner/Banner.stories.tsx +0 -180
  106. package/src/components/composite/Banner/BannerSource.test.mjs +0 -67
  107. package/src/components/composite/Banner/index.tsx +0 -125
  108. package/src/components/composite/BeaconIcons/BeaconIcons.stories.tsx +0 -153
  109. package/src/components/composite/BeaconIcons/index.tsx +0 -265
  110. package/src/components/composite/BeaconSpinner/BeaconSpinner.stories.tsx +0 -144
  111. package/src/components/composite/BeaconSpinner/index.tsx +0 -185
  112. package/src/components/composite/CatalogStates/CatalogEmptyState.stories.tsx +0 -108
  113. package/src/components/composite/CatalogStates/CatalogStates.stories.tsx +0 -53
  114. package/src/components/composite/CatalogStates/CatalogStatesSource.test.mjs +0 -149
  115. package/src/components/composite/CatalogStates/index.tsx +0 -113
  116. package/src/components/composite/Charts/Charts.stories.tsx +0 -174
  117. package/src/components/composite/Charts/ChartsSource.test.mjs +0 -111
  118. package/src/components/composite/Charts/index.tsx +0 -385
  119. package/src/components/composite/CodeBlock/CodeBlock.stories.tsx +0 -308
  120. package/src/components/composite/CodeBlock/CodeFaceSource.test.mjs +0 -89
  121. package/src/components/composite/CodeBlock/index.tsx +0 -300
  122. package/src/components/composite/CodeDiff/CodeDiff.stories.tsx +0 -169
  123. package/src/components/composite/CodeDiff/index.tsx +0 -373
  124. package/src/components/composite/CodePreview/CodePreview.stories.tsx +0 -127
  125. package/src/components/composite/CodePreview/CodePreviewSource.test.mjs +0 -43
  126. package/src/components/composite/CodePreview/index.tsx +0 -98
  127. package/src/components/composite/CommandPalette/CommandPalette.stories.tsx +0 -89
  128. package/src/components/composite/CommandPalette/CommandPaletteSource.test.mjs +0 -61
  129. package/src/components/composite/CommandPalette/index.tsx +0 -310
  130. package/src/components/composite/ContentRecommendation/ContentRecommendation.stories.tsx +0 -300
  131. package/src/components/composite/ContentRecommendation/ContentRecommendationSource.test.mjs +0 -48
  132. package/src/components/composite/ContentRecommendation/index.tsx +0 -116
  133. package/src/components/composite/ContextChip/ContextChip.stories.tsx +0 -123
  134. package/src/components/composite/ContextChip/ContextChipSource.test.mjs +0 -24
  135. package/src/components/composite/ContextChip/index.tsx +0 -25
  136. package/src/components/composite/ContextUsageIndicatorView/ContextUsageIndicatorSizeSource.test.mjs +0 -15
  137. package/src/components/composite/ContextUsageIndicatorView/ContextUsageIndicatorView.stories.tsx +0 -110
  138. package/src/components/composite/ContextUsageIndicatorView/ContextUsageLoadingSource.test.mjs +0 -23
  139. package/src/components/composite/ContextUsageIndicatorView/index.tsx +0 -139
  140. package/src/components/composite/Controls/Controls.stories.tsx +0 -227
  141. package/src/components/composite/Controls/index.tsx +0 -15
  142. package/src/components/composite/CreateProjectDialog/CreateProjectDialog.stories.tsx +0 -56
  143. package/src/components/composite/CreateProjectDialog/index.tsx +0 -70
  144. package/src/components/composite/DataManagementSectionView/DataManagementSectionView.stories.tsx +0 -123
  145. package/src/components/composite/DataManagementSectionView/DataManagementSectionViewSource.test.mjs +0 -45
  146. package/src/components/composite/DataManagementSectionView/index.tsx +0 -110
  147. package/src/components/composite/DataTable/DataTable.stories.tsx +0 -159
  148. package/src/components/composite/DataTable/DataTableSource.test.mjs +0 -96
  149. package/src/components/composite/DataTable/index.tsx +0 -373
  150. package/src/components/composite/DetailChrome/DetailChrome.stories.tsx +0 -61
  151. package/src/components/composite/DetailChrome/DetailChromeSource.test.mjs +0 -31
  152. package/src/components/composite/DetailChrome/index.tsx +0 -94
  153. package/src/components/composite/DetailPanel/DetailPanel.stories.tsx +0 -185
  154. package/src/components/composite/DetailPanel/DetailPanelSource.test.mjs +0 -49
  155. package/src/components/composite/DetailPanel/index.tsx +0 -120
  156. package/src/components/composite/DetailScaffold/DetailScaffold.stories.tsx +0 -203
  157. package/src/components/composite/DetailScaffold/DetailScaffoldSource.test.mjs +0 -38
  158. package/src/components/composite/DetailScaffold/index.tsx +0 -114
  159. package/src/components/composite/Dialog/Dialog.stories.tsx +0 -343
  160. package/src/components/composite/Dialog/DialogSource.test.mjs +0 -130
  161. package/src/components/composite/Dialog/index.tsx +0 -333
  162. package/src/components/composite/DropZone/DropZone.stories.tsx +0 -105
  163. package/src/components/composite/DropZone/DropZoneSource.test.mjs +0 -68
  164. package/src/components/composite/DropZone/index.tsx +0 -196
  165. package/src/components/composite/FSelect/FSelect.stories.tsx +0 -64
  166. package/src/components/composite/FSelect/index.tsx +0 -29
  167. package/src/components/composite/FeedbackContextMenuView/FeedbackContextMenuView.stories.tsx +0 -106
  168. package/src/components/composite/FeedbackContextMenuView/index.tsx +0 -51
  169. package/src/components/composite/FeedbackDialogView/FeedbackDialogView.stories.tsx +0 -291
  170. package/src/components/composite/FeedbackDialogView/index.tsx +0 -95
  171. package/src/components/composite/FileReferenceCard/FileReferenceCard.stories.tsx +0 -364
  172. package/src/components/composite/FileReferenceCard/FileReferenceCardSource.test.mjs +0 -48
  173. package/src/components/composite/FileReferenceCard/index.tsx +0 -122
  174. package/src/components/composite/FilterBar/FilterBar.stories.tsx +0 -167
  175. package/src/components/composite/FilterBar/FilterBarSource.test.mjs +0 -75
  176. package/src/components/composite/FilterBar/index.tsx +0 -206
  177. package/src/components/composite/FormField/FormField.stories.tsx +0 -158
  178. package/src/components/composite/FormField/FormFieldSource.test.mjs +0 -56
  179. package/src/components/composite/FormField/index.tsx +0 -219
  180. package/src/components/composite/HomeBackdrop/HomeBackdrop.stories.tsx +0 -54
  181. package/src/components/composite/HomeBackdrop/HomeBackdropSource.test.mjs +0 -50
  182. package/src/components/composite/HomeBackdrop/index.tsx +0 -53
  183. package/src/components/composite/Icons/Icons.stories.tsx +0 -153
  184. package/src/components/composite/Icons/IconsSource.test.mjs +0 -23
  185. package/src/components/composite/Icons/index.tsx +0 -1367
  186. package/src/components/composite/ImageCard/ImageCard.stories.tsx +0 -54
  187. package/src/components/composite/ImageCard/index.tsx +0 -33
  188. package/src/components/composite/ImagePreview/ImagePreview.stories.tsx +0 -172
  189. package/src/components/composite/ImagePreview/ImagePreviewSource.test.mjs +0 -95
  190. package/src/components/composite/ImagePreview/index.tsx +0 -339
  191. package/src/components/composite/ListRow/ListRow.stories.tsx +0 -257
  192. package/src/components/composite/ListRow/ListRowSource.test.mjs +0 -101
  193. package/src/components/composite/ListRow/index.tsx +0 -309
  194. package/src/components/composite/Markdown/Markdown.stories.tsx +0 -192
  195. package/src/components/composite/Markdown/MarkdownSource.test.mjs +0 -126
  196. package/src/components/composite/Markdown/MarkdownStyleSource.test.mjs +0 -167
  197. package/src/components/composite/Markdown/index.tsx +0 -702
  198. package/src/components/composite/MarkdownPreview/MarkdownPreview.stories.tsx +0 -174
  199. package/src/components/composite/MarkdownPreview/MarkdownPreviewTabsSource.test.mjs +0 -31
  200. package/src/components/composite/MarkdownPreview/MarkdownRenderedStyleSource.test.mjs +0 -84
  201. package/src/components/composite/MarkdownPreview/index.tsx +0 -140
  202. package/src/components/composite/MarkdownPreviewModalView/MarkdownPreviewModalView.stories.tsx +0 -104
  203. package/src/components/composite/MarkdownPreviewModalView/index.tsx +0 -85
  204. package/src/components/composite/MessageFeedbackDialog/MessageFeedbackDialog.stories.tsx +0 -66
  205. package/src/components/composite/MessageFeedbackDialog/index.tsx +0 -115
  206. package/src/components/composite/ModelCatalogErrorState/ModelCatalogErrorState.stories.tsx +0 -101
  207. package/src/components/composite/ModelCatalogErrorState/ModelCatalogRetrySource.test.mjs +0 -86
  208. package/src/components/composite/ModelCatalogErrorState/index.tsx +0 -59
  209. package/src/components/composite/ModelModalityFlow/ModelModalityFlow.stories.tsx +0 -224
  210. package/src/components/composite/ModelModalityFlow/ModelModalityFlowSource.test.mjs +0 -56
  211. package/src/components/composite/ModelModalityFlow/index.tsx +0 -113
  212. package/src/components/composite/ModelPickerList/ModelPickerList.stories.tsx +0 -313
  213. package/src/components/composite/ModelPickerList/index.tsx +0 -142
  214. package/src/components/composite/ModelSelect/ModelSelect.stories.tsx +0 -90
  215. package/src/components/composite/ModelSelect/index.tsx +0 -148
  216. package/src/components/composite/ModelsSettingsSectionView/ModelsSettingsSectionView.stories.tsx +0 -170
  217. package/src/components/composite/ModelsSettingsSectionView/index.tsx +0 -139
  218. package/src/components/composite/NativeControls/NativeControls.stories.tsx +0 -386
  219. package/src/components/composite/NativeControls/NativeControlsStyleSource.test.mjs +0 -63
  220. package/src/components/composite/NativeControls/index.tsx +0 -97
  221. package/src/components/composite/NavMenu/NavMenu.stories.tsx +0 -383
  222. package/src/components/composite/NavMenu/NavMenuSource.test.mjs +0 -56
  223. package/src/components/composite/NavMenu/index.tsx +0 -142
  224. package/src/components/composite/NoPlanPanelView/NoPlanPanelView.stories.tsx +0 -344
  225. package/src/components/composite/NoPlanPanelView/NoPlanPanelViewSource.test.mjs +0 -34
  226. package/src/components/composite/NoPlanPanelView/index.tsx +0 -97
  227. package/src/components/composite/OpenWithButton/OpenWithButton.stories.tsx +0 -78
  228. package/src/components/composite/OpenWithButton/index.tsx +0 -46
  229. package/src/components/composite/OrbitworkLogo/OrbitworkLogo.stories.tsx +0 -192
  230. package/src/components/composite/OrbitworkLogo/index.tsx +0 -207
  231. package/src/components/composite/OrbitworkModal/OrbitworkModal.stories.tsx +0 -58
  232. package/src/components/composite/OrbitworkModal/index.tsx +0 -31
  233. package/src/components/composite/PageHead/PageHead.stories.tsx +0 -235
  234. package/src/components/composite/PageHead/PageHeadSource.test.mjs +0 -76
  235. package/src/components/composite/PageHead/index.tsx +0 -128
  236. package/src/components/composite/PlanFeatureIcon/PlanFeatureIcon.stories.tsx +0 -205
  237. package/src/components/composite/PlanFeatureIcon/PlanFeatureIconSource.test.mjs +0 -38
  238. package/src/components/composite/PlanFeatureIcon/index.tsx +0 -48
  239. package/src/components/composite/PlanSettingsSectionView/PlanSettingsSectionView.stories.tsx +0 -231
  240. package/src/components/composite/PlanSettingsSectionView/PlanSettingsSectionViewSource.test.mjs +0 -85
  241. package/src/components/composite/PlanSettingsSectionView/index.tsx +0 -264
  242. package/src/components/composite/Popover/Popover.stories.tsx +0 -175
  243. package/src/components/composite/Popover/PopoverSource.test.mjs +0 -59
  244. package/src/components/composite/Popover/index.tsx +0 -176
  245. package/src/components/composite/PptxRenderer/ElementDispatcher/index.tsx +0 -70
  246. package/src/components/composite/PptxRenderer/PptxChromeStyleSource.test.mjs +0 -36
  247. package/src/components/composite/PptxRenderer/PptxRenderer.stories.tsx +0 -128
  248. package/src/components/composite/PptxRenderer/PptxSlide/index.tsx +0 -48
  249. package/src/components/composite/PptxRenderer/constants.ts +0 -2
  250. package/src/components/composite/PptxRenderer/elements/AudioElement/index.tsx +0 -48
  251. package/src/components/composite/PptxRenderer/elements/ChartElement/index.tsx +0 -172
  252. package/src/components/composite/PptxRenderer/elements/DiagramElement/index.tsx +0 -46
  253. package/src/components/composite/PptxRenderer/elements/GroupElement/index.tsx +0 -28
  254. package/src/components/composite/PptxRenderer/elements/ImageElement/index.tsx +0 -61
  255. package/src/components/composite/PptxRenderer/elements/MathElement/index.tsx +0 -57
  256. package/src/components/composite/PptxRenderer/elements/ShapeElement/index.tsx +0 -327
  257. package/src/components/composite/PptxRenderer/elements/TableElement/index.tsx +0 -90
  258. package/src/components/composite/PptxRenderer/elements/TextElement/index.tsx +0 -57
  259. package/src/components/composite/PptxRenderer/elements/VideoElement/index.tsx +0 -43
  260. package/src/components/composite/PptxRenderer/index.ts +0 -24
  261. package/src/components/composite/PptxRenderer/types.ts +0 -326
  262. package/src/components/composite/PptxRenderer/utils.ts +0 -129
  263. package/src/components/composite/ProjectSelect/ProjectSelect.stories.tsx +0 -112
  264. package/src/components/composite/ProjectSelect/ProjectSelectSource.test.mjs +0 -34
  265. package/src/components/composite/ProjectSelect/index.tsx +0 -155
  266. package/src/components/composite/RadioCard/RadioCard.stories.tsx +0 -130
  267. package/src/components/composite/RadioCard/RadioCardSource.test.mjs +0 -42
  268. package/src/components/composite/RadioCard/index.tsx +0 -171
  269. package/src/components/composite/RowOverflowMenu/RowOverflowMenu.stories.tsx +0 -113
  270. package/src/components/composite/RowOverflowMenu/RowOverflowMenuSource.test.mjs +0 -59
  271. package/src/components/composite/RowOverflowMenu/index.tsx +0 -101
  272. package/src/components/composite/SandboxPermissionPrompt/SandboxPermissionPrompt.stories.tsx +0 -159
  273. package/src/components/composite/SandboxPermissionPrompt/SandboxPermissionPromptSource.test.mjs +0 -71
  274. package/src/components/composite/SandboxPermissionPrompt/index.tsx +0 -157
  275. package/src/components/composite/SearchInput/SearchInput.stories.tsx +0 -127
  276. package/src/components/composite/SearchInput/index.tsx +0 -91
  277. package/src/components/composite/SearchResult/SearchResult.stories.tsx +0 -305
  278. package/src/components/composite/SearchResult/SearchResultSource.test.mjs +0 -45
  279. package/src/components/composite/SearchResult/index.tsx +0 -148
  280. package/src/components/composite/Section/Section.stories.tsx +0 -148
  281. package/src/components/composite/Section/SectionSource.test.mjs +0 -59
  282. package/src/components/composite/Section/index.tsx +0 -105
  283. package/src/components/composite/SelectionBulkBar/SelectionBulkBar.stories.tsx +0 -111
  284. package/src/components/composite/SelectionBulkBar/SelectionBulkBarSource.test.mjs +0 -44
  285. package/src/components/composite/SelectionBulkBar/index.tsx +0 -99
  286. package/src/components/composite/ShareStrip/ShareStrip.stories.tsx +0 -123
  287. package/src/components/composite/ShareStrip/index.tsx +0 -83
  288. package/src/components/composite/ShortcutSheet/ShortcutSheet.stories.tsx +0 -90
  289. package/src/components/composite/ShortcutSheet/ShortcutSheetSource.test.mjs +0 -49
  290. package/src/components/composite/ShortcutSheet/index.tsx +0 -163
  291. package/src/components/composite/SitesArtifactCardView/SitesArtifactCardView.stories.tsx +0 -328
  292. package/src/components/composite/SitesArtifactCardView/SitesArtifactCardViewSource.test.mjs +0 -45
  293. package/src/components/composite/SitesArtifactCardView/index.tsx +0 -100
  294. package/src/components/composite/Skeleton/Skeleton.stories.tsx +0 -188
  295. package/src/components/composite/Skeleton/SkeletonSource.test.mjs +0 -25
  296. package/src/components/composite/Skeleton/index.tsx +0 -152
  297. package/src/components/composite/Splash/Splash.stories.tsx +0 -150
  298. package/src/components/composite/Splash/index.tsx +0 -229
  299. package/src/components/composite/StatusTag/StatusTag.stories.tsx +0 -66
  300. package/src/components/composite/StatusTag/StatusTagSource.test.mjs +0 -64
  301. package/src/components/composite/StatusTag/index.tsx +0 -78
  302. package/src/components/composite/StepList/StepList.stories.tsx +0 -352
  303. package/src/components/composite/StepList/index.tsx +0 -23
  304. package/src/components/composite/Tag/Tag.stories.tsx +0 -279
  305. package/src/components/composite/Tag/TagSource.test.mjs +0 -67
  306. package/src/components/composite/Tag/index.tsx +0 -229
  307. package/src/components/composite/TimePicker/TimePicker.stories.tsx +0 -91
  308. package/src/components/composite/TimePicker/TimePickerSource.test.mjs +0 -98
  309. package/src/components/composite/TimePicker/index.tsx +0 -208
  310. package/src/components/composite/TitleBar/TitleBar.stories.tsx +0 -329
  311. package/src/components/composite/TitleBar/TitleBarSource.test.mjs +0 -140
  312. package/src/components/composite/TitleBar/index.tsx +0 -350
  313. package/src/components/composite/Toast/Toast.stories.tsx +0 -304
  314. package/src/components/composite/Toast/ToastSource.test.mjs +0 -63
  315. package/src/components/composite/Toast/index.tsx +0 -135
  316. package/src/components/composite/Tooltip/Tooltip.stories.tsx +0 -304
  317. package/src/components/composite/Tooltip/TooltipSource.test.mjs +0 -34
  318. package/src/components/composite/Tooltip/index.tsx +0 -204
  319. package/src/components/composite/TranscriptDividers/TranscriptDividers.stories.tsx +0 -160
  320. package/src/components/composite/TranscriptDividers/TranscriptDividersSource.test.mjs +0 -90
  321. package/src/components/composite/TranscriptDividers/index.tsx +0 -352
  322. package/src/components/composite/WCardShell/WCardShell.stories.tsx +0 -228
  323. package/src/components/composite/WCardShell/index.tsx +0 -101
  324. package/src/components/composite/index.ts +0 -81
  325. package/src/components/domain/artifacts/ArtifactPreviewSidebarView/ArtifactPreviewSidebarView.stories.tsx +0 -128
  326. package/src/components/domain/artifacts/ArtifactPreviewSidebarView/ArtifactPreviewSidebarViewSource.test.mjs +0 -69
  327. package/src/components/domain/artifacts/ArtifactPreviewSidebarView/index.tsx +0 -212
  328. package/src/components/domain/artifacts/index.ts +0 -1
  329. package/src/components/domain/browser/BrowserAnnotationPopupView/BrowserAnnotationPopupView.stories.tsx +0 -211
  330. package/src/components/domain/browser/BrowserAnnotationPopupView/BrowserAnnotationPopupViewSource.test.mjs +0 -82
  331. package/src/components/domain/browser/BrowserAnnotationPopupView/index.tsx +0 -235
  332. package/src/components/domain/browser/BrowserDeviceToolbarView/BrowserDeviceToolbarView.stories.tsx +0 -260
  333. package/src/components/domain/browser/BrowserDeviceToolbarView/BrowserDeviceToolbarViewSource.test.mjs +0 -12
  334. package/src/components/domain/browser/BrowserDeviceToolbarView/index.tsx +0 -154
  335. package/src/components/domain/browser/BrowserFindBarView/BrowserFindBarView.stories.tsx +0 -52
  336. package/src/components/domain/browser/BrowserFindBarView/index.tsx +0 -111
  337. package/src/components/domain/browser/BrowserImportDialogView/BrowserImportDialogView.stories.tsx +0 -89
  338. package/src/components/domain/browser/BrowserImportDialogView/index.tsx +0 -155
  339. package/src/components/domain/browser/BrowserLoadErrorView/BrowserLoadErrorView.stories.tsx +0 -197
  340. package/src/components/domain/browser/BrowserLoadErrorView/BrowserLoadErrorViewSource.test.mjs +0 -29
  341. package/src/components/domain/browser/BrowserLoadErrorView/index.tsx +0 -45
  342. package/src/components/domain/browser/BrowserMoreMenuView/BrowserMoreMenuView.stories.tsx +0 -66
  343. package/src/components/domain/browser/BrowserMoreMenuView/index.tsx +0 -268
  344. package/src/components/domain/browser/BrowserNavBarView/BrowserNavBarView.stories.tsx +0 -149
  345. package/src/components/domain/browser/BrowserNavBarView/index.tsx +0 -156
  346. package/src/components/domain/browser/BrowserTabBarView/index.tsx +0 -18
  347. package/src/components/domain/browser/SubAgentPane/SubAgentPane.stories.tsx +0 -96
  348. package/src/components/domain/browser/SubAgentPane/SubAgentPaneSource.test.mjs +0 -48
  349. package/src/components/domain/browser/SubAgentPane/index.tsx +0 -121
  350. package/src/components/domain/browser/TerminalPane/TerminalPane.stories.tsx +0 -95
  351. package/src/components/domain/browser/TerminalPane/TerminalPaneSource.test.mjs +0 -52
  352. package/src/components/domain/browser/TerminalPane/index.tsx +0 -75
  353. package/src/components/domain/browser/WebPreview/WebPreview.stories.tsx +0 -71
  354. package/src/components/domain/browser/WebPreview/index.tsx +0 -141
  355. package/src/components/domain/browser/WebPreviewConsole/WebPreviewConsole.stories.tsx +0 -61
  356. package/src/components/domain/browser/WebPreviewConsole/WebPreviewConsoleSource.test.mjs +0 -66
  357. package/src/components/domain/browser/WebPreviewConsole/index.tsx +0 -239
  358. package/src/components/domain/browser/WebPreviewDialog/WebPreviewDialog.stories.tsx +0 -288
  359. package/src/components/domain/browser/WebPreviewDialog/WebPreviewDialogSource.test.mjs +0 -62
  360. package/src/components/domain/browser/WebPreviewDialog/index.tsx +0 -82
  361. package/src/components/domain/browser/WebPreviewNav/WebPreviewNav.stories.tsx +0 -462
  362. package/src/components/domain/browser/WebPreviewNav/WebPreviewNavSource.test.mjs +0 -353
  363. package/src/components/domain/browser/WebPreviewNav/index.tsx +0 -351
  364. package/src/components/domain/browser/WebPreviewShell/WebPreviewShell.stories.tsx +0 -226
  365. package/src/components/domain/browser/WebPreviewShell/WebPreviewShellSource.test.mjs +0 -172
  366. package/src/components/domain/browser/WebPreviewShell/index.tsx +0 -324
  367. package/src/components/domain/browser/index.ts +0 -45
  368. package/src/components/domain/chat/AgentLoopSegment/AgentLoopSegment.stories.tsx +0 -107
  369. package/src/components/domain/chat/AgentLoopSegment/AgentLoopSegmentSource.test.mjs +0 -45
  370. package/src/components/domain/chat/AgentLoopSegment/index.tsx +0 -29
  371. package/src/components/domain/chat/AgentTurn/AgentTurn.stories.tsx +0 -162
  372. package/src/components/domain/chat/AgentTurn/AgentTurnSource.test.mjs +0 -98
  373. package/src/components/domain/chat/AgentTurn/beaconContext.ts +0 -37
  374. package/src/components/domain/chat/AgentTurn/index.tsx +0 -226
  375. package/src/components/domain/chat/ArtifactCard/ArtifactCard.stories.tsx +0 -127
  376. package/src/components/domain/chat/ArtifactCard/index.tsx +0 -249
  377. package/src/components/domain/chat/Attachment/Attachment.stories.tsx +0 -235
  378. package/src/components/domain/chat/Attachment/AttachmentSource.test.mjs +0 -160
  379. package/src/components/domain/chat/Attachment/index.tsx +0 -857
  380. package/src/components/domain/chat/AuthorizationCard/AuthorizationCard.stories.tsx +0 -53
  381. package/src/components/domain/chat/AuthorizationCard/AuthorizationCardSource.test.mjs +0 -80
  382. package/src/components/domain/chat/AuthorizationCard/index.tsx +0 -89
  383. package/src/components/domain/chat/ChatBubble/ChatBubble.stories.tsx +0 -32
  384. package/src/components/domain/chat/ChatBubble/index.tsx +0 -24
  385. package/src/components/domain/chat/ChatMessage/ChatMessage.stories.tsx +0 -31
  386. package/src/components/domain/chat/ChatMessage/index.tsx +0 -23
  387. package/src/components/domain/chat/ChatR2ReviewSource.test.mjs +0 -98
  388. package/src/components/domain/chat/ChatThinking/ChatThinking.stories.tsx +0 -125
  389. package/src/components/domain/chat/ChatThinking/index.tsx +0 -55
  390. package/src/components/domain/chat/Chatbot/Chatbot.stories.tsx +0 -49
  391. package/src/components/domain/chat/Chatbot/index.tsx +0 -37
  392. package/src/components/domain/chat/Composer/Composer.stories.tsx +0 -227
  393. package/src/components/domain/chat/Composer/ComposerSource.test.mjs +0 -175
  394. package/src/components/domain/chat/Composer/index.tsx +0 -450
  395. package/src/components/domain/chat/Composer/parts/ComposerAudioSpectrum.stories.tsx +0 -203
  396. package/src/components/domain/chat/Composer/parts/ComposerAudioSpectrum.tsx +0 -110
  397. package/src/components/domain/chat/Composer/parts/ComposerAudioSpectrumSource.test.mjs +0 -54
  398. package/src/components/domain/chat/Composer/parts/ComposerAuthorization.stories.tsx +0 -155
  399. package/src/components/domain/chat/Composer/parts/ComposerAuthorization.tsx +0 -108
  400. package/src/components/domain/chat/Composer/parts/ComposerMentions.stories.tsx +0 -76
  401. package/src/components/domain/chat/Composer/parts/ComposerMentions.tsx +0 -83
  402. package/src/components/domain/chat/Composer/parts/ComposerMentionsSource.test.mjs +0 -85
  403. package/src/components/domain/chat/Composer/parts/ComposerMenu.stories.tsx +0 -266
  404. package/src/components/domain/chat/Composer/parts/ComposerMenu.tsx +0 -232
  405. package/src/components/domain/chat/Composer/parts/ComposerMenuPopover.stories.tsx +0 -166
  406. package/src/components/domain/chat/Composer/parts/ComposerMenuPopover.tsx +0 -87
  407. package/src/components/domain/chat/Composer/parts/ComposerMenuPopoverSource.test.mjs +0 -56
  408. package/src/components/domain/chat/Composer/parts/ComposerPopover.stories.tsx +0 -257
  409. package/src/components/domain/chat/Composer/parts/ComposerPopover.tsx +0 -221
  410. package/src/components/domain/chat/Composer/parts/ComposerPopoverSource.test.mjs +0 -71
  411. package/src/components/domain/chat/Composer/parts/ComposerProjectPicker.stories.tsx +0 -260
  412. package/src/components/domain/chat/Composer/parts/ComposerProjectPicker.tsx +0 -246
  413. package/src/components/domain/chat/Composer/parts/ComposerProjectPickerSource.test.mjs +0 -46
  414. package/src/components/domain/chat/Composer/parts/ComposerQueue.stories.tsx +0 -275
  415. package/src/components/domain/chat/Composer/parts/ComposerQueue.tsx +0 -155
  416. package/src/components/domain/chat/Composer/parts/ComposerQueueSource.test.mjs +0 -95
  417. package/src/components/domain/chat/Composer/parts/ComposerVoiceInput.stories.tsx +0 -77
  418. package/src/components/domain/chat/Composer/parts/ComposerVoiceInput.tsx +0 -70
  419. package/src/components/domain/chat/Composer/parts/mountChip.ts +0 -21
  420. package/src/components/domain/chat/ContextUsage/ContextUsage.stories.tsx +0 -62
  421. package/src/components/domain/chat/ContextUsage/index.tsx +0 -69
  422. package/src/components/domain/chat/ExecutionSummary/ExecutionSummary.stories.tsx +0 -238
  423. package/src/components/domain/chat/ExecutionSummary/ExecutionSummarySource.test.mjs +0 -210
  424. package/src/components/domain/chat/ExecutionSummary/index.tsx +0 -487
  425. package/src/components/domain/chat/Message/Message.stories.tsx +0 -264
  426. package/src/components/domain/chat/Message/index.tsx +0 -44
  427. package/src/components/domain/chat/MessageActions/MessageActions.stories.tsx +0 -132
  428. package/src/components/domain/chat/MessageActions/MessageActionsSource.test.mjs +0 -79
  429. package/src/components/domain/chat/MessageActions/index.tsx +0 -186
  430. package/src/components/domain/chat/PlanCard/PlanCard.stories.tsx +0 -87
  431. package/src/components/domain/chat/PlanCard/index.tsx +0 -170
  432. package/src/components/domain/chat/RichContent/RichContent.stories.tsx +0 -102
  433. package/src/components/domain/chat/RichContent/RichContentSource.test.mjs +0 -82
  434. package/src/components/domain/chat/RichContent/index.tsx +0 -465
  435. package/src/components/domain/chat/SubAgentThread/SubAgentThread.stories.tsx +0 -119
  436. package/src/components/domain/chat/SubAgentThread/index.tsx +0 -104
  437. package/src/components/domain/chat/Thinking/Thinking.stories.tsx +0 -196
  438. package/src/components/domain/chat/Thinking/ThinkingInlineSource.test.mjs +0 -154
  439. package/src/components/domain/chat/Thinking/index.tsx +0 -237
  440. package/src/components/domain/chat/ToolCallRow/ToolCallRow.stories.tsx +0 -105
  441. package/src/components/domain/chat/ToolCallRow/ToolCallRowSource.test.mjs +0 -83
  442. package/src/components/domain/chat/ToolCallRow/index.tsx +0 -113
  443. package/src/components/domain/chat/Transcript/Transcript.stories.tsx +0 -296
  444. package/src/components/domain/chat/Transcript/TranscriptSource.test.mjs +0 -189
  445. package/src/components/domain/chat/Transcript/index.tsx +0 -187
  446. package/src/components/domain/chat/TranscriptSpine/TranscriptSpine.stories.tsx +0 -124
  447. package/src/components/domain/chat/TranscriptSpine/index.tsx +0 -245
  448. package/src/components/domain/chat/UserTurn/UserTurn.stories.tsx +0 -176
  449. package/src/components/domain/chat/UserTurn/UserTurnSource.test.mjs +0 -150
  450. package/src/components/domain/chat/UserTurn/index.tsx +0 -194
  451. package/src/components/domain/chat/index.ts +0 -22
  452. package/src/components/domain/desktop/DesktopAccountMenuView/DesktopAccountMenuView.stories.tsx +0 -116
  453. package/src/components/domain/desktop/DesktopAccountMenuView/DesktopAccountMenuViewSource.test.mjs +0 -80
  454. package/src/components/domain/desktop/DesktopAccountMenuView/index.tsx +0 -355
  455. package/src/components/domain/desktop/DesktopAppearanceSettings/DesktopAppearanceSettings.stories.tsx +0 -96
  456. package/src/components/domain/desktop/DesktopAppearanceSettings/DesktopAppearanceSettingsSource.test.mjs +0 -89
  457. package/src/components/domain/desktop/DesktopAppearanceSettings/index.tsx +0 -155
  458. package/src/components/domain/desktop/DesktopAssistantConfigView/DesktopAssistantConfigView.stories.tsx +0 -275
  459. package/src/components/domain/desktop/DesktopAssistantConfigView/DesktopAssistantConfigViewSource.test.mjs +0 -37
  460. package/src/components/domain/desktop/DesktopAssistantConfigView/index.tsx +0 -221
  461. package/src/components/domain/desktop/DesktopCatalogView/DesktopCatalogView.stories.tsx +0 -537
  462. package/src/components/domain/desktop/DesktopCatalogView/DesktopCatalogViewSource.test.mjs +0 -339
  463. package/src/components/domain/desktop/DesktopCatalogView/index.tsx +0 -1074
  464. package/src/components/domain/desktop/DesktopChatBranchDivider/DesktopChatBranchDivider.stories.tsx +0 -58
  465. package/src/components/domain/desktop/DesktopChatBranchDivider/index.tsx +0 -33
  466. package/src/components/domain/desktop/DesktopChatEmptyStateView/DesktopChatEmptyStateView.stories.tsx +0 -75
  467. package/src/components/domain/desktop/DesktopChatEmptyStateView/DesktopChatEmptyStateViewSource.test.mjs +0 -54
  468. package/src/components/domain/desktop/DesktopChatEmptyStateView/index.tsx +0 -64
  469. package/src/components/domain/desktop/DesktopChatHeaderView/DesktopChatHeaderView.stories.tsx +0 -83
  470. package/src/components/domain/desktop/DesktopChatHeaderView/DesktopChatHeaderViewSource.test.mjs +0 -126
  471. package/src/components/domain/desktop/DesktopChatHeaderView/index.tsx +0 -169
  472. package/src/components/domain/desktop/DesktopChatMessageView/DesktopChatMessageView.stories.tsx +0 -170
  473. package/src/components/domain/desktop/DesktopChatMessageView/DesktopChatMessageViewSource.test.mjs +0 -47
  474. package/src/components/domain/desktop/DesktopChatMessageView/index.tsx +0 -213
  475. package/src/components/domain/desktop/DesktopChatTurnView/DesktopChatTurnView.stories.tsx +0 -498
  476. package/src/components/domain/desktop/DesktopChatTurnView/DesktopChatTurnViewSource.test.mjs +0 -187
  477. package/src/components/domain/desktop/DesktopChatTurnView/index.tsx +0 -490
  478. package/src/components/domain/desktop/DesktopComposer/DesktopComposer.stories.tsx +0 -195
  479. package/src/components/domain/desktop/DesktopComposer/DesktopComposerModelPickerSource.test.mjs +0 -132
  480. package/src/components/domain/desktop/DesktopComposer/DesktopComposerMountChipSource.test.mjs +0 -43
  481. package/src/components/domain/desktop/DesktopComposer/DesktopComposerResponsiveSource.test.mjs +0 -44
  482. package/src/components/domain/desktop/DesktopComposer/DesktopMcpFormThemeSource.test.mjs +0 -30
  483. package/src/components/domain/desktop/DesktopComposer/index.tsx +0 -206
  484. package/src/components/domain/desktop/DesktopConnectorDetailView/DesktopConnectorDetailView.stories.tsx +0 -72
  485. package/src/components/domain/desktop/DesktopConnectorDetailView/DesktopConnectorDetailViewSource.test.mjs +0 -81
  486. package/src/components/domain/desktop/DesktopConnectorDetailView/index.tsx +0 -301
  487. package/src/components/domain/desktop/DesktopHomeView/DesktopHomeView.stories.tsx +0 -103
  488. package/src/components/domain/desktop/DesktopHomeView/DesktopHomeViewSource.test.mjs +0 -51
  489. package/src/components/domain/desktop/DesktopHomeView/index.tsx +0 -122
  490. package/src/components/domain/desktop/DesktopLibraryAuthorizationDialog/DesktopLibraryAuthorizationDialog.stories.tsx +0 -55
  491. package/src/components/domain/desktop/DesktopLibraryAuthorizationDialog/DesktopLibraryAuthorizationDialogSource.test.mjs +0 -22
  492. package/src/components/domain/desktop/DesktopLibraryAuthorizationDialog/index.tsx +0 -171
  493. package/src/components/domain/desktop/DesktopLibraryPageView/DesktopLibraryPageView.stories.tsx +0 -49
  494. package/src/components/domain/desktop/DesktopLibraryPageView/index.tsx +0 -49
  495. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginView.css +0 -75
  496. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginView.stories.tsx +0 -230
  497. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginViewSource.test.mjs +0 -156
  498. package/src/components/domain/desktop/DesktopLoginView/index.tsx +0 -432
  499. package/src/components/domain/desktop/DesktopOnboardingTourView/DesktopOnboardingTourView.stories.tsx +0 -103
  500. package/src/components/domain/desktop/DesktopOnboardingTourView/DesktopOnboardingTourViewSource.test.mjs +0 -57
  501. package/src/components/domain/desktop/DesktopOnboardingTourView/index.tsx +0 -189
  502. package/src/components/domain/desktop/DesktopPet/DesktopPet.fixture.ts +0 -243
  503. package/src/components/domain/desktop/DesktopPet/DesktopPet.stories.tsx +0 -337
  504. package/src/components/domain/desktop/DesktopPet/DesktopPetSource.test.mjs +0 -191
  505. package/src/components/domain/desktop/DesktopPet/index.tsx +0 -591
  506. package/src/components/domain/desktop/DesktopPetSettings/DesktopPetSettings.stories.tsx +0 -159
  507. package/src/components/domain/desktop/DesktopPetSettings/DesktopPetSettingsSource.test.mjs +0 -76
  508. package/src/components/domain/desktop/DesktopPetSettings/index.tsx +0 -140
  509. package/src/components/domain/desktop/DesktopRunStatusView/DesktopRunStatusView.stories.tsx +0 -166
  510. package/src/components/domain/desktop/DesktopRunStatusView/DesktopRunStatusViewSource.test.mjs +0 -51
  511. package/src/components/domain/desktop/DesktopRunStatusView/index.tsx +0 -34
  512. package/src/components/domain/desktop/DesktopSelectionCard/DesktopSelectionCard.stories.tsx +0 -122
  513. package/src/components/domain/desktop/DesktopSelectionCard/DesktopSelectionCardSource.test.mjs +0 -42
  514. package/src/components/domain/desktop/DesktopSelectionCard/index.tsx +0 -75
  515. package/src/components/domain/desktop/DesktopSettingsMemorySection/DesktopSettingsMemorySection.stories.tsx +0 -225
  516. package/src/components/domain/desktop/DesktopSettingsMemorySection/DesktopSettingsMemorySectionSource.test.mjs +0 -105
  517. package/src/components/domain/desktop/DesktopSettingsMemorySection/index.tsx +0 -340
  518. package/src/components/domain/desktop/DesktopSettingsView/DesktopSettingsView.stories.tsx +0 -177
  519. package/src/components/domain/desktop/DesktopSettingsView/DesktopSettingsViewSource.test.mjs +0 -195
  520. package/src/components/domain/desktop/DesktopSettingsView/index.tsx +0 -176
  521. package/src/components/domain/desktop/DesktopShareSelectionBarView/DesktopShareSelectionBarView.stories.tsx +0 -77
  522. package/src/components/domain/desktop/DesktopShareSelectionBarView/DesktopShareSelectionBarViewSource.test.mjs +0 -76
  523. package/src/components/domain/desktop/DesktopShareSelectionBarView/index.tsx +0 -55
  524. package/src/components/domain/desktop/DesktopSidebarView/DesktopSidebarView.stories.tsx +0 -454
  525. package/src/components/domain/desktop/DesktopSidebarView/DesktopSidebarViewSource.test.mjs +0 -388
  526. package/src/components/domain/desktop/DesktopSidebarView/index.tsx +0 -1111
  527. package/src/components/domain/desktop/DesktopSiteReleasesView/DesktopSiteReleasesView.stories.tsx +0 -369
  528. package/src/components/domain/desktop/DesktopSiteReleasesView/DesktopSiteReleasesViewSource.test.mjs +0 -123
  529. package/src/components/domain/desktop/DesktopSiteReleasesView/index.tsx +0 -392
  530. package/src/components/domain/desktop/DesktopSitesListView/DesktopSitesListView.stories.tsx +0 -244
  531. package/src/components/domain/desktop/DesktopSitesListView/DesktopSitesListViewSource.test.mjs +0 -198
  532. package/src/components/domain/desktop/DesktopSitesListView/index.tsx +0 -417
  533. package/src/components/domain/desktop/DesktopSkillsPageView/DesktopSkillsPageView.stories.tsx +0 -230
  534. package/src/components/domain/desktop/DesktopSkillsPageView/DesktopSkillsPageViewSource.test.mjs +0 -149
  535. package/src/components/domain/desktop/DesktopSkillsPageView/index.tsx +0 -235
  536. package/src/components/domain/desktop/DesktopTaskDetailView/index.tsx +0 -111
  537. package/src/components/domain/desktop/DesktopToolCallView/DesktopToolCallListViewSource.test.mjs +0 -302
  538. package/src/components/domain/desktop/DesktopToolCallView/DesktopToolCallView.stories.tsx +0 -409
  539. package/src/components/domain/desktop/DesktopToolCallView/index.tsx +0 -388
  540. package/src/components/domain/desktop/DesktopWorkbenchShell/DesktopWorkbenchShell.stories.tsx +0 -418
  541. package/src/components/domain/desktop/DesktopWorkbenchShell/DesktopWorkbenchShellSource.test.mjs +0 -151
  542. package/src/components/domain/desktop/DesktopWorkbenchShell/index.tsx +0 -167
  543. package/src/components/domain/desktop/DesktopWorkspacePageView/DesktopWorkspacePageView.stories.tsx +0 -135
  544. package/src/components/domain/desktop/DesktopWorkspacePageView/DesktopWorkspacePageViewSource.test.mjs +0 -57
  545. package/src/components/domain/desktop/DesktopWorkspacePageView/index.tsx +0 -114
  546. package/src/components/domain/desktop/DesktopWorkspaceView/DesktopWorkspaceView.stories.tsx +0 -227
  547. package/src/components/domain/desktop/DesktopWorkspaceView/DesktopWorkspaceViewSource.test.mjs +0 -175
  548. package/src/components/domain/desktop/DesktopWorkspaceView/index.tsx +0 -580
  549. package/src/components/domain/desktop/ResourceManagement/ResourceManagement.stories.tsx +0 -19
  550. package/src/components/domain/desktop/ResourceManagement/ResourceManagementSource.test.mjs +0 -54
  551. package/src/components/domain/desktop/ResourceManagement/SharesList.tsx +0 -323
  552. package/src/components/domain/desktop/ResourceManagement/SnapshotViews.tsx +0 -92
  553. package/src/components/domain/desktop/ResourceManagement/SnapshotViewsSource.test.mjs +0 -15
  554. package/src/components/domain/desktop/ResourceManagement/index.tsx +0 -246
  555. package/src/components/domain/desktop/ShareSettingsDialogView/index.tsx +0 -234
  556. package/src/components/domain/desktop/SidePanelEmpty/SidePanelEmpty.stories.tsx +0 -100
  557. package/src/components/domain/desktop/SidePanelEmpty/SidePanelEmptySource.test.mjs +0 -67
  558. package/src/components/domain/desktop/SidePanelEmpty/index.tsx +0 -113
  559. package/src/components/domain/desktop/StarterCapsules/StarterCapsules.stories.tsx +0 -65
  560. package/src/components/domain/desktop/StarterCapsules/StarterCapsulesSource.test.mjs +0 -43
  561. package/src/components/domain/desktop/StarterCapsules/index.tsx +0 -90
  562. package/src/components/domain/desktop/WorkbenchSidePanel/WorkbenchSidePanel.stories.tsx +0 -59
  563. package/src/components/domain/desktop/WorkbenchSidePanel/WorkbenchSidePanelSource.test.mjs +0 -51
  564. package/src/components/domain/desktop/WorkbenchSidePanel/index.tsx +0 -74
  565. package/src/components/domain/desktop/WorkspaceMigrateConfirm/WorkspaceMigrateConfirm.stories.tsx +0 -79
  566. package/src/components/domain/desktop/WorkspaceMigrateConfirm/WorkspaceMigrateConfirmSource.test.mjs +0 -34
  567. package/src/components/domain/desktop/WorkspaceMigrateConfirm/index.tsx +0 -92
  568. package/src/components/domain/desktop/index.ts +0 -64
  569. package/src/components/domain/files/FileBrowser/FileBrowser.stories.tsx +0 -397
  570. package/src/components/domain/files/FileBrowser/FileBrowserSource.test.mjs +0 -75
  571. package/src/components/domain/files/FileBrowser/index.tsx +0 -221
  572. package/src/components/domain/files/FileIcon/FileIcon.stories.tsx +0 -207
  573. package/src/components/domain/files/FileIcon/FileIconSource.test.mjs +0 -39
  574. package/src/components/domain/files/FileIcon/index.tsx +0 -133
  575. package/src/components/domain/files/FilePreviewContentView/FilePreviewContentView.stories.tsx +0 -242
  576. package/src/components/domain/files/FilePreviewContentView/FilePreviewContentViewSource.test.mjs +0 -44
  577. package/src/components/domain/files/FilePreviewContentView/index.tsx +0 -125
  578. package/src/components/domain/files/FileTree/FileTree.stories.tsx +0 -204
  579. package/src/components/domain/files/FileTree/FileTreeSource.test.mjs +0 -18
  580. package/src/components/domain/files/FileTree/index.tsx +0 -106
  581. package/src/components/domain/files/PreviewDialog/PreviewDialog.stories.tsx +0 -178
  582. package/src/components/domain/files/PreviewDialog/PreviewDialogSource.test.mjs +0 -92
  583. package/src/components/domain/files/PreviewDialog/index.tsx +0 -294
  584. package/src/components/domain/files/index.ts +0 -5
  585. package/src/components/domain/index.ts +0 -8
  586. package/src/components/domain/office/CsvPreview/CsvPreview.stories.tsx +0 -264
  587. package/src/components/domain/office/CsvPreview/CsvPreviewSource.test.mjs +0 -77
  588. package/src/components/domain/office/CsvPreview/index.tsx +0 -224
  589. package/src/components/domain/office/OfficePreview/OfficePreview.stories.tsx +0 -265
  590. package/src/components/domain/office/OfficePreview/OfficePreviewDialog.stories.tsx +0 -71
  591. package/src/components/domain/office/OfficePreview/OfficePreviewDialog.tsx +0 -43
  592. package/src/components/domain/office/OfficePreview/OfficePreviewSource.test.mjs +0 -126
  593. package/src/components/domain/office/OfficePreview/index.tsx +0 -782
  594. package/src/components/domain/office/PdfPreview/PdfPreview.stories.tsx +0 -280
  595. package/src/components/domain/office/PdfPreview/PdfPreviewDialog.stories.tsx +0 -61
  596. package/src/components/domain/office/PdfPreview/PdfPreviewDialog.tsx +0 -61
  597. package/src/components/domain/office/PdfPreview/PdfPreviewSource.test.mjs +0 -70
  598. package/src/components/domain/office/PdfPreview/index.tsx +0 -217
  599. package/src/components/domain/office/index.ts +0 -5
  600. package/src/components/domain/skills/McpServerListView/McpServerListView.stories.tsx +0 -510
  601. package/src/components/domain/skills/McpServerListView/McpServerListViewSource.test.mjs +0 -101
  602. package/src/components/domain/skills/McpServerListView/index.tsx +0 -250
  603. package/src/components/domain/skills/SkillAvatarView/SkillAvatarView.stories.tsx +0 -121
  604. package/src/components/domain/skills/SkillAvatarView/SkillAvatarViewSource.test.mjs +0 -67
  605. package/src/components/domain/skills/SkillAvatarView/index.tsx +0 -112
  606. package/src/components/domain/skills/SkillCardView/SkillCardView.stories.tsx +0 -374
  607. package/src/components/domain/skills/SkillCardView/SkillCardViewSource.test.mjs +0 -35
  608. package/src/components/domain/skills/SkillCardView/index.tsx +0 -88
  609. package/src/components/domain/skills/SkillDetailPanelView/SkillDetailPanelView.stories.tsx +0 -113
  610. package/src/components/domain/skills/SkillDetailPanelView/index.tsx +0 -115
  611. package/src/components/domain/skills/SkillDetailView/SkillDetailView.stories.tsx +0 -274
  612. package/src/components/domain/skills/SkillDetailView/index.tsx +0 -121
  613. package/src/components/domain/skills/SkillImportDialogView/SkillImportDialogView.stories.tsx +0 -128
  614. package/src/components/domain/skills/SkillImportDialogView/SkillImportDialogViewSource.test.mjs +0 -11
  615. package/src/components/domain/skills/SkillImportDialogView/index.tsx +0 -147
  616. package/src/components/domain/skills/ToolDetailModalView/ToolDetailModalView.stories.tsx +0 -160
  617. package/src/components/domain/skills/ToolDetailModalView/ToolDetailModalViewSource.test.mjs +0 -99
  618. package/src/components/domain/skills/ToolDetailModalView/index.tsx +0 -160
  619. package/src/components/domain/skills/index.ts +0 -7
  620. package/src/components/domain/tasks/ScheduledTaskCardView/ScheduledTaskCardView.stories.tsx +0 -120
  621. package/src/components/domain/tasks/ScheduledTaskCardView/ScheduledTaskCardViewSource.test.mjs +0 -40
  622. package/src/components/domain/tasks/ScheduledTaskCardView/index.tsx +0 -135
  623. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/ScheduledTaskDeleteDialog.stories.tsx +0 -56
  624. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/ScheduledTaskDeleteDialogSource.test.mjs +0 -35
  625. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/index.tsx +0 -73
  626. package/src/components/domain/tasks/ScheduledTaskDetailView/ScheduledTaskDetailView.stories.tsx +0 -121
  627. package/src/components/domain/tasks/ScheduledTaskDetailView/ScheduledTaskDetailViewSource.test.mjs +0 -115
  628. package/src/components/domain/tasks/ScheduledTaskDetailView/index.tsx +0 -223
  629. package/src/components/domain/tasks/ScheduledTasksSpaceView/ScheduledTasksSpaceView.stories.tsx +0 -526
  630. package/src/components/domain/tasks/ScheduledTasksSpaceView/ScheduledTasksSpaceViewSource.test.mjs +0 -85
  631. package/src/components/domain/tasks/ScheduledTasksSpaceView/index.tsx +0 -118
  632. package/src/components/domain/tasks/index.ts +0 -4
  633. package/src/components/domain/theme/SkinManager.stories.tsx +0 -43
  634. package/src/components/domain/theme/SkinManagerUI.tsx +0 -382
  635. package/src/components/domain/theme/ThemeDemo.stories.tsx +0 -12
  636. package/src/components/domain/theme/ThemeDemo.tsx +0 -224
  637. package/src/components/index.ts +0 -11
  638. package/src/components/primitives/Avatar/Avatar.stories.tsx +0 -170
  639. package/src/components/primitives/Avatar/AvatarSource.test.mjs +0 -37
  640. package/src/components/primitives/Avatar/index.tsx +0 -180
  641. package/src/components/primitives/BackTop/BackTop.stories.tsx +0 -122
  642. package/src/components/primitives/BackTop/BackTopSource.test.mjs +0 -61
  643. package/src/components/primitives/BackTop/index.tsx +0 -93
  644. package/src/components/primitives/Badge/Badge.stories.tsx +0 -376
  645. package/src/components/primitives/Badge/BadgeSource.test.mjs +0 -27
  646. package/src/components/primitives/Badge/index.tsx +0 -65
  647. package/src/components/primitives/Button/Button.stories.tsx +0 -287
  648. package/src/components/primitives/Button/ButtonSource.test.mjs +0 -84
  649. package/src/components/primitives/Button/index.tsx +0 -219
  650. package/src/components/primitives/Card/Card.stories.tsx +0 -186
  651. package/src/components/primitives/Card/CardSource.test.mjs +0 -73
  652. package/src/components/primitives/Card/index.tsx +0 -137
  653. package/src/components/primitives/Checkbox/Checkbox.stories.tsx +0 -79
  654. package/src/components/primitives/Checkbox/CheckboxSource.test.mjs +0 -43
  655. package/src/components/primitives/Checkbox/index.tsx +0 -87
  656. package/src/components/primitives/Chip/Chip.stories.tsx +0 -149
  657. package/src/components/primitives/Chip/ChipSource.test.mjs +0 -73
  658. package/src/components/primitives/Chip/index.tsx +0 -252
  659. package/src/components/primitives/Divider/Divider.stories.tsx +0 -68
  660. package/src/components/primitives/Divider/DividerSource.test.mjs +0 -26
  661. package/src/components/primitives/Divider/index.tsx +0 -65
  662. package/src/components/primitives/Dropdown/Dropdown.stories.tsx +0 -38
  663. package/src/components/primitives/Dropdown/DropdownSource.test.mjs +0 -23
  664. package/src/components/primitives/Dropdown/index.tsx +0 -29
  665. package/src/components/primitives/EmptyState/EmptyState.stories.tsx +0 -159
  666. package/src/components/primitives/EmptyState/EmptyStateSource.test.mjs +0 -169
  667. package/src/components/primitives/EmptyState/index.tsx +0 -185
  668. package/src/components/primitives/ErrorCard/ErrorCard.stories.tsx +0 -50
  669. package/src/components/primitives/ErrorCard/index.tsx +0 -78
  670. package/src/components/primitives/Field/Field.stories.tsx +0 -208
  671. package/src/components/primitives/Field/FieldSource.test.mjs +0 -70
  672. package/src/components/primitives/Field/index.tsx +0 -297
  673. package/src/components/primitives/InlineMessage/InlineMessage.stories.tsx +0 -137
  674. package/src/components/primitives/InlineMessage/InlineMessageSource.test.mjs +0 -50
  675. package/src/components/primitives/InlineMessage/index.tsx +0 -141
  676. package/src/components/primitives/Input/Input.stories.tsx +0 -30
  677. package/src/components/primitives/Input/index.tsx +0 -12
  678. package/src/components/primitives/Keycap/Keycap.stories.tsx +0 -93
  679. package/src/components/primitives/Keycap/KeycapSource.test.mjs +0 -30
  680. package/src/components/primitives/Keycap/index.tsx +0 -67
  681. package/src/components/primitives/Menu/Menu.stories.tsx +0 -416
  682. package/src/components/primitives/Menu/MenuEmptySource.test.mjs +0 -23
  683. package/src/components/primitives/Menu/MenuSource.test.mjs +0 -207
  684. package/src/components/primitives/Menu/index.tsx +0 -923
  685. package/src/components/primitives/Pagination/Pagination.stories.tsx +0 -77
  686. package/src/components/primitives/Pagination/PaginationSource.test.mjs +0 -24
  687. package/src/components/primitives/Pagination/index.tsx +0 -85
  688. package/src/components/primitives/Pagination/pagination.ts +0 -25
  689. package/src/components/primitives/Pagination/paginationModel.test.mjs +0 -18
  690. package/src/components/primitives/ProgressBar/ProgressBar.stories.tsx +0 -103
  691. package/src/components/primitives/ProgressBar/ProgressBarSource.test.mjs +0 -44
  692. package/src/components/primitives/ProgressBar/index.tsx +0 -68
  693. package/src/components/primitives/Radio/Radio.stories.tsx +0 -84
  694. package/src/components/primitives/Radio/RadioSource.test.mjs +0 -38
  695. package/src/components/primitives/Radio/index.tsx +0 -161
  696. package/src/components/primitives/SegmentedControl/SegmentedControl.stories.tsx +0 -110
  697. package/src/components/primitives/SegmentedControl/SegmentedControlSource.test.mjs +0 -75
  698. package/src/components/primitives/SegmentedControl/index.tsx +0 -188
  699. package/src/components/primitives/Select/Select.stories.tsx +0 -158
  700. package/src/components/primitives/Select/SelectSource.test.mjs +0 -94
  701. package/src/components/primitives/Select/index.tsx +0 -406
  702. package/src/components/primitives/Spinner/index.tsx +0 -58
  703. package/src/components/primitives/Switch/Switch.stories.tsx +0 -64
  704. package/src/components/primitives/Switch/SwitchSource.test.mjs +0 -38
  705. package/src/components/primitives/Switch/index.tsx +0 -84
  706. package/src/components/primitives/Tabs/Tabs.stories.tsx +0 -230
  707. package/src/components/primitives/Tabs/TabsSource.test.mjs +0 -91
  708. package/src/components/primitives/Tabs/index.tsx +0 -183
  709. package/src/components/primitives/index.ts +0 -24
  710. package/src/examples/ResourceManagementExample.tsx +0 -119
  711. package/src/examples/SiteWorkbenchExample.tsx +0 -96
  712. package/src/hooks/index.ts +0 -7
  713. package/src/hooks/useClickOutside.ts +0 -20
  714. package/src/hooks/useDragReorder.ts +0 -29
  715. package/src/hooks/useImeAwareEnter.ts +0 -59
  716. package/src/hooks/useImeAwareEnterSource.test.mjs +0 -65
  717. package/src/hooks/useKeyboard.ts +0 -16
  718. package/src/hooks/usePopover.ts +0 -67
  719. package/src/hooks/useSelectedOptionLocator.ts +0 -33
  720. package/src/hooks/useSidebarResize.ts +0 -107
  721. package/src/hooks/useTenantTheme.ts +0 -53
  722. package/src/hooks/useUnifiedTheme.ts +0 -85
  723. package/src/index.ts +0 -6
  724. package/src/lib/InjectedStyleTokenMirrorSource.test.mjs +0 -67
  725. package/src/lib/about-window.test.mjs +0 -46
  726. package/src/lib/about-window.ts +0 -218
  727. package/src/lib/appearance.test.mjs +0 -283
  728. package/src/lib/appearance.ts +0 -46
  729. package/src/lib/browser-annotation-popup.ts +0 -151
  730. package/src/lib/focusTrap.ts +0 -51
  731. package/src/lib/index.ts +0 -5
  732. package/src/lib/shortcut.test.mjs +0 -100
  733. package/src/lib/shortcut.ts +0 -97
  734. package/src/lib/twMergeOw.ts +0 -18
  735. package/src/lib/utils.ts +0 -6
  736. package/src/screens/Browser.stories.tsx +0 -353
  737. package/src/screens/Chat.stories.tsx +0 -808
  738. package/src/screens/Home.stories.tsx +0 -253
  739. package/src/screens/Login.stories.tsx +0 -134
  740. package/src/screens/McpManager.stories.tsx +0 -159
  741. package/src/screens/Onboarding.stories.tsx +0 -155
  742. package/src/screens/ScheduledTasks.stories.tsx +0 -134
  743. package/src/screens/ScreenFrameSource.test.mjs +0 -77
  744. package/src/screens/SettingsAppearance.stories.tsx +0 -117
  745. package/src/screens/SettingsMemory.stories.tsx +0 -128
  746. package/src/screens/SettingsModels.stories.tsx +0 -228
  747. package/src/screens/SettingsSections.stories.tsx +0 -164
  748. package/src/screens/Share.stories.tsx +0 -202
  749. package/src/screens/SharePage.stories.tsx +0 -29
  750. package/src/screens/Sites.stories.tsx +0 -183
  751. package/src/screens/Skills.stories.tsx +0 -83
  752. package/src/screens/Workspace.stories.tsx +0 -191
  753. package/src/screens/_home.tsx +0 -46
  754. package/src/screens/_screen.tsx +0 -355
  755. package/src/screens/_settingsNav.ts +0 -27
  756. package/src/screens/_skillsCatalog.tsx +0 -372
  757. package/src/theme/SkinDenylistSyncSource.test.mjs +0 -124
  758. package/src/theme/__tests__/skins.test.mjs +0 -84
  759. package/src/theme/core/semanticAdapter.ts +0 -116
  760. package/src/theme/core/skin.ts +0 -605
  761. package/src/theme/core/skinScoped.ts +0 -289
  762. package/src/theme/core/tenantTheme.test.mjs +0 -127
  763. package/src/theme/core/tenantTheme.ts +0 -124
  764. package/src/theme/core/types.ts +0 -60
  765. package/src/theme/core/unifiedTheme.ts +0 -157
  766. package/src/theme/index.ts +0 -33
  767. package/src/theme/providers/BrandingProvider.tsx +0 -57
  768. package/src/theme/providers/ThemeProvider.tsx +0 -221
  769. package/src/theme/skinDs2PropertyGate.test.mjs +0 -109
  770. package/src/theme/skins/index.ts +0 -107
  771. package/src/theme/utils/cssSafety.ts +0 -92
  772. package/src/theme/utils/skinManager.ts +0 -159
  773. package/src/theme/utils/themeApplier.ts +0 -75
  774. package/src/tokens/DesktopSurfacesSweep15Source.test.mjs +0 -77
  775. package/src/tokens/SharedStyleSheetsSource.test.mjs +0 -90
  776. package/src/tokens/TailwindThemeSupplySource.test.mjs +0 -129
  777. package/src/tokens/base.ts +0 -199
  778. package/src/tokens/dark.ts +0 -288
  779. package/src/tokens/index.ts +0 -4
  780. package/src/tokens/light.ts +0 -320
  781. package/src/tokens/tailwind.ts +0 -216
  782. package/src/types/desktop-pet.ts +0 -100
  783. package/src/types/file-browser.ts +0 -51
  784. package/src/types/file-tree.ts +0 -34
  785. package/src/types/index.ts +0 -3
  786. package/src/types/xspreadsheet.d.ts +0 -4
  787. package/src/utils/cn.ts +0 -6
  788. package/src/utils/glyphColor.ts +0 -32
  789. package/src/utils/index.ts +0 -4
  790. package/src/utils/localPathInline.test.mjs +0 -45
  791. package/src/utils/localPathInline.ts +0 -49
  792. package/src/utils/markdownFileRefs.test.mjs +0 -88
  793. package/src/utils/markdownFileRefs.ts +0 -140
  794. package/src/utils/office-excel.ts +0 -452
  795. package/src/utils/shiki.ts +0 -156
@@ -1,857 +0,0 @@
1
- "use client"
2
-
3
- import { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from "react"
4
- import { cn } from "../../../../lib/utils"
5
- import { Icon, type IconName } from "../../../composite/Icons"
6
- import { Button } from "../../../primitives/Button"
7
- import { EmptyState } from "../../../primitives/EmptyState"
8
- import { Menu, type MenuEntry } from "../../../primitives/Menu"
9
- import { ProgressBar } from "../../../primitives/ProgressBar"
10
- import { FileIcon, resolveFileIcon } from "../../files/FileIcon"
11
-
12
- /**
13
- * Attachment — 聊天附件(DS 2.0 聊天域 · 蓝图批次③「Attachment(合并 AttachmentCard /
14
- * Attachments / FileReferenceCard(+s) / ImageCard)」)。
15
- *
16
- * 四个形态,一套状态:
17
- * - `card` 横卡:FileIcon 单色字形 + 文件名 + meta mono 读数 + 操作 Menu(旧 FileReferenceCard);
18
- * - `tile` 方片 112×112:Composer 附件条里的非图附件(旧 AttachmentCard 无缩略档);
19
- * - `image` 图片方片 112×112:缩略图 + scrim 遮罩操作(旧 AttachmentCard 缩略档);
20
- * - `media` 富媒体图卡:最大 420 宽 + 可选说明行(旧 ImageCard)。
21
- * 行集走同目录 `AttachmentList`(strip 横排=旧 Attachments,stack 竖列=旧 FileReferenceCards)。
22
- *
23
- * 立面 §5:卡是贴地之物 —— 1px `--ow-border` + 0 影,hover 走所在表面的 `--ow-hover`→`--ow-press`
24
- * (不是 pop 档,卡不是弹层);只有操作 Menu 那一层是离地之物,立面由 `Menu` 原语承担。
25
- *
26
- * 状态 §6:default / hover / press / focus-visible(`ow-focus-ring` 2px 环)/ disabled 逐 token /
27
- * 上传中(`ProgressBar` + mono 读数)/ 失败(error tint +「重试」,R1 双编码:色之外还有文字与按钮)/ 完成。
28
- *
29
- * 度量 §7:圆角 12(`--ow-radius-card`);文件名 sans、meta 读数一律 mono + tabular-nums;
30
- * 文件类型图标=单色字形 + 扩展名 mono 标签(`FileIcon`),禁多彩类型底。
31
- *
32
- * R3 中性件:聊天里的附件没有叙事位置 —— 不带信标点、不引荧黄,品牌感只来自字体、灰阶、间距。
33
- * 上传进度用 `--ow-progress-fill`(墨/月白)而不是荧黄(§4「其余角色永不荧黄」)。
34
- */
35
-
36
- /* ------------------------------------------------------------------ *
37
- * 数据模型
38
- * ------------------------------------------------------------------ */
39
-
40
- /** 文件语义分类。旧 `FileReferenceTone` 的规范名。 */
41
- export type AttachmentTone =
42
- | "file"
43
- | "markdown"
44
- | "presentation"
45
- | "document"
46
- | "spreadsheet"
47
- | "image"
48
- | "video"
49
- | "pdf"
50
- | "web"
51
- | "code"
52
-
53
- /** 一条文件引用。旧 `FileReferenceItem` 的规范名,字段逐一保留。 */
54
- export type AttachmentItem = {
55
- id?: string
56
- name: string
57
- path: string
58
- /** 扩展名标签覆盖(默认从 path/name 推断),透传给 FileIcon 的右下角标签。 */
59
- badge?: string
60
- /** 类型文案覆盖(业务文案,如来源/价格)。 */
61
- typeLabel?: string
62
- }
63
- /* R2:`tone`(V1 的多彩文件类别)从本类型摘除——DS 2.0 §7「文件类型图标=单色字形 +
64
- 扩展名 mono 标签,禁多彩类型底」,全库没有也不会有消费方,留着是个渲不出来的承诺。
65
- 语义分类本身还在 `AttachmentMeta.tone`(inferAttachmentMeta 的返回),宿主要分类判断
66
- 直接读那里。 */
67
-
68
- /** 操作菜单里的一个应用/动作。旧 `FileReferenceOpenWithOption` 的规范名。 */
69
- export type AttachmentOpenOption = {
70
- id: string
71
- name: string
72
- path?: string
73
- isDefault?: boolean
74
- kind?: "app" | "action"
75
- icon?: string
76
- iconName?: IconName
77
- iconUrl?: string
78
- disabled?: boolean
79
- }
80
-
81
- /** 操作菜单条目(含分隔线与分组标题)。旧 `FileReferenceMenuOption` 的规范名。 */
82
- export type AttachmentMenuOption =
83
- | AttachmentOpenOption
84
- | { id: string; kind: "divider"; name?: string }
85
- | { id: string; kind: "header"; name: string }
86
-
87
- /** 上传生命周期。 */
88
- export type AttachmentStatus = "uploading" | "error" | "done"
89
-
90
- export type AttachmentVariant = "card" | "tile" | "image" | "media"
91
-
92
- type AttachmentMeta = {
93
- badge: string
94
- label: string
95
- tone: AttachmentTone
96
- }
97
-
98
- /* ------------------------------------------------------------------ *
99
- * 类型推断
100
- * ------------------------------------------------------------------ */
101
-
102
- /** 从路径或文件名推断扩展名标签、类型文案与 tone。旧 `inferFileReferenceMeta` 的规范名。 */
103
- export function inferAttachmentMeta(pathOrName: string): AttachmentMeta {
104
- const ext = (pathOrName.match(/\.([A-Za-z0-9]+)(?::\d+)?$/)?.[1] ?? "").toLowerCase()
105
- if (ext === "md" || ext === "markdown") return { badge: "MD", label: "Markdown", tone: "markdown" }
106
- if (["ppt", "pptx"].includes(ext)) return { badge: "P", label: "演示文稿", tone: "presentation" }
107
- if (["doc", "docx"].includes(ext)) return { badge: "W", label: "文档", tone: "document" }
108
- if (["xls", "xlsx", "csv"].includes(ext)) return { badge: "X", label: "表格", tone: "spreadsheet" }
109
- if (["png", "jpg", "jpeg", "gif", "webp", "bmp", "svg", "heic", "heif", "tif", "tiff"].includes(ext))
110
- return { badge: "IMG", label: "图片", tone: "image" }
111
- if (["mp4", "mov", "webm", "avi", "mkv"].includes(ext)) return { badge: "VID", label: "视频", tone: "video" }
112
- if (ext === "pdf") return { badge: "PDF", label: "PDF", tone: "pdf" }
113
- if (ext === "html" || ext === "htm") return { badge: "HTML", label: "网页", tone: "web" }
114
- if (["py", "ts", "tsx", "js", "jsx", "go", "rs", "java", "cpp", "c", "h", "css", "json", "yaml", "yml"].includes(ext))
115
- return { badge: ext.toUpperCase().slice(0, 3), label: "代码", tone: "code" }
116
- return { badge: ext ? ext.toUpperCase().slice(0, 3) : "FILE", label: "文件", tone: "file" }
117
- }
118
-
119
- function attachmentMeta(item: AttachmentItem): AttachmentMeta {
120
- const inferred = inferAttachmentMeta(item.path || item.name)
121
- return {
122
- badge: (item.badge ?? inferred.badge).trim().toUpperCase().slice(0, 4) || "FILE",
123
- label: item.typeLabel ?? inferred.label,
124
- tone: inferred.tone,
125
- }
126
- }
127
-
128
- /* ------------------------------------------------------------------ *
129
- * 操作菜单(Menu 配方)
130
- * ------------------------------------------------------------------ */
131
-
132
- function isOpenOption(option: AttachmentMenuOption): option is AttachmentOpenOption {
133
- return option.kind !== "divider" && option.kind !== "header"
134
- }
135
-
136
- /** 主进程枚举应用是分两拨回的:先回名字、后补图标。图标没齐就还得再刷一次。 */
137
- function areOptionsComplete(options: AttachmentMenuOption[]): boolean {
138
- const apps = options.filter((option): option is AttachmentOpenOption => option.kind === "app")
139
- return apps.length === 0 || apps.every((option) => Boolean(option.iconUrl || option.iconName || option.icon))
140
- }
141
-
142
- function optionKey(option: AttachmentMenuOption, index: number): string {
143
- return `${option.id}::${isOpenOption(option) ? (option.path ?? "") : index}`
144
- }
145
-
146
- function optionIcon(option: AttachmentOpenOption): ReactNode {
147
- if (option.iconUrl)
148
- return (
149
- <img
150
- src={option.iconUrl}
151
- alt=""
152
- className="w-4 h-4 object-contain [border-radius:var(--ow-radius-2xs)]"
153
- aria-hidden="true"
154
- />
155
- )
156
- if (option.iconName) return <Icon name={option.iconName} size={15} />
157
- return option.icon ?? null
158
- }
159
-
160
- function toMenuEntries(options: AttachmentMenuOption[]): MenuEntry[] {
161
- return options.map((option, index) => {
162
- const key = optionKey(option, index)
163
- if (option.kind === "divider") return { type: "separator", key }
164
- if (option.kind === "header") return { type: "group", key, label: option.name }
165
- return { key, label: option.name, icon: optionIcon(option), disabled: option.disabled }
166
- })
167
- }
168
-
169
- /**
170
- * 「打开方式」选项加载:闲时预取 + 图标补齐后台重刷 + 换文件即作废。
171
- * 第一次点开常常在等主进程枚举可用应用,所以空闲期先跑一遍,点开时通常已经在手里了。
172
- */
173
- function useOpenWithOptions(
174
- onRequestOptions: (() => Promise<AttachmentMenuOption[]> | AttachmentMenuOption[]) | undefined,
175
- optionsKey: string | undefined,
176
- prefetch: boolean,
177
- ) {
178
- const [options, setOptions] = useState<AttachmentMenuOption[]>([])
179
- const [loading, setLoading] = useState(false)
180
- const [loaded, setLoaded] = useState(false)
181
- const keyRef = useRef(optionsKey)
182
- keyRef.current = optionsKey
183
- const requestRef = useRef(onRequestOptions)
184
- requestRef.current = onRequestOptions
185
- const prefetchedRef = useRef<{ key: string | undefined; request: Promise<AttachmentMenuOption[]> } | null>(null)
186
-
187
- // 换了文件,上一份选项就不属于当前这条了,一律作废重来。
188
- useEffect(() => {
189
- prefetchedRef.current = null
190
- setOptions([])
191
- setLoaded(false)
192
- setLoading(false)
193
- }, [optionsKey, onRequestOptions])
194
-
195
- useEffect(() => {
196
- if (!prefetch || !onRequestOptions) return
197
- let cancelled = false
198
- const run = () => {
199
- if (cancelled) return
200
- const key = keyRef.current
201
- let request: Promise<AttachmentMenuOption[]>
202
- try {
203
- request = Promise.resolve(onRequestOptions())
204
- } catch {
205
- return
206
- }
207
- prefetchedRef.current = { key, request }
208
- request.catch(() => {
209
- if (prefetchedRef.current?.request === request) prefetchedRef.current = null
210
- })
211
- }
212
- if (typeof window.requestIdleCallback === "function") {
213
- const idleId = window.requestIdleCallback(run, { timeout: 800 })
214
- return () => {
215
- cancelled = true
216
- window.cancelIdleCallback(idleId)
217
- }
218
- }
219
- const timeoutId = window.setTimeout(run, 150)
220
- return () => {
221
- cancelled = true
222
- window.clearTimeout(timeoutId)
223
- }
224
- }, [prefetch, onRequestOptions, optionsKey])
225
-
226
- const load = useCallback(async () => {
227
- const request = requestRef.current
228
- if (!request || loaded) return
229
- const requestedKey = keyRef.current
230
- const apply = (next: AttachmentMenuOption[]): boolean => {
231
- // 请求飞在路上时用户换了文件:结果作废,但别把 loaded 立起来。
232
- if (keyRef.current !== requestedKey) return true
233
- setOptions(next)
234
- const complete = areOptionsComplete(next)
235
- setLoaded(complete)
236
- return complete
237
- }
238
- const refresh = () => {
239
- let result: Promise<AttachmentMenuOption[]> | AttachmentMenuOption[]
240
- try {
241
- result = request()
242
- } catch {
243
- return
244
- }
245
- void Promise.resolve(result)
246
- .then((next) => {
247
- apply(next)
248
- })
249
- .catch(() => {
250
- // 后台补图标失败就留着那份没图标的,总比把菜单清空强。
251
- })
252
- }
253
- const prefetched = prefetchedRef.current
254
- const result = prefetched && prefetched.key === requestedKey ? prefetched.request : request()
255
- if (Array.isArray(result)) {
256
- const complete = apply(result)
257
- prefetchedRef.current = null
258
- if (!complete) refresh()
259
- return
260
- }
261
- setLoading(true)
262
- try {
263
- const complete = apply(await result)
264
- if (prefetchedRef.current?.request === result) prefetchedRef.current = null
265
- if (!complete) refresh()
266
- } finally {
267
- setLoading(false)
268
- }
269
- }, [loaded])
270
-
271
- return { options, loading, load }
272
- }
273
-
274
- export type OpenWithMenuProps = {
275
- /** 触发器文案,默认「打开方式」。 */
276
- label?: string
277
- /** 触发器左侧图标。 */
278
- iconName?: IconName
279
- /** 已经在手里的选项;给了 `onRequestOptions` 就以异步结果为准。 */
280
- options?: AttachmentMenuOption[]
281
- /** 拉取选项(点开时调用,闲时预取一次)。 */
282
- onRequestOptions?: () => Promise<AttachmentMenuOption[]> | AttachmentMenuOption[]
283
- /** 选项变更的身份(一般是文件 path):变了就把缓存作废。 */
284
- optionsKey?: string
285
- /** 选中某项。 */
286
- onSelect?: (option: AttachmentOpenOption) => void
287
- /** 既没有选项也没有加载器时,触发器退化成一个直接打开的按钮。 */
288
- onOpen?: () => void
289
- /** 交给宿主弹原生菜单(桌面端 OS 菜单):给了就不开 web 菜单。 */
290
- onNativeMenu?: () => void
291
- triggerVariant?: "secondary" | "ghost" | "text"
292
- triggerSize?: "sm" | "md"
293
- /** 只出图标不出文案(方片/图片形态的「…」)。 */
294
- iconOnly?: boolean
295
- disabled?: boolean
296
- width?: number
297
- className?: string
298
- }
299
-
300
- /**
301
- * OpenWithMenu — 「打开方式」菜单配方(`Menu` 原语 + 次要按钮触发器)。
302
- *
303
- * 蓝图裁撤了 `OpenWithButton`(工程件 →Menu 配方),这里是它的规范继任者:
304
- * 弹层的立面、翻转、外点关闭、键盘导航全部由 `Menu` 原语承担(portal + fixed,
305
- * 视口下方放不下才向上翻,横向夹在视口内,滚动容器裁不掉它);本配方只管
306
- * 「什么时候去拉选项」这件业务事。
307
- */
308
- export function OpenWithMenu({
309
- label = "打开方式",
310
- iconName,
311
- options: optionsProp,
312
- onRequestOptions,
313
- optionsKey,
314
- onSelect,
315
- onOpen,
316
- onNativeMenu,
317
- triggerVariant = "secondary",
318
- triggerSize = "sm",
319
- iconOnly = false,
320
- disabled = false,
321
- width = 180,
322
- className,
323
- }: OpenWithMenuProps) {
324
- const [open, setOpen] = useState(false)
325
- const remote = useOpenWithOptions(onRequestOptions, optionsKey, Boolean(onRequestOptions) && !onNativeMenu)
326
- const options = onRequestOptions ? remote.options : (optionsProp ?? [])
327
- const entries = useMemo(() => toMenuEntries(options), [options])
328
- const byKey = useMemo(() => {
329
- const map = new Map<string, AttachmentOpenOption>()
330
- options.forEach((option, index) => {
331
- if (isOpenOption(option)) map.set(optionKey(option, index), option)
332
- })
333
- return map
334
- }, [options])
335
-
336
- // 没有任何菜单来源就不是菜单,是一个直接打开的按钮;宿主要弹原生菜单时触发器只负责喊一声。
337
- const bare = !onRequestOptions && !onNativeMenu && options.length === 0
338
- const renderTrigger = (onClick?: () => void) => (
339
- <Button
340
- variant={triggerVariant}
341
- size={triggerSize}
342
- type="button"
343
- data-slot="open-with"
344
- data-ow-part="action"
345
- disabled={disabled}
346
- className={cn(iconOnly ? "w-7 h-7 p-0" : "gap-1 px-2", className)}
347
- aria-label={iconOnly ? label : undefined}
348
- title={iconOnly ? label : undefined}
349
- onClick={onClick}
350
- >
351
- {iconName && <Icon name={iconName} size={14} />}
352
- {iconOnly ? <Icon name="More" size={16} aria-hidden="true" /> : <span>{label}</span>}
353
- {!iconOnly && !bare && <Icon name="ChevDown" size={13} aria-hidden="true" />}
354
- </Button>
355
- )
356
-
357
- if (bare) return renderTrigger(onOpen)
358
- if (onNativeMenu) return renderTrigger(onNativeMenu)
359
-
360
- return (
361
- <Menu
362
- trigger={renderTrigger()}
363
- triggerClassName="inline-flex"
364
- open={open}
365
- onOpenChange={(next) => {
366
- setOpen(next)
367
- if (next) void remote.load()
368
- }}
369
- items={entries}
370
- onSelect={(key) => {
371
- const option = byKey.get(key)
372
- if (option) onSelect?.(option)
373
- }}
374
- empty={remote.loading ? "加载中" : "暂无打开方式"}
375
- align="end"
376
- width={width}
377
- ariaLabel={label}
378
- // 视口再矮也不许把菜单撑出屏外:280 与「视口高减两边留白」取小。
379
- className="max-h-[min(280px,calc(100vh-16px))] overflow-y-auto"
380
- />
381
- )
382
- }
383
-
384
- /* ------------------------------------------------------------------ *
385
- * Attachment
386
- * ------------------------------------------------------------------ */
387
-
388
- export type AttachmentProps = {
389
- /** 文件名(显示名)。 */
390
- name: string
391
- /** 完整路径:进 title 保全值,也作操作菜单缓存的身份。 */
392
- path?: string
393
- /** 形态,见组件说明。 */
394
- variant?: AttachmentVariant
395
- /** meta 读数(大小/类型/尺寸/时间)。不给就按扩展名推断类型文案。 */
396
- meta?: string
397
- /** 应用侧的文件分类(image/video/pdf…),扩展名认不出时兜底。 */
398
- kind?: string
399
- /** 类型图标右下角标签的显式覆盖(≤4 字符);不传按文件名推断。 */
400
- badge?: string
401
- /** 图片/富媒体形态的图源。 */
402
- thumbnail?: string
403
- /** 富媒体形态的说明行。 */
404
- caption?: string
405
- /** 没有图源时的占位读数,如 "cover.jpg · 1600×900"。 */
406
- placeholder?: string
407
- status?: AttachmentStatus
408
- /** 上传进度 0–100。 */
409
- progress?: number
410
- /** 失败的一句人话。 */
411
- errorText?: string
412
- disabled?: boolean
413
- /** 打开这个附件(给了就整块可点)。 */
414
- onOpen?: () => void
415
- onRetry?: () => void
416
- onRemove?: () => void
417
- /** 操作菜单选项(`OpenWithMenu` 配方)。 */
418
- actions?: AttachmentMenuOption[]
419
- onRequestActions?: () => Promise<AttachmentMenuOption[]> | AttachmentMenuOption[]
420
- onAction?: (option: AttachmentOpenOption) => void
421
- /** 交给宿主弹原生菜单。 */
422
- onNativeActionsMenu?: () => void
423
- /** 操作菜单触发器文案,默认「打开方式」。 */
424
- actionsLabel?: string
425
- className?: string
426
- }
427
-
428
- const NAME_CLASS =
429
- "min-w-0 text-[length:var(--ow-fs-ui)] font-medium leading-snug text-[color:var(--ow-text)] overflow-hidden text-ellipsis"
430
- /** 读数一律 mono + tabular-nums(§7)。 */
431
- const META_TEXT_CLASS =
432
- "font-[family-name:var(--ow-font-mono)] tabular-nums text-[length:var(--ow-fs-eyebrow)] leading-snug text-[color:var(--ow-text-3)]"
433
- const META_CLASS = `min-w-0 truncate ${META_TEXT_CLASS}`
434
- /** 体积/尺寸这一截是白名单:不为类型那截让位(shrink-0);max-w-full 只是兜底,
435
- * 防某个畸形长读数把方片撑破。 */
436
- const META_READING_CLASS = `shrink-0 max-w-full truncate ${META_TEXT_CLASS}`
437
-
438
- /**
439
- * 方片 112 宽的 meta 行拆两截:末尾「· 」之后的读数(854 KB / 2.4 MB)是白名单,
440
- * 前面的类型那截才承担省略号。类型那截若与 FileIcon 的扩展名标签重复(DOC/DOCX、
441
- * PDF…),直接摘掉——方片里那枚字形已经在说同一件事,读数才是这行的信息。
442
- *
443
- * 起因:mono 读数比 R1 的 sans 宽,「DOC · 854 KB」在 84px 内容宽里被截成「85…」,
444
- * 体积整段消失(三方对齐轮 R2 退化)。
445
- */
446
- function splitTileMeta(line: string, typeLabel: string | null): { head: string; reading: string } {
447
- const parts = line.split("·").map((part) => part.trim())
448
- if (parts.length < 2 || parts.some((part) => !part)) return { head: "", reading: line }
449
- const reading = parts[parts.length - 1] ?? line
450
- const head = parts.slice(0, -1)
451
- const first = (head[0] ?? "").toUpperCase()
452
- if (typeLabel !== null && (first.startsWith(typeLabel) || typeLabel.startsWith(first))) head.shift()
453
- return { head: head.join(" · "), reading }
454
- }
455
-
456
- function RemoveButton({ onClick, disabled }: { onClick: () => void; disabled?: boolean }) {
457
- return (
458
- <Button
459
- variant="ghost"
460
- size="sm"
461
- type="button"
462
- data-ow-part="remove"
463
- className="w-7 h-7 p-0 shrink-0"
464
- aria-label="移除附件"
465
- title="移除附件"
466
- disabled={disabled}
467
- onClick={(event) => {
468
- event.stopPropagation()
469
- onClick()
470
- }}
471
- icon={<Icon name="Close" size={14} />}
472
- />
473
- )
474
- }
475
-
476
- function RetryButton({ onClick, disabled }: { onClick: () => void; disabled?: boolean }) {
477
- return (
478
- <Button
479
- variant="text"
480
- size="sm"
481
- type="button"
482
- data-ow-part="retry"
483
- className="shrink-0"
484
- disabled={disabled}
485
- onClick={(event) => {
486
- event.stopPropagation()
487
- onClick()
488
- }}
489
- >
490
- 重试
491
- </Button>
492
- )
493
- }
494
-
495
- /** 上传中:进度条走 `--ow-progress-fill`(墨/月白),读数 mono;永不荧黄(§4)。 */
496
- function UploadProgress({ name, progress }: { name: string; progress: number }) {
497
- return <ProgressBar value={progress} size="sm" aria-label={`${name} 上传进度`} className="mt-1" />
498
- }
499
-
500
- export function Attachment({
501
- name,
502
- path,
503
- variant = "card",
504
- meta,
505
- kind,
506
- badge,
507
- thumbnail,
508
- caption,
509
- placeholder,
510
- status = "done",
511
- progress = 0,
512
- errorText = "上传失败",
513
- disabled = false,
514
- onOpen,
515
- onRetry,
516
- onRemove,
517
- actions,
518
- onRequestActions,
519
- onAction,
520
- onNativeActionsMenu,
521
- actionsLabel = "打开方式",
522
- className,
523
- }: AttachmentProps) {
524
- const pct = Math.max(0, Math.min(100, Math.round(progress)))
525
- const inferred = attachmentMeta({ name, path: path ?? name })
526
- // meta 传空串=显式不要这行(可点的卡本身就是打开入口,推断出的类型文案只是重复扩展名)。
527
- const metaText = status === "uploading" ? `上传中 ${pct}%` : (meta ?? inferred.label)
528
- const metaLine = status === "error" ? errorText : metaText
529
- const clickable = Boolean(onOpen) && !disabled
530
- const hasMenu = Boolean(actions?.length || onRequestActions || onNativeActionsMenu)
531
-
532
- const menu = hasMenu ? (
533
- <OpenWithMenu
534
- label={actionsLabel}
535
- options={actions}
536
- onRequestOptions={onRequestActions}
537
- optionsKey={path ?? name}
538
- onSelect={onAction}
539
- onNativeMenu={onNativeActionsMenu}
540
- disabled={disabled}
541
- iconOnly={variant !== "card"}
542
- triggerVariant={variant === "card" ? "secondary" : "ghost"}
543
- />
544
- ) : null
545
-
546
- /* ---- 图片形态:缩略 + scrim 遮罩操作 ---- */
547
- if (variant === "image" || variant === "media") {
548
- const media = variant === "media"
549
- return (
550
- <div
551
- data-slot="attachment"
552
- data-ow-variant={variant}
553
- data-ow-state={status}
554
- title={path ?? name}
555
- className={cn(
556
- "group relative box-border overflow-hidden border [border-radius:var(--ow-radius-card)]",
557
- "bg-[var(--ow-surface)]",
558
- "transition-[border-color] duration-[var(--ow-dur-1)] ease-[var(--ow-ease-beacon)]",
559
- media ? "w-full max-w-[420px]" : "w-28 h-28 shrink-0",
560
- status === "error" ? "border-[color:var(--ow-error)]" : "border-[color:var(--ow-border)]",
561
- clickable && "cursor-pointer ow-focus-ring",
562
- className,
563
- )}
564
- role={clickable ? "button" : undefined}
565
- tabIndex={clickable ? 0 : undefined}
566
- aria-label={clickable ? `打开 ${name}` : undefined}
567
- onClick={clickable ? onOpen : undefined}
568
- onKeyDown={
569
- clickable
570
- ? (event) => {
571
- // L3-2-1:只认落在卡壳自己身上的键;卡内的钮自己处理 Enter/空格。
572
- if (event.target !== event.currentTarget) return
573
- if (event.key === "Enter" || event.key === " ") {
574
- event.preventDefault()
575
- onOpen?.()
576
- }
577
- }
578
- : undefined
579
- }
580
- >
581
- <div data-ow-part="media" className={cn("w-full overflow-hidden", media ? "h-[200px]" : "h-full")}>
582
- {thumbnail ? (
583
- <img src={thumbnail} alt={caption || name} className="w-full h-full object-cover" />
584
- ) : (
585
- <span
586
- data-ow-part="placeholder"
587
- className="flex w-full h-full items-center justify-center bg-[var(--ow-surface-2)] px-2 text-center"
588
- >
589
- <span className={META_CLASS}>{placeholder ?? name}</span>
590
- </span>
591
- )}
592
- </div>
593
- {media && caption && (
594
- <div
595
- data-ow-part="caption"
596
- className="py-2.5 px-3.5 text-[length:var(--ow-fs-caption)] leading-snug text-[color:var(--ow-text-2)]"
597
- >
598
- {caption}
599
- </div>
600
- )}
601
- {status === "uploading" && (
602
- <div data-ow-part="upload" className="absolute inset-x-0 bottom-0 px-2 pb-2">
603
- <span className={cn(META_CLASS, "block text-[color:var(--ow-on-fill)]")}>上传中 {pct}%</span>
604
- <UploadProgress name={name} progress={pct} />
605
- </div>
606
- )}
607
- {/* 遮罩操作:hover / 键盘聚焦才浮出,底走 --ow-scrim,字走 --ow-on-fill(实底上的字,§2)。
608
- 遮罩本身不吃指针 —— 图整块可点时,点在空处仍要开预览;只有按钮那一小块收指针,
609
- 并把点击/回车拦在自己这层,否则移除一个附件顺带把预览也开了。 */}
610
- {(onRemove || (status === "error" && onRetry) || menu) && (
611
- <span
612
- data-ow-part="overlay"
613
- className={cn(
614
- "pointer-events-none absolute inset-0 flex items-start justify-end p-1.5",
615
- "bg-[var(--ow-scrim)] text-[color:var(--ow-on-fill)]",
616
- "opacity-0 transition-opacity duration-[var(--ow-dur-1)] ease-[var(--ow-ease-beacon)]",
617
- "group-hover:opacity-100 group-focus-within:opacity-100",
618
- )}
619
- >
620
- <span
621
- data-ow-part="actions"
622
- className="pointer-events-auto flex items-center gap-1"
623
- onClick={(event) => event.stopPropagation()}
624
- onKeyDown={(event) => event.stopPropagation()}
625
- >
626
- {status === "error" && onRetry && <RetryButton onClick={onRetry} disabled={disabled} />}
627
- {menu}
628
- {onRemove && <RemoveButton onClick={onRemove} disabled={disabled} />}
629
- </span>
630
- </span>
631
- )}
632
- {status === "error" && (
633
- <span
634
- data-ow-part="error"
635
- className="absolute inset-x-0 bottom-0 truncate bg-[var(--ow-error-tint)] px-2 py-1 text-[length:var(--ow-fs-eyebrow)] leading-snug text-[color:var(--ow-error-on-tint)]"
636
- >
637
- {errorText}
638
- </span>
639
- )}
640
- </div>
641
- )
642
- }
643
-
644
- /* ---- 方片形态:Composer 附件条 ---- */
645
- if (variant === "tile") {
646
- const iconLabel = badge?.trim().toUpperCase().slice(0, 4) || resolveFileIcon(name, kind)?.label || null
647
- const tileMeta = splitTileMeta(metaLine, iconLabel)
648
- return (
649
- <div
650
- data-slot="attachment"
651
- data-ow-variant="tile"
652
- data-ow-state={status}
653
- title={path ?? name}
654
- className={cn(
655
- // 卡骨架收口口径:容器 14(p-3.5),与 card 形态同一口径。
656
- "group relative box-border flex w-28 h-28 shrink-0 flex-col justify-between gap-1 p-3.5",
657
- "border [border-radius:var(--ow-radius-card)]",
658
- "transition-[background-color,border-color] duration-[var(--ow-dur-1)] ease-[var(--ow-ease-beacon)]",
659
- status === "error"
660
- ? "border-[color:var(--ow-error-tint-border)] bg-[var(--ow-error-tint)]"
661
- : "border-[color:var(--ow-border)] bg-[var(--ow-surface)]",
662
- disabled && "border-[color:var(--ow-disabled-border)] bg-[var(--ow-disabled-bg)]",
663
- className,
664
- )}
665
- >
666
- <span
667
- data-ow-part="name"
668
- className={cn(
669
- NAME_CLASS,
670
- "[display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:2] [overflow-wrap:anywhere]",
671
- disabled && "text-[color:var(--ow-disabled-text)]",
672
- )}
673
- >
674
- {name}
675
- </span>
676
- <span data-ow-part="meta" className="flex min-w-0 items-center gap-1 overflow-hidden">
677
- <FileIcon
678
- name={name}
679
- kind={kind}
680
- label={badge}
681
- className="shrink-0 text-[color:var(--ow-text-2)]"
682
- width={15}
683
- height={15}
684
- />
685
- {tileMeta.head && (
686
- <span
687
- className={cn(
688
- META_CLASS,
689
- status === "error" && "text-[color:var(--ow-error-on-tint)]",
690
- disabled && "text-[color:var(--ow-disabled-text)]",
691
- )}
692
- >
693
- {tileMeta.head} ·
694
- </span>
695
- )}
696
- <span
697
- className={cn(
698
- META_READING_CLASS,
699
- status === "error" && "text-[color:var(--ow-error-on-tint)]",
700
- disabled && "text-[color:var(--ow-disabled-text)]",
701
- )}
702
- >
703
- {tileMeta.reading}
704
- </span>
705
- </span>
706
- {status === "uploading" && <UploadProgress name={name} progress={pct} />}
707
- {(onRemove || (status === "error" && onRetry) || menu) && (
708
- <span
709
- data-ow-part="actions"
710
- className={cn(
711
- "absolute top-1 right-1 flex items-center gap-0.5",
712
- // 方片顶角是文件名的地盘:悬出来的操作组压字,给它一块与卡同色的实底,
713
- // 读得清也不显脏(image 形态的 scrim 同款思路);错误/禁用档跟着卡底走。
714
- "[border-radius:var(--ow-radius-2xs)]",
715
- status === "error"
716
- ? "bg-[var(--ow-error-tint)]"
717
- : disabled
718
- ? "bg-[var(--ow-disabled-bg)]"
719
- : "bg-[var(--ow-surface)]",
720
- "opacity-0 transition-opacity duration-[var(--ow-dur-1)] ease-[var(--ow-ease-beacon)]",
721
- "group-hover:opacity-100 group-focus-within:opacity-100",
722
- )}
723
- >
724
- {status === "error" && onRetry && <RetryButton onClick={onRetry} disabled={disabled} />}
725
- {menu}
726
- {onRemove && <RemoveButton onClick={onRemove} disabled={disabled} />}
727
- </span>
728
- )}
729
- </div>
730
- )
731
- }
732
-
733
- /* ---- 横卡形态:转录里的文件引用 ---- */
734
- const body = (
735
- <span data-ow-part="content" className="grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-center gap-3 text-left">
736
- <FileIcon
737
- name={name}
738
- kind={kind}
739
- label={badge}
740
- className={cn("shrink-0 text-[color:var(--ow-text-2)]", disabled && "text-[color:var(--ow-disabled-text)]")}
741
- width={28}
742
- height={28}
743
- />
744
- <span className="flex min-w-0 flex-col gap-0.5">
745
- <span
746
- data-ow-part="name"
747
- className={cn(NAME_CLASS, "whitespace-nowrap", disabled && "text-[color:var(--ow-disabled-text)]")}
748
- >
749
- {name}
750
- </span>
751
- {metaLine && (
752
- <span
753
- data-ow-part="meta"
754
- className={cn(
755
- META_CLASS,
756
- status === "error" && "text-[color:var(--ow-error-on-tint)]",
757
- disabled && "text-[color:var(--ow-disabled-text)]",
758
- )}
759
- >
760
- {metaLine}
761
- </span>
762
- )}
763
- </span>
764
- </span>
765
- )
766
-
767
- return (
768
- <div
769
- data-slot="attachment"
770
- data-ow-variant="card"
771
- data-ow-state={status}
772
- title={path ?? name}
773
- className={cn(
774
- // 卡骨架收口口径:容器 14(p-3.5)。原来是 py-2.5 px-3 = 10/12,一套卡三个内距值并存
775
- // (tile 12、card 10/12、同期改过的 .cronjob-card/.skcard/.site-card 都是 14)。
776
- "box-border grid w-full min-h-[62px] grid-cols-[minmax(0,1fr)_auto] items-center gap-3 p-3.5",
777
- // 贴地之物:1px 边 + 0 影(§5)。
778
- "border [border-radius:var(--ow-radius-card)] text-[color:var(--ow-text)]",
779
- "transition-[background-color,border-color] duration-[var(--ow-dur-1)] ease-[var(--ow-ease-beacon)]",
780
- status === "error"
781
- ? "border-[color:var(--ow-error-tint-border)] bg-[var(--ow-error-tint)]"
782
- : "border-[color:var(--ow-border)] bg-[var(--ow-surface)]",
783
- disabled && "border-[color:var(--ow-disabled-border)] bg-[var(--ow-disabled-bg)]",
784
- className,
785
- )}
786
- >
787
- <span className="grid min-w-0 gap-1">
788
- {clickable ? (
789
- <Button
790
- variant="unstyled"
791
- type="button"
792
- data-ow-part="main"
793
- disabled={disabled}
794
- className="ow-focus-ring grid min-w-0 cursor-pointer p-0 text-left [border-radius:var(--ow-radius-control)] hover:bg-[var(--ow-hover)] active:bg-[var(--ow-press)]"
795
- onClick={onOpen}
796
- >
797
- {body}
798
- </Button>
799
- ) : (
800
- body
801
- )}
802
- {status === "uploading" && <UploadProgress name={name} progress={pct} />}
803
- </span>
804
- {(menu || onRemove || (status === "error" && onRetry)) && (
805
- <span data-ow-part="actions" className="inline-flex items-center gap-1.5">
806
- {status === "error" && onRetry && <RetryButton onClick={onRetry} disabled={disabled} />}
807
- {menu}
808
- {onRemove && <RemoveButton onClick={onRemove} disabled={disabled} />}
809
- </span>
810
- )}
811
- </div>
812
- )
813
- }
814
-
815
- /* ------------------------------------------------------------------ *
816
- * AttachmentList
817
- * ------------------------------------------------------------------ */
818
-
819
- export type AttachmentListProps = {
820
- /** `strip` 横排可滚(Composer 附件条)· `stack` 竖列(转录里的文件引用)。 */
821
- layout?: "strip" | "stack"
822
- /** 没有条目时的空态一句话;不给就整块不渲染。 */
823
- empty?: ReactNode
824
- children?: ReactNode
825
- className?: string
826
- "aria-label"?: string
827
- }
828
-
829
- /**
830
- * AttachmentList — 附件行集(合并旧 `Attachments` 横排与 `FileReferenceCards` 竖列)。
831
- * 空态母题走 `EmptyState` 原语(信标 mono 母题 + 一句 text-2,禁插画禁 emoji)。
832
- */
833
- export function AttachmentList({
834
- layout = "strip",
835
- empty,
836
- children,
837
- className,
838
- "aria-label": ariaLabel,
839
- }: AttachmentListProps) {
840
- const isEmpty = children === null || children === undefined || (Array.isArray(children) && children.length === 0)
841
- if (isEmpty && !empty) return null
842
- return (
843
- <div
844
- data-slot="attachment-list"
845
- data-ow-variant={layout}
846
- aria-label={ariaLabel}
847
- className={cn(
848
- layout === "strip"
849
- ? "flex gap-2 overflow-x-auto overflow-y-hidden"
850
- : "flex w-full max-w-[520px] flex-col gap-2",
851
- className,
852
- )}
853
- >
854
- {isEmpty ? <EmptyState message={empty} markSize={28} /> : children}
855
- </div>
856
- )
857
- }