@ada-cx/lovelace 1.0.0-setup.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 (451) hide show
  1. package/README.md +113 -0
  2. package/dist/components/AgentMessage/AgentMessage.css.d.ts +2 -0
  3. package/dist/components/AgentMessage/AgentMessage.css.js +7 -0
  4. package/dist/components/AgentMessage/AgentMessage.css.js.map +1 -0
  5. package/dist/components/AgentMessage/AgentMessage.d.ts +21 -0
  6. package/dist/components/AgentMessage/AgentMessage.js +24 -0
  7. package/dist/components/AgentMessage/AgentMessage.js.map +1 -0
  8. package/dist/components/AgentMessage/index.d.ts +2 -0
  9. package/dist/components/Avatar/Avatar.css.d.ts +48 -0
  10. package/dist/components/Avatar/Avatar.css.js +28 -0
  11. package/dist/components/Avatar/Avatar.css.js.map +1 -0
  12. package/dist/components/Avatar/Avatar.d.ts +35 -0
  13. package/dist/components/Avatar/Avatar.js +26 -0
  14. package/dist/components/Avatar/Avatar.js.map +1 -0
  15. package/dist/components/Avatar/AvatarPlaceholder.d.ts +14 -0
  16. package/dist/components/Avatar/AvatarPlaceholder.js +18 -0
  17. package/dist/components/Avatar/AvatarPlaceholder.js.map +1 -0
  18. package/dist/components/Avatar/index.d.ts +4 -0
  19. package/dist/components/BubbleOverlay/BubbleOverlay.css.d.ts +3 -0
  20. package/dist/components/BubbleOverlay/BubbleOverlay.css.js +8 -0
  21. package/dist/components/BubbleOverlay/BubbleOverlay.css.js.map +1 -0
  22. package/dist/components/BubbleOverlay/BubbleOverlay.d.ts +24 -0
  23. package/dist/components/BubbleOverlay/BubbleOverlay.js +28 -0
  24. package/dist/components/BubbleOverlay/BubbleOverlay.js.map +1 -0
  25. package/dist/components/BubbleOverlay/index.d.ts +1 -0
  26. package/dist/components/Button/Button.css.d.ts +48 -0
  27. package/dist/components/Button/Button.css.js +29 -0
  28. package/dist/components/Button/Button.css.js.map +1 -0
  29. package/dist/components/Button/Button.d.ts +14 -0
  30. package/dist/components/Button/Button.js +24 -0
  31. package/dist/components/Button/Button.js.map +1 -0
  32. package/dist/components/Button/index.d.ts +2 -0
  33. package/dist/components/Checkbox/Checkbox.css.d.ts +19 -0
  34. package/dist/components/Checkbox/Checkbox.css.js +7 -0
  35. package/dist/components/Checkbox/Checkbox.css.js.map +1 -0
  36. package/dist/components/Checkbox/Checkbox.d.ts +22 -0
  37. package/dist/components/Checkbox/Checkbox.js +42 -0
  38. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  39. package/dist/components/Checkbox/index.d.ts +1 -0
  40. package/dist/components/Chip/Chip.css.d.ts +19 -0
  41. package/dist/components/Chip/Chip.css.js +51 -0
  42. package/dist/components/Chip/Chip.css.js.map +1 -0
  43. package/dist/components/Chip/Chip.d.ts +23 -0
  44. package/dist/components/Chip/Chip.js +21 -0
  45. package/dist/components/Chip/Chip.js.map +1 -0
  46. package/dist/components/Chip/index.d.ts +2 -0
  47. package/dist/components/Dialog/Dialog.css.d.ts +15 -0
  48. package/dist/components/Dialog/Dialog.css.js +16 -0
  49. package/dist/components/Dialog/Dialog.css.js.map +1 -0
  50. package/dist/components/Dialog/Dialog.d.ts +15 -0
  51. package/dist/components/Dialog/Dialog.js +18 -0
  52. package/dist/components/Dialog/Dialog.js.map +1 -0
  53. package/dist/components/Dialog/DialogActions.d.ts +8 -0
  54. package/dist/components/Dialog/DialogActions.js +14 -0
  55. package/dist/components/Dialog/DialogActions.js.map +1 -0
  56. package/dist/components/Dialog/DialogBody.d.ts +7 -0
  57. package/dist/components/Dialog/DialogBody.js +14 -0
  58. package/dist/components/Dialog/DialogBody.js.map +1 -0
  59. package/dist/components/Dialog/DialogContent.d.ts +8 -0
  60. package/dist/components/Dialog/DialogContent.js +14 -0
  61. package/dist/components/Dialog/DialogContent.js.map +1 -0
  62. package/dist/components/Dialog/DialogIcon.d.ts +11 -0
  63. package/dist/components/Dialog/DialogIcon.js +18 -0
  64. package/dist/components/Dialog/DialogIcon.js.map +1 -0
  65. package/dist/components/Dialog/DialogRoot.d.ts +15 -0
  66. package/dist/components/Dialog/DialogRoot.js +14 -0
  67. package/dist/components/Dialog/DialogRoot.js.map +1 -0
  68. package/dist/components/Dialog/DialogTitle.d.ts +7 -0
  69. package/dist/components/Dialog/DialogTitle.js +16 -0
  70. package/dist/components/Dialog/DialogTitle.js.map +1 -0
  71. package/dist/components/Dialog/index.d.ts +6 -0
  72. package/dist/components/DialogOverlay/DialogOverlay.css.d.ts +3 -0
  73. package/dist/components/DialogOverlay/DialogOverlay.css.js +8 -0
  74. package/dist/components/DialogOverlay/DialogOverlay.css.js.map +1 -0
  75. package/dist/components/DialogOverlay/DialogOverlay.d.ts +30 -0
  76. package/dist/components/DialogOverlay/DialogOverlay.js +29 -0
  77. package/dist/components/DialogOverlay/DialogOverlay.js.map +1 -0
  78. package/dist/components/DialogOverlay/index.d.ts +1 -0
  79. package/dist/components/Divider/Divider.css.d.ts +27 -0
  80. package/dist/components/Divider/Divider.css.js +17 -0
  81. package/dist/components/Divider/Divider.css.js.map +1 -0
  82. package/dist/components/Divider/Divider.d.ts +27 -0
  83. package/dist/components/Divider/Divider.js +35 -0
  84. package/dist/components/Divider/Divider.js.map +1 -0
  85. package/dist/components/Divider/index.d.ts +1 -0
  86. package/dist/components/FullscreenOverlay/FullscreenOverlay.css.d.ts +3 -0
  87. package/dist/components/FullscreenOverlay/FullscreenOverlay.css.js +8 -0
  88. package/dist/components/FullscreenOverlay/FullscreenOverlay.css.js.map +1 -0
  89. package/dist/components/FullscreenOverlay/FullscreenOverlay.d.ts +22 -0
  90. package/dist/components/FullscreenOverlay/FullscreenOverlay.js +28 -0
  91. package/dist/components/FullscreenOverlay/FullscreenOverlay.js.map +1 -0
  92. package/dist/components/FullscreenOverlay/index.d.ts +1 -0
  93. package/dist/components/Header/Header.css.d.ts +2 -0
  94. package/dist/components/Header/Header.css.js +7 -0
  95. package/dist/components/Header/Header.css.js.map +1 -0
  96. package/dist/components/Header/Header.d.ts +6 -0
  97. package/dist/components/Header/Header.js +8 -0
  98. package/dist/components/Header/Header.js.map +1 -0
  99. package/dist/components/Header/HeaderRoot.d.ts +11 -0
  100. package/dist/components/Header/HeaderRoot.js +16 -0
  101. package/dist/components/Header/HeaderRoot.js.map +1 -0
  102. package/dist/components/Header/HeaderTitle.d.ts +10 -0
  103. package/dist/components/Header/HeaderTitle.js +16 -0
  104. package/dist/components/Header/HeaderTitle.js.map +1 -0
  105. package/dist/components/Header/index.d.ts +2 -0
  106. package/dist/components/Icon/Icon.css.d.ts +1 -0
  107. package/dist/components/Icon/Icon.css.js +7 -0
  108. package/dist/components/Icon/Icon.css.js.map +1 -0
  109. package/dist/components/Icon/Icon.d.ts +7 -0
  110. package/dist/components/Icon/Icon.js +22 -0
  111. package/dist/components/Icon/Icon.js.map +1 -0
  112. package/dist/components/Icon/icons/AdaLogo.css.d.ts +1 -0
  113. package/dist/components/Icon/icons/AdaLogo.css.js +7 -0
  114. package/dist/components/Icon/icons/AdaLogo.css.js.map +1 -0
  115. package/dist/components/Icon/icons/AdaLogo.d.ts +6 -0
  116. package/dist/components/Icon/icons/AdaLogo.js +27 -0
  117. package/dist/components/Icon/icons/AdaLogo.js.map +1 -0
  118. package/dist/components/Icon/icons/ArrowDown.d.ts +2 -0
  119. package/dist/components/Icon/icons/ArrowDown.js +17 -0
  120. package/dist/components/Icon/icons/ArrowDown.js.map +1 -0
  121. package/dist/components/Icon/icons/ArrowLeft.d.ts +8 -0
  122. package/dist/components/Icon/icons/ArrowLeft.js +18 -0
  123. package/dist/components/Icon/icons/ArrowLeft.js.map +1 -0
  124. package/dist/components/Icon/icons/ArrowNortheast.d.ts +2 -0
  125. package/dist/components/Icon/icons/ArrowNortheast.js +14 -0
  126. package/dist/components/Icon/icons/ArrowNortheast.js.map +1 -0
  127. package/dist/components/Icon/icons/ArrowNorthwest.d.ts +2 -0
  128. package/dist/components/Icon/icons/ArrowNorthwest.js +14 -0
  129. package/dist/components/Icon/icons/ArrowNorthwest.js.map +1 -0
  130. package/dist/components/Icon/icons/ArrowRight.d.ts +8 -0
  131. package/dist/components/Icon/icons/ArrowRight.js +18 -0
  132. package/dist/components/Icon/icons/ArrowRight.js.map +1 -0
  133. package/dist/components/Icon/icons/Bell.d.ts +2 -0
  134. package/dist/components/Icon/icons/Bell.js +14 -0
  135. package/dist/components/Icon/icons/Bell.js.map +1 -0
  136. package/dist/components/Icon/icons/BellSlash.d.ts +2 -0
  137. package/dist/components/Icon/icons/BellSlash.js +14 -0
  138. package/dist/components/Icon/icons/BellSlash.js.map +1 -0
  139. package/dist/components/Icon/icons/Checkmark.d.ts +2 -0
  140. package/dist/components/Icon/icons/Checkmark.js +14 -0
  141. package/dist/components/Icon/icons/Checkmark.js.map +1 -0
  142. package/dist/components/Icon/icons/ChevronLeft.d.ts +2 -0
  143. package/dist/components/Icon/icons/ChevronLeft.js +14 -0
  144. package/dist/components/Icon/icons/ChevronLeft.js.map +1 -0
  145. package/dist/components/Icon/icons/ChevronRight.d.ts +2 -0
  146. package/dist/components/Icon/icons/ChevronRight.js +14 -0
  147. package/dist/components/Icon/icons/ChevronRight.js.map +1 -0
  148. package/dist/components/Icon/icons/CloudUpload.d.ts +2 -0
  149. package/dist/components/Icon/icons/CloudUpload.js +14 -0
  150. package/dist/components/Icon/icons/CloudUpload.js.map +1 -0
  151. package/dist/components/Icon/icons/Download.d.ts +2 -0
  152. package/dist/components/Icon/icons/Download.js +14 -0
  153. package/dist/components/Icon/icons/Download.js.map +1 -0
  154. package/dist/components/Icon/icons/Ellipses.d.ts +2 -0
  155. package/dist/components/Icon/icons/Ellipses.js +14 -0
  156. package/dist/components/Icon/icons/Ellipses.js.map +1 -0
  157. package/dist/components/Icon/icons/Email.d.ts +2 -0
  158. package/dist/components/Icon/icons/Email.js +14 -0
  159. package/dist/components/Icon/icons/Email.js.map +1 -0
  160. package/dist/components/Icon/icons/ExclamationSync.d.ts +2 -0
  161. package/dist/components/Icon/icons/ExclamationSync.js +14 -0
  162. package/dist/components/Icon/icons/ExclamationSync.js.map +1 -0
  163. package/dist/components/Icon/icons/ExclamationTriangle.d.ts +2 -0
  164. package/dist/components/Icon/icons/ExclamationTriangle.js +18 -0
  165. package/dist/components/Icon/icons/ExclamationTriangle.js.map +1 -0
  166. package/dist/components/Icon/icons/Eye.d.ts +2 -0
  167. package/dist/components/Icon/icons/Eye.js +14 -0
  168. package/dist/components/Icon/icons/Eye.js.map +1 -0
  169. package/dist/components/Icon/icons/EyeSlash.d.ts +2 -0
  170. package/dist/components/Icon/icons/EyeSlash.js +14 -0
  171. package/dist/components/Icon/icons/EyeSlash.js.map +1 -0
  172. package/dist/components/Icon/icons/Glyph.d.ts +16 -0
  173. package/dist/components/Icon/icons/Glyph.js +24 -0
  174. package/dist/components/Icon/icons/Glyph.js.map +1 -0
  175. package/dist/components/Icon/icons/Language.d.ts +2 -0
  176. package/dist/components/Icon/icons/Language.js +14 -0
  177. package/dist/components/Icon/icons/Language.js.map +1 -0
  178. package/dist/components/Icon/icons/MediaSlash.d.ts +2 -0
  179. package/dist/components/Icon/icons/MediaSlash.js +14 -0
  180. package/dist/components/Icon/icons/MediaSlash.js.map +1 -0
  181. package/dist/components/Icon/icons/MessagingFill.d.ts +2 -0
  182. package/dist/components/Icon/icons/MessagingFill.js +18 -0
  183. package/dist/components/Icon/icons/MessagingFill.js.map +1 -0
  184. package/dist/components/Icon/icons/Minimize.d.ts +2 -0
  185. package/dist/components/Icon/icons/Minimize.js +14 -0
  186. package/dist/components/Icon/icons/Minimize.js.map +1 -0
  187. package/dist/components/Icon/icons/Mute.d.ts +2 -0
  188. package/dist/components/Icon/icons/Mute.js +14 -0
  189. package/dist/components/Icon/icons/Mute.js.map +1 -0
  190. package/dist/components/Icon/icons/Paperclip.d.ts +2 -0
  191. package/dist/components/Icon/icons/Paperclip.js +14 -0
  192. package/dist/components/Icon/icons/Paperclip.js.map +1 -0
  193. package/dist/components/Icon/icons/PersonFill.d.ts +2 -0
  194. package/dist/components/Icon/icons/PersonFill.js +14 -0
  195. package/dist/components/Icon/icons/PersonFill.js.map +1 -0
  196. package/dist/components/Icon/icons/PlayFill.d.ts +2 -0
  197. package/dist/components/Icon/icons/PlayFill.js +14 -0
  198. package/dist/components/Icon/icons/PlayFill.js.map +1 -0
  199. package/dist/components/Icon/icons/SendFill.d.ts +2 -0
  200. package/dist/components/Icon/icons/SendFill.js +14 -0
  201. package/dist/components/Icon/icons/SendFill.js.map +1 -0
  202. package/dist/components/Icon/icons/StarBadgeFill.d.ts +2 -0
  203. package/dist/components/Icon/icons/StarBadgeFill.js +18 -0
  204. package/dist/components/Icon/icons/StarBadgeFill.js.map +1 -0
  205. package/dist/components/Icon/icons/ThumbsDown.d.ts +2 -0
  206. package/dist/components/Icon/icons/ThumbsDown.js +14 -0
  207. package/dist/components/Icon/icons/ThumbsDown.js.map +1 -0
  208. package/dist/components/Icon/icons/ThumbsUp.d.ts +2 -0
  209. package/dist/components/Icon/icons/ThumbsUp.js +14 -0
  210. package/dist/components/Icon/icons/ThumbsUp.js.map +1 -0
  211. package/dist/components/Icon/icons/Volume.d.ts +2 -0
  212. package/dist/components/Icon/icons/Volume.js +14 -0
  213. package/dist/components/Icon/icons/Volume.js.map +1 -0
  214. package/dist/components/Icon/icons/Xmark.d.ts +2 -0
  215. package/dist/components/Icon/icons/Xmark.js +14 -0
  216. package/dist/components/Icon/icons/Xmark.js.map +1 -0
  217. package/dist/components/Icon/icons/XmarkCircle.d.ts +2 -0
  218. package/dist/components/Icon/icons/XmarkCircle.js +14 -0
  219. package/dist/components/Icon/icons/XmarkCircle.js.map +1 -0
  220. package/dist/components/Icon/icons/index.d.ts +34 -0
  221. package/dist/components/Icon/index.d.ts +3 -0
  222. package/dist/components/IconButton/IconButton.css.d.ts +54 -0
  223. package/dist/components/IconButton/IconButton.css.js +30 -0
  224. package/dist/components/IconButton/IconButton.css.js.map +1 -0
  225. package/dist/components/IconButton/IconButton.d.ts +18 -0
  226. package/dist/components/IconButton/IconButton.js +25 -0
  227. package/dist/components/IconButton/IconButton.js.map +1 -0
  228. package/dist/components/IconButton/index.d.ts +2 -0
  229. package/dist/components/Image/Image.css.d.ts +1 -0
  230. package/dist/components/Image/Image.css.js +7 -0
  231. package/dist/components/Image/Image.css.js.map +1 -0
  232. package/dist/components/Image/Image.d.ts +16 -0
  233. package/dist/components/Image/Image.js +44 -0
  234. package/dist/components/Image/Image.js.map +1 -0
  235. package/dist/components/Image/index.d.ts +2 -0
  236. package/dist/components/Input/Input.context.d.ts +12 -0
  237. package/dist/components/Input/Input.context.js +11 -0
  238. package/dist/components/Input/Input.context.js.map +1 -0
  239. package/dist/components/Input/Input.css.d.ts +11 -0
  240. package/dist/components/Input/Input.css.js +16 -0
  241. package/dist/components/Input/Input.css.js.map +1 -0
  242. package/dist/components/Input/Input.d.ts +22 -0
  243. package/dist/components/Input/Input.js +20 -0
  244. package/dist/components/Input/Input.js.map +1 -0
  245. package/dist/components/Input/InputButton.d.ts +12 -0
  246. package/dist/components/Input/InputButton.js +21 -0
  247. package/dist/components/Input/InputButton.js.map +1 -0
  248. package/dist/components/Input/InputControl.d.ts +8 -0
  249. package/dist/components/Input/InputControl.js +15 -0
  250. package/dist/components/Input/InputControl.js.map +1 -0
  251. package/dist/components/Input/InputField.d.ts +9 -0
  252. package/dist/components/Input/InputField.js +23 -0
  253. package/dist/components/Input/InputField.js.map +1 -0
  254. package/dist/components/Input/InputHelperText.d.ts +8 -0
  255. package/dist/components/Input/InputHelperText.js +20 -0
  256. package/dist/components/Input/InputHelperText.js.map +1 -0
  257. package/dist/components/Input/InputLabel.d.ts +8 -0
  258. package/dist/components/Input/InputLabel.js +16 -0
  259. package/dist/components/Input/InputLabel.js.map +1 -0
  260. package/dist/components/Input/InputRoot.d.ts +11 -0
  261. package/dist/components/Input/InputRoot.js +30 -0
  262. package/dist/components/Input/InputRoot.js.map +1 -0
  263. package/dist/components/Input/InputTextArea.d.ts +15 -0
  264. package/dist/components/Input/InputTextArea.js +39 -0
  265. package/dist/components/Input/InputTextArea.js.map +1 -0
  266. package/dist/components/Input/index.d.ts +2 -0
  267. package/dist/components/Link/Link.css.d.ts +8 -0
  268. package/dist/components/Link/Link.css.js +16 -0
  269. package/dist/components/Link/Link.css.js.map +1 -0
  270. package/dist/components/Link/Link.d.ts +12 -0
  271. package/dist/components/Link/Link.js +24 -0
  272. package/dist/components/Link/Link.js.map +1 -0
  273. package/dist/components/Link/index.d.ts +2 -0
  274. package/dist/components/MenuItem/Menu.d.ts +14 -0
  275. package/dist/components/MenuItem/Menu.js +15 -0
  276. package/dist/components/MenuItem/Menu.js.map +1 -0
  277. package/dist/components/MenuItem/MenuItem.css.d.ts +4 -0
  278. package/dist/components/MenuItem/MenuItem.css.js +7 -0
  279. package/dist/components/MenuItem/MenuItem.css.js.map +1 -0
  280. package/dist/components/MenuItem/MenuItem.d.ts +10 -0
  281. package/dist/components/MenuItem/MenuItem.js +12 -0
  282. package/dist/components/MenuItem/MenuItem.js.map +1 -0
  283. package/dist/components/MenuItem/MenuItemLeading.d.ts +11 -0
  284. package/dist/components/MenuItem/MenuItemLeading.js +17 -0
  285. package/dist/components/MenuItem/MenuItemLeading.js.map +1 -0
  286. package/dist/components/MenuItem/MenuItemRoot.d.ts +18 -0
  287. package/dist/components/MenuItem/MenuItemRoot.js +15 -0
  288. package/dist/components/MenuItem/MenuItemRoot.js.map +1 -0
  289. package/dist/components/MenuItem/MenuItemTrailing.d.ts +14 -0
  290. package/dist/components/MenuItem/MenuItemTrailing.js +17 -0
  291. package/dist/components/MenuItem/MenuItemTrailing.js.map +1 -0
  292. package/dist/components/MenuItem/index.d.ts +4 -0
  293. package/dist/components/Overlay/overlay.css.d.ts +2 -0
  294. package/dist/components/PictureMessage/PictureMessage.css.d.ts +27 -0
  295. package/dist/components/PictureMessage/PictureMessage.css.js +25 -0
  296. package/dist/components/PictureMessage/PictureMessage.css.js.map +1 -0
  297. package/dist/components/PictureMessage/PictureMessage.d.ts +37 -0
  298. package/dist/components/PictureMessage/PictureMessage.js +34 -0
  299. package/dist/components/PictureMessage/PictureMessage.js.map +1 -0
  300. package/dist/components/PictureMessage/index.d.ts +1 -0
  301. package/dist/components/PillButton/PillButton.css.d.ts +10 -0
  302. package/dist/components/PillButton/PillButton.css.js +16 -0
  303. package/dist/components/PillButton/PillButton.css.js.map +1 -0
  304. package/dist/components/PillButton/PillButton.d.ts +16 -0
  305. package/dist/components/PillButton/PillButton.js +18 -0
  306. package/dist/components/PillButton/PillButton.js.map +1 -0
  307. package/dist/components/PillButton/index.d.ts +2 -0
  308. package/dist/components/ProactiveMessage/ProactiveMessage.css.d.ts +1 -0
  309. package/dist/components/ProactiveMessage/ProactiveMessage.css.js +7 -0
  310. package/dist/components/ProactiveMessage/ProactiveMessage.css.js.map +1 -0
  311. package/dist/components/ProactiveMessage/ProactiveMessage.d.ts +19 -0
  312. package/dist/components/ProactiveMessage/ProactiveMessage.js +16 -0
  313. package/dist/components/ProactiveMessage/ProactiveMessage.js.map +1 -0
  314. package/dist/components/ProactiveMessage/index.d.ts +2 -0
  315. package/dist/components/Radio/Radio.css.d.ts +5 -0
  316. package/dist/components/Radio/Radio.css.js +7 -0
  317. package/dist/components/Radio/Radio.css.js.map +1 -0
  318. package/dist/components/Radio/Radio.d.ts +15 -0
  319. package/dist/components/Radio/Radio.js +23 -0
  320. package/dist/components/Radio/Radio.js.map +1 -0
  321. package/dist/components/Radio/RadioGroup.d.ts +15 -0
  322. package/dist/components/Radio/RadioGroup.js +16 -0
  323. package/dist/components/Radio/RadioGroup.js.map +1 -0
  324. package/dist/components/Radio/index.d.ts +4 -0
  325. package/dist/components/ScrollMarker/ScrollMarker.css.d.ts +24 -0
  326. package/dist/components/ScrollMarker/ScrollMarker.css.js +25 -0
  327. package/dist/components/ScrollMarker/ScrollMarker.css.js.map +1 -0
  328. package/dist/components/ScrollMarker/ScrollMarker.d.ts +26 -0
  329. package/dist/components/ScrollMarker/ScrollMarker.js +29 -0
  330. package/dist/components/ScrollMarker/ScrollMarker.js.map +1 -0
  331. package/dist/components/ScrollMarker/index.d.ts +1 -0
  332. package/dist/components/Sheet/Sheet.css.d.ts +8 -0
  333. package/dist/components/Sheet/Sheet.css.js +7 -0
  334. package/dist/components/Sheet/Sheet.css.js.map +1 -0
  335. package/dist/components/Sheet/Sheet.d.ts +14 -0
  336. package/dist/components/Sheet/Sheet.js +14 -0
  337. package/dist/components/Sheet/Sheet.js.map +1 -0
  338. package/dist/components/Sheet/SheetActions.d.ts +7 -0
  339. package/dist/components/Sheet/SheetActions.js +14 -0
  340. package/dist/components/Sheet/SheetActions.js.map +1 -0
  341. package/dist/components/Sheet/SheetBody.d.ts +11 -0
  342. package/dist/components/Sheet/SheetBody.js +20 -0
  343. package/dist/components/Sheet/SheetBody.js.map +1 -0
  344. package/dist/components/Sheet/SheetHeader.d.ts +17 -0
  345. package/dist/components/Sheet/SheetHeader.js +44 -0
  346. package/dist/components/Sheet/SheetHeader.js.map +1 -0
  347. package/dist/components/Sheet/SheetRoot.d.ts +9 -0
  348. package/dist/components/Sheet/SheetRoot.js +16 -0
  349. package/dist/components/Sheet/SheetRoot.js.map +1 -0
  350. package/dist/components/Sheet/index.d.ts +4 -0
  351. package/dist/components/SheetOverlay/SheetOverlay.css.d.ts +3 -0
  352. package/dist/components/SheetOverlay/SheetOverlay.css.js +8 -0
  353. package/dist/components/SheetOverlay/SheetOverlay.css.js.map +1 -0
  354. package/dist/components/SheetOverlay/SheetOverlay.d.ts +24 -0
  355. package/dist/components/SheetOverlay/SheetOverlay.js +28 -0
  356. package/dist/components/SheetOverlay/SheetOverlay.js.map +1 -0
  357. package/dist/components/SheetOverlay/index.d.ts +1 -0
  358. package/dist/components/Spinner/Spinner.css.d.ts +22 -0
  359. package/dist/components/Spinner/Spinner.css.js +25 -0
  360. package/dist/components/Spinner/Spinner.css.js.map +1 -0
  361. package/dist/components/Spinner/Spinner.d.ts +19 -0
  362. package/dist/components/Spinner/Spinner.js +24 -0
  363. package/dist/components/Spinner/Spinner.js.map +1 -0
  364. package/dist/components/Spinner/index.d.ts +2 -0
  365. package/dist/components/Survey/SurveyRating/SurveyRating.css.d.ts +3 -0
  366. package/dist/components/Survey/SurveyRating/SurveyRating.css.js +7 -0
  367. package/dist/components/Survey/SurveyRating/SurveyRating.css.js.map +1 -0
  368. package/dist/components/Survey/SurveyRating/SurveyRating.d.ts +39 -0
  369. package/dist/components/Survey/SurveyRating/SurveyRating.js +51 -0
  370. package/dist/components/Survey/SurveyRating/SurveyRating.js.map +1 -0
  371. package/dist/components/Survey/SurveyRating/index.d.ts +1 -0
  372. package/dist/components/Survey/SurveySelect/SurveySelect.css.d.ts +1 -0
  373. package/dist/components/Survey/SurveySelect/SurveySelect.css.js +7 -0
  374. package/dist/components/Survey/SurveySelect/SurveySelect.css.js.map +1 -0
  375. package/dist/components/Survey/SurveySelect/SurveySelect.d.ts +40 -0
  376. package/dist/components/Survey/SurveySelect/SurveySelect.js +38 -0
  377. package/dist/components/Survey/SurveySelect/SurveySelect.js.map +1 -0
  378. package/dist/components/Survey/SurveySelect/index.d.ts +1 -0
  379. package/dist/components/Survey/index.d.ts +2 -0
  380. package/dist/components/ThinkingShimmer/ThinkingShimmer.css.d.ts +6 -0
  381. package/dist/components/ThinkingShimmer/ThinkingShimmer.css.js +7 -0
  382. package/dist/components/ThinkingShimmer/ThinkingShimmer.css.js.map +1 -0
  383. package/dist/components/ThinkingShimmer/ThinkingShimmer.d.ts +36 -0
  384. package/dist/components/ThinkingShimmer/ThinkingShimmer.js +44 -0
  385. package/dist/components/ThinkingShimmer/ThinkingShimmer.js.map +1 -0
  386. package/dist/components/ThinkingShimmer/index.d.ts +2 -0
  387. package/dist/components/ToastNotification/ToastNotification.css.d.ts +30 -0
  388. package/dist/components/ToastNotification/ToastNotification.css.js +25 -0
  389. package/dist/components/ToastNotification/ToastNotification.css.js.map +1 -0
  390. package/dist/components/ToastNotification/ToastNotification.d.ts +36 -0
  391. package/dist/components/ToastNotification/ToastNotification.js +31 -0
  392. package/dist/components/ToastNotification/ToastNotification.js.map +1 -0
  393. package/dist/components/ToastNotification/index.d.ts +2 -0
  394. package/dist/components/Toggle/Toggle.css.d.ts +14 -0
  395. package/dist/components/Toggle/Toggle.css.js +7 -0
  396. package/dist/components/Toggle/Toggle.css.js.map +1 -0
  397. package/dist/components/Toggle/Toggle.d.ts +18 -0
  398. package/dist/components/Toggle/Toggle.js +19 -0
  399. package/dist/components/Toggle/Toggle.js.map +1 -0
  400. package/dist/components/Toggle/index.d.ts +2 -0
  401. package/dist/components/Tooltip/Tooltip.css.d.ts +3 -0
  402. package/dist/components/Tooltip/Tooltip.css.js +7 -0
  403. package/dist/components/Tooltip/Tooltip.css.js.map +1 -0
  404. package/dist/components/Tooltip/Tooltip.d.ts +19 -0
  405. package/dist/components/Tooltip/Tooltip.js +32 -0
  406. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  407. package/dist/components/Tooltip/index.d.ts +2 -0
  408. package/dist/components/TypingIndicator/TypingIndicator.css.d.ts +3 -0
  409. package/dist/components/TypingIndicator/TypingIndicator.css.js +7 -0
  410. package/dist/components/TypingIndicator/TypingIndicator.css.js.map +1 -0
  411. package/dist/components/TypingIndicator/TypingIndicator.d.ts +27 -0
  412. package/dist/components/TypingIndicator/TypingIndicator.js +34 -0
  413. package/dist/components/TypingIndicator/TypingIndicator.js.map +1 -0
  414. package/dist/components/TypingIndicator/index.d.ts +2 -0
  415. package/dist/components/UserMessage/UserMessage.css.d.ts +7 -0
  416. package/dist/components/UserMessage/UserMessage.css.js +7 -0
  417. package/dist/components/UserMessage/UserMessage.css.js.map +1 -0
  418. package/dist/components/UserMessage/UserMessage.d.ts +22 -0
  419. package/dist/components/UserMessage/UserMessage.js +45 -0
  420. package/dist/components/UserMessage/UserMessage.js.map +1 -0
  421. package/dist/components/UserMessage/index.d.ts +1 -0
  422. package/dist/hooks/index.d.ts +2 -0
  423. package/dist/hooks/usePrefersReducedMotion.d.ts +3 -0
  424. package/dist/hooks/usePrefersReducedMotion.js +20 -0
  425. package/dist/hooks/usePrefersReducedMotion.js.map +1 -0
  426. package/dist/hooks/useSubmitOnEnter.d.ts +7 -0
  427. package/dist/hooks/useSubmitOnEnter.js +11 -0
  428. package/dist/hooks/useSubmitOnEnter.js.map +1 -0
  429. package/dist/index.d.ts +34 -0
  430. package/dist/index.js +75 -0
  431. package/dist/runtime/LovelaceProvider.d.ts +24 -0
  432. package/dist/runtime/LovelaceProvider.js +45 -0
  433. package/dist/runtime/LovelaceProvider.js.map +1 -0
  434. package/dist/runtime/branding.d.ts +133 -0
  435. package/dist/runtime/branding.js +92 -0
  436. package/dist/runtime/branding.js.map +1 -0
  437. package/dist/runtime/index.d.ts +2 -0
  438. package/dist/style.css +2 -0
  439. package/dist/tokens/generated/tokens.d.ts +4 -0
  440. package/dist/tokens/index.d.ts +2 -0
  441. package/dist/tokens/index.js +2 -0
  442. package/dist/tokens/tokens.d.ts +8 -0
  443. package/dist/tokens/tokens.js +6 -0
  444. package/dist/tokens/tokens.js.map +1 -0
  445. package/dist/tokens.css +316 -0
  446. package/dist/utils/cx.d.ts +2 -0
  447. package/dist/utils/cx.js +6 -0
  448. package/dist/utils/cx.js.map +1 -0
  449. package/dist/vendor/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js +80 -0
  450. package/dist/vendor/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js.map +1 -0
  451. package/package.json +74 -0
@@ -0,0 +1,28 @@
1
+ import { cx as e } from "../../utils/cx.js";
2
+ import { sheetDialog as t, sheetModal as n, sheetScrim as r } from "./SheetOverlay.css.js";
3
+ import { jsx as i } from "react/jsx-runtime";
4
+ import { useLocale as a } from "react-aria";
5
+ import { Dialog as o, Modal as s, ModalOverlay as c } from "react-aria-components";
6
+ //#region src/components/SheetOverlay/SheetOverlay.tsx
7
+ function l({ isOpen: l, onOpenChange: u, isDismissable: d = !0, "aria-label": f, className: p, children: m }) {
8
+ let { direction: h } = a();
9
+ return /* @__PURE__ */ i(c, {
10
+ isOpen: l,
11
+ onOpenChange: u,
12
+ isDismissable: d,
13
+ className: r,
14
+ dir: h,
15
+ children: /* @__PURE__ */ i(s, {
16
+ className: n,
17
+ children: /* @__PURE__ */ i(o, {
18
+ "aria-label": f,
19
+ className: e(t, p),
20
+ children: m
21
+ })
22
+ })
23
+ });
24
+ }
25
+ //#endregion
26
+ export { l as SheetOverlay };
27
+
28
+ //# sourceMappingURL=SheetOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SheetOverlay.js","names":[],"sources":["../../../src/components/SheetOverlay/SheetOverlay.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useLocale } from \"react-aria\";\nimport {\n\tDialog as AriaDialog,\n\tModal,\n\tModalOverlay,\n} from \"react-aria-components\";\nimport { cx } from \"../../utils/cx.js\";\nimport { sheetDialog, sheetModal, sheetScrim } from \"./SheetOverlay.css.js\";\n\nexport interface SheetOverlayProps {\n\t/** Whether the sheet is open. */\n\tisOpen: boolean;\n\t/** Called with the next open state on dismiss (scrim tap, Escape) or programmatic close. */\n\tonOpenChange: (isOpen: boolean) => void;\n\t/** Dismiss on scrim tap. Escape always cancels (RAC default). Defaults to `true`. */\n\tisDismissable?: boolean;\n\t/** Accessible name fallback when the child has no `Sheet.Header` title. */\n\t\"aria-label\"?: string;\n\tclassName?: string;\n\tchildren: ReactNode;\n}\n\n/**\n * Modal bottom-sheet presentation: dark scrim, focus-trap, dismiss-on-tap/Escape,\n * bottom-anchored, rounded-top corners, slide-up. Wraps arbitrary children\n * (typically a `Sheet`). For a full-window surface use `FullscreenOverlay`; for a\n * centered dialog `Dialog`; for a non-dimming bottom bubble `BubbleOverlay`.\n *\n * Give the dialog an accessible name via either a `Sheet.Header` title or the\n * `aria-label` prop — with neither (e.g. an actions-only Confirm sheet) RAC\n * emits a missing-name warning.\n */\nexport function SheetOverlay({\n\tisOpen,\n\tonOpenChange,\n\tisDismissable = true,\n\t\"aria-label\": ariaLabel,\n\tclassName,\n\tchildren,\n}: SheetOverlayProps) {\n\t// Stated, not inherited: this renders through a portal, so its direction must\n\t// not depend on where the portal lands. See the portalled-surface scenario\n\t// under the RTL requirement in openspec/specs/accessibility/spec.md.\n\tconst { direction } = useLocale();\n\n\treturn (\n\t\t<ModalOverlay\n\t\t\tisOpen={isOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t\tisDismissable={isDismissable}\n\t\t\tclassName={sheetScrim}\n\t\t\tdir={direction}\n\t\t>\n\t\t\t<Modal className={sheetModal}>\n\t\t\t\t<AriaDialog\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\tclassName={cx(sheetDialog, className)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</AriaDialog>\n\t\t\t</Modal>\n\t\t</ModalOverlay>\n\t);\n}\n"],"mappings":";;;;;;AAiCA,SAAgB,EAAa,EAC5B,WACA,iBACA,mBAAgB,IAChB,cAAc,GACd,cACA,eACqB;CAIrB,IAAM,EAAE,iBAAc,GAAW;AAEjC,QACC,kBAAC,GAAD;EACS;EACM;EACC;EACf,WAAW;EACX,KAAK;YAEL,kBAAC,GAAD;GAAO,WAAW;aACjB,kBAAC,GAAD;IACC,cAAY;IACZ,WAAW,EAAG,GAAa,EAAU;IAEpC;IACW,CAAA;GACN,CAAA;EACM,CAAA"}
@@ -0,0 +1 @@
1
+ export { SheetOverlay, type SheetOverlayProps } from "./SheetOverlay.js";
@@ -0,0 +1,22 @@
1
+ export declare const spinner: import("@vanilla-extract/recipes").RuntimeFn<{
2
+ size: {
3
+ sm: {
4
+ width: "16px";
5
+ height: "16px";
6
+ borderWidth: "2px";
7
+ };
8
+ lg: {
9
+ width: "32px";
10
+ height: "32px";
11
+ borderWidth: "3px";
12
+ };
13
+ };
14
+ background: {
15
+ default: {
16
+ borderTopColor: "var(--lovelace-color-neutral-0)" | "var(--lovelace-color-neutral-50)" | "var(--lovelace-color-neutral-100)" | "var(--lovelace-color-neutral-200)" | "var(--lovelace-color-neutral-300)" | "var(--lovelace-color-neutral-400)" | "var(--lovelace-color-neutral-500)" | "var(--lovelace-color-neutral-600)" | "var(--lovelace-color-neutral-700)" | "var(--lovelace-color-neutral-800)" | "var(--lovelace-color-neutral-900)" | "var(--lovelace-color-red-50)" | "var(--lovelace-color-orange-50)" | "var(--lovelace-color-green-50)" | "var(--lovelace-color-green-100)" | "var(--lovelace-color-green-200)" | "var(--lovelace-color-green-300)" | "var(--lovelace-color-green-400)" | "var(--lovelace-color-green-500)" | "var(--lovelace-color-green-600)" | "var(--lovelace-color-green-700)" | "var(--lovelace-color-green-800)" | "var(--lovelace-color-green-900)" | "var(--lovelace-color-orange-100)" | "var(--lovelace-color-orange-200)" | "var(--lovelace-color-orange-300)" | "var(--lovelace-color-orange-400)" | "var(--lovelace-color-orange-500)" | "var(--lovelace-color-orange-600)" | "var(--lovelace-color-orange-700)" | "var(--lovelace-color-orange-800)" | "var(--lovelace-color-orange-900)" | "var(--lovelace-color-red-100)" | "var(--lovelace-color-red-200)" | "var(--lovelace-color-red-300)" | "var(--lovelace-color-red-400)" | "var(--lovelace-color-red-500)" | "var(--lovelace-color-red-600)" | "var(--lovelace-color-red-700)" | "var(--lovelace-color-red-800)" | "var(--lovelace-color-red-900)" | "var(--lovelace-spacing-4)" | "var(--lovelace-spacing-8)" | "var(--lovelace-spacing-12)" | "var(--lovelace-spacing-16)" | "var(--lovelace-spacing-20)" | "var(--lovelace-spacing-24)" | "var(--lovelace-spacing-32)" | "var(--lovelace-spacing-40)" | "var(--lovelace-spacing-48)" | "var(--lovelace-font-weight-400)" | "var(--lovelace-font-weight-500)" | "var(--lovelace-font-weight-600)" | "var(--lovelace-color-blue-50)" | "var(--lovelace-color-blue-100)" | "var(--lovelace-color-blue-200)" | "var(--lovelace-color-blue-300)" | "var(--lovelace-color-blue-400)" | "var(--lovelace-color-blue-500)" | "var(--lovelace-color-blue-600)" | "var(--lovelace-color-blue-700)" | "var(--lovelace-color-blue-800)" | "var(--lovelace-color-blue-900)" | "var(--lovelace-font-size-12)" | "var(--lovelace-font-size-14)" | "var(--lovelace-font-size-16)" | "var(--lovelace-font-size-18)" | "var(--lovelace-font-size-20)" | "var(--lovelace-font-size-22)" | "var(--lovelace-font-size-24)" | "var(--lovelace-font-size-26)" | "var(--lovelace-font-size-28)" | "var(--lovelace-font-line-height-16)" | "var(--lovelace-font-line-height-18)" | "var(--lovelace-font-line-height-22)" | "var(--lovelace-font-line-height-24)" | "var(--lovelace-font-line-height-26)" | "var(--lovelace-font-line-height-28)" | "var(--lovelace-font-line-height-30)" | "var(--lovelace-font-line-height-32)" | "var(--lovelace-font-line-height-34)" | "var(--lovelace-border-radius-0)" | "var(--lovelace-p-border-radius-6)" | "var(--lovelace-p-border-radius-10)" | "var(--lovelace-p-border-radius-14)" | "var(--lovelace-p-border-radius-20)" | "var(--lovelace-p-border-radius-24)" | "var(--lovelace-border-radius-999)" | "var(--lovelace-font-paragraph-spacing-4)" | "var(--lovelace-font-paragraph-spacing-6)" | "var(--lovelace-font-paragraph-spacing-8)" | "var(--lovelace-font-paragraph-spacing-10)" | "var(--lovelace-font-paragraph-spacing-12)" | "var(--lovelace-color-accent-50)" | "var(--lovelace-color-accent-100)" | "var(--lovelace-color-accent-200)" | "var(--lovelace-color-accent-300)" | "var(--lovelace-color-accent-400)" | "var(--lovelace-color-accent-500)" | "var(--lovelace-color-accent-600)" | "var(--lovelace-color-accent-700)" | "var(--lovelace-color-accent-800)" | "var(--lovelace-color-accent-900)" | "var(--lovelace-font-family-sans-serif)" | "var(--lovelace-font-family-mono)" | "var(--lovelace-border-width-1)" | "var(--lovelace-border-width-2)" | "var(--lovelace-dimension-16)" | "var(--lovelace-dimension-20)" | "var(--lovelace-dimension-22)" | "var(--lovelace-dimension-24)" | "var(--lovelace-dimension-32)" | "var(--lovelace-dimension-36)" | "var(--lovelace-color-content-default)" | "var(--lovelace-color-content-secondary)" | "var(--lovelace-color-content-secondary-inverse)" | "var(--lovelace-color-content-disabled)" | "var(--lovelace-color-content-inverse)" | "var(--lovelace-color-background-default)" | "var(--lovelace-color-background-secondary)" | "var(--lovelace-color-background-tertiary)" | "var(--lovelace-color-background-quaternary)" | "var(--lovelace-color-background-disabled)" | "var(--lovelace-color-background-inverse)" | "var(--lovelace-color-background-neutral-overlay)" | "var(--lovelace-color-border-default)" | "var(--lovelace-color-border-medium)" | "var(--lovelace-color-border-strong)" | "var(--lovelace-color-content-link)" | "var(--lovelace-color-background-destructive)" | "var(--lovelace-color-content-destructive)" | "var(--lovelace-color-background-destructive-light)" | "var(--lovelace-color-border-destructive)" | "var(--lovelace-color-content-on-destructive)" | "var(--lovelace-color-content-warning)" | "var(--lovelace-color-background-warning)" | "var(--lovelace-color-background-warning-light)" | "var(--lovelace-color-border-warning)" | "var(--lovelace-color-content-success)" | "var(--lovelace-color-background-success)" | "var(--lovelace-color-background-success-light)" | "var(--lovelace-color-border-success)" | "var(--lovelace-color-content-accent)" | "var(--lovelace-color-content-on-accent)" | "var(--lovelace-color-content-on-scrim)" | "var(--lovelace-color-background-accent)" | "var(--lovelace-color-background-highlight-overlay)" | "var(--lovelace-color-border-focus)" | "var(--lovelace-color-border-accent)" | "var(--lovelace-color-border-highlight)" | "var(--lovelace-font-weight-regular)" | "var(--lovelace-font-size-caption)" | "var(--lovelace-line-height-caption)" | "var(--lovelace-paragraph-spacing-caption)" | "var(--lovelace-paragraph-spacing-body)" | "var(--lovelace-paragraph-spacing-title)" | "var(--lovelace-line-height-body)" | "var(--lovelace-line-height-title-small)" | "var(--lovelace-line-height-title-large)" | "var(--lovelace-font-size-body)" | "var(--lovelace-font-size-title-small)" | "var(--lovelace-font-size-title-large)" | "var(--lovelace-font-weight-medium)" | "var(--lovelace-font-weight-semi-bold)" | "var(--lovelace-font-family-body)" | "var(--lovelace-font-family-heading)" | "var(--lovelace-font-family-code)" | "var(--lovelace-border-radius-none)" | "var(--lovelace-border-radius-6)" | "var(--lovelace-border-radius-10)" | "var(--lovelace-border-radius-14)" | "var(--lovelace-border-radius-20)" | "var(--lovelace-border-radius-24)" | "var(--lovelace-border-radius-full)" | "var(--lovelace-padding-4)" | "var(--lovelace-padding-8)" | "var(--lovelace-padding-12)" | "var(--lovelace-gap-4)" | "var(--lovelace-padding-16)" | "var(--lovelace-gap-8)" | "var(--lovelace-gap-12)" | "var(--lovelace-gap-16)" | "var(--lovelace-gap-20)" | "var(--lovelace-padding-20)" | "var(--lovelace-border-width-default)" | "var(--lovelace-border-width-focus)" | "var(--lovelace-opacity-state-hover)" | "var(--lovelace-opacity-state-focus)" | "var(--lovelace-opacity-state-pressed)" | "var(--lovelace-icon-size-sm)" | "var(--lovelace-icon-size-md)" | "var(--lovelace-icon-size-control)" | "var(--lovelace-icon-size-lg)" | "var(--lovelace-easing-standard)" | "var(--lovelace-easing-emphasized)" | "var(--lovelace-easing-decelerate)" | "var(--lovelace-easing-accelerate)" | "var(--lovelace-duration-fast)" | "var(--lovelace-duration-medium)" | "var(--lovelace-duration-slow)" | "var(--lovelace-message-user-background)" | "var(--lovelace-message-user-content)" | "var(--lovelace-button-primary-background)" | "var(--lovelace-button-primary-content)" | "var(--lovelace-header-background)" | "var(--lovelace-pill-content-primary)" | "var(--lovelace-header-content)" | "var(--lovelace-chip-background-selected)" | "var(--lovelace-chatfab-background)" | "var(--lovelace-chatfab-content)" | "var(--lovelace-composer-background)" | "var(--lovelace-composer-border-default)" | "var(--lovelace-composer-content-default)" | "var(--lovelace-composer-content-secondary)" | "var(--lovelace-composer-border-focus)" | "var(--lovelace-composer-border-active)" | "var(--lovelace-avatar-background)" | "var(--lovelace-avatar-content)" | "var(--lovelace-scrollmarker-background)" | "var(--lovelace-scrollmarker-content)" | "var(--lovelace-send-button-background)" | "var(--lovelace-chat-background)" | "var(--lovelace-border-radius-button)" | "var(--lovelace-border-radius-message)" | "var(--lovelace-border-radius-input)" | "var(--lovelace-border-radius-composer)" | "var(--lovelace-border-radius-avatar)" | "var(--lovelace-border-radius-pill)" | "var(--lovelace-border-radius-media-preview)" | "var(--lovelace-border-radius-container)";
17
+ };
18
+ accent: {
19
+ borderTopColor: "var(--lovelace-color-neutral-0)" | "var(--lovelace-color-neutral-50)" | "var(--lovelace-color-neutral-100)" | "var(--lovelace-color-neutral-200)" | "var(--lovelace-color-neutral-300)" | "var(--lovelace-color-neutral-400)" | "var(--lovelace-color-neutral-500)" | "var(--lovelace-color-neutral-600)" | "var(--lovelace-color-neutral-700)" | "var(--lovelace-color-neutral-800)" | "var(--lovelace-color-neutral-900)" | "var(--lovelace-color-red-50)" | "var(--lovelace-color-orange-50)" | "var(--lovelace-color-green-50)" | "var(--lovelace-color-green-100)" | "var(--lovelace-color-green-200)" | "var(--lovelace-color-green-300)" | "var(--lovelace-color-green-400)" | "var(--lovelace-color-green-500)" | "var(--lovelace-color-green-600)" | "var(--lovelace-color-green-700)" | "var(--lovelace-color-green-800)" | "var(--lovelace-color-green-900)" | "var(--lovelace-color-orange-100)" | "var(--lovelace-color-orange-200)" | "var(--lovelace-color-orange-300)" | "var(--lovelace-color-orange-400)" | "var(--lovelace-color-orange-500)" | "var(--lovelace-color-orange-600)" | "var(--lovelace-color-orange-700)" | "var(--lovelace-color-orange-800)" | "var(--lovelace-color-orange-900)" | "var(--lovelace-color-red-100)" | "var(--lovelace-color-red-200)" | "var(--lovelace-color-red-300)" | "var(--lovelace-color-red-400)" | "var(--lovelace-color-red-500)" | "var(--lovelace-color-red-600)" | "var(--lovelace-color-red-700)" | "var(--lovelace-color-red-800)" | "var(--lovelace-color-red-900)" | "var(--lovelace-spacing-4)" | "var(--lovelace-spacing-8)" | "var(--lovelace-spacing-12)" | "var(--lovelace-spacing-16)" | "var(--lovelace-spacing-20)" | "var(--lovelace-spacing-24)" | "var(--lovelace-spacing-32)" | "var(--lovelace-spacing-40)" | "var(--lovelace-spacing-48)" | "var(--lovelace-font-weight-400)" | "var(--lovelace-font-weight-500)" | "var(--lovelace-font-weight-600)" | "var(--lovelace-color-blue-50)" | "var(--lovelace-color-blue-100)" | "var(--lovelace-color-blue-200)" | "var(--lovelace-color-blue-300)" | "var(--lovelace-color-blue-400)" | "var(--lovelace-color-blue-500)" | "var(--lovelace-color-blue-600)" | "var(--lovelace-color-blue-700)" | "var(--lovelace-color-blue-800)" | "var(--lovelace-color-blue-900)" | "var(--lovelace-font-size-12)" | "var(--lovelace-font-size-14)" | "var(--lovelace-font-size-16)" | "var(--lovelace-font-size-18)" | "var(--lovelace-font-size-20)" | "var(--lovelace-font-size-22)" | "var(--lovelace-font-size-24)" | "var(--lovelace-font-size-26)" | "var(--lovelace-font-size-28)" | "var(--lovelace-font-line-height-16)" | "var(--lovelace-font-line-height-18)" | "var(--lovelace-font-line-height-22)" | "var(--lovelace-font-line-height-24)" | "var(--lovelace-font-line-height-26)" | "var(--lovelace-font-line-height-28)" | "var(--lovelace-font-line-height-30)" | "var(--lovelace-font-line-height-32)" | "var(--lovelace-font-line-height-34)" | "var(--lovelace-border-radius-0)" | "var(--lovelace-p-border-radius-6)" | "var(--lovelace-p-border-radius-10)" | "var(--lovelace-p-border-radius-14)" | "var(--lovelace-p-border-radius-20)" | "var(--lovelace-p-border-radius-24)" | "var(--lovelace-border-radius-999)" | "var(--lovelace-font-paragraph-spacing-4)" | "var(--lovelace-font-paragraph-spacing-6)" | "var(--lovelace-font-paragraph-spacing-8)" | "var(--lovelace-font-paragraph-spacing-10)" | "var(--lovelace-font-paragraph-spacing-12)" | "var(--lovelace-color-accent-50)" | "var(--lovelace-color-accent-100)" | "var(--lovelace-color-accent-200)" | "var(--lovelace-color-accent-300)" | "var(--lovelace-color-accent-400)" | "var(--lovelace-color-accent-500)" | "var(--lovelace-color-accent-600)" | "var(--lovelace-color-accent-700)" | "var(--lovelace-color-accent-800)" | "var(--lovelace-color-accent-900)" | "var(--lovelace-font-family-sans-serif)" | "var(--lovelace-font-family-mono)" | "var(--lovelace-border-width-1)" | "var(--lovelace-border-width-2)" | "var(--lovelace-dimension-16)" | "var(--lovelace-dimension-20)" | "var(--lovelace-dimension-22)" | "var(--lovelace-dimension-24)" | "var(--lovelace-dimension-32)" | "var(--lovelace-dimension-36)" | "var(--lovelace-color-content-default)" | "var(--lovelace-color-content-secondary)" | "var(--lovelace-color-content-secondary-inverse)" | "var(--lovelace-color-content-disabled)" | "var(--lovelace-color-content-inverse)" | "var(--lovelace-color-background-default)" | "var(--lovelace-color-background-secondary)" | "var(--lovelace-color-background-tertiary)" | "var(--lovelace-color-background-quaternary)" | "var(--lovelace-color-background-disabled)" | "var(--lovelace-color-background-inverse)" | "var(--lovelace-color-background-neutral-overlay)" | "var(--lovelace-color-border-default)" | "var(--lovelace-color-border-medium)" | "var(--lovelace-color-border-strong)" | "var(--lovelace-color-content-link)" | "var(--lovelace-color-background-destructive)" | "var(--lovelace-color-content-destructive)" | "var(--lovelace-color-background-destructive-light)" | "var(--lovelace-color-border-destructive)" | "var(--lovelace-color-content-on-destructive)" | "var(--lovelace-color-content-warning)" | "var(--lovelace-color-background-warning)" | "var(--lovelace-color-background-warning-light)" | "var(--lovelace-color-border-warning)" | "var(--lovelace-color-content-success)" | "var(--lovelace-color-background-success)" | "var(--lovelace-color-background-success-light)" | "var(--lovelace-color-border-success)" | "var(--lovelace-color-content-accent)" | "var(--lovelace-color-content-on-accent)" | "var(--lovelace-color-content-on-scrim)" | "var(--lovelace-color-background-accent)" | "var(--lovelace-color-background-highlight-overlay)" | "var(--lovelace-color-border-focus)" | "var(--lovelace-color-border-accent)" | "var(--lovelace-color-border-highlight)" | "var(--lovelace-font-weight-regular)" | "var(--lovelace-font-size-caption)" | "var(--lovelace-line-height-caption)" | "var(--lovelace-paragraph-spacing-caption)" | "var(--lovelace-paragraph-spacing-body)" | "var(--lovelace-paragraph-spacing-title)" | "var(--lovelace-line-height-body)" | "var(--lovelace-line-height-title-small)" | "var(--lovelace-line-height-title-large)" | "var(--lovelace-font-size-body)" | "var(--lovelace-font-size-title-small)" | "var(--lovelace-font-size-title-large)" | "var(--lovelace-font-weight-medium)" | "var(--lovelace-font-weight-semi-bold)" | "var(--lovelace-font-family-body)" | "var(--lovelace-font-family-heading)" | "var(--lovelace-font-family-code)" | "var(--lovelace-border-radius-none)" | "var(--lovelace-border-radius-6)" | "var(--lovelace-border-radius-10)" | "var(--lovelace-border-radius-14)" | "var(--lovelace-border-radius-20)" | "var(--lovelace-border-radius-24)" | "var(--lovelace-border-radius-full)" | "var(--lovelace-padding-4)" | "var(--lovelace-padding-8)" | "var(--lovelace-padding-12)" | "var(--lovelace-gap-4)" | "var(--lovelace-padding-16)" | "var(--lovelace-gap-8)" | "var(--lovelace-gap-12)" | "var(--lovelace-gap-16)" | "var(--lovelace-gap-20)" | "var(--lovelace-padding-20)" | "var(--lovelace-border-width-default)" | "var(--lovelace-border-width-focus)" | "var(--lovelace-opacity-state-hover)" | "var(--lovelace-opacity-state-focus)" | "var(--lovelace-opacity-state-pressed)" | "var(--lovelace-icon-size-sm)" | "var(--lovelace-icon-size-md)" | "var(--lovelace-icon-size-control)" | "var(--lovelace-icon-size-lg)" | "var(--lovelace-easing-standard)" | "var(--lovelace-easing-emphasized)" | "var(--lovelace-easing-decelerate)" | "var(--lovelace-easing-accelerate)" | "var(--lovelace-duration-fast)" | "var(--lovelace-duration-medium)" | "var(--lovelace-duration-slow)" | "var(--lovelace-message-user-background)" | "var(--lovelace-message-user-content)" | "var(--lovelace-button-primary-background)" | "var(--lovelace-button-primary-content)" | "var(--lovelace-header-background)" | "var(--lovelace-pill-content-primary)" | "var(--lovelace-header-content)" | "var(--lovelace-chip-background-selected)" | "var(--lovelace-chatfab-background)" | "var(--lovelace-chatfab-content)" | "var(--lovelace-composer-background)" | "var(--lovelace-composer-border-default)" | "var(--lovelace-composer-content-default)" | "var(--lovelace-composer-content-secondary)" | "var(--lovelace-composer-border-focus)" | "var(--lovelace-composer-border-active)" | "var(--lovelace-avatar-background)" | "var(--lovelace-avatar-content)" | "var(--lovelace-scrollmarker-background)" | "var(--lovelace-scrollmarker-content)" | "var(--lovelace-send-button-background)" | "var(--lovelace-chat-background)" | "var(--lovelace-border-radius-button)" | "var(--lovelace-border-radius-message)" | "var(--lovelace-border-radius-input)" | "var(--lovelace-border-radius-composer)" | "var(--lovelace-border-radius-avatar)" | "var(--lovelace-border-radius-pill)" | "var(--lovelace-border-radius-media-preview)" | "var(--lovelace-border-radius-container)";
20
+ };
21
+ };
22
+ }>;
@@ -0,0 +1,25 @@
1
+ import { createRuntimeFn as e } from "../../vendor/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js";
2
+ /* empty css */
3
+ //#region src/components/Spinner/Spinner.css.ts
4
+ var t = e({
5
+ defaultClassName: "_2rqyvg1",
6
+ variantClassNames: {
7
+ size: {
8
+ sm: "_2rqyvg2",
9
+ lg: "_2rqyvg3"
10
+ },
11
+ background: {
12
+ default: "_2rqyvg4",
13
+ accent: "_2rqyvg5"
14
+ }
15
+ },
16
+ defaultVariants: {
17
+ size: "sm",
18
+ background: "default"
19
+ },
20
+ compoundVariants: []
21
+ });
22
+ //#endregion
23
+ export { t as spinner };
24
+
25
+ //# sourceMappingURL=Spinner.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.css.js","names":[],"sources":["../../../src/components/Spinner/Spinner.css.ts"],"sourcesContent":["import { keyframes } from \"@vanilla-extract/css\";\nimport { recipe } from \"@vanilla-extract/recipes\";\nimport { t } from \"../../tokens/index.js\";\n\nconst spin = keyframes({\n\tto: { transform: \"rotate(360deg)\" },\n});\n\n// A loading spinner communicates essential system status, so reduced motion\n// slows the animation rather than freezing it — a stationary spinner reads as\n// \"stuck\". Applied both natively (@media) and via the JS-reflected\n// data-reduced-motion attribute so the behavior is observable in tests.\nconst REDUCED_MOTION_DURATION = \"2.4s\";\n\nexport const spinner = recipe({\n\tbase: {\n\t\tdisplay: \"inline-block\",\n\t\tboxSizing: \"border-box\",\n\t\tborderStyle: \"solid\",\n\t\tborderColor: t(\"color-background-neutral-overlay\"),\n\t\tborderRadius: \"50%\",\n\t\tanimation: `${spin} 0.8s linear infinite`,\n\t\t\"@media\": {\n\t\t\t\"(prefers-reduced-motion: reduce)\": {\n\t\t\t\tanimationDuration: REDUCED_MOTION_DURATION,\n\t\t\t},\n\t\t},\n\t\tselectors: {\n\t\t\t\"&[data-reduced-motion]\": {\n\t\t\t\tanimationDuration: REDUCED_MOTION_DURATION,\n\t\t\t},\n\t\t},\n\t},\n\tvariants: {\n\t\t// Hardcoded sizes and border widths are correct — Figma frame sizes.\n\t\tsize: {\n\t\t\tsm: { width: \"16px\", height: \"16px\", borderWidth: \"2px\" },\n\t\t\tlg: { width: \"32px\", height: \"32px\", borderWidth: \"3px\" },\n\t\t},\n\t\tbackground: {\n\t\t\tdefault: { borderTopColor: t(\"color-content-default\") },\n\t\t\taccent: { borderTopColor: t(\"color-content-on-accent\") },\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"sm\",\n\t\tbackground: \"default\",\n\t},\n});\n"],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import type { CSSProperties, Ref } from "react";
2
+ export type SpinnerSize = "sm" | "lg";
3
+ export type SpinnerBackground = "default" | "accent";
4
+ export interface SpinnerProps {
5
+ /** `sm` (16px) for inline / in-button, `lg` (32px) for region / page. */
6
+ size?: SpinnerSize;
7
+ /**
8
+ * The background the spinner sits on. `default` adapts to light/dark mode;
9
+ * `accent` is for filled-accent (brand-colored) surfaces where the arc must
10
+ * stay white in both themes, since the accent color does not invert.
11
+ */
12
+ background?: SpinnerBackground;
13
+ /** Accessible name announced by assistive tech. */
14
+ label?: string;
15
+ className?: string;
16
+ style?: CSSProperties;
17
+ ref?: Ref<HTMLDivElement>;
18
+ }
19
+ export declare function Spinner({ size, background, label, className, ...rest }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { cx as e } from "../../utils/cx.js";
2
+ import { usePrefersReducedMotion as t } from "../../hooks/usePrefersReducedMotion.js";
3
+ import { spinner as n } from "./Spinner.css.js";
4
+ import { jsx as r } from "react/jsx-runtime";
5
+ //#region src/components/Spinner/Spinner.tsx
6
+ function i({ size: i = "sm", background: a = "default", label: o = "Loading", className: s, ...c }) {
7
+ let l = t();
8
+ return /* @__PURE__ */ r("div", {
9
+ ...c,
10
+ role: "status",
11
+ "aria-label": o,
12
+ "data-size": i,
13
+ "data-background": a,
14
+ "data-reduced-motion": l || void 0,
15
+ className: e(n({
16
+ size: i,
17
+ background: a
18
+ }), s)
19
+ });
20
+ }
21
+ //#endregion
22
+ export { i as Spinner };
23
+
24
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","names":[],"sources":["../../../src/components/Spinner/Spinner.tsx"],"sourcesContent":["import type { CSSProperties, Ref } from \"react\";\nimport { usePrefersReducedMotion } from \"../../hooks/index.js\";\nimport { cx } from \"../../utils/cx.js\";\nimport { spinner } from \"./Spinner.css.js\";\n\nexport type SpinnerSize = \"sm\" | \"lg\";\nexport type SpinnerBackground = \"default\" | \"accent\";\n\nexport interface SpinnerProps {\n\t/** `sm` (16px) for inline / in-button, `lg` (32px) for region / page. */\n\tsize?: SpinnerSize;\n\t/**\n\t * The background the spinner sits on. `default` adapts to light/dark mode;\n\t * `accent` is for filled-accent (brand-colored) surfaces where the arc must\n\t * stay white in both themes, since the accent color does not invert.\n\t */\n\tbackground?: SpinnerBackground;\n\t/** Accessible name announced by assistive tech. */\n\tlabel?: string;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tref?: Ref<HTMLDivElement>;\n}\n\nexport function Spinner({\n\tsize = \"sm\",\n\tbackground = \"default\",\n\tlabel = \"Loading\",\n\tclassName,\n\t...rest\n}: SpinnerProps) {\n\tconst reducedMotion = usePrefersReducedMotion();\n\treturn (\n\t\t<div\n\t\t\t{...rest}\n\t\t\trole=\"status\"\n\t\t\taria-label={label}\n\t\t\tdata-size={size}\n\t\t\tdata-background={background}\n\t\t\tdata-reduced-motion={reducedMotion || undefined}\n\t\t\tclassName={cx(spinner({ size, background }), className)}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;AAwBA,SAAgB,EAAQ,EACvB,UAAO,MACP,gBAAa,WACb,WAAQ,WACR,cACA,GAAG,KACa;CAChB,IAAM,IAAgB,GAAyB;AAC/C,QACC,kBAAC,OAAD;EACC,GAAI;EACJ,MAAK;EACL,cAAY;EACZ,aAAW;EACX,mBAAiB;EACjB,uBAAqB,KAAiB,KAAA;EACtC,WAAW,EAAG,EAAQ;GAAE;GAAM;GAAY,CAAC,EAAE,EAAU;EACtD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export type { SpinnerBackground, SpinnerProps, SpinnerSize, } from "./Spinner.js";
2
+ export { Spinner } from "./Spinner.js";
@@ -0,0 +1,3 @@
1
+ export declare const surveyRatingRoot: string;
2
+ export declare const surveyRatingScale: string;
3
+ export declare const surveyRatingLabels: string;
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ //#region src/components/Survey/SurveyRating/SurveyRating.css.ts
3
+ var e = "jzxfg70", t = "jzxfg71", n = "jzxfg72";
4
+ //#endregion
5
+ export { n as surveyRatingLabels, e as surveyRatingRoot, t as surveyRatingScale };
6
+
7
+ //# sourceMappingURL=SurveyRating.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurveyRating.css.js","names":[],"sources":["../../../../src/components/Survey/SurveyRating/SurveyRating.css.ts"],"sourcesContent":["import { style } from \"@vanilla-extract/css\";\nimport { t } from \"../../../tokens/index.js\";\n\nexport const surveyRatingRoot = style({\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\tgap: t(\"gap-8\"),\n\twidth: \"fit-content\",\n});\n\nexport const surveyRatingScale = style({\n\tdisplay: \"flex\",\n\tflexWrap: \"wrap\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tgap: t(\"gap-8\"),\n\twidth: \"100%\",\n});\n\nexport const surveyRatingLabels = style({\n\tdisplay: \"flex\",\n\tjustifyContent: \"space-between\",\n\twidth: \"100%\",\n\tfontFamily: t(\"font-family-body\"),\n\tfontWeight: t(\"font-weight-regular\"),\n\tfontSize: t(\"font-size-caption\"),\n\tlineHeight: t(\"line-height-caption\"),\n\tcolor: t(\"color-content-secondary\"),\n});\n"],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import type { CSSProperties, ReactNode, Ref } from "react";
2
+ import type { Key } from "react-aria-components";
3
+ export interface SurveyRatingOption {
4
+ /** Numeric value shown on the chip (e.g. 1–5, 1–10). Rendered unless `icon` is set. */
5
+ value: number;
6
+ /** Stable identity used for selection. Defaults to the option's array index. */
7
+ key?: Key;
8
+ /** Endpoint label to render as selected option. */
9
+ label?: string;
10
+ /** Renders an icon chip (emoji, thumbs) instead of the numeric value. */
11
+ icon?: ReactNode;
12
+ /** Accessible name for the option. Overrides the numeric value / icon; icon options fall back to `label`. */
13
+ "aria-label"?: string;
14
+ }
15
+ export interface SurveyRatingProps {
16
+ /** Ordered rating options, lowest value first. */
17
+ options: SurveyRatingOption[];
18
+ /** Accessible name for the rating group. */
19
+ "aria-label": string;
20
+ /** Show the first and last options' labels as scale endpoints. */
21
+ showLabels?: boolean;
22
+ isDisabled?: boolean;
23
+ /** Selected option key (controlled). `null` means nothing selected. */
24
+ selectedKey?: Key | null;
25
+ /** Initially-selected option key (uncontrolled). */
26
+ defaultSelectedKey?: Key | null;
27
+ /** Fires with the newly-selected key and option, or `null` when deselected. */
28
+ onChange?: (key: Key | null, option: SurveyRatingOption | null) => void;
29
+ className?: string;
30
+ style?: CSSProperties;
31
+ ref?: Ref<HTMLDivElement>;
32
+ }
33
+ /**
34
+ * Single-select rating scale for post-conversation surveys. Renders each option as a
35
+ * square {@link Chip}; a numeric `value` or an `icon` (emoji, thumbs) per option supports
36
+ * arbitrary scales. Exactly one option is selectable at a time, and tapping the selected
37
+ * option deselects it (React Aria toggle semantics).
38
+ */
39
+ export declare function SurveyRating({ options, showLabels, isDisabled, selectedKey, defaultSelectedKey, onChange, className, style, ref, "aria-label": ariaLabel, }: SurveyRatingProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,51 @@
1
+ import { cx as e } from "../../../utils/cx.js";
2
+ import { Chip as t } from "../../Chip/Chip.js";
3
+ import { surveyRatingRoot as n, surveyRatingScale as r } from "./SurveyRating.css.js";
4
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
+ import { ToggleButtonGroup as o } from "react-aria-components";
6
+ //#region src/components/Survey/SurveyRating/SurveyRating.tsx
7
+ var s = (e, t) => e.key ?? t, c = 7, l = 48, u = 8, d = (e) => {
8
+ let t = Math.max(1, Math.ceil(e / c));
9
+ return Math.max(1, Math.ceil(e / t));
10
+ }, f = (e) => {
11
+ let t = d(e);
12
+ return t * l + (t - 1) * u;
13
+ };
14
+ function p({ options: c, showLabels: l = !1, isDisabled: u, selectedKey: d, defaultSelectedKey: p, onChange: m, className: h, style: g, ref: _, "aria-label": v }) {
15
+ let y = c[0]?.label, b = c[c.length - 1]?.label, x = (e) => {
16
+ let t = e.size ? [...e][0] : null, n = t == null ? null : c.find((e, n) => s(e, n) === t) ?? null;
17
+ m?.(t, n);
18
+ }, S = (e) => e == null ? [] : [e], C = d !== void 0;
19
+ return /* @__PURE__ */ a("div", {
20
+ ref: _,
21
+ className: e(n, h),
22
+ style: g,
23
+ children: [/* @__PURE__ */ i(o, {
24
+ selectionMode: "single",
25
+ isDisabled: u,
26
+ "aria-label": v,
27
+ className: r,
28
+ style: { maxWidth: f(c.length) },
29
+ onSelectionChange: x,
30
+ selectedKeys: C ? S(d) : void 0,
31
+ defaultSelectedKeys: C ? void 0 : S(p),
32
+ children: c.map((e, n) => {
33
+ let r = e.icon != null;
34
+ return /* @__PURE__ */ i(t, {
35
+ id: s(e, n),
36
+ variant: r ? "icon" : "number",
37
+ size: "lg",
38
+ "aria-label": e["aria-label"] ?? (r ? e.label : void 0),
39
+ children: e.icon ?? e.value
40
+ }, s(e, n));
41
+ })
42
+ }), l && (y != null || b != null) && /* @__PURE__ */ a("div", {
43
+ className: "jzxfg72",
44
+ children: [/* @__PURE__ */ i("span", { children: y }), /* @__PURE__ */ i("span", { children: b })]
45
+ })]
46
+ });
47
+ }
48
+ //#endregion
49
+ export { p as SurveyRating };
50
+
51
+ //# sourceMappingURL=SurveyRating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurveyRating.js","names":[],"sources":["../../../../src/components/Survey/SurveyRating/SurveyRating.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode, Ref } from \"react\";\nimport type { Key } from \"react-aria-components\";\nimport { ToggleButtonGroup } from \"react-aria-components\";\nimport { cx } from \"../../../utils/cx.js\";\nimport { Chip } from \"../../Chip/index.js\";\nimport {\n\tsurveyRatingLabels,\n\tsurveyRatingRoot,\n\tsurveyRatingScale,\n} from \"./SurveyRating.css.js\";\n\nexport interface SurveyRatingOption {\n\t/** Numeric value shown on the chip (e.g. 1–5, 1–10). Rendered unless `icon` is set. */\n\tvalue: number;\n\t/** Stable identity used for selection. Defaults to the option's array index. */\n\tkey?: Key;\n\t/** Endpoint label to render as selected option. */\n\tlabel?: string;\n\t/** Renders an icon chip (emoji, thumbs) instead of the numeric value. */\n\ticon?: ReactNode;\n\t/** Accessible name for the option. Overrides the numeric value / icon; icon options fall back to `label`. */\n\t\"aria-label\"?: string;\n}\n\nexport interface SurveyRatingProps {\n\t/** Ordered rating options, lowest value first. */\n\toptions: SurveyRatingOption[];\n\t/** Accessible name for the rating group. */\n\t\"aria-label\": string;\n\t/** Show the first and last options' labels as scale endpoints. */\n\tshowLabels?: boolean;\n\tisDisabled?: boolean;\n\t/** Selected option key (controlled). `null` means nothing selected. */\n\tselectedKey?: Key | null;\n\t/** Initially-selected option key (uncontrolled). */\n\tdefaultSelectedKey?: Key | null;\n\t/** Fires with the newly-selected key and option, or `null` when deselected. */\n\tonChange?: (key: Key | null, option: SurveyRatingOption | null) => void;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tref?: Ref<HTMLDivElement>;\n}\n\nconst keyFor = (option: SurveyRatingOption, index: number) =>\n\toption.key ?? index;\n\n/** Most chips allowed on one row before the scale wraps to a balanced grid. */\nconst MAX_PER_ROW = 7;\n\n/** Chip footprint at `size=\"lg\"` — mirrors Chip.css.ts's fixed 48px square + gap-8. */\nconst CHIP_SIZE_LG = 48;\nconst CHIP_GAP = 8;\n\n/** Column count that splits `count` options into evenly-sized rows (11 → 6, 10 → 5, 7 → 7). */\nconst balancedColumns = (count: number) => {\n\tconst rows = Math.max(1, Math.ceil(count / MAX_PER_ROW));\n\treturn Math.max(1, Math.ceil(count / rows));\n};\n\n/**\n * Width that wraps the scale at the balanced column count. A cap rather than a fixed\n * track count, so a container narrower than this wraps further instead of overflowing\n * (the 0-10 scale is 328px wide — wider than the 320px BubbleOverlay cap).\n */\nconst balancedMaxWidth = (count: number) => {\n\tconst cols = balancedColumns(count);\n\treturn cols * CHIP_SIZE_LG + (cols - 1) * CHIP_GAP;\n};\n\n/**\n * Single-select rating scale for post-conversation surveys. Renders each option as a\n * square {@link Chip}; a numeric `value` or an `icon` (emoji, thumbs) per option supports\n * arbitrary scales. Exactly one option is selectable at a time, and tapping the selected\n * option deselects it (React Aria toggle semantics).\n */\nexport function SurveyRating({\n\toptions,\n\tshowLabels = false,\n\tisDisabled,\n\tselectedKey,\n\tdefaultSelectedKey,\n\tonChange,\n\tclassName,\n\tstyle,\n\tref,\n\t\"aria-label\": ariaLabel,\n}: SurveyRatingProps) {\n\tconst lowLabel = options[0]?.label;\n\tconst highLabel = options[options.length - 1]?.label;\n\n\tconst handleSelectionChange = (keys: Set<Key>) => {\n\t\tconst key = keys.size ? [...keys][0] : null;\n\t\tconst option =\n\t\t\tkey == null\n\t\t\t\t? null\n\t\t\t\t: (options.find((o, i) => keyFor(o, i) === key) ?? null);\n\t\tonChange?.(key, option);\n\t};\n\n\t// Translate the single-key facade into RAC's Set-based controlled/uncontrolled props:\n\t// a defined `selectedKey` (including `null`) is controlled; otherwise it's uncontrolled.\n\tconst toKeys = (key: Key | null | undefined) => (key == null ? [] : [key]);\n\tconst isControlled = selectedKey !== undefined;\n\n\treturn (\n\t\t<div ref={ref} className={cx(surveyRatingRoot, className)} style={style}>\n\t\t\t<ToggleButtonGroup\n\t\t\t\tselectionMode=\"single\"\n\t\t\t\tisDisabled={isDisabled}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={surveyRatingScale}\n\t\t\t\tstyle={{ maxWidth: balancedMaxWidth(options.length) }}\n\t\t\t\tonSelectionChange={handleSelectionChange}\n\t\t\t\tselectedKeys={isControlled ? toKeys(selectedKey) : undefined}\n\t\t\t\tdefaultSelectedKeys={\n\t\t\t\t\tisControlled ? undefined : toKeys(defaultSelectedKey)\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{options.map((option, index) => {\n\t\t\t\t\tconst isIcon = option.icon != null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\tkey={keyFor(option, index)}\n\t\t\t\t\t\t\tid={keyFor(option, index)}\n\t\t\t\t\t\t\tvariant={isIcon ? \"icon\" : \"number\"}\n\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\toption[\"aria-label\"] ?? (isIcon ? option.label : undefined)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{option.icon ?? option.value}\n\t\t\t\t\t\t</Chip>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ToggleButtonGroup>\n\t\t\t{showLabels && (lowLabel != null || highLabel != null) && (\n\t\t\t\t<div className={surveyRatingLabels}>\n\t\t\t\t\t<span>{lowLabel}</span>\n\t\t\t\t\t<span>{highLabel}</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;AA2CA,IAAM,KAAU,GAA4B,MAC3C,EAAO,OAAO,GAGT,IAAc,GAGd,IAAe,IACf,IAAW,GAGX,KAAmB,MAAkB;CAC1C,IAAM,IAAO,KAAK,IAAI,GAAG,KAAK,KAAK,IAAQ,EAAY,CAAC;AACxD,QAAO,KAAK,IAAI,GAAG,KAAK,KAAK,IAAQ,EAAK,CAAC;GAQtC,KAAoB,MAAkB;CAC3C,IAAM,IAAO,EAAgB,EAAM;AACnC,QAAO,IAAO,KAAgB,IAAO,KAAK;;AAS3C,SAAgB,EAAa,EAC5B,YACA,gBAAa,IACb,eACA,gBACA,uBACA,aACA,cACA,UACA,QACA,cAAc,KACO;CACrB,IAAM,IAAW,EAAQ,IAAI,OACvB,IAAY,EAAQ,EAAQ,SAAS,IAAI,OAEzC,KAAyB,MAAmB;EACjD,IAAM,IAAM,EAAK,OAAO,CAAC,GAAG,EAAK,CAAC,KAAK,MACjC,IACL,KAAO,OACJ,OACC,EAAQ,MAAM,GAAG,MAAM,EAAO,GAAG,EAAE,KAAK,EAAI,IAAI;AACrD,MAAW,GAAK,EAAO;IAKlB,KAAU,MAAiC,KAAO,OAAO,EAAE,GAAG,CAAC,EAAI,EACnE,IAAe,MAAgB,KAAA;AAErC,QACC,kBAAC,OAAD;EAAU;EAAK,WAAW,EAAG,GAAkB,EAAU;EAAS;YAAlE,CACC,kBAAC,GAAD;GACC,eAAc;GACF;GACZ,cAAY;GACZ,WAAW;GACX,OAAO,EAAE,UAAU,EAAiB,EAAQ,OAAO,EAAE;GACrD,mBAAmB;GACnB,cAAc,IAAe,EAAO,EAAY,GAAG,KAAA;GACnD,qBACC,IAAe,KAAA,IAAY,EAAO,EAAmB;aAGrD,EAAQ,KAAK,GAAQ,MAAU;IAC/B,IAAM,IAAS,EAAO,QAAQ;AAC9B,WACC,kBAAC,GAAD;KAEC,IAAI,EAAO,GAAQ,EAAM;KACzB,SAAS,IAAS,SAAS;KAC3B,MAAK;KACL,cACC,EAAO,kBAAkB,IAAS,EAAO,QAAQ,KAAA;eAGjD,EAAO,QAAQ,EAAO;KACjB,EATD,EAAO,GAAQ,EAAM,CASpB;KAEP;GACiB,CAAA,EACnB,MAAe,KAAY,QAAQ,KAAa,SAChD,kBAAC,OAAD;GAAK,WAAA;aAAL,CACC,kBAAC,QAAD,EAAA,UAAO,GAAgB,CAAA,EACvB,kBAAC,QAAD,EAAA,UAAO,GAAiB,CAAA,CACnB;KAEF"}
@@ -0,0 +1 @@
1
+ export { SurveyRating, type SurveyRatingOption, type SurveyRatingProps, } from "./SurveyRating.js";
@@ -0,0 +1 @@
1
+ export declare const surveySelectRoot: string;
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ //#region src/components/Survey/SurveySelect/SurveySelect.css.ts
3
+ var e = "_1y87qec0";
4
+ //#endregion
5
+ export { e as surveySelectRoot };
6
+
7
+ //# sourceMappingURL=SurveySelect.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurveySelect.css.js","names":[],"sources":["../../../../src/components/Survey/SurveySelect/SurveySelect.css.ts"],"sourcesContent":["import { style } from \"@vanilla-extract/css\";\nimport { t } from \"../../../tokens/index.js\";\n\nexport const surveySelectRoot = style({\n\tdisplay: \"flex\",\n\tflexWrap: \"wrap\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tgap: t(\"gap-8\"),\n\twidth: \"100%\",\n});\n"],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import type { CSSProperties, Ref } from "react";
2
+ import type { Key } from "react-aria-components";
3
+ export interface SurveySelectOption {
4
+ /** Chip label text. */
5
+ label: string;
6
+ /** Stable identity used for selection. Defaults to the option's array index. */
7
+ key?: Key;
8
+ }
9
+ export interface SurveySelectProps {
10
+ /** Selectable options, rendered in order. */
11
+ options: SurveySelectOption[];
12
+ /** Accessible name for the group. */
13
+ "aria-label": string;
14
+ /**
15
+ * `multiple` (default) allows any number of selected chips; `single` allows at
16
+ * most one (e.g. a Yes/No question) and renders as a radiogroup.
17
+ */
18
+ selectionMode?: "single" | "multiple";
19
+ /**
20
+ * When `true`, a selected option can't be toggled back off — restores radio
21
+ * semantics for a required single-select (e.g. a Yes/No question).
22
+ */
23
+ disallowEmptySelection?: boolean;
24
+ isDisabled?: boolean;
25
+ /** Selected option keys (controlled). */
26
+ selectedKeys?: Key[];
27
+ /** Initially-selected option keys (uncontrolled). */
28
+ defaultSelectedKeys?: Key[];
29
+ /** Fires with the full set of selected keys and their options, in option order. */
30
+ onChange?: (keys: Key[], options: SurveySelectOption[]) => void;
31
+ className?: string;
32
+ style?: CSSProperties;
33
+ ref?: Ref<HTMLDivElement>;
34
+ }
35
+ /**
36
+ * Multi-select chip group for surveys — the labelled-pill counterpart to the single-select
37
+ * {@link SurveyRating}. Any number of options can be selected at once; selection state
38
+ * renders the accent fill on each {@link Chip}.
39
+ */
40
+ export declare function SurveySelect({ options, selectionMode, disallowEmptySelection, isDisabled, selectedKeys, defaultSelectedKeys, onChange, className, style, ref, "aria-label": ariaLabel, }: SurveySelectProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,38 @@
1
+ import { cx as e } from "../../../utils/cx.js";
2
+ import { Chip as t } from "../../Chip/Chip.js";
3
+ import { surveySelectRoot as n } from "./SurveySelect.css.js";
4
+ import { jsx as r } from "react/jsx-runtime";
5
+ import { ToggleButtonGroup as i } from "react-aria-components";
6
+ //#region src/components/Survey/SurveySelect/SurveySelect.tsx
7
+ var a = (e, t) => e.key ?? t;
8
+ function o({ options: o, selectionMode: s = "multiple", disallowEmptySelection: c, isDisabled: l, selectedKeys: u, defaultSelectedKeys: d, onChange: f, className: p, style: m, ref: h, "aria-label": g }) {
9
+ let _ = (e) => {
10
+ let t = o.map((e, t) => ({
11
+ option: e,
12
+ key: a(e, t)
13
+ })).filter(({ key: t }) => e.has(t));
14
+ f?.(t.map((e) => e.key), t.map((e) => e.option));
15
+ }, v = u !== void 0;
16
+ return /* @__PURE__ */ r(i, {
17
+ ref: h,
18
+ selectionMode: s,
19
+ disallowEmptySelection: c,
20
+ isDisabled: l,
21
+ "aria-label": g,
22
+ className: e(n, p),
23
+ style: m,
24
+ onSelectionChange: _,
25
+ selectedKeys: v ? u : void 0,
26
+ defaultSelectedKeys: v ? void 0 : d ?? [],
27
+ children: o.map((e, n) => /* @__PURE__ */ r(t, {
28
+ id: a(e, n),
29
+ variant: "text",
30
+ size: "md",
31
+ children: e.label
32
+ }, a(e, n)))
33
+ });
34
+ }
35
+ //#endregion
36
+ export { o as SurveySelect };
37
+
38
+ //# sourceMappingURL=SurveySelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurveySelect.js","names":[],"sources":["../../../../src/components/Survey/SurveySelect/SurveySelect.tsx"],"sourcesContent":["import type { CSSProperties, Ref } from \"react\";\nimport type { Key } from \"react-aria-components\";\nimport { ToggleButtonGroup } from \"react-aria-components\";\nimport { cx } from \"../../../utils/cx.js\";\nimport { Chip } from \"../../Chip/index.js\";\nimport { surveySelectRoot } from \"./SurveySelect.css.js\";\n\nexport interface SurveySelectOption {\n\t/** Chip label text. */\n\tlabel: string;\n\t/** Stable identity used for selection. Defaults to the option's array index. */\n\tkey?: Key;\n}\n\nexport interface SurveySelectProps {\n\t/** Selectable options, rendered in order. */\n\toptions: SurveySelectOption[];\n\t/** Accessible name for the group. */\n\t\"aria-label\": string;\n\t/**\n\t * `multiple` (default) allows any number of selected chips; `single` allows at\n\t * most one (e.g. a Yes/No question) and renders as a radiogroup.\n\t */\n\tselectionMode?: \"single\" | \"multiple\";\n\t/**\n\t * When `true`, a selected option can't be toggled back off — restores radio\n\t * semantics for a required single-select (e.g. a Yes/No question).\n\t */\n\tdisallowEmptySelection?: boolean;\n\tisDisabled?: boolean;\n\t/** Selected option keys (controlled). */\n\tselectedKeys?: Key[];\n\t/** Initially-selected option keys (uncontrolled). */\n\tdefaultSelectedKeys?: Key[];\n\t/** Fires with the full set of selected keys and their options, in option order. */\n\tonChange?: (keys: Key[], options: SurveySelectOption[]) => void;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tref?: Ref<HTMLDivElement>;\n}\n\nconst keyFor = (option: SurveySelectOption, index: number) =>\n\toption.key ?? index;\n\n/**\n * Multi-select chip group for surveys — the labelled-pill counterpart to the single-select\n * {@link SurveyRating}. Any number of options can be selected at once; selection state\n * renders the accent fill on each {@link Chip}.\n */\nexport function SurveySelect({\n\toptions,\n\tselectionMode = \"multiple\",\n\tdisallowEmptySelection,\n\tisDisabled,\n\tselectedKeys,\n\tdefaultSelectedKeys,\n\tonChange,\n\tclassName,\n\tstyle,\n\tref,\n\t\"aria-label\": ariaLabel,\n}: SurveySelectProps) {\n\tconst handleSelectionChange = (keys: Set<Key>) => {\n\t\tconst selected = options\n\t\t\t.map((option, index) => ({ option, key: keyFor(option, index) }))\n\t\t\t.filter(({ key }) => keys.has(key));\n\t\tonChange?.(\n\t\t\tselected.map((s) => s.key),\n\t\t\tselected.map((s) => s.option),\n\t\t);\n\t};\n\n\tconst isControlled = selectedKeys !== undefined;\n\n\treturn (\n\t\t<ToggleButtonGroup\n\t\t\tref={ref}\n\t\t\tselectionMode={selectionMode}\n\t\t\tdisallowEmptySelection={disallowEmptySelection}\n\t\t\tisDisabled={isDisabled}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cx(surveySelectRoot, className)}\n\t\t\tstyle={style}\n\t\t\tonSelectionChange={handleSelectionChange}\n\t\t\tselectedKeys={isControlled ? selectedKeys : undefined}\n\t\t\tdefaultSelectedKeys={\n\t\t\t\tisControlled ? undefined : (defaultSelectedKeys ?? [])\n\t\t\t}\n\t\t>\n\t\t\t{options.map((option, index) => (\n\t\t\t\t<Chip\n\t\t\t\t\tkey={keyFor(option, index)}\n\t\t\t\t\tid={keyFor(option, index)}\n\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\tsize=\"md\"\n\t\t\t\t>\n\t\t\t\t\t{option.label}\n\t\t\t\t</Chip>\n\t\t\t))}\n\t\t</ToggleButtonGroup>\n\t);\n}\n"],"mappings":";;;;;;AAyCA,IAAM,KAAU,GAA4B,MAC3C,EAAO,OAAO;AAOf,SAAgB,EAAa,EAC5B,YACA,mBAAgB,YAChB,2BACA,eACA,iBACA,wBACA,aACA,cACA,UACA,QACA,cAAc,KACO;CACrB,IAAM,KAAyB,MAAmB;EACjD,IAAM,IAAW,EACf,KAAK,GAAQ,OAAW;GAAE;GAAQ,KAAK,EAAO,GAAQ,EAAM;GAAE,EAAE,CAChE,QAAQ,EAAE,aAAU,EAAK,IAAI,EAAI,CAAC;AACpC,MACC,EAAS,KAAK,MAAM,EAAE,IAAI,EAC1B,EAAS,KAAK,MAAM,EAAE,OAAO,CAC7B;IAGI,IAAe,MAAiB,KAAA;AAEtC,QACC,kBAAC,GAAD;EACM;EACU;EACS;EACZ;EACZ,cAAY;EACZ,WAAW,EAAG,GAAkB,EAAU;EACnC;EACP,mBAAmB;EACnB,cAAc,IAAe,IAAe,KAAA;EAC5C,qBACC,IAAe,KAAA,IAAa,KAAuB,EAAE;YAGrD,EAAQ,KAAK,GAAQ,MACrB,kBAAC,GAAD;GAEC,IAAI,EAAO,GAAQ,EAAM;GACzB,SAAQ;GACR,MAAK;aAEJ,EAAO;GACF,EAND,EAAO,GAAQ,EAAM,CAMpB,CACN;EACiB,CAAA"}
@@ -0,0 +1 @@
1
+ export { SurveySelect, type SurveySelectOption, type SurveySelectProps, } from "./SurveySelect.js";
@@ -0,0 +1,2 @@
1
+ export * from "./SurveyRating/index.js";
2
+ export * from "./SurveySelect/index.js";
@@ -0,0 +1,6 @@
1
+ export declare const restingColor: string;
2
+ export declare const shimmerGradient: string;
3
+ export declare const root: string;
4
+ export declare const visuallyHidden: string;
5
+ export declare const ellipsis: string;
6
+ export declare const dot: string;
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ //#region src/components/ThinkingShimmer/ThinkingShimmer.css.ts
3
+ var e = "_9az62f2", t = "_9az62f3", n = "_9az62f4", r = "_9az62f5";
4
+ //#endregion
5
+ export { r as dot, n as ellipsis, e as root, t as visuallyHidden };
6
+
7
+ //# sourceMappingURL=ThinkingShimmer.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThinkingShimmer.css.js","names":[],"sources":["../../../src/components/ThinkingShimmer/ThinkingShimmer.css.ts"],"sourcesContent":["import { keyframes, style } from \"@vanilla-extract/css\";\nimport { t } from \"../../tokens/index.js\";\n\n// Widen to `string` so the multi-stop template literal below doesn't blow up into\n// an intractable union of the tokens' literal `var(--lovelace-…)` types.\n// The base is the *secondary* content token, so the color each glyph shows most of\n// the time — and at rest — reads as a transient status line rather than body text,\n// while a glint sweeps across it (same model as the legacy `ui` shimmer).\n// Secondary is the lightest content-tier token that still clears WCAG AA in both\n// themes (5.05:1 on the light surface, 7.81:1 on dark). Legacy's shimmer is lighter\n// still, but it hardcodes #e8e8e8→#999999 at 1.23:1–2.85:1 with no dark variant;\n// matching it exactly would be a contrast waiver, not a token choice.\nconst shimmerBase: string = t(\"color-content-secondary\");\n// The glint moves AWAY from the surface rather than toward it — darker than the base in\n// light mode (#181a1e on #ffffff), lighter in dark (#ffffff on #181a1e). Stating it as\n// \"lighter\" or \"darker\" is wrong in one theme or the other; what holds in both is that\n// it is the higher-contrast end, 17.42:1.\n//\n// That direction is forced, not a preference. The gradient is clipped to the text, so\n// every stop is a glyph colour and owes AA, and per the note above\n// `color-content-secondary` is already the lightest neutral content token that clears\n// it — so no lighter glint exists. Enumerated the whole content tier to be sure: the\n// only AA-passing tokens lighter in light mode are `success`/`warning`, status hues and\n// wrong for a neutral status line.\n//\n// This was `color-border-default` — a NON-text token, 1.47:1 light and 1.69:1 dark, i.e.\n// under even the 3:1 non-text floor, which made the mid-sweep glyphs very nearly\n// invisible and was exactly the waiver the note above refuses.\nconst shimmerGlint: string = t(\"color-content-default\");\nexport const restingColor: string = t(\"color-content-secondary\");\n\n// Exported so the AA test can read the stops out of the gradient itself rather than a\n// hand-kept list of colours beside it. A stop added as a `t()` token is then checked\n// automatically; one written as a literal is NOT — the scrape only sees `var()` — so a\n// companion test rejects colour literals here rather than letting one ship unchecked.\nexport const shimmerGradient = `linear-gradient(90deg, ${shimmerBase} 0%, ${shimmerBase} 35%, ${shimmerGlint} 50%, ${shimmerBase} 65%, ${shimmerBase} 100%)`;\n\n// One smooth, constant-velocity sweep (linear). The gradient tiles\n// (background-repeat) and each cycle translates by exactly one tile width (200%),\n// so the loop is seamless and the text is always fully covered — no transparent\n// glyphs mid-sweep, no easing pulse.\nconst sweep = keyframes({\n\t\"0%\": { backgroundPositionX: \"200%\" },\n\t\"100%\": { backgroundPositionX: \"0%\" },\n});\n\n// Staggered vertical bounce for the ellipsis, via `vertical-align` — NOT\n// `top`/`transform`, which promote the dot to its own compositing layer and drop it\n// out of the root's `-webkit-background-clip: text`, leaving it invisible.\nconst dotBounce = keyframes({\n\t\"0%, 80%, 100%\": { verticalAlign: \"0\" },\n\t\"40%\": { verticalAlign: \"0.3em\" },\n});\n\nexport const root = style({\n\tdisplay: \"inline-block\",\n\tfontFamily: t(\"font-family-body\"),\n\tfontWeight: t(\"font-weight-medium\"),\n\tfontSize: t(\"font-size-body\"),\n\tlineHeight: t(\"line-height-body\"),\n\twhiteSpace: \"nowrap\",\n\t// A gradient clipped to the text and swept across it. The dots are plain inline\n\t// descendants covered by this same clip, so one band flows through the whole\n\t// label. Stops reference the tokens directly (currentColor can't express the\n\t// theme-aware stops); in dark mode they invert so the sweep keeps matching the\n\t// surface.\n\tbackgroundImage: shimmerGradient,\n\tbackgroundSize: \"200% 100%\",\n\tbackgroundRepeat: \"repeat\",\n\tbackgroundClip: \"text\",\n\tWebkitBackgroundClip: \"text\",\n\tcolor: \"transparent\",\n\tWebkitTextFillColor: \"transparent\",\n\tanimation: `${sweep} 2s linear infinite`,\n\t\"@media\": {\n\t\t// Reduced motion: hold the shimmer static at a flat, muted resting color —\n\t\t// never signal the loading state with animation alone.\n\t\t\"(prefers-reduced-motion: reduce)\": {\n\t\t\tanimation: \"none\",\n\t\t\tbackgroundImage: \"none\",\n\t\t\tcolor: restingColor,\n\t\t\tWebkitTextFillColor: restingColor,\n\t\t},\n\t},\n});\n\n// Carries the announced status string as real text (live regions announce\n// rendered text, not `aria-label`), while staying out of the visual layout.\nexport const visuallyHidden = style({\n\tposition: \"absolute\",\n\twidth: 1,\n\theight: 1,\n\tpadding: 0,\n\tmargin: -1,\n\toverflow: \"hidden\",\n\tclip: \"rect(0, 0, 0, 0)\",\n\twhiteSpace: \"nowrap\",\n\tborder: 0,\n});\n\nexport const ellipsis = style({\n\tdisplay: \"inline\",\n});\n\nexport const dot = style({\n\t// Plain inline and unpositioned so the dots stay in the root's single text clip;\n\t// color and gradient are inherited, only the bounce (see `dotBounce`) moves them.\n\tdisplay: \"inline\",\n\t// Zero line-height so a bounced dot can't grow the line box and shift the whole\n\t// label; the raise fits within the root's existing line-height headroom.\n\tlineHeight: 0,\n\tanimation: `${dotBounce} 1.4s ease-in-out infinite`,\n\tselectors: {\n\t\t\"&:nth-child(2)\": { animationDelay: \"0.16s\" },\n\t\t\"&:nth-child(3)\": { animationDelay: \"0.32s\" },\n\t},\n\t\"@media\": {\n\t\t\"(prefers-reduced-motion: reduce)\": {\n\t\t\tanimation: \"none\",\n\t\t},\n\t},\n});\n"],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import type { CSSProperties, HTMLAttributes, Ref } from "react";
2
+ export interface ThinkingShimmerProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children"> {
3
+ /** Visible and announced label. Trailing dots are normalized before the animated ellipsis is appended. */
4
+ label?: string;
5
+ className?: string;
6
+ style?: CSSProperties;
7
+ ref?: Ref<HTMLSpanElement>;
8
+ }
9
+ /**
10
+ * AI thinking indicator — a label with a trailing ellipsis, shown while the AI
11
+ * agent is generating a response. A single shimmer band sweeps continuously
12
+ * through the whole label (word and dots). Render it as a transient status line in
13
+ * the message list while the assistant is streaming (or before the first token),
14
+ * and remove it once content arrives. Use only for AI generation, not for a human
15
+ * agent typing.
16
+ *
17
+ * Exposed as a polite live region. Two distinct a11y paths carry the same
18
+ * `announced` string, which defaults to `label`: `aria-label` gives the region
19
+ * its accessible name (`role="status"` is not name-from-content, so descendant
20
+ * text alone yields no name), and a visually-hidden copy of the text drives the
21
+ * on-appearance announcement (live regions announce rendered text, not
22
+ * `aria-label`). Both are needed — dropping either loses the name or the
23
+ * announcement. The visible word (which strips trailing dots before rendering
24
+ * the animated ellipsis) and dots are hidden from assistive tech. Honors reduced
25
+ * motion by holding the shimmer static at a flat resting color.
26
+ *
27
+ * Reliable on-appearance announcement additionally depends on the consuming
28
+ * surface keeping a persistent live region present before this mounts (the app's
29
+ * MessageList/MessageAnnouncer already do); validate with a real screen reader
30
+ * when a surface adopts this component.
31
+ *
32
+ * A surface that already wraps this in its own live region should pass
33
+ * `aria-live="off"`: two nested regions announce the same text twice, in an order
34
+ * neither controls.
35
+ */
36
+ export declare function ThinkingShimmer({ label, className, "aria-label": ariaLabel, "aria-live": ariaLive, ...rest }: ThinkingShimmerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,44 @@
1
+ import { cx as e } from "../../utils/cx.js";
2
+ import { dot as t, ellipsis as n, root as r, visuallyHidden as i } from "./ThinkingShimmer.css.js";
3
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
+ //#region src/components/ThinkingShimmer/ThinkingShimmer.tsx
5
+ function s({ label: s = "Thinking", className: l, "aria-label": u, "aria-live": d = "polite", ...f }) {
6
+ let p = c(s), m = u ?? s;
7
+ return /* @__PURE__ */ o("span", {
8
+ ...f,
9
+ role: "status",
10
+ "aria-live": d,
11
+ "aria-label": m,
12
+ className: e(r, l),
13
+ children: [/* @__PURE__ */ a("span", {
14
+ className: i,
15
+ children: m
16
+ }), /* @__PURE__ */ o("span", {
17
+ "aria-hidden": "true",
18
+ children: [p, /* @__PURE__ */ o("span", {
19
+ className: n,
20
+ children: [
21
+ /* @__PURE__ */ a("span", {
22
+ className: t,
23
+ children: "."
24
+ }),
25
+ /* @__PURE__ */ a("span", {
26
+ className: t,
27
+ children: "."
28
+ }),
29
+ /* @__PURE__ */ a("span", {
30
+ className: t,
31
+ children: "."
32
+ })
33
+ ]
34
+ })]
35
+ })]
36
+ });
37
+ }
38
+ function c(e) {
39
+ return e.replace(/[\s.…]+$/, "");
40
+ }
41
+ //#endregion
42
+ export { s as ThinkingShimmer };
43
+
44
+ //# sourceMappingURL=ThinkingShimmer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThinkingShimmer.js","names":[],"sources":["../../../src/components/ThinkingShimmer/ThinkingShimmer.tsx"],"sourcesContent":["import type { CSSProperties, HTMLAttributes, Ref } from \"react\";\nimport { cx } from \"../../utils/cx.js\";\nimport { dot, ellipsis, root, visuallyHidden } from \"./ThinkingShimmer.css.js\";\n\nexport interface ThinkingShimmerProps\n\textends Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> {\n\t/** Visible and announced label. Trailing dots are normalized before the animated ellipsis is appended. */\n\tlabel?: string;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tref?: Ref<HTMLSpanElement>;\n}\n\n/**\n * AI thinking indicator — a label with a trailing ellipsis, shown while the AI\n * agent is generating a response. A single shimmer band sweeps continuously\n * through the whole label (word and dots). Render it as a transient status line in\n * the message list while the assistant is streaming (or before the first token),\n * and remove it once content arrives. Use only for AI generation, not for a human\n * agent typing.\n *\n * Exposed as a polite live region. Two distinct a11y paths carry the same\n * `announced` string, which defaults to `label`: `aria-label` gives the region\n * its accessible name (`role=\"status\"` is not name-from-content, so descendant\n * text alone yields no name), and a visually-hidden copy of the text drives the\n * on-appearance announcement (live regions announce rendered text, not\n * `aria-label`). Both are needed — dropping either loses the name or the\n * announcement. The visible word (which strips trailing dots before rendering\n * the animated ellipsis) and dots are hidden from assistive tech. Honors reduced\n * motion by holding the shimmer static at a flat resting color.\n *\n * Reliable on-appearance announcement additionally depends on the consuming\n * surface keeping a persistent live region present before this mounts (the app's\n * MessageList/MessageAnnouncer already do); validate with a real screen reader\n * when a surface adopts this component.\n *\n * A surface that already wraps this in its own live region should pass\n * `aria-live=\"off\"`: two nested regions announce the same text twice, in an order\n * neither controls.\n */\nexport function ThinkingShimmer({\n\tlabel = \"Thinking\",\n\tclassName,\n\t\"aria-label\": ariaLabel,\n\t\"aria-live\": ariaLive = \"polite\",\n\t...rest\n}: ThinkingShimmerProps) {\n\tconst visibleLabel = stripTrailingEllipsis(label);\n\tconst announced = ariaLabel ?? label;\n\treturn (\n\t\t<span\n\t\t\t{...rest}\n\t\t\trole=\"status\"\n\t\t\taria-live={ariaLive}\n\t\t\taria-label={announced}\n\t\t\tclassName={cx(root, className)}\n\t\t>\n\t\t\t<span className={visuallyHidden}>{announced}</span>\n\t\t\t<span aria-hidden=\"true\">\n\t\t\t\t{visibleLabel}\n\t\t\t\t<span className={ellipsis}>\n\t\t\t\t\t<span className={dot}>.</span>\n\t\t\t\t\t<span className={dot}>.</span>\n\t\t\t\t\t<span className={dot}>.</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nfunction stripTrailingEllipsis(label: string): string {\n\treturn label.replace(/[\\s.…]+$/, \"\");\n}\n"],"mappings":";;;;AAwCA,SAAgB,EAAgB,EAC/B,WAAQ,YACR,cACA,cAAc,GACd,aAAa,IAAW,UACxB,GAAG,KACqB;CACxB,IAAM,IAAe,EAAsB,EAAM,EAC3C,IAAY,KAAa;AAC/B,QACC,kBAAC,QAAD;EACC,GAAI;EACJ,MAAK;EACL,aAAW;EACX,cAAY;EACZ,WAAW,EAAG,GAAM,EAAU;YAL/B,CAOC,kBAAC,QAAD;GAAM,WAAW;aAAiB;GAAiB,CAAA,EACnD,kBAAC,QAAD;GAAM,eAAY;aAAlB,CACE,GACD,kBAAC,QAAD;IAAM,WAAW;cAAjB;KACC,kBAAC,QAAD;MAAM,WAAW;gBAAK;MAAQ,CAAA;KAC9B,kBAAC,QAAD;MAAM,WAAW;gBAAK;MAAQ,CAAA;KAC9B,kBAAC,QAAD;MAAM,WAAW;gBAAK;MAAQ,CAAA;KACxB;MACD;KACD;;;AAIT,SAAS,EAAsB,GAAuB;AACrD,QAAO,EAAM,QAAQ,YAAY,GAAG"}
@@ -0,0 +1,2 @@
1
+ export type { ThinkingShimmerProps } from "./ThinkingShimmer.js";
2
+ export { ThinkingShimmer } from "./ThinkingShimmer.js";