@ds-mo/ui 9.1.0 → 9.2.1

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 (333) hide show
  1. package/README.md +0 -79
  2. package/dist/.build-stamp +1 -1
  3. package/dist/agent-patterns.json +165 -1
  4. package/dist/agent.json +2131 -639
  5. package/dist/angular/ds-agent-activity.d.ts +12 -0
  6. package/dist/angular/ds-agent-activity.js +38 -0
  7. package/dist/angular/ds-agent-response.d.ts +12 -0
  8. package/dist/angular/ds-agent-response.js +38 -0
  9. package/dist/angular/ds-agent-source-list.d.ts +12 -0
  10. package/dist/angular/ds-agent-source-list.js +38 -0
  11. package/dist/angular/ds-agent-tool-call.d.ts +12 -0
  12. package/dist/angular/ds-agent-tool-call.js +38 -0
  13. package/dist/angular/ds-attachment-list.d.ts +12 -0
  14. package/dist/angular/ds-attachment-list.js +38 -0
  15. package/dist/angular/ds-avatar.d.ts +12 -0
  16. package/dist/angular/ds-avatar.js +38 -0
  17. package/dist/angular/ds-code-block.d.ts +12 -0
  18. package/dist/angular/ds-code-block.js +38 -0
  19. package/dist/angular/ds-conversation-list-item.d.ts +19 -0
  20. package/dist/angular/ds-conversation-list-item.js +42 -0
  21. package/dist/angular/ds-conversation-list-section.d.ts +12 -0
  22. package/dist/angular/ds-conversation-list-section.js +38 -0
  23. package/dist/angular/ds-conversation-list.d.ts +12 -0
  24. package/dist/angular/ds-conversation-list.js +37 -0
  25. package/dist/angular/ds-markdown.d.ts +12 -0
  26. package/dist/angular/ds-markdown.js +38 -0
  27. package/dist/angular/ds-menu.d.ts +6 -1
  28. package/dist/angular/ds-menu.js +7 -4
  29. package/dist/angular/ds-message-bubble.d.ts +12 -0
  30. package/dist/angular/ds-message-bubble.js +38 -0
  31. package/dist/angular/ds-message-composer.d.ts +23 -0
  32. package/dist/angular/ds-message-composer.js +49 -0
  33. package/dist/angular/ds-message-scroller.d.ts +15 -0
  34. package/dist/angular/ds-message-scroller.js +43 -0
  35. package/dist/angular/ds-message.d.ts +12 -0
  36. package/dist/angular/ds-message.js +38 -0
  37. package/dist/angular/ds-panel-nav.d.ts +1 -1
  38. package/dist/angular/ds-panel-nav.js +3 -3
  39. package/dist/angular/ds-panel-tool-header.d.ts +25 -0
  40. package/dist/angular/ds-panel-tool-header.js +49 -0
  41. package/dist/angular/ds-panel-tool-search.d.ts +19 -0
  42. package/dist/angular/ds-panel-tool-search.js +49 -0
  43. package/dist/angular/ds-panel-tools.d.ts +30 -1
  44. package/dist/angular/ds-panel-tools.js +14 -5
  45. package/dist/angular/index.d.ts +1 -1
  46. package/dist/angular/index.js +17 -0
  47. package/dist/angular/proxies.d.ts +17 -0
  48. package/dist/angular/proxies.js +17 -0
  49. package/dist/components/ds-agent-activity.d.ts +11 -0
  50. package/dist/components/ds-agent-activity.js +2 -0
  51. package/dist/components/ds-agent-activity.js.map +1 -0
  52. package/dist/components/ds-agent-response.d.ts +11 -0
  53. package/dist/components/ds-agent-response.js +2 -0
  54. package/dist/components/ds-agent-response.js.map +1 -0
  55. package/dist/components/ds-agent-source-list.d.ts +11 -0
  56. package/dist/components/ds-agent-source-list.js +2 -0
  57. package/dist/components/ds-agent-source-list.js.map +1 -0
  58. package/dist/components/ds-agent-tool-call.d.ts +11 -0
  59. package/dist/components/ds-agent-tool-call.js +2 -0
  60. package/dist/components/ds-agent-tool-call.js.map +1 -0
  61. package/dist/components/ds-app-shell.js +1 -1
  62. package/dist/components/ds-app-shell.js.map +1 -1
  63. package/dist/components/ds-attachment-list.d.ts +11 -0
  64. package/dist/components/ds-attachment-list.js +2 -0
  65. package/dist/components/ds-attachment-list.js.map +1 -0
  66. package/dist/components/ds-avatar.d.ts +11 -0
  67. package/dist/components/ds-avatar.js +2 -0
  68. package/dist/components/ds-avatar.js.map +1 -0
  69. package/dist/components/ds-badge.js +1 -1
  70. package/dist/components/ds-banner.js +1 -1
  71. package/dist/components/ds-bar-nav.js +1 -1
  72. package/dist/components/ds-bar-nav.js.map +1 -1
  73. package/dist/components/ds-button-filled.js +1 -1
  74. package/dist/components/ds-button-unfilled.js +1 -1
  75. package/dist/components/ds-card-data-viz-donut.js +1 -1
  76. package/dist/components/ds-card-setting.js +1 -1
  77. package/dist/components/ds-card-shell-data-viz.js +1 -1
  78. package/dist/components/ds-card.js +1 -1
  79. package/dist/components/ds-chart-bar.js +1 -1
  80. package/dist/components/ds-chart-bar.js.map +1 -1
  81. package/dist/components/ds-chart-donut.js +1 -1
  82. package/dist/components/ds-chart-legend.js +1 -1
  83. package/dist/components/ds-chart-line.js +1 -1
  84. package/dist/components/ds-checkbox.js +1 -1
  85. package/dist/components/ds-chip.js +1 -1
  86. package/dist/components/ds-code-block.d.ts +11 -0
  87. package/dist/components/ds-code-block.js +2 -0
  88. package/dist/components/ds-code-block.js.map +1 -0
  89. package/dist/components/ds-conversation-list-item.d.ts +11 -0
  90. package/dist/components/ds-conversation-list-item.js +2 -0
  91. package/dist/components/ds-conversation-list-item.js.map +1 -0
  92. package/dist/components/ds-conversation-list-section.d.ts +11 -0
  93. package/dist/components/ds-conversation-list-section.js +2 -0
  94. package/dist/components/ds-conversation-list-section.js.map +1 -0
  95. package/dist/components/ds-conversation-list.d.ts +11 -0
  96. package/dist/components/ds-conversation-list.js +2 -0
  97. package/dist/components/ds-conversation-list.js.map +1 -0
  98. package/dist/components/ds-divider.js +1 -1
  99. package/dist/components/ds-divider.js.map +1 -1
  100. package/dist/components/ds-empty-state.js +1 -1
  101. package/dist/components/ds-field.js +1 -1
  102. package/dist/components/ds-icon.js +1 -1
  103. package/dist/components/ds-input.js +1 -1
  104. package/dist/components/ds-markdown.d.ts +11 -0
  105. package/dist/components/ds-markdown.js +2 -0
  106. package/dist/components/ds-markdown.js.map +1 -0
  107. package/dist/components/ds-menu.js +1 -1
  108. package/dist/components/ds-message-bubble.d.ts +11 -0
  109. package/dist/components/ds-message-bubble.js +2 -0
  110. package/dist/components/ds-message-bubble.js.map +1 -0
  111. package/dist/components/ds-message-composer.d.ts +11 -0
  112. package/dist/components/ds-message-composer.js +2 -0
  113. package/dist/components/ds-message-composer.js.map +1 -0
  114. package/dist/components/ds-message-scroller.d.ts +11 -0
  115. package/dist/components/ds-message-scroller.js +2 -0
  116. package/dist/components/ds-message-scroller.js.map +1 -0
  117. package/dist/components/ds-message.d.ts +11 -0
  118. package/dist/components/ds-message.js +2 -0
  119. package/dist/components/ds-message.js.map +1 -0
  120. package/dist/components/ds-modal.js +1 -1
  121. package/dist/components/ds-panel-nav.js +1 -1
  122. package/dist/components/ds-panel-nav.js.map +1 -1
  123. package/dist/components/ds-panel-sub-nav.js +1 -1
  124. package/dist/components/ds-panel-tool-header.d.ts +11 -0
  125. package/dist/components/ds-panel-tool-header.js +2 -0
  126. package/dist/components/ds-panel-tool-header.js.map +1 -0
  127. package/dist/components/ds-panel-tool-search.d.ts +11 -0
  128. package/dist/components/ds-panel-tool-search.js +2 -0
  129. package/dist/components/ds-panel-tool-search.js.map +1 -0
  130. package/dist/components/ds-panel-tools.js +1 -1
  131. package/dist/components/ds-panel-tools.js.map +1 -1
  132. package/dist/components/ds-radio.js +1 -1
  133. package/dist/components/ds-select-multi.js +1 -1
  134. package/dist/components/ds-select-multi.js.map +1 -1
  135. package/dist/components/ds-select.js +1 -1
  136. package/dist/components/ds-select.js.map +1 -1
  137. package/dist/components/ds-shell-gradient-picker.js +1 -1
  138. package/dist/components/ds-shell-gradient-picker.js.map +1 -1
  139. package/dist/components/ds-shell-gradient-swatch.js +1 -1
  140. package/dist/components/ds-skeleton.js +1 -1
  141. package/dist/components/ds-slider.js +1 -1
  142. package/dist/components/ds-slider.js.map +1 -1
  143. package/dist/components/ds-swatch-picker.js +1 -1
  144. package/dist/components/ds-switch.js +1 -1
  145. package/dist/components/ds-tab-group.js +1 -1
  146. package/dist/components/ds-tab-group.js.map +1 -1
  147. package/dist/components/ds-tag.js +1 -1
  148. package/dist/components/ds-tag.js.map +1 -1
  149. package/dist/components/ds-text.js +1 -1
  150. package/dist/components/ds-tooltip-data-viz.js +1 -1
  151. package/dist/components/ds-tooltip.js +1 -1
  152. package/dist/components/index.d.ts +14 -0
  153. package/dist/components/{p-HBIxvS5C.js → p-B1pWGQn1.js} +2 -2
  154. package/dist/components/p-BBu_Svz7.js +2 -0
  155. package/dist/components/p-BBu_Svz7.js.map +1 -0
  156. package/dist/components/p-BHpWYKtP.js +2 -0
  157. package/dist/components/p-BHpWYKtP.js.map +1 -0
  158. package/dist/components/{p-KRGBGTu5.js → p-BO6C8abO.js} +2 -2
  159. package/dist/components/p-BRfOCc_h.js +2 -0
  160. package/dist/components/p-BRfOCc_h.js.map +1 -0
  161. package/dist/components/{p-CbS_WWs2.js → p-BSOZXagj.js} +2 -2
  162. package/dist/components/p-BSOZXagj.js.map +1 -0
  163. package/dist/components/p-BhC1YyId.js +2 -0
  164. package/dist/components/p-BhC1YyId.js.map +1 -0
  165. package/dist/components/p-BjtXYFhw.js +2 -0
  166. package/dist/components/p-BjtXYFhw.js.map +1 -0
  167. package/dist/components/p-CBYuvZKM.js +2 -0
  168. package/dist/components/p-CBYuvZKM.js.map +1 -0
  169. package/dist/components/{p-CZ9wemOA.js → p-CJlgONwR.js} +2 -2
  170. package/dist/components/p-CKaJx0IX.js +2 -0
  171. package/dist/components/p-CKaJx0IX.js.map +1 -0
  172. package/dist/components/p-CWNdl52Y.js +2 -0
  173. package/dist/components/p-CWNdl52Y.js.map +1 -0
  174. package/dist/components/{p-DT2MK8Kt.js → p-CblAABEo.js} +2 -2
  175. package/dist/components/p-CeFBA7Dx.js +2 -0
  176. package/dist/components/p-CeFBA7Dx.js.map +1 -0
  177. package/dist/components/p-CiKGqsA2.js +2 -0
  178. package/dist/components/{p-BLzivrE3.js.map → p-CiKGqsA2.js.map} +1 -1
  179. package/dist/components/p-Ci_nVk5P.js +2 -0
  180. package/dist/components/p-Ci_nVk5P.js.map +1 -0
  181. package/dist/components/p-Cijzn3YQ.js +2 -0
  182. package/dist/components/p-Cijzn3YQ.js.map +1 -0
  183. package/dist/components/{p-BbV68F23.js → p-CiwdnKKp.js} +2 -2
  184. package/dist/components/p-DFxqk71w.js +2 -0
  185. package/dist/components/p-DFxqk71w.js.map +1 -0
  186. package/dist/components/p-DVsje4AY.js +2 -0
  187. package/dist/components/p-DVsje4AY.js.map +1 -0
  188. package/dist/components/p-DaQ0ZE_V.js +2 -0
  189. package/dist/components/p-DaQ0ZE_V.js.map +1 -0
  190. package/dist/components/p-DiooIO2B.js +2 -0
  191. package/dist/components/p-DiooIO2B.js.map +1 -0
  192. package/dist/components/p-Dj5MejHv.js +2 -0
  193. package/dist/components/p-Dj5MejHv.js.map +1 -0
  194. package/dist/components/{p-B-zhgAvL.js → p-DnMCRAwx.js} +2 -2
  195. package/dist/components/{p-DyZj3k9S.js → p-Dst-OliP.js} +2 -2
  196. package/dist/components/p-Dst-OliP.js.map +1 -0
  197. package/dist/components/p-T0Mzhv3-.js +2 -0
  198. package/dist/components/p-T0Mzhv3-.js.map +1 -0
  199. package/dist/components/p-a9nGf1s6.js +2 -0
  200. package/dist/components/p-a9nGf1s6.js.map +1 -0
  201. package/dist/components/p-gidVv1FX.js +2 -0
  202. package/dist/components/p-gidVv1FX.js.map +1 -0
  203. package/dist/components/p-kezp2_Xu.js +2 -0
  204. package/dist/components/p-kezp2_Xu.js.map +1 -0
  205. package/dist/components/p-rEe-3KR_.js +2 -0
  206. package/dist/components/p-rEe-3KR_.js.map +1 -0
  207. package/dist/components/{p-C7RObioO.js → p-xB0GPG3-.js} +2 -2
  208. package/dist/docs/components.json +8294 -4079
  209. package/dist/lib/components/Menu/menu-placement.d.ts +13 -0
  210. package/dist/lib/shell/index.d.ts +1 -1
  211. package/dist/lib/shell/index.js +8 -0
  212. package/dist/lib/shell/index.js.map +2 -2
  213. package/dist/mcp-data/registry/agent-activity.json +158 -0
  214. package/dist/mcp-data/registry/agent-response.json +211 -0
  215. package/dist/mcp-data/registry/agent-source-list.json +153 -0
  216. package/dist/mcp-data/registry/agent-tool-call.json +213 -0
  217. package/dist/mcp-data/registry/app-shell.json +2 -2
  218. package/dist/mcp-data/registry/attachment-list.json +137 -0
  219. package/dist/mcp-data/registry/avatar.json +154 -0
  220. package/dist/mcp-data/registry/bar-nav.json +2 -2
  221. package/dist/mcp-data/registry/button-unfilled.json +2 -2
  222. package/dist/mcp-data/registry/code-block.json +150 -0
  223. package/dist/mcp-data/registry/conversation-list-item.json +283 -0
  224. package/dist/mcp-data/registry/conversation-list-section.json +139 -0
  225. package/dist/mcp-data/registry/conversation-list.json +101 -0
  226. package/dist/mcp-data/registry/markdown.json +141 -0
  227. package/dist/mcp-data/registry/menu.json +43 -7
  228. package/dist/mcp-data/registry/message-bubble.json +119 -0
  229. package/dist/mcp-data/registry/message-composer.json +265 -0
  230. package/dist/mcp-data/registry/message-scroller.json +217 -0
  231. package/dist/mcp-data/registry/message.json +255 -0
  232. package/dist/mcp-data/registry/panel-nav.json +20 -2
  233. package/dist/mcp-data/registry/panel-tool-header.json +342 -0
  234. package/dist/mcp-data/registry/panel-tool-search.json +387 -0
  235. package/dist/mcp-data/registry/panel-tools.json +150 -10
  236. package/dist/mcp-data/registry/registry.json +2159 -616
  237. package/dist/mcp-data/registry/select.json +1 -1
  238. package/dist/mcp-data/registry/slider.json +4 -4
  239. package/dist/mcp-data/registry/switch.json +1 -1
  240. package/dist/mcp-data/registry/tab-group.json +2 -2
  241. package/dist/mcp-data/registry/tag.json +2 -2
  242. package/dist/mcp-data/registry/text.json +1 -1
  243. package/dist/react/components.d.ts +17 -0
  244. package/dist/react/components.js +17 -0
  245. package/dist/react/ds-agent-activity.d.ts +9 -0
  246. package/dist/react/ds-agent-activity.js +12 -0
  247. package/dist/react/ds-agent-response.d.ts +9 -0
  248. package/dist/react/ds-agent-response.js +12 -0
  249. package/dist/react/ds-agent-source-list.d.ts +9 -0
  250. package/dist/react/ds-agent-source-list.js +12 -0
  251. package/dist/react/ds-agent-tool-call.d.ts +9 -0
  252. package/dist/react/ds-agent-tool-call.js +12 -0
  253. package/dist/react/ds-attachment-list.d.ts +9 -0
  254. package/dist/react/ds-attachment-list.js +12 -0
  255. package/dist/react/ds-avatar.d.ts +9 -0
  256. package/dist/react/ds-avatar.js +12 -0
  257. package/dist/react/ds-code-block.d.ts +9 -0
  258. package/dist/react/ds-code-block.js +12 -0
  259. package/dist/react/ds-conversation-list-item.d.ts +14 -0
  260. package/dist/react/ds-conversation-list-item.js +12 -0
  261. package/dist/react/ds-conversation-list-section.d.ts +9 -0
  262. package/dist/react/ds-conversation-list-section.js +12 -0
  263. package/dist/react/ds-conversation-list.d.ts +9 -0
  264. package/dist/react/ds-conversation-list.js +12 -0
  265. package/dist/react/ds-markdown.d.ts +9 -0
  266. package/dist/react/ds-markdown.js +12 -0
  267. package/dist/react/ds-menu.d.ts +1 -0
  268. package/dist/react/ds-menu.js +1 -0
  269. package/dist/react/ds-message-bubble.d.ts +9 -0
  270. package/dist/react/ds-message-bubble.js +12 -0
  271. package/dist/react/ds-message-composer.d.ts +16 -0
  272. package/dist/react/ds-message-composer.js +16 -0
  273. package/dist/react/ds-message-scroller.d.ts +12 -0
  274. package/dist/react/ds-message-scroller.js +12 -0
  275. package/dist/react/ds-message.d.ts +9 -0
  276. package/dist/react/ds-message.js +12 -0
  277. package/dist/react/ds-panel-tool-header.d.ts +17 -0
  278. package/dist/react/ds-panel-tool-header.js +16 -0
  279. package/dist/react/ds-panel-tool-search.d.ts +14 -0
  280. package/dist/react/ds-panel-tool-search.js +16 -0
  281. package/dist/react/ds-panel-tools.d.ts +10 -0
  282. package/dist/react/ds-panel-tools.js +3 -0
  283. package/dist/types/components/AgentActivity/AgentActivity.d.ts +14 -0
  284. package/dist/types/components/AgentResponse/AgentResponse.d.ts +12 -0
  285. package/dist/types/components/AgentSourceList/AgentSourceList.d.ts +9 -0
  286. package/dist/types/components/AgentToolCall/AgentToolCall.d.ts +13 -0
  287. package/dist/types/components/AppShell/AppShell.d.ts +4 -0
  288. package/dist/types/components/AttachmentList/AttachmentList.d.ts +8 -0
  289. package/dist/types/components/Avatar/Avatar.d.ts +11 -0
  290. package/dist/types/components/BarNav/BarNav.d.ts +2 -0
  291. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -0
  292. package/dist/types/components/CodeBlock/CodeBlock.d.ts +11 -0
  293. package/dist/types/components/ConversationList/ConversationList.d.ts +4 -0
  294. package/dist/types/components/ConversationListItem/ConversationListItem.d.ts +24 -0
  295. package/dist/types/components/ConversationListSection/ConversationListSection.d.ts +9 -0
  296. package/dist/types/components/Markdown/Markdown.d.ts +15 -0
  297. package/dist/types/components/Menu/Menu.d.ts +9 -0
  298. package/dist/types/components/Menu/menu-placement.d.ts +13 -0
  299. package/dist/types/components/Menu/menu-types.d.ts +1 -1
  300. package/dist/types/components/Message/Message.d.ts +17 -0
  301. package/dist/types/components/MessageBubble/MessageBubble.d.ts +6 -0
  302. package/dist/types/components/MessageComposer/MessageComposer.d.ts +29 -0
  303. package/dist/types/components/MessageScroller/MessageScroller.d.ts +41 -0
  304. package/dist/types/components/PanelNav/PanelNav.d.ts +5 -0
  305. package/dist/types/components/PanelToolHeader/PanelToolHeader.d.ts +34 -0
  306. package/dist/types/components/PanelToolSearch/PanelToolSearch.d.ts +35 -0
  307. package/dist/types/components/PanelTools/PanelTools.d.ts +40 -1
  308. package/dist/types/components/PanelTools/panel-tools-types.d.ts +20 -0
  309. package/dist/types/components/PanelTools/panel-tools-utils.d.ts +2 -0
  310. package/dist/types/components/Slider/Slider.d.ts +1 -1
  311. package/dist/types/components/conversation-types.d.ts +55 -0
  312. package/dist/types/components.d.ts +1229 -14
  313. package/dist/types/shell/index.d.ts +1 -1
  314. package/dist/types/utils/choice-list-parts.d.ts +4 -1
  315. package/package.json +11 -11
  316. package/dist/components/p-BLzivrE3.js +0 -2
  317. package/dist/components/p-C7UFYvsO.js +0 -2
  318. package/dist/components/p-C7UFYvsO.js.map +0 -1
  319. package/dist/components/p-CXF8yd-g.js +0 -2
  320. package/dist/components/p-CXF8yd-g.js.map +0 -1
  321. package/dist/components/p-CbS_WWs2.js.map +0 -1
  322. package/dist/components/p-DyZj3k9S.js.map +0 -1
  323. package/dist/components/p-VKIsOVza.js +0 -2
  324. package/dist/components/p-VKIsOVza.js.map +0 -1
  325. package/dist/components/p-tQ1QHeOE.js +0 -2
  326. package/dist/components/p-tQ1QHeOE.js.map +0 -1
  327. /package/dist/components/{p-HBIxvS5C.js.map → p-B1pWGQn1.js.map} +0 -0
  328. /package/dist/components/{p-KRGBGTu5.js.map → p-BO6C8abO.js.map} +0 -0
  329. /package/dist/components/{p-CZ9wemOA.js.map → p-CJlgONwR.js.map} +0 -0
  330. /package/dist/components/{p-DT2MK8Kt.js.map → p-CblAABEo.js.map} +0 -0
  331. /package/dist/components/{p-BbV68F23.js.map → p-CiwdnKKp.js.map} +0 -0
  332. /package/dist/components/{p-B-zhgAvL.js.map → p-DnMCRAwx.js.map} +0 -0
  333. /package/dist/components/{p-C7RObioO.js.map → p-xB0GPG3-.js.map} +0 -0
@@ -0,0 +1,283 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "conversation-list-item",
4
+ "title": "ConversationListItem",
5
+ "description": "Selectable conversation row with one-line preview, recency, unread presence, generic busy or error status, and channel-owned accessory slots.",
6
+ "type": "registry:ui",
7
+ "meta": {
8
+ "library": "@ds-mo/ui",
9
+ "distribution": "npm",
10
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/conversation-list-item",
11
+ "source": "src/wc/components/ConversationListItem/ConversationListItem.tsx",
12
+ "intentStatus": "complete",
13
+ "intent": {
14
+ "audience": "general",
15
+ "status": "experimental",
16
+ "summary": "Selectable conversation row with one-line preview, recency, unread presence, generic busy or error status, and channel-owned accessory slots.",
17
+ "useWhen": [
18
+ "A conversation history needs a compact row that opens one thread."
19
+ ],
20
+ "avoidWhen": [
21
+ "The row represents a command rather than a persisted conversation."
22
+ ],
23
+ "commonlyComposedWith": [
24
+ "component:ds-conversation-list-section",
25
+ "component:ds-avatar",
26
+ "component:ds-badge",
27
+ "component:ds-loader"
28
+ ],
29
+ "patterns": [
30
+ "pattern:conversation"
31
+ ],
32
+ "accessibility": [
33
+ "The conversation surface is one button with its title as the primary accessible name; actions are sibling controls so buttons are never nested.",
34
+ "An action in the actions slot remains keyboard-focusable and appears on row focus as well as pointer hover; touch layouts keep it visible.",
35
+ "Status copy must make busy or error meaning available without relying on motion or color."
36
+ ],
37
+ "states": [
38
+ "Rows reuse the md choice-item label/subtext recipe used by Menu, including 6px row padding, 2px text inset, and the shared content gap. The enclosing conversation-list scroll region supplies the larger 8px outer container padding.",
39
+ "Busy and error are generic channel-neutral states; the owning product supplies suitable status wording.",
40
+ "Any positive unreadCount renders one dot on the title row rather than a visible counter; the accessible row name may still announce the exact unread quantity.",
41
+ "Hover and press use the shared interaction hover and pressed overlays. Only the selected conversation uses the persistent active fill.",
42
+ "The title uses body-medium emphasis, not title-small, and the body-small preview truncates after one line. Unread titles use primary foreground; read titles use secondary foreground.",
43
+ "The actions slot overlays the row at an 8px right inset without changing title or preview measure, and paints above the row interaction wash while that wash remains active."
44
+ ],
45
+ "responsiveBehavior": [
46
+ "Long titles and previews truncate without displacing trailing status."
47
+ ],
48
+ "references": [
49
+ {
50
+ "label": "Storybook examples",
51
+ "path": "src/wc/components/ConversationList/ConversationList.stories.ts"
52
+ }
53
+ ]
54
+ },
55
+ "api": {
56
+ "props": {
57
+ "actionsOpen": {
58
+ "type": "boolean",
59
+ "resolvedType": "boolean",
60
+ "attribute": "actions-open",
61
+ "default": "false",
62
+ "required": false,
63
+ "mutable": false,
64
+ "description": "Keep the contextual-actions surface visible while its popup is open or closing."
65
+ },
66
+ "conversationId": {
67
+ "type": "string",
68
+ "resolvedType": "string",
69
+ "attribute": "conversation-id",
70
+ "default": "''",
71
+ "required": false,
72
+ "mutable": false
73
+ },
74
+ "conversationTitle": {
75
+ "type": "string",
76
+ "resolvedType": "string",
77
+ "attribute": "conversation-title",
78
+ "default": "''",
79
+ "required": false,
80
+ "mutable": false,
81
+ "description": "Visible conversation title. Named to avoid the native HTMLElement.title contract."
82
+ },
83
+ "preview": {
84
+ "type": "string",
85
+ "resolvedType": "string",
86
+ "attribute": "preview",
87
+ "default": "''",
88
+ "required": false,
89
+ "mutable": false
90
+ },
91
+ "selected": {
92
+ "type": "boolean",
93
+ "resolvedType": "boolean",
94
+ "attribute": "selected",
95
+ "default": "false",
96
+ "required": false,
97
+ "mutable": false
98
+ },
99
+ "state": {
100
+ "type": "ConversationItemState",
101
+ "resolvedType": "\"busy\" | \"default\" | \"error\"",
102
+ "attribute": "state",
103
+ "default": "'default'",
104
+ "required": false,
105
+ "mutable": false
106
+ },
107
+ "statusLabel": {
108
+ "type": "string",
109
+ "resolvedType": "string",
110
+ "attribute": "status-label",
111
+ "default": "''",
112
+ "required": false,
113
+ "mutable": false
114
+ },
115
+ "unreadCount": {
116
+ "type": "number",
117
+ "resolvedType": "number",
118
+ "attribute": "unread-count",
119
+ "default": "0",
120
+ "required": false,
121
+ "mutable": false
122
+ },
123
+ "updatedAt": {
124
+ "type": "string",
125
+ "resolvedType": "string",
126
+ "attribute": "updated-at",
127
+ "default": "''",
128
+ "required": false,
129
+ "mutable": false,
130
+ "description": "ISO timestamp for semantic activity metadata."
131
+ }
132
+ },
133
+ "events": [
134
+ {
135
+ "name": "dsSelect",
136
+ "detail": "{ id: string }",
137
+ "bubbles": true,
138
+ "cancelable": true,
139
+ "composed": true
140
+ }
141
+ ],
142
+ "methods": [],
143
+ "slots": []
144
+ },
145
+ "props": {
146
+ "actionsOpen": {
147
+ "type": "boolean",
148
+ "resolvedType": "boolean",
149
+ "attribute": "actions-open",
150
+ "default": "false",
151
+ "required": false,
152
+ "mutable": false,
153
+ "description": "Keep the contextual-actions surface visible while its popup is open or closing."
154
+ },
155
+ "conversationId": {
156
+ "type": "string",
157
+ "resolvedType": "string",
158
+ "attribute": "conversation-id",
159
+ "default": "''",
160
+ "required": false,
161
+ "mutable": false
162
+ },
163
+ "conversationTitle": {
164
+ "type": "string",
165
+ "resolvedType": "string",
166
+ "attribute": "conversation-title",
167
+ "default": "''",
168
+ "required": false,
169
+ "mutable": false,
170
+ "description": "Visible conversation title. Named to avoid the native HTMLElement.title contract."
171
+ },
172
+ "preview": {
173
+ "type": "string",
174
+ "resolvedType": "string",
175
+ "attribute": "preview",
176
+ "default": "''",
177
+ "required": false,
178
+ "mutable": false
179
+ },
180
+ "selected": {
181
+ "type": "boolean",
182
+ "resolvedType": "boolean",
183
+ "attribute": "selected",
184
+ "default": "false",
185
+ "required": false,
186
+ "mutable": false
187
+ },
188
+ "state": {
189
+ "type": "ConversationItemState",
190
+ "resolvedType": "\"busy\" | \"default\" | \"error\"",
191
+ "attribute": "state",
192
+ "default": "'default'",
193
+ "required": false,
194
+ "mutable": false
195
+ },
196
+ "statusLabel": {
197
+ "type": "string",
198
+ "resolvedType": "string",
199
+ "attribute": "status-label",
200
+ "default": "''",
201
+ "required": false,
202
+ "mutable": false
203
+ },
204
+ "unreadCount": {
205
+ "type": "number",
206
+ "resolvedType": "number",
207
+ "attribute": "unread-count",
208
+ "default": "0",
209
+ "required": false,
210
+ "mutable": false
211
+ },
212
+ "updatedAt": {
213
+ "type": "string",
214
+ "resolvedType": "string",
215
+ "attribute": "updated-at",
216
+ "default": "''",
217
+ "required": false,
218
+ "mutable": false,
219
+ "description": "ISO timestamp for semantic activity metadata."
220
+ }
221
+ },
222
+ "events": [
223
+ {
224
+ "name": "dsSelect",
225
+ "detail": "{ id: string }",
226
+ "bubbles": true,
227
+ "cancelable": true,
228
+ "composed": true
229
+ }
230
+ ],
231
+ "methods": [],
232
+ "slots": [],
233
+ "exports": {
234
+ "customElement": "ds-conversation-list-item",
235
+ "react": "DsConversationListItem",
236
+ "angular": "DsConversationListItem"
237
+ },
238
+ "consumption": {
239
+ "install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
240
+ "cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
241
+ "customElements": {
242
+ "import": "import '@ds-mo/ui/dist/components/ds-conversation-list-item.js';",
243
+ "example": "<ds-conversation-list-item></ds-conversation-list-item>"
244
+ },
245
+ "react": {
246
+ "import": "import { DsConversationListItem } from '@ds-mo/ui/react';",
247
+ "example": "<DsConversationListItem />"
248
+ },
249
+ "angular": {
250
+ "import": "import { DsConversationListItem } from '@ds-mo/ui/angular/ds-conversation-list-item';",
251
+ "example": "<ds-conversation-list-item></ds-conversation-list-item>"
252
+ },
253
+ "peerDependencies": {
254
+ "required": [
255
+ "@ds-mo/tokens ^3.1.1",
256
+ "@ds-mo/icons ^6.2.0"
257
+ ],
258
+ "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
259
+ }
260
+ }
261
+ },
262
+ "dependencies": [
263
+ "@ds-mo/ui",
264
+ "@ds-mo/tokens"
265
+ ],
266
+ "registryDependencies": [
267
+ "badge",
268
+ "loader",
269
+ "text"
270
+ ],
271
+ "files": [
272
+ {
273
+ "path": "src/wc/components/ConversationListItem/ConversationListItem.css",
274
+ "content": "@import '../../utils/choice-list.css';\n\n:host {\n display: block;\n box-sizing: border-box;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.conversation-list-item__row {\n position: relative;\n isolation: isolate;\n}\n\n.conversation-list-item {\n color: var(--color-foreground-primary);\n}\n\n.conversation-list-item--error {\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--color-border-bold-negative);\n}\n\n.conversation-list-item__leading:empty,\n.conversation-list-item__trailing:empty {\n display: none;\n}\n\n.conversation-list-item__leading,\n.conversation-list-item__trailing,\n.conversation-list-item__preview-row {\n display: flex;\n align-items: center;\n}\n\n.conversation-list-item__leading {\n align-self: center;\n width: auto;\n height: auto;\n margin-inline-start: var(--ds-control-label-inset, var(--dimension-space-025));\n margin-inline-end: var(--dimension-space-050);\n}\n\n.conversation-list-item__content {\n min-width: 0;\n}\n\n.conversation-list-item__title-row {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n.conversation-list-item__preview-row {\n min-width: 0;\n gap: var(--dimension-space-050);\n}\n\nds-text.conversation-list-item__title,\nds-text.conversation-list-item__preview {\n display: block;\n min-width: 0;\n}\n\nds-text.conversation-list-item__title {\n flex: 1;\n}\n\n.conversation-list-item__unread {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--dimension-size-200);\n margin-inline-end: var(--dimension-space-025);\n}\n\nds-text.conversation-list-item__preview.ds-choice-item__subtext {\n -webkit-line-clamp: 1;\n}\n\n.conversation-list-item__actions {\n position: absolute;\n top: 50%;\n right: var(--dimension-space-100);\n z-index: var(--dimension-z-index-floating);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dimension-radius-half);\n background: var(--color-background-transparent);\n box-shadow: var(--effect-elevation-elevated-md);\n -webkit-backdrop-filter: blur(var(--effect-blur-sm));\n backdrop-filter: blur(var(--effect-blur-sm));\n opacity: 0;\n pointer-events: none;\n transform: translateY(-50%);\n}\n\n.conversation-list-item__row:hover .conversation-list-item__actions,\n.conversation-list-item__row:has(:focus-visible) .conversation-list-item__actions,\n:host(.conversation-list-item--actions-open) .conversation-list-item__actions {\n opacity: 1;\n pointer-events: auto;\n}\n\n/* Keep the row wash continuous while the pointer moves onto its sibling action. */\n.conversation-list-item__row:hover .conversation-list-item::after {\n background: var(--ds-interaction-hover);\n}\n\n:host(.conversation-list-item--actions-open) .conversation-list-item::after {\n background: var(--ds-interaction-hover);\n}\n\n.conversation-list-item__row:active .conversation-list-item::after {\n background: var(--ds-interaction-pressed);\n}\n\n@media (hover: none) {\n .conversation-list-item__actions {\n opacity: 1;\n pointer-events: auto;\n }\n\n :host(.conversation-list-item--has-actions) .conversation-list-item__title-row {\n padding-inline-end: var(--dimension-size-400);\n }\n}\n\n.conversation-list-item__time {\n position: absolute;\n width: var(--dimension-size-050);\n height: var(--dimension-size-050);\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n",
275
+ "type": "registry:ui"
276
+ },
277
+ {
278
+ "path": "src/wc/components/ConversationListItem/ConversationListItem.tsx",
279
+ "content": "import { Component, Element, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\nimport type { ConversationItemState } from '../conversation-types';\n\n@Component({\n tag: 'ds-conversation-list-item',\n styleUrl: 'ConversationListItem.css',\n scoped: true,\n})\nexport class ConversationListItem {\n @Element() el!: HTMLElement;\n\n @Prop() conversationId: string = '';\n /** Visible conversation title. Named to avoid the native HTMLElement.title contract. */\n @Prop() conversationTitle: string = '';\n @Prop() preview: string = '';\n /** ISO timestamp for semantic activity metadata. */\n @Prop() updatedAt: string = '';\n @Prop() selected: boolean = false;\n @Prop() state: ConversationItemState = 'default';\n @Prop() statusLabel: string = '';\n @Prop() unreadCount: number = 0;\n /** Keep the contextual-actions surface visible while its popup is open or closing. */\n @Prop({ reflect: true }) actionsOpen: boolean = false;\n\n @Event() dsSelect!: EventEmitter<{ id: string }>;\n\n private handleClick = () => this.dsSelect.emit({ id: this.conversationId });\n\n private handleActionsSlotChange = (event: Event) => {\n const slot = event.target as HTMLSlotElement;\n this.el.classList.toggle(\n 'conversation-list-item--has-actions',\n slot.assignedElements({ flatten: true }).length > 0\n );\n };\n\n render() {\n const busy = this.state === 'busy';\n const subtext = busy && this.statusLabel ? this.statusLabel : this.preview;\n const accessibleName = [\n this.conversationTitle,\n subtext,\n this.unreadCount > 0 ? `${this.unreadCount} unread` : '',\n ]\n .filter(Boolean)\n .join('. ');\n\n return (\n <Host\n role=\"listitem\"\n class={{ 'conversation-list-item--actions-open': this.actionsOpen }}\n >\n <div class=\"conversation-list-item__row\">\n <button\n type=\"button\"\n class={{\n 'conversation-list-item': true,\n 'ds-choice-item': true,\n 'ds-control--md': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': this.selected,\n 'conversation-list-item--error': this.state === 'error',\n }}\n aria-label={accessibleName}\n aria-current={this.selected ? 'true' : undefined}\n aria-busy={busy ? 'true' : undefined}\n onClick={this.handleClick}\n >\n <span class=\"conversation-list-item__leading ds-choice-item__icon ds-interaction-fill__content\">\n <slot name=\"leading\" />\n </span>\n <span class=\"conversation-list-item__content ds-choice-item__content ds-interaction-fill__content\">\n <span class=\"conversation-list-item__title-row\">\n <ds-text\n class=\"conversation-list-item__title ds-choice-item__label\"\n as=\"span\"\n variant=\"text-body-medium\"\n emphasis\n color={this.unreadCount > 0 ? 'primary' : 'secondary'}\n lineTruncation={1}\n >\n {this.conversationTitle}\n </ds-text>\n {this.unreadCount > 0 ? (\n <span class=\"conversation-list-item__unread\">\n <ds-badge variant=\"dot\" surface=\"secondary\" />\n </span>\n ) : null}\n </span>\n <span class=\"conversation-list-item__preview-row\">\n {busy ? <ds-loader size=\"xs\" color=\"secondary\" /> : null}\n <ds-text\n class=\"conversation-list-item__preview ds-choice-item__subtext\"\n as=\"span\"\n variant=\"text-body-small\"\n color={this.state === 'error' ? 'negative' : 'secondary'}\n lineTruncation={1}\n >\n {subtext}\n </ds-text>\n </span>\n {this.updatedAt ? (\n <time class=\"conversation-list-item__time\" dateTime={this.updatedAt}>\n {this.updatedAt}\n </time>\n ) : null}\n </span>\n <span class=\"conversation-list-item__trailing ds-interaction-fill__content\">\n <slot name=\"trailing\" />\n </span>\n </button>\n <div class=\"conversation-list-item__actions\">\n <slot name=\"actions\" onSlotchange={this.handleActionsSlotChange} />\n </div>\n </div>\n </Host>\n );\n }\n}\n",
280
+ "type": "registry:ui"
281
+ }
282
+ ]
283
+ }
@@ -0,0 +1,139 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "conversation-list-section",
4
+ "title": "ConversationListSection",
5
+ "description": "Semantically labelled section for grouping conversation rows by meaningful chronology or category.",
6
+ "type": "registry:ui",
7
+ "meta": {
8
+ "library": "@ds-mo/ui",
9
+ "distribution": "npm",
10
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/conversation-list-section",
11
+ "source": "src/wc/components/ConversationListSection/ConversationListSection.tsx",
12
+ "intentStatus": "complete",
13
+ "intent": {
14
+ "audience": "general",
15
+ "status": "experimental",
16
+ "summary": "Semantically labelled section for grouping conversation rows by meaningful chronology or category.",
17
+ "useWhen": [
18
+ "A conversation list needs visible groups such as Today, Yesterday, or Older."
19
+ ],
20
+ "avoidWhen": [
21
+ "A flat list is clearer or the proposed grouping has no meaning to readers."
22
+ ],
23
+ "commonlyComposedWith": [
24
+ "component:ds-conversation-list",
25
+ "component:ds-conversation-list-item"
26
+ ],
27
+ "patterns": [
28
+ "pattern:conversation"
29
+ ],
30
+ "accessibility": [
31
+ "The visible heading labels the section and must describe the relationship shared by its rows."
32
+ ],
33
+ "responsiveBehavior": [
34
+ "Rows remain full width while the heading stays visible in document order."
35
+ ],
36
+ "references": [
37
+ {
38
+ "label": "Storybook examples",
39
+ "path": "src/wc/components/ConversationList/ConversationList.stories.ts"
40
+ }
41
+ ]
42
+ },
43
+ "api": {
44
+ "props": {
45
+ "heading": {
46
+ "type": "string",
47
+ "resolvedType": "string",
48
+ "attribute": "heading",
49
+ "default": "''",
50
+ "required": false,
51
+ "mutable": false,
52
+ "description": "Visible section heading."
53
+ },
54
+ "sectionId": {
55
+ "type": "string",
56
+ "resolvedType": "string",
57
+ "attribute": "section-id",
58
+ "default": "''",
59
+ "required": false,
60
+ "mutable": false,
61
+ "description": "Optional stable id used for the section heading."
62
+ }
63
+ },
64
+ "events": [],
65
+ "methods": [],
66
+ "slots": []
67
+ },
68
+ "props": {
69
+ "heading": {
70
+ "type": "string",
71
+ "resolvedType": "string",
72
+ "attribute": "heading",
73
+ "default": "''",
74
+ "required": false,
75
+ "mutable": false,
76
+ "description": "Visible section heading."
77
+ },
78
+ "sectionId": {
79
+ "type": "string",
80
+ "resolvedType": "string",
81
+ "attribute": "section-id",
82
+ "default": "''",
83
+ "required": false,
84
+ "mutable": false,
85
+ "description": "Optional stable id used for the section heading."
86
+ }
87
+ },
88
+ "events": [],
89
+ "methods": [],
90
+ "slots": [],
91
+ "exports": {
92
+ "customElement": "ds-conversation-list-section",
93
+ "react": "DsConversationListSection",
94
+ "angular": "DsConversationListSection"
95
+ },
96
+ "consumption": {
97
+ "install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
98
+ "cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
99
+ "customElements": {
100
+ "import": "import '@ds-mo/ui/dist/components/ds-conversation-list-section.js';",
101
+ "example": "<ds-conversation-list-section></ds-conversation-list-section>"
102
+ },
103
+ "react": {
104
+ "import": "import { DsConversationListSection } from '@ds-mo/ui/react';",
105
+ "example": "<DsConversationListSection />"
106
+ },
107
+ "angular": {
108
+ "import": "import { DsConversationListSection } from '@ds-mo/ui/angular/ds-conversation-list-section';",
109
+ "example": "<ds-conversation-list-section></ds-conversation-list-section>"
110
+ },
111
+ "peerDependencies": {
112
+ "required": [
113
+ "@ds-mo/tokens ^3.1.1",
114
+ "@ds-mo/icons ^6.2.0"
115
+ ],
116
+ "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
117
+ }
118
+ }
119
+ },
120
+ "dependencies": [
121
+ "@ds-mo/ui",
122
+ "@ds-mo/tokens"
123
+ ],
124
+ "registryDependencies": [
125
+ "text"
126
+ ],
127
+ "files": [
128
+ {
129
+ "path": "src/wc/components/ConversationListSection/ConversationListSection.css",
130
+ "content": ":host {\n display: block;\n box-sizing: border-box;\n -webkit-user-select: none;\n user-select: none;\n}\n\n:host(:not(:first-child)) {\n /* Match the 16px separation between PanelNav groups. */\n margin-top: var(--dimension-space-200);\n}\n\n.conversation-list-section {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-050);\n}\n\nds-text.conversation-list-section__heading {\n display: block;\n padding: var(--dimension-space-050) var(--dimension-space-100);\n}\n\n.conversation-list-section__items {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-025);\n}\n",
131
+ "type": "registry:ui"
132
+ },
133
+ {
134
+ "path": "src/wc/components/ConversationListSection/ConversationListSection.tsx",
135
+ "content": "import { Component, h, Host, Prop } from '@stencil/core';\n\nlet sectionId = 0;\n\n@Component({\n tag: 'ds-conversation-list-section',\n styleUrl: 'ConversationListSection.css',\n scoped: true,\n})\nexport class ConversationListSection {\n /** Visible section heading. */\n @Prop() heading: string = '';\n /** Optional stable id used for the section heading. */\n @Prop() sectionId: string = '';\n\n private readonly generatedId = `ds-conversation-section-${++sectionId}`;\n\n render() {\n const headingId = this.sectionId || this.generatedId;\n return (\n <Host>\n <section class=\"conversation-list-section\" aria-labelledby={headingId}>\n <ds-text\n class=\"conversation-list-section__heading\"\n textId={headingId}\n as=\"h3\"\n variant=\"text-caption\"\n emphasis\n color=\"secondary\"\n >\n {this.heading}\n </ds-text>\n <div class=\"conversation-list-section__items\" role=\"list\">\n <slot />\n </div>\n </section>\n </Host>\n );\n }\n}\n",
136
+ "type": "registry:ui"
137
+ }
138
+ ]
139
+ }
@@ -0,0 +1,101 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "conversation-list",
4
+ "title": "ConversationList",
5
+ "description": "Scrollable conversation-list region with dedicated empty and floating-action placement.",
6
+ "type": "registry:ui",
7
+ "meta": {
8
+ "library": "@ds-mo/ui",
9
+ "distribution": "npm",
10
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/conversation-list",
11
+ "source": "src/wc/components/ConversationList/ConversationList.tsx",
12
+ "intentStatus": "complete",
13
+ "intent": {
14
+ "audience": "general",
15
+ "status": "experimental",
16
+ "summary": "Scrollable conversation-list region with dedicated empty and floating-action placement.",
17
+ "useWhen": [
18
+ "A messaging-like surface needs a reusable history list with empty and action regions."
19
+ ],
20
+ "avoidWhen": [
21
+ "The content is not a collection of conversations or threads."
22
+ ],
23
+ "commonlyComposedWith": [
24
+ "component:ds-conversation-list-section",
25
+ "component:ds-conversation-list-item",
26
+ "component:ds-empty-state"
27
+ ],
28
+ "patterns": [
29
+ "pattern:conversation"
30
+ ],
31
+ "accessibility": [
32
+ "Provide an accessible list label through the surrounding heading or region.",
33
+ "Keep the empty message descriptive and the floating action explicitly named."
34
+ ],
35
+ "responsiveBehavior": [
36
+ "The list fills its owner, scrolls independently, and keeps its action at the lower end corner."
37
+ ],
38
+ "references": [
39
+ {
40
+ "label": "Storybook examples",
41
+ "path": "src/wc/components/ConversationList/ConversationList.stories.ts"
42
+ }
43
+ ]
44
+ },
45
+ "api": {
46
+ "props": {},
47
+ "events": [],
48
+ "methods": [],
49
+ "slots": []
50
+ },
51
+ "props": {},
52
+ "events": [],
53
+ "methods": [],
54
+ "slots": [],
55
+ "exports": {
56
+ "customElement": "ds-conversation-list",
57
+ "react": "DsConversationList",
58
+ "angular": "DsConversationList"
59
+ },
60
+ "consumption": {
61
+ "install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
62
+ "cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
63
+ "customElements": {
64
+ "import": "import '@ds-mo/ui/dist/components/ds-conversation-list.js';",
65
+ "example": "<ds-conversation-list></ds-conversation-list>"
66
+ },
67
+ "react": {
68
+ "import": "import { DsConversationList } from '@ds-mo/ui/react';",
69
+ "example": "<DsConversationList />"
70
+ },
71
+ "angular": {
72
+ "import": "import { DsConversationList } from '@ds-mo/ui/angular/ds-conversation-list';",
73
+ "example": "<ds-conversation-list></ds-conversation-list>"
74
+ },
75
+ "peerDependencies": {
76
+ "required": [
77
+ "@ds-mo/tokens ^3.1.1",
78
+ "@ds-mo/icons ^6.2.0"
79
+ ],
80
+ "frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
81
+ }
82
+ }
83
+ },
84
+ "dependencies": [
85
+ "@ds-mo/ui",
86
+ "@ds-mo/tokens"
87
+ ],
88
+ "registryDependencies": [],
89
+ "files": [
90
+ {
91
+ "path": "src/wc/components/ConversationList/ConversationList.css",
92
+ "content": ":host {\n display: block;\n width: 100%;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.conversation-list {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n}\n\n.conversation-list__content {\n position: relative;\n flex: 1 1 auto;\n min-height: 0;\n overflow: auto;\n padding: var(--dimension-space-100);\n padding-bottom: calc(var(--dimension-size-600) + var(--dimension-size-100));\n box-sizing: border-box;\n}\n\n.conversation-list__empty {\n display: contents;\n}\n\n.conversation-list__actions {\n position: absolute;\n right: var(--dimension-space-200);\n bottom: var(--dimension-space-200);\n z-index: var(--dimension-z-index-floating);\n}\n\n.conversation-list__actions-surface {\n display: flex;\n border-radius: var(--dimension-radius-half);\n box-shadow: var(--effect-elevation-elevated-md);\n}\n\n.conversation-list__actions-surface:empty {\n display: none;\n}\n",
93
+ "type": "registry:ui"
94
+ },
95
+ {
96
+ "path": "src/wc/components/ConversationList/ConversationList.tsx",
97
+ "content": "import { Component, h, Host } from '@stencil/core';\n\n@Component({\n tag: 'ds-conversation-list',\n styleUrl: 'ConversationList.css',\n scoped: true,\n})\nexport class ConversationList {\n render() {\n return (\n <Host>\n <div class=\"conversation-list\">\n <div class=\"conversation-list__content\">\n <slot />\n <div class=\"conversation-list__empty\">\n <slot name=\"empty\" />\n </div>\n </div>\n <div class=\"conversation-list__actions\">\n <div class=\"conversation-list__actions-surface\">\n <slot name=\"actions\" />\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n",
98
+ "type": "registry:ui"
99
+ }
100
+ ]
101
+ }