@smwb/ui-solid 0.13.0 → 1.0.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 (411) hide show
  1. package/README.md +564 -0
  2. package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
  3. package/dist/assets/styles/less/components/button/button.entry.css +1 -1
  4. package/dist/assets/styles/less/components/checkbox/checkbox.entry.css +1 -1
  5. package/dist/assets/styles/less/components/chip/chip.entry.css +1 -1
  6. package/dist/assets/styles/less/components/commandPalette/commandPalette.entry.css +1 -0
  7. package/dist/assets/styles/less/components/composer/composer.entry.css +1 -0
  8. package/dist/assets/styles/less/components/diffStat/diffStat.entry.css +1 -0
  9. package/dist/assets/styles/less/components/kbd/kbd.entry.css +1 -0
  10. package/dist/assets/styles/less/components/list/list.entry.css +1 -1
  11. package/dist/assets/styles/less/components/qrCode/qrCode.entry.css +1 -0
  12. package/dist/assets/styles/less/components/radioButton/radioButton.entry.css +1 -1
  13. package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
  14. package/dist/assets/styles/less/components/sidebar/sidebar.entry.css +1 -1
  15. package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -0
  16. package/dist/assets/styles/less/components/swimlanes/swimlanes.entry.css +1 -0
  17. package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -0
  18. package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
  19. package/dist/assets/styles/less/components/tabs/tabPanel/tabPanel.entry.css +1 -0
  20. package/dist/assets/styles/less/components/tabs/tabs.entry.css +1 -1
  21. package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
  22. package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
  23. package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
  24. package/dist/assets/styles/less/tokens.entry.css +1 -1
  25. package/dist/components/dataDisplay/chat/chat.d.ts +42 -0
  26. package/dist/components/dataDisplay/chat/chat.js +116 -57
  27. package/dist/components/dataDisplay/chat/chat.js.map +1 -1
  28. package/dist/components/dataDisplay/chat/chatComposer.d.ts +17 -0
  29. package/dist/components/dataDisplay/chat/chatComposer.js +21 -19
  30. package/dist/components/dataDisplay/chat/chatComposer.js.map +1 -1
  31. package/dist/components/dataDisplay/chat/index.d.ts +1 -1
  32. package/dist/components/dataDisplay/chat/utils.d.ts +14 -0
  33. package/dist/components/dataDisplay/chat/utils.js.map +1 -1
  34. package/dist/components/dataDisplay/dagView/dagView.js +238 -223
  35. package/dist/components/dataDisplay/dagView/dagView.js.map +1 -1
  36. package/dist/components/dataDisplay/diffStat/diffStat.d.ts +55 -0
  37. package/dist/components/dataDisplay/diffStat/diffStat.js +70 -0
  38. package/dist/components/dataDisplay/diffStat/diffStat.js.map +1 -0
  39. package/dist/components/dataDisplay/diffStat/index.d.ts +2 -0
  40. package/dist/components/dataDisplay/kbd/index.d.ts +4 -0
  41. package/dist/components/dataDisplay/kbd/kbd.d.ts +41 -0
  42. package/dist/components/dataDisplay/kbd/kbd.js +47 -0
  43. package/dist/components/dataDisplay/kbd/kbd.js.map +1 -0
  44. package/dist/components/dataDisplay/kbd/kbdKeys.d.ts +18 -0
  45. package/dist/components/dataDisplay/kbd/kbdKeys.js +70 -0
  46. package/dist/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
  47. package/dist/components/dataDisplay/list/listItem.d.ts +34 -0
  48. package/dist/components/dataDisplay/list/listItem.js +57 -20
  49. package/dist/components/dataDisplay/list/listItem.js.map +1 -1
  50. package/dist/components/dataDisplay/qrCode/index.d.ts +2 -0
  51. package/dist/components/dataDisplay/qrCode/qrCode.d.ts +30 -0
  52. package/dist/components/dataDisplay/qrCode/qrCode.js +88 -0
  53. package/dist/components/dataDisplay/qrCode/qrCode.js.map +1 -0
  54. package/dist/components/dataDisplay/qrCode/qrCodePath.d.ts +7 -0
  55. package/dist/components/dataDisplay/qrCode/qrCodePath.js +20 -0
  56. package/dist/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
  57. package/dist/components/dataDisplay/statusDot/index.d.ts +2 -0
  58. package/dist/components/dataDisplay/statusDot/statusDot.d.ts +35 -0
  59. package/dist/components/dataDisplay/statusDot/statusDot.js +31 -0
  60. package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -0
  61. package/dist/components/dataDisplay/swimlanes/index.d.ts +2 -0
  62. package/dist/components/dataDisplay/swimlanes/swimlanes.d.ts +75 -0
  63. package/dist/components/dataDisplay/swimlanes/swimlanes.js +361 -0
  64. package/dist/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
  65. package/dist/components/dataDisplay/treeView/treeView.d.ts +20 -0
  66. package/dist/components/dataDisplay/treeView/treeView.js +161 -95
  67. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  68. package/dist/components/feedBack/modal/modal.d.ts +9 -0
  69. package/dist/components/feedBack/modal/modal.js +68 -54
  70. package/dist/components/feedBack/modal/modal.js.map +1 -1
  71. package/dist/components/inputs/button/button.d.ts +12 -0
  72. package/dist/components/inputs/button/button.js +44 -37
  73. package/dist/components/inputs/button/button.js.map +1 -1
  74. package/dist/components/inputs/composer/composer.d.ts +148 -0
  75. package/dist/components/inputs/composer/composer.js +276 -0
  76. package/dist/components/inputs/composer/composer.js.map +1 -0
  77. package/dist/components/inputs/composer/composerFiles.d.ts +26 -0
  78. package/dist/components/inputs/composer/composerFiles.js +18 -0
  79. package/dist/components/inputs/composer/composerFiles.js.map +1 -0
  80. package/dist/components/inputs/composer/composerKeys.d.ts +29 -0
  81. package/dist/components/inputs/composer/composerKeys.js +7 -0
  82. package/dist/components/inputs/composer/composerKeys.js.map +1 -0
  83. package/dist/components/inputs/composer/index.d.ts +3 -0
  84. package/dist/components/layout/sheet/sheet.d.ts +12 -0
  85. package/dist/components/layout/sheet/sheet.js +100 -86
  86. package/dist/components/layout/sheet/sheet.js.map +1 -1
  87. package/dist/components/layout/tabGroups/index.d.ts +4 -0
  88. package/dist/components/layout/tabGroups/tabGroups.d.ts +102 -0
  89. package/dist/components/layout/tabGroups/tabGroups.js +895 -0
  90. package/dist/components/layout/tabGroups/tabGroups.js.map +1 -0
  91. package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +55 -0
  92. package/dist/components/layout/tabGroups/tabGroupsFocus.js +192 -0
  93. package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
  94. package/dist/components/layout/tabGroups/tabGroupsLayout.d.ts +250 -0
  95. package/dist/components/layout/tabGroups/tabGroupsLayout.js +480 -0
  96. package/dist/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
  97. package/dist/components/navigation/appBar/appBar.d.ts +22 -0
  98. package/dist/components/navigation/appBar/appBar.js +60 -22
  99. package/dist/components/navigation/appBar/appBar.js.map +1 -1
  100. package/dist/components/navigation/commandPalette/commandPalette.d.ts +126 -0
  101. package/dist/components/navigation/commandPalette/commandPalette.js +457 -0
  102. package/dist/components/navigation/commandPalette/commandPalette.js.map +1 -0
  103. package/dist/components/navigation/commandPalette/commandPaletteFilter.d.ts +11 -0
  104. package/dist/components/navigation/commandPalette/commandPaletteFilter.js +15 -0
  105. package/dist/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
  106. package/dist/components/navigation/commandPalette/commandPaletteNavigation.d.ts +13 -0
  107. package/dist/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
  108. package/dist/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
  109. package/dist/components/navigation/commandPalette/commandPaletteTypes.d.ts +39 -0
  110. package/dist/components/navigation/commandPalette/index.d.ts +6 -0
  111. package/dist/components/navigation/sidebar/sidebar.d.ts +10 -0
  112. package/dist/components/navigation/sidebar/sidebar.js +12 -10
  113. package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
  114. package/dist/components/navigation/tabs/index.d.ts +3 -1
  115. package/dist/components/navigation/tabs/tab/tab.d.ts +89 -2
  116. package/dist/components/navigation/tabs/tab/tab.js +164 -44
  117. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  118. package/dist/components/navigation/tabs/tabPanel/tabPanel.d.ts +20 -0
  119. package/dist/components/navigation/tabs/tabPanel/tabPanel.js +34 -0
  120. package/dist/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
  121. package/dist/components/navigation/tabs/tabs.d.ts +73 -3
  122. package/dist/components/navigation/tabs/tabs.js +387 -160
  123. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  124. package/dist/components/navigation/tabs/tabs.utils.d.ts +20 -0
  125. package/dist/components/navigation/tabs/tabs.utils.js +11 -0
  126. package/dist/components/navigation/tabs/tabs.utils.js.map +1 -0
  127. package/dist/components/navigation/tabs/tabsContext.d.ts +31 -1
  128. package/dist/components/navigation/tabs/tabsContext.js.map +1 -1
  129. package/dist/headless/components/dataDisplay/chat/chat.js +116 -57
  130. package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
  131. package/dist/headless/components/dataDisplay/chat/chatComposer.js +21 -19
  132. package/dist/headless/components/dataDisplay/chat/chatComposer.js.map +1 -1
  133. package/dist/headless/components/dataDisplay/chat/utils.js.map +1 -1
  134. package/dist/headless/components/dataDisplay/dagView/dagView.js +238 -223
  135. package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -1
  136. package/dist/headless/components/dataDisplay/diffStat/diffStat.js +68 -0
  137. package/dist/headless/components/dataDisplay/diffStat/diffStat.js.map +1 -0
  138. package/dist/headless/components/dataDisplay/kbd/kbd.js +45 -0
  139. package/dist/headless/components/dataDisplay/kbd/kbd.js.map +1 -0
  140. package/dist/headless/components/dataDisplay/kbd/kbdKeys.js +70 -0
  141. package/dist/headless/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
  142. package/dist/headless/components/dataDisplay/list/listItem.js +57 -20
  143. package/dist/headless/components/dataDisplay/list/listItem.js.map +1 -1
  144. package/dist/headless/components/dataDisplay/qrCode/qrCode.js +86 -0
  145. package/dist/headless/components/dataDisplay/qrCode/qrCode.js.map +1 -0
  146. package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js +20 -0
  147. package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
  148. package/dist/headless/components/dataDisplay/statusDot/statusDot.js +29 -0
  149. package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -0
  150. package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js +359 -0
  151. package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
  152. package/dist/headless/components/dataDisplay/treeView/treeView.js +161 -95
  153. package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
  154. package/dist/headless/components/feedBack/modal/modal.js +68 -54
  155. package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
  156. package/dist/headless/components/inputs/button/button.js +42 -35
  157. package/dist/headless/components/inputs/button/button.js.map +1 -1
  158. package/dist/headless/components/inputs/composer/composer.js +274 -0
  159. package/dist/headless/components/inputs/composer/composer.js.map +1 -0
  160. package/dist/headless/components/inputs/composer/composerFiles.js +18 -0
  161. package/dist/headless/components/inputs/composer/composerFiles.js.map +1 -0
  162. package/dist/headless/components/inputs/composer/composerKeys.js +7 -0
  163. package/dist/headless/components/inputs/composer/composerKeys.js.map +1 -0
  164. package/dist/headless/components/layout/sheet/sheet.js +100 -86
  165. package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
  166. package/dist/headless/components/layout/tabGroups/tabGroups.js +893 -0
  167. package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -0
  168. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +192 -0
  169. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
  170. package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js +480 -0
  171. package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
  172. package/dist/headless/components/navigation/appBar/appBar.js +64 -26
  173. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  174. package/dist/headless/components/navigation/commandPalette/commandPalette.js +455 -0
  175. package/dist/headless/components/navigation/commandPalette/commandPalette.js.map +1 -0
  176. package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js +15 -0
  177. package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
  178. package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
  179. package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
  180. package/dist/headless/components/navigation/sidebar/sidebar.js +28 -26
  181. package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
  182. package/dist/headless/components/navigation/tabs/tab/tab.js +164 -44
  183. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  184. package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js +32 -0
  185. package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
  186. package/dist/headless/components/navigation/tabs/tabs.js +387 -160
  187. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  188. package/dist/headless/components/navigation/tabs/tabs.utils.js +11 -0
  189. package/dist/headless/components/navigation/tabs/tabs.utils.js.map +1 -0
  190. package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -1
  191. package/dist/headless/index.js +405 -367
  192. package/dist/headless/index.js.map +1 -1
  193. package/dist/headless/primitives/createFocusTrap.js +17 -17
  194. package/dist/headless/primitives/createFocusTrap.js.map +1 -1
  195. package/dist/headless/primitives/createKeyboardShortcut.js +16 -0
  196. package/dist/headless/primitives/createKeyboardShortcut.js.map +1 -0
  197. package/dist/headless/primitives/restoreFocus.js +10 -0
  198. package/dist/headless/primitives/restoreFocus.js.map +1 -0
  199. package/dist/headless/source/components/dataDisplay/chat/chat.jsx +38 -4
  200. package/dist/headless/source/components/dataDisplay/chat/chat.jsx.map +1 -1
  201. package/dist/headless/source/components/dataDisplay/chat/chatComposer.jsx +1 -0
  202. package/dist/headless/source/components/dataDisplay/chat/chatComposer.jsx.map +1 -1
  203. package/dist/headless/source/components/dataDisplay/chat/index.js.map +1 -1
  204. package/dist/headless/source/components/dataDisplay/chat/utils.js.map +2 -2
  205. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx +30 -21
  206. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  207. package/dist/headless/source/components/dataDisplay/diffStat/diffStat.jsx +76 -0
  208. package/dist/headless/source/components/dataDisplay/diffStat/diffStat.jsx.map +1 -0
  209. package/dist/headless/source/components/dataDisplay/diffStat/index.js +19 -0
  210. package/dist/headless/source/components/dataDisplay/diffStat/index.js.map +7 -0
  211. package/dist/headless/source/components/dataDisplay/kbd/index.js +9 -0
  212. package/dist/headless/source/components/dataDisplay/kbd/index.js.map +7 -0
  213. package/dist/headless/source/components/dataDisplay/kbd/kbd.jsx +48 -0
  214. package/dist/headless/source/components/dataDisplay/kbd/kbd.jsx.map +1 -0
  215. package/dist/headless/source/components/dataDisplay/kbd/kbdKeys.js +79 -0
  216. package/dist/headless/source/components/dataDisplay/kbd/kbdKeys.js.map +7 -0
  217. package/dist/headless/source/components/dataDisplay/list/listItem.jsx +37 -7
  218. package/dist/headless/source/components/dataDisplay/list/listItem.jsx.map +1 -1
  219. package/dist/headless/source/components/dataDisplay/qrCode/index.js +6 -0
  220. package/dist/headless/source/components/dataDisplay/qrCode/index.js.map +7 -0
  221. package/dist/headless/source/components/dataDisplay/qrCode/qrCode.jsx +94 -0
  222. package/dist/headless/source/components/dataDisplay/qrCode/qrCode.jsx.map +1 -0
  223. package/dist/headless/source/components/dataDisplay/qrCode/qrCodePath.js +24 -0
  224. package/dist/headless/source/components/dataDisplay/qrCode/qrCodePath.js.map +7 -0
  225. package/dist/headless/source/components/dataDisplay/statusDot/index.js +6 -0
  226. package/dist/headless/source/components/dataDisplay/statusDot/index.js.map +7 -0
  227. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx +28 -0
  228. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -0
  229. package/dist/headless/source/components/dataDisplay/swimlanes/index.js +15 -0
  230. package/dist/headless/source/components/dataDisplay/swimlanes/index.js.map +7 -0
  231. package/dist/headless/source/components/dataDisplay/swimlanes/swimlanes.jsx +450 -0
  232. package/dist/headless/source/components/dataDisplay/swimlanes/swimlanes.jsx.map +1 -0
  233. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx +118 -37
  234. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  235. package/dist/headless/source/components/feedBack/modal/modal.jsx +34 -4
  236. package/dist/headless/source/components/feedBack/modal/modal.jsx.map +1 -1
  237. package/dist/headless/source/components/inputs/button/button.jsx +6 -2
  238. package/dist/headless/source/components/inputs/button/button.jsx.map +1 -1
  239. package/dist/headless/source/components/inputs/composer/composer.jsx +319 -0
  240. package/dist/headless/source/components/inputs/composer/composer.jsx.map +1 -0
  241. package/dist/headless/source/components/inputs/composer/composerFiles.js +27 -0
  242. package/dist/headless/source/components/inputs/composer/composerFiles.js.map +7 -0
  243. package/dist/headless/source/components/inputs/composer/composerKeys.js +11 -0
  244. package/dist/headless/source/components/inputs/composer/composerKeys.js.map +7 -0
  245. package/dist/headless/source/components/inputs/composer/index.js +5 -0
  246. package/dist/headless/source/components/inputs/composer/index.js.map +7 -0
  247. package/dist/headless/source/components/layout/sheet/sheet.jsx +33 -11
  248. package/dist/headless/source/components/layout/sheet/sheet.jsx.map +1 -1
  249. package/dist/headless/source/components/layout/tabGroups/index.js +8 -0
  250. package/dist/headless/source/components/layout/tabGroups/index.js.map +7 -0
  251. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx +1117 -0
  252. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx.map +1 -0
  253. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js +222 -0
  254. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js.map +7 -0
  255. package/dist/headless/source/components/layout/tabGroups/tabGroupsLayout.js +629 -0
  256. package/dist/headless/source/components/layout/tabGroups/tabGroupsLayout.js.map +7 -0
  257. package/dist/headless/source/components/navigation/appBar/appBar.jsx +27 -3
  258. package/dist/headless/source/components/navigation/appBar/appBar.jsx.map +1 -1
  259. package/dist/headless/source/components/navigation/commandPalette/commandPalette.jsx +506 -0
  260. package/dist/headless/source/components/navigation/commandPalette/commandPalette.jsx.map +1 -0
  261. package/dist/headless/source/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
  262. package/dist/headless/source/components/navigation/commandPalette/commandPaletteFilter.js.map +7 -0
  263. package/dist/headless/source/components/navigation/commandPalette/commandPaletteNavigation.js +54 -0
  264. package/dist/headless/source/components/navigation/commandPalette/commandPaletteNavigation.js.map +7 -0
  265. package/dist/headless/source/components/navigation/commandPalette/commandPaletteTypes.js +1 -0
  266. package/dist/headless/source/components/navigation/commandPalette/commandPaletteTypes.js.map +7 -0
  267. package/dist/headless/source/components/navigation/commandPalette/index.js +11 -0
  268. package/dist/headless/source/components/navigation/commandPalette/index.js.map +7 -0
  269. package/dist/headless/source/components/navigation/sidebar/sidebar.jsx +5 -2
  270. package/dist/headless/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
  271. package/dist/headless/source/components/navigation/tabs/index.js +2 -0
  272. package/dist/headless/source/components/navigation/tabs/index.js.map +2 -2
  273. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +135 -8
  274. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  275. package/dist/headless/source/components/navigation/tabs/tabPanel/tabPanel.jsx +28 -0
  276. package/dist/headless/source/components/navigation/tabs/tabPanel/tabPanel.jsx.map +1 -0
  277. package/dist/headless/source/components/navigation/tabs/tabs.jsx +361 -13
  278. package/dist/headless/source/components/navigation/tabs/tabs.jsx.map +1 -1
  279. package/dist/headless/source/components/navigation/tabs/tabs.utils.js +18 -0
  280. package/dist/headless/source/components/navigation/tabs/tabs.utils.js.map +7 -0
  281. package/dist/headless/source/components/navigation/tabs/tabsContext.js.map +2 -2
  282. package/dist/headless/source/index.js +41 -1
  283. package/dist/headless/source/index.js.map +2 -2
  284. package/dist/headless/source/primitives/createFocusTrap.js +8 -3
  285. package/dist/headless/source/primitives/createFocusTrap.js.map +2 -2
  286. package/dist/headless/source/primitives/createKeyboardShortcut.js +23 -0
  287. package/dist/headless/source/primitives/createKeyboardShortcut.js.map +7 -0
  288. package/dist/headless/source/primitives/restoreFocus.js +14 -0
  289. package/dist/headless/source/primitives/restoreFocus.js.map +7 -0
  290. package/dist/headless/source/utils/keyboardShortcut.js +74 -0
  291. package/dist/headless/source/utils/keyboardShortcut.js.map +7 -0
  292. package/dist/headless/source/utils/linkAttrs.js +16 -0
  293. package/dist/headless/source/utils/linkAttrs.js.map +7 -0
  294. package/dist/headless/utils/keyboardShortcut.js +48 -0
  295. package/dist/headless/utils/keyboardShortcut.js.map +1 -0
  296. package/dist/headless/utils/linkAttrs.js +13 -0
  297. package/dist/headless/utils/linkAttrs.js.map +1 -0
  298. package/dist/index.d.ts +24 -3
  299. package/dist/index.js +405 -367
  300. package/dist/index.js.map +1 -1
  301. package/dist/primitives/createFocusTrap.d.ts +5 -0
  302. package/dist/primitives/createFocusTrap.js +17 -17
  303. package/dist/primitives/createFocusTrap.js.map +1 -1
  304. package/dist/primitives/createKeyboardShortcut.d.ts +23 -0
  305. package/dist/primitives/createKeyboardShortcut.js +16 -0
  306. package/dist/primitives/createKeyboardShortcut.js.map +1 -0
  307. package/dist/primitives/restoreFocus.d.ts +8 -0
  308. package/dist/primitives/restoreFocus.js +10 -0
  309. package/dist/primitives/restoreFocus.js.map +1 -0
  310. package/dist/source/components/dataDisplay/chat/chat.jsx +38 -4
  311. package/dist/source/components/dataDisplay/chat/chat.jsx.map +1 -1
  312. package/dist/source/components/dataDisplay/chat/chatComposer.jsx +1 -0
  313. package/dist/source/components/dataDisplay/chat/chatComposer.jsx.map +1 -1
  314. package/dist/source/components/dataDisplay/chat/index.js.map +1 -1
  315. package/dist/source/components/dataDisplay/chat/utils.js.map +2 -2
  316. package/dist/source/components/dataDisplay/dagView/dagView.jsx +30 -21
  317. package/dist/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  318. package/dist/source/components/dataDisplay/diffStat/diffStat.jsx +78 -0
  319. package/dist/source/components/dataDisplay/diffStat/diffStat.jsx.map +1 -0
  320. package/dist/source/components/dataDisplay/diffStat/index.js +19 -0
  321. package/dist/source/components/dataDisplay/diffStat/index.js.map +7 -0
  322. package/dist/source/components/dataDisplay/kbd/index.js +9 -0
  323. package/dist/source/components/dataDisplay/kbd/index.js.map +7 -0
  324. package/dist/source/components/dataDisplay/kbd/kbd.jsx +50 -0
  325. package/dist/source/components/dataDisplay/kbd/kbd.jsx.map +1 -0
  326. package/dist/source/components/dataDisplay/kbd/kbdKeys.js +79 -0
  327. package/dist/source/components/dataDisplay/kbd/kbdKeys.js.map +7 -0
  328. package/dist/source/components/dataDisplay/list/listItem.jsx +37 -7
  329. package/dist/source/components/dataDisplay/list/listItem.jsx.map +1 -1
  330. package/dist/source/components/dataDisplay/qrCode/index.js +6 -0
  331. package/dist/source/components/dataDisplay/qrCode/index.js.map +7 -0
  332. package/dist/source/components/dataDisplay/qrCode/qrCode.jsx +96 -0
  333. package/dist/source/components/dataDisplay/qrCode/qrCode.jsx.map +1 -0
  334. package/dist/source/components/dataDisplay/qrCode/qrCodePath.js +24 -0
  335. package/dist/source/components/dataDisplay/qrCode/qrCodePath.js.map +7 -0
  336. package/dist/source/components/dataDisplay/statusDot/index.js +6 -0
  337. package/dist/source/components/dataDisplay/statusDot/index.js.map +7 -0
  338. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx +30 -0
  339. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -0
  340. package/dist/source/components/dataDisplay/swimlanes/index.js +15 -0
  341. package/dist/source/components/dataDisplay/swimlanes/index.js.map +7 -0
  342. package/dist/source/components/dataDisplay/swimlanes/swimlanes.jsx +452 -0
  343. package/dist/source/components/dataDisplay/swimlanes/swimlanes.jsx.map +1 -0
  344. package/dist/source/components/dataDisplay/treeView/treeView.jsx +118 -37
  345. package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  346. package/dist/source/components/feedBack/modal/modal.jsx +34 -4
  347. package/dist/source/components/feedBack/modal/modal.jsx.map +1 -1
  348. package/dist/source/components/inputs/button/button.jsx +6 -2
  349. package/dist/source/components/inputs/button/button.jsx.map +1 -1
  350. package/dist/source/components/inputs/composer/composer.jsx +321 -0
  351. package/dist/source/components/inputs/composer/composer.jsx.map +1 -0
  352. package/dist/source/components/inputs/composer/composerFiles.js +27 -0
  353. package/dist/source/components/inputs/composer/composerFiles.js.map +7 -0
  354. package/dist/source/components/inputs/composer/composerKeys.js +11 -0
  355. package/dist/source/components/inputs/composer/composerKeys.js.map +7 -0
  356. package/dist/source/components/inputs/composer/index.js +5 -0
  357. package/dist/source/components/inputs/composer/index.js.map +7 -0
  358. package/dist/source/components/layout/sheet/sheet.jsx +33 -11
  359. package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
  360. package/dist/source/components/layout/tabGroups/index.js +8 -0
  361. package/dist/source/components/layout/tabGroups/index.js.map +7 -0
  362. package/dist/source/components/layout/tabGroups/tabGroups.jsx +1119 -0
  363. package/dist/source/components/layout/tabGroups/tabGroups.jsx.map +1 -0
  364. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js +222 -0
  365. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js.map +7 -0
  366. package/dist/source/components/layout/tabGroups/tabGroupsLayout.js +629 -0
  367. package/dist/source/components/layout/tabGroups/tabGroupsLayout.js.map +7 -0
  368. package/dist/source/components/navigation/appBar/appBar.jsx +27 -3
  369. package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
  370. package/dist/source/components/navigation/commandPalette/commandPalette.jsx +508 -0
  371. package/dist/source/components/navigation/commandPalette/commandPalette.jsx.map +1 -0
  372. package/dist/source/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
  373. package/dist/source/components/navigation/commandPalette/commandPaletteFilter.js.map +7 -0
  374. package/dist/source/components/navigation/commandPalette/commandPaletteNavigation.js +54 -0
  375. package/dist/source/components/navigation/commandPalette/commandPaletteNavigation.js.map +7 -0
  376. package/dist/source/components/navigation/commandPalette/commandPaletteTypes.js +1 -0
  377. package/dist/source/components/navigation/commandPalette/commandPaletteTypes.js.map +7 -0
  378. package/dist/source/components/navigation/commandPalette/index.js +11 -0
  379. package/dist/source/components/navigation/commandPalette/index.js.map +7 -0
  380. package/dist/source/components/navigation/sidebar/sidebar.jsx +5 -2
  381. package/dist/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
  382. package/dist/source/components/navigation/tabs/index.js +2 -0
  383. package/dist/source/components/navigation/tabs/index.js.map +2 -2
  384. package/dist/source/components/navigation/tabs/tab/tab.jsx +135 -8
  385. package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  386. package/dist/source/components/navigation/tabs/tabPanel/tabPanel.jsx +30 -0
  387. package/dist/source/components/navigation/tabs/tabPanel/tabPanel.jsx.map +1 -0
  388. package/dist/source/components/navigation/tabs/tabs.jsx +361 -13
  389. package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
  390. package/dist/source/components/navigation/tabs/tabs.utils.js +18 -0
  391. package/dist/source/components/navigation/tabs/tabs.utils.js.map +7 -0
  392. package/dist/source/components/navigation/tabs/tabsContext.js.map +2 -2
  393. package/dist/source/index.js +41 -1
  394. package/dist/source/index.js.map +2 -2
  395. package/dist/source/primitives/createFocusTrap.js +8 -3
  396. package/dist/source/primitives/createFocusTrap.js.map +2 -2
  397. package/dist/source/primitives/createKeyboardShortcut.js +23 -0
  398. package/dist/source/primitives/createKeyboardShortcut.js.map +7 -0
  399. package/dist/source/primitives/restoreFocus.js +14 -0
  400. package/dist/source/primitives/restoreFocus.js.map +7 -0
  401. package/dist/source/utils/keyboardShortcut.js +74 -0
  402. package/dist/source/utils/keyboardShortcut.js.map +7 -0
  403. package/dist/source/utils/linkAttrs.js +16 -0
  404. package/dist/source/utils/linkAttrs.js.map +7 -0
  405. package/dist/utils/keyboardShortcut.d.ts +12 -0
  406. package/dist/utils/keyboardShortcut.js +48 -0
  407. package/dist/utils/keyboardShortcut.js.map +1 -0
  408. package/dist/utils/linkAttrs.d.ts +13 -0
  409. package/dist/utils/linkAttrs.js +13 -0
  410. package/dist/utils/linkAttrs.js.map +1 -0
  411. package/package.json +66 -3
@@ -1,22 +1,23 @@
1
- import { insert as m, createComponent as o, memo as a, effect as I, className as _, template as b, spread as x, mergeProps as U } from "solid-js/web";
1
+ import { insert as h, createComponent as r, memo as n, effect as $, className as z, template as w, mergeProps as f, spread as H } from "solid-js/web";
2
2
  import '../../../assets/styles/less/components/chat/chat.entry.css';import '../../../assets/styles/less/tokens.entry.css';/* empty css */
3
3
  /* empty css */
4
- import { mergeProps as P, createMemo as T, children as N, Show as u } from "solid-js";
5
- import B from "clsx";
6
- import { createControllableState as p } from "../../../primitives/createControllableState.js";
7
- import { createId as E } from "../../../primitives/createId.js";
8
- import { ChatComposer as F } from "./chatComposer.js";
9
- import { ChatHeader as O } from "./chatHeader.js";
10
- import { ChatMessages as D } from "./chatMessages.js";
11
- import { ChatShell as $ } from "./chatShell.js";
12
- import { createChatFileUpload as k } from "./useChatFileUpload.js";
13
- import { CHAT_EXPAND_LAYOUTS as z } from "./types.js";
14
- import { resolveAllowedLayouts as H, pickInitialLayout as f, shouldShowChatCloseButton as V } from "./utils.js";
15
- import { FloatingButton as R } from "../../inputs/floatingButton/floatingButton.js";
16
- import { Icon as X } from "../../base/icon/icon.js";
17
- var Y = /* @__PURE__ */ b("<input>"), j = /* @__PURE__ */ b("<div data-testid=chat>");
18
- function ie(C) {
19
- const e = P({
4
+ import { mergeProps as V, createMemo as a, children as K, Show as d } from "solid-js";
5
+ import b from "clsx";
6
+ import { createControllableState as C } from "../../../primitives/createControllableState.js";
7
+ import { createId as R } from "../../../primitives/createId.js";
8
+ import { Composer as X } from "../../inputs/composer/composer.js";
9
+ import { ChatComposer as Y } from "./chatComposer.js";
10
+ import { ChatHeader as j } from "./chatHeader.js";
11
+ import { ChatMessages as q } from "./chatMessages.js";
12
+ import { ChatShell as G } from "./chatShell.js";
13
+ import { createChatFileUpload as J } from "./useChatFileUpload.js";
14
+ import { CHAT_EXPAND_LAYOUTS as Q } from "./types.js";
15
+ import { resolveAllowedLayouts as W, pickInitialLayout as v, shouldShowChatCloseButton as Z } from "./utils.js";
16
+ import { FloatingButton as ee } from "../../inputs/floatingButton/floatingButton.js";
17
+ import { Icon as te } from "../../base/icon/icon.js";
18
+ var oe = /* @__PURE__ */ w("<input>"), re = /* @__PURE__ */ w("<div data-testid=chat>");
19
+ function ye(y) {
20
+ const e = V({
20
21
  showAvatars: !1,
21
22
  showAttachments: !1,
22
23
  anchor: "bottom-right",
@@ -30,39 +31,43 @@ function ie(C) {
30
31
  embedded: !1,
31
32
  overlayContext: !1,
32
33
  showStatus: !1
33
- }, C), s = T(() => H(e.allowedLayouts ?? z)), [d, i] = p({
34
+ }, y), i = a(() => W(e.allowedLayouts ?? Q)), [c, g] = C({
34
35
  value: () => e.open,
35
36
  defaultValue: e.defaultOpen,
36
37
  onChange: e.onOpenChange
37
- }), [n, g] = p({
38
+ }), [s, u] = C({
38
39
  value: () => e.layout,
39
- defaultValue: f(s(), e.defaultLayout),
40
+ defaultValue: v(i(), e.defaultLayout),
40
41
  onChange: e.onLayoutChange
41
- }), l = () => e.embedded ? "fullHeight" : e.floatingTrigger ? d() ? n() : "closed" : n(), w = () => {
42
- i(!0), n() === "closed" && g(f(s(), e.defaultLayout));
43
- }, v = () => {
44
- i(!1);
45
- }, y = (r) => {
46
- i(!0), g(r);
47
- }, t = k({
42
+ }), l = () => e.embedded ? "fullHeight" : e.floatingTrigger ? c() ? s() : "closed" : s(), S = () => {
43
+ g(!0), s() === "closed" && u(v(i(), e.defaultLayout));
44
+ }, L = () => {
45
+ g(!1);
46
+ }, M = (o) => {
47
+ g(!0), u(o);
48
+ }, t = J({
48
49
  enabled: () => e.fileUpload,
49
50
  accept: e.fileUploadAccept,
50
51
  maxFiles: e.fileUploadMaxFiles,
51
52
  onUploadFiles: e.onUploadFiles,
52
53
  disabled: () => !!e.composerDisabled
53
- }), c = E(), L = () => !!e.onSendMessage || t.enabled(), S = () => o(u, {
54
+ }), p = R(), A = () => !!e.onSendMessage || t.enabled(), P = () => !!e.legacyComposer || t.enabled() && !e.onSendMessage, x = () => r(d, {
54
55
  get when() {
55
56
  return t.enabled();
56
57
  },
57
58
  get children() {
58
- var r = Y();
59
- return x(r, U(() => t.getInputProps({
60
- id: c
59
+ var o = oe();
60
+ return H(o, f(() => t.getInputProps({
61
+ id: p
61
62
  }), {
62
63
  "data-testid": "chat-file-input"
63
- }), !1, !1), r;
64
+ }), !1, !1), o;
64
65
  }
65
- }), M = () => e.footer ?? e.children ?? (L() ? [a(S), o(F, {
66
+ }), F = (o) => {
67
+ e.onSendMessage?.(o);
68
+ }, I = (o) => {
69
+ e.onUploadFiles?.(o);
70
+ }, _ = () => [n(x), r(Y, {
66
71
  get onSendMessage() {
67
72
  return e.onSendMessage;
68
73
  },
@@ -82,51 +87,105 @@ function ie(C) {
82
87
  return t.enabled();
83
88
  },
84
89
  get attachInputId() {
85
- return t.enabled() ? c : void 0;
90
+ return t.enabled() ? p : void 0;
86
91
  },
87
92
  get attachAriaLabel() {
88
93
  return e.attachAriaLabel;
89
94
  }
90
- })] : void 0), A = () => V({
95
+ })], U = a(() => e.onSendMessage ? F : void 0), T = a(() => t.enabled() ? I : void 0), O = a(() => t.enabled() ? e.fileUploadAccept : void 0), B = a(() => t.enabled() ? t.maxFiles : void 0), N = a(() => t.enabled() ? t.maxFiles > 1 : void 0), D = () => r(X, f(() => e.composerProps, {
96
+ get class() {
97
+ return b("smwb-chat__composer", e.composerProps?.class);
98
+ },
99
+ get sendKey() {
100
+ return e.composerProps?.sendKey ?? "enter";
101
+ },
102
+ get "aria-label"() {
103
+ return e.composerProps?.["aria-label"] ?? (e.composerProps?.["aria-labelledby"] ? void 0 : "Message");
104
+ },
105
+ get sendLabel() {
106
+ return e.composerProps?.sendLabel ?? "Send message";
107
+ },
108
+ get attachLabel() {
109
+ return e.attachAriaLabel ?? e.composerProps?.attachLabel;
110
+ },
111
+ get placeholder() {
112
+ return e.composerPlaceholder;
113
+ },
114
+ get disabled() {
115
+ return e.composerDisabled;
116
+ },
117
+ get busy() {
118
+ return e.busy;
119
+ },
120
+ get onStop() {
121
+ return e.onStop;
122
+ },
123
+ get onSend() {
124
+ return U();
125
+ },
126
+ get onAttach() {
127
+ return T();
128
+ },
129
+ get accept() {
130
+ return O();
131
+ },
132
+ get maxFiles() {
133
+ return B();
134
+ },
135
+ get multiple() {
136
+ return N();
137
+ },
138
+ dropTarget: !1
139
+ })), E = () => e.footer ?? e.children ?? (A() ? r(d, {
140
+ get when() {
141
+ return P();
142
+ },
143
+ get fallback() {
144
+ return D();
145
+ },
146
+ get children() {
147
+ return _();
148
+ }
149
+ }) : void 0), k = () => Z({
91
150
  floatingTrigger: e.floatingTrigger,
92
151
  embedded: e.embedded,
93
152
  overlayContext: e.overlayContext,
94
153
  effectiveLayout: l(),
95
154
  showCloseButton: e.showCloseButton
96
- }), h = N(() => e.floatingTrigger && !e.embedded && !d() ? e.triggerIcon : void 0);
155
+ }), m = K(() => e.floatingTrigger && !e.embedded && !c() ? e.triggerIcon : void 0);
97
156
  return (() => {
98
- var r = j();
99
- return m(r, o(u, {
157
+ var o = re();
158
+ return h(o, r(d, {
100
159
  get when() {
101
- return a(() => !!(e.floatingTrigger && !e.embedded))() && !d();
160
+ return n(() => !!(e.floatingTrigger && !e.embedded))() && !c();
102
161
  },
103
162
  get children() {
104
- return o(R, {
163
+ return r(ee, {
105
164
  class: "smwb-chat__trigger",
106
165
  get "aria-label"() {
107
166
  return e.triggerLabel ?? "Open chat";
108
167
  },
109
168
  "data-testid": "chat-trigger",
110
- onClick: w,
169
+ onClick: S,
111
170
  get children() {
112
- return o(u, {
171
+ return r(d, {
113
172
  get when() {
114
- return h();
173
+ return m();
115
174
  },
116
175
  get fallback() {
117
- return o(X, {
176
+ return r(te, {
118
177
  name: "chat",
119
178
  size: 24
120
179
  });
121
180
  },
122
181
  get children() {
123
- return h();
182
+ return m();
124
183
  }
125
184
  });
126
185
  }
127
186
  });
128
187
  }
129
- }), null), m(r, o($, {
188
+ }), null), h(o, r(G, {
130
189
  get layout() {
131
190
  return l();
132
191
  },
@@ -143,13 +202,13 @@ function ie(C) {
143
202
  return e.overlayContext;
144
203
  },
145
204
  get fileDropzoneRootProps() {
146
- return a(() => !!t.enabled())() ? t.getRootProps() : void 0;
205
+ return n(() => !!t.enabled())() ? t.getRootProps() : void 0;
147
206
  },
148
207
  get fileDropzoneActive() {
149
- return a(() => !!t.enabled())() && t.isDragActive();
208
+ return n(() => !!t.enabled())() && t.isDragActive();
150
209
  },
151
210
  get header() {
152
- return o(O, {
211
+ return r(j, {
153
212
  get title() {
154
213
  return e.headerTitle;
155
214
  },
@@ -160,22 +219,22 @@ function ie(C) {
160
219
  return e.headerActions;
161
220
  },
162
221
  get layout() {
163
- return a(() => l() === "closed")() ? n() : l();
222
+ return n(() => l() === "closed")() ? s() : l();
164
223
  },
165
224
  get allowedLayouts() {
166
- return s();
225
+ return i();
167
226
  },
168
- onLayoutChange: y,
227
+ onLayoutChange: M,
169
228
  get onClose() {
170
- return A() ? v : void 0;
229
+ return k() ? L : void 0;
171
230
  }
172
231
  });
173
232
  },
174
233
  get footer() {
175
- return M();
234
+ return E();
176
235
  },
177
236
  get children() {
178
- return o(D, {
237
+ return r(q, {
179
238
  get messages() {
180
239
  return e.messages;
181
240
  },
@@ -214,10 +273,10 @@ function ie(C) {
214
273
  }
215
274
  });
216
275
  }
217
- }), null), I(() => _(r, B("smwb-chat", !e.embedded && `smwb-chat_${e.anchor}`, e.embedded && "smwb-chat_embedded", e.overlayContext && "smwb-chat_overlay-context", e.class))), r;
276
+ }), null), $(() => z(o, b("smwb-chat", !e.embedded && `smwb-chat_${e.anchor}`, e.embedded && "smwb-chat_embedded", e.overlayContext && "smwb-chat_overlay-context", e.class))), o;
218
277
  })();
219
278
  }
220
279
  export {
221
- ie as Chat
280
+ ye as Chat
222
281
  };
223
282
  //# sourceMappingURL=chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sources":["../../../../src/components/dataDisplay/chat/chat.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, createMemo, mergeProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { FloatingButton } from \"../../inputs/floatingButton\";\nimport { Icon } from \"../../base/icon\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { createId } from \"../../../primitives/createId\";\nimport { ChatComposer } from \"./chatComposer\";\nimport { ChatHeader } from \"./chatHeader\";\nimport { ChatMessages } from \"./chatMessages\";\nimport { ChatShell } from \"./chatShell\";\nimport { createChatFileUpload } from \"./useChatFileUpload\";\nimport {\n type ChatAnchor,\n type ChatLayoutMode,\n type ChatMessage,\n type ChatMessageRenderContext,\n type ChatThemeMode,\n CHAT_EXPAND_LAYOUTS,\n} from \"./types\";\nimport { pickInitialLayout, resolveAllowedLayouts, shouldShowChatCloseButton } from \"./utils\";\n\nexport interface ChatProps extends ParentProps, Omit<ChatMessageRenderContext, \"showAvatars\" | \"showAttachments\"> {\n class?: string | undefined;\n messages: ChatMessage[];\n showAvatars?: boolean | undefined;\n showAttachments?: boolean | undefined;\n headerTitle?: JSX.Element;\n headerSubtitle?: JSX.Element;\n headerActions?: JSX.Element;\n footer?: JSX.Element;\n anchor?: ChatAnchor | undefined;\n themeMode?: ChatThemeMode | undefined;\n allowedLayouts?: ChatLayoutMode[] | undefined;\n layout?: ChatLayoutMode | undefined;\n defaultLayout?: ChatLayoutMode | undefined;\n onLayoutChange?: ((layout: ChatLayoutMode) => void) | undefined;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n floatingTrigger?: boolean | undefined;\n triggerIcon?: JSX.Element;\n triggerLabel?: string | undefined;\n onLoadMore?: (() => void | Promise<void>) | undefined;\n hasMore?: boolean | undefined;\n onSendMessage?: ((text: string) => void | Promise<void>) | undefined;\n composerPlaceholder?: string | undefined;\n composerDisabled?: boolean | undefined;\n composerShiftEnterNewline?: boolean | undefined;\n composerCtrlEnterNewline?: boolean | undefined;\n fileUpload?: boolean | undefined;\n onUploadFiles?: ((files: File[]) => void | Promise<void>) | undefined;\n fileUploadAccept?: Record<string, string[]> | string | undefined;\n fileUploadMaxFiles?: number | undefined;\n attachAriaLabel?: string | undefined;\n loading?: boolean | undefined;\n loadingMore?: boolean | undefined;\n loadingSkeletonCount?: number | undefined;\n renderMessage?: ((message: ChatMessage, ctx: ChatMessageRenderContext) => JSX.Element) | undefined;\n embedded?: boolean | undefined;\n overlayContext?: boolean | undefined;\n showCloseButton?: boolean | undefined;\n}\n\nexport function Chat(props: ChatProps): JSX.Element {\n const p = mergeProps(\n {\n showAvatars: false,\n showAttachments: false,\n anchor: \"bottom-right\" as const,\n themeMode: \"inherit\" as const,\n defaultOpen: false,\n floatingTrigger: false,\n composerPlaceholder: \"message\",\n composerShiftEnterNewline: true,\n composerCtrlEnterNewline: true,\n fileUpload: false,\n embedded: false,\n overlayContext: false,\n showStatus: false,\n },\n props\n );\n\n const allowedLayouts = createMemo(() => resolveAllowedLayouts(p.allowedLayouts ?? CHAT_EXPAND_LAYOUTS));\n\n const [open, setOpen] = createControllableState<boolean>({\n value: () => p.open,\n defaultValue: p.defaultOpen,\n onChange: p.onOpenChange,\n });\n\n const [layout, setLayout] = createControllableState<ChatLayoutMode>({\n value: () => p.layout,\n defaultValue: pickInitialLayout(allowedLayouts(), p.defaultLayout),\n onChange: p.onLayoutChange,\n });\n\n const effectiveLayout = (): ChatLayoutMode =>\n p.embedded ? \"fullHeight\" : p.floatingTrigger ? (open() ? layout() : \"closed\") : layout();\n\n const handleOpen = (): void => {\n setOpen(true);\n if (layout() === \"closed\") {\n setLayout(pickInitialLayout(allowedLayouts(), p.defaultLayout));\n }\n };\n\n const handleClose = (): void => {\n setOpen(false);\n };\n\n const handleLayoutChange = (next: ChatLayoutMode): void => {\n setOpen(true);\n setLayout(next);\n };\n\n const fileUpload = createChatFileUpload({\n enabled: () => p.fileUpload,\n accept: p.fileUploadAccept,\n maxFiles: p.fileUploadMaxFiles,\n onUploadFiles: p.onUploadFiles,\n disabled: () => Boolean(p.composerDisabled),\n });\n\n const attachInputId = createId();\n\n const showComposer = (): boolean => Boolean(p.onSendMessage) || fileUpload.enabled();\n\n const fileInput = (): JSX.Element => (\n <Show when={fileUpload.enabled()}>\n <input {...fileUpload.getInputProps({ id: attachInputId })} data-testid=\"chat-file-input\" />\n </Show>\n );\n\n const resolvedFooter = (): JSX.Element =>\n p.footer ??\n p.children ??\n (showComposer() ? (\n <>\n {fileInput()}\n <ChatComposer\n onSendMessage={p.onSendMessage}\n placeholder={p.composerPlaceholder}\n disabled={p.composerDisabled}\n shiftEnterNewline={p.composerShiftEnterNewline}\n ctrlEnterNewline={p.composerCtrlEnterNewline}\n fileUpload={fileUpload.enabled()}\n attachInputId={fileUpload.enabled() ? attachInputId : undefined}\n attachAriaLabel={p.attachAriaLabel}\n />\n </>\n ) : undefined);\n\n const closeButtonVisible = (): boolean =>\n shouldShowChatCloseButton({\n floatingTrigger: p.floatingTrigger,\n embedded: p.embedded,\n overlayContext: p.overlayContext,\n effectiveLayout: effectiveLayout(),\n showCloseButton: p.showCloseButton,\n });\n\n // The trigger icon is read once, and only while the trigger is drawn: markup\n // passed as a prop is created anew on every read, and during hydration a copy\n // the server never rendered has no DOM node.\n const triggerIcon = children(() => (p.floatingTrigger && !p.embedded && !open() ? p.triggerIcon : undefined));\n\n return (\n <div\n class={cn(\n \"smwb-chat\",\n !p.embedded && `smwb-chat_${p.anchor}`,\n p.embedded && \"smwb-chat_embedded\",\n p.overlayContext && \"smwb-chat_overlay-context\",\n p.class\n )}\n data-testid=\"chat\"\n >\n <Show when={p.floatingTrigger && !p.embedded && !open()}>\n <FloatingButton\n class=\"smwb-chat__trigger\"\n aria-label={p.triggerLabel ?? \"Open chat\"}\n data-testid=\"chat-trigger\"\n onClick={handleOpen}\n >\n <Show when={triggerIcon()} fallback={<Icon name=\"chat\" size={24} />}>\n {triggerIcon()}\n </Show>\n </FloatingButton>\n </Show>\n <ChatShell\n layout={effectiveLayout()}\n anchor={p.anchor}\n themeMode={p.themeMode}\n embedded={p.embedded}\n overlayContext={p.overlayContext}\n fileDropzoneRootProps={fileUpload.enabled() ? fileUpload.getRootProps() : undefined}\n fileDropzoneActive={fileUpload.enabled() && fileUpload.isDragActive()}\n header={\n <ChatHeader\n title={p.headerTitle}\n subtitle={p.headerSubtitle}\n actions={p.headerActions}\n layout={effectiveLayout() === \"closed\" ? layout() : effectiveLayout()}\n allowedLayouts={allowedLayouts()}\n onLayoutChange={handleLayoutChange}\n onClose={closeButtonVisible() ? handleClose : undefined}\n />\n }\n footer={resolvedFooter()}\n >\n <ChatMessages\n messages={p.messages}\n showAvatars={p.showAvatars}\n showAttachments={p.showAttachments}\n showStatus={p.showStatus}\n statusIcons={p.statusIcons}\n renderStatus={p.renderStatus}\n onLoadMore={p.onLoadMore}\n hasMore={p.hasMore}\n loading={p.loading}\n loadingMore={p.loadingMore}\n loadingSkeletonCount={p.loadingSkeletonCount}\n renderMessage={p.renderMessage}\n />\n </ChatShell>\n </div>\n );\n}\n\nexport default Chat;\n"],"names":["Chat","props","p","mergeProps","showAvatars","showAttachments","anchor","themeMode","defaultOpen","floatingTrigger","composerPlaceholder","composerShiftEnterNewline","composerCtrlEnterNewline","fileUpload","embedded","overlayContext","showStatus","allowedLayouts","createMemo","resolveAllowedLayouts","CHAT_EXPAND_LAYOUTS","open","setOpen","createControllableState","value","defaultValue","onChange","onOpenChange","layout","setLayout","pickInitialLayout","defaultLayout","onLayoutChange","effectiveLayout","handleOpen","handleClose","handleLayoutChange","next","createChatFileUpload","enabled","accept","fileUploadAccept","maxFiles","fileUploadMaxFiles","onUploadFiles","disabled","Boolean","composerDisabled","attachInputId","createId","showComposer","onSendMessage","fileInput","_$createComponent","Show","when","children","_el$","_tmpl$","_$spread","_$mergeProps","getInputProps","id","resolvedFooter","footer","_$memo","ChatComposer","placeholder","shiftEnterNewline","ctrlEnterNewline","undefined","attachAriaLabel","closeButtonVisible","shouldShowChatCloseButton","showCloseButton","triggerIcon","_el$2","_tmpl$2","_$insert","FloatingButton","triggerLabel","onClick","fallback","Icon","name","size","ChatShell","fileDropzoneRootProps","getRootProps","fileDropzoneActive","isDragActive","header","ChatHeader","title","headerTitle","subtitle","headerSubtitle","actions","headerActions","onClose","ChatMessages","messages","statusIcons","renderStatus","onLoadMore","hasMore","loading","loadingMore","loadingSkeletonCount","renderMessage","_$effect","_$className","cn","class"],"mappings":"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"}
1
+ {"version":3,"file":"chat.js","sources":["../../../../src/components/dataDisplay/chat/chat.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, createMemo, mergeProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { FloatingButton } from \"../../inputs/floatingButton\";\nimport { Icon } from \"../../base/icon\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { createId } from \"../../../primitives/createId\";\nimport { Composer } from \"../../inputs/composer/composer\";\nimport type { ComposerProps } from \"../../inputs/composer/composer\";\nimport { ChatComposer } from \"./chatComposer\";\nimport { ChatHeader } from \"./chatHeader\";\nimport { ChatMessages } from \"./chatMessages\";\nimport { ChatShell } from \"./chatShell\";\nimport { createChatFileUpload } from \"./useChatFileUpload\";\nimport {\n type ChatAnchor,\n type ChatLayoutMode,\n type ChatMessage,\n type ChatMessageRenderContext,\n type ChatThemeMode,\n CHAT_EXPAND_LAYOUTS,\n} from \"./types\";\nimport { pickInitialLayout, resolveAllowedLayouts, shouldShowChatCloseButton } from \"./utils\";\n\n/**\n * Props for the `Composer` Chat draws as its footer. The props Chat owns itself — `onSendMessage` (the composer's\n * `onSend`), `busy`, `onStop`, `composerPlaceholder` (`placeholder`), `composerDisabled` (`disabled`), the file upload\n * props (`onAttach`, `accept`, `multiple`, `maxFiles`) and `dropTarget` (always `false`: the Chat shell is the drop\n * target) — are left out, Chat passes them and does not let a caller override them.\n */\nexport type ChatFooterComposerProps = Omit<\n ComposerProps,\n | \"onSend\"\n | \"busy\"\n | \"onStop\"\n | \"disabled\"\n | \"placeholder\"\n | \"onAttach\"\n | \"accept\"\n | \"multiple\"\n | \"maxFiles\"\n | \"dropTarget\"\n>;\n\nexport interface ChatProps extends ParentProps, Omit<ChatMessageRenderContext, \"showAvatars\" | \"showAttachments\"> {\n class?: string | undefined;\n messages: ChatMessage[];\n showAvatars?: boolean | undefined;\n showAttachments?: boolean | undefined;\n headerTitle?: JSX.Element;\n headerSubtitle?: JSX.Element;\n headerActions?: JSX.Element;\n footer?: JSX.Element;\n anchor?: ChatAnchor | undefined;\n themeMode?: ChatThemeMode | undefined;\n allowedLayouts?: ChatLayoutMode[] | undefined;\n layout?: ChatLayoutMode | undefined;\n defaultLayout?: ChatLayoutMode | undefined;\n onLayoutChange?: ((layout: ChatLayoutMode) => void) | undefined;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n floatingTrigger?: boolean | undefined;\n triggerIcon?: JSX.Element;\n triggerLabel?: string | undefined;\n onLoadMore?: (() => void | Promise<void>) | undefined;\n hasMore?: boolean | undefined;\n onSendMessage?: ((text: string) => void | Promise<void>) | undefined;\n /**\n * The agent is replying: the composer's send button turns into Stop and calls `onStop`, the keys do not send, the\n * text stays editable. Not the same as `loading` (the message list skeleton). The default composer only.\n */\n busy?: boolean | undefined;\n /** Called when Stop is pressed while `busy` (and not `composerDisabled`). The default composer only. */\n onStop?: (() => void) | undefined;\n /**\n * More props for the built-in `Composer`: `toolbar`, `attachments`, `maxLength`, `counter`, `minRows`, `maxRows`,\n * `layout`, `sendKey` (default here `\"enter\"`), `value`/`defaultValue`/`onValueChange`, `clearOnSend`, `autofocus`,\n * `inputRef`, `aria-*`, `sendLabel`, `stopLabel`, `attachLabel`, `class`, `data-*`, … Chat's own props\n * (`onSendMessage`, `busy`, `onStop`, `composerPlaceholder`, `composerDisabled`, the file upload props) win.\n */\n composerProps?: ChatFooterComposerProps | undefined;\n /**\n * Deprecated: draws the old `ChatComposer` (Enter sends, TextField DOM, `chat-composer*` test ids) instead of the\n * built-in `Composer`. Kept for the migration and removed with `ChatComposer` in the next major; `busy`, `onStop`\n * and `composerProps` are ignored in this mode.\n *\n * @deprecated Migrate to the default `Composer`; see the README section \"Migrating from ChatComposer\".\n */\n legacyComposer?: boolean | undefined;\n composerPlaceholder?: string | undefined;\n composerDisabled?: boolean | undefined;\n /**\n * Deprecated: works with `legacyComposer` only — the built-in `Composer` always inserts a newline on Shift+Enter.\n * Pass it together with `legacyComposer` until that is removed.\n *\n * @deprecated Use `legacyComposer`; the default `Composer` has no equivalent flag.\n */\n composerShiftEnterNewline?: boolean | undefined;\n /**\n * Deprecated: works with `legacyComposer` only — with the built-in `Composer` Ctrl/⌘+Enter sends. Pass it together\n * with `legacyComposer` until that is removed.\n *\n * @deprecated Use `legacyComposer`; the default `Composer` has no equivalent flag.\n */\n composerCtrlEnterNewline?: boolean | undefined;\n fileUpload?: boolean | undefined;\n onUploadFiles?: ((files: File[]) => void | Promise<void>) | undefined;\n fileUploadAccept?: Record<string, string[]> | string | undefined;\n fileUploadMaxFiles?: number | undefined;\n attachAriaLabel?: string | undefined;\n loading?: boolean | undefined;\n loadingMore?: boolean | undefined;\n loadingSkeletonCount?: number | undefined;\n renderMessage?: ((message: ChatMessage, ctx: ChatMessageRenderContext) => JSX.Element) | undefined;\n embedded?: boolean | undefined;\n overlayContext?: boolean | undefined;\n showCloseButton?: boolean | undefined;\n}\n\nexport function Chat(props: ChatProps): JSX.Element {\n const p = mergeProps(\n {\n showAvatars: false,\n showAttachments: false,\n anchor: \"bottom-right\" as const,\n themeMode: \"inherit\" as const,\n defaultOpen: false,\n floatingTrigger: false,\n composerPlaceholder: \"message\",\n composerShiftEnterNewline: true,\n composerCtrlEnterNewline: true,\n fileUpload: false,\n embedded: false,\n overlayContext: false,\n showStatus: false,\n },\n props\n );\n\n const allowedLayouts = createMemo(() => resolveAllowedLayouts(p.allowedLayouts ?? CHAT_EXPAND_LAYOUTS));\n\n const [open, setOpen] = createControllableState<boolean>({\n value: () => p.open,\n defaultValue: p.defaultOpen,\n onChange: p.onOpenChange,\n });\n\n const [layout, setLayout] = createControllableState<ChatLayoutMode>({\n value: () => p.layout,\n defaultValue: pickInitialLayout(allowedLayouts(), p.defaultLayout),\n onChange: p.onLayoutChange,\n });\n\n const effectiveLayout = (): ChatLayoutMode =>\n p.embedded ? \"fullHeight\" : p.floatingTrigger ? (open() ? layout() : \"closed\") : layout();\n\n const handleOpen = (): void => {\n setOpen(true);\n if (layout() === \"closed\") {\n setLayout(pickInitialLayout(allowedLayouts(), p.defaultLayout));\n }\n };\n\n const handleClose = (): void => {\n setOpen(false);\n };\n\n const handleLayoutChange = (next: ChatLayoutMode): void => {\n setOpen(true);\n setLayout(next);\n };\n\n const fileUpload = createChatFileUpload({\n enabled: () => p.fileUpload,\n accept: p.fileUploadAccept,\n maxFiles: p.fileUploadMaxFiles,\n onUploadFiles: p.onUploadFiles,\n disabled: () => Boolean(p.composerDisabled),\n });\n\n const attachInputId = createId();\n\n const showComposer = (): boolean => Boolean(p.onSendMessage) || fileUpload.enabled();\n // Composer has no text-less mode, so an upload without a send handler keeps the old attach-only ChatComposer.\n const useLegacyComposer = (): boolean => Boolean(p.legacyComposer) || (fileUpload.enabled() && !p.onSendMessage);\n\n const fileInput = (): JSX.Element => (\n <Show when={fileUpload.enabled()}>\n <input {...fileUpload.getInputProps({ id: attachInputId })} data-testid=\"chat-file-input\" />\n </Show>\n );\n\n // The handlers are attached always and read the props when called: a handler that appears later still works.\n const sendText = (text: string): void => {\n void p.onSendMessage?.(text);\n };\n\n const uploadFiles = (files: File[]): void => {\n void p.onUploadFiles?.(files);\n };\n\n const legacyFooter = (): JSX.Element => (\n <>\n {fileInput()}\n <ChatComposer\n onSendMessage={p.onSendMessage}\n placeholder={p.composerPlaceholder}\n disabled={p.composerDisabled}\n shiftEnterNewline={p.composerShiftEnterNewline}\n ctrlEnterNewline={p.composerCtrlEnterNewline}\n fileUpload={fileUpload.enabled()}\n attachInputId={fileUpload.enabled() ? attachInputId : undefined}\n attachAriaLabel={p.attachAriaLabel}\n />\n </>\n );\n\n // Chat's own props are plain attributes after the spread, so they win; `dropTarget` is off because the shell\n // already takes the drops. Every prop Chat owns is omitted from `ChatFooterComposerProps`, so none of them can\n // leak back from the spread when its value is `undefined`.\n // The upload gate is resolved in memos rather than inline: a conditional prop compiles to a `memo` created\n // inside the prop getter, and Composer reads `onAttach`/`accept`/`maxFiles`/`multiple` from its pick and drop\n // handlers — outside any owner, where such a computation is never disposed.\n const composerOnSend = createMemo(() => (p.onSendMessage ? sendText : undefined));\n const composerOnAttach = createMemo(() => (fileUpload.enabled() ? uploadFiles : undefined));\n const composerAccept = createMemo(() => (fileUpload.enabled() ? p.fileUploadAccept : undefined));\n const composerMaxFiles = createMemo(() => (fileUpload.enabled() ? fileUpload.maxFiles : undefined));\n const composerMultiple = createMemo(() => (fileUpload.enabled() ? fileUpload.maxFiles > 1 : undefined));\n\n const composerFooter = (): JSX.Element => (\n <Composer\n {...p.composerProps}\n class={cn(\"smwb-chat__composer\", p.composerProps?.class)}\n sendKey={p.composerProps?.sendKey ?? \"enter\"}\n aria-label={p.composerProps?.[\"aria-label\"] ?? (p.composerProps?.[\"aria-labelledby\"] ? undefined : \"Message\")}\n sendLabel={p.composerProps?.sendLabel ?? \"Send message\"}\n attachLabel={p.attachAriaLabel ?? p.composerProps?.attachLabel}\n placeholder={p.composerPlaceholder}\n disabled={p.composerDisabled}\n busy={p.busy}\n onStop={p.onStop}\n onSend={composerOnSend()}\n onAttach={composerOnAttach()}\n accept={composerAccept()}\n maxFiles={composerMaxFiles()}\n multiple={composerMultiple()}\n dropTarget={false}\n />\n );\n\n const resolvedFooter = (): JSX.Element =>\n p.footer ??\n p.children ??\n (showComposer() ? (\n <Show when={useLegacyComposer()} fallback={composerFooter()}>\n {legacyFooter()}\n </Show>\n ) : undefined);\n\n const closeButtonVisible = (): boolean =>\n shouldShowChatCloseButton({\n floatingTrigger: p.floatingTrigger,\n embedded: p.embedded,\n overlayContext: p.overlayContext,\n effectiveLayout: effectiveLayout(),\n showCloseButton: p.showCloseButton,\n });\n\n // The trigger icon is read once, and only while the trigger is drawn: markup\n // passed as a prop is created anew on every read, and during hydration a copy\n // the server never rendered has no DOM node.\n const triggerIcon = children(() => (p.floatingTrigger && !p.embedded && !open() ? p.triggerIcon : undefined));\n\n return (\n <div\n class={cn(\n \"smwb-chat\",\n !p.embedded && `smwb-chat_${p.anchor}`,\n p.embedded && \"smwb-chat_embedded\",\n p.overlayContext && \"smwb-chat_overlay-context\",\n p.class\n )}\n data-testid=\"chat\"\n >\n <Show when={p.floatingTrigger && !p.embedded && !open()}>\n <FloatingButton\n class=\"smwb-chat__trigger\"\n aria-label={p.triggerLabel ?? \"Open chat\"}\n data-testid=\"chat-trigger\"\n onClick={handleOpen}\n >\n <Show when={triggerIcon()} fallback={<Icon name=\"chat\" size={24} />}>\n {triggerIcon()}\n </Show>\n </FloatingButton>\n </Show>\n <ChatShell\n layout={effectiveLayout()}\n anchor={p.anchor}\n themeMode={p.themeMode}\n embedded={p.embedded}\n overlayContext={p.overlayContext}\n fileDropzoneRootProps={fileUpload.enabled() ? fileUpload.getRootProps() : undefined}\n fileDropzoneActive={fileUpload.enabled() && fileUpload.isDragActive()}\n header={\n <ChatHeader\n title={p.headerTitle}\n subtitle={p.headerSubtitle}\n actions={p.headerActions}\n layout={effectiveLayout() === \"closed\" ? layout() : effectiveLayout()}\n allowedLayouts={allowedLayouts()}\n onLayoutChange={handleLayoutChange}\n onClose={closeButtonVisible() ? handleClose : undefined}\n />\n }\n footer={resolvedFooter()}\n >\n <ChatMessages\n messages={p.messages}\n showAvatars={p.showAvatars}\n showAttachments={p.showAttachments}\n showStatus={p.showStatus}\n statusIcons={p.statusIcons}\n renderStatus={p.renderStatus}\n onLoadMore={p.onLoadMore}\n hasMore={p.hasMore}\n loading={p.loading}\n loadingMore={p.loadingMore}\n loadingSkeletonCount={p.loadingSkeletonCount}\n renderMessage={p.renderMessage}\n />\n </ChatShell>\n </div>\n );\n}\n\nexport default Chat;\n"],"names":["Chat","props","p","mergeProps","showAvatars","showAttachments","anchor","themeMode","defaultOpen","floatingTrigger","composerPlaceholder","composerShiftEnterNewline","composerCtrlEnterNewline","fileUpload","embedded","overlayContext","showStatus","allowedLayouts","createMemo","resolveAllowedLayouts","CHAT_EXPAND_LAYOUTS","open","setOpen","createControllableState","value","defaultValue","onChange","onOpenChange","layout","setLayout","pickInitialLayout","defaultLayout","onLayoutChange","effectiveLayout","handleOpen","handleClose","handleLayoutChange","next","createChatFileUpload","enabled","accept","fileUploadAccept","maxFiles","fileUploadMaxFiles","onUploadFiles","disabled","Boolean","composerDisabled","attachInputId","createId","showComposer","onSendMessage","useLegacyComposer","legacyComposer","fileInput","_$createComponent","Show","when","children","_el$","_tmpl$","_$spread","_$mergeProps","getInputProps","id","sendText","text","uploadFiles","files","legacyFooter","_$memo","ChatComposer","placeholder","shiftEnterNewline","ctrlEnterNewline","undefined","attachAriaLabel","composerOnSend","composerOnAttach","composerAccept","composerMaxFiles","composerMultiple","composerFooter","Composer","composerProps","cn","class","sendKey","sendLabel","attachLabel","busy","onStop","onSend","onAttach","multiple","dropTarget","resolvedFooter","footer","fallback","closeButtonVisible","shouldShowChatCloseButton","showCloseButton","triggerIcon","_el$2","_tmpl$2","_$insert","FloatingButton","triggerLabel","onClick","Icon","name","size","ChatShell","fileDropzoneRootProps","getRootProps","fileDropzoneActive","isDragActive","header","ChatHeader","title","headerTitle","subtitle","headerSubtitle","actions","headerActions","onClose","ChatMessages","messages","statusIcons","renderStatus","onLoadMore","hasMore","loading","loadingMore","loadingSkeletonCount","renderMessage","_$effect","_$className"],"mappings":"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"}
@@ -1,4 +1,13 @@
1
1
  import { type JSX } from "solid-js";
2
+ /**
3
+ * Deprecated: the props of the old chat input. Use `ComposerProps` — `Chat` now draws a `Composer` as its footer,
4
+ * and the standalone `Composer` replaces these props (`onSendMessage` → `onSend`, `sendAriaLabel` → `sendLabel`,
5
+ * `attachAriaLabel` → `attachLabel`, `fileUpload` + `attachInputId`/`onAttachClick` → `onAttach`,
6
+ * `shiftEnterNewline` → `sendKey="enter"`; `ctrlEnterNewline` has no equivalent — Ctrl/⌘+Enter always sends).
7
+ * Removed in the next major.
8
+ *
9
+ * @deprecated Use `Composer` (`ComposerProps`); see the README section "Migrating from ChatComposer".
10
+ */
2
11
  export interface ChatComposerProps {
3
12
  class?: string | undefined;
4
13
  onSendMessage?: ((text: string) => void | Promise<void>) | undefined;
@@ -12,5 +21,13 @@ export interface ChatComposerProps {
12
21
  onAttachClick?: (() => void) | undefined;
13
22
  attachAriaLabel?: string | undefined;
14
23
  }
24
+ /**
25
+ * Deprecated: the old chat input — Enter sends, a TextField-based DOM and the `chat-composer*` test ids.
26
+ * `Chat` draws a `Composer` as its footer now, and the standalone `Composer` replaces this component
27
+ * (`onSendMessage` → `onSend`, Enter-to-send → `sendKey="enter"`). Kept for the migration and removed in the
28
+ * next major; to keep this markup inside a Chat while migrating, pass `legacyComposer` to `Chat`.
29
+ *
30
+ * @deprecated Use `Composer`; see the README section "Migrating from ChatComposer".
31
+ */
15
32
  export declare function ChatComposer(props: ChatComposerProps): JSX.Element;
16
33
  export default ChatComposer;
@@ -1,13 +1,13 @@
1
- import { createComponent as a, use as B, setAttribute as c, effect as f, className as v, memo as z, insert as M, template as S, delegateEvents as P } from "solid-js/web";
1
+ import { createComponent as a, use as B, setAttribute as c, effect as f, className as v, memo as z, insert as M, template as C, delegateEvents as P } from "solid-js/web";
2
2
  import { mergeProps as W, createSignal as T, Show as u } from "solid-js";
3
3
  import h from "clsx";
4
4
  import { TextFieldWrapper as H } from "../../inputs/textField/textFieldWrapper.js";
5
- import { ChatIconButton as D } from "./chatIconButton.js";
5
+ import { ChatIconButton as y } from "./chatIconButton.js";
6
6
  import { createId as K } from "../../../primitives/createId.js";
7
7
  import { shouldComposerNewlineOnEnter as U } from "./utils.js";
8
8
  import { TextField as V } from "../../inputs/textField/textField.js";
9
9
  import { Icon as A } from "../../base/icon/icon.js";
10
- var q = /* @__PURE__ */ S("<label data-testid=chat-composer-attach>"), O = /* @__PURE__ */ S("<textarea rows=1>"), R = /* @__PURE__ */ S("<div data-testid=chat-composer>");
10
+ var q = /* @__PURE__ */ C("<label data-testid=chat-composer-attach>"), O = /* @__PURE__ */ C("<textarea rows=1>"), R = /* @__PURE__ */ C("<div data-testid=chat-composer>");
11
11
  function E(o) {
12
12
  o.stopPropagation();
13
13
  }
@@ -27,21 +27,23 @@ function ne(o) {
27
27
  ctrlEnterNewline: !0,
28
28
  fileUpload: !1,
29
29
  attachAriaLabel: "Attach file"
30
- }, o), [s, i] = T(""), [b, m] = T(!1), _ = K();
30
+ }, o), [s, i] = T(""), [b, m] = T(!1), S = K();
31
31
  let p;
32
- const L = () => e.shiftEnterNewline || e.ctrlEnterNewline, y = () => !!e.onSendMessage && s().trim().length > 0 && !e.disabled, g = () => e.fileUpload && !!(e.attachInputId || e.onAttachClick), C = () => {
32
+ const D = () => e.shiftEnterNewline || e.ctrlEnterNewline, L = () => !!e.onSendMessage && s().trim().length > 0 && !e.disabled, g = () => e.fileUpload && !!(e.attachInputId || e.onAttachClick), _ = () => {
33
33
  if (!e.onSendMessage) return;
34
34
  const t = s().trim();
35
35
  !t || e.disabled || (e.onSendMessage(t), i(""));
36
36
  }, k = (t) => {
37
- if (U(t, {
38
- shiftEnterNewline: e.shiftEnterNewline,
39
- ctrlEnterNewline: e.ctrlEnterNewline
40
- })) {
41
- t.currentTarget instanceof HTMLTextAreaElement && (t.preventDefault(), j(t.currentTarget, s(), i));
42
- return;
37
+ if (!(t.isComposing || t.keyCode === 229)) {
38
+ if (U(t, {
39
+ shiftEnterNewline: e.shiftEnterNewline,
40
+ ctrlEnterNewline: e.ctrlEnterNewline
41
+ })) {
42
+ t.currentTarget instanceof HTMLTextAreaElement && (t.preventDefault(), j(t.currentTarget, s(), i));
43
+ return;
44
+ }
45
+ t.key === "Enter" && (t.preventDefault(), _());
43
46
  }
44
- t.key === "Enter" && (t.preventDefault(), C());
45
47
  }, F = () => h("smwb-chat-icon-button", "smwb-chat-icon-button_edge-start", e.disabled && "smwb-chat-icon-button_disabled"), w = () => a(u, {
46
48
  get when() {
47
49
  return g();
@@ -52,7 +54,7 @@ function ne(o) {
52
54
  return e.attachInputId;
53
55
  },
54
56
  get fallback() {
55
- return a(D, {
57
+ return a(y, {
56
58
  edge: "start",
57
59
  get "aria-label"() {
58
60
  return e.attachAriaLabel;
@@ -93,7 +95,7 @@ function ne(o) {
93
95
  return e.onSendMessage;
94
96
  },
95
97
  get children() {
96
- return a(D, {
98
+ return a(y, {
97
99
  edge: "end",
98
100
  color: "primary",
99
101
  get "aria-label"() {
@@ -101,9 +103,9 @@ function ne(o) {
101
103
  },
102
104
  "data-testid": "chat-composer-send",
103
105
  get disabled() {
104
- return !y();
106
+ return !L();
105
107
  },
106
- onClick: C,
108
+ onClick: _,
107
109
  onMouseDown: E,
108
110
  get children() {
109
111
  return a(A, {
@@ -129,7 +131,7 @@ function ne(o) {
129
131
  get children() {
130
132
  return a(u, {
131
133
  get when() {
132
- return L();
134
+ return D();
133
135
  },
134
136
  get fallback() {
135
137
  return a(V, {
@@ -173,7 +175,7 @@ function ne(o) {
173
175
  get isFocused() {
174
176
  return b();
175
177
  },
176
- for: _,
178
+ for: S,
177
179
  get shrink() {
178
180
  return z(() => !!(e.attachInputId || e.onAttachClick))() && g();
179
181
  },
@@ -186,7 +188,7 @@ function ne(o) {
186
188
  },
187
189
  get children() {
188
190
  var t = O();
189
- return t.$$keydown = k, t.addEventListener("blur", () => m(!1)), t.addEventListener("focus", () => m(!0)), t.$$input = (r) => i(r.currentTarget.value), B((r) => p = r, t), c(t, "id", _), f((r) => {
191
+ return t.$$keydown = k, t.addEventListener("blur", () => m(!1)), t.addEventListener("focus", () => m(!0)), t.$$input = (r) => i(r.currentTarget.value), B((r) => p = r, t), c(t, "id", S), f((r) => {
190
192
  var n = h("smwb-text-field__input", "smwb-chat-composer__input", "smwb-text-field__input--show-placeholder", g() && "smwb-text-field__input--adornment-start", e.onSendMessage && "smwb-text-field__input--adornment-end"), l = e.disabled, d = e.placeholder;
191
193
  return n !== r.e && v(t, r.e = n), l !== r.t && (t.disabled = r.t = l), d !== r.a && c(t, "placeholder", r.a = d), r;
192
194
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"chatComposer.js","sources":["../../../../src/components/dataDisplay/chat/chatComposer.tsx"],"sourcesContent":["import { type JSX, Show, createSignal, mergeProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { TextField } from \"../../inputs/textField\";\nimport { TextFieldWrapper } from \"../../inputs/textField/textFieldWrapper\";\nimport { ChatIconButton } from \"./chatIconButton\";\nimport { createId } from \"../../../primitives/createId\";\nimport { shouldComposerNewlineOnEnter } from \"./utils\";\n\nexport interface ChatComposerProps {\n class?: string | undefined;\n onSendMessage?: ((text: string) => void | Promise<void>) | undefined;\n placeholder?: string | undefined;\n disabled?: boolean | undefined;\n sendAriaLabel?: string | undefined;\n shiftEnterNewline?: boolean | undefined;\n ctrlEnterNewline?: boolean | undefined;\n fileUpload?: boolean | undefined;\n attachInputId?: string | undefined;\n onAttachClick?: (() => void) | undefined;\n attachAriaLabel?: string | undefined;\n}\n\nfunction stopPropagation(event: Event): void {\n event.stopPropagation();\n}\n\nfunction insertNewlineAtCursor(element: HTMLTextAreaElement, value: string, setValue: (next: string) => void): void {\n const start = element.selectionStart ?? value.length;\n const end = element.selectionEnd ?? value.length;\n const nextValue = `${value.slice(0, start)}\\n${value.slice(end)}`;\n\n setValue(nextValue);\n\n requestAnimationFrame(() => {\n element.selectionStart = start + 1;\n element.selectionEnd = start + 1;\n });\n}\n\nexport function ChatComposer(props: ChatComposerProps): JSX.Element {\n const merged = mergeProps(\n {\n placeholder: \"message\",\n disabled: false,\n sendAriaLabel: \"Send message\",\n shiftEnterNewline: true,\n ctrlEnterNewline: true,\n fileUpload: false,\n attachAriaLabel: \"Attach file\",\n },\n props\n );\n\n const [value, setValue] = createSignal(\"\");\n const [isFocused, setIsFocused] = createSignal(false);\n const inputId = createId();\n let textareaRef: HTMLTextAreaElement | undefined;\n\n const multiline = (): boolean => merged.shiftEnterNewline || merged.ctrlEnterNewline;\n const canSend = (): boolean => Boolean(merged.onSendMessage) && value().trim().length > 0 && !merged.disabled;\n const showAttach = (): boolean => merged.fileUpload && Boolean(merged.attachInputId || merged.onAttachClick);\n\n const handleSend = (): void => {\n if (!merged.onSendMessage) return;\n const text = value().trim();\n if (!text || merged.disabled) return;\n void merged.onSendMessage(text);\n setValue(\"\");\n };\n\n const handleKeyDown = (event: KeyboardEvent & { currentTarget: HTMLElement }): void => {\n if (shouldComposerNewlineOnEnter(event, { shiftEnterNewline: merged.shiftEnterNewline, ctrlEnterNewline: merged.ctrlEnterNewline })) {\n if (event.currentTarget instanceof HTMLTextAreaElement) {\n event.preventDefault();\n insertNewlineAtCursor(event.currentTarget, value(), setValue);\n }\n return;\n }\n\n if (event.key !== \"Enter\") return;\n\n event.preventDefault();\n handleSend();\n };\n\n const attachClass = (): string =>\n cn(\"smwb-chat-icon-button\", \"smwb-chat-icon-button_edge-start\", merged.disabled && \"smwb-chat-icon-button_disabled\");\n\n const attachButton = (): JSX.Element => (\n <Show when={showAttach()}>\n <Show\n when={merged.attachInputId}\n fallback={\n <ChatIconButton\n edge=\"start\"\n aria-label={merged.attachAriaLabel}\n data-testid=\"chat-composer-attach\"\n disabled={merged.disabled}\n onClick={() => merged.onAttachClick?.()}\n onMouseDown={stopPropagation}\n >\n <Icon name=\"attach_file\" size={24} />\n </ChatIconButton>\n }\n >\n {(id) => (\n <label\n for={merged.disabled ? undefined : id()}\n class={attachClass()}\n aria-label={merged.attachAriaLabel}\n aria-disabled={merged.disabled || undefined}\n data-testid=\"chat-composer-attach\"\n onMouseDown={stopPropagation}\n >\n <Icon name=\"attach_file\" size={24} />\n </label>\n )}\n </Show>\n </Show>\n );\n\n const sendButton = (): JSX.Element => (\n <Show when={merged.onSendMessage}>\n <ChatIconButton\n edge=\"end\"\n color=\"primary\"\n aria-label={merged.sendAriaLabel}\n data-testid=\"chat-composer-send\"\n disabled={!canSend()}\n onClick={handleSend}\n onMouseDown={stopPropagation}\n >\n <Icon name=\"send\" size={24} />\n </ChatIconButton>\n </Show>\n );\n\n const onHolderMouseDown: JSX.EventHandler<HTMLDivElement, MouseEvent> = (event) => {\n if (textareaRef && event.currentTarget === event.target) {\n event.preventDefault();\n textareaRef.focus();\n }\n };\n\n return (\n <Show\n when={!(showAttach() && !merged.onSendMessage)}\n fallback={\n <div class={cn(\"smwb-chat-composer\", \"smwb-chat-composer_attach-only\", merged.class)} data-testid=\"chat-composer\">\n {attachButton()}\n </div>\n }\n >\n <Show\n when={multiline()}\n fallback={\n <TextField\n class={cn(\"smwb-chat-composer\", merged.class)}\n data-testid=\"chat-composer\"\n fullWidth\n value={value()}\n disabled={merged.disabled}\n placeholder={merged.placeholder}\n onChange={(event) => setValue(event.currentTarget.value)}\n startAdornment={attachButton()}\n endAdornment={sendButton()}\n onKeyDown={handleKeyDown}\n />\n }\n >\n <TextFieldWrapper\n class={cn(\"smwb-chat-composer\", merged.class)}\n data-testid=\"chat-composer\"\n fullWidth\n disabled={merged.disabled}\n isFilledState={value().length > 0}\n isFocused={isFocused()}\n for={inputId}\n shrink={Boolean(merged.attachInputId || merged.onAttachClick) && showAttach()}\n onHolderMouseDown={onHolderMouseDown}\n startAdornment={attachButton()}\n endAdornment={sendButton()}\n >\n <textarea\n id={inputId}\n ref={(el) => (textareaRef = el)}\n class={cn(\n \"smwb-text-field__input\",\n \"smwb-chat-composer__input\",\n \"smwb-text-field__input--show-placeholder\",\n showAttach() && \"smwb-text-field__input--adornment-start\",\n merged.onSendMessage && \"smwb-text-field__input--adornment-end\"\n )}\n value={value()}\n disabled={merged.disabled}\n placeholder={merged.placeholder}\n rows={1}\n onInput={(event) => setValue(event.currentTarget.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n />\n </TextFieldWrapper>\n </Show>\n </Show>\n );\n}\n\nexport default ChatComposer;\n"],"names":["stopPropagation","event","insertNewlineAtCursor","element","value","setValue","start","selectionStart","length","end","selectionEnd","nextValue","slice","requestAnimationFrame","ChatComposer","props","merged","mergeProps","placeholder","disabled","sendAriaLabel","shiftEnterNewline","ctrlEnterNewline","fileUpload","attachAriaLabel","createSignal","isFocused","setIsFocused","inputId","createId","textareaRef","multiline","canSend","Boolean","onSendMessage","trim","showAttach","attachInputId","onAttachClick","handleSend","text","handleKeyDown","shouldComposerNewlineOnEnter","currentTarget","HTMLTextAreaElement","preventDefault","key","attachClass","cn","attachButton","_$createComponent","Show","when","children","fallback","ChatIconButton","edge","onClick","onMouseDown","Icon","name","size","id","_el$","_tmpl$","$$mousedown","_$insert","_$effect","_p$","_v$","undefined","_v$2","_v$3","_v$4","e","_$setAttribute","t","_$className","a","o","sendButton","color","onHolderMouseDown","target","focus","_el$3","_tmpl$3","class","TextField","fullWidth","onChange","startAdornment","endAdornment","onKeyDown","TextFieldWrapper","isFilledState","shrink","_$memo","_el$2","_tmpl$2","$$keydown","addEventListener","$$input","_$use","el","_v$5","_v$6","_v$7","_$delegateEvents"],"mappings":"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"}
1
+ {"version":3,"file":"chatComposer.js","sources":["../../../../src/components/dataDisplay/chat/chatComposer.tsx"],"sourcesContent":["import { type JSX, Show, createSignal, mergeProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { TextField } from \"../../inputs/textField\";\nimport { TextFieldWrapper } from \"../../inputs/textField/textFieldWrapper\";\nimport { ChatIconButton } from \"./chatIconButton\";\nimport { createId } from \"../../../primitives/createId\";\nimport { shouldComposerNewlineOnEnter } from \"./utils\";\n\n/**\n * Deprecated: the props of the old chat input. Use `ComposerProps` — `Chat` now draws a `Composer` as its footer,\n * and the standalone `Composer` replaces these props (`onSendMessage` → `onSend`, `sendAriaLabel` → `sendLabel`,\n * `attachAriaLabel` → `attachLabel`, `fileUpload` + `attachInputId`/`onAttachClick` → `onAttach`,\n * `shiftEnterNewline` → `sendKey=\"enter\"`; `ctrlEnterNewline` has no equivalent — Ctrl/⌘+Enter always sends).\n * Removed in the next major.\n *\n * @deprecated Use `Composer` (`ComposerProps`); see the README section \"Migrating from ChatComposer\".\n */\nexport interface ChatComposerProps {\n class?: string | undefined;\n onSendMessage?: ((text: string) => void | Promise<void>) | undefined;\n placeholder?: string | undefined;\n disabled?: boolean | undefined;\n sendAriaLabel?: string | undefined;\n shiftEnterNewline?: boolean | undefined;\n ctrlEnterNewline?: boolean | undefined;\n fileUpload?: boolean | undefined;\n attachInputId?: string | undefined;\n onAttachClick?: (() => void) | undefined;\n attachAriaLabel?: string | undefined;\n}\n\nfunction stopPropagation(event: Event): void {\n event.stopPropagation();\n}\n\nfunction insertNewlineAtCursor(element: HTMLTextAreaElement, value: string, setValue: (next: string) => void): void {\n const start = element.selectionStart ?? value.length;\n const end = element.selectionEnd ?? value.length;\n const nextValue = `${value.slice(0, start)}\\n${value.slice(end)}`;\n\n setValue(nextValue);\n\n requestAnimationFrame(() => {\n element.selectionStart = start + 1;\n element.selectionEnd = start + 1;\n });\n}\n\n/**\n * Deprecated: the old chat input — Enter sends, a TextField-based DOM and the `chat-composer*` test ids.\n * `Chat` draws a `Composer` as its footer now, and the standalone `Composer` replaces this component\n * (`onSendMessage` → `onSend`, Enter-to-send → `sendKey=\"enter\"`). Kept for the migration and removed in the\n * next major; to keep this markup inside a Chat while migrating, pass `legacyComposer` to `Chat`.\n *\n * @deprecated Use `Composer`; see the README section \"Migrating from ChatComposer\".\n */\nexport function ChatComposer(props: ChatComposerProps): JSX.Element {\n const merged = mergeProps(\n {\n placeholder: \"message\",\n disabled: false,\n sendAriaLabel: \"Send message\",\n shiftEnterNewline: true,\n ctrlEnterNewline: true,\n fileUpload: false,\n attachAriaLabel: \"Attach file\",\n },\n props\n );\n\n const [value, setValue] = createSignal(\"\");\n const [isFocused, setIsFocused] = createSignal(false);\n const inputId = createId();\n let textareaRef: HTMLTextAreaElement | undefined;\n\n const multiline = (): boolean => merged.shiftEnterNewline || merged.ctrlEnterNewline;\n const canSend = (): boolean => Boolean(merged.onSendMessage) && value().trim().length > 0 && !merged.disabled;\n const showAttach = (): boolean => merged.fileUpload && Boolean(merged.attachInputId || merged.onAttachClick);\n\n const handleSend = (): void => {\n if (!merged.onSendMessage) return;\n const text = value().trim();\n if (!text || merged.disabled) return;\n void merged.onSendMessage(text);\n setValue(\"\");\n };\n\n const handleKeyDown = (event: KeyboardEvent & { currentTarget: HTMLElement }): void => {\n // Enter that commits or cancels an IME composition belongs to the IME, not to the composer.\n if (event.isComposing || event.keyCode === 229) return;\n\n if (shouldComposerNewlineOnEnter(event, { shiftEnterNewline: merged.shiftEnterNewline, ctrlEnterNewline: merged.ctrlEnterNewline })) {\n if (event.currentTarget instanceof HTMLTextAreaElement) {\n event.preventDefault();\n insertNewlineAtCursor(event.currentTarget, value(), setValue);\n }\n return;\n }\n\n if (event.key !== \"Enter\") return;\n\n event.preventDefault();\n handleSend();\n };\n\n const attachClass = (): string =>\n cn(\"smwb-chat-icon-button\", \"smwb-chat-icon-button_edge-start\", merged.disabled && \"smwb-chat-icon-button_disabled\");\n\n const attachButton = (): JSX.Element => (\n <Show when={showAttach()}>\n <Show\n when={merged.attachInputId}\n fallback={\n <ChatIconButton\n edge=\"start\"\n aria-label={merged.attachAriaLabel}\n data-testid=\"chat-composer-attach\"\n disabled={merged.disabled}\n onClick={() => merged.onAttachClick?.()}\n onMouseDown={stopPropagation}\n >\n <Icon name=\"attach_file\" size={24} />\n </ChatIconButton>\n }\n >\n {(id) => (\n <label\n for={merged.disabled ? undefined : id()}\n class={attachClass()}\n aria-label={merged.attachAriaLabel}\n aria-disabled={merged.disabled || undefined}\n data-testid=\"chat-composer-attach\"\n onMouseDown={stopPropagation}\n >\n <Icon name=\"attach_file\" size={24} />\n </label>\n )}\n </Show>\n </Show>\n );\n\n const sendButton = (): JSX.Element => (\n <Show when={merged.onSendMessage}>\n <ChatIconButton\n edge=\"end\"\n color=\"primary\"\n aria-label={merged.sendAriaLabel}\n data-testid=\"chat-composer-send\"\n disabled={!canSend()}\n onClick={handleSend}\n onMouseDown={stopPropagation}\n >\n <Icon name=\"send\" size={24} />\n </ChatIconButton>\n </Show>\n );\n\n const onHolderMouseDown: JSX.EventHandler<HTMLDivElement, MouseEvent> = (event) => {\n if (textareaRef && event.currentTarget === event.target) {\n event.preventDefault();\n textareaRef.focus();\n }\n };\n\n return (\n <Show\n when={!(showAttach() && !merged.onSendMessage)}\n fallback={\n <div class={cn(\"smwb-chat-composer\", \"smwb-chat-composer_attach-only\", merged.class)} data-testid=\"chat-composer\">\n {attachButton()}\n </div>\n }\n >\n <Show\n when={multiline()}\n fallback={\n <TextField\n class={cn(\"smwb-chat-composer\", merged.class)}\n data-testid=\"chat-composer\"\n fullWidth\n value={value()}\n disabled={merged.disabled}\n placeholder={merged.placeholder}\n onChange={(event) => setValue(event.currentTarget.value)}\n startAdornment={attachButton()}\n endAdornment={sendButton()}\n onKeyDown={handleKeyDown}\n />\n }\n >\n <TextFieldWrapper\n class={cn(\"smwb-chat-composer\", merged.class)}\n data-testid=\"chat-composer\"\n fullWidth\n disabled={merged.disabled}\n isFilledState={value().length > 0}\n isFocused={isFocused()}\n for={inputId}\n shrink={Boolean(merged.attachInputId || merged.onAttachClick) && showAttach()}\n onHolderMouseDown={onHolderMouseDown}\n startAdornment={attachButton()}\n endAdornment={sendButton()}\n >\n <textarea\n id={inputId}\n ref={(el) => (textareaRef = el)}\n class={cn(\n \"smwb-text-field__input\",\n \"smwb-chat-composer__input\",\n \"smwb-text-field__input--show-placeholder\",\n showAttach() && \"smwb-text-field__input--adornment-start\",\n merged.onSendMessage && \"smwb-text-field__input--adornment-end\"\n )}\n value={value()}\n disabled={merged.disabled}\n placeholder={merged.placeholder}\n rows={1}\n onInput={(event) => setValue(event.currentTarget.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n />\n </TextFieldWrapper>\n </Show>\n </Show>\n );\n}\n\nexport default ChatComposer;\n"],"names":["stopPropagation","event","insertNewlineAtCursor","element","value","setValue","start","selectionStart","length","end","selectionEnd","nextValue","slice","requestAnimationFrame","ChatComposer","props","merged","mergeProps","placeholder","disabled","sendAriaLabel","shiftEnterNewline","ctrlEnterNewline","fileUpload","attachAriaLabel","createSignal","isFocused","setIsFocused","inputId","createId","textareaRef","multiline","canSend","Boolean","onSendMessage","trim","showAttach","attachInputId","onAttachClick","handleSend","text","handleKeyDown","isComposing","keyCode","shouldComposerNewlineOnEnter","currentTarget","HTMLTextAreaElement","preventDefault","key","attachClass","cn","attachButton","_$createComponent","Show","when","children","fallback","ChatIconButton","edge","onClick","onMouseDown","Icon","name","size","id","_el$","_tmpl$","$$mousedown","_$insert","_$effect","_p$","_v$","undefined","_v$2","_v$3","_v$4","e","_$setAttribute","t","_$className","a","o","sendButton","color","onHolderMouseDown","target","focus","_el$3","_tmpl$3","class","TextField","fullWidth","onChange","startAdornment","endAdornment","onKeyDown","TextFieldWrapper","isFilledState","shrink","_$memo","_el$2","_tmpl$2","$$keydown","addEventListener","$$input","_$use","el","_v$5","_v$6","_v$7","_$delegateEvents"],"mappings":"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"}
@@ -3,7 +3,7 @@ export type { ChatLayoutProps, ChatLayoutChatProps } from "./chatLayout";
3
3
  export { ChatOverlayLayout } from "./chatOverlayLayout";
4
4
  export type { ChatOverlayLayoutProps, ChatOverlayLayoutChatProps } from "./chatOverlayLayout";
5
5
  export { Chat, default } from "./chat";
6
- export type { ChatProps } from "./chat";
6
+ export type { ChatProps, ChatFooterComposerProps } from "./chat";
7
7
  export { ChatShell } from "./chatShell";
8
8
  export type { ChatShellProps } from "./chatShell";
9
9
  export { ChatHeader } from "./chatHeader";
@@ -14,10 +14,24 @@ export declare function shouldShowChatCloseButton(options: {
14
14
  effectiveLayout?: ChatLayoutMode | undefined;
15
15
  showCloseButton?: boolean | undefined;
16
16
  }): boolean;
17
+ /**
18
+ * Deprecated: the newline flags of the old `ChatComposer`. `Composer` picks the send key with `sendKey` instead
19
+ * (`"enter"` = Enter sends, Shift+Enter makes a newline; `"modEnter"` = Ctrl/⌘+Enter sends). Removed with
20
+ * `ChatComposer` in the next major.
21
+ *
22
+ * @deprecated Use `Composer`'s `sendKey`; see the README section "Migrating from ChatComposer".
23
+ */
17
24
  export interface ChatComposerNewlineOptions {
18
25
  shiftEnterNewline?: boolean;
19
26
  ctrlEnterNewline?: boolean;
20
27
  }
28
+ /**
29
+ * Deprecated: the key rule of the old `ChatComposer` (which Enter sends, which makes a newline).
30
+ * `Composer` resolves the same choice through `sendKey` in `resolveComposerKeyAction`, and `Chat` draws a `Composer`
31
+ * by default. Kept for `ChatComposer` and `legacyComposer` only; removed in the next major.
32
+ *
33
+ * @deprecated Use `Composer`'s `sendKey`; see the README section "Migrating from ChatComposer".
34
+ */
21
35
  export declare function shouldComposerNewlineOnEnter(event: {
22
36
  key: string;
23
37
  shiftKey: boolean;