@orbit-work/ui 0.1.1 → 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 (794) 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 +3785 -3031
  41. package/dist/index.d.ts +3785 -3031
  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 -22145
  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 -1361
  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 -152
  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/index.tsx +0 -156
  492. package/src/components/domain/desktop/DesktopLibraryPageView/DesktopLibraryPageView.stories.tsx +0 -42
  493. package/src/components/domain/desktop/DesktopLibraryPageView/index.tsx +0 -35
  494. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginView.css +0 -75
  495. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginView.stories.tsx +0 -230
  496. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginViewSource.test.mjs +0 -149
  497. package/src/components/domain/desktop/DesktopLoginView/index.tsx +0 -418
  498. package/src/components/domain/desktop/DesktopOnboardingTourView/DesktopOnboardingTourView.stories.tsx +0 -103
  499. package/src/components/domain/desktop/DesktopOnboardingTourView/DesktopOnboardingTourViewSource.test.mjs +0 -57
  500. package/src/components/domain/desktop/DesktopOnboardingTourView/index.tsx +0 -189
  501. package/src/components/domain/desktop/DesktopPet/DesktopPet.fixture.ts +0 -243
  502. package/src/components/domain/desktop/DesktopPet/DesktopPet.stories.tsx +0 -337
  503. package/src/components/domain/desktop/DesktopPet/DesktopPetSource.test.mjs +0 -191
  504. package/src/components/domain/desktop/DesktopPet/index.tsx +0 -591
  505. package/src/components/domain/desktop/DesktopPetSettings/DesktopPetSettings.stories.tsx +0 -159
  506. package/src/components/domain/desktop/DesktopPetSettings/DesktopPetSettingsSource.test.mjs +0 -76
  507. package/src/components/domain/desktop/DesktopPetSettings/index.tsx +0 -140
  508. package/src/components/domain/desktop/DesktopRunStatusView/DesktopRunStatusView.stories.tsx +0 -166
  509. package/src/components/domain/desktop/DesktopRunStatusView/DesktopRunStatusViewSource.test.mjs +0 -51
  510. package/src/components/domain/desktop/DesktopRunStatusView/index.tsx +0 -34
  511. package/src/components/domain/desktop/DesktopSelectionCard/DesktopSelectionCard.stories.tsx +0 -122
  512. package/src/components/domain/desktop/DesktopSelectionCard/DesktopSelectionCardSource.test.mjs +0 -42
  513. package/src/components/domain/desktop/DesktopSelectionCard/index.tsx +0 -75
  514. package/src/components/domain/desktop/DesktopSettingsMemorySection/DesktopSettingsMemorySection.stories.tsx +0 -225
  515. package/src/components/domain/desktop/DesktopSettingsMemorySection/DesktopSettingsMemorySectionSource.test.mjs +0 -105
  516. package/src/components/domain/desktop/DesktopSettingsMemorySection/index.tsx +0 -340
  517. package/src/components/domain/desktop/DesktopSettingsView/DesktopSettingsView.stories.tsx +0 -177
  518. package/src/components/domain/desktop/DesktopSettingsView/DesktopSettingsViewSource.test.mjs +0 -195
  519. package/src/components/domain/desktop/DesktopSettingsView/index.tsx +0 -176
  520. package/src/components/domain/desktop/DesktopShareSelectionBarView/DesktopShareSelectionBarView.stories.tsx +0 -77
  521. package/src/components/domain/desktop/DesktopShareSelectionBarView/DesktopShareSelectionBarViewSource.test.mjs +0 -76
  522. package/src/components/domain/desktop/DesktopShareSelectionBarView/index.tsx +0 -55
  523. package/src/components/domain/desktop/DesktopSidebarView/DesktopSidebarView.stories.tsx +0 -454
  524. package/src/components/domain/desktop/DesktopSidebarView/DesktopSidebarViewSource.test.mjs +0 -386
  525. package/src/components/domain/desktop/DesktopSidebarView/index.tsx +0 -1075
  526. package/src/components/domain/desktop/DesktopSiteReleasesView/DesktopSiteReleasesView.stories.tsx +0 -369
  527. package/src/components/domain/desktop/DesktopSiteReleasesView/DesktopSiteReleasesViewSource.test.mjs +0 -123
  528. package/src/components/domain/desktop/DesktopSiteReleasesView/index.tsx +0 -392
  529. package/src/components/domain/desktop/DesktopSitesListView/DesktopSitesListView.stories.tsx +0 -244
  530. package/src/components/domain/desktop/DesktopSitesListView/DesktopSitesListViewSource.test.mjs +0 -198
  531. package/src/components/domain/desktop/DesktopSitesListView/index.tsx +0 -417
  532. package/src/components/domain/desktop/DesktopSkillsPageView/DesktopSkillsPageView.stories.tsx +0 -230
  533. package/src/components/domain/desktop/DesktopSkillsPageView/DesktopSkillsPageViewSource.test.mjs +0 -149
  534. package/src/components/domain/desktop/DesktopSkillsPageView/index.tsx +0 -235
  535. package/src/components/domain/desktop/DesktopTaskDetailView/index.tsx +0 -111
  536. package/src/components/domain/desktop/DesktopToolCallView/DesktopToolCallListViewSource.test.mjs +0 -302
  537. package/src/components/domain/desktop/DesktopToolCallView/DesktopToolCallView.stories.tsx +0 -409
  538. package/src/components/domain/desktop/DesktopToolCallView/index.tsx +0 -388
  539. package/src/components/domain/desktop/DesktopWorkbenchShell/DesktopWorkbenchShell.stories.tsx +0 -418
  540. package/src/components/domain/desktop/DesktopWorkbenchShell/DesktopWorkbenchShellSource.test.mjs +0 -151
  541. package/src/components/domain/desktop/DesktopWorkbenchShell/index.tsx +0 -167
  542. package/src/components/domain/desktop/DesktopWorkspacePageView/DesktopWorkspacePageView.stories.tsx +0 -135
  543. package/src/components/domain/desktop/DesktopWorkspacePageView/DesktopWorkspacePageViewSource.test.mjs +0 -57
  544. package/src/components/domain/desktop/DesktopWorkspacePageView/index.tsx +0 -114
  545. package/src/components/domain/desktop/DesktopWorkspaceView/DesktopWorkspaceView.stories.tsx +0 -227
  546. package/src/components/domain/desktop/DesktopWorkspaceView/DesktopWorkspaceViewSource.test.mjs +0 -175
  547. package/src/components/domain/desktop/DesktopWorkspaceView/index.tsx +0 -580
  548. package/src/components/domain/desktop/ResourceManagement/ResourceManagement.stories.tsx +0 -19
  549. package/src/components/domain/desktop/ResourceManagement/ResourceManagementSource.test.mjs +0 -54
  550. package/src/components/domain/desktop/ResourceManagement/SharesList.tsx +0 -323
  551. package/src/components/domain/desktop/ResourceManagement/SnapshotViews.tsx +0 -92
  552. package/src/components/domain/desktop/ResourceManagement/SnapshotViewsSource.test.mjs +0 -15
  553. package/src/components/domain/desktop/ResourceManagement/index.tsx +0 -246
  554. package/src/components/domain/desktop/ShareSettingsDialogView/index.tsx +0 -234
  555. package/src/components/domain/desktop/SidePanelEmpty/SidePanelEmpty.stories.tsx +0 -100
  556. package/src/components/domain/desktop/SidePanelEmpty/SidePanelEmptySource.test.mjs +0 -67
  557. package/src/components/domain/desktop/SidePanelEmpty/index.tsx +0 -113
  558. package/src/components/domain/desktop/StarterCapsules/StarterCapsules.stories.tsx +0 -65
  559. package/src/components/domain/desktop/StarterCapsules/StarterCapsulesSource.test.mjs +0 -43
  560. package/src/components/domain/desktop/StarterCapsules/index.tsx +0 -90
  561. package/src/components/domain/desktop/WorkbenchSidePanel/WorkbenchSidePanel.stories.tsx +0 -59
  562. package/src/components/domain/desktop/WorkbenchSidePanel/WorkbenchSidePanelSource.test.mjs +0 -51
  563. package/src/components/domain/desktop/WorkbenchSidePanel/index.tsx +0 -74
  564. package/src/components/domain/desktop/WorkspaceMigrateConfirm/WorkspaceMigrateConfirm.stories.tsx +0 -79
  565. package/src/components/domain/desktop/WorkspaceMigrateConfirm/WorkspaceMigrateConfirmSource.test.mjs +0 -34
  566. package/src/components/domain/desktop/WorkspaceMigrateConfirm/index.tsx +0 -92
  567. package/src/components/domain/desktop/index.ts +0 -64
  568. package/src/components/domain/files/FileBrowser/FileBrowser.stories.tsx +0 -397
  569. package/src/components/domain/files/FileBrowser/FileBrowserSource.test.mjs +0 -75
  570. package/src/components/domain/files/FileBrowser/index.tsx +0 -221
  571. package/src/components/domain/files/FileIcon/FileIcon.stories.tsx +0 -207
  572. package/src/components/domain/files/FileIcon/FileIconSource.test.mjs +0 -39
  573. package/src/components/domain/files/FileIcon/index.tsx +0 -133
  574. package/src/components/domain/files/FilePreviewContentView/FilePreviewContentView.stories.tsx +0 -242
  575. package/src/components/domain/files/FilePreviewContentView/FilePreviewContentViewSource.test.mjs +0 -44
  576. package/src/components/domain/files/FilePreviewContentView/index.tsx +0 -125
  577. package/src/components/domain/files/FileTree/FileTree.stories.tsx +0 -204
  578. package/src/components/domain/files/FileTree/FileTreeSource.test.mjs +0 -18
  579. package/src/components/domain/files/FileTree/index.tsx +0 -106
  580. package/src/components/domain/files/PreviewDialog/PreviewDialog.stories.tsx +0 -178
  581. package/src/components/domain/files/PreviewDialog/PreviewDialogSource.test.mjs +0 -92
  582. package/src/components/domain/files/PreviewDialog/index.tsx +0 -294
  583. package/src/components/domain/files/index.ts +0 -5
  584. package/src/components/domain/index.ts +0 -8
  585. package/src/components/domain/office/CsvPreview/CsvPreview.stories.tsx +0 -264
  586. package/src/components/domain/office/CsvPreview/CsvPreviewSource.test.mjs +0 -77
  587. package/src/components/domain/office/CsvPreview/index.tsx +0 -224
  588. package/src/components/domain/office/OfficePreview/OfficePreview.stories.tsx +0 -265
  589. package/src/components/domain/office/OfficePreview/OfficePreviewDialog.stories.tsx +0 -71
  590. package/src/components/domain/office/OfficePreview/OfficePreviewDialog.tsx +0 -43
  591. package/src/components/domain/office/OfficePreview/OfficePreviewSource.test.mjs +0 -126
  592. package/src/components/domain/office/OfficePreview/index.tsx +0 -782
  593. package/src/components/domain/office/PdfPreview/PdfPreview.stories.tsx +0 -280
  594. package/src/components/domain/office/PdfPreview/PdfPreviewDialog.stories.tsx +0 -61
  595. package/src/components/domain/office/PdfPreview/PdfPreviewDialog.tsx +0 -61
  596. package/src/components/domain/office/PdfPreview/PdfPreviewSource.test.mjs +0 -70
  597. package/src/components/domain/office/PdfPreview/index.tsx +0 -217
  598. package/src/components/domain/office/index.ts +0 -5
  599. package/src/components/domain/skills/McpServerListView/McpServerListView.stories.tsx +0 -510
  600. package/src/components/domain/skills/McpServerListView/McpServerListViewSource.test.mjs +0 -101
  601. package/src/components/domain/skills/McpServerListView/index.tsx +0 -250
  602. package/src/components/domain/skills/SkillAvatarView/SkillAvatarView.stories.tsx +0 -121
  603. package/src/components/domain/skills/SkillAvatarView/SkillAvatarViewSource.test.mjs +0 -67
  604. package/src/components/domain/skills/SkillAvatarView/index.tsx +0 -112
  605. package/src/components/domain/skills/SkillCardView/SkillCardView.stories.tsx +0 -374
  606. package/src/components/domain/skills/SkillCardView/SkillCardViewSource.test.mjs +0 -35
  607. package/src/components/domain/skills/SkillCardView/index.tsx +0 -88
  608. package/src/components/domain/skills/SkillDetailPanelView/SkillDetailPanelView.stories.tsx +0 -113
  609. package/src/components/domain/skills/SkillDetailPanelView/index.tsx +0 -115
  610. package/src/components/domain/skills/SkillDetailView/SkillDetailView.stories.tsx +0 -274
  611. package/src/components/domain/skills/SkillDetailView/index.tsx +0 -121
  612. package/src/components/domain/skills/SkillImportDialogView/SkillImportDialogView.stories.tsx +0 -128
  613. package/src/components/domain/skills/SkillImportDialogView/SkillImportDialogViewSource.test.mjs +0 -11
  614. package/src/components/domain/skills/SkillImportDialogView/index.tsx +0 -147
  615. package/src/components/domain/skills/ToolDetailModalView/ToolDetailModalView.stories.tsx +0 -160
  616. package/src/components/domain/skills/ToolDetailModalView/ToolDetailModalViewSource.test.mjs +0 -99
  617. package/src/components/domain/skills/ToolDetailModalView/index.tsx +0 -160
  618. package/src/components/domain/skills/index.ts +0 -7
  619. package/src/components/domain/tasks/ScheduledTaskCardView/ScheduledTaskCardView.stories.tsx +0 -120
  620. package/src/components/domain/tasks/ScheduledTaskCardView/ScheduledTaskCardViewSource.test.mjs +0 -40
  621. package/src/components/domain/tasks/ScheduledTaskCardView/index.tsx +0 -135
  622. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/ScheduledTaskDeleteDialog.stories.tsx +0 -56
  623. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/ScheduledTaskDeleteDialogSource.test.mjs +0 -35
  624. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/index.tsx +0 -73
  625. package/src/components/domain/tasks/ScheduledTaskDetailView/ScheduledTaskDetailView.stories.tsx +0 -121
  626. package/src/components/domain/tasks/ScheduledTaskDetailView/ScheduledTaskDetailViewSource.test.mjs +0 -115
  627. package/src/components/domain/tasks/ScheduledTaskDetailView/index.tsx +0 -223
  628. package/src/components/domain/tasks/ScheduledTasksSpaceView/ScheduledTasksSpaceView.stories.tsx +0 -526
  629. package/src/components/domain/tasks/ScheduledTasksSpaceView/ScheduledTasksSpaceViewSource.test.mjs +0 -85
  630. package/src/components/domain/tasks/ScheduledTasksSpaceView/index.tsx +0 -118
  631. package/src/components/domain/tasks/index.ts +0 -4
  632. package/src/components/domain/theme/SkinManager.stories.tsx +0 -43
  633. package/src/components/domain/theme/SkinManagerUI.tsx +0 -382
  634. package/src/components/domain/theme/ThemeDemo.stories.tsx +0 -12
  635. package/src/components/domain/theme/ThemeDemo.tsx +0 -224
  636. package/src/components/index.ts +0 -11
  637. package/src/components/primitives/Avatar/Avatar.stories.tsx +0 -170
  638. package/src/components/primitives/Avatar/AvatarSource.test.mjs +0 -37
  639. package/src/components/primitives/Avatar/index.tsx +0 -180
  640. package/src/components/primitives/BackTop/BackTop.stories.tsx +0 -122
  641. package/src/components/primitives/BackTop/BackTopSource.test.mjs +0 -61
  642. package/src/components/primitives/BackTop/index.tsx +0 -93
  643. package/src/components/primitives/Badge/Badge.stories.tsx +0 -376
  644. package/src/components/primitives/Badge/BadgeSource.test.mjs +0 -27
  645. package/src/components/primitives/Badge/index.tsx +0 -65
  646. package/src/components/primitives/Button/Button.stories.tsx +0 -287
  647. package/src/components/primitives/Button/ButtonSource.test.mjs +0 -84
  648. package/src/components/primitives/Button/index.tsx +0 -216
  649. package/src/components/primitives/Card/Card.stories.tsx +0 -186
  650. package/src/components/primitives/Card/CardSource.test.mjs +0 -73
  651. package/src/components/primitives/Card/index.tsx +0 -137
  652. package/src/components/primitives/Checkbox/Checkbox.stories.tsx +0 -79
  653. package/src/components/primitives/Checkbox/CheckboxSource.test.mjs +0 -43
  654. package/src/components/primitives/Checkbox/index.tsx +0 -87
  655. package/src/components/primitives/Chip/Chip.stories.tsx +0 -149
  656. package/src/components/primitives/Chip/ChipSource.test.mjs +0 -73
  657. package/src/components/primitives/Chip/index.tsx +0 -252
  658. package/src/components/primitives/Divider/Divider.stories.tsx +0 -68
  659. package/src/components/primitives/Divider/DividerSource.test.mjs +0 -26
  660. package/src/components/primitives/Divider/index.tsx +0 -65
  661. package/src/components/primitives/Dropdown/Dropdown.stories.tsx +0 -38
  662. package/src/components/primitives/Dropdown/DropdownSource.test.mjs +0 -23
  663. package/src/components/primitives/Dropdown/index.tsx +0 -29
  664. package/src/components/primitives/EmptyState/EmptyState.stories.tsx +0 -159
  665. package/src/components/primitives/EmptyState/EmptyStateSource.test.mjs +0 -169
  666. package/src/components/primitives/EmptyState/index.tsx +0 -185
  667. package/src/components/primitives/ErrorCard/ErrorCard.stories.tsx +0 -50
  668. package/src/components/primitives/ErrorCard/index.tsx +0 -78
  669. package/src/components/primitives/Field/Field.stories.tsx +0 -208
  670. package/src/components/primitives/Field/FieldSource.test.mjs +0 -70
  671. package/src/components/primitives/Field/index.tsx +0 -297
  672. package/src/components/primitives/InlineMessage/InlineMessage.stories.tsx +0 -137
  673. package/src/components/primitives/InlineMessage/InlineMessageSource.test.mjs +0 -50
  674. package/src/components/primitives/InlineMessage/index.tsx +0 -141
  675. package/src/components/primitives/Input/Input.stories.tsx +0 -30
  676. package/src/components/primitives/Input/index.tsx +0 -12
  677. package/src/components/primitives/Keycap/Keycap.stories.tsx +0 -93
  678. package/src/components/primitives/Keycap/KeycapSource.test.mjs +0 -30
  679. package/src/components/primitives/Keycap/index.tsx +0 -67
  680. package/src/components/primitives/Menu/Menu.stories.tsx +0 -416
  681. package/src/components/primitives/Menu/MenuEmptySource.test.mjs +0 -23
  682. package/src/components/primitives/Menu/MenuSource.test.mjs +0 -207
  683. package/src/components/primitives/Menu/index.tsx +0 -922
  684. package/src/components/primitives/Pagination/Pagination.stories.tsx +0 -77
  685. package/src/components/primitives/Pagination/PaginationSource.test.mjs +0 -24
  686. package/src/components/primitives/Pagination/index.tsx +0 -85
  687. package/src/components/primitives/Pagination/pagination.ts +0 -25
  688. package/src/components/primitives/Pagination/paginationModel.test.mjs +0 -18
  689. package/src/components/primitives/ProgressBar/ProgressBar.stories.tsx +0 -103
  690. package/src/components/primitives/ProgressBar/ProgressBarSource.test.mjs +0 -44
  691. package/src/components/primitives/ProgressBar/index.tsx +0 -68
  692. package/src/components/primitives/Radio/Radio.stories.tsx +0 -84
  693. package/src/components/primitives/Radio/RadioSource.test.mjs +0 -38
  694. package/src/components/primitives/Radio/index.tsx +0 -161
  695. package/src/components/primitives/SegmentedControl/SegmentedControl.stories.tsx +0 -110
  696. package/src/components/primitives/SegmentedControl/SegmentedControlSource.test.mjs +0 -75
  697. package/src/components/primitives/SegmentedControl/index.tsx +0 -188
  698. package/src/components/primitives/Select/Select.stories.tsx +0 -158
  699. package/src/components/primitives/Select/SelectSource.test.mjs +0 -94
  700. package/src/components/primitives/Select/index.tsx +0 -364
  701. package/src/components/primitives/Spinner/index.tsx +0 -58
  702. package/src/components/primitives/Switch/Switch.stories.tsx +0 -64
  703. package/src/components/primitives/Switch/SwitchSource.test.mjs +0 -38
  704. package/src/components/primitives/Switch/index.tsx +0 -84
  705. package/src/components/primitives/Tabs/Tabs.stories.tsx +0 -230
  706. package/src/components/primitives/Tabs/TabsSource.test.mjs +0 -91
  707. package/src/components/primitives/Tabs/index.tsx +0 -183
  708. package/src/components/primitives/index.ts +0 -24
  709. package/src/examples/ResourceManagementExample.tsx +0 -119
  710. package/src/examples/SiteWorkbenchExample.tsx +0 -96
  711. package/src/hooks/index.ts +0 -7
  712. package/src/hooks/useClickOutside.ts +0 -20
  713. package/src/hooks/useDragReorder.ts +0 -29
  714. package/src/hooks/useImeAwareEnter.ts +0 -59
  715. package/src/hooks/useImeAwareEnterSource.test.mjs +0 -65
  716. package/src/hooks/useKeyboard.ts +0 -16
  717. package/src/hooks/usePopover.ts +0 -67
  718. package/src/hooks/useSelectedOptionLocator.ts +0 -33
  719. package/src/hooks/useSidebarResize.ts +0 -107
  720. package/src/hooks/useTenantTheme.ts +0 -53
  721. package/src/hooks/useUnifiedTheme.ts +0 -85
  722. package/src/index.ts +0 -6
  723. package/src/lib/InjectedStyleTokenMirrorSource.test.mjs +0 -67
  724. package/src/lib/about-window.test.mjs +0 -46
  725. package/src/lib/about-window.ts +0 -218
  726. package/src/lib/appearance.test.mjs +0 -283
  727. package/src/lib/appearance.ts +0 -46
  728. package/src/lib/browser-annotation-popup.ts +0 -151
  729. package/src/lib/focusTrap.ts +0 -51
  730. package/src/lib/index.ts +0 -5
  731. package/src/lib/shortcut.test.mjs +0 -100
  732. package/src/lib/shortcut.ts +0 -97
  733. package/src/lib/twMergeOw.ts +0 -18
  734. package/src/lib/utils.ts +0 -6
  735. package/src/screens/Browser.stories.tsx +0 -353
  736. package/src/screens/Chat.stories.tsx +0 -808
  737. package/src/screens/Home.stories.tsx +0 -253
  738. package/src/screens/Login.stories.tsx +0 -134
  739. package/src/screens/McpManager.stories.tsx +0 -159
  740. package/src/screens/Onboarding.stories.tsx +0 -155
  741. package/src/screens/ScheduledTasks.stories.tsx +0 -134
  742. package/src/screens/ScreenFrameSource.test.mjs +0 -77
  743. package/src/screens/SettingsAppearance.stories.tsx +0 -117
  744. package/src/screens/SettingsMemory.stories.tsx +0 -128
  745. package/src/screens/SettingsModels.stories.tsx +0 -228
  746. package/src/screens/SettingsSections.stories.tsx +0 -164
  747. package/src/screens/Share.stories.tsx +0 -202
  748. package/src/screens/SharePage.stories.tsx +0 -29
  749. package/src/screens/Sites.stories.tsx +0 -183
  750. package/src/screens/Skills.stories.tsx +0 -83
  751. package/src/screens/Workspace.stories.tsx +0 -191
  752. package/src/screens/_home.tsx +0 -46
  753. package/src/screens/_screen.tsx +0 -355
  754. package/src/screens/_settingsNav.ts +0 -27
  755. package/src/screens/_skillsCatalog.tsx +0 -372
  756. package/src/theme/SkinDenylistSyncSource.test.mjs +0 -124
  757. package/src/theme/__tests__/skins.test.mjs +0 -84
  758. package/src/theme/core/semanticAdapter.ts +0 -116
  759. package/src/theme/core/skin.ts +0 -605
  760. package/src/theme/core/skinScoped.ts +0 -289
  761. package/src/theme/core/tenantTheme.test.mjs +0 -127
  762. package/src/theme/core/tenantTheme.ts +0 -124
  763. package/src/theme/core/types.ts +0 -60
  764. package/src/theme/core/unifiedTheme.ts +0 -157
  765. package/src/theme/index.ts +0 -33
  766. package/src/theme/providers/BrandingProvider.tsx +0 -57
  767. package/src/theme/providers/ThemeProvider.tsx +0 -221
  768. package/src/theme/skinDs2PropertyGate.test.mjs +0 -109
  769. package/src/theme/skins/index.ts +0 -107
  770. package/src/theme/utils/cssSafety.ts +0 -92
  771. package/src/theme/utils/skinManager.ts +0 -159
  772. package/src/theme/utils/themeApplier.ts +0 -75
  773. package/src/tokens/DesktopSurfacesSweep15Source.test.mjs +0 -77
  774. package/src/tokens/SharedStyleSheetsSource.test.mjs +0 -90
  775. package/src/tokens/TailwindThemeSupplySource.test.mjs +0 -129
  776. package/src/tokens/base.ts +0 -199
  777. package/src/tokens/dark.ts +0 -288
  778. package/src/tokens/index.ts +0 -4
  779. package/src/tokens/light.ts +0 -320
  780. package/src/tokens/tailwind.ts +0 -216
  781. package/src/types/desktop-pet.ts +0 -100
  782. package/src/types/file-browser.ts +0 -51
  783. package/src/types/file-tree.ts +0 -34
  784. package/src/types/index.ts +0 -3
  785. package/src/types/xspreadsheet.d.ts +0 -4
  786. package/src/utils/cn.ts +0 -6
  787. package/src/utils/glyphColor.ts +0 -32
  788. package/src/utils/index.ts +0 -4
  789. package/src/utils/localPathInline.test.mjs +0 -45
  790. package/src/utils/localPathInline.ts +0 -49
  791. package/src/utils/markdownFileRefs.test.mjs +0 -88
  792. package/src/utils/markdownFileRefs.ts +0 -140
  793. package/src/utils/office-excel.ts +0 -452
  794. 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
- }