@cognite/aura 0.3.4 → 1.46104.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 (446) hide show
  1. package/CHANGELOG.md +264 -0
  2. package/DESIGN.md +638 -281
  3. package/LICENSE +21 -0
  4. package/README.md +48 -13
  5. package/dist/colors-deprecated.css +587 -0
  6. package/dist/colors.css +803 -830
  7. package/dist/components/index.d.ts +63 -57
  8. package/dist/components/index.js +62 -59
  9. package/dist/components/index.js.map +1 -0
  10. package/dist/components/ui/core/accordion/accordion.d.ts +19 -18
  11. package/dist/components/ui/core/accordion/accordion.js +99 -78
  12. package/dist/components/ui/core/accordion/accordion.js.map +1 -0
  13. package/dist/components/ui/core/action-toolbar/action-toolbar-motion.d.ts +8 -0
  14. package/dist/components/ui/core/action-toolbar/action-toolbar-motion.js +125 -0
  15. package/dist/components/ui/core/action-toolbar/action-toolbar-motion.js.map +1 -0
  16. package/dist/components/ui/core/action-toolbar/action-toolbar.d.ts +31 -31
  17. package/dist/components/ui/core/action-toolbar/action-toolbar.js +156 -106
  18. package/dist/components/ui/core/action-toolbar/action-toolbar.js.map +1 -0
  19. package/dist/components/ui/core/alert/alert.d.ts +25 -25
  20. package/dist/components/ui/core/alert/alert.js +181 -152
  21. package/dist/components/ui/core/alert/alert.js.map +1 -0
  22. package/dist/components/ui/core/avatar/avatar.d.ts +10 -9
  23. package/dist/components/ui/core/avatar/avatar.js +75 -65
  24. package/dist/components/ui/core/avatar/avatar.js.map +1 -0
  25. package/dist/components/ui/core/badge/badge.d.ts +13 -12
  26. package/dist/components/ui/core/badge/badge.js +88 -72
  27. package/dist/components/ui/core/badge/badge.js.map +1 -0
  28. package/dist/components/ui/core/banner/banner.d.ts +18 -18
  29. package/dist/components/ui/core/banner/banner.js +179 -142
  30. package/dist/components/ui/core/banner/banner.js.map +1 -0
  31. package/dist/components/ui/core/breadcrumb/breadcrumb.d.ts +12 -12
  32. package/dist/components/ui/core/breadcrumb/breadcrumb.js +139 -104
  33. package/dist/components/ui/core/breadcrumb/breadcrumb.js.map +1 -0
  34. package/dist/components/ui/core/button/button.d.ts +7 -7
  35. package/dist/components/ui/core/button/button.gallery.d.ts +2 -0
  36. package/dist/components/ui/core/button/button.gallery.js +76 -0
  37. package/dist/components/ui/core/button/button.gallery.js.map +1 -0
  38. package/dist/components/ui/core/button/button.js +57 -47
  39. package/dist/components/ui/core/button/button.js.map +1 -0
  40. package/dist/components/ui/core/button-group/button-group.d.ts +9 -9
  41. package/dist/components/ui/core/button-group/button-group.js +50 -40
  42. package/dist/components/ui/core/button-group/button-group.js.map +1 -0
  43. package/dist/components/ui/core/calendar/calendar-header.d.ts +7 -7
  44. package/dist/components/ui/core/calendar/calendar-header.js +102 -63
  45. package/dist/components/ui/core/calendar/calendar-header.js.map +1 -0
  46. package/dist/components/ui/core/calendar/calendar-utils.d.ts +30 -30
  47. package/dist/components/ui/core/calendar/calendar-utils.js +116 -39
  48. package/dist/components/ui/core/calendar/calendar-utils.js.map +1 -0
  49. package/dist/components/ui/core/calendar/calendar.d.ts +10 -10
  50. package/dist/components/ui/core/calendar/calendar.js +95 -66
  51. package/dist/components/ui/core/calendar/calendar.js.map +1 -0
  52. package/dist/components/ui/core/calendar/constants.js +3 -0
  53. package/dist/components/ui/core/calendar/constants.js.map +1 -0
  54. package/dist/components/ui/core/card/card.d.ts +20 -20
  55. package/dist/components/ui/core/card/card.js +133 -104
  56. package/dist/components/ui/core/card/card.js.map +1 -0
  57. package/dist/components/ui/core/chart/chart.d.ts +55 -53
  58. package/dist/components/ui/core/chart/chart.js +196 -116
  59. package/dist/components/ui/core/chart/chart.js.map +1 -0
  60. package/dist/components/ui/core/chart/index.d.ts +2 -2
  61. package/dist/components/ui/core/chart/index.js +3 -2
  62. package/dist/components/ui/core/chart/index.js.map +1 -0
  63. package/dist/components/ui/core/checkbox/checkbox.d.ts +9 -9
  64. package/dist/components/ui/core/checkbox/checkbox.js +88 -68
  65. package/dist/components/ui/core/checkbox/checkbox.js.map +1 -0
  66. package/dist/components/ui/core/checkbox/checkbox.metadata.d.ts +1 -1
  67. package/dist/components/ui/core/checkbox/checkbox.metadata.js +6 -7
  68. package/dist/components/ui/core/checkbox/checkbox.metadata.js.map +1 -0
  69. package/dist/components/ui/core/code-block/code-block.d.ts +19 -19
  70. package/dist/components/ui/core/code-block/code-block.js +259 -175
  71. package/dist/components/ui/core/code-block/code-block.js.map +1 -0
  72. package/dist/components/ui/core/collapsible/collapsible.d.ts +5 -5
  73. package/dist/components/ui/core/collapsible/collapsible.js +36 -30
  74. package/dist/components/ui/core/collapsible/collapsible.js.map +1 -0
  75. package/dist/components/ui/core/combobox/combobox.d.ts +13 -13
  76. package/dist/components/ui/core/combobox/combobox.js +89 -40
  77. package/dist/components/ui/core/combobox/combobox.js.map +1 -0
  78. package/dist/components/ui/core/command/command.d.ts +20 -18
  79. package/dist/components/ui/core/command/command.js +137 -85
  80. package/dist/components/ui/core/command/command.js.map +1 -0
  81. package/dist/components/ui/core/conversation/conversation.d.ts +14 -0
  82. package/dist/components/ui/core/conversation/conversation.js +51 -0
  83. package/dist/components/ui/core/conversation/conversation.js.map +1 -0
  84. package/dist/components/ui/core/count/count.d.ts +8 -6
  85. package/dist/components/ui/core/count/count.js +51 -21
  86. package/dist/components/ui/core/count/count.js.map +1 -0
  87. package/dist/components/ui/core/data-grid/data-grid-cell.d.ts +7 -7
  88. package/dist/components/ui/core/data-grid/data-grid-cell.js +23 -0
  89. package/dist/components/ui/core/data-grid/data-grid-cell.js.map +1 -0
  90. package/dist/components/ui/core/data-grid/data-grid-filter-clauses.d.ts +14 -0
  91. package/dist/components/ui/core/data-grid/data-grid-filter-clauses.js +36 -0
  92. package/dist/components/ui/core/data-grid/data-grid-filter-clauses.js.map +1 -0
  93. package/dist/components/ui/core/data-grid/data-grid-filter-panel.d.ts +41 -0
  94. package/dist/components/ui/core/data-grid/data-grid-filter-panel.js +273 -0
  95. package/dist/components/ui/core/data-grid/data-grid-filter-panel.js.map +1 -0
  96. package/dist/components/ui/core/data-grid/data-grid-footer.d.ts +6 -0
  97. package/dist/components/ui/core/data-grid/data-grid-footer.js +34 -0
  98. package/dist/components/ui/core/data-grid/data-grid-footer.js.map +1 -0
  99. package/dist/components/ui/core/data-grid/data-grid-header-row.d.ts +10 -10
  100. package/dist/components/ui/core/data-grid/data-grid-header-row.js +70 -0
  101. package/dist/components/ui/core/data-grid/data-grid-header-row.js.map +1 -0
  102. package/dist/components/ui/core/data-grid/data-grid-header.d.ts +11 -0
  103. package/dist/components/ui/core/data-grid/data-grid-header.js +67 -0
  104. package/dist/components/ui/core/data-grid/data-grid-header.js.map +1 -0
  105. package/dist/components/ui/core/data-grid/data-grid-row.d.ts +15 -15
  106. package/dist/components/ui/core/data-grid/data-grid-row.js +105 -0
  107. package/dist/components/ui/core/data-grid/data-grid-row.js.map +1 -0
  108. package/dist/components/ui/core/data-grid/data-grid.d.ts +85 -35
  109. package/dist/components/ui/core/data-grid/data-grid.fixtures.d.ts +7 -7
  110. package/dist/components/ui/core/data-grid/data-grid.fixtures.js +139 -0
  111. package/dist/components/ui/core/data-grid/data-grid.fixtures.js.map +1 -0
  112. package/dist/components/ui/core/data-grid/data-grid.js +404 -0
  113. package/dist/components/ui/core/data-grid/data-grid.js.map +1 -0
  114. package/dist/components/ui/core/data-grid/data-grid.utils.d.ts +3 -3
  115. package/dist/components/ui/core/data-grid/data-grid.utils.js +51 -0
  116. package/dist/components/ui/core/data-grid/data-grid.utils.js.map +1 -0
  117. package/dist/components/ui/core/data-grid/index.d.ts +4 -0
  118. package/dist/components/ui/core/data-grid/index.js +5 -0
  119. package/dist/components/ui/core/data-grid/index.js.map +1 -0
  120. package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.d.ts +11 -13
  121. package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.js +85 -61
  122. package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.js.map +1 -0
  123. package/dist/components/ui/core/date-time-pickers/date-picker/index.d.ts +3 -3
  124. package/dist/components/ui/core/date-time-pickers/date-picker/index.js +3 -0
  125. package/dist/components/ui/core/date-time-pickers/date-picker/index.js.map +1 -0
  126. package/dist/components/ui/core/date-time-pickers/date-picker/types.d.ts +14 -14
  127. package/dist/components/ui/core/date-time-pickers/date-picker/types.js +3 -0
  128. package/dist/components/ui/core/date-time-pickers/date-picker/types.js.map +1 -0
  129. package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.d.ts +2 -2
  130. package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.js +51 -36
  131. package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.js.map +1 -0
  132. package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.d.ts +11 -13
  133. package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.js +89 -64
  134. package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.js.map +1 -0
  135. package/dist/components/ui/core/date-time-pickers/date-range-picker/index.d.ts +3 -3
  136. package/dist/components/ui/core/date-time-pickers/date-range-picker/index.js +3 -0
  137. package/dist/components/ui/core/date-time-pickers/date-range-picker/index.js.map +1 -0
  138. package/dist/components/ui/core/date-time-pickers/date-range-picker/types.d.ts +20 -20
  139. package/dist/components/ui/core/date-time-pickers/date-range-picker/types.js +3 -0
  140. package/dist/components/ui/core/date-time-pickers/date-range-picker/types.js.map +1 -0
  141. package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.d.ts +4 -4
  142. package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.js +95 -60
  143. package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.js.map +1 -0
  144. package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.d.ts +15 -0
  145. package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.js +120 -0
  146. package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.js.map +1 -0
  147. package/dist/components/ui/core/date-time-pickers/date-time-picker/index.d.ts +3 -1
  148. package/dist/components/ui/core/date-time-pickers/date-time-picker/index.js +3 -0
  149. package/dist/components/ui/core/date-time-pickers/date-time-picker/index.js.map +1 -0
  150. package/dist/components/ui/core/date-time-pickers/date-time-picker/types.d.ts +25 -32
  151. package/dist/components/ui/core/date-time-pickers/date-time-picker/types.js +3 -0
  152. package/dist/components/ui/core/date-time-pickers/date-time-picker/types.js.map +1 -0
  153. package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.d.ts +2 -2
  154. package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.js +78 -0
  155. package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.js.map +1 -0
  156. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.d.ts +13 -15
  157. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.js +165 -119
  158. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.js.map +1 -0
  159. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.d.ts +3 -3
  160. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.js +3 -0
  161. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.js.map +1 -0
  162. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.d.ts +37 -37
  163. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.js +3 -0
  164. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.js.map +1 -0
  165. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.d.ts +3 -3
  166. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.js +163 -104
  167. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.js.map +1 -0
  168. package/dist/components/ui/core/date-time-pickers/index.d.ts +17 -12
  169. package/dist/components/ui/core/date-time-pickers/index.js +10 -6
  170. package/dist/components/ui/core/date-time-pickers/index.js.map +1 -0
  171. package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.d.ts +5 -5
  172. package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.js +52 -42
  173. package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.js.map +1 -0
  174. package/dist/components/ui/core/date-time-pickers/shared/constants.d.ts +6 -1
  175. package/dist/components/ui/core/date-time-pickers/shared/constants.js +23 -0
  176. package/dist/components/ui/core/date-time-pickers/shared/constants.js.map +1 -0
  177. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.d.ts +16 -15
  178. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.js +87 -64
  179. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.js.map +1 -0
  180. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.d.ts +10 -9
  181. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.js +89 -38
  182. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.js.map +1 -0
  183. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.d.ts +5 -5
  184. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.js +34 -23
  185. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.js.map +1 -0
  186. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.d.ts +23 -23
  187. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.js +95 -52
  188. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.js.map +1 -0
  189. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.d.ts +5 -5
  190. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.js +22 -18
  191. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.js.map +1 -0
  192. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.d.ts +19 -19
  193. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.js +41 -24
  194. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.js.map +1 -0
  195. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.d.ts +13 -13
  196. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.js +33 -24
  197. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.js.map +1 -0
  198. package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.d.ts +5 -5
  199. package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.js +9 -4
  200. package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.js.map +1 -0
  201. package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.d.ts +13 -9
  202. package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.js +22 -17
  203. package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.js.map +1 -0
  204. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.d.ts +2 -2
  205. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.js +3 -0
  206. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.js.map +1 -0
  207. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.d.ts +13 -13
  208. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.js +49 -40
  209. package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.js.map +1 -0
  210. package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.d.ts +7 -7
  211. package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.js +41 -34
  212. package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.js.map +1 -0
  213. package/dist/components/ui/core/date-time-pickers/time-picker/index.d.ts +3 -3
  214. package/dist/components/ui/core/date-time-pickers/time-picker/index.js +3 -0
  215. package/dist/components/ui/core/date-time-pickers/time-picker/index.js.map +1 -0
  216. package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.d.ts +12 -14
  217. package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.js +99 -79
  218. package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.js.map +1 -0
  219. package/dist/components/ui/core/date-time-pickers/time-picker/types.d.ts +20 -20
  220. package/dist/components/ui/core/date-time-pickers/time-picker/types.js +3 -0
  221. package/dist/components/ui/core/date-time-pickers/time-picker/types.js.map +1 -0
  222. package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.d.ts +2 -2
  223. package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.js +63 -41
  224. package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.js.map +1 -0
  225. package/dist/components/ui/core/date-time-pickers/time-range-picker/index.d.ts +3 -1
  226. package/dist/components/ui/core/date-time-pickers/time-range-picker/index.js +3 -0
  227. package/dist/components/ui/core/date-time-pickers/time-range-picker/index.js.map +1 -0
  228. package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.d.ts +14 -0
  229. package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.js +115 -0
  230. package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.js.map +1 -0
  231. package/dist/components/ui/core/date-time-pickers/time-range-picker/types.d.ts +30 -36
  232. package/dist/components/ui/core/date-time-pickers/time-range-picker/types.js +3 -0
  233. package/dist/components/ui/core/date-time-pickers/time-range-picker/types.js.map +1 -0
  234. package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.d.ts +2 -2
  235. package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.js +145 -0
  236. package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.js.map +1 -0
  237. package/dist/components/ui/core/date-time-pickers/utils/date-input.d.ts +56 -0
  238. package/dist/components/ui/core/date-time-pickers/utils/date-input.js +67 -0
  239. package/dist/components/ui/core/date-time-pickers/utils/date-input.js.map +1 -0
  240. package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.d.ts +18 -18
  241. package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.js +42 -0
  242. package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.js.map +1 -0
  243. package/dist/components/ui/core/date-time-pickers/utils/format-utils.d.ts +31 -29
  244. package/dist/components/ui/core/date-time-pickers/utils/format-utils.js +56 -0
  245. package/dist/components/ui/core/date-time-pickers/utils/format-utils.js.map +1 -0
  246. package/dist/components/ui/core/date-time-pickers/utils/segment-utils.d.ts +21 -21
  247. package/dist/components/ui/core/date-time-pickers/utils/segment-utils.js +170 -0
  248. package/dist/components/ui/core/date-time-pickers/utils/segment-utils.js.map +1 -0
  249. package/dist/components/ui/core/date-time-pickers/utils/time-utils.d.ts +28 -28
  250. package/dist/components/ui/core/date-time-pickers/utils/time-utils.js +88 -7
  251. package/dist/components/ui/core/date-time-pickers/utils/time-utils.js.map +1 -0
  252. package/dist/components/ui/core/date-time-pickers/utils/time-validation.d.ts +17 -17
  253. package/dist/components/ui/core/date-time-pickers/utils/time-validation.js +43 -0
  254. package/dist/components/ui/core/date-time-pickers/utils/time-validation.js.map +1 -0
  255. package/dist/components/ui/core/dialog/dialog.d.ts +12 -9
  256. package/dist/components/ui/core/dialog/dialog.js +90 -82
  257. package/dist/components/ui/core/dialog/dialog.js.map +1 -0
  258. package/dist/components/ui/core/dropdown-menu/dropdown-menu.d.ts +22 -19
  259. package/dist/components/ui/core/dropdown-menu/dropdown-menu.js +204 -149
  260. package/dist/components/ui/core/dropdown-menu/dropdown-menu.js.map +1 -0
  261. package/dist/components/ui/core/empty-state/empty-state.context.d.ts +4 -4
  262. package/dist/components/ui/core/empty-state/empty-state.context.js +8 -5
  263. package/dist/components/ui/core/empty-state/empty-state.context.js.map +1 -0
  264. package/dist/components/ui/core/empty-state/empty-state.d.ts +14 -14
  265. package/dist/components/ui/core/empty-state/empty-state.js +96 -82
  266. package/dist/components/ui/core/empty-state/empty-state.js.map +1 -0
  267. package/dist/components/ui/core/helper-text/helper-text.d.ts +7 -7
  268. package/dist/components/ui/core/helper-text/helper-text.js +55 -36
  269. package/dist/components/ui/core/helper-text/helper-text.js.map +1 -0
  270. package/dist/components/ui/core/hover-card/hover-card.d.ts +7 -6
  271. package/dist/components/ui/core/hover-card/hover-card.js +56 -52
  272. package/dist/components/ui/core/hover-card/hover-card.js.map +1 -0
  273. package/dist/components/ui/core/inline-citation/inline-citation.d.ts +26 -25
  274. package/dist/components/ui/core/inline-citation/inline-citation.js +121 -97
  275. package/dist/components/ui/core/inline-citation/inline-citation.js.map +1 -0
  276. package/dist/components/ui/core/input/input.d.ts +2 -2
  277. package/dist/components/ui/core/input/input.js +15 -13
  278. package/dist/components/ui/core/input/input.js.map +1 -0
  279. package/dist/components/ui/core/input-group/input-group.d.ts +25 -14
  280. package/dist/components/ui/core/input-group/input-group.js +149 -76
  281. package/dist/components/ui/core/input-group/input-group.js.map +1 -0
  282. package/dist/components/ui/core/item/item.d.ts +20 -0
  283. package/dist/components/ui/core/item/item.js +93 -0
  284. package/dist/components/ui/core/item/item.js.map +1 -0
  285. package/dist/components/ui/core/kbd/kbd.d.ts +3 -3
  286. package/dist/components/ui/core/kbd/kbd.js +24 -20
  287. package/dist/components/ui/core/kbd/kbd.js.map +1 -0
  288. package/dist/components/ui/core/label/label.d.ts +3 -3
  289. package/dist/components/ui/core/label/label.js +33 -26
  290. package/dist/components/ui/core/label/label.js.map +1 -0
  291. package/dist/components/ui/core/loader/loader.d.ts +6 -6
  292. package/dist/components/ui/core/loader/loader.js +97 -80
  293. package/dist/components/ui/core/loader/loader.js.map +1 -0
  294. package/dist/components/ui/core/message/message-response-default-streamdown-controls.d.ts +9 -9
  295. package/dist/components/ui/core/message/message-response-default-streamdown-controls.js +19 -12
  296. package/dist/components/ui/core/message/message-response-default-streamdown-controls.js.map +1 -0
  297. package/dist/components/ui/core/message/message-response-math-plugin.d.ts +3 -0
  298. package/dist/components/ui/core/message/message-response-math-plugin.js +6 -0
  299. package/dist/components/ui/core/message/message-response-math-plugin.js.map +1 -0
  300. package/dist/components/ui/core/message/message.d.ts +27 -23
  301. package/dist/components/ui/core/message/message.js +453 -316
  302. package/dist/components/ui/core/message/message.js.map +1 -0
  303. package/dist/components/ui/core/overflow-list/overflow-list.d.ts +21 -0
  304. package/dist/components/ui/core/overflow-list/overflow-list.js +197 -0
  305. package/dist/components/ui/core/overflow-list/overflow-list.js.map +1 -0
  306. package/dist/components/ui/core/overflow-list/overflow-list.utils.d.ts +37 -35
  307. package/dist/components/ui/core/overflow-list/overflow-list.utils.js +206 -0
  308. package/dist/components/ui/core/overflow-list/overflow-list.utils.js.map +1 -0
  309. package/dist/components/ui/core/pagination/pagination-size-context.d.ts +2 -2
  310. package/dist/components/ui/core/pagination/pagination-size-context.js +6 -5
  311. package/dist/components/ui/core/pagination/pagination-size-context.js.map +1 -0
  312. package/dist/components/ui/core/pagination/pagination-teleport.d.ts +9 -9
  313. package/dist/components/ui/core/pagination/pagination-teleport.js +127 -84
  314. package/dist/components/ui/core/pagination/pagination-teleport.js.map +1 -0
  315. package/dist/components/ui/core/pagination/pagination-teleport.utils.js +6 -6
  316. package/dist/components/ui/core/pagination/pagination-teleport.utils.js.map +1 -0
  317. package/dist/components/ui/core/pagination/pagination.d.ts +39 -39
  318. package/dist/components/ui/core/pagination/pagination.js +294 -234
  319. package/dist/components/ui/core/pagination/pagination.js.map +1 -0
  320. package/dist/components/ui/core/popover/popover.d.ts +12 -11
  321. package/dist/components/ui/core/popover/popover.js +104 -89
  322. package/dist/components/ui/core/popover/popover.js.map +1 -0
  323. package/dist/components/ui/core/progress/progress.d.ts +9 -8
  324. package/dist/components/ui/core/progress/progress.js +50 -35
  325. package/dist/components/ui/core/progress/progress.js.map +1 -0
  326. package/dist/components/ui/core/prompt-input/prompt-input.d.ts +27 -27
  327. package/dist/components/ui/core/prompt-input/prompt-input.js +342 -271
  328. package/dist/components/ui/core/prompt-input/prompt-input.js.map +1 -0
  329. package/dist/components/ui/core/radio-group/radio-group.d.ts +12 -12
  330. package/dist/components/ui/core/radio-group/radio-group.js +88 -58
  331. package/dist/components/ui/core/radio-group/radio-group.js.map +1 -0
  332. package/dist/components/ui/core/reasoning/reasoning.d.ts +7 -7
  333. package/dist/components/ui/core/reasoning/reasoning.js +68 -56
  334. package/dist/components/ui/core/reasoning/reasoning.js.map +1 -0
  335. package/dist/components/ui/core/scroll-area/scroll-area.d.ts +4 -4
  336. package/dist/components/ui/core/scroll-area/scroll-area.js +50 -40
  337. package/dist/components/ui/core/scroll-area/scroll-area.js.map +1 -0
  338. package/dist/components/ui/core/search/search.d.ts +8 -8
  339. package/dist/components/ui/core/search/search.js +122 -76
  340. package/dist/components/ui/core/search/search.js.map +1 -0
  341. package/dist/components/ui/core/segmented-control/segmented-control.d.ts +17 -11
  342. package/dist/components/ui/core/segmented-control/segmented-control.js +204 -108
  343. package/dist/components/ui/core/segmented-control/segmented-control.js.map +1 -0
  344. package/dist/components/ui/core/select/select.d.ts +27 -26
  345. package/dist/components/ui/core/select/select.js +213 -168
  346. package/dist/components/ui/core/select/select.js.map +1 -0
  347. package/dist/components/ui/core/separator/separator.d.ts +2 -2
  348. package/dist/components/ui/core/separator/separator.js +13 -13
  349. package/dist/components/ui/core/separator/separator.js.map +1 -0
  350. package/dist/components/ui/core/shimmer/shimmer.d.ts +8 -8
  351. package/dist/components/ui/core/shimmer/shimmer.js +64 -40
  352. package/dist/components/ui/core/shimmer/shimmer.js.map +1 -0
  353. package/dist/components/ui/core/skeleton/skeleton.d.ts +2 -2
  354. package/dist/components/ui/core/skeleton/skeleton.js +13 -13
  355. package/dist/components/ui/core/skeleton/skeleton.js.map +1 -0
  356. package/dist/components/ui/core/slider/slider.d.ts +7 -7
  357. package/dist/components/ui/core/slider/slider.js +51 -39
  358. package/dist/components/ui/core/slider/slider.js.map +1 -0
  359. package/dist/components/ui/core/sonner-toast/sonner-toast.d.ts +2 -2
  360. package/dist/components/ui/core/sonner-toast/sonner-toast.js +67 -54
  361. package/dist/components/ui/core/sonner-toast/sonner-toast.js.map +1 -0
  362. package/dist/components/ui/core/sources/sources.d.ts +12 -12
  363. package/dist/components/ui/core/sources/sources.js +87 -58
  364. package/dist/components/ui/core/sources/sources.js.map +1 -0
  365. package/dist/components/ui/core/switch/switch.d.ts +9 -9
  366. package/dist/components/ui/core/switch/switch.js +83 -61
  367. package/dist/components/ui/core/switch/switch.js.map +1 -0
  368. package/dist/components/ui/core/switch/switch.metadata.d.ts +1 -1
  369. package/dist/components/ui/core/switch/switch.metadata.js +8 -0
  370. package/dist/components/ui/core/switch/switch.metadata.js.map +1 -0
  371. package/dist/components/ui/core/tabs/tabs.d.ts +20 -18
  372. package/dist/components/ui/core/tabs/tabs.js +176 -147
  373. package/dist/components/ui/core/tabs/tabs.js.map +1 -0
  374. package/dist/components/ui/core/tabs/tabs.utils.d.ts +1 -1
  375. package/dist/components/ui/core/tabs/tabs.utils.js +10 -6
  376. package/dist/components/ui/core/tabs/tabs.utils.js.map +1 -0
  377. package/dist/components/ui/core/textarea/textarea.d.ts +2 -2
  378. package/dist/components/ui/core/textarea/textarea.js +13 -13
  379. package/dist/components/ui/core/textarea/textarea.js.map +1 -0
  380. package/dist/components/ui/core/toggle/toggle.d.ts +9 -9
  381. package/dist/components/ui/core/toggle/toggle.js +60 -54
  382. package/dist/components/ui/core/toggle/toggle.js.map +1 -0
  383. package/dist/components/ui/core/tool/tool.d.ts +18 -18
  384. package/dist/components/ui/core/tool/tool.js +167 -126
  385. package/dist/components/ui/core/tool/tool.js.map +1 -0
  386. package/dist/components/ui/core/toolbar/toolbar.d.ts +37 -0
  387. package/dist/components/ui/core/toolbar/toolbar.js +171 -0
  388. package/dist/components/ui/core/toolbar/toolbar.js.map +1 -0
  389. package/dist/components/ui/core/tooltip/tooltip.d.ts +8 -7
  390. package/dist/components/ui/core/tooltip/tooltip.js +53 -46
  391. package/dist/components/ui/core/tooltip/tooltip.js.map +1 -0
  392. package/dist/components/ui/core/topbar/topbar.d.ts +26 -26
  393. package/dist/components/ui/core/topbar/topbar.js +160 -105
  394. package/dist/components/ui/core/topbar/topbar.js.map +1 -0
  395. package/dist/components/ui/core/tree/tree.d.ts +20 -0
  396. package/dist/components/ui/core/tree/tree.js +100 -0
  397. package/dist/components/ui/core/tree/tree.js.map +1 -0
  398. package/dist/eslint/index.d.ts +5 -5
  399. package/dist/eslint/index.js +9 -5
  400. package/dist/eslint/index.js.map +1 -0
  401. package/dist/eslint/no-overriding-styles.d.ts +1 -1
  402. package/dist/eslint/no-overriding-styles.js +341 -201
  403. package/dist/eslint/no-overriding-styles.js.map +1 -0
  404. package/dist/icons/index.d.ts +1 -1
  405. package/dist/icons/index.js +2 -0
  406. package/dist/icons/index.js.map +1 -0
  407. package/dist/index.d.ts +1 -1
  408. package/dist/index.js +3 -0
  409. package/dist/index.js.map +1 -0
  410. package/dist/lib/ai/types.d.ts +43 -43
  411. package/dist/lib/ai/types.js +3 -0
  412. package/dist/lib/ai/types.js.map +1 -0
  413. package/dist/lib/decorative-variant-classes.d.ts +53 -0
  414. package/dist/lib/decorative-variant-classes.js +58 -0
  415. package/dist/lib/decorative-variant-classes.js.map +1 -0
  416. package/dist/lib/highlight-code.d.ts +11 -8
  417. package/dist/lib/highlight-code.js +58 -40
  418. package/dist/lib/highlight-code.js.map +1 -0
  419. package/dist/lib/portal-container-context.d.ts +1 -1
  420. package/dist/lib/portal-container-context.js +8 -8
  421. package/dist/lib/portal-container-context.js.map +1 -0
  422. package/dist/lib/shared-theme-from-url.d.ts +13 -0
  423. package/dist/lib/shared-theme-from-url.js +61 -0
  424. package/dist/lib/shared-theme-from-url.js.map +1 -0
  425. package/dist/lib/style-scope.d.ts +2 -2
  426. package/dist/lib/style-scope.js +6 -6
  427. package/dist/lib/style-scope.js.map +1 -0
  428. package/dist/lib/theme-share-url.d.ts +31 -0
  429. package/dist/lib/theme-share-url.js +116 -0
  430. package/dist/lib/theme-share-url.js.map +1 -0
  431. package/dist/lib/types.d.ts +39 -39
  432. package/dist/lib/types.js +3 -0
  433. package/dist/lib/types.js.map +1 -0
  434. package/dist/lib/use-controllable-state.d.ts +4 -7
  435. package/dist/lib/use-controllable-state.js +34 -21
  436. package/dist/lib/use-controllable-state.js.map +1 -0
  437. package/dist/lib/utils.d.ts +63 -34
  438. package/dist/lib/utils.js +134 -32
  439. package/dist/lib/utils.js.map +1 -0
  440. package/dist/styles.css +2 -1
  441. package/dist/styles.source.css +24 -12
  442. package/dist/utils/assign-ref.d.ts +3 -0
  443. package/dist/utils/assign-ref.js +13 -0
  444. package/dist/utils/assign-ref.js.map +1 -0
  445. package/package.json +50 -11
  446. package/src/components/ui/core/button/button.md +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/ui/core/message/message.tsx"],"sourcesContent":["import type {\n ComponentProps,\n HTMLAttributes,\n ReactElement,\n ReactNode,\n} from 'react';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { mermaid as mermaidPlugin } from '@streamdown/mermaid';\nimport {\n IconChevronLeft,\n IconChevronRight,\n IconPaperclip,\n IconX,\n} from '@tabler/icons-react';\nimport type { JSX } from 'react/jsx-runtime';\nimport type { Components, ExtraProps } from 'streamdown';\nimport { Streamdown } from 'streamdown';\n\nimport type { FileUIPart, UIMessage } from '../../../../lib/ai/types';\nimport { cn, getInitials } from '../../../../lib/utils';\nimport {\n Avatar,\n AvatarFallback,\n AvatarIcon,\n AvatarImage,\n} from '../avatar/avatar';\nimport { Button } from '../button/button';\nimport { ButtonGroup, ButtonGroupText } from '../button-group/button-group';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip/tooltip';\n\nimport { MESSAGE_RESPONSE_DEFAULT_STREAMDOWN_CONTROLS } from './message-response-default-streamdown-controls';\n\ntype MessageProps = HTMLAttributes<HTMLDivElement> & {\n isResponse?: boolean;\n};\n\nconst Message = ({\n className,\n isResponse = false,\n ...props\n}: MessageProps): ReactNode => (\n <div\n data-slot=\"message\"\n className={cn(\n 'group flex w-full items-start justify-start gap-3 mb-0 py-3',\n isResponse ? 'is-assistant items-start' : 'is-user flex-row-reverse',\n className\n )}\n {...props}\n />\n);\n\ntype MessageContentProps = HTMLAttributes<HTMLDivElement>;\n\nconst MessageContent = ({\n children,\n className,\n ...props\n}: MessageContentProps): ReactNode => (\n <div\n data-slot=\"message-content\"\n className={cn(\n 'is-user:dark flex flex-col gap-4 rounded-md text-base leading-tight tracking-tightest',\n 'max-w-4/5',\n 'group-[.is-user]:overflow-hidden group-[.is-user]:bg-medium-background group-[.is-user]:p-2 group-[.is-user]:text-base-foreground',\n 'group-[.is-assistant]:text-base-foreground group-[.is-assistant]:pt-1',\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\ntype MessageAvatarProps = ComponentProps<typeof Avatar> & {\n avatarUrl?: string;\n name?: string;\n};\n\nconst MessageAvatar = ({\n avatarUrl,\n name,\n className,\n children,\n variant,\n sizes,\n ...props\n}: MessageAvatarProps): ReactNode => {\n const fallbackText = name ? getInitials(name) : 'ME';\n\n return (\n <Avatar\n data-slot=\"message-avatar\"\n className={cn('size-7 group-[.is-user]:mt-1', className)}\n variant={variant}\n sizes={sizes}\n {...props}\n >\n {children || (\n <>\n {avatarUrl && (\n <AvatarImage\n alt={name || ''}\n className=\"mt-0 mb-0\"\n src={avatarUrl}\n />\n )}\n <AvatarFallback>{fallbackText}</AvatarFallback>\n </>\n )}\n </Avatar>\n );\n};\n\ntype MessageAvatarIconProps = ComponentProps<typeof AvatarIcon>;\n\nconst MessageAvatarIcon = (props: MessageAvatarIconProps): ReactNode => (\n <AvatarIcon data-slot=\"message-avatar-icon\" {...props} />\n);\n\ntype MessageActionsProps = ComponentProps<'div'>;\n\nconst MessageActions = ({\n className,\n children,\n ...props\n}: MessageActionsProps): ReactNode => (\n <div\n data-slot=\"message-actions\"\n className={cn('flex items-center gap-2 pt-2', className)}\n {...props}\n >\n {children}\n </div>\n);\n\ntype MessageActionProps = ComponentProps<typeof Button> & {\n tooltip?: string;\n label?: string;\n};\n\nconst MessageAction = ({\n tooltip,\n children,\n label,\n className,\n variant = 'ghost',\n size = 'sm',\n ...props\n}: MessageActionProps): ReactNode => {\n const button = (\n <Button\n data-slot=\"message-action\"\n className={cn(\n 'relative icon-sm text-muted-foreground hover:text-base-foreground',\n className\n )}\n size={size}\n type=\"button\"\n variant={variant}\n {...props}\n >\n {children}\n <span className=\"sr-only\">{label || tooltip}</span>\n </Button>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger render={button} />\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n};\n\ntype MessageBranchContextType = {\n currentBranch: number;\n totalBranches: number;\n goToPrevious: () => void;\n goToNext: () => void;\n branches: ReactElement[];\n setBranches: (branches: ReactElement[]) => void;\n};\n\nconst MessageBranchContext = createContext<MessageBranchContextType | null>(\n null\n);\n\nconst useMessageBranch = () => {\n const context = useContext(MessageBranchContext);\n\n if (!context) {\n throw new Error(\n 'MessageBranch components must be used within MessageBranch'\n );\n }\n\n return context;\n};\n\ntype MessageBranchProps = HTMLAttributes<HTMLDivElement> & {\n defaultBranch?: number;\n onBranchChange?: (branchIndex: number) => void;\n};\n\nconst MessageBranch = ({\n defaultBranch = 0,\n onBranchChange,\n className,\n ...props\n}: MessageBranchProps): ReactNode => {\n const [currentBranch, setCurrentBranch] = useState(defaultBranch);\n const [branches, setBranches] = useState<ReactElement[]>([]);\n\n const goToPrevious = useCallback(() => {\n setCurrentBranch((prev) => {\n const newBranch = prev > 0 ? prev - 1 : branches.length - 1;\n onBranchChange?.(newBranch);\n return newBranch;\n });\n }, [branches.length, onBranchChange]);\n\n const goToNext = useCallback(() => {\n setCurrentBranch((prev) => {\n const newBranch = prev < branches.length - 1 ? prev + 1 : 0;\n onBranchChange?.(newBranch);\n return newBranch;\n });\n }, [branches.length, onBranchChange]);\n\n const contextValue = useMemo<MessageBranchContextType>(\n () => ({\n currentBranch,\n totalBranches: branches.length,\n goToPrevious,\n goToNext,\n branches,\n setBranches,\n }),\n [currentBranch, branches, goToPrevious, goToNext, setBranches]\n );\n\n return (\n <MessageBranchContext.Provider value={contextValue}>\n <div\n data-slot=\"message-branch\"\n className={cn('grid w-full gap-2 [&>div]:pb-0', className)}\n {...props}\n />\n </MessageBranchContext.Provider>\n );\n};\n\ntype MessageBranchContentProps = HTMLAttributes<HTMLDivElement>;\n\nconst MessageBranchContent = ({\n children,\n ...props\n}: MessageBranchContentProps): ReactNode[] => {\n const { currentBranch, setBranches, branches } = useMessageBranch();\n const childrenArray = useMemo(\n () => (Array.isArray(children) ? children : [children]),\n [children]\n );\n\n useEffect(() => {\n if (branches.length !== childrenArray.length) {\n setBranches(childrenArray);\n }\n }, [childrenArray, branches, setBranches]);\n\n return childrenArray.map((branch, index) => (\n <div\n data-slot=\"message-branch-content\"\n className={cn(\n 'grid gap-2 overflow-hidden [&>div]:pb-0',\n index === currentBranch ? 'block' : 'hidden'\n )}\n key={branch.key}\n {...props}\n >\n {branch}\n </div>\n ));\n};\n\ntype MessageBranchSelectorProps = HTMLAttributes<HTMLDivElement> & {\n from: UIMessage['role'];\n};\n\nconst MessageBranchSelector = ({\n ...props\n}: MessageBranchSelectorProps): ReactNode => {\n const { totalBranches } = useMessageBranch();\n\n if (totalBranches <= 1) {\n return null;\n }\n\n return (\n <ButtonGroup\n data-slot=\"message-branch-selector\"\n className=\"[&>*:not(:first-child)]:rounded-l-md [&>*:not(:last-child)]:rounded-r-md\"\n orientation=\"horizontal\"\n {...props}\n />\n );\n};\n\ntype MessageBranchPreviousProps = ComponentProps<typeof Button>;\n\nconst MessageBranchPrevious = ({\n children,\n ...props\n}: MessageBranchPreviousProps): ReactNode => {\n const { goToPrevious, totalBranches } = useMessageBranch();\n\n return (\n <Button\n data-slot=\"message-branch-previous\"\n aria-label=\"Previous branch\"\n disabled={totalBranches <= 1}\n onClick={goToPrevious}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <IconChevronLeft size={14} />}\n </Button>\n );\n};\n\ntype MessageBranchNextProps = ComponentProps<typeof Button>;\n\nconst MessageBranchNext = ({\n children,\n ...props\n}: MessageBranchNextProps): ReactNode => {\n const { goToNext, totalBranches } = useMessageBranch();\n\n return (\n <Button\n data-slot=\"message-branch-next\"\n aria-label=\"Next branch\"\n disabled={totalBranches <= 1}\n onClick={goToNext}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <IconChevronRight size={14} />}\n </Button>\n );\n};\n\ntype MessageBranchPageProps = HTMLAttributes<HTMLSpanElement>;\n\nconst MessageBranchPage = ({\n className,\n ...props\n}: MessageBranchPageProps): ReactNode => {\n const { currentBranch, totalBranches } = useMessageBranch();\n\n return (\n <ButtonGroupText\n data-slot=\"message-branch-page\"\n className={cn(\n 'border-none bg-transparent text-muted-foreground shadow-none px-2',\n className\n )}\n {...props}\n >\n {currentBranch + 1}/{totalBranches}\n </ButtonGroupText>\n );\n};\n\n/** Streamdown discards unrecognised props, so these go on a wrapper instead. */\ntype MessageResponseHostProps = Pick<\n HTMLAttributes<HTMLDivElement>,\n 'id' | 'role' | 'aria-label' | 'aria-labelledby' | 'aria-describedby'\n> & {\n 'data-testid'?: string;\n};\n\ntype MessageResponseProps = ComponentProps<typeof Streamdown> &\n MessageResponseHostProps;\n\ntype MarkdownComponentProps<T extends keyof JSX.IntrinsicElements> =\n JSX.IntrinsicElements[T] & ExtraProps;\n\nconst messageResponseComponents: Components = {\n h1: ({ children }: MarkdownComponentProps<'h1'>) => (\n <h1 className=\"mt-0 mb-2 scroll-m-20 text-xl font-medium tracking-tightest\">\n {children}\n </h1>\n ),\n h2: ({ children }: MarkdownComponentProps<'h2'>) => (\n <h2 className=\"mt-4 mb-1 scroll-m-20 text-lg font-medium tracking-tightest\">\n {children}\n </h2>\n ),\n h3: ({ children }: MarkdownComponentProps<'h3'>) => (\n <h3 className=\"mt-4 mb-1 scroll-m-20 text-base font-medium tracking-tighter\">\n {children}\n </h3>\n ),\n h4: ({ children }: MarkdownComponentProps<'h4'>) => (\n <h4 className=\"mt-2 mb-0 scroll-m-20 text-sm font-medium tracking-normal\">\n {children}\n </h4>\n ),\n h5: ({ children }: MarkdownComponentProps<'h5'>) => (\n <h5 className=\"mt-0 mb-0 scroll-m-20 text-xs font-medium tracking-tighter\">\n {children}\n </h5>\n ),\n h6: ({ children }: MarkdownComponentProps<'h6'>) => (\n <h6 className=\"mt-0 mb-0 scroll-m-20 text-2xs font-medium tracking-tighter\">\n {children}\n </h6>\n ),\n p: ({ children }: MarkdownComponentProps<'p'>) => (\n <p className=\"mt-2 mb-3 text-base font-normal leading-5 tracking-tightest\">\n {children}\n </p>\n ),\n strong: ({ children }: MarkdownComponentProps<'strong'>) => (\n <strong className=\"font-medium\">{children}</strong>\n ),\n em: ({ children }: MarkdownComponentProps<'em'>) => (\n <em className=\"italic\">{children}</em>\n ),\n b: ({ children }: MarkdownComponentProps<'b'>) => (\n <b className=\"font-medium\">{children}</b>\n ),\n i: ({ children }: MarkdownComponentProps<'i'>) => (\n <i className=\"italic\">{children}</i>\n ),\n ul: ({ children }: MarkdownComponentProps<'ul'>) => (\n <ul className=\"ml-8.25 mb-3 pt-2 pl-0 pb-0 list-disc text-base font-normal tracking-tightest\">\n {children}\n </ul>\n ),\n ol: ({ children }: MarkdownComponentProps<'ol'>) => (\n <ol className=\"ml-8.25 mb-3 pt-2 pl-0 pb-0 list-decimal text-base font-normal tracking-tightest\">\n {children}\n </ol>\n ),\n li: ({ children }: MarkdownComponentProps<'li'>) => (\n <li className=\"py-0\">{children}</li>\n ),\n blockquote: ({ children }: MarkdownComponentProps<'blockquote'>) => (\n <blockquote className=\"my-3 pr-2 pl-2 border-l border-l-default text-sm text-muted-foreground font-normal tracking-tight not-italic\">\n {children}\n </blockquote>\n ),\n hr: () => <hr className=\"my-4 border-default\" />,\n a: ({ children, href, ...props }: MarkdownComponentProps<'a'>) => (\n <a\n className=\"text-link-foreground no-underline hover:underline underline-offset-4\"\n href={href}\n {...props}\n >\n {children}\n </a>\n ),\n table: ({ children }: MarkdownComponentProps<'table'>) => (\n <div\n className=\"my-6 overflow-x-auto\"\n tabIndex={0}\n role=\"group\"\n aria-label=\"Atlas AI Chat Table\"\n >\n <table className=\"w-full\">{children}</table>\n </div>\n ),\n thead: ({ children }: MarkdownComponentProps<'thead'>) => (\n <thead>{children}</thead>\n ),\n tbody: ({ children }: MarkdownComponentProps<'tbody'>) => (\n <tbody>{children}</tbody>\n ),\n tr: ({ children }: MarkdownComponentProps<'tr'>) => (\n <tr className=\"m-0 border-t p-0 even:bg-muted-background\">{children}</tr>\n ),\n th: ({ children }: MarkdownComponentProps<'th'>) => (\n <th className=\"border px-4 py-2 text-left font-bold\">{children}</th>\n ),\n td: ({ children }: MarkdownComponentProps<'td'>) => (\n <td className=\"border px-4 py-2 text-left\">{children}</td>\n ),\n};\n\nconst MessageResponseMarkdown = ({\n className,\n components,\n plugins,\n controls,\n ...props\n}: ComponentProps<typeof Streamdown>): JSX.Element => (\n <Streamdown\n className={cn(\n 'size-full',\n // Blockquote paragraph overrides\n '[&_blockquote_p]:text-sm',\n '[&_blockquote_p]:tracking-tight',\n // Inline code\n '[&_code]:relative',\n '[&_code]:rounded',\n '[&_code]:bg-muted-background',\n '[&_code]:px-[0.3rem]',\n '[&_code]:py-[0.2rem]',\n '[&_code]:font-mono',\n '[&_code]:text-sm',\n '[&_code]:font-semibold',\n // Code blocks (Streamdown container)\n '[&_div[data-streamdown=\"code-block\"]]:my-4',\n '[&_div[data-streamdown=\"code-block\"]]:w-full',\n '[&_div[data-streamdown=\"code-block\"]]:overflow-hidden',\n '[&_div[data-streamdown=\"code-block\"]]:rounded-xl',\n '[&_div[data-streamdown=\"code-block\"]]:border',\n '[&_div[data-streamdown=\"code-block\"]]:border-default',\n // Code block header\n '[&_div[data-streamdown=\"code-block-header\"]]:flex',\n '[&_div[data-streamdown=\"code-block-header\"]]:items-center',\n '[&_div[data-streamdown=\"code-block-header\"]]:justify-between',\n '[&_div[data-streamdown=\"code-block-header\"]]:bg-muted-background/80',\n '[&_div[data-streamdown=\"code-block-header\"]]:px-4',\n '[&_div[data-streamdown=\"code-block-header\"]]:py-3',\n '[&_div[data-streamdown=\"code-block-header\"]]:text-xs',\n '[&_div[data-streamdown=\"code-block-header\"]]:text-muted-foreground',\n // Pre element inside code block\n '[&_div[data-streamdown=\"code-block\"]_pre]:m-0',\n '[&_div[data-streamdown=\"code-block\"]_pre]:overflow-x-auto',\n '[&_div[data-streamdown=\"code-block\"]_pre]:border-t',\n '[&_div[data-streamdown=\"code-block\"]_pre]:border-default',\n '[&_div[data-streamdown=\"code-block\"]_pre]:bg-card-background!',\n '[&_div[data-streamdown=\"code-block\"]_pre]:p-4',\n '[&_div[data-streamdown=\"code-block\"]_pre]:text-sm',\n '[&_div[data-streamdown=\"code-block\"]_pre]:text-medium-foreground!',\n // Code element inside pre\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:static',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:rounded-none',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:bg-transparent',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:p-0',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:font-mono',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:text-sm',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:font-normal',\n // Code block buttons\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:cursor-pointer',\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:p-1',\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:text-muted-foreground',\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:transition-all',\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:hover:text-base-foreground',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:cursor-pointer',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:p-1',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:text-muted-foreground',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:transition-all',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:hover:text-base-foreground',\n // Regular pre blocks (not in Streamdown code blocks)\n '[&_pre:not([data-streamdown])]:my-3',\n '[&_pre:not([data-streamdown])]:mx-0',\n '[&_pre:not([data-streamdown])]:overflow-x-auto',\n '[&_pre:not([data-streamdown])]:rounded-md',\n '[&_pre:not([data-streamdown])]:border',\n '[&_pre:not([data-streamdown])]:bg-card-background',\n '[&_pre:not([data-streamdown])]:p-4',\n '[&_pre:not([data-streamdown])]:text-medium-foreground',\n '[&_pre:not([data-streamdown])]:text-sm',\n '[&_pre:not([data-streamdown])_code]:static',\n '[&_pre:not([data-streamdown])_code]:rounded-none',\n '[&_pre:not([data-streamdown])_code]:bg-transparent',\n '[&_pre:not([data-streamdown])_code]:px-0',\n '[&_pre:not([data-streamdown])_code]:py-0',\n '[&_pre:not([data-streamdown])_code]:font-mono',\n '[&_pre:not([data-streamdown])_code]:text-sm',\n '[&_pre:not([data-streamdown])_code]:font-normal',\n // Mermaid diagram blocks\n '[&_div[data-streamdown=\"mermaid-block\"]]:bg-card-background',\n '[&_div[data-streamdown=\"mermaid-block\"]]:text-base-foreground',\n '[&_div[data-streamdown=\"mermaid-block\"]]:flex',\n '[&_div[data-streamdown=\"mermaid-block\"]]:flex-col',\n '[&_div[data-streamdown=\"mermaid-block\"]]:rounded-lg',\n '[&_div[data-streamdown=\"mermaid-block\"]]:hover:bg-base-background-hover',\n '[&_div[data-streamdown=\"mermaid-block\"]]:border-0',\n // Positioning context for the action strip (see below)\n '[&_div[data-streamdown=\"mermaid-block\"]]:relative',\n // Nested scroll + sticky + pointer-events breaks hit-testing on Mermaid Copy/Download\n // (same class of issue as github.com/vercel/streamdown/issues/494). Force absolute strip.\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!absolute',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!top-2',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!right-2',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!z-10',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!mt-0',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!pointer-events-auto',\n // Ensure mermaid container is tall enough for the toolbar (pan/zoom + actions)\n '[&_div[data-streamdown=\"mermaid-block\"]_.relative.w-full]:!min-h-28',\n // KaTeX sizing (overflow rules live in styles.source.css)\n '[&_.katex-display]:my-3',\n '[&_.katex]:text-[1em]',\n // First and last child margin resets\n '[&>*:first-child]:mt-0',\n '[&>*:last-child]:mb-0',\n className\n )}\n components={{ ...messageResponseComponents, ...components }}\n controls={controls ?? MESSAGE_RESPONSE_DEFAULT_STREAMDOWN_CONTROLS}\n plugins={{ ...plugins, mermaid: mermaidPlugin }}\n {...props}\n />\n);\n\nconst MessageResponse = ({\n id,\n role,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n 'data-testid': dataTestId,\n ...props\n}: MessageResponseProps): JSX.Element => (\n <div\n data-slot=\"message-response\"\n id={id}\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n data-testid={dataTestId}\n >\n <MessageResponseMarkdown {...props} />\n </div>\n);\n\ntype MessageAttachmentProps = HTMLAttributes<HTMLDivElement> & {\n data: FileUIPart;\n className?: string;\n onRemove?: () => void;\n};\n\nfunction MessageAttachment({\n data,\n className,\n onRemove,\n ...props\n}: MessageAttachmentProps): ReactNode {\n const filename = data.filename || '';\n const mediaType =\n data.mediaType?.startsWith('image/') && data.url ? 'image' : 'file';\n const isImage = mediaType === 'image';\n const attachmentLabel = filename || (isImage ? 'Image' : 'Attachment');\n\n return (\n <div\n data-slot=\"message-attachment\"\n className={cn(\n 'group relative size-24 overflow-hidden rounded-lg',\n className\n )}\n {...props}\n >\n {isImage ? (\n <>\n <img\n alt={filename || 'attachment'}\n className=\"size-full object-cover\"\n height={100}\n src={data.url}\n width={100}\n />\n {onRemove && (\n <Button\n aria-label=\"Remove attachment\"\n className=\"absolute top-2 right-2 size-6 rounded-full bg-card-background/80 p-0 opacity-0 backdrop-blur-sm transition-opacity hover:bg-card-background group-hover:opacity-100 [&>svg]:size-3\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n type=\"button\"\n variant=\"ghost\"\n >\n <IconX />\n <span className=\"sr-only\">Remove</span>\n </Button>\n )}\n </>\n ) : (\n <>\n <Tooltip>\n <TooltipTrigger\n render={\n <div className=\"flex size-full shrink-0 items-center justify-center rounded-lg bg-muted-background text-muted-foreground\">\n <IconPaperclip className=\"size-4\" />\n </div>\n }\n />\n <TooltipContent>\n <p>{attachmentLabel}</p>\n </TooltipContent>\n </Tooltip>\n {onRemove && (\n <Button\n aria-label=\"Remove attachment\"\n className=\"size-6 shrink-0 rounded-full p-0 opacity-0 transition-opacity hover:bg-base-background-hover group-hover:opacity-100 [&>svg]:size-3\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n type=\"button\"\n variant=\"ghost\"\n >\n <IconX />\n <span className=\"sr-only\">Remove</span>\n </Button>\n )}\n </>\n )}\n </div>\n );\n}\n\ntype MessageAttachmentsProps = ComponentProps<'div'>;\n\nfunction MessageAttachments({\n children,\n className,\n ...props\n}: MessageAttachmentsProps): ReactNode {\n if (!children) {\n return null;\n }\n\n return (\n <div\n data-slot=\"message-attachments\"\n className={cn(\n 'ml-auto flex w-fit flex-wrap items-start gap-2',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\ntype MessageToolbarProps = ComponentProps<'div'>;\n\nconst MessageToolbar = ({\n className,\n children,\n ...props\n}: MessageToolbarProps): ReactNode => (\n <div\n data-slot=\"message-toolbar\"\n className={cn(\n 'mt-4 flex w-full items-center justify-between gap-4',\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport {\n Message,\n MessageAction,\n MessageActions,\n MessageAttachment,\n MessageAttachments,\n MessageAvatar,\n MessageAvatarIcon,\n MessageBranch,\n MessageBranchContent,\n MessageBranchNext,\n MessageBranchPage,\n MessageBranchPrevious,\n MessageBranchSelector,\n MessageContent,\n MessageResponse,\n MessageToolbar,\n};\n"],"names":["createContext","useCallback","useContext","useEffect","useMemo","useState","mermaid","mermaidPlugin","IconChevronLeft","IconChevronRight","IconPaperclip","IconX","Streamdown","cn","getInitials","Avatar","AvatarFallback","AvatarIcon","AvatarImage","Button","ButtonGroup","ButtonGroupText","Tooltip","TooltipContent","TooltipTrigger","MESSAGE_RESPONSE_DEFAULT_STREAMDOWN_CONTROLS","Message","className","isResponse","props","div","data-slot","MessageContent","children","MessageAvatar","avatarUrl","name","variant","sizes","fallbackText","alt","src","MessageAvatarIcon","MessageActions","MessageAction","tooltip","label","size","button","type","span","render","p","MessageBranchContext","useMessageBranch","context","Error","MessageBranch","defaultBranch","onBranchChange","currentBranch","setCurrentBranch","branches","setBranches","goToPrevious","prev","newBranch","length","goToNext","contextValue","totalBranches","Provider","value","MessageBranchContent","childrenArray","Array","isArray","map","branch","index","key","MessageBranchSelector","orientation","MessageBranchPrevious","aria-label","disabled","onClick","MessageBranchNext","MessageBranchPage","messageResponseComponents","h1","h2","h3","h4","h5","h6","strong","em","b","i","ul","ol","li","blockquote","hr","a","href","table","tabIndex","role","thead","tbody","tr","th","td","MessageResponseMarkdown","components","plugins","controls","MessageResponse","id","ariaLabel","ariaLabelledBy","ariaDescribedBy","dataTestId","aria-labelledby","aria-describedby","data-testid","MessageAttachment","data","onRemove","filename","mediaType","startsWith","url","isImage","attachmentLabel","img","height","width","e","stopPropagation","MessageAttachments","MessageToolbar"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ComponentRef, type ForwardRefExoticComponent, type JSX, type ReactNode, type RefAttributes } from "react";
2
+ import { type CollapseStrategy, type CollapseUnit, type OverflowComponent } from "./overflow-list.utils";
3
+ type OverflowMeasurement = {
4
+ size: number;
5
+ collapsedSize: number;
6
+ };
7
+ type OverflowListProps = {
8
+ children: ReactNode;
9
+ separator?: ReactNode;
10
+ collapseOrder: CollapseUnit[] | CollapseStrategy;
11
+ overflowComponent: OverflowComponent;
12
+ overflowPosition?: "auto" | "end";
13
+ orientation?: "horizontal" | "vertical";
14
+ as?: keyof JSX.IntrinsicElements;
15
+ lastItemMinVisibleRem?: number;
16
+ lastItemFlexibleSelector?: string;
17
+ className?: string;
18
+ onMeasure?: (measurement: OverflowMeasurement) => void;
19
+ };
20
+ declare const OverflowList: ForwardRefExoticComponent<OverflowListProps & RefAttributes<ComponentRef<"div">>>;
21
+ export { OverflowList, type OverflowListProps, type OverflowMeasurement };
@@ -0,0 +1,197 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Children, createElement, forwardRef, Fragment, isValidElement, useCallback, useLayoutEffect, useRef, useState } from "react";
3
+ import { cn } from "../../../../lib/utils.js";
4
+ import { assignRef } from "../../../../utils/assign-ref.js";
5
+ import { buildVisibleTokens, collapseStatesEqual, computeCollapsedMinWidth, computeCollapseState, getMeasurements, INITIAL_STATE, renderOverflow, resolveCollapseOrder, resolveInjectedElement } from "./overflow-list.utils.js";
6
+ function toValidElements(children) {
7
+ // eslint-disable-next-line @eslint-react/no-children-to-array -- OverflowList needs a stable, flattened array of elements to index into for collapse/resize math; Children.toArray is the only API that flattens fragments and assigns stable keys
8
+ return Children.toArray(children).filter((child)=>/*#__PURE__*/ isValidElement(child));
9
+ }
10
+ const OverflowList = /*#__PURE__*/ forwardRef(function OverflowList({ children, separator, collapseOrder, overflowComponent: Overflow, overflowPosition = 'auto', orientation = 'horizontal', as: ContentElement = 'div', lastItemMinVisibleRem, lastItemFlexibleSelector, className, onMeasure }, ref) {
11
+ const containerRef = useRef(null);
12
+ const setContainerRef = useCallback((el)=>{
13
+ assignRef(containerRef, el);
14
+ assignRef(ref, el);
15
+ }, [
16
+ ref
17
+ ]);
18
+ const measureRef = useRef(null);
19
+ const overflowMeasureRef = useRef(null);
20
+ const measurementsRef = useRef(null);
21
+ const [collapseState, setCollapseState] = useState(INITIAL_STATE);
22
+ const [minSize, setMinSize] = useState(0);
23
+ const minSizeRef = useRef(0);
24
+ const lastSizeRef = useRef(0);
25
+ const separatorRef = useRef(separator);
26
+ const orientationRef = useRef(orientation);
27
+ const onMeasureRef = useRef(onMeasure);
28
+ const lastItemMinVisibleRemRef = useRef(lastItemMinVisibleRem);
29
+ const lastItemFlexibleSelectorRef = useRef(lastItemFlexibleSelector);
30
+ const items = toValidElements(children);
31
+ const itemCount = items.length;
32
+ const resolvedOrder = resolveCollapseOrder(collapseOrder, itemCount);
33
+ const itemCountRef = useRef(itemCount);
34
+ const collapseOrderRef = useRef(resolvedOrder);
35
+ const collapseOrderKey = resolvedOrder.join(',');
36
+ useLayoutEffect(()=>{
37
+ separatorRef.current = separator;
38
+ itemCountRef.current = itemCount;
39
+ collapseOrderRef.current = resolvedOrder;
40
+ orientationRef.current = orientation;
41
+ onMeasureRef.current = onMeasure;
42
+ lastItemMinVisibleRemRef.current = lastItemMinVisibleRem;
43
+ lastItemFlexibleSelectorRef.current = lastItemFlexibleSelector;
44
+ });
45
+ // eslint-disable-next-line react-hooks/preserve-manual-memoization -- stable ref-based callback required for ResizeObserver; React Compiler cannot preserve this memoization
46
+ const measure = useCallback(()=>{
47
+ const measureEl = measureRef.current;
48
+ const overflowEl = overflowMeasureRef.current;
49
+ if (!measureEl || !overflowEl || itemCountRef.current === 0) {
50
+ measurementsRef.current = null;
51
+ setMinSize(0);
52
+ return null;
53
+ }
54
+ const measurements = getMeasurements(measureEl, overflowEl, !!separatorRef.current, orientationRef.current, lastItemFlexibleSelectorRef.current);
55
+ measurementsRef.current = measurements;
56
+ const collapsedMinWidth = Math.ceil(computeCollapsedMinWidth({
57
+ ...measurements,
58
+ collapseOrder: collapseOrderRef.current,
59
+ lastItemMinVisible: lastItemMinVisibleRemRef.current != null ? lastItemMinVisibleRemRef.current * parseFloat(getComputedStyle(document.documentElement).fontSize) : undefined
60
+ }));
61
+ minSizeRef.current = collapsedMinWidth;
62
+ setMinSize((prev)=>prev === collapsedMinWidth ? prev : collapsedMinWidth);
63
+ return measurements;
64
+ }, []);
65
+ // eslint-disable-next-line react-hooks/preserve-manual-memoization -- stable ref-based callback required for ResizeObserver; React Compiler cannot preserve this memoization
66
+ const recalculate = useCallback(()=>{
67
+ const container = containerRef.current;
68
+ if (!container) return;
69
+ const containerSize = orientationRef.current === 'vertical' ? container.getBoundingClientRect().height : container.getBoundingClientRect().width;
70
+ if (containerSize === 0 || containerSize === lastSizeRef.current) {
71
+ return;
72
+ }
73
+ lastSizeRef.current = containerSize;
74
+ if (itemCountRef.current === 0) {
75
+ setCollapseState(INITIAL_STATE);
76
+ onMeasureRef.current?.({
77
+ size: containerSize,
78
+ collapsedSize: 0
79
+ });
80
+ return;
81
+ }
82
+ const measurements = measurementsRef.current ?? measure();
83
+ if (!measurements) return;
84
+ const newState = computeCollapseState({
85
+ containerSize,
86
+ ...measurements,
87
+ collapseOrder: collapseOrderRef.current
88
+ });
89
+ setCollapseState((prev)=>collapseStatesEqual(prev, newState) ? prev : newState);
90
+ onMeasureRef.current?.({
91
+ size: containerSize,
92
+ collapsedSize: minSizeRef.current
93
+ });
94
+ }, [
95
+ measure
96
+ ]);
97
+ useLayoutEffect(()=>{
98
+ const container = containerRef.current;
99
+ const measureEl = measureRef.current;
100
+ const overflowEl = overflowMeasureRef.current;
101
+ if (!container) return;
102
+ const observer = new ResizeObserver((entries)=>{
103
+ const itemsChanged = entries.some((entry)=>entry.target === measureEl || entry.target === overflowEl);
104
+ if (itemsChanged) {
105
+ measure();
106
+ lastSizeRef.current = 0;
107
+ }
108
+ recalculate();
109
+ });
110
+ observer.observe(container);
111
+ if (measureEl) observer.observe(measureEl);
112
+ if (overflowEl) observer.observe(overflowEl);
113
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional: useLayoutEffect + synchronous setState is the correct DOM measurement pattern; avoids paint flash
114
+ measure();
115
+ recalculate();
116
+ return ()=>observer.disconnect();
117
+ }, [
118
+ measure,
119
+ recalculate,
120
+ ContentElement
121
+ ]);
122
+ useLayoutEffect(()=>{
123
+ measurementsRef.current = null;
124
+ lastSizeRef.current = 0;
125
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional: useLayoutEffect + synchronous setState is the correct DOM measurement pattern; avoids paint flash
126
+ measure();
127
+ recalculate();
128
+ }, [
129
+ itemCount,
130
+ collapseOrderKey,
131
+ orientation,
132
+ measure,
133
+ recalculate,
134
+ ContentElement
135
+ ]);
136
+ if (itemCount === 0) return null;
137
+ const hiddenSet = new Set(collapseState.hiddenIndices);
138
+ const hiddenItems = items.filter((item, i)=>item != null && hiddenSet.has(i));
139
+ const SeparatorElement = resolveInjectedElement(ContentElement);
140
+ const overflowWrapper = SeparatorElement === 'li' ? 'li' : null;
141
+ const tokens = buildVisibleTokens(items, hiddenSet, overflowPosition === 'end' ? items.length : collapseState.overflowAt, hiddenItems, Overflow, overflowWrapper);
142
+ const isVertical = orientation === 'vertical';
143
+ return /*#__PURE__*/ _jsxs("div", {
144
+ ref: setContainerRef,
145
+ "data-slot": "overflow-list",
146
+ className: cn('relative overflow-hidden', isVertical ? 'min-h-0' : 'min-w-0', className),
147
+ style: {
148
+ [isVertical ? 'minHeight' : 'minWidth']: minSize || undefined
149
+ },
150
+ children: [
151
+ /*#__PURE__*/ createElement(ContentElement, {
152
+ ref: measureRef,
153
+ 'aria-hidden': true,
154
+ className: cn(isVertical ? 'pointer-events-none invisible absolute left-0 top-0 flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0' : 'pointer-events-none invisible flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0', 'p-0 m-0', className, isVertical ? 'h-max' : 'h-0 w-max')
155
+ }, items.map((child, i)=>/*#__PURE__*/ _jsxs(Fragment, {
156
+ children: [
157
+ i > 0 && separator != null && /*#__PURE__*/ _jsx(SeparatorElement, {
158
+ "data-slot": "separator",
159
+ "aria-hidden": true,
160
+ children: separator
161
+ }),
162
+ child
163
+ ]
164
+ }, child.key ?? i))),
165
+ /*#__PURE__*/ createElement(ContentElement, {
166
+ ref: overflowMeasureRef,
167
+ 'aria-hidden': true,
168
+ className: cn(isVertical ? 'pointer-events-none invisible absolute left-0 top-0 flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0' : 'pointer-events-none invisible absolute left-0 top-0 flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0', 'p-0 m-0', className, isVertical ? 'h-max' : undefined)
169
+ }, /*#__PURE__*/ createElement(SeparatorElement, {
170
+ 'aria-hidden': true,
171
+ className: 'size-0'
172
+ }), separator != null && /*#__PURE__*/ createElement(SeparatorElement, {
173
+ 'data-slot': 'separator',
174
+ 'aria-hidden': true
175
+ }, separator), renderOverflow(Overflow, items, overflowWrapper)),
176
+ /*#__PURE__*/ _jsx(ContentElement, {
177
+ "data-slot": "overflow-list-content",
178
+ "data-truncated": !!hiddenItems.length || undefined,
179
+ className: cn(isVertical ? 'flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0' : 'flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0', 'p-0 m-0 h-auto w-auto', className),
180
+ children: tokens.map((token, index)=>/*#__PURE__*/ _jsxs(Fragment, {
181
+ children: [
182
+ index > 0 && separator != null && /*#__PURE__*/ _jsx(SeparatorElement, {
183
+ "data-slot": "separator",
184
+ "aria-hidden": true,
185
+ children: separator
186
+ }),
187
+ token.node
188
+ ]
189
+ }, token.key))
190
+ })
191
+ ]
192
+ });
193
+ });
194
+ OverflowList.displayName = 'OverflowList';
195
+ export { OverflowList };
196
+
197
+ //# sourceMappingURL=overflow-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/ui/core/overflow-list/overflow-list.tsx"],"sourcesContent":["import {\n Children,\n createElement,\n forwardRef,\n Fragment,\n isValidElement,\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentRef,\n type ForwardRefExoticComponent,\n type JSX,\n type ReactNode,\n type Ref,\n type RefAttributes,\n} from 'react';\n\nimport { cn } from '../../../../lib/utils';\nimport { assignRef } from '../../../../utils/assign-ref';\n\nimport {\n buildVisibleTokens,\n collapseStatesEqual,\n computeCollapsedMinWidth,\n computeCollapseState,\n getMeasurements,\n INITIAL_STATE,\n renderOverflow,\n resolveCollapseOrder,\n resolveInjectedElement,\n type CollapseState,\n type CollapseStrategy,\n type CollapseUnit,\n type ItemElement,\n type OverflowComponent,\n} from './overflow-list.utils';\n\nfunction toValidElements(children: ReactNode): ItemElement[] {\n // eslint-disable-next-line @eslint-react/no-children-to-array -- OverflowList needs a stable, flattened array of elements to index into for collapse/resize math; Children.toArray is the only API that flattens fragments and assigns stable keys\n return Children.toArray(children).filter((child): child is ItemElement =>\n isValidElement(child)\n );\n}\n\ntype OverflowMeasurement = {\n size: number;\n collapsedSize: number;\n};\n\ntype OverflowListProps = {\n children: ReactNode;\n separator?: ReactNode;\n collapseOrder: CollapseUnit[] | CollapseStrategy;\n overflowComponent: OverflowComponent;\n overflowPosition?: 'auto' | 'end';\n orientation?: 'horizontal' | 'vertical';\n as?: keyof JSX.IntrinsicElements;\n lastItemMinVisibleRem?: number;\n lastItemFlexibleSelector?: string;\n className?: string;\n onMeasure?: (measurement: OverflowMeasurement) => void;\n};\n\nconst OverflowList: ForwardRefExoticComponent<\n OverflowListProps & RefAttributes<ComponentRef<'div'>>\n> = forwardRef<ComponentRef<'div'>, OverflowListProps>(function OverflowList(\n {\n children,\n separator,\n collapseOrder,\n overflowComponent: Overflow,\n overflowPosition = 'auto',\n orientation = 'horizontal',\n as: ContentElement = 'div',\n lastItemMinVisibleRem,\n lastItemFlexibleSelector,\n className,\n onMeasure,\n }: OverflowListProps,\n ref: Ref<ComponentRef<'div'>>\n) {\n const containerRef = useRef<HTMLDivElement>(null);\n const setContainerRef = useCallback(\n (el: HTMLDivElement | null) => {\n assignRef(containerRef, el);\n assignRef(ref, el);\n },\n [ref]\n );\n\n const measureRef = useRef<HTMLElement>(null);\n const overflowMeasureRef = useRef<HTMLElement>(null);\n const measurementsRef = useRef<{\n itemWidths: number[];\n gap: number;\n overflowWidth: number;\n outerMarginLeft: number;\n outerMarginRight: number;\n lastItemFlexibleWidth?: number;\n } | null>(null);\n const [collapseState, setCollapseState] =\n useState<CollapseState>(INITIAL_STATE);\n const [minSize, setMinSize] = useState(0);\n const minSizeRef = useRef(0);\n const lastSizeRef = useRef(0);\n\n const separatorRef = useRef(separator);\n const orientationRef = useRef(orientation);\n const onMeasureRef = useRef(onMeasure);\n const lastItemMinVisibleRemRef = useRef(lastItemMinVisibleRem);\n const lastItemFlexibleSelectorRef = useRef(lastItemFlexibleSelector);\n const items = toValidElements(children);\n const itemCount = items.length;\n\n const resolvedOrder = resolveCollapseOrder(collapseOrder, itemCount);\n\n const itemCountRef = useRef(itemCount);\n const collapseOrderRef = useRef(resolvedOrder);\n const collapseOrderKey = resolvedOrder.join(',');\n\n useLayoutEffect(() => {\n separatorRef.current = separator;\n itemCountRef.current = itemCount;\n collapseOrderRef.current = resolvedOrder;\n orientationRef.current = orientation;\n onMeasureRef.current = onMeasure;\n lastItemMinVisibleRemRef.current = lastItemMinVisibleRem;\n lastItemFlexibleSelectorRef.current = lastItemFlexibleSelector;\n });\n\n // eslint-disable-next-line react-hooks/preserve-manual-memoization -- stable ref-based callback required for ResizeObserver; React Compiler cannot preserve this memoization\n const measure = useCallback(() => {\n const measureEl = measureRef.current;\n const overflowEl = overflowMeasureRef.current;\n if (!measureEl || !overflowEl || itemCountRef.current === 0) {\n measurementsRef.current = null;\n setMinSize(0);\n return null;\n }\n\n const measurements = getMeasurements(\n measureEl,\n overflowEl,\n !!separatorRef.current,\n orientationRef.current,\n lastItemFlexibleSelectorRef.current\n );\n measurementsRef.current = measurements;\n\n const collapsedMinWidth = Math.ceil(\n computeCollapsedMinWidth({\n ...measurements,\n collapseOrder: collapseOrderRef.current,\n lastItemMinVisible:\n lastItemMinVisibleRemRef.current != null\n ? lastItemMinVisibleRemRef.current *\n parseFloat(getComputedStyle(document.documentElement).fontSize)\n : undefined,\n })\n );\n minSizeRef.current = collapsedMinWidth;\n setMinSize((prev) =>\n prev === collapsedMinWidth ? prev : collapsedMinWidth\n );\n\n return measurements;\n }, []);\n\n // eslint-disable-next-line react-hooks/preserve-manual-memoization -- stable ref-based callback required for ResizeObserver; React Compiler cannot preserve this memoization\n const recalculate = useCallback(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const containerSize =\n orientationRef.current === 'vertical'\n ? container.getBoundingClientRect().height\n : container.getBoundingClientRect().width;\n\n if (containerSize === 0 || containerSize === lastSizeRef.current) {\n return;\n }\n lastSizeRef.current = containerSize;\n\n if (itemCountRef.current === 0) {\n setCollapseState(INITIAL_STATE);\n onMeasureRef.current?.({ size: containerSize, collapsedSize: 0 });\n return;\n }\n\n const measurements = measurementsRef.current ?? measure();\n if (!measurements) return;\n\n const newState = computeCollapseState({\n containerSize,\n ...measurements,\n collapseOrder: collapseOrderRef.current,\n });\n\n setCollapseState((prev) =>\n collapseStatesEqual(prev, newState) ? prev : newState\n );\n onMeasureRef.current?.({\n size: containerSize,\n collapsedSize: minSizeRef.current,\n });\n }, [measure]);\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n const measureEl = measureRef.current;\n const overflowEl = overflowMeasureRef.current;\n if (!container) return;\n\n const observer = new ResizeObserver((entries) => {\n const itemsChanged = entries.some(\n (entry) => entry.target === measureEl || entry.target === overflowEl\n );\n if (itemsChanged) {\n measure();\n lastSizeRef.current = 0;\n }\n recalculate();\n });\n\n observer.observe(container);\n if (measureEl) observer.observe(measureEl);\n if (overflowEl) observer.observe(overflowEl);\n // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional: useLayoutEffect + synchronous setState is the correct DOM measurement pattern; avoids paint flash\n measure();\n recalculate();\n\n return () => observer.disconnect();\n }, [measure, recalculate, ContentElement]);\n\n useLayoutEffect(() => {\n measurementsRef.current = null;\n lastSizeRef.current = 0;\n // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional: useLayoutEffect + synchronous setState is the correct DOM measurement pattern; avoids paint flash\n measure();\n recalculate();\n }, [\n itemCount,\n collapseOrderKey,\n orientation,\n measure,\n recalculate,\n ContentElement,\n ]);\n\n if (itemCount === 0) return null;\n\n const hiddenSet = new Set(collapseState.hiddenIndices);\n const hiddenItems = items.filter(\n (item, i) => item != null && hiddenSet.has(i)\n );\n\n const SeparatorElement = resolveInjectedElement(ContentElement);\n const overflowWrapper = SeparatorElement === 'li' ? 'li' : null;\n\n const tokens = buildVisibleTokens(\n items,\n hiddenSet,\n overflowPosition === 'end' ? items.length : collapseState.overflowAt,\n hiddenItems,\n Overflow,\n overflowWrapper\n );\n\n const isVertical = orientation === 'vertical';\n\n return (\n <div\n ref={setContainerRef}\n data-slot=\"overflow-list\"\n className={cn(\n 'relative overflow-hidden',\n isVertical ? 'min-h-0' : 'min-w-0',\n className\n )}\n style={{\n [isVertical ? 'minHeight' : 'minWidth']: minSize || undefined,\n }}\n >\n {createElement(\n ContentElement,\n {\n ref: measureRef,\n 'aria-hidden': true,\n className: cn(\n isVertical\n ? 'pointer-events-none invisible absolute left-0 top-0 flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0'\n : 'pointer-events-none invisible flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0',\n 'p-0 m-0',\n className,\n isVertical ? 'h-max' : 'h-0 w-max'\n ),\n },\n items.map((child, i) => (\n <Fragment key={child.key ?? i}>\n {i > 0 && separator != null && (\n <SeparatorElement data-slot=\"separator\" aria-hidden>\n {separator}\n </SeparatorElement>\n )}\n {child}\n </Fragment>\n ))\n )}\n\n {createElement(\n ContentElement,\n {\n ref: overflowMeasureRef,\n 'aria-hidden': true,\n className: cn(\n isVertical\n ? 'pointer-events-none invisible absolute left-0 top-0 flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0'\n : 'pointer-events-none invisible absolute left-0 top-0 flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0',\n 'p-0 m-0',\n className,\n isVertical ? 'h-max' : undefined\n ),\n },\n createElement(SeparatorElement, {\n 'aria-hidden': true,\n className: 'size-0',\n }),\n separator != null &&\n createElement(\n SeparatorElement,\n { 'data-slot': 'separator', 'aria-hidden': true },\n separator\n ),\n renderOverflow(Overflow, items, overflowWrapper)\n )}\n\n <ContentElement\n data-slot=\"overflow-list-content\"\n data-truncated={!!hiddenItems.length || undefined}\n className={cn(\n isVertical\n ? 'flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0'\n : 'flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0',\n 'p-0 m-0 h-auto w-auto',\n className\n )}\n >\n {tokens.map((token, index) => (\n <Fragment key={token.key}>\n {index > 0 && separator != null && (\n <SeparatorElement data-slot=\"separator\" aria-hidden>\n {separator}\n </SeparatorElement>\n )}\n {token.node}\n </Fragment>\n ))}\n </ContentElement>\n </div>\n );\n});\nOverflowList.displayName = 'OverflowList';\n\nexport { OverflowList, type OverflowListProps, type OverflowMeasurement };\n"],"names":["Children","createElement","forwardRef","Fragment","isValidElement","useCallback","useLayoutEffect","useRef","useState","cn","assignRef","buildVisibleTokens","collapseStatesEqual","computeCollapsedMinWidth","computeCollapseState","getMeasurements","INITIAL_STATE","renderOverflow","resolveCollapseOrder","resolveInjectedElement","toValidElements","children","toArray","filter","child","OverflowList","separator","collapseOrder","overflowComponent","Overflow","overflowPosition","orientation","as","ContentElement","lastItemMinVisibleRem","lastItemFlexibleSelector","className","onMeasure","ref","containerRef","setContainerRef","el","measureRef","overflowMeasureRef","measurementsRef","collapseState","setCollapseState","minSize","setMinSize","minSizeRef","lastSizeRef","separatorRef","orientationRef","onMeasureRef","lastItemMinVisibleRemRef","lastItemFlexibleSelectorRef","items","itemCount","length","resolvedOrder","itemCountRef","collapseOrderRef","collapseOrderKey","join","current","measure","measureEl","overflowEl","measurements","collapsedMinWidth","Math","ceil","lastItemMinVisible","parseFloat","getComputedStyle","document","documentElement","fontSize","undefined","prev","recalculate","container","containerSize","getBoundingClientRect","height","width","size","collapsedSize","newState","observer","ResizeObserver","entries","itemsChanged","some","entry","target","observe","disconnect","hiddenSet","Set","hiddenIndices","hiddenItems","item","i","has","SeparatorElement","overflowWrapper","tokens","overflowAt","isVertical","div","data-slot","style","map","aria-hidden","key","data-truncated","token","index","node","displayName"],"mappings":"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"}
@@ -1,52 +1,54 @@
1
- import { ComponentType, ReactElement, ReactNode } from 'react';
1
+ import { type ComponentType, type ReactElement, type ReactNode } from "react";
2
2
  export type OverflowComponent = ComponentType<{
3
- items: ReactElement[];
3
+ items: ReactElement[];
4
4
  }>;
5
5
  export type ItemElement = ReactElement<Record<string, unknown>>;
6
- export type CollapseStrategy = 'asc' | 'desc' | 'innerAscFirstKeepLast' | 'innerDescFirstKeepLast';
6
+ export declare function resolveInjectedElement(as: unknown): "li" | "span";
7
+ export type CollapseStrategy = "asc" | "desc" | "innerAscFirstKeepLast" | "innerDescFirstKeepLast";
7
8
  export type CollapseUnit = number | number[];
8
9
  export declare function resolveCollapseOrder(order: CollapseUnit[] | CollapseStrategy, itemCount: number): CollapseUnit[];
9
10
  export type CollapseState = {
10
- hiddenIndices: number[];
11
- overflowAt: number;
11
+ hiddenIndices: number[];
12
+ overflowAt: number;
12
13
  };
13
14
  export declare const INITIAL_STATE: CollapseState;
14
15
  export declare function arraysEqual(a: number[], b: number[]): boolean;
15
16
  export declare function totalWidth(itemWidths: number[], gap: number): number;
16
- export declare const FIT_EPSILON = 0.5;
17
- export declare function getMeasurements(measureEl: HTMLElement, overflowEl: HTMLElement, hasSep: boolean, orientation?: 'horizontal' | 'vertical', lastItemFlexibleSelector?: string): {
18
- itemWidths: number[];
19
- gap: number;
20
- overflowWidth: number;
21
- outerMarginLeft: number;
22
- outerMarginRight: number;
23
- lastItemFlexibleWidth?: number;
17
+ export declare const FIT_EPSILON = .5;
18
+ export declare function getMeasurements(measureEl: HTMLElement, overflowEl: HTMLElement, hasSep: boolean, orientation?: "horizontal" | "vertical", lastItemFlexibleSelector?: string): {
19
+ itemWidths: number[];
20
+ gap: number;
21
+ overflowWidth: number;
22
+ outerMarginLeft: number;
23
+ outerMarginRight: number;
24
+ lastItemFlexibleWidth?: number;
24
25
  };
25
26
  export declare function hideUntilFit(total: number, itemWidths: number[], gap: number, overflowCost: number, hideOrder: CollapseUnit[], containerWidth: number): {
26
- hidden: Set<number>;
27
- firstHidden: number | null;
27
+ hidden: Set<number>;
28
+ firstHidden: number | null;
28
29
  };
29
- export declare function computeCollapseState({ containerSize, itemWidths, gap, overflowWidth, outerMarginLeft, outerMarginRight, collapseOrder, }: {
30
- containerSize: number;
31
- itemWidths: number[];
32
- gap: number;
33
- overflowWidth: number;
34
- outerMarginLeft?: number;
35
- outerMarginRight?: number;
36
- collapseOrder: CollapseUnit[];
30
+ export declare function computeCollapseState({ containerSize, itemWidths, gap, overflowWidth, outerMarginLeft, outerMarginRight, collapseOrder }: {
31
+ containerSize: number;
32
+ itemWidths: number[];
33
+ gap: number;
34
+ overflowWidth: number;
35
+ outerMarginLeft?: number;
36
+ outerMarginRight?: number;
37
+ collapseOrder: CollapseUnit[];
37
38
  }): CollapseState;
38
- export declare function computeCollapsedMinWidth({ itemWidths, gap, overflowWidth, outerMarginLeft, outerMarginRight, collapseOrder, lastItemMinVisible, lastItemFlexibleWidth, }: {
39
- itemWidths: number[];
40
- gap: number;
41
- overflowWidth: number;
42
- outerMarginLeft?: number;
43
- outerMarginRight?: number;
44
- collapseOrder: CollapseUnit[];
45
- lastItemMinVisible?: number;
46
- lastItemFlexibleWidth?: number;
39
+ export declare function computeCollapsedMinWidth({ itemWidths, gap, overflowWidth, outerMarginLeft, outerMarginRight, collapseOrder, lastItemMinVisible, lastItemFlexibleWidth }: {
40
+ itemWidths: number[];
41
+ gap: number;
42
+ overflowWidth: number;
43
+ outerMarginLeft?: number;
44
+ outerMarginRight?: number;
45
+ collapseOrder: CollapseUnit[];
46
+ lastItemMinVisible?: number;
47
+ lastItemFlexibleWidth?: number;
47
48
  }): number;
48
49
  export declare function collapseStatesEqual(a: CollapseState, b: CollapseState): boolean;
49
- export declare function buildVisibleTokens(items: ReactElement[], hiddenSet: Set<number>, overflowAt: number, hiddenItems: ReactElement[], Overflow: OverflowComponent): Array<{
50
- key: string | number;
51
- node: ReactNode;
50
+ export declare function renderOverflow(Overflow: OverflowComponent, items: ReactElement[], wrapper: "li" | null): ReactNode;
51
+ export declare function buildVisibleTokens(items: ReactElement[], hiddenSet: Set<number>, overflowAt: number, hiddenItems: ReactElement[], Overflow: OverflowComponent, overflowWrapper?: "li" | null): Array<{
52
+ key: string | number;
53
+ node: ReactNode;
52
54
  }>;