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

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 (810) 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.cjs +41 -1
  9. package/dist/appearance.cjs.map +1 -0
  10. package/dist/appearance.d.cts +7 -1
  11. package/dist/appearance.d.ts +7 -1
  12. package/dist/appearance.js +41 -1
  13. package/dist/appearance.js.map +1 -0
  14. package/dist/brand-preview.cjs +14 -0
  15. package/dist/brand-preview.cjs.map +1 -0
  16. package/dist/brand-preview.d.cts +13 -0
  17. package/dist/brand-preview.d.ts +13 -0
  18. package/dist/brand-preview.js +14 -0
  19. package/dist/brand-preview.js.map +1 -0
  20. package/dist/browser-annotation-popup.cjs +9 -1
  21. package/dist/browser-annotation-popup.cjs.map +1 -0
  22. package/dist/browser-annotation-popup.d.cts +6 -6
  23. package/dist/browser-annotation-popup.d.ts +6 -6
  24. package/dist/browser-annotation-popup.js +9 -1
  25. package/dist/browser-annotation-popup.js.map +1 -0
  26. package/dist/chunk-66VEV7G2.js +111 -0
  27. package/dist/chunk-66VEV7G2.js.map +1 -0
  28. package/dist/chunk-JC7BHKS4.cjs +734 -0
  29. package/dist/chunk-JC7BHKS4.cjs.map +1 -0
  30. package/dist/chunk-K7ONUTLA.cjs +240 -0
  31. package/dist/chunk-K7ONUTLA.cjs.map +1 -0
  32. package/dist/chunk-KTNWR3H5.js +399 -0
  33. package/dist/chunk-KTNWR3H5.js.map +1 -0
  34. package/dist/chunk-LSGO6AQR.js +734 -0
  35. package/dist/chunk-LSGO6AQR.js.map +1 -0
  36. package/dist/chunk-Q7B4M5GC.cjs +399 -0
  37. package/dist/chunk-Q7B4M5GC.cjs.map +1 -0
  38. package/dist/chunk-QS55W5Q5.cjs +111 -0
  39. package/dist/chunk-QS55W5Q5.cjs.map +1 -0
  40. package/dist/chunk-UT5LC6MR.js +38 -0
  41. package/dist/chunk-UT5LC6MR.js.map +1 -0
  42. package/dist/chunk-ZXMHCL6D.js +240 -0
  43. package/dist/chunk-ZXMHCL6D.js.map +1 -0
  44. package/dist/chunk-ZZTEY4YX.cjs +38 -0
  45. package/dist/chunk-ZZTEY4YX.cjs.map +1 -0
  46. package/dist/core.css +7895 -0
  47. package/dist/core.scoped.css +7888 -0
  48. package/dist/file-tree.css +85 -0
  49. package/dist/index-nLo7jMlP.d.cts +166 -0
  50. package/dist/index-nLo7jMlP.d.ts +166 -0
  51. package/dist/index.cjs +38996 -26
  52. package/dist/index.cjs.map +1 -0
  53. package/dist/index.d.cts +3797 -3027
  54. package/dist/index.d.ts +3797 -3027
  55. package/dist/index.js +38996 -26
  56. package/dist/index.js.map +1 -0
  57. package/dist/locale.cjs +15 -0
  58. package/dist/locale.cjs.map +1 -0
  59. package/dist/locale.d.cts +28 -0
  60. package/dist/locale.d.ts +28 -0
  61. package/dist/locale.js +15 -0
  62. package/dist/locale.js.map +1 -0
  63. package/dist/office.css +1146 -0
  64. package/dist/slot-core.cjs +200 -0
  65. package/dist/slot-core.cjs.map +1 -0
  66. package/dist/slot-core.d.cts +146 -0
  67. package/dist/slot-core.d.ts +146 -0
  68. package/dist/slot-core.js +200 -0
  69. package/dist/slot-core.js.map +1 -0
  70. package/dist/slot-react.cjs +153 -0
  71. package/dist/slot-react.cjs.map +1 -0
  72. package/dist/slot-react.d.cts +36 -0
  73. package/dist/slot-react.d.ts +36 -0
  74. package/dist/slot-react.js +153 -0
  75. package/dist/slot-react.js.map +1 -0
  76. package/dist/tailwind.css +137 -0
  77. package/dist/unifiedTheme-DQ-sETKO.d.cts +201 -0
  78. package/dist/unifiedTheme-DQ-sETKO.d.ts +201 -0
  79. package/dist/workbench.css +9023 -0
  80. package/package.json +126 -47
  81. package/dist/appearance-D5uQ53j3.d.cts +0 -210
  82. package/dist/appearance-D5uQ53j3.d.ts +0 -210
  83. package/dist/chunk-3KT7IU4X.js +0 -13
  84. package/dist/chunk-5VLBKOG7.cjs +0 -194
  85. package/dist/chunk-7YJY64LZ.js +0 -82
  86. package/dist/chunk-EF2BSN3K.cjs +0 -13
  87. package/dist/chunk-GMMYDILD.cjs +0 -82
  88. package/dist/chunk-VG7FQQ7K.js +0 -194
  89. package/dist/fonts/JetBrainsMono-Medium.ttf +0 -0
  90. package/dist/fonts/JetBrainsMono-Regular.ttf +0 -0
  91. package/dist/fonts/SpaceGrotesk-700-latin-ext.woff2 +0 -0
  92. package/dist/fonts/SpaceGrotesk-700-latin.woff2 +0 -0
  93. package/dist/index.css +0 -1
  94. package/dist/orbitwork.css +0 -22209
  95. package/src/components/Layout/AppLayout/AppLayout.stories.tsx +0 -246
  96. package/src/components/Layout/AppLayout/AppLayoutSource.test.mjs +0 -37
  97. package/src/components/Layout/AppLayout/index.tsx +0 -122
  98. package/src/components/Layout/Sidebar/index.tsx +0 -13
  99. package/src/components/Layout/SidebarShell/SidebarShell.stories.tsx +0 -676
  100. package/src/components/Layout/SidebarShell/SidebarShellSource.test.mjs +0 -161
  101. package/src/components/Layout/SidebarShell/index.tsx +0 -326
  102. package/src/components/Layout/index.ts +0 -10
  103. package/src/components/composite/ActionBar/ActionBar.stories.tsx +0 -26
  104. package/src/components/composite/ActionBar/index.tsx +0 -31
  105. package/src/components/composite/ActionStatus/ActionStatus.stories.tsx +0 -60
  106. package/src/components/composite/ActionStatus/index.tsx +0 -21
  107. package/src/components/composite/AskQuestionCardView/AskQuestionCardView.stories.tsx +0 -175
  108. package/src/components/composite/AskQuestionCardView/AskQuestionCardViewSource.test.mjs +0 -92
  109. package/src/components/composite/AskQuestionCardView/index.tsx +0 -119
  110. package/src/components/composite/AssistantChannelCard/AssistantChannelCard.stories.tsx +0 -265
  111. package/src/components/composite/AssistantChannelCard/AssistantChannelCardSource.test.mjs +0 -45
  112. package/src/components/composite/AssistantChannelCard/index.tsx +0 -102
  113. package/src/components/composite/AssistantToggleRow/AssistantToggleRow.stories.tsx +0 -197
  114. package/src/components/composite/AssistantToggleRow/index.tsx +0 -35
  115. package/src/components/composite/AttachmentCard/AttachmentCard.stories.tsx +0 -125
  116. package/src/components/composite/AttachmentCard/index.tsx +0 -80
  117. package/src/components/composite/BackButton/BackButton.stories.tsx +0 -93
  118. package/src/components/composite/BackButton/BackButtonSource.test.mjs +0 -29
  119. package/src/components/composite/BackButton/index.tsx +0 -48
  120. package/src/components/composite/Banner/Banner.stories.tsx +0 -180
  121. package/src/components/composite/Banner/BannerSource.test.mjs +0 -67
  122. package/src/components/composite/Banner/index.tsx +0 -125
  123. package/src/components/composite/BeaconIcons/BeaconIcons.stories.tsx +0 -153
  124. package/src/components/composite/BeaconIcons/index.tsx +0 -265
  125. package/src/components/composite/BeaconSpinner/BeaconSpinner.stories.tsx +0 -144
  126. package/src/components/composite/BeaconSpinner/index.tsx +0 -185
  127. package/src/components/composite/CatalogStates/CatalogEmptyState.stories.tsx +0 -108
  128. package/src/components/composite/CatalogStates/CatalogStates.stories.tsx +0 -53
  129. package/src/components/composite/CatalogStates/CatalogStatesSource.test.mjs +0 -149
  130. package/src/components/composite/CatalogStates/index.tsx +0 -113
  131. package/src/components/composite/Charts/Charts.stories.tsx +0 -174
  132. package/src/components/composite/Charts/ChartsSource.test.mjs +0 -111
  133. package/src/components/composite/Charts/index.tsx +0 -385
  134. package/src/components/composite/CodeBlock/CodeBlock.stories.tsx +0 -308
  135. package/src/components/composite/CodeBlock/CodeFaceSource.test.mjs +0 -89
  136. package/src/components/composite/CodeBlock/index.tsx +0 -300
  137. package/src/components/composite/CodeDiff/CodeDiff.stories.tsx +0 -169
  138. package/src/components/composite/CodeDiff/index.tsx +0 -373
  139. package/src/components/composite/CodePreview/CodePreview.stories.tsx +0 -127
  140. package/src/components/composite/CodePreview/CodePreviewSource.test.mjs +0 -43
  141. package/src/components/composite/CodePreview/index.tsx +0 -98
  142. package/src/components/composite/CommandPalette/CommandPalette.stories.tsx +0 -89
  143. package/src/components/composite/CommandPalette/CommandPaletteSource.test.mjs +0 -61
  144. package/src/components/composite/CommandPalette/index.tsx +0 -310
  145. package/src/components/composite/ContentRecommendation/ContentRecommendation.stories.tsx +0 -300
  146. package/src/components/composite/ContentRecommendation/ContentRecommendationSource.test.mjs +0 -48
  147. package/src/components/composite/ContentRecommendation/index.tsx +0 -116
  148. package/src/components/composite/ContextChip/ContextChip.stories.tsx +0 -123
  149. package/src/components/composite/ContextChip/ContextChipSource.test.mjs +0 -24
  150. package/src/components/composite/ContextChip/index.tsx +0 -25
  151. package/src/components/composite/ContextUsageIndicatorView/ContextUsageIndicatorSizeSource.test.mjs +0 -15
  152. package/src/components/composite/ContextUsageIndicatorView/ContextUsageIndicatorView.stories.tsx +0 -110
  153. package/src/components/composite/ContextUsageIndicatorView/ContextUsageLoadingSource.test.mjs +0 -23
  154. package/src/components/composite/ContextUsageIndicatorView/index.tsx +0 -139
  155. package/src/components/composite/Controls/Controls.stories.tsx +0 -227
  156. package/src/components/composite/Controls/index.tsx +0 -15
  157. package/src/components/composite/CreateProjectDialog/CreateProjectDialog.stories.tsx +0 -56
  158. package/src/components/composite/CreateProjectDialog/index.tsx +0 -70
  159. package/src/components/composite/DataManagementSectionView/DataManagementSectionView.stories.tsx +0 -123
  160. package/src/components/composite/DataManagementSectionView/DataManagementSectionViewSource.test.mjs +0 -45
  161. package/src/components/composite/DataManagementSectionView/index.tsx +0 -110
  162. package/src/components/composite/DataTable/DataTable.stories.tsx +0 -159
  163. package/src/components/composite/DataTable/DataTableSource.test.mjs +0 -96
  164. package/src/components/composite/DataTable/index.tsx +0 -373
  165. package/src/components/composite/DetailChrome/DetailChrome.stories.tsx +0 -61
  166. package/src/components/composite/DetailChrome/DetailChromeSource.test.mjs +0 -31
  167. package/src/components/composite/DetailChrome/index.tsx +0 -94
  168. package/src/components/composite/DetailPanel/DetailPanel.stories.tsx +0 -185
  169. package/src/components/composite/DetailPanel/DetailPanelSource.test.mjs +0 -49
  170. package/src/components/composite/DetailPanel/index.tsx +0 -120
  171. package/src/components/composite/DetailScaffold/DetailScaffold.stories.tsx +0 -203
  172. package/src/components/composite/DetailScaffold/DetailScaffoldSource.test.mjs +0 -38
  173. package/src/components/composite/DetailScaffold/index.tsx +0 -114
  174. package/src/components/composite/Dialog/Dialog.stories.tsx +0 -343
  175. package/src/components/composite/Dialog/DialogSource.test.mjs +0 -130
  176. package/src/components/composite/Dialog/index.tsx +0 -333
  177. package/src/components/composite/DropZone/DropZone.stories.tsx +0 -105
  178. package/src/components/composite/DropZone/DropZoneSource.test.mjs +0 -68
  179. package/src/components/composite/DropZone/index.tsx +0 -196
  180. package/src/components/composite/FSelect/FSelect.stories.tsx +0 -64
  181. package/src/components/composite/FSelect/index.tsx +0 -29
  182. package/src/components/composite/FeedbackContextMenuView/FeedbackContextMenuView.stories.tsx +0 -106
  183. package/src/components/composite/FeedbackContextMenuView/index.tsx +0 -51
  184. package/src/components/composite/FeedbackDialogView/FeedbackDialogView.stories.tsx +0 -291
  185. package/src/components/composite/FeedbackDialogView/index.tsx +0 -95
  186. package/src/components/composite/FileReferenceCard/FileReferenceCard.stories.tsx +0 -364
  187. package/src/components/composite/FileReferenceCard/FileReferenceCardSource.test.mjs +0 -48
  188. package/src/components/composite/FileReferenceCard/index.tsx +0 -122
  189. package/src/components/composite/FilterBar/FilterBar.stories.tsx +0 -167
  190. package/src/components/composite/FilterBar/FilterBarSource.test.mjs +0 -75
  191. package/src/components/composite/FilterBar/index.tsx +0 -206
  192. package/src/components/composite/FormField/FormField.stories.tsx +0 -158
  193. package/src/components/composite/FormField/FormFieldSource.test.mjs +0 -56
  194. package/src/components/composite/FormField/index.tsx +0 -219
  195. package/src/components/composite/HomeBackdrop/HomeBackdrop.stories.tsx +0 -54
  196. package/src/components/composite/HomeBackdrop/HomeBackdropSource.test.mjs +0 -50
  197. package/src/components/composite/HomeBackdrop/index.tsx +0 -53
  198. package/src/components/composite/Icons/Icons.stories.tsx +0 -153
  199. package/src/components/composite/Icons/IconsSource.test.mjs +0 -23
  200. package/src/components/composite/Icons/index.tsx +0 -1367
  201. package/src/components/composite/ImageCard/ImageCard.stories.tsx +0 -54
  202. package/src/components/composite/ImageCard/index.tsx +0 -33
  203. package/src/components/composite/ImagePreview/ImagePreview.stories.tsx +0 -172
  204. package/src/components/composite/ImagePreview/ImagePreviewSource.test.mjs +0 -95
  205. package/src/components/composite/ImagePreview/index.tsx +0 -339
  206. package/src/components/composite/ListRow/ListRow.stories.tsx +0 -257
  207. package/src/components/composite/ListRow/ListRowSource.test.mjs +0 -101
  208. package/src/components/composite/ListRow/index.tsx +0 -309
  209. package/src/components/composite/Markdown/Markdown.stories.tsx +0 -192
  210. package/src/components/composite/Markdown/MarkdownSource.test.mjs +0 -126
  211. package/src/components/composite/Markdown/MarkdownStyleSource.test.mjs +0 -167
  212. package/src/components/composite/Markdown/index.tsx +0 -702
  213. package/src/components/composite/MarkdownPreview/MarkdownPreview.stories.tsx +0 -174
  214. package/src/components/composite/MarkdownPreview/MarkdownPreviewTabsSource.test.mjs +0 -31
  215. package/src/components/composite/MarkdownPreview/MarkdownRenderedStyleSource.test.mjs +0 -84
  216. package/src/components/composite/MarkdownPreview/index.tsx +0 -140
  217. package/src/components/composite/MarkdownPreviewModalView/MarkdownPreviewModalView.stories.tsx +0 -104
  218. package/src/components/composite/MarkdownPreviewModalView/index.tsx +0 -85
  219. package/src/components/composite/MessageFeedbackDialog/MessageFeedbackDialog.stories.tsx +0 -66
  220. package/src/components/composite/MessageFeedbackDialog/index.tsx +0 -115
  221. package/src/components/composite/ModelCatalogErrorState/ModelCatalogErrorState.stories.tsx +0 -101
  222. package/src/components/composite/ModelCatalogErrorState/ModelCatalogRetrySource.test.mjs +0 -86
  223. package/src/components/composite/ModelCatalogErrorState/index.tsx +0 -59
  224. package/src/components/composite/ModelModalityFlow/ModelModalityFlow.stories.tsx +0 -224
  225. package/src/components/composite/ModelModalityFlow/ModelModalityFlowSource.test.mjs +0 -56
  226. package/src/components/composite/ModelModalityFlow/index.tsx +0 -113
  227. package/src/components/composite/ModelPickerList/ModelPickerList.stories.tsx +0 -313
  228. package/src/components/composite/ModelPickerList/index.tsx +0 -142
  229. package/src/components/composite/ModelSelect/ModelSelect.stories.tsx +0 -90
  230. package/src/components/composite/ModelSelect/index.tsx +0 -148
  231. package/src/components/composite/ModelsSettingsSectionView/ModelsSettingsSectionView.stories.tsx +0 -170
  232. package/src/components/composite/ModelsSettingsSectionView/index.tsx +0 -139
  233. package/src/components/composite/NativeControls/NativeControls.stories.tsx +0 -386
  234. package/src/components/composite/NativeControls/NativeControlsStyleSource.test.mjs +0 -63
  235. package/src/components/composite/NativeControls/index.tsx +0 -97
  236. package/src/components/composite/NavMenu/NavMenu.stories.tsx +0 -383
  237. package/src/components/composite/NavMenu/NavMenuSource.test.mjs +0 -56
  238. package/src/components/composite/NavMenu/index.tsx +0 -142
  239. package/src/components/composite/NoPlanPanelView/NoPlanPanelView.stories.tsx +0 -344
  240. package/src/components/composite/NoPlanPanelView/NoPlanPanelViewSource.test.mjs +0 -34
  241. package/src/components/composite/NoPlanPanelView/index.tsx +0 -97
  242. package/src/components/composite/OpenWithButton/OpenWithButton.stories.tsx +0 -78
  243. package/src/components/composite/OpenWithButton/index.tsx +0 -46
  244. package/src/components/composite/OrbitworkLogo/OrbitworkLogo.stories.tsx +0 -192
  245. package/src/components/composite/OrbitworkLogo/index.tsx +0 -207
  246. package/src/components/composite/OrbitworkModal/OrbitworkModal.stories.tsx +0 -58
  247. package/src/components/composite/OrbitworkModal/index.tsx +0 -31
  248. package/src/components/composite/PageHead/PageHead.stories.tsx +0 -235
  249. package/src/components/composite/PageHead/PageHeadSource.test.mjs +0 -76
  250. package/src/components/composite/PageHead/index.tsx +0 -128
  251. package/src/components/composite/PlanFeatureIcon/PlanFeatureIcon.stories.tsx +0 -205
  252. package/src/components/composite/PlanFeatureIcon/PlanFeatureIconSource.test.mjs +0 -38
  253. package/src/components/composite/PlanFeatureIcon/index.tsx +0 -48
  254. package/src/components/composite/PlanSettingsSectionView/PlanSettingsSectionView.stories.tsx +0 -231
  255. package/src/components/composite/PlanSettingsSectionView/PlanSettingsSectionViewSource.test.mjs +0 -85
  256. package/src/components/composite/PlanSettingsSectionView/index.tsx +0 -264
  257. package/src/components/composite/Popover/Popover.stories.tsx +0 -175
  258. package/src/components/composite/Popover/PopoverSource.test.mjs +0 -59
  259. package/src/components/composite/Popover/index.tsx +0 -176
  260. package/src/components/composite/PptxRenderer/ElementDispatcher/index.tsx +0 -70
  261. package/src/components/composite/PptxRenderer/PptxChromeStyleSource.test.mjs +0 -36
  262. package/src/components/composite/PptxRenderer/PptxRenderer.stories.tsx +0 -128
  263. package/src/components/composite/PptxRenderer/PptxSlide/index.tsx +0 -48
  264. package/src/components/composite/PptxRenderer/constants.ts +0 -2
  265. package/src/components/composite/PptxRenderer/elements/AudioElement/index.tsx +0 -48
  266. package/src/components/composite/PptxRenderer/elements/ChartElement/index.tsx +0 -172
  267. package/src/components/composite/PptxRenderer/elements/DiagramElement/index.tsx +0 -46
  268. package/src/components/composite/PptxRenderer/elements/GroupElement/index.tsx +0 -28
  269. package/src/components/composite/PptxRenderer/elements/ImageElement/index.tsx +0 -61
  270. package/src/components/composite/PptxRenderer/elements/MathElement/index.tsx +0 -57
  271. package/src/components/composite/PptxRenderer/elements/ShapeElement/index.tsx +0 -327
  272. package/src/components/composite/PptxRenderer/elements/TableElement/index.tsx +0 -90
  273. package/src/components/composite/PptxRenderer/elements/TextElement/index.tsx +0 -57
  274. package/src/components/composite/PptxRenderer/elements/VideoElement/index.tsx +0 -43
  275. package/src/components/composite/PptxRenderer/index.ts +0 -24
  276. package/src/components/composite/PptxRenderer/types.ts +0 -326
  277. package/src/components/composite/PptxRenderer/utils.ts +0 -129
  278. package/src/components/composite/ProjectSelect/ProjectSelect.stories.tsx +0 -112
  279. package/src/components/composite/ProjectSelect/ProjectSelectSource.test.mjs +0 -34
  280. package/src/components/composite/ProjectSelect/index.tsx +0 -155
  281. package/src/components/composite/RadioCard/RadioCard.stories.tsx +0 -130
  282. package/src/components/composite/RadioCard/RadioCardSource.test.mjs +0 -42
  283. package/src/components/composite/RadioCard/index.tsx +0 -171
  284. package/src/components/composite/RowOverflowMenu/RowOverflowMenu.stories.tsx +0 -113
  285. package/src/components/composite/RowOverflowMenu/RowOverflowMenuSource.test.mjs +0 -59
  286. package/src/components/composite/RowOverflowMenu/index.tsx +0 -101
  287. package/src/components/composite/SandboxPermissionPrompt/SandboxPermissionPrompt.stories.tsx +0 -159
  288. package/src/components/composite/SandboxPermissionPrompt/SandboxPermissionPromptSource.test.mjs +0 -71
  289. package/src/components/composite/SandboxPermissionPrompt/index.tsx +0 -157
  290. package/src/components/composite/SearchInput/SearchInput.stories.tsx +0 -127
  291. package/src/components/composite/SearchInput/index.tsx +0 -91
  292. package/src/components/composite/SearchResult/SearchResult.stories.tsx +0 -305
  293. package/src/components/composite/SearchResult/SearchResultSource.test.mjs +0 -45
  294. package/src/components/composite/SearchResult/index.tsx +0 -148
  295. package/src/components/composite/Section/Section.stories.tsx +0 -148
  296. package/src/components/composite/Section/SectionSource.test.mjs +0 -59
  297. package/src/components/composite/Section/index.tsx +0 -105
  298. package/src/components/composite/SelectionBulkBar/SelectionBulkBar.stories.tsx +0 -111
  299. package/src/components/composite/SelectionBulkBar/SelectionBulkBarSource.test.mjs +0 -44
  300. package/src/components/composite/SelectionBulkBar/index.tsx +0 -99
  301. package/src/components/composite/ShareStrip/ShareStrip.stories.tsx +0 -123
  302. package/src/components/composite/ShareStrip/index.tsx +0 -83
  303. package/src/components/composite/ShortcutSheet/ShortcutSheet.stories.tsx +0 -90
  304. package/src/components/composite/ShortcutSheet/ShortcutSheetSource.test.mjs +0 -49
  305. package/src/components/composite/ShortcutSheet/index.tsx +0 -163
  306. package/src/components/composite/SitesArtifactCardView/SitesArtifactCardView.stories.tsx +0 -328
  307. package/src/components/composite/SitesArtifactCardView/SitesArtifactCardViewSource.test.mjs +0 -45
  308. package/src/components/composite/SitesArtifactCardView/index.tsx +0 -100
  309. package/src/components/composite/Skeleton/Skeleton.stories.tsx +0 -188
  310. package/src/components/composite/Skeleton/SkeletonSource.test.mjs +0 -25
  311. package/src/components/composite/Skeleton/index.tsx +0 -152
  312. package/src/components/composite/Splash/Splash.stories.tsx +0 -150
  313. package/src/components/composite/Splash/index.tsx +0 -229
  314. package/src/components/composite/StatusTag/StatusTag.stories.tsx +0 -66
  315. package/src/components/composite/StatusTag/StatusTagSource.test.mjs +0 -64
  316. package/src/components/composite/StatusTag/index.tsx +0 -78
  317. package/src/components/composite/StepList/StepList.stories.tsx +0 -352
  318. package/src/components/composite/StepList/index.tsx +0 -23
  319. package/src/components/composite/Tag/Tag.stories.tsx +0 -279
  320. package/src/components/composite/Tag/TagSource.test.mjs +0 -67
  321. package/src/components/composite/Tag/index.tsx +0 -229
  322. package/src/components/composite/TimePicker/TimePicker.stories.tsx +0 -91
  323. package/src/components/composite/TimePicker/TimePickerSource.test.mjs +0 -98
  324. package/src/components/composite/TimePicker/index.tsx +0 -208
  325. package/src/components/composite/TitleBar/TitleBar.stories.tsx +0 -329
  326. package/src/components/composite/TitleBar/TitleBarSource.test.mjs +0 -140
  327. package/src/components/composite/TitleBar/index.tsx +0 -350
  328. package/src/components/composite/Toast/Toast.stories.tsx +0 -304
  329. package/src/components/composite/Toast/ToastSource.test.mjs +0 -63
  330. package/src/components/composite/Toast/index.tsx +0 -135
  331. package/src/components/composite/Tooltip/Tooltip.stories.tsx +0 -304
  332. package/src/components/composite/Tooltip/TooltipSource.test.mjs +0 -34
  333. package/src/components/composite/Tooltip/index.tsx +0 -204
  334. package/src/components/composite/TranscriptDividers/TranscriptDividers.stories.tsx +0 -160
  335. package/src/components/composite/TranscriptDividers/TranscriptDividersSource.test.mjs +0 -90
  336. package/src/components/composite/TranscriptDividers/index.tsx +0 -352
  337. package/src/components/composite/WCardShell/WCardShell.stories.tsx +0 -228
  338. package/src/components/composite/WCardShell/index.tsx +0 -101
  339. package/src/components/composite/index.ts +0 -81
  340. package/src/components/domain/artifacts/ArtifactPreviewSidebarView/ArtifactPreviewSidebarView.stories.tsx +0 -128
  341. package/src/components/domain/artifacts/ArtifactPreviewSidebarView/ArtifactPreviewSidebarViewSource.test.mjs +0 -69
  342. package/src/components/domain/artifacts/ArtifactPreviewSidebarView/index.tsx +0 -212
  343. package/src/components/domain/artifacts/index.ts +0 -1
  344. package/src/components/domain/browser/BrowserAnnotationPopupView/BrowserAnnotationPopupView.stories.tsx +0 -211
  345. package/src/components/domain/browser/BrowserAnnotationPopupView/BrowserAnnotationPopupViewSource.test.mjs +0 -82
  346. package/src/components/domain/browser/BrowserAnnotationPopupView/index.tsx +0 -235
  347. package/src/components/domain/browser/BrowserDeviceToolbarView/BrowserDeviceToolbarView.stories.tsx +0 -260
  348. package/src/components/domain/browser/BrowserDeviceToolbarView/BrowserDeviceToolbarViewSource.test.mjs +0 -12
  349. package/src/components/domain/browser/BrowserDeviceToolbarView/index.tsx +0 -154
  350. package/src/components/domain/browser/BrowserFindBarView/BrowserFindBarView.stories.tsx +0 -52
  351. package/src/components/domain/browser/BrowserFindBarView/index.tsx +0 -111
  352. package/src/components/domain/browser/BrowserImportDialogView/BrowserImportDialogView.stories.tsx +0 -89
  353. package/src/components/domain/browser/BrowserImportDialogView/index.tsx +0 -155
  354. package/src/components/domain/browser/BrowserLoadErrorView/BrowserLoadErrorView.stories.tsx +0 -197
  355. package/src/components/domain/browser/BrowserLoadErrorView/BrowserLoadErrorViewSource.test.mjs +0 -29
  356. package/src/components/domain/browser/BrowserLoadErrorView/index.tsx +0 -45
  357. package/src/components/domain/browser/BrowserMoreMenuView/BrowserMoreMenuView.stories.tsx +0 -66
  358. package/src/components/domain/browser/BrowserMoreMenuView/index.tsx +0 -268
  359. package/src/components/domain/browser/BrowserNavBarView/BrowserNavBarView.stories.tsx +0 -149
  360. package/src/components/domain/browser/BrowserNavBarView/index.tsx +0 -156
  361. package/src/components/domain/browser/BrowserTabBarView/index.tsx +0 -18
  362. package/src/components/domain/browser/SubAgentPane/SubAgentPane.stories.tsx +0 -96
  363. package/src/components/domain/browser/SubAgentPane/SubAgentPaneSource.test.mjs +0 -48
  364. package/src/components/domain/browser/SubAgentPane/index.tsx +0 -121
  365. package/src/components/domain/browser/TerminalPane/TerminalPane.stories.tsx +0 -95
  366. package/src/components/domain/browser/TerminalPane/TerminalPaneSource.test.mjs +0 -52
  367. package/src/components/domain/browser/TerminalPane/index.tsx +0 -75
  368. package/src/components/domain/browser/WebPreview/WebPreview.stories.tsx +0 -71
  369. package/src/components/domain/browser/WebPreview/index.tsx +0 -141
  370. package/src/components/domain/browser/WebPreviewConsole/WebPreviewConsole.stories.tsx +0 -61
  371. package/src/components/domain/browser/WebPreviewConsole/WebPreviewConsoleSource.test.mjs +0 -66
  372. package/src/components/domain/browser/WebPreviewConsole/index.tsx +0 -239
  373. package/src/components/domain/browser/WebPreviewDialog/WebPreviewDialog.stories.tsx +0 -288
  374. package/src/components/domain/browser/WebPreviewDialog/WebPreviewDialogSource.test.mjs +0 -62
  375. package/src/components/domain/browser/WebPreviewDialog/index.tsx +0 -82
  376. package/src/components/domain/browser/WebPreviewNav/WebPreviewNav.stories.tsx +0 -462
  377. package/src/components/domain/browser/WebPreviewNav/WebPreviewNavSource.test.mjs +0 -353
  378. package/src/components/domain/browser/WebPreviewNav/index.tsx +0 -351
  379. package/src/components/domain/browser/WebPreviewShell/WebPreviewShell.stories.tsx +0 -226
  380. package/src/components/domain/browser/WebPreviewShell/WebPreviewShellSource.test.mjs +0 -172
  381. package/src/components/domain/browser/WebPreviewShell/index.tsx +0 -324
  382. package/src/components/domain/browser/index.ts +0 -45
  383. package/src/components/domain/chat/AgentLoopSegment/AgentLoopSegment.stories.tsx +0 -107
  384. package/src/components/domain/chat/AgentLoopSegment/AgentLoopSegmentSource.test.mjs +0 -45
  385. package/src/components/domain/chat/AgentLoopSegment/index.tsx +0 -29
  386. package/src/components/domain/chat/AgentTurn/AgentTurn.stories.tsx +0 -162
  387. package/src/components/domain/chat/AgentTurn/AgentTurnSource.test.mjs +0 -98
  388. package/src/components/domain/chat/AgentTurn/beaconContext.ts +0 -37
  389. package/src/components/domain/chat/AgentTurn/index.tsx +0 -226
  390. package/src/components/domain/chat/ArtifactCard/ArtifactCard.stories.tsx +0 -127
  391. package/src/components/domain/chat/ArtifactCard/index.tsx +0 -249
  392. package/src/components/domain/chat/Attachment/Attachment.stories.tsx +0 -235
  393. package/src/components/domain/chat/Attachment/AttachmentSource.test.mjs +0 -160
  394. package/src/components/domain/chat/Attachment/index.tsx +0 -857
  395. package/src/components/domain/chat/AuthorizationCard/AuthorizationCard.stories.tsx +0 -53
  396. package/src/components/domain/chat/AuthorizationCard/AuthorizationCardSource.test.mjs +0 -80
  397. package/src/components/domain/chat/AuthorizationCard/index.tsx +0 -89
  398. package/src/components/domain/chat/ChatBubble/ChatBubble.stories.tsx +0 -32
  399. package/src/components/domain/chat/ChatBubble/index.tsx +0 -24
  400. package/src/components/domain/chat/ChatMessage/ChatMessage.stories.tsx +0 -31
  401. package/src/components/domain/chat/ChatMessage/index.tsx +0 -23
  402. package/src/components/domain/chat/ChatR2ReviewSource.test.mjs +0 -98
  403. package/src/components/domain/chat/ChatThinking/ChatThinking.stories.tsx +0 -125
  404. package/src/components/domain/chat/ChatThinking/index.tsx +0 -55
  405. package/src/components/domain/chat/Chatbot/Chatbot.stories.tsx +0 -49
  406. package/src/components/domain/chat/Chatbot/index.tsx +0 -37
  407. package/src/components/domain/chat/Composer/Composer.stories.tsx +0 -227
  408. package/src/components/domain/chat/Composer/ComposerSource.test.mjs +0 -175
  409. package/src/components/domain/chat/Composer/index.tsx +0 -450
  410. package/src/components/domain/chat/Composer/parts/ComposerAudioSpectrum.stories.tsx +0 -203
  411. package/src/components/domain/chat/Composer/parts/ComposerAudioSpectrum.tsx +0 -110
  412. package/src/components/domain/chat/Composer/parts/ComposerAudioSpectrumSource.test.mjs +0 -54
  413. package/src/components/domain/chat/Composer/parts/ComposerAuthorization.stories.tsx +0 -155
  414. package/src/components/domain/chat/Composer/parts/ComposerAuthorization.tsx +0 -108
  415. package/src/components/domain/chat/Composer/parts/ComposerMentions.stories.tsx +0 -76
  416. package/src/components/domain/chat/Composer/parts/ComposerMentions.tsx +0 -83
  417. package/src/components/domain/chat/Composer/parts/ComposerMentionsSource.test.mjs +0 -85
  418. package/src/components/domain/chat/Composer/parts/ComposerMenu.stories.tsx +0 -266
  419. package/src/components/domain/chat/Composer/parts/ComposerMenu.tsx +0 -232
  420. package/src/components/domain/chat/Composer/parts/ComposerMenuPopover.stories.tsx +0 -166
  421. package/src/components/domain/chat/Composer/parts/ComposerMenuPopover.tsx +0 -87
  422. package/src/components/domain/chat/Composer/parts/ComposerMenuPopoverSource.test.mjs +0 -56
  423. package/src/components/domain/chat/Composer/parts/ComposerPopover.stories.tsx +0 -257
  424. package/src/components/domain/chat/Composer/parts/ComposerPopover.tsx +0 -221
  425. package/src/components/domain/chat/Composer/parts/ComposerPopoverSource.test.mjs +0 -71
  426. package/src/components/domain/chat/Composer/parts/ComposerProjectPicker.stories.tsx +0 -260
  427. package/src/components/domain/chat/Composer/parts/ComposerProjectPicker.tsx +0 -246
  428. package/src/components/domain/chat/Composer/parts/ComposerProjectPickerSource.test.mjs +0 -46
  429. package/src/components/domain/chat/Composer/parts/ComposerQueue.stories.tsx +0 -275
  430. package/src/components/domain/chat/Composer/parts/ComposerQueue.tsx +0 -155
  431. package/src/components/domain/chat/Composer/parts/ComposerQueueSource.test.mjs +0 -95
  432. package/src/components/domain/chat/Composer/parts/ComposerVoiceInput.stories.tsx +0 -77
  433. package/src/components/domain/chat/Composer/parts/ComposerVoiceInput.tsx +0 -70
  434. package/src/components/domain/chat/Composer/parts/mountChip.ts +0 -21
  435. package/src/components/domain/chat/ContextUsage/ContextUsage.stories.tsx +0 -62
  436. package/src/components/domain/chat/ContextUsage/index.tsx +0 -69
  437. package/src/components/domain/chat/ExecutionSummary/ExecutionSummary.stories.tsx +0 -238
  438. package/src/components/domain/chat/ExecutionSummary/ExecutionSummarySource.test.mjs +0 -210
  439. package/src/components/domain/chat/ExecutionSummary/index.tsx +0 -487
  440. package/src/components/domain/chat/Message/Message.stories.tsx +0 -264
  441. package/src/components/domain/chat/Message/index.tsx +0 -44
  442. package/src/components/domain/chat/MessageActions/MessageActions.stories.tsx +0 -132
  443. package/src/components/domain/chat/MessageActions/MessageActionsSource.test.mjs +0 -79
  444. package/src/components/domain/chat/MessageActions/index.tsx +0 -186
  445. package/src/components/domain/chat/PlanCard/PlanCard.stories.tsx +0 -87
  446. package/src/components/domain/chat/PlanCard/index.tsx +0 -170
  447. package/src/components/domain/chat/RichContent/RichContent.stories.tsx +0 -102
  448. package/src/components/domain/chat/RichContent/RichContentSource.test.mjs +0 -82
  449. package/src/components/domain/chat/RichContent/index.tsx +0 -465
  450. package/src/components/domain/chat/SubAgentThread/SubAgentThread.stories.tsx +0 -119
  451. package/src/components/domain/chat/SubAgentThread/index.tsx +0 -104
  452. package/src/components/domain/chat/Thinking/Thinking.stories.tsx +0 -196
  453. package/src/components/domain/chat/Thinking/ThinkingInlineSource.test.mjs +0 -154
  454. package/src/components/domain/chat/Thinking/index.tsx +0 -237
  455. package/src/components/domain/chat/ToolCallRow/ToolCallRow.stories.tsx +0 -105
  456. package/src/components/domain/chat/ToolCallRow/ToolCallRowSource.test.mjs +0 -83
  457. package/src/components/domain/chat/ToolCallRow/index.tsx +0 -113
  458. package/src/components/domain/chat/Transcript/Transcript.stories.tsx +0 -296
  459. package/src/components/domain/chat/Transcript/TranscriptSource.test.mjs +0 -189
  460. package/src/components/domain/chat/Transcript/index.tsx +0 -187
  461. package/src/components/domain/chat/TranscriptSpine/TranscriptSpine.stories.tsx +0 -124
  462. package/src/components/domain/chat/TranscriptSpine/index.tsx +0 -245
  463. package/src/components/domain/chat/UserTurn/UserTurn.stories.tsx +0 -176
  464. package/src/components/domain/chat/UserTurn/UserTurnSource.test.mjs +0 -150
  465. package/src/components/domain/chat/UserTurn/index.tsx +0 -194
  466. package/src/components/domain/chat/index.ts +0 -22
  467. package/src/components/domain/desktop/DesktopAccountMenuView/DesktopAccountMenuView.stories.tsx +0 -116
  468. package/src/components/domain/desktop/DesktopAccountMenuView/DesktopAccountMenuViewSource.test.mjs +0 -80
  469. package/src/components/domain/desktop/DesktopAccountMenuView/index.tsx +0 -355
  470. package/src/components/domain/desktop/DesktopAppearanceSettings/DesktopAppearanceSettings.stories.tsx +0 -96
  471. package/src/components/domain/desktop/DesktopAppearanceSettings/DesktopAppearanceSettingsSource.test.mjs +0 -89
  472. package/src/components/domain/desktop/DesktopAppearanceSettings/index.tsx +0 -155
  473. package/src/components/domain/desktop/DesktopAssistantConfigView/DesktopAssistantConfigView.stories.tsx +0 -275
  474. package/src/components/domain/desktop/DesktopAssistantConfigView/DesktopAssistantConfigViewSource.test.mjs +0 -37
  475. package/src/components/domain/desktop/DesktopAssistantConfigView/index.tsx +0 -221
  476. package/src/components/domain/desktop/DesktopCatalogView/DesktopCatalogView.stories.tsx +0 -537
  477. package/src/components/domain/desktop/DesktopCatalogView/DesktopCatalogViewSource.test.mjs +0 -339
  478. package/src/components/domain/desktop/DesktopCatalogView/index.tsx +0 -1074
  479. package/src/components/domain/desktop/DesktopChatBranchDivider/DesktopChatBranchDivider.stories.tsx +0 -58
  480. package/src/components/domain/desktop/DesktopChatBranchDivider/index.tsx +0 -33
  481. package/src/components/domain/desktop/DesktopChatEmptyStateView/DesktopChatEmptyStateView.stories.tsx +0 -75
  482. package/src/components/domain/desktop/DesktopChatEmptyStateView/DesktopChatEmptyStateViewSource.test.mjs +0 -54
  483. package/src/components/domain/desktop/DesktopChatEmptyStateView/index.tsx +0 -64
  484. package/src/components/domain/desktop/DesktopChatHeaderView/DesktopChatHeaderView.stories.tsx +0 -83
  485. package/src/components/domain/desktop/DesktopChatHeaderView/DesktopChatHeaderViewSource.test.mjs +0 -126
  486. package/src/components/domain/desktop/DesktopChatHeaderView/index.tsx +0 -169
  487. package/src/components/domain/desktop/DesktopChatMessageView/DesktopChatMessageView.stories.tsx +0 -170
  488. package/src/components/domain/desktop/DesktopChatMessageView/DesktopChatMessageViewSource.test.mjs +0 -47
  489. package/src/components/domain/desktop/DesktopChatMessageView/index.tsx +0 -213
  490. package/src/components/domain/desktop/DesktopChatTurnView/DesktopChatTurnView.stories.tsx +0 -498
  491. package/src/components/domain/desktop/DesktopChatTurnView/DesktopChatTurnViewSource.test.mjs +0 -187
  492. package/src/components/domain/desktop/DesktopChatTurnView/index.tsx +0 -490
  493. package/src/components/domain/desktop/DesktopComposer/DesktopComposer.stories.tsx +0 -195
  494. package/src/components/domain/desktop/DesktopComposer/DesktopComposerModelPickerSource.test.mjs +0 -132
  495. package/src/components/domain/desktop/DesktopComposer/DesktopComposerMountChipSource.test.mjs +0 -43
  496. package/src/components/domain/desktop/DesktopComposer/DesktopComposerResponsiveSource.test.mjs +0 -44
  497. package/src/components/domain/desktop/DesktopComposer/DesktopMcpFormThemeSource.test.mjs +0 -30
  498. package/src/components/domain/desktop/DesktopComposer/index.tsx +0 -206
  499. package/src/components/domain/desktop/DesktopConnectorDetailView/DesktopConnectorDetailView.stories.tsx +0 -72
  500. package/src/components/domain/desktop/DesktopConnectorDetailView/DesktopConnectorDetailViewSource.test.mjs +0 -81
  501. package/src/components/domain/desktop/DesktopConnectorDetailView/index.tsx +0 -301
  502. package/src/components/domain/desktop/DesktopHomeView/DesktopHomeView.stories.tsx +0 -103
  503. package/src/components/domain/desktop/DesktopHomeView/DesktopHomeViewSource.test.mjs +0 -51
  504. package/src/components/domain/desktop/DesktopHomeView/index.tsx +0 -122
  505. package/src/components/domain/desktop/DesktopLibraryAuthorizationDialog/DesktopLibraryAuthorizationDialog.stories.tsx +0 -55
  506. package/src/components/domain/desktop/DesktopLibraryAuthorizationDialog/DesktopLibraryAuthorizationDialogSource.test.mjs +0 -22
  507. package/src/components/domain/desktop/DesktopLibraryAuthorizationDialog/index.tsx +0 -171
  508. package/src/components/domain/desktop/DesktopLibraryPageView/DesktopLibraryPageView.stories.tsx +0 -49
  509. package/src/components/domain/desktop/DesktopLibraryPageView/index.tsx +0 -49
  510. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginView.css +0 -75
  511. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginView.stories.tsx +0 -230
  512. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginViewSource.test.mjs +0 -156
  513. package/src/components/domain/desktop/DesktopLoginView/index.tsx +0 -432
  514. package/src/components/domain/desktop/DesktopOnboardingTourView/DesktopOnboardingTourView.stories.tsx +0 -103
  515. package/src/components/domain/desktop/DesktopOnboardingTourView/DesktopOnboardingTourViewSource.test.mjs +0 -57
  516. package/src/components/domain/desktop/DesktopOnboardingTourView/index.tsx +0 -189
  517. package/src/components/domain/desktop/DesktopPet/DesktopPet.fixture.ts +0 -243
  518. package/src/components/domain/desktop/DesktopPet/DesktopPet.stories.tsx +0 -337
  519. package/src/components/domain/desktop/DesktopPet/DesktopPetSource.test.mjs +0 -191
  520. package/src/components/domain/desktop/DesktopPet/index.tsx +0 -591
  521. package/src/components/domain/desktop/DesktopPetSettings/DesktopPetSettings.stories.tsx +0 -159
  522. package/src/components/domain/desktop/DesktopPetSettings/DesktopPetSettingsSource.test.mjs +0 -76
  523. package/src/components/domain/desktop/DesktopPetSettings/index.tsx +0 -140
  524. package/src/components/domain/desktop/DesktopRunStatusView/DesktopRunStatusView.stories.tsx +0 -166
  525. package/src/components/domain/desktop/DesktopRunStatusView/DesktopRunStatusViewSource.test.mjs +0 -51
  526. package/src/components/domain/desktop/DesktopRunStatusView/index.tsx +0 -34
  527. package/src/components/domain/desktop/DesktopSelectionCard/DesktopSelectionCard.stories.tsx +0 -122
  528. package/src/components/domain/desktop/DesktopSelectionCard/DesktopSelectionCardSource.test.mjs +0 -42
  529. package/src/components/domain/desktop/DesktopSelectionCard/index.tsx +0 -75
  530. package/src/components/domain/desktop/DesktopSettingsMemorySection/DesktopSettingsMemorySection.stories.tsx +0 -225
  531. package/src/components/domain/desktop/DesktopSettingsMemorySection/DesktopSettingsMemorySectionSource.test.mjs +0 -105
  532. package/src/components/domain/desktop/DesktopSettingsMemorySection/index.tsx +0 -340
  533. package/src/components/domain/desktop/DesktopSettingsView/DesktopSettingsView.stories.tsx +0 -177
  534. package/src/components/domain/desktop/DesktopSettingsView/DesktopSettingsViewSource.test.mjs +0 -195
  535. package/src/components/domain/desktop/DesktopSettingsView/index.tsx +0 -176
  536. package/src/components/domain/desktop/DesktopShareSelectionBarView/DesktopShareSelectionBarView.stories.tsx +0 -77
  537. package/src/components/domain/desktop/DesktopShareSelectionBarView/DesktopShareSelectionBarViewSource.test.mjs +0 -76
  538. package/src/components/domain/desktop/DesktopShareSelectionBarView/index.tsx +0 -55
  539. package/src/components/domain/desktop/DesktopSidebarView/DesktopSidebarView.stories.tsx +0 -454
  540. package/src/components/domain/desktop/DesktopSidebarView/DesktopSidebarViewSource.test.mjs +0 -388
  541. package/src/components/domain/desktop/DesktopSidebarView/index.tsx +0 -1111
  542. package/src/components/domain/desktop/DesktopSiteReleasesView/DesktopSiteReleasesView.stories.tsx +0 -369
  543. package/src/components/domain/desktop/DesktopSiteReleasesView/DesktopSiteReleasesViewSource.test.mjs +0 -123
  544. package/src/components/domain/desktop/DesktopSiteReleasesView/index.tsx +0 -392
  545. package/src/components/domain/desktop/DesktopSitesListView/DesktopSitesListView.stories.tsx +0 -244
  546. package/src/components/domain/desktop/DesktopSitesListView/DesktopSitesListViewSource.test.mjs +0 -198
  547. package/src/components/domain/desktop/DesktopSitesListView/index.tsx +0 -417
  548. package/src/components/domain/desktop/DesktopSkillsPageView/DesktopSkillsPageView.stories.tsx +0 -230
  549. package/src/components/domain/desktop/DesktopSkillsPageView/DesktopSkillsPageViewSource.test.mjs +0 -149
  550. package/src/components/domain/desktop/DesktopSkillsPageView/index.tsx +0 -235
  551. package/src/components/domain/desktop/DesktopTaskDetailView/index.tsx +0 -111
  552. package/src/components/domain/desktop/DesktopToolCallView/DesktopToolCallListViewSource.test.mjs +0 -302
  553. package/src/components/domain/desktop/DesktopToolCallView/DesktopToolCallView.stories.tsx +0 -409
  554. package/src/components/domain/desktop/DesktopToolCallView/index.tsx +0 -388
  555. package/src/components/domain/desktop/DesktopWorkbenchShell/DesktopWorkbenchShell.stories.tsx +0 -418
  556. package/src/components/domain/desktop/DesktopWorkbenchShell/DesktopWorkbenchShellSource.test.mjs +0 -151
  557. package/src/components/domain/desktop/DesktopWorkbenchShell/index.tsx +0 -167
  558. package/src/components/domain/desktop/DesktopWorkspacePageView/DesktopWorkspacePageView.stories.tsx +0 -135
  559. package/src/components/domain/desktop/DesktopWorkspacePageView/DesktopWorkspacePageViewSource.test.mjs +0 -57
  560. package/src/components/domain/desktop/DesktopWorkspacePageView/index.tsx +0 -114
  561. package/src/components/domain/desktop/DesktopWorkspaceView/DesktopWorkspaceView.stories.tsx +0 -227
  562. package/src/components/domain/desktop/DesktopWorkspaceView/DesktopWorkspaceViewSource.test.mjs +0 -175
  563. package/src/components/domain/desktop/DesktopWorkspaceView/index.tsx +0 -580
  564. package/src/components/domain/desktop/ResourceManagement/ResourceManagement.stories.tsx +0 -19
  565. package/src/components/domain/desktop/ResourceManagement/ResourceManagementSource.test.mjs +0 -54
  566. package/src/components/domain/desktop/ResourceManagement/SharesList.tsx +0 -323
  567. package/src/components/domain/desktop/ResourceManagement/SnapshotViews.tsx +0 -92
  568. package/src/components/domain/desktop/ResourceManagement/SnapshotViewsSource.test.mjs +0 -15
  569. package/src/components/domain/desktop/ResourceManagement/index.tsx +0 -246
  570. package/src/components/domain/desktop/ShareSettingsDialogView/index.tsx +0 -234
  571. package/src/components/domain/desktop/SidePanelEmpty/SidePanelEmpty.stories.tsx +0 -100
  572. package/src/components/domain/desktop/SidePanelEmpty/SidePanelEmptySource.test.mjs +0 -67
  573. package/src/components/domain/desktop/SidePanelEmpty/index.tsx +0 -113
  574. package/src/components/domain/desktop/StarterCapsules/StarterCapsules.stories.tsx +0 -65
  575. package/src/components/domain/desktop/StarterCapsules/StarterCapsulesSource.test.mjs +0 -43
  576. package/src/components/domain/desktop/StarterCapsules/index.tsx +0 -90
  577. package/src/components/domain/desktop/WorkbenchSidePanel/WorkbenchSidePanel.stories.tsx +0 -59
  578. package/src/components/domain/desktop/WorkbenchSidePanel/WorkbenchSidePanelSource.test.mjs +0 -51
  579. package/src/components/domain/desktop/WorkbenchSidePanel/index.tsx +0 -74
  580. package/src/components/domain/desktop/WorkspaceMigrateConfirm/WorkspaceMigrateConfirm.stories.tsx +0 -79
  581. package/src/components/domain/desktop/WorkspaceMigrateConfirm/WorkspaceMigrateConfirmSource.test.mjs +0 -34
  582. package/src/components/domain/desktop/WorkspaceMigrateConfirm/index.tsx +0 -92
  583. package/src/components/domain/desktop/index.ts +0 -64
  584. package/src/components/domain/files/FileBrowser/FileBrowser.stories.tsx +0 -397
  585. package/src/components/domain/files/FileBrowser/FileBrowserSource.test.mjs +0 -75
  586. package/src/components/domain/files/FileBrowser/index.tsx +0 -221
  587. package/src/components/domain/files/FileIcon/FileIcon.stories.tsx +0 -207
  588. package/src/components/domain/files/FileIcon/FileIconSource.test.mjs +0 -39
  589. package/src/components/domain/files/FileIcon/index.tsx +0 -133
  590. package/src/components/domain/files/FilePreviewContentView/FilePreviewContentView.stories.tsx +0 -242
  591. package/src/components/domain/files/FilePreviewContentView/FilePreviewContentViewSource.test.mjs +0 -44
  592. package/src/components/domain/files/FilePreviewContentView/index.tsx +0 -125
  593. package/src/components/domain/files/FileTree/FileTree.stories.tsx +0 -204
  594. package/src/components/domain/files/FileTree/FileTreeSource.test.mjs +0 -18
  595. package/src/components/domain/files/FileTree/index.tsx +0 -106
  596. package/src/components/domain/files/PreviewDialog/PreviewDialog.stories.tsx +0 -178
  597. package/src/components/domain/files/PreviewDialog/PreviewDialogSource.test.mjs +0 -92
  598. package/src/components/domain/files/PreviewDialog/index.tsx +0 -294
  599. package/src/components/domain/files/index.ts +0 -5
  600. package/src/components/domain/index.ts +0 -8
  601. package/src/components/domain/office/CsvPreview/CsvPreview.stories.tsx +0 -264
  602. package/src/components/domain/office/CsvPreview/CsvPreviewSource.test.mjs +0 -77
  603. package/src/components/domain/office/CsvPreview/index.tsx +0 -224
  604. package/src/components/domain/office/OfficePreview/OfficePreview.stories.tsx +0 -265
  605. package/src/components/domain/office/OfficePreview/OfficePreviewDialog.stories.tsx +0 -71
  606. package/src/components/domain/office/OfficePreview/OfficePreviewDialog.tsx +0 -43
  607. package/src/components/domain/office/OfficePreview/OfficePreviewSource.test.mjs +0 -126
  608. package/src/components/domain/office/OfficePreview/index.tsx +0 -782
  609. package/src/components/domain/office/PdfPreview/PdfPreview.stories.tsx +0 -280
  610. package/src/components/domain/office/PdfPreview/PdfPreviewDialog.stories.tsx +0 -61
  611. package/src/components/domain/office/PdfPreview/PdfPreviewDialog.tsx +0 -61
  612. package/src/components/domain/office/PdfPreview/PdfPreviewSource.test.mjs +0 -70
  613. package/src/components/domain/office/PdfPreview/index.tsx +0 -217
  614. package/src/components/domain/office/index.ts +0 -5
  615. package/src/components/domain/skills/McpServerListView/McpServerListView.stories.tsx +0 -510
  616. package/src/components/domain/skills/McpServerListView/McpServerListViewSource.test.mjs +0 -101
  617. package/src/components/domain/skills/McpServerListView/index.tsx +0 -250
  618. package/src/components/domain/skills/SkillAvatarView/SkillAvatarView.stories.tsx +0 -121
  619. package/src/components/domain/skills/SkillAvatarView/SkillAvatarViewSource.test.mjs +0 -67
  620. package/src/components/domain/skills/SkillAvatarView/index.tsx +0 -112
  621. package/src/components/domain/skills/SkillCardView/SkillCardView.stories.tsx +0 -374
  622. package/src/components/domain/skills/SkillCardView/SkillCardViewSource.test.mjs +0 -35
  623. package/src/components/domain/skills/SkillCardView/index.tsx +0 -88
  624. package/src/components/domain/skills/SkillDetailPanelView/SkillDetailPanelView.stories.tsx +0 -113
  625. package/src/components/domain/skills/SkillDetailPanelView/index.tsx +0 -115
  626. package/src/components/domain/skills/SkillDetailView/SkillDetailView.stories.tsx +0 -274
  627. package/src/components/domain/skills/SkillDetailView/index.tsx +0 -121
  628. package/src/components/domain/skills/SkillImportDialogView/SkillImportDialogView.stories.tsx +0 -128
  629. package/src/components/domain/skills/SkillImportDialogView/SkillImportDialogViewSource.test.mjs +0 -11
  630. package/src/components/domain/skills/SkillImportDialogView/index.tsx +0 -147
  631. package/src/components/domain/skills/ToolDetailModalView/ToolDetailModalView.stories.tsx +0 -160
  632. package/src/components/domain/skills/ToolDetailModalView/ToolDetailModalViewSource.test.mjs +0 -99
  633. package/src/components/domain/skills/ToolDetailModalView/index.tsx +0 -160
  634. package/src/components/domain/skills/index.ts +0 -7
  635. package/src/components/domain/tasks/ScheduledTaskCardView/ScheduledTaskCardView.stories.tsx +0 -120
  636. package/src/components/domain/tasks/ScheduledTaskCardView/ScheduledTaskCardViewSource.test.mjs +0 -40
  637. package/src/components/domain/tasks/ScheduledTaskCardView/index.tsx +0 -135
  638. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/ScheduledTaskDeleteDialog.stories.tsx +0 -56
  639. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/ScheduledTaskDeleteDialogSource.test.mjs +0 -35
  640. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/index.tsx +0 -73
  641. package/src/components/domain/tasks/ScheduledTaskDetailView/ScheduledTaskDetailView.stories.tsx +0 -121
  642. package/src/components/domain/tasks/ScheduledTaskDetailView/ScheduledTaskDetailViewSource.test.mjs +0 -115
  643. package/src/components/domain/tasks/ScheduledTaskDetailView/index.tsx +0 -223
  644. package/src/components/domain/tasks/ScheduledTasksSpaceView/ScheduledTasksSpaceView.stories.tsx +0 -526
  645. package/src/components/domain/tasks/ScheduledTasksSpaceView/ScheduledTasksSpaceViewSource.test.mjs +0 -85
  646. package/src/components/domain/tasks/ScheduledTasksSpaceView/index.tsx +0 -118
  647. package/src/components/domain/tasks/index.ts +0 -4
  648. package/src/components/domain/theme/SkinManager.stories.tsx +0 -43
  649. package/src/components/domain/theme/SkinManagerUI.tsx +0 -382
  650. package/src/components/domain/theme/ThemeDemo.stories.tsx +0 -12
  651. package/src/components/domain/theme/ThemeDemo.tsx +0 -224
  652. package/src/components/index.ts +0 -11
  653. package/src/components/primitives/Avatar/Avatar.stories.tsx +0 -170
  654. package/src/components/primitives/Avatar/AvatarSource.test.mjs +0 -37
  655. package/src/components/primitives/Avatar/index.tsx +0 -180
  656. package/src/components/primitives/BackTop/BackTop.stories.tsx +0 -122
  657. package/src/components/primitives/BackTop/BackTopSource.test.mjs +0 -61
  658. package/src/components/primitives/BackTop/index.tsx +0 -93
  659. package/src/components/primitives/Badge/Badge.stories.tsx +0 -376
  660. package/src/components/primitives/Badge/BadgeSource.test.mjs +0 -27
  661. package/src/components/primitives/Badge/index.tsx +0 -65
  662. package/src/components/primitives/Button/Button.stories.tsx +0 -287
  663. package/src/components/primitives/Button/ButtonSource.test.mjs +0 -84
  664. package/src/components/primitives/Button/index.tsx +0 -219
  665. package/src/components/primitives/Card/Card.stories.tsx +0 -186
  666. package/src/components/primitives/Card/CardSource.test.mjs +0 -73
  667. package/src/components/primitives/Card/index.tsx +0 -137
  668. package/src/components/primitives/Checkbox/Checkbox.stories.tsx +0 -79
  669. package/src/components/primitives/Checkbox/CheckboxSource.test.mjs +0 -43
  670. package/src/components/primitives/Checkbox/index.tsx +0 -87
  671. package/src/components/primitives/Chip/Chip.stories.tsx +0 -149
  672. package/src/components/primitives/Chip/ChipSource.test.mjs +0 -73
  673. package/src/components/primitives/Chip/index.tsx +0 -252
  674. package/src/components/primitives/Divider/Divider.stories.tsx +0 -68
  675. package/src/components/primitives/Divider/DividerSource.test.mjs +0 -26
  676. package/src/components/primitives/Divider/index.tsx +0 -65
  677. package/src/components/primitives/Dropdown/Dropdown.stories.tsx +0 -38
  678. package/src/components/primitives/Dropdown/DropdownSource.test.mjs +0 -23
  679. package/src/components/primitives/Dropdown/index.tsx +0 -29
  680. package/src/components/primitives/EmptyState/EmptyState.stories.tsx +0 -159
  681. package/src/components/primitives/EmptyState/EmptyStateSource.test.mjs +0 -169
  682. package/src/components/primitives/EmptyState/index.tsx +0 -185
  683. package/src/components/primitives/ErrorCard/ErrorCard.stories.tsx +0 -50
  684. package/src/components/primitives/ErrorCard/index.tsx +0 -78
  685. package/src/components/primitives/Field/Field.stories.tsx +0 -208
  686. package/src/components/primitives/Field/FieldSource.test.mjs +0 -70
  687. package/src/components/primitives/Field/index.tsx +0 -297
  688. package/src/components/primitives/InlineMessage/InlineMessage.stories.tsx +0 -137
  689. package/src/components/primitives/InlineMessage/InlineMessageSource.test.mjs +0 -50
  690. package/src/components/primitives/InlineMessage/index.tsx +0 -141
  691. package/src/components/primitives/Input/Input.stories.tsx +0 -30
  692. package/src/components/primitives/Input/index.tsx +0 -12
  693. package/src/components/primitives/Keycap/Keycap.stories.tsx +0 -93
  694. package/src/components/primitives/Keycap/KeycapSource.test.mjs +0 -30
  695. package/src/components/primitives/Keycap/index.tsx +0 -67
  696. package/src/components/primitives/Menu/Menu.stories.tsx +0 -416
  697. package/src/components/primitives/Menu/MenuEmptySource.test.mjs +0 -23
  698. package/src/components/primitives/Menu/MenuSource.test.mjs +0 -207
  699. package/src/components/primitives/Menu/index.tsx +0 -923
  700. package/src/components/primitives/Pagination/Pagination.stories.tsx +0 -77
  701. package/src/components/primitives/Pagination/PaginationSource.test.mjs +0 -24
  702. package/src/components/primitives/Pagination/index.tsx +0 -85
  703. package/src/components/primitives/Pagination/pagination.ts +0 -25
  704. package/src/components/primitives/Pagination/paginationModel.test.mjs +0 -18
  705. package/src/components/primitives/ProgressBar/ProgressBar.stories.tsx +0 -103
  706. package/src/components/primitives/ProgressBar/ProgressBarSource.test.mjs +0 -44
  707. package/src/components/primitives/ProgressBar/index.tsx +0 -68
  708. package/src/components/primitives/Radio/Radio.stories.tsx +0 -84
  709. package/src/components/primitives/Radio/RadioSource.test.mjs +0 -38
  710. package/src/components/primitives/Radio/index.tsx +0 -161
  711. package/src/components/primitives/SegmentedControl/SegmentedControl.stories.tsx +0 -110
  712. package/src/components/primitives/SegmentedControl/SegmentedControlSource.test.mjs +0 -75
  713. package/src/components/primitives/SegmentedControl/index.tsx +0 -188
  714. package/src/components/primitives/Select/Select.stories.tsx +0 -158
  715. package/src/components/primitives/Select/SelectSource.test.mjs +0 -94
  716. package/src/components/primitives/Select/index.tsx +0 -406
  717. package/src/components/primitives/Spinner/index.tsx +0 -58
  718. package/src/components/primitives/Switch/Switch.stories.tsx +0 -64
  719. package/src/components/primitives/Switch/SwitchSource.test.mjs +0 -38
  720. package/src/components/primitives/Switch/index.tsx +0 -84
  721. package/src/components/primitives/Tabs/Tabs.stories.tsx +0 -230
  722. package/src/components/primitives/Tabs/TabsSource.test.mjs +0 -91
  723. package/src/components/primitives/Tabs/index.tsx +0 -183
  724. package/src/components/primitives/index.ts +0 -24
  725. package/src/examples/ResourceManagementExample.tsx +0 -119
  726. package/src/examples/SiteWorkbenchExample.tsx +0 -96
  727. package/src/hooks/index.ts +0 -7
  728. package/src/hooks/useClickOutside.ts +0 -20
  729. package/src/hooks/useDragReorder.ts +0 -29
  730. package/src/hooks/useImeAwareEnter.ts +0 -59
  731. package/src/hooks/useImeAwareEnterSource.test.mjs +0 -65
  732. package/src/hooks/useKeyboard.ts +0 -16
  733. package/src/hooks/usePopover.ts +0 -67
  734. package/src/hooks/useSelectedOptionLocator.ts +0 -33
  735. package/src/hooks/useSidebarResize.ts +0 -107
  736. package/src/hooks/useTenantTheme.ts +0 -53
  737. package/src/hooks/useUnifiedTheme.ts +0 -85
  738. package/src/index.ts +0 -6
  739. package/src/lib/InjectedStyleTokenMirrorSource.test.mjs +0 -67
  740. package/src/lib/about-window.test.mjs +0 -46
  741. package/src/lib/about-window.ts +0 -218
  742. package/src/lib/appearance.test.mjs +0 -283
  743. package/src/lib/appearance.ts +0 -46
  744. package/src/lib/browser-annotation-popup.ts +0 -151
  745. package/src/lib/focusTrap.ts +0 -51
  746. package/src/lib/index.ts +0 -5
  747. package/src/lib/shortcut.test.mjs +0 -100
  748. package/src/lib/shortcut.ts +0 -97
  749. package/src/lib/twMergeOw.ts +0 -18
  750. package/src/lib/utils.ts +0 -6
  751. package/src/screens/Browser.stories.tsx +0 -353
  752. package/src/screens/Chat.stories.tsx +0 -808
  753. package/src/screens/Home.stories.tsx +0 -253
  754. package/src/screens/Login.stories.tsx +0 -134
  755. package/src/screens/McpManager.stories.tsx +0 -159
  756. package/src/screens/Onboarding.stories.tsx +0 -155
  757. package/src/screens/ScheduledTasks.stories.tsx +0 -134
  758. package/src/screens/ScreenFrameSource.test.mjs +0 -77
  759. package/src/screens/SettingsAppearance.stories.tsx +0 -117
  760. package/src/screens/SettingsMemory.stories.tsx +0 -128
  761. package/src/screens/SettingsModels.stories.tsx +0 -228
  762. package/src/screens/SettingsSections.stories.tsx +0 -164
  763. package/src/screens/Share.stories.tsx +0 -202
  764. package/src/screens/SharePage.stories.tsx +0 -29
  765. package/src/screens/Sites.stories.tsx +0 -183
  766. package/src/screens/Skills.stories.tsx +0 -83
  767. package/src/screens/Workspace.stories.tsx +0 -191
  768. package/src/screens/_home.tsx +0 -46
  769. package/src/screens/_screen.tsx +0 -355
  770. package/src/screens/_settingsNav.ts +0 -27
  771. package/src/screens/_skillsCatalog.tsx +0 -372
  772. package/src/theme/SkinDenylistSyncSource.test.mjs +0 -124
  773. package/src/theme/__tests__/skins.test.mjs +0 -84
  774. package/src/theme/core/semanticAdapter.ts +0 -116
  775. package/src/theme/core/skin.ts +0 -605
  776. package/src/theme/core/skinScoped.ts +0 -289
  777. package/src/theme/core/tenantTheme.test.mjs +0 -127
  778. package/src/theme/core/tenantTheme.ts +0 -124
  779. package/src/theme/core/types.ts +0 -60
  780. package/src/theme/core/unifiedTheme.ts +0 -157
  781. package/src/theme/index.ts +0 -33
  782. package/src/theme/providers/BrandingProvider.tsx +0 -57
  783. package/src/theme/providers/ThemeProvider.tsx +0 -221
  784. package/src/theme/skinDs2PropertyGate.test.mjs +0 -109
  785. package/src/theme/skins/index.ts +0 -107
  786. package/src/theme/utils/cssSafety.ts +0 -92
  787. package/src/theme/utils/skinManager.ts +0 -159
  788. package/src/theme/utils/themeApplier.ts +0 -75
  789. package/src/tokens/DesktopSurfacesSweep15Source.test.mjs +0 -77
  790. package/src/tokens/SharedStyleSheetsSource.test.mjs +0 -90
  791. package/src/tokens/TailwindThemeSupplySource.test.mjs +0 -129
  792. package/src/tokens/base.ts +0 -199
  793. package/src/tokens/dark.ts +0 -288
  794. package/src/tokens/index.ts +0 -4
  795. package/src/tokens/light.ts +0 -320
  796. package/src/tokens/tailwind.ts +0 -216
  797. package/src/types/desktop-pet.ts +0 -100
  798. package/src/types/file-browser.ts +0 -51
  799. package/src/types/file-tree.ts +0 -34
  800. package/src/types/index.ts +0 -3
  801. package/src/types/xspreadsheet.d.ts +0 -4
  802. package/src/utils/cn.ts +0 -6
  803. package/src/utils/glyphColor.ts +0 -32
  804. package/src/utils/index.ts +0 -4
  805. package/src/utils/localPathInline.test.mjs +0 -45
  806. package/src/utils/localPathInline.ts +0 -49
  807. package/src/utils/markdownFileRefs.test.mjs +0 -88
  808. package/src/utils/markdownFileRefs.ts +0 -140
  809. package/src/utils/office-excel.ts +0 -452
  810. package/src/utils/shiki.ts +0 -156
@@ -1,923 +0,0 @@
1
- "use client"
2
-
3
- import { type VariantProps, cva } from "class-variance-authority"
4
- import {
5
- type ReactElement,
6
- type KeyboardEvent as ReactKeyboardEvent,
7
- type ReactNode,
8
- cloneElement,
9
- isValidElement,
10
- useCallback,
11
- useEffect,
12
- useId,
13
- useLayoutEffect,
14
- useMemo,
15
- useRef,
16
- useState,
17
- } from "react"
18
- import { createPortal } from "react-dom" // ui-imports-guard-disable-line
19
- import { cn } from "../../../lib/utils"
20
- import { Check } from "../../composite/Icons"
21
- import { Button } from "../Button"
22
- import { EmptyState } from "../EmptyState"
23
- import { Field } from "../Field"
24
- import { KeycapCombo } from "../Keycap"
25
-
26
- /* ------------------------------------------------------------------ *
27
- * 条目模型
28
- * ------------------------------------------------------------------ */
29
-
30
- export type MenuItem = {
31
- key: string
32
- label: ReactNode
33
- icon?: ReactNode
34
- /** 快捷键列:mono 键帽(读数规范)。字符串按 `+` 拆成组合键。 */
35
- shortcut?: string | string[]
36
- /** 行尾次要文字(非快捷键)。同时给了 shortcut 时以 shortcut 为准。 */
37
- hint?: ReactNode
38
- /** hint 走读数档:mono + tabular-nums(§7 读数口径,版本号/计数这类数字用)。 */
39
- hintMono?: boolean
40
- /**
41
- * 行尾交互控件(开关、分段器…)。给了 control 的行渲染成 `<div role="menuitem">` 外壳
42
- * + 标签区,控件本身可聚焦 —— 不再是 button 套 button(HTML 不允许,浏览器会把内层
43
- * 拆出去,键盘与读屏都会错位)。控件区自己吃掉点击,不会顺带触发整行的 onSelect。
44
- * 行 `disabled` 只禁行本身(aria-disabled、不进方向键/Tab 序列),控件要禁用得自己传 disabled。
45
- */
46
- control?: ReactNode
47
- /** 名称下方的说明行(行高自适应,不再是 32 定高)。 */
48
- description?: string
49
- /** 勾选态:行尾打勾(暗档 hover-pop 与 current-bg 同值,选中靠勾区分)。 */
50
- selected?: boolean
51
- /** 危险动作:error 色 + error-tint hover。 */
52
- danger?: boolean
53
- disabled?: boolean
54
- /** searchable 过滤用文本,label 非字符串时必填。 */
55
- searchText?: string
56
- }
57
-
58
- /** 分隔线。旧 Dropdown 的 `{ key: "---" }` 形态同样识别。 */
59
- export type MenuSeparatorEntry = { type: "separator"; key?: string }
60
- /** 分组标题(眉标档:CAPS + tracking,不可聚焦)。 */
61
- export type MenuGroupEntry = { type: "group"; key?: string; label: ReactNode }
62
-
63
- export type MenuEntry = MenuItem | MenuSeparatorEntry | MenuGroupEntry
64
-
65
- /** 分隔项常量。导航列的分隔项是 `NAV_MENU_DIVIDER`(composite/NavMenu)。 */
66
- export const MENU_SEPARATOR: MenuSeparatorEntry = { type: "separator" }
67
-
68
- /** 旧 Dropdown 分隔项的 key 约定,兼容期继续识别。 */
69
- const LEGACY_DIVIDER_KEY = "---"
70
-
71
- function isSeparator(entry: MenuEntry): entry is MenuSeparatorEntry {
72
- return ("type" in entry && entry.type === "separator") || (!("type" in entry) && entry.key === LEGACY_DIVIDER_KEY)
73
- }
74
- function isGroup(entry: MenuEntry): entry is MenuGroupEntry {
75
- return "type" in entry && entry.type === "group"
76
- }
77
- function isItem(entry: MenuEntry): entry is MenuItem {
78
- return !isSeparator(entry) && !isGroup(entry)
79
- }
80
- function itemText(item: MenuItem): string {
81
- return item.searchText ?? (typeof item.label === "string" ? item.label : "")
82
- }
83
- function shortcutKeys(shortcut: string | string[]): string[] {
84
- return (Array.isArray(shortcut) ? shortcut : shortcut.split("+")).map((key) => key.trim()).filter(Boolean)
85
- }
86
-
87
- /** 槽内可聚焦件(Tab 停靠点):行尾控件区、bare 头部、banner、footer 里的按钮/输入等。行本身 tabIndex=-1,不会被这条选中。 */
88
- const FOCUSABLE = ["button", "[href]", "input", "select", "textarea", '[tabindex]:not([tabindex="-1"])'].join(", ")
89
- /** 取一个槽里的 Tab 停靠点(DOM 顺序)。roving tabindex 的控件(分段器)内部只有一个 tabIndex=0 的段,其余 -1 不算。 */
90
- function focusableStops(root: Element | null | undefined): HTMLElement[] {
91
- if (!root) return []
92
- return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(
93
- (node) => !(node.tabIndex < 0 || node.hasAttribute("disabled") || node.getAttribute("aria-hidden") === "true"),
94
- )
95
- }
96
-
97
- /* ------------------------------------------------------------------ *
98
- * 行样式
99
- * ------------------------------------------------------------------ */
100
-
101
- const menuItemVariants = cva(
102
- [
103
- "flex items-center gap-2 w-full px-2 text-left text-ow-fs-ui font-normal",
104
- "transition-[background-color,color] duration-[var(--ow-dur-1)] ease-[var(--ow-ease-beacon)]",
105
- "[border-radius:var(--ow-radius-control)] ow-focus-ring",
106
- ].join(" "),
107
- {
108
- variants: {
109
- danger: {
110
- true: "text-[color:var(--ow-error)]",
111
- false: "text-[color:var(--ow-text)]",
112
- },
113
- selected: {
114
- true: "bg-[var(--ow-selected-bg)]",
115
- false: "",
116
- },
117
- hovered: {
118
- true: "",
119
- false: "",
120
- },
121
- disabled: {
122
- true: "cursor-not-allowed text-[color:var(--ow-disabled-text)]",
123
- false: "cursor-pointer",
124
- },
125
- hasDescription: {
126
- // 行高 32 是常态;带说明行时放开为自适应两行。
127
- true: "h-auto py-2 items-start",
128
- false: "h-8",
129
- },
130
- },
131
- compoundVariants: [
132
- // 坐在 --ow-popover-bg 上的行一律 -pop 档(§5 交互底色相对所在表面递进)。
133
- {
134
- hovered: true,
135
- selected: false,
136
- disabled: false,
137
- danger: false,
138
- className: "bg-[var(--ow-hover-pop)] active:bg-[var(--ow-press-pop)]",
139
- },
140
- {
141
- hovered: true,
142
- selected: false,
143
- disabled: false,
144
- danger: true,
145
- className: "bg-[var(--ow-error-tint)] active:bg-[var(--ow-error-tint-hover)]",
146
- },
147
- ],
148
- defaultVariants: {
149
- danger: false,
150
- selected: false,
151
- hovered: false,
152
- disabled: false,
153
- hasDescription: false,
154
- },
155
- },
156
- )
157
-
158
- export type MenuItemVariants = VariantProps<typeof menuItemVariants>
159
-
160
- /* ------------------------------------------------------------------ *
161
- * MenuSurface — 菜单面
162
- * ------------------------------------------------------------------ */
163
-
164
- export type MenuSurfaceProps = {
165
- items?: MenuEntry[]
166
- /** 自定义内容(域内选择器自渲染条目时用)。给了 children 时默认不加 menu 语义。 */
167
- children?: ReactNode
168
- /** 自定义内容尺寸可能变化时改变它,触发 portal 重新测量。 */
169
- contentKey?: string | number
170
- onSelect?: (key: string) => void
171
- /** 高亮某项但不画勾(区别于 selected)。 */
172
- activeKey?: string | null
173
- /** 鼠标划过非分隔、非禁用条目时回调。 */
174
- onItemHover?: (key: string) => void
175
- /** 面宽 px(默认 200)。 */
176
- width?: number
177
- /** 条目上方的眉标行。 */
178
- header?: ReactNode
179
- /**
180
- * header 原样渲染:不套眉标排版(CAPS / tracking / --ow-eyebrow),并以 `role="none"`
181
- * 包裹,让读屏把里面的非条目内容(头像块、账号名)当普通内容读,而不是当菜单项跳过。
182
- * 里面的按钮(复制 ID 这类)是面内 Tab 停靠点,排在条目之前。
183
- */
184
- headerBare?: boolean
185
- /**
186
- * header 与条目之间的整块自定义内容(套餐井这类)。`role="none"` 包裹,同上;
187
- * 里面的按钮(升级 / 充值)是面内 Tab 停靠点,排在 header 之后、条目之前。
188
- */
189
- banner?: ReactNode
190
- /** 条目下方的固定区(上分隔线)。 */
191
- footer?: ReactNode
192
- /** 内嵌搜索字段。 */
193
- searchable?: boolean
194
- searchPlaceholder?: string
195
- searchValue?: string
196
- onSearchChange?: (value: string) => void
197
- /** 过滤无结果时的一句话(渲染进 `EmptyState` 紧凑档:信标母题 + 一句 text-2)。 */
198
- empty?: ReactNode
199
- /**
200
- * Portal 模式 —— 渲染进 document.body 并 fixed 定位,自动避开视口边界。
201
- * 传锚点 ref,或 `true` 表示以父元素为锚。滚动容器会裁掉 absolute 弹层,
202
- * 而裁剪不是抬 z-index 能解决的,所以行内菜单一律走这条路。
203
- */
204
- portal?: boolean | React.RefObject<HTMLElement | null>
205
- /** 非 portal 模式下溢出视口时自动微调位移(默认关)。 */
206
- autoAdjust?: boolean
207
- /** portal 模式的横向对齐:`start` 贴锚点左缘(默认)· `end` 贴右缘(行末「…」用)。 */
208
- align?: "start" | "end"
209
- /**
210
- * 语义档:`menu` 给容器 role="menu"、条目 role="menuitem(checkbox)";
211
- * `none` 只当装饰容器。默认 items 模式为 menu,children 模式为 none。
212
- */
213
- role?: "menu" | "none"
214
- /**
215
- * 打开后把焦点收进面:`true`=搜索框优先,否则第一条可用项(键盘打开时用,行上立刻有
216
- * focus-visible 环可循);`"surface"`=只把焦点落在面本体(tabIndex=-1 的容器)——
217
- * 指针打开时用:方向键/Esc 照常可用,但第一行不画键盘环(R3 · 2026-09-04,Terry
218
- * 意见 1「选中状态的焦点环」:指针开面时首行那圈环是 Storybook 里最扎眼的一处)。
219
- */
220
- autoFocus?: boolean | "surface"
221
- /** Esc / Tab 离开时回调,触发器模式据此关闭。 */
222
- onClose?: () => void
223
- /** 容器可读名(role="menu" 时用)。 */
224
- ariaLabel?: string
225
- /** 拿到面本体(portal 出去后不在触发器子树里,外点判断要它)。 */
226
- surfaceRef?: React.RefObject<HTMLDivElement | null>
227
- className?: string
228
- }
229
-
230
- /**
231
- * MenuSurface — 下拉菜单的「面」(DS 2.0 patterns · Menu 簇)。
232
- *
233
- * 立面按 §5:`--ow-popover-bg` 底 + 1px `--ow-border` + `--ow-shadow-pop` +
234
- * `var(--ow-z-dropdown)`,圆角 10(`--ow-radius-menu`,§7);行高 32、行 hover
235
- * 走 `-pop` 档;快捷键列 Keycap(mono + tabular-nums);勾选态打勾;危险项 error 色。
236
- * 键盘:↑↓ / Home / End / 首字母跳转 / Enter 选中 / Esc 关闭。
237
- *
238
- * 这是旧 `primitives/Dropdown` 的规范化继任者,属性向后兼容(Dropdown 现为
239
- * @deprecated 别名)。带触发器的完整菜单见同目录 `Menu`。
240
- */
241
- export function MenuSurface({
242
- items = [],
243
- children,
244
- contentKey,
245
- onSelect,
246
- activeKey,
247
- onItemHover,
248
- width = 200,
249
- header,
250
- headerBare = false,
251
- banner,
252
- footer,
253
- searchable = false,
254
- searchPlaceholder = "搜索",
255
- searchValue,
256
- onSearchChange,
257
- empty = "暂无结果",
258
- portal = false,
259
- autoAdjust = false,
260
- align = "start",
261
- role,
262
- autoFocus = false,
263
- onClose,
264
- ariaLabel,
265
- surfaceRef,
266
- className = "",
267
- }: MenuSurfaceProps) {
268
- const [hoveredKey, setHoveredKey] = useState<string | null>(null)
269
- const [internalSearch, setInternalSearch] = useState("")
270
- const ref = useRef<HTMLDivElement | null>(null)
271
- const setSurfaceNode = useCallback(
272
- (node: HTMLDivElement | null) => {
273
- ref.current = node
274
- // RefObject.current 在旧版 @types/react 里是 readonly,这里是合法的回写场景。
275
- if (surfaceRef) (surfaceRef as React.MutableRefObject<HTMLDivElement | null>).current = node
276
- },
277
- [surfaceRef],
278
- )
279
- // 控件行是 div、普通行是 button,两种都要能被程序化聚焦,所以放宽到 HTMLElement。
280
- const itemRefs = useRef(new Map<string, HTMLElement>())
281
- const typeahead = useRef<{ buffer: string; at: number }>({ buffer: "", at: 0 })
282
- const [portalPos, setPortalPos] = useState<{ top: number; left: number } | null>(null)
283
- const [adjust, setAdjust] = useState<{ x: number; y: number }>({ x: 0, y: 0 })
284
- const adjustRef = useRef(adjust)
285
- const baseId = useId()
286
- const semantics = role ?? (children ? "none" : "menu")
287
- const query = searchValue ?? internalSearch
288
- const visibleItems = useMemo(() => {
289
- if (!searchable || !query.trim()) return items
290
- const needle = query.trim().toLowerCase()
291
- return items.filter((entry) => !isItem(entry) || itemText(entry).toLowerCase().includes(needle))
292
- }, [items, query, searchable])
293
- const navigable = useMemo(
294
- () => visibleItems.filter((entry): entry is MenuItem => isItem(entry) && !entry.disabled),
295
- [visibleItems],
296
- )
297
- // 面内是否有带控件的行。
298
- const hasControlRow = useMemo(() => navigable.some((item) => !!item.control), [navigable])
299
- // Tab 是「面内游走」还是「离面」:有控件行、bare 头部或 banner 时游走(这三种槽里会放复制 ID /
300
- // 升级这类按钮,不游走键盘就够不着);都没有时照旧离面,全库既有消费方零变化。
301
- const rovingTab = hasControlRow || (!!header && headerBare) || !!banner
302
- // Tab 停靠点(DOM 顺序):bare 头部里的可聚焦件 → banner 里的 → 行 → 该行控件 → 下一行 → … → footer 里的。
303
- const tabStops = useCallback(() => {
304
- const surface = ref.current
305
- const slot = (part: string) => surface?.querySelector(`:scope > [data-ow-part="${part}"]`)
306
- const stops: HTMLElement[] = []
307
- if (headerBare) stops.push(...focusableStops(slot("header")))
308
- stops.push(...focusableStops(slot("banner")))
309
- for (const item of navigable) {
310
- const row = itemRefs.current.get(item.key)
311
- if (!row) continue
312
- stops.push(row)
313
- if (item.control) stops.push(...focusableStops(row.querySelector('[data-ow-part="item-control"]')))
314
- }
315
- stops.push(...focusableStops(slot("footer")))
316
- return stops
317
- }, [navigable, headerBare])
318
-
319
- const setSearch = (value: string) => {
320
- if (searchValue === undefined) setInternalSearch(value)
321
- onSearchChange?.(value)
322
- }
323
-
324
- const focusItem = useCallback((key: string | null, moveFocus: boolean) => {
325
- setHoveredKey(key)
326
- if (key && moveFocus) itemRefs.current.get(key)?.focus()
327
- }, [])
328
-
329
- // 打开时把焦点收进面:有搜索框先给搜索框,否则给第一条可用项。
330
- useEffect(() => {
331
- if (!autoFocus) return
332
- const frame = requestAnimationFrame(() => {
333
- if (autoFocus === "surface") {
334
- ref.current?.focus()
335
- return
336
- }
337
- if (searchable) {
338
- ref.current?.querySelector<HTMLInputElement>("input")?.focus()
339
- setHoveredKey(navigable[0]?.key ?? null)
340
- return
341
- }
342
- const first = navigable[0]?.key
343
- if (first) focusItem(first, true)
344
- else ref.current?.focus()
345
- })
346
- return () => cancelAnimationFrame(frame)
347
- // 只在打开那一刻收一次焦点,条目变化不该把焦点抢回去。
348
- // eslint-disable-next-line react-hooks/exhaustive-deps
349
- }, [autoFocus])
350
-
351
- const onKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {
352
- const target = event.target as HTMLElement
353
- // 焦点落在行尾控件里时,字符键/Enter/空格归控件自己 —— 否则开关上的空格会被菜单
354
- // 的首字母跳转吃掉(判据是「事件源在控件区内」,不是 tagName)。
355
- const inControl = !!target.closest?.('[data-ow-part="item-control"]')
356
- const inSearch = target.tagName === "INPUT" && !inControl
357
- if (event.key === "Escape") {
358
- event.stopPropagation()
359
- onClose?.()
360
- return
361
- }
362
- if (event.key === "Tab") {
363
- // 无控件行、无 bare 头部 / banner:Tab 即离面(历史行为,全库其它菜单零变化)。
364
- if (!rovingTab) {
365
- onClose?.()
366
- return
367
- }
368
- // 否则 Tab 在「头部/banner 按钮 → 行 → 该行控件 → 下一行 → footer」间游走,走到两端才交还焦点。
369
- const stops = tabStops()
370
- const active = typeof document === "undefined" ? null : (document.activeElement as HTMLElement | null)
371
- let index = active ? stops.indexOf(active) : -1
372
- if (index < 0 && active) {
373
- // 焦点在控件内部更深一层时,取最靠后的包含它的停靠点(控件排在自己行之后)。
374
- for (let i = stops.length - 1; i >= 0; i -= 1) {
375
- if (stops[i]?.contains(active)) {
376
- index = i
377
- break
378
- }
379
- }
380
- }
381
- const next = index + (event.shiftKey ? -1 : 1)
382
- if (index < 0 || next < 0 || next >= stops.length) {
383
- onClose?.()
384
- return
385
- }
386
- event.preventDefault()
387
- stops[next]?.focus()
388
- return
389
- }
390
- // 控件自己已处理的键(分段器的 ←→ / Home / End 会 preventDefault)面不再接手,
391
- // 否则 Home/End 会一边切段、一边把焦点甩到首/末行。
392
- if (inControl && event.isDefaultPrevented()) return
393
- if (navigable.length === 0) return
394
- const current = navigable.findIndex((item) => item.key === hoveredKey)
395
- if (event.key === "ArrowDown" || event.key === "ArrowUp") {
396
- event.preventDefault()
397
- const step = event.key === "ArrowDown" ? 1 : -1
398
- const next =
399
- current < 0 ? (step > 0 ? 0 : navigable.length - 1) : (current + step + navigable.length) % navigable.length
400
- const target = navigable[next]
401
- if (target) focusItem(target.key, !inSearch)
402
- return
403
- }
404
- if (event.key === "Home" || event.key === "End") {
405
- event.preventDefault()
406
- const target = navigable[event.key === "Home" ? 0 : navigable.length - 1]
407
- if (target) focusItem(target.key, !inSearch)
408
- return
409
- }
410
- if (event.key === "Enter" && hoveredKey && !inSearch && !inControl) {
411
- event.preventDefault()
412
- onSelect?.(hoveredKey)
413
- return
414
- }
415
- // 控件行是 <div role="menuitem">,没有 button 的原生空格触发,这里补上。只补控件行:
416
- // 普通行的空格仍走原生 click,行为不变。
417
- if (event.key === " " && hoveredKey && !inSearch && !inControl) {
418
- const row = navigable.find((item) => item.key === hoveredKey)
419
- if (row?.control) {
420
- event.preventDefault()
421
- onSelect?.(hoveredKey)
422
- return
423
- }
424
- }
425
- // 首字母跳转:搜索框、行尾控件在场时让位给它们。
426
- if (!inSearch && !inControl && event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {
427
- const now = Date.now()
428
- typeahead.current = {
429
- buffer: now - typeahead.current.at > 800 ? event.key : typeahead.current.buffer + event.key,
430
- at: now,
431
- }
432
- const needle = typeahead.current.buffer.toLowerCase()
433
- const hit = navigable.find((item) => itemText(item).toLowerCase().startsWith(needle))
434
- if (hit) {
435
- event.preventDefault()
436
- focusItem(hit.key, true)
437
- }
438
- }
439
- }
440
-
441
- // 非 portal 模式:溢出视口时整体位移(autoAdjust 显式开启)。
442
- useLayoutEffect(() => {
443
- if (!autoAdjust || portal) {
444
- adjustRef.current = { x: 0, y: 0 }
445
- setAdjust((current) => (current.x || current.y ? { x: 0, y: 0 } : current))
446
- return
447
- }
448
- const el = ref.current
449
- if (!el) return
450
- let raf = 0
451
- const measure = () => {
452
- cancelAnimationFrame(raf)
453
- raf = requestAnimationFrame(() => {
454
- const rect = el.getBoundingClientRect()
455
- const current = adjustRef.current
456
- const base = {
457
- left: rect.left - current.x,
458
- right: rect.right - current.x,
459
- top: rect.top - current.y,
460
- bottom: rect.bottom - current.y,
461
- }
462
- let x = 0
463
- let y = 0
464
- if (base.right > window.innerWidth - 8) x = window.innerWidth - 8 - base.right
465
- if (base.left + x < 8) x = 8 - base.left
466
- if (base.bottom > window.innerHeight - 8) y = window.innerHeight - 8 - base.bottom
467
- if (base.top + y < 8) y = 8 - base.top
468
- if (x !== current.x || y !== current.y) {
469
- adjustRef.current = { x, y }
470
- setAdjust({ x, y })
471
- }
472
- })
473
- }
474
- measure()
475
- const resizeObserver = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure)
476
- resizeObserver?.observe(el)
477
- window.addEventListener("resize", measure)
478
- window.addEventListener("scroll", measure, true)
479
- return () => {
480
- cancelAnimationFrame(raf)
481
- resizeObserver?.disconnect()
482
- window.removeEventListener("resize", measure)
483
- window.removeEventListener("scroll", measure, true)
484
- }
485
- }, [autoAdjust, portal])
486
-
487
- // Portal 模式:量锚点后在视口内定位。transform 祖先会改写 fixed 的包含块,
488
- // 所以要把那段偏移减回去。
489
- useLayoutEffect(() => {
490
- if (!portal) return
491
- const el = ref.current
492
- if (!el) return
493
- const measure = () => {
494
- const anchor = typeof portal === "object" && portal.current ? portal.current : el.parentElement
495
- if (!anchor) return
496
- const anchorRect = anchor.getBoundingClientRect()
497
- const dropRect = el.getBoundingClientRect()
498
-
499
- const offsetParent = findFixedOffsetAncestor(el)
500
- const offsetX = offsetParent ? offsetParent.getBoundingClientRect().left : 0
501
- const offsetY = offsetParent ? offsetParent.getBoundingClientRect().top : 0
502
-
503
- let top = anchorRect.bottom + 4 - offsetY
504
- let left = (align === "end" ? anchorRect.right - dropRect.width : anchorRect.left) - offsetX
505
-
506
- if (anchorRect.bottom + 4 + dropRect.height > window.innerHeight - 8) {
507
- top = anchorRect.top - dropRect.height - 4 - offsetY
508
- }
509
- if (top + offsetY < 8) top = 8 - offsetY
510
- if (left + offsetX + dropRect.width > window.innerWidth - 8) {
511
- left = window.innerWidth - dropRect.width - 8 - offsetX
512
- }
513
- if (left + offsetX < 8) left = 8 - offsetX
514
-
515
- // 捕获阶段的 scroll 每帧能来好几发;位置没变就别造新对象,否则整棵菜单
516
- // 跟着滚动重渲染。
517
- setPortalPos((current) => (current && current.top === top && current.left === left ? current : { top, left }))
518
- }
519
- // 等菜单渲染完再量,否则拿不到高度。
520
- const raf = requestAnimationFrame(measure)
521
- window.addEventListener("resize", measure)
522
- window.addEventListener("scroll", measure, true)
523
- return () => {
524
- cancelAnimationFrame(raf)
525
- window.removeEventListener("resize", measure)
526
- window.removeEventListener("scroll", measure, true)
527
- }
528
- }, [portal, align, items.length, contentKey])
529
-
530
- const menuContent = (
531
- <div
532
- ref={setSurfaceNode}
533
- data-slot="menu-surface"
534
- data-ow-part="surface"
535
- tabIndex={-1}
536
- role={semantics === "menu" ? "menu" : undefined}
537
- aria-label={semantics === "menu" ? ariaLabel : undefined}
538
- aria-activedescendant={semantics === "menu" && hoveredKey ? `${baseId}-${hoveredKey}` : undefined}
539
- onKeyDown={onKeyDown}
540
- className={cn(
541
- // 弹层立面:贴地之物才 0 影,离地之物给 pop 影,且永远保留 1px 边。
542
- "bg-[var(--ow-popover-bg)] border border-[color:var(--ow-border)] shadow-[var(--ow-shadow-pop)] p-1.5 box-border outline-none",
543
- "[border-radius:var(--ow-radius-menu)]",
544
- className,
545
- )}
546
- style={{
547
- width,
548
- ...(portal
549
- ? {
550
- position: "fixed",
551
- zIndex: "var(--ow-z-dropdown)",
552
- top: portalPos?.top ?? -9999,
553
- left: portalPos?.left ?? -9999,
554
- visibility: portalPos ? "visible" : "hidden",
555
- }
556
- : { transform: adjust.x || adjust.y ? `translate(${adjust.x}px, ${adjust.y}px)` : undefined }),
557
- }}
558
- >
559
- {header &&
560
- (headerBare ? (
561
- // 头像块这类非眉标内容:原样渲染,且 role="none" —— role="menu" 的子代只认
562
- // menuitem/group/separator,不标 none 的话读屏会整块跳过。
563
- <div data-ow-part="header" data-ow-variant="bare" role="none">
564
- {header}
565
- </div>
566
- ) : (
567
- <div
568
- data-ow-part="header"
569
- // R2:header 与 group 同是眉标角色,字号/字重/tracking 全同,色也归一到 --ow-eyebrow
570
- // (原 header 走 --ow-text-3,同角色两值)。
571
- className="font-medium text-ow-fs-eyebrow leading-none text-[color:var(--ow-eyebrow)] px-2 pt-2 pb-1.5 uppercase tracking-[var(--ow-ls-eyebrow)]"
572
- >
573
- {header}
574
- </div>
575
- ))}
576
- {banner && (
577
- <div data-ow-part="banner" role="none">
578
- {banner}
579
- </div>
580
- )}
581
- {searchable && (
582
- <Field
583
- value={query}
584
- onChange={setSearch}
585
- placeholder={searchPlaceholder}
586
- aria-label={searchPlaceholder}
587
- // §5:搜索框坐在弹层面上,走 Field 的弹层档(底/边各升一档),
588
- // 否则暗档 surface-2 与 popover-bg 同色,井整个消失。
589
- tier="pop"
590
- className="mb-1.5"
591
- />
592
- )}
593
- <div data-ow-part="list" className="min-h-0">
594
- {children ??
595
- (visibleItems.length === 0 ? (
596
- // §6 / G5:弹层无结果走 EmptyState 原语的 `variant="text"` 档——原型里弹层
597
- // 空态**不带母题**(@ 菜单 template.dc.html L923、命令面板 L3018 都只有一行
598
- // --ow-fs-ui text-2 灰字,左对齐)。这不是「退回手写灰字」:度量、字阶、颜色
599
- // 仍由原语给,只是这一档本来就没有图形位——菜单只有一两行高,塞一枚 28px 母题
600
- // 会把弹层撑成两倍,还让「没搜到」看着像一屏正经空态。
601
- <div data-ow-part="empty">
602
- <EmptyState message={empty} variant="text" />
603
- </div>
604
- ) : (
605
- visibleItems.map((entry, index) => {
606
- if (isSeparator(entry))
607
- return (
608
- <div
609
- key={entry.key ?? `separator-${index}`}
610
- data-ow-part="separator"
611
- role={semantics === "menu" ? "separator" : undefined}
612
- className="h-px bg-[var(--ow-border)] mx-1.5 my-1.5"
613
- />
614
- )
615
- if (isGroup(entry))
616
- return (
617
- <div
618
- key={entry.key ?? `group-${index}`}
619
- data-ow-part="group"
620
- className="font-medium text-ow-fs-eyebrow leading-none text-[color:var(--ow-eyebrow)] px-2 pt-2 pb-1.5 uppercase tracking-[var(--ow-ls-eyebrow)]"
621
- >
622
- {entry.label}
623
- </div>
624
- )
625
- const item = entry
626
- const active = activeKey === item.key
627
- const isHovered = hoveredKey === item.key && !item.disabled
628
- const keys = item.shortcut ? shortcutKeys(item.shortcut) : null
629
- // 行的公共属性:两种壳(button / 控件行的 div)逐字同构,只差标签与可聚焦方式。
630
- const rowProps = {
631
- id: `${baseId}-${item.key}`,
632
- "data-ow-part": "item",
633
- "data-ow-role": item.danger ? "danger" : item.selected || active ? "selected" : "default",
634
- "data-ow-state": isHovered ? "highlighted" : undefined,
635
- role:
636
- semantics === "menu" ? (item.selected === undefined ? "menuitem" : "menuitemcheckbox") : undefined,
637
- "aria-checked": semantics === "menu" && item.selected !== undefined ? item.selected : undefined,
638
- className: menuItemVariants({
639
- danger: item.danger,
640
- selected: item.selected || active,
641
- hovered: isHovered,
642
- disabled: item.disabled,
643
- hasDescription: !!item.description,
644
- }),
645
- onMouseEnter: () => {
646
- setHoveredKey(item.key)
647
- if (!item.disabled) onItemHover?.(item.key)
648
- },
649
- onMouseLeave: () => setHoveredKey(null),
650
- onFocus: () => setHoveredKey(item.key),
651
- onClick: () => {
652
- if (!item.disabled) onSelect?.(item.key)
653
- },
654
- }
655
- const rowContent = (
656
- <>
657
- {item.icon && (
658
- <span
659
- data-ow-part="item-icon"
660
- className="w-4 h-4 shrink-0 inline-flex items-center justify-center text-[color:var(--ow-text-3)]"
661
- >
662
- {item.icon}
663
- </span>
664
- )}
665
- <span className="flex-1 flex flex-col gap-0.5 min-w-0">
666
- <span className="flex-1">{item.label}</span>
667
- {item.description && (
668
- <span className="text-ow-fs-eyebrow font-normal leading-snug text-[color:var(--ow-text-3)]">
669
- {item.description}
670
- </span>
671
- )}
672
- </span>
673
- {keys && keys.length > 0 ? (
674
- <KeycapCombo data-ow-part="shortcut" className="shrink-0" keys={keys} />
675
- ) : (
676
- item.hint && (
677
- <span
678
- data-ow-part="hint"
679
- className={cn(
680
- "text-ow-fs-eyebrow leading-snug font-normal text-[color:var(--ow-text-3)]",
681
- // §7 读数:版本号、计数这类数字走 mono + tabular-nums,别的 hint 不动。
682
- item.hintMono && "font-[family-name:var(--ow-font-mono)] tabular-nums",
683
- )}
684
- >
685
- {item.hint}
686
- </span>
687
- )
688
- )}
689
- {item.control && (
690
- <span
691
- data-ow-part="item-control"
692
- className="shrink-0 inline-flex items-center"
693
- // 控件自理点击,别让它顺带触发整行的 onSelect(否则开关会被切两次)。
694
- // 键盘事件照旧冒泡到面上:Esc 关面、Tab 游走都要靠它。
695
- onClick={(event) => event.stopPropagation()}
696
- >
697
- {item.control}
698
- </span>
699
- )}
700
- {item.selected && (
701
- <Check
702
- data-ow-part="check"
703
- aria-hidden="true"
704
- className="w-4 h-4 shrink-0 text-[color:var(--ow-text)]"
705
- />
706
- )}
707
- </>
708
- )
709
- // 行尾有交互控件时行不能是 <button>(button 套 button 非法):改 div 外壳,
710
- // 行自身 tabIndex=-1 靠方向键/Tab 程序化聚焦,控件是面内的下一个 Tab 停靠点。
711
- if (item.control) {
712
- return (
713
- <div
714
- key={item.key}
715
- {...rowProps}
716
- ref={(node: HTMLDivElement | null) => {
717
- if (node) itemRefs.current.set(item.key, node)
718
- else itemRefs.current.delete(item.key)
719
- }}
720
- tabIndex={-1}
721
- aria-disabled={item.disabled || undefined}
722
- >
723
- {rowContent}
724
- </div>
725
- )
726
- }
727
- return (
728
- <Button
729
- key={item.key}
730
- {...rowProps}
731
- ref={(node: HTMLButtonElement | null) => {
732
- if (node) itemRefs.current.set(item.key, node)
733
- else itemRefs.current.delete(item.key)
734
- }}
735
- variant="unstyled"
736
- disabled={item.disabled}
737
- >
738
- {rowContent}
739
- </Button>
740
- )
741
- })
742
- ))}
743
- </div>
744
- {footer && (
745
- <div data-ow-part="footer" className="border-t border-[color:var(--ow-border)] mt-1 pt-1">
746
- {footer}
747
- </div>
748
- )}
749
- </div>
750
- )
751
-
752
- if (portal && typeof document !== "undefined") {
753
- return createPortal(menuContent, document.body)
754
- }
755
- return menuContent
756
- }
757
-
758
- /* ------------------------------------------------------------------ *
759
- * Menu — 触发器 + 菜单面
760
- * ------------------------------------------------------------------ */
761
-
762
- export type MenuTriggerState = {
763
- open: boolean
764
- toggle: () => void
765
- close: () => void
766
- /** 摊到触发器上的无障碍属性与开合处理。 */
767
- triggerProps: {
768
- "aria-haspopup": "menu"
769
- "aria-expanded": boolean
770
- onClick: (event: React.MouseEvent) => void
771
- onKeyDown: (event: ReactKeyboardEvent) => void
772
- }
773
- }
774
-
775
- export type MenuProps = Omit<MenuSurfaceProps, "portal" | "autoFocus" | "onClose" | "surfaceRef"> & {
776
- /** 触发器:元素(自动注入 aria/onClick)或渲染函数(自己摊 triggerProps)。 */
777
- trigger: ReactElement | ((state: MenuTriggerState) => ReactNode)
778
- /** 受控开合。 */
779
- open?: boolean
780
- onOpenChange?: (open: boolean) => void
781
- /** 选中后是否自动收起(默认 true)。 */
782
- closeOnSelect?: boolean
783
- /** 触发器外层容器类名。 */
784
- triggerClassName?: string
785
- }
786
-
787
- /**
788
- * Menu — 下拉菜单(DS 2.0 patterns · 合并 Dropdown / RowOverflowMenu / DetailOverflowMenu)。
789
- *
790
- * 触发器 + `MenuSurface`:开合、外点关闭、Esc 关闭并把焦点还给触发器、打开即收焦点,
791
- * 面本身负责立面与键盘导航。菜单一律 portal 到 body 后 fixed 定位 —— 行菜单常住在带
792
- * overflow 的滚动容器里,absolute 弹层会被祖先裁掉,而裁剪不是抬 z-index 能解决的。
793
- *
794
- * R3 中性件:不带信标、不带荧黄;空态母题走 `EmptyState` 原语的 `size="sm"` 紧凑档。
795
- */
796
- export function Menu({
797
- trigger,
798
- open: openProp,
799
- onOpenChange,
800
- closeOnSelect = true,
801
- triggerClassName = "",
802
- onSelect,
803
- ...surfaceProps
804
- }: MenuProps) {
805
- const [internalOpen, setInternalOpen] = useState(false)
806
- const open = openProp ?? internalOpen
807
- const anchorRef = useRef<HTMLSpanElement>(null)
808
- const surfaceRef = useRef<HTMLDivElement>(null)
809
-
810
- const setOpen = useCallback(
811
- (next: boolean) => {
812
- if (openProp === undefined) setInternalOpen(next)
813
- onOpenChange?.(next)
814
- },
815
- [openProp, onOpenChange],
816
- )
817
-
818
- const focusTrigger = useCallback(() => {
819
- anchorRef.current?.querySelector<HTMLElement>("button, [href], [tabindex]:not([tabindex='-1'])")?.focus()
820
- }, [])
821
-
822
- const close = useCallback(() => setOpen(false), [setOpen])
823
- const closeAndRestore = useCallback(() => {
824
- setOpen(false)
825
- focusTrigger()
826
- }, [setOpen, focusTrigger])
827
- const toggle = useCallback(() => setOpen(!open), [open, setOpen])
828
-
829
- // 菜单已经 portal 到 body,不在触发器子树里,所以两棵子树都要放过 —— 只判断
830
- // 触发器会让「点菜单项」先关掉菜单,click 永远来不及触发。
831
- useEffect(() => {
832
- if (!open) return
833
- const onPointerDown = (event: PointerEvent) => {
834
- const target = event.target as Node | null
835
- if (!target) return
836
- if (anchorRef.current?.contains(target) || surfaceRef.current?.contains(target)) return
837
- setOpen(false)
838
- }
839
- document.addEventListener("pointerdown", onPointerDown, true)
840
- return () => document.removeEventListener("pointerdown", onPointerDown, true)
841
- }, [open, setOpen])
842
-
843
- // 记下「这次是键盘还是指针打开的」:键盘(Enter/Space 的 click detail=0,或方向键)
844
- // → 焦点进第一行;指针 → 焦点只落面本体,首行不画环(R3,见 MenuSurface.autoFocus)。
845
- const openedByKeyboard = useRef(false)
846
- const triggerProps: MenuTriggerState["triggerProps"] = {
847
- "aria-haspopup": "menu",
848
- "aria-expanded": open,
849
- onClick: (event) => {
850
- openedByKeyboard.current = event.detail === 0
851
- toggle()
852
- },
853
- onKeyDown: (event) => {
854
- if (event.key === "ArrowDown" || event.key === "ArrowUp") {
855
- event.preventDefault()
856
- openedByKeyboard.current = true
857
- setOpen(true)
858
- }
859
- },
860
- }
861
-
862
- return (
863
- <span data-slot="menu" className={cn("inline-flex", triggerClassName)} ref={anchorRef}>
864
- {typeof trigger === "function"
865
- ? trigger({ open, toggle, close, triggerProps })
866
- : isValidElement(trigger)
867
- ? cloneElement(trigger as ReactElement<Record<string, unknown>>, {
868
- ...triggerProps,
869
- // 触发器自带的 onClick/onKeyDown 不能被开合逻辑吞掉,两个都要跑。
870
- onClick: (event: React.MouseEvent) => {
871
- ;(trigger.props as { onClick?: (e: React.MouseEvent) => void }).onClick?.(event)
872
- if (!event.defaultPrevented) {
873
- openedByKeyboard.current = event.detail === 0
874
- toggle()
875
- }
876
- },
877
- onKeyDown: (event: ReactKeyboardEvent) => {
878
- ;(trigger.props as { onKeyDown?: (e: ReactKeyboardEvent) => void }).onKeyDown?.(event)
879
- triggerProps.onKeyDown(event)
880
- },
881
- })
882
- : trigger}
883
- {open && (
884
- <MenuSurface
885
- {...surfaceProps}
886
- surfaceRef={surfaceRef}
887
- portal={anchorRef}
888
- autoFocus={openedByKeyboard.current ? true : "surface"}
889
- onClose={closeAndRestore}
890
- onSelect={(key) => {
891
- if (closeOnSelect) setOpen(false)
892
- onSelect?.(key)
893
- }}
894
- />
895
- )}
896
- </span>
897
- )
898
- }
899
-
900
- /**
901
- * 向上找最近的带 transform/perspective/filter/will-change 的祖先 —— 它会给
902
- * fixed 元素造出新的包含块,让坐标不再相对视口。没有就返回 null。
903
- * (Select 的 portal 菜单量位也复用这个。)
904
- */
905
- export function findFixedOffsetAncestor(el: HTMLElement): HTMLElement | null {
906
- let parent = el.parentElement
907
- while (parent && parent !== document.body && parent !== document.documentElement) {
908
- const style = getComputedStyle(parent)
909
- const transform = style.transform || style.webkitTransform
910
- if (
911
- (transform && transform !== "none") ||
912
- (style.filter && style.filter !== "none") ||
913
- (style.perspective && style.perspective !== "none") ||
914
- style.willChange === "transform" ||
915
- style.willChange === "filter" ||
916
- style.willChange === "perspective"
917
- ) {
918
- return parent
919
- }
920
- parent = parent.parentElement
921
- }
922
- return null
923
- }