@design.estate/dees-catalog 3.91.0 → 3.92.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/dist_bundle/bundle.js +10381 -4788
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/dist_ts_web/elements/00group-appui/dees-appui/dees-appui.js +5 -4
  4. package/dist_ts_web/elements/00group-appui/dees-appui-profiledropdown/dees-appui-profiledropdown.js +6 -7
  5. package/dist_ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.js +4 -6
  6. package/dist_ts_web/elements/00group-button/dees-button/dees-button.d.ts +6 -0
  7. package/dist_ts_web/elements/00group-button/dees-button/dees-button.demo.js +14 -1
  8. package/dist_ts_web/elements/00group-button/dees-button/dees-button.js +49 -24
  9. package/dist_ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.js +1 -1
  10. package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/codebox.diff.d.ts +69 -0
  11. package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/codebox.diff.js +342 -0
  12. package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.d.ts +48 -3
  13. package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.js +128 -39
  14. package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.js +663 -190
  15. package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/index.d.ts +1 -0
  16. package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/index.js +2 -1
  17. package/dist_ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.d.ts +3 -0
  18. package/dist_ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.js +48 -30
  19. package/dist_ts_web/elements/00group-dataview/dees-grouped-list/dees-grouped-list.js +1 -1
  20. package/dist_ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.js +1 -2
  21. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-keys.js +1 -1
  22. package/dist_ts_web/elements/00group-dataview/dees-table/styles.js +1 -1
  23. package/dist_ts_web/elements/00group-feedback/dees-progressbar/dees-progressbar.js +9 -9
  24. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.d.ts +55 -0
  25. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.d.ts +1 -0
  26. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.js +183 -0
  27. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +412 -0
  28. package/dist_ts_web/elements/00group-harness/dees-harness-chat/index.d.ts +1 -0
  29. package/dist_ts_web/elements/00group-harness/dees-harness-chat/index.js +2 -0
  30. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.d.ts +65 -0
  31. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.d.ts +1 -0
  32. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.js +55 -0
  33. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.js +589 -0
  34. package/dist_ts_web/elements/00group-harness/dees-harness-composer/index.d.ts +1 -0
  35. package/dist_ts_web/elements/00group-harness/dees-harness-composer/index.js +2 -0
  36. package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.d.ts +21 -0
  37. package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.demo.d.ts +1 -0
  38. package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.demo.js +41 -0
  39. package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.js +215 -0
  40. package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/index.d.ts +1 -0
  41. package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/index.js +2 -0
  42. package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.d.ts +58 -0
  43. package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.demo.d.ts +1 -0
  44. package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.demo.js +126 -0
  45. package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.js +551 -0
  46. package/dist_ts_web/elements/00group-harness/dees-harness-message/index.d.ts +1 -0
  47. package/dist_ts_web/elements/00group-harness/dees-harness-message/index.js +2 -0
  48. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.d.ts +50 -0
  49. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.demo.d.ts +1 -0
  50. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.demo.js +101 -0
  51. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +424 -0
  52. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/index.d.ts +1 -0
  53. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/index.js +2 -0
  54. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.d.ts +27 -0
  55. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.demo.d.ts +1 -0
  56. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.demo.js +46 -0
  57. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.js +282 -0
  58. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/index.d.ts +1 -0
  59. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/index.js +2 -0
  60. package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.d.ts +24 -0
  61. package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.demo.d.ts +1 -0
  62. package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.demo.js +32 -0
  63. package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.js +241 -0
  64. package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/index.d.ts +1 -0
  65. package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/index.js +2 -0
  66. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +28 -0
  67. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.d.ts +1 -0
  68. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +56 -0
  69. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +279 -0
  70. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/index.d.ts +1 -0
  71. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/index.js +2 -0
  72. package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.d.ts +30 -0
  73. package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.demo.d.ts +1 -0
  74. package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.demo.js +35 -0
  75. package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.js +235 -0
  76. package/dist_ts_web/elements/00group-harness/dees-harness-status/index.d.ts +1 -0
  77. package/dist_ts_web/elements/00group-harness/dees-harness-status/index.js +2 -0
  78. package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.d.ts +27 -0
  79. package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.demo.d.ts +1 -0
  80. package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.demo.js +41 -0
  81. package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.js +258 -0
  82. package/dist_ts_web/elements/00group-harness/dees-harness-todos/index.d.ts +1 -0
  83. package/dist_ts_web/elements/00group-harness/dees-harness-todos/index.js +2 -0
  84. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.d.ts +35 -0
  85. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.demo.d.ts +1 -0
  86. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.demo.js +162 -0
  87. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +368 -0
  88. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/index.d.ts +2 -0
  89. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/index.js +3 -0
  90. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.d.ts +5 -0
  91. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.js +183 -0
  92. package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.d.ts +19 -0
  93. package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.demo.d.ts +1 -0
  94. package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.demo.js +25 -0
  95. package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.js +148 -0
  96. package/dist_ts_web/elements/00group-harness/dees-harness-usage/index.d.ts +1 -0
  97. package/dist_ts_web/elements/00group-harness/dees-harness-usage/index.js +2 -0
  98. package/dist_ts_web/elements/00group-harness/harness.demodata.d.ts +22 -0
  99. package/dist_ts_web/elements/00group-harness/harness.demodata.js +94 -0
  100. package/dist_ts_web/elements/00group-harness/harness.helpers.d.ts +37 -0
  101. package/dist_ts_web/elements/00group-harness/harness.helpers.js +221 -0
  102. package/dist_ts_web/elements/00group-harness/harness.markdown.d.ts +25 -0
  103. package/dist_ts_web/elements/00group-harness/harness.markdown.js +147 -0
  104. package/dist_ts_web/elements/00group-harness/harness.styles.d.ts +9 -0
  105. package/dist_ts_web/elements/00group-harness/harness.styles.js +94 -0
  106. package/dist_ts_web/elements/00group-harness/index.d.ts +18 -0
  107. package/dist_ts_web/elements/00group-harness/index.js +22 -0
  108. package/dist_ts_web/elements/00group-harness/interfaces.d.ts +210 -0
  109. package/dist_ts_web/elements/00group-harness/interfaces.js +11 -0
  110. package/dist_ts_web/elements/00group-harness/toolregistry.d.ts +76 -0
  111. package/dist_ts_web/elements/00group-harness/toolregistry.js +210 -0
  112. package/dist_ts_web/elements/00group-input/dees-input-code/dees-input-code.js +30 -18
  113. package/dist_ts_web/elements/00group-input/dees-input-datepicker/datepicker-popup.js +73 -46
  114. package/dist_ts_web/elements/00group-input/dees-input-datepicker/styles.js +15 -16
  115. package/dist_ts_web/elements/00group-input/dees-input-list/dees-input-list.js +2 -4
  116. package/dist_ts_web/elements/00group-input/dees-input-tags/dees-input-tags.js +36 -15
  117. package/dist_ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.js +5 -4
  118. package/dist_ts_web/elements/00group-input/dees-input-wysiwyg/blocks/text/code.block.js +10 -89
  119. package/dist_ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.js +12 -8
  120. package/dist_ts_web/elements/00group-layout/dees-chips/dees-chips.js +1 -1
  121. package/dist_ts_web/elements/00group-layout/dees-pagination/dees-pagination.js +27 -12
  122. package/dist_ts_web/elements/00group-layout/dees-settings/dees-settings.js +1 -1
  123. package/dist_ts_web/elements/00group-layout/dees-stepper/dees-stepper.js +14 -18
  124. package/dist_ts_web/elements/00group-overlay/dees-contextmenu/dees-contextmenu.js +6 -7
  125. package/dist_ts_web/elements/00group-overlay/dees-modal/dees-modal.js +6 -21
  126. package/dist_ts_web/elements/00group-overlay/dees-windowlayer/dees-windowlayer.d.ts +2 -1
  127. package/dist_ts_web/elements/00group-overlay/dees-windowlayer/dees-windowlayer.js +10 -4
  128. package/dist_ts_web/elements/00group-simple/dees-shopping-productcard/dees-shopping-productcard.js +1 -1
  129. package/dist_ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.js +9 -8
  130. package/dist_ts_web/elements/00group-workspace/dees-workspace/dees-workspace.js +1 -1
  131. package/dist_ts_web/elements/00group-workspace/dees-workspace-filetree/dees-workspace-filetree.js +3 -4
  132. package/dist_ts_web/elements/00group-workspace/dees-workspace-markdownoutlet/dees-workspace-markdownoutlet.js +8 -78
  133. package/dist_ts_web/elements/00syntax.d.ts +28 -0
  134. package/dist_ts_web/elements/00syntax.js +98 -0
  135. package/dist_ts_web/elements/00theme.js +26 -14
  136. package/dist_ts_web/elements/index.d.ts +1 -0
  137. package/dist_ts_web/elements/index.js +2 -1
  138. package/dist_watch/bundle.js +233948 -0
  139. package/dist_watch/bundle.js.map +7 -0
  140. package/dist_watch/index.html +28 -0
  141. package/package.json +1 -1
  142. package/readme.hints.md +7 -1
  143. package/readme.md +110 -0
  144. package/readme.playbook.md +10 -0
  145. package/ts_web/00_commitinfo_data.ts +1 -1
  146. package/ts_web/elements/00group-appui/dees-appui/dees-appui.ts +4 -3
  147. package/ts_web/elements/00group-appui/dees-appui-profiledropdown/dees-appui-profiledropdown.ts +5 -6
  148. package/ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.ts +3 -5
  149. package/ts_web/elements/00group-button/dees-button/dees-button.demo.ts +13 -0
  150. package/ts_web/elements/00group-button/dees-button/dees-button.ts +42 -22
  151. package/ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.ts +1 -1
  152. package/ts_web/elements/00group-dataview/dees-dataview-codebox/codebox.diff.ts +401 -0
  153. package/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.ts +132 -38
  154. package/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.ts +649 -187
  155. package/ts_web/elements/00group-dataview/dees-dataview-codebox/index.ts +1 -0
  156. package/ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.ts +45 -30
  157. package/ts_web/elements/00group-dataview/dees-grouped-list/dees-grouped-list.ts +1 -1
  158. package/ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.ts +0 -1
  159. package/ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-keys.ts +1 -1
  160. package/ts_web/elements/00group-dataview/dees-table/styles.ts +1 -1
  161. package/ts_web/elements/00group-feedback/dees-progressbar/dees-progressbar.ts +9 -9
  162. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.ts +193 -0
  163. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +301 -0
  164. package/ts_web/elements/00group-harness/dees-harness-chat/index.ts +1 -0
  165. package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.ts +56 -0
  166. package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.ts +514 -0
  167. package/ts_web/elements/00group-harness/dees-harness-composer/index.ts +1 -0
  168. package/ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.demo.ts +44 -0
  169. package/ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.ts +172 -0
  170. package/ts_web/elements/00group-harness/dees-harness-content-blocks/index.ts +1 -0
  171. package/ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.demo.ts +129 -0
  172. package/ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.ts +498 -0
  173. package/ts_web/elements/00group-harness/dees-harness-message/index.ts +1 -0
  174. package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.demo.ts +105 -0
  175. package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +342 -0
  176. package/ts_web/elements/00group-harness/dees-harness-message-list/index.ts +1 -0
  177. package/ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.demo.ts +47 -0
  178. package/ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.ts +225 -0
  179. package/ts_web/elements/00group-harness/dees-harness-permission-card/index.ts +1 -0
  180. package/ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.demo.ts +32 -0
  181. package/ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.ts +195 -0
  182. package/ts_web/elements/00group-harness/dees-harness-reasoning/index.ts +1 -0
  183. package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +59 -0
  184. package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +222 -0
  185. package/ts_web/elements/00group-harness/dees-harness-session-list/index.ts +1 -0
  186. package/ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.demo.ts +35 -0
  187. package/ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.ts +187 -0
  188. package/ts_web/elements/00group-harness/dees-harness-status/index.ts +1 -0
  189. package/ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.demo.ts +43 -0
  190. package/ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.ts +206 -0
  191. package/ts_web/elements/00group-harness/dees-harness-todos/index.ts +1 -0
  192. package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.demo.ts +166 -0
  193. package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +315 -0
  194. package/ts_web/elements/00group-harness/dees-harness-tool-card/index.ts +2 -0
  195. package/ts_web/elements/00group-harness/dees-harness-tool-card/renderers.ts +205 -0
  196. package/ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.demo.ts +25 -0
  197. package/ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.ts +96 -0
  198. package/ts_web/elements/00group-harness/dees-harness-usage/index.ts +1 -0
  199. package/ts_web/elements/00group-harness/harness.demodata.ts +113 -0
  200. package/ts_web/elements/00group-harness/harness.helpers.ts +227 -0
  201. package/ts_web/elements/00group-harness/harness.markdown.ts +151 -0
  202. package/ts_web/elements/00group-harness/harness.styles.ts +96 -0
  203. package/ts_web/elements/00group-harness/index.ts +22 -0
  204. package/ts_web/elements/00group-harness/interfaces.ts +203 -0
  205. package/ts_web/elements/00group-harness/toolregistry.ts +264 -0
  206. package/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts +29 -17
  207. package/ts_web/elements/00group-input/dees-input-datepicker/datepicker-popup.ts +72 -45
  208. package/ts_web/elements/00group-input/dees-input-datepicker/styles.ts +14 -15
  209. package/ts_web/elements/00group-input/dees-input-list/dees-input-list.ts +1 -3
  210. package/ts_web/elements/00group-input/dees-input-tags/dees-input-tags.ts +35 -14
  211. package/ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.ts +4 -3
  212. package/ts_web/elements/00group-input/dees-input-wysiwyg/blocks/text/code.block.ts +9 -88
  213. package/ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.ts +11 -7
  214. package/ts_web/elements/00group-layout/dees-chips/dees-chips.ts +1 -1
  215. package/ts_web/elements/00group-layout/dees-pagination/dees-pagination.ts +26 -11
  216. package/ts_web/elements/00group-layout/dees-settings/dees-settings.ts +1 -1
  217. package/ts_web/elements/00group-layout/dees-stepper/dees-stepper.ts +13 -17
  218. package/ts_web/elements/00group-overlay/dees-contextmenu/dees-contextmenu.ts +5 -6
  219. package/ts_web/elements/00group-overlay/dees-modal/dees-modal.ts +5 -20
  220. package/ts_web/elements/00group-overlay/dees-windowlayer/dees-windowlayer.ts +10 -3
  221. package/ts_web/elements/00group-simple/dees-shopping-productcard/dees-shopping-productcard.ts +1 -1
  222. package/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts +8 -7
  223. package/ts_web/elements/00group-workspace/dees-workspace/dees-workspace.ts +1 -1
  224. package/ts_web/elements/00group-workspace/dees-workspace-filetree/dees-workspace-filetree.ts +2 -3
  225. package/ts_web/elements/00group-workspace/dees-workspace-markdownoutlet/dees-workspace-markdownoutlet.ts +7 -77
  226. package/ts_web/elements/00syntax.ts +124 -0
  227. package/ts_web/elements/00theme.ts +25 -13
  228. package/ts_web/elements/index.ts +1 -0
@@ -0,0 +1,498 @@
1
+ import { demoFunc } from './dees-harness-message.demo.js';
2
+ import {
3
+ DeesElement,
4
+ html,
5
+ css,
6
+ customElement,
7
+ type TemplateResult,
8
+ property,
9
+ state,
10
+ cssManager,
11
+ unsafeHTML,
12
+ } from '@design.estate/dees-element';
13
+ import { themeDefaultStyles } from '../../00theme.js';
14
+ import { syntaxPaletteStyles, syntaxScopeStyles } from '../../00syntax.js';
15
+ import type { HLJSApi } from 'highlight.js';
16
+ import type { IHarnessAttachment, IHarnessMessage, IHarnessUsage } from '../interfaces.js';
17
+ import { DeesHarnessToolRegistry } from '../toolregistry.js';
18
+ import { HarnessMarkdown, markdownStyles } from '../harness.markdown.js';
19
+ import { harnessFormatBytes, harnessFormatRelativeTime } from '../harness.helpers.js';
20
+ import { DeesServiceLibLoader } from '../../../services/index.js';
21
+ import '../dees-harness-reasoning/dees-harness-reasoning.js';
22
+ import '../dees-harness-tool-card/dees-harness-tool-card.js';
23
+ import '../../00group-utility/dees-icon/dees-icon.js';
24
+
25
+ declare global {
26
+ interface HTMLElementTagNameMap {
27
+ 'dees-harness-message': DeesHarnessMessage;
28
+ }
29
+ }
30
+
31
+ const markdownParseThrottleMs = 150;
32
+
33
+ /**
34
+ * One conversation message. The `message` property object is the source of
35
+ * truth; the streaming fast path (`appendTextDelta` etc.) mutates that same
36
+ * object and re-renders only this element, so a later wholesale property
37
+ * re-assignment by the host is idempotent.
38
+ */
39
+ @customElement('dees-harness-message')
40
+ export class DeesHarnessMessage extends DeesElement {
41
+ public static demo = demoFunc;
42
+ public static demoGroups = ['Agent Chat'];
43
+
44
+ @property({ attribute: false })
45
+ accessor message: IHarnessMessage = { id: '', role: 'assistant', text: '', createdAt: 0 };
46
+
47
+ @property({ type: Boolean })
48
+ accessor showRole: boolean = true;
49
+
50
+ @property({ type: Boolean })
51
+ accessor showTimestamp: boolean = false;
52
+
53
+ /** parse markdown during streaming (throttled); plain text otherwise */
54
+ @property({ type: Boolean })
55
+ accessor markdownWhileStreaming: boolean = true;
56
+
57
+ @property({ attribute: false })
58
+ accessor toolRegistry: DeesHarnessToolRegistry = DeesHarnessToolRegistry.default;
59
+
60
+ /**
61
+ * When true at first render, the entry animation is skipped permanently
62
+ * for this element (initial-batch rendering). Captured once in
63
+ * firstUpdated — later property changes must not restart the animation.
64
+ */
65
+ @property({ attribute: false })
66
+ accessor suppressEntry: boolean = false;
67
+
68
+ @state()
69
+ accessor renderedMarkdownHtml: string = '';
70
+
71
+ public static styles = [
72
+ themeDefaultStyles,
73
+ cssManager.defaultStyles,
74
+ markdownStyles,
75
+ css`
76
+ :host {
77
+ display: block;
78
+ font-family: var(--dees-font-family);
79
+ /* entry: new boxes make space for themselves while fading in.
80
+ A keyframes animation (not a transition) so the parent tree's
81
+ universal theme-transition rule cannot override it in the shadow
82
+ cascade; interpolate-size lets height animate from 0 to auto
83
+ (Chromium 129+), elsewhere the height snaps and opacity still
84
+ fades. */
85
+ interpolate-size: allow-keywords;
86
+ overflow: clip;
87
+ animation: harness-entry var(--dees-transition-default) var(--dees-ease-out);
88
+ }
89
+
90
+ @keyframes harness-entry {
91
+ from {
92
+ height: 0;
93
+ margin-top: 0;
94
+ opacity: 0;
95
+ }
96
+ }
97
+
98
+ :host(.no-entry) {
99
+ animation: none;
100
+ }
101
+
102
+ @media (prefers-reduced-motion: reduce) {
103
+ :host {
104
+ animation: none;
105
+ }
106
+ }
107
+
108
+ .message {
109
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md);
110
+ border: 1px solid var(--dees-color-border-subtle);
111
+ border-left: 2px solid var(--dees-color-border-strong);
112
+ border-radius: var(--dees-radius-lg);
113
+ corner-shape: var(--dees-corner-shape);
114
+ background: var(--dees-color-bg-secondary);
115
+ }
116
+
117
+ .message.role-user {
118
+ border-left-color: var(--dees-color-accent-primary);
119
+ }
120
+
121
+ .message.role-system {
122
+ border-left-color: var(--dees-color-accent-warning);
123
+ }
124
+
125
+ .message.has-error {
126
+ border-left-color: var(--dees-color-accent-error);
127
+ }
128
+
129
+ .roleRow {
130
+ display: flex;
131
+ align-items: baseline;
132
+ gap: var(--dees-spacing-sm);
133
+ margin-bottom: var(--dees-spacing-xs);
134
+ }
135
+
136
+ .roleLabel {
137
+ color: var(--dees-color-text-secondary);
138
+ font-size: 10px;
139
+ font-weight: 700;
140
+ letter-spacing: 0.05em;
141
+ text-transform: uppercase;
142
+ }
143
+
144
+ .timestamp {
145
+ color: var(--dees-color-text-muted);
146
+ font-size: var(--dees-font-caption2-size, 10px);
147
+ }
148
+
149
+ .plainText {
150
+ color: var(--dees-color-text-primary);
151
+ white-space: pre-wrap;
152
+ overflow-wrap: anywhere;
153
+ font-size: var(--dees-font-control-size, 13px);
154
+ line-height: 1.55;
155
+ }
156
+
157
+ .cursor {
158
+ display: inline-block;
159
+ width: 7px;
160
+ height: 1.05em;
161
+ margin-left: 1px;
162
+ vertical-align: text-bottom;
163
+ border-radius: 1px;
164
+ background: var(--dees-color-accent-primary);
165
+ animation: harness-cursor-blink 1s steps(2, start) infinite;
166
+ }
167
+
168
+ @keyframes harness-cursor-blink {
169
+ 0%, 100% { opacity: 1; }
170
+ 50% { opacity: 0.15; }
171
+ }
172
+
173
+ .reasoningStack {
174
+ display: grid;
175
+ gap: var(--dees-spacing-xs);
176
+ margin-bottom: var(--dees-spacing-sm);
177
+ }
178
+
179
+ .attachments {
180
+ display: grid;
181
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
182
+ gap: var(--dees-spacing-sm);
183
+ margin-bottom: var(--dees-spacing-sm);
184
+ }
185
+
186
+ .attachmentCard {
187
+ min-width: 0;
188
+ display: flex;
189
+ align-items: center;
190
+ gap: var(--dees-spacing-sm);
191
+ padding: var(--dees-spacing-xs) var(--dees-spacing-sm);
192
+ border: 1px solid var(--dees-color-border-subtle);
193
+ border-radius: var(--dees-radius-md);
194
+ corner-shape: var(--dees-corner-shape);
195
+ background: var(--dees-color-bg-tertiary);
196
+ }
197
+
198
+ .attachmentThumb {
199
+ width: 44px;
200
+ height: 44px;
201
+ flex: 0 0 44px;
202
+ object-fit: cover;
203
+ border-radius: var(--dees-radius-sm);
204
+ background: var(--dees-color-bg-primary);
205
+ }
206
+
207
+ .attachmentIcon {
208
+ width: 44px;
209
+ height: 44px;
210
+ flex: 0 0 44px;
211
+ display: grid;
212
+ place-items: center;
213
+ border-radius: var(--dees-radius-sm);
214
+ background: var(--dees-color-fill-secondary);
215
+ color: var(--dees-color-accent-primary);
216
+ }
217
+
218
+ .attachmentInfo {
219
+ min-width: 0;
220
+ }
221
+
222
+ .attachmentName {
223
+ color: var(--dees-color-text-primary);
224
+ font-size: var(--dees-font-control-size-sm, 12px);
225
+ overflow: hidden;
226
+ text-overflow: ellipsis;
227
+ white-space: nowrap;
228
+ }
229
+
230
+ .attachmentMeta {
231
+ margin-top: 1px;
232
+ color: var(--dees-color-text-secondary);
233
+ font-size: var(--dees-font-caption1-size, 11px);
234
+ overflow: hidden;
235
+ text-overflow: ellipsis;
236
+ white-space: nowrap;
237
+ }
238
+
239
+ .footerRow {
240
+ display: flex;
241
+ align-items: center;
242
+ gap: var(--dees-spacing-md);
243
+ margin-top: var(--dees-spacing-sm);
244
+ color: var(--dees-color-text-muted);
245
+ font-size: var(--dees-font-caption2-size, 10px);
246
+ }
247
+
248
+ .errorText {
249
+ margin-top: var(--dees-spacing-sm);
250
+ padding: var(--dees-spacing-xs) var(--dees-spacing-sm);
251
+ border-radius: var(--dees-radius-md);
252
+ background: var(--dees-color-badge-error-bg);
253
+ color: var(--dees-color-badge-error-fg);
254
+ font-size: var(--dees-font-control-size-sm, 12px);
255
+ white-space: pre-wrap;
256
+ overflow-wrap: anywhere;
257
+ }
258
+
259
+ `,
260
+ /* Shared system syntax palette + highlight.js scope mapping */
261
+ syntaxPaletteStyles,
262
+ syntaxScopeStyles,
263
+ ];
264
+
265
+ private markdownParseToken = 0;
266
+ private lastParsedText = '';
267
+ private markdownThrottleTimeout: ReturnType<typeof setTimeout> | null = null;
268
+ private highlightJs: HLJSApi | null = null;
269
+
270
+ public get markdownActive(): boolean {
271
+ return this.message.markdown ?? this.message.role === 'assistant';
272
+ }
273
+
274
+ // ------------------------------------------------------ streaming fast path
275
+
276
+ /** Appends a text delta, mutating the shared message object. */
277
+ public appendTextDelta(delta: string): void {
278
+ this.message.text += delta;
279
+ this.message.streaming = true;
280
+ this.requestUpdate();
281
+ }
282
+
283
+ /** Appends to (or creates) a reasoning part by id. */
284
+ public appendReasoningDelta(partId: string, delta: string, startedAt?: number): void {
285
+ this.message.reasoning ??= [];
286
+ let part = this.message.reasoning.find((candidate) => candidate.id === partId);
287
+ if (!part) {
288
+ part = { id: partId, text: '', startedAt: startedAt ?? Date.now() };
289
+ this.message.reasoning.push(part);
290
+ }
291
+ part.text += delta;
292
+ this.requestUpdate();
293
+ // reasoning parts render as child elements holding the same part object
294
+ for (const reasoningElement of this.shadowRoot?.querySelectorAll('dees-harness-reasoning') ?? []) {
295
+ reasoningElement.requestUpdate();
296
+ }
297
+ }
298
+
299
+ /** Marks a reasoning part as ended. */
300
+ public endReasoning(partId: string, endedAt?: number): void {
301
+ const part = this.message.reasoning?.find((candidate) => candidate.id === partId);
302
+ if (part && !part.endedAt) {
303
+ part.endedAt = endedAt ?? Date.now();
304
+ this.requestUpdate();
305
+ for (const reasoningElement of this.shadowRoot?.querySelectorAll('dees-harness-reasoning') ?? []) {
306
+ reasoningElement.requestUpdate();
307
+ }
308
+ }
309
+ }
310
+
311
+ /** Ends the stream: final markdown parse, usage/error attach. */
312
+ public endStream(usage?: IHarnessUsage, error?: string): void {
313
+ this.message.streaming = false;
314
+ if (usage) this.message.usage = usage;
315
+ if (error) this.message.error = error;
316
+ this.message.updatedAt = Date.now();
317
+ this.requestUpdate();
318
+ }
319
+
320
+ // ------------------------------------------------------------------ render
321
+
322
+ public render(): TemplateResult {
323
+ const message = this.message;
324
+ // a pure tool message renders the bare tool card — the card carries its
325
+ // own complete chrome, so the message wrapper would double the framing
326
+ if (
327
+ message.role === 'tool'
328
+ && message.toolCall
329
+ && !message.text
330
+ && !message.error
331
+ && !message.reasoning?.length
332
+ && !message.attachments?.length
333
+ ) {
334
+ return html`
335
+ <dees-harness-tool-card .call=${message.toolCall} .toolRegistry=${this.toolRegistry}></dees-harness-tool-card>
336
+ `;
337
+ }
338
+ const roleClass = `role-${message.role}`;
339
+ return html`
340
+ <div class="message ${roleClass} ${message.error ? 'has-error' : ''}">
341
+ ${this.showRole || this.showTimestamp
342
+ ? html`
343
+ <div class="roleRow">
344
+ ${this.showRole ? html`<span class="roleLabel">${message.role}</span>` : ''}
345
+ ${this.showTimestamp && message.createdAt
346
+ ? html`<span class="timestamp">${harnessFormatRelativeTime(message.createdAt)}</span>`
347
+ : ''}
348
+ </div>
349
+ `
350
+ : ''}
351
+ ${message.reasoning?.length
352
+ ? html`
353
+ <div class="reasoningStack">
354
+ ${message.reasoning.map(
355
+ (part) => html`<dees-harness-reasoning .reasoningPart=${part}></dees-harness-reasoning>`,
356
+ )}
357
+ </div>
358
+ `
359
+ : ''}
360
+ ${message.attachments?.length ? this.renderAttachments(message.attachments) : ''}
361
+ ${message.toolCall
362
+ ? html`<dees-harness-tool-card .call=${message.toolCall} .toolRegistry=${this.toolRegistry}></dees-harness-tool-card>`
363
+ : ''}
364
+ ${this.renderText()}
365
+ ${message.error ? html`<div class="errorText">${message.error}</div>` : ''}
366
+ ${message.usage?.totalTokens
367
+ ? html`
368
+ <div class="footerRow">
369
+ <span>${message.usage.inputTokens ?? 0} in · ${message.usage.outputTokens ?? 0} out · ${message.usage.totalTokens} total tokens</span>
370
+ </div>
371
+ `
372
+ : ''}
373
+ </div>
374
+ `;
375
+ }
376
+
377
+ private renderText(): TemplateResult {
378
+ const message = this.message;
379
+ if (!message.text) {
380
+ return message.streaming ? html`<div class="plainText"><span class="cursor"></span></div>` : html``;
381
+ }
382
+ const markdownReady = this.markdownActive
383
+ && this.renderedMarkdownHtml
384
+ && (!message.streaming || this.markdownWhileStreaming)
385
+ && this.lastParsedText.length > 0;
386
+ if (markdownReady) {
387
+ return html`
388
+ <div class="markdown-body">${unsafeHTML(this.renderedMarkdownHtml)}</div>
389
+ ${message.streaming ? html`<span class="cursor"></span>` : ''}
390
+ `;
391
+ }
392
+ return html`
393
+ <div class="plainText">${message.text}${message.streaming ? html`<span class="cursor"></span>` : ''}</div>
394
+ `;
395
+ }
396
+
397
+ private renderAttachments(attachments: IHarnessAttachment[]): TemplateResult {
398
+ return html`
399
+ <div class="attachments">
400
+ ${attachments.map((attachment) => {
401
+ const imageUrl = attachment.kind === 'image' && attachment.dataBase64
402
+ ? `data:${attachment.mediaType};base64,${attachment.dataBase64}`
403
+ : '';
404
+ return html`
405
+ <div class="attachmentCard">
406
+ ${imageUrl
407
+ ? html`<img class="attachmentThumb" src=${imageUrl} alt=${attachment.name} />`
408
+ : html`<div class="attachmentIcon"><dees-icon icon="lucide:FileText" iconSize="18"></dees-icon></div>`}
409
+ <div class="attachmentInfo">
410
+ <div class="attachmentName" title=${attachment.name}>${attachment.name}</div>
411
+ <div class="attachmentMeta">
412
+ ${attachment.mediaType || 'file'} · ${harnessFormatBytes(attachment.size)}${attachment.truncated ? ' · truncated' : ''}
413
+ </div>
414
+ </div>
415
+ </div>
416
+ `;
417
+ })}
418
+ </div>
419
+ `;
420
+ }
421
+
422
+ // ---------------------------------------------------------------- markdown
423
+
424
+ public firstUpdated(changedProperties: Map<string, any>): void {
425
+ super.firstUpdated(changedProperties);
426
+ if (this.suppressEntry) {
427
+ this.classList.add('no-entry');
428
+ }
429
+ }
430
+
431
+ public async updated(changedProperties: Map<string, any>): Promise<void> {
432
+ super.updated(changedProperties);
433
+ if (!this.markdownActive || !this.message.text) return;
434
+ if (this.message.text === this.lastParsedText) return;
435
+ if (this.message.streaming) {
436
+ if (!this.markdownWhileStreaming) return;
437
+ this.scheduleThrottledParse();
438
+ return;
439
+ }
440
+ await this.parseMarkdown();
441
+ }
442
+
443
+ private scheduleThrottledParse(): void {
444
+ if (this.markdownThrottleTimeout) return;
445
+ this.markdownThrottleTimeout = setTimeout(() => {
446
+ this.markdownThrottleTimeout = null;
447
+ void this.parseMarkdown();
448
+ }, markdownParseThrottleMs);
449
+ }
450
+
451
+ private async parseMarkdown(): Promise<void> {
452
+ const token = ++this.markdownParseToken;
453
+ const textAtRequest = this.message.text;
454
+ const htmlResult = await HarnessMarkdown.getInstance().renderToHtml(textAtRequest);
455
+ if (token !== this.markdownParseToken) return;
456
+ this.lastParsedText = textAtRequest;
457
+ this.renderedMarkdownHtml = htmlResult;
458
+ if (!this.message.streaming) {
459
+ await this.updateComplete;
460
+ await this.highlightCodeFences(token);
461
+ }
462
+ }
463
+
464
+ /** Lazy hljs pass over rendered fences; runs only after the final parse. */
465
+ private async highlightCodeFences(token: number): Promise<void> {
466
+ const codeElements = Array.from(
467
+ this.shadowRoot?.querySelectorAll<HTMLElement>('.markdown-body pre code') ?? [],
468
+ ).filter((codeElement) => !codeElement.dataset.highlighted);
469
+ if (!codeElements.length) return;
470
+ if (!this.highlightJs) {
471
+ this.highlightJs = await DeesServiceLibLoader.getInstance().loadHighlightJs();
472
+ }
473
+ if (token !== this.markdownParseToken) return;
474
+ for (const codeElement of codeElements) {
475
+ const languageMatch = /language-([\w-]+)/.exec(codeElement.className);
476
+ try {
477
+ const highlighted = languageMatch
478
+ ? this.highlightJs.highlight(codeElement.textContent ?? '', {
479
+ language: languageMatch[1],
480
+ ignoreIllegals: true,
481
+ }).value
482
+ : this.highlightJs.highlightAuto(codeElement.textContent ?? '').value;
483
+ codeElement.innerHTML = highlighted;
484
+ codeElement.dataset.highlighted = 'true';
485
+ } catch {
486
+ codeElement.dataset.highlighted = 'skip';
487
+ }
488
+ }
489
+ }
490
+
491
+ public async disconnectedCallback(): Promise<void> {
492
+ if (this.markdownThrottleTimeout) {
493
+ clearTimeout(this.markdownThrottleTimeout);
494
+ this.markdownThrottleTimeout = null;
495
+ }
496
+ await super.disconnectedCallback();
497
+ }
498
+ }
@@ -0,0 +1 @@
1
+ export * from './dees-harness-message.js';
@@ -0,0 +1,105 @@
1
+ import { html } from '@design.estate/dees-element';
2
+ import type { DeesHarnessMessageList } from './dees-harness-message-list.js';
3
+ import type { IHarnessMessage } from '../interfaces.js';
4
+
5
+ const seedMessages = (): IHarnessMessage[] => [
6
+ {
7
+ id: 'm1',
8
+ role: 'user',
9
+ text: 'Summarize the last deploy and tell me if anything regressed.',
10
+ createdAt: Date.now() - 300_000,
11
+ },
12
+ {
13
+ id: 'm2',
14
+ role: 'assistant',
15
+ text: 'The deploy finished in **4m12s**. One warning: the `sitemap` job took 3× longer than baseline.\n\n- build: ok\n- tests: 212 passed\n- sitemap: slow (see below)',
16
+ createdAt: Date.now() - 280_000,
17
+ reasoning: [
18
+ {
19
+ id: 'r1',
20
+ text: 'Check the deploy log timings first, then compare against the previous run.',
21
+ startedAt: Date.now() - 290_000,
22
+ endedAt: Date.now() - 287_000,
23
+ },
24
+ ],
25
+ },
26
+ {
27
+ id: 'm3',
28
+ role: 'user',
29
+ text: 'Dig into the sitemap job please.',
30
+ createdAt: Date.now() - 200_000,
31
+ },
32
+ ];
33
+
34
+ let streamStop: (() => void) | undefined;
35
+
36
+ const simulateStream = (event: MouseEvent) => {
37
+ streamStop?.();
38
+ const container = (event.target as HTMLElement).closest('.listDemo');
39
+ const list = container?.querySelector<DeesHarnessMessageList>('dees-harness-message-list');
40
+ if (!list) return;
41
+ const streamingMessage: IHarnessMessage = {
42
+ id: `stream-${Date.now()}`,
43
+ role: 'assistant',
44
+ text: '',
45
+ createdAt: Date.now(),
46
+ streaming: true,
47
+ };
48
+ list.messages = [...list.messages, streamingMessage];
49
+ const source = 'The sitemap job re-crawled every route because the cache key changed with the locale rollout. Pinning the cache key to the route manifest hash brings it back to baseline. I can prepare that patch.';
50
+ let offset = 0;
51
+ const interval = setInterval(() => {
52
+ const chunk = source.slice(offset, offset + 5);
53
+ offset += 5;
54
+ if (!chunk) {
55
+ clearInterval(interval);
56
+ list.applyDelta({ type: 'message-end', messageId: streamingMessage.id, usage: { inputTokens: 900, outputTokens: 120, totalTokens: 1020 } });
57
+ return;
58
+ }
59
+ list.applyDelta({ type: 'text', messageId: streamingMessage.id, delta: chunk });
60
+ }, 40);
61
+ streamStop = () => clearInterval(interval);
62
+ };
63
+
64
+ export const demoFunc = () => html`
65
+ <style>
66
+ .listDemo {
67
+ display: grid;
68
+ grid-template-rows: auto minmax(0, 1fr);
69
+ gap: 12px;
70
+ height: 520px;
71
+ max-width: 720px;
72
+ margin: 40px auto;
73
+ padding: 16px;
74
+ border-radius: var(--dees-radius-xl);
75
+ background: var(--dees-color-bg-primary);
76
+ border: 1px solid var(--dees-color-border-subtle);
77
+ }
78
+ .listDemo dees-harness-message-list {
79
+ height: 100%;
80
+ }
81
+ </style>
82
+ <div class="listDemo">
83
+ <div>
84
+ <dees-button @clicked=${simulateStream}>Stream a new reply</dees-button>
85
+ </div>
86
+ <dees-harness-message-list .messages=${seedMessages()}></dees-harness-message-list>
87
+ </div>
88
+ <style>
89
+ .emptyDemo {
90
+ height: 200px;
91
+ max-width: 720px;
92
+ margin: 0 auto 40px;
93
+ border-radius: var(--dees-radius-xl);
94
+ border: 1px solid var(--dees-color-border-subtle);
95
+ background: var(--dees-color-bg-primary);
96
+ }
97
+ .emptyDemo dees-harness-message-list { height: 100%; }
98
+ </style>
99
+ <div class="emptyDemo">
100
+ <dees-harness-message-list
101
+ emptyTitle="Nothing here yet"
102
+ emptyText="Send the agent a prompt to get started."
103
+ ></dees-harness-message-list>
104
+ </div>
105
+ `;