@espressif/dashboard-ui-components 1.11.2 → 1.12.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 (532) hide show
  1. package/.claude/rules/dashboard-ui-consumption.md +176 -5
  2. package/.cursor/rules/dashboard-ui-consumption.mdc +163 -4
  3. package/CHANGELOG.md +1005 -0
  4. package/README.md +240 -7
  5. package/THIRD-PARTY-NOTICES.md +2 -1
  6. package/dist/alert.props-CcKo49Rb.d.ts +44 -0
  7. package/dist/animation/index.d.ts +3 -0
  8. package/dist/animation/index.js +3 -0
  9. package/dist/avatar.props-2q5BsX-R.d.ts +29 -0
  10. package/dist/button-BK-DIR_L.d.ts +21 -0
  11. package/dist/button-BxJ7s6sR.d.ts +76 -0
  12. package/dist/calendar.props-BtCzuWH1.d.ts +12 -0
  13. package/dist/carousel/index.d.ts +2 -0
  14. package/dist/carousel/index.js +2 -0
  15. package/dist/charts/index.d.ts +5 -0
  16. package/dist/charts/index.js +9 -0
  17. package/dist/common/app-logo/app-logo.js +1 -1
  18. package/dist/common/index.d.ts +9 -20
  19. package/dist/common/my-account-menu/my-account-menu.js +45 -13
  20. package/dist/common/profile-card/profile-card.js +3 -2
  21. package/dist/components/accordion/accordion.js +14 -5
  22. package/dist/components/accordion/index.d.ts +36 -0
  23. package/dist/components/accordion/index.js +2 -0
  24. package/dist/components/advanced-search-box/advanced-search-box.js +8 -2
  25. package/dist/components/advanced-search-box/index.d.ts +29 -0
  26. package/dist/components/advanced-search-box/index.js +2 -0
  27. package/dist/components/alert/alert.js +2 -1
  28. package/dist/components/alert/index.d.ts +12 -0
  29. package/dist/components/alert/index.js +2 -0
  30. package/dist/components/anchored-panel/anchored-panel.js +83 -0
  31. package/dist/components/anchored-panel/index.d.ts +31 -0
  32. package/dist/components/anchored-panel/index.js +2 -0
  33. package/dist/components/animated-containers/index.d.ts +13 -0
  34. package/dist/components/animated-containers/index.js +2 -0
  35. package/dist/components/async-multi-select/async-multi-select.js +48 -7
  36. package/dist/components/async-multi-select/index.d.ts +63 -0
  37. package/dist/components/async-multi-select/index.js +2 -0
  38. package/dist/components/avatar/avatar.js +11 -4
  39. package/dist/components/avatar/index.d.ts +8 -0
  40. package/dist/components/avatar/index.js +2 -0
  41. package/dist/components/avatar-group/avatar-group.js +35 -0
  42. package/dist/components/avatar-group/index.d.ts +31 -0
  43. package/dist/components/avatar-group/index.js +2 -0
  44. package/dist/components/badge/index.d.ts +14 -0
  45. package/dist/components/badge/index.js +2 -0
  46. package/dist/components/breadcrumb/index.d.ts +21 -0
  47. package/dist/components/breadcrumb/index.js +2 -0
  48. package/dist/components/bubble/bubble.js +18 -0
  49. package/dist/components/bubble/index.d.ts +19 -0
  50. package/dist/components/bubble/index.js +2 -0
  51. package/dist/components/button/button.js +87 -25
  52. package/dist/components/button/flash-button.js +9 -3
  53. package/dist/components/button/index.d.ts +56 -0
  54. package/dist/components/button/index.js +6 -0
  55. package/dist/components/button-group/index.d.ts +16 -0
  56. package/dist/components/button-group/index.js +2 -0
  57. package/dist/components/calendar/calendar.js +5 -5
  58. package/dist/components/calendar/index.d.ts +11 -0
  59. package/dist/components/calendar/index.js +2 -0
  60. package/dist/components/card/index.d.ts +11 -0
  61. package/dist/components/card/index.js +2 -0
  62. package/dist/components/card-rail/card-rail.js +50 -0
  63. package/dist/components/card-rail/index.d.ts +30 -0
  64. package/dist/components/card-rail/index.js +2 -0
  65. package/dist/components/cards/collapsible-card.js +5 -2
  66. package/dist/components/cards/index.d.ts +16200 -0
  67. package/dist/components/cards/index.js +8 -0
  68. package/dist/components/cards/section-card.js +133 -8
  69. package/dist/components/cards/simple-card.js +5 -2
  70. package/dist/components/carousel/carousel.js +137 -49
  71. package/dist/components/carousel/index.d.ts +130 -0
  72. package/dist/components/carousel/index.js +2 -0
  73. package/dist/components/category-card/category-card.js +111 -0
  74. package/dist/components/category-card/index.d.ts +55 -0
  75. package/dist/components/category-card/index.js +2 -0
  76. package/dist/components/chart/area-chart.js +95 -85
  77. package/dist/components/chart/bar-chart.js +123 -60
  78. package/dist/components/chart/chart.js +127 -3
  79. package/dist/components/chart/composed-chart.js +109 -98
  80. package/dist/components/chart/donut-chart.js +23 -5
  81. package/dist/components/chart/index.d.ts +732 -0
  82. package/dist/components/chart/index.js +9 -0
  83. package/dist/components/chart/line-chart.js +93 -83
  84. package/dist/components/chart/treemap-chart.js +71 -58
  85. package/dist/components/check-badge/check-badge.js +25 -0
  86. package/dist/components/check-badge/index.d.ts +13 -0
  87. package/dist/components/check-badge/index.js +2 -0
  88. package/dist/components/checkbox/index.d.ts +8 -0
  89. package/dist/components/checkbox/index.js +2 -0
  90. package/dist/components/choice-card/choice-card.js +99 -0
  91. package/dist/components/choice-card/index.d.ts +41 -0
  92. package/dist/components/choice-card/index.js +2 -0
  93. package/dist/components/circular-progress/circular-progress.js +5 -2
  94. package/dist/components/circular-progress/index.d.ts +23 -0
  95. package/dist/components/circular-progress/index.js +2 -0
  96. package/dist/components/code/index.d.ts +40 -0
  97. package/dist/components/code/index.js +2 -0
  98. package/dist/components/code-editor/code-editor.js +9 -3
  99. package/dist/components/code-editor/index.d.ts +82 -0
  100. package/dist/components/code-editor/index.js +2 -0
  101. package/dist/components/collapsible/index.d.ts +42 -0
  102. package/dist/components/collapsible/index.js +2 -0
  103. package/dist/components/column-panel/column-panel.js +38 -0
  104. package/dist/components/column-panel/index.d.ts +37 -0
  105. package/dist/components/column-panel/index.js +3 -0
  106. package/dist/components/column-panel/use-panel-flag.js +27 -0
  107. package/dist/components/combobox/index.d.ts +28 -0
  108. package/dist/components/combobox/index.js +2 -0
  109. package/dist/components/confirmation-dialog/confirmation-dialog.js +1 -1
  110. package/dist/components/confirmation-dialog/index.d.ts +40 -0
  111. package/dist/components/confirmation-dialog/index.js +3 -0
  112. package/dist/components/content-container/index.d.ts +16 -0
  113. package/dist/components/content-container/index.js +2 -0
  114. package/dist/components/copiable-text/index.d.ts +33 -0
  115. package/dist/components/copiable-text/index.js +2 -0
  116. package/dist/components/coverflow/_constants/coverflow-poses.js +23 -0
  117. package/dist/components/coverflow/_constants/coverflow-shapes.js +23 -0
  118. package/dist/components/coverflow/_hooks/use-coverflow.js +90 -0
  119. package/dist/components/coverflow/_utils/ring.js +24 -0
  120. package/dist/components/coverflow/coverflow.js +198 -0
  121. package/dist/components/coverflow/index.d.ts +105 -0
  122. package/dist/components/coverflow/index.js +2 -0
  123. package/dist/components/data-table/data-table.js +9 -2
  124. package/dist/components/data-table/index.d.ts +120 -0
  125. package/dist/components/data-table/index.js +3 -0
  126. package/dist/components/date-picker/date-picker.js +5 -2
  127. package/dist/components/date-picker/index.d.ts +50 -0
  128. package/dist/components/date-picker/index.js +2 -0
  129. package/dist/components/date-range-picker/date-range-picker.js +11 -2
  130. package/dist/components/date-range-picker/index.d.ts +100 -0
  131. package/dist/components/date-range-picker/index.js +3 -0
  132. package/dist/components/date-time-picker/date-time-picker.js +5 -2
  133. package/dist/components/date-time-picker/index.d.ts +79 -0
  134. package/dist/components/date-time-picker/index.js +2 -0
  135. package/dist/components/device-icon/index.d.ts +17 -0
  136. package/dist/components/device-icon/index.js +2 -0
  137. package/dist/components/dialog/index.d.ts +38 -0
  138. package/dist/components/dialog/index.js +2 -0
  139. package/dist/components/dropdown-menu/index.d.ts +57 -0
  140. package/dist/components/dropdown-menu/index.js +2 -0
  141. package/dist/components/dynamic-list/dynamic-list.js +4 -4
  142. package/dist/components/dynamic-list/index.d.ts +74 -0
  143. package/dist/components/dynamic-list/index.js +2 -0
  144. package/dist/components/error-display/index.d.ts +17 -0
  145. package/dist/components/error-display/index.js +3 -0
  146. package/dist/components/expandable-text/expandable-text-overlay.js +78 -0
  147. package/dist/components/expandable-text/expandable-text.js +73 -0
  148. package/dist/components/expandable-text/index.d.ts +39 -0
  149. package/dist/components/expandable-text/index.js +2 -0
  150. package/dist/components/expandable-text/use-clamped.js +23 -0
  151. package/dist/components/facet-filters/_hooks/use-filter-group.js +51 -0
  152. package/dist/components/facet-filters/active-filters.js +31 -0
  153. package/dist/components/facet-filters/filter-group.js +110 -0
  154. package/dist/components/facet-filters/filters-panel.js +59 -0
  155. package/dist/components/facet-filters/filters-pill.js +40 -0
  156. package/dist/components/facet-filters/index.d.ts +104 -0
  157. package/dist/components/facet-filters/index.js +6 -0
  158. package/dist/components/facet-filters/use-filters-collapsed.js +21 -0
  159. package/dist/components/feature-grid/feature-grid.js +115 -0
  160. package/dist/components/feature-grid/index.d.ts +53 -0
  161. package/dist/components/feature-grid/index.js +2 -0
  162. package/dist/components/file-input/file-input.js +9 -3
  163. package/dist/components/file-input/index.d.ts +78 -0
  164. package/dist/components/file-input/index.js +2 -0
  165. package/dist/components/file-upload/file-upload.js +10 -5
  166. package/dist/components/file-upload/index.d.ts +38 -0
  167. package/dist/components/file-upload/index.js +2 -0
  168. package/dist/components/filters-bar/filters-bar.js +5 -1
  169. package/dist/components/filters-bar/index.d.ts +26 -0
  170. package/dist/components/filters-bar/index.js +2 -0
  171. package/dist/components/flip-card/flip-card.js +147 -0
  172. package/dist/components/flip-card/index.d.ts +43 -0
  173. package/dist/components/flip-card/index.js +2 -0
  174. package/dist/components/floating-window/_hooks/use-drag-move.js +76 -0
  175. package/dist/components/floating-window/floating-window.js +97 -0
  176. package/dist/components/floating-window/index.d.ts +45 -0
  177. package/dist/components/floating-window/index.js +2 -0
  178. package/dist/components/form/index.d.ts +28 -0
  179. package/dist/components/form/index.js +2 -0
  180. package/dist/components/fullscreen-dialog/fullscreen-dialog.js +6 -2
  181. package/dist/components/fullscreen-dialog/index.d.ts +38 -0
  182. package/dist/components/fullscreen-dialog/index.js +2 -0
  183. package/dist/components/horizontal-stepper/horizontal-stepper.js +122 -0
  184. package/dist/components/horizontal-stepper/index.d.ts +70 -0
  185. package/dist/components/horizontal-stepper/index.js +2 -0
  186. package/dist/components/icon-avatar/index.d.ts +9 -0
  187. package/dist/components/icon-avatar/index.js +2 -0
  188. package/dist/components/icon-text-action-card/icon-text-action-card.js +9 -5
  189. package/dist/components/icon-text-action-card/index.d.ts +11 -0
  190. package/dist/components/icon-text-action-card/index.js +2 -0
  191. package/dist/components/identicon/identicon.js +33 -0
  192. package/dist/components/identicon/index.d.ts +26 -0
  193. package/dist/components/identicon/index.js +2 -0
  194. package/dist/components/illustration/index.d.ts +37 -0
  195. package/dist/components/illustration/index.js +3 -0
  196. package/dist/components/index.d.ts +177 -19529
  197. package/dist/components/index.js +61 -10
  198. package/dist/components/input/index.d.ts +15 -0
  199. package/dist/components/input/index.js +3 -0
  200. package/dist/components/input-group/index.d.ts +35 -0
  201. package/dist/components/input-group/index.js +2 -0
  202. package/dist/components/input-group/input-group.js +41 -0
  203. package/dist/components/input-otp/index.d.ts +63 -0
  204. package/dist/components/input-otp/index.js +2 -0
  205. package/dist/components/key-value-manager/index.d.ts +63 -0
  206. package/dist/components/key-value-manager/index.js +2 -0
  207. package/dist/components/key-value-manager/key-value-manager-table.js +7 -5
  208. package/dist/components/label/index.d.ts +8 -0
  209. package/dist/components/label/index.js +2 -0
  210. package/dist/components/link/index.d.ts +33 -0
  211. package/dist/components/link/index.js +2 -0
  212. package/dist/components/list/index.d.ts +9 -0
  213. package/dist/components/list/index.js +3 -0
  214. package/dist/components/list/list-item.utils.js +1 -1
  215. package/dist/components/list/list.js +3 -1
  216. package/dist/components/list-details/index.d.ts +51 -0
  217. package/dist/components/list-details/index.js +2 -0
  218. package/dist/components/list-details/list-details.js +5 -2
  219. package/dist/components/lottie-animation-container/index.d.ts +10 -0
  220. package/dist/components/lottie-animation-container/index.js +2 -0
  221. package/dist/components/lottie-animation-container/lottie-animation-container.js +22 -3
  222. package/dist/components/lottie-animations/index.d.ts +8 -0
  223. package/dist/components/lottie-animations/index.js +2 -0
  224. package/dist/components/markdown-content/index.d.ts +32 -0
  225. package/dist/components/markdown-content/index.js +2 -0
  226. package/dist/components/media-card/index.d.ts +125 -0
  227. package/dist/components/media-card/index.js +4 -0
  228. package/dist/components/media-card/media-card-image.js +59 -0
  229. package/dist/components/media-card/media-card-reveal.js +76 -0
  230. package/dist/components/media-card/media-card.classes.js +37 -0
  231. package/dist/components/media-card/media-card.js +91 -0
  232. package/dist/components/media-stage/index.d.ts +41 -0
  233. package/dist/components/media-stage/index.js +2 -0
  234. package/dist/components/media-stage/media-stage.js +48 -0
  235. package/dist/components/menu/index.d.ts +14 -0
  236. package/dist/components/menu/index.js +2 -0
  237. package/dist/components/message-scroller/_hooks/use-follow-bottom.js +85 -0
  238. package/dist/components/message-scroller/index.d.ts +29 -0
  239. package/dist/components/message-scroller/index.js +2 -0
  240. package/dist/components/message-scroller/message-scroller.js +65 -0
  241. package/dist/components/mini-bar-chart/index.d.ts +40 -0
  242. package/dist/components/mini-bar-chart/index.js +2 -0
  243. package/dist/components/mini-bar-chart/mini-bar-chart.js +93 -0
  244. package/dist/components/monospace-content/index.d.ts +43 -0
  245. package/dist/components/monospace-content/index.js +2 -0
  246. package/dist/components/monospace-content/monospace-content.js +1 -1
  247. package/dist/components/nav-bar/index.d.ts +148 -0
  248. package/dist/components/nav-bar/index.js +2 -0
  249. package/dist/components/nav-bar/nav-bar-details-panel.js +158 -44
  250. package/dist/components/nav-bar/nav-bar-mobile-menu.js +93 -27
  251. package/dist/components/nav-bar/nav-bar.js +256 -138
  252. package/dist/components/nav-bar/use-nav-bar-hover-details.js +80 -0
  253. package/dist/components/nav-bar/use-nav-bar-overflow.js +5 -5
  254. package/dist/components/notice-strip/index.d.ts +32 -0
  255. package/dist/components/notice-strip/index.js +2 -0
  256. package/dist/components/notice-strip/notice-strip.js +57 -0
  257. package/dist/components/option-card-group/index.d.ts +50 -0
  258. package/dist/components/option-card-group/index.js +2 -0
  259. package/dist/components/option-card-group/option-card-group.js +76 -0
  260. package/dist/components/overflow-badge-list/index.d.ts +63 -0
  261. package/dist/components/overflow-badge-list/index.js +2 -0
  262. package/dist/components/overflow-badge-list/overflow-badge-list.js +78 -19
  263. package/dist/components/page-banner/index.d.ts +33 -0
  264. package/dist/components/page-banner/index.js +2 -0
  265. package/dist/components/page-banner/page-banner.js +56 -0
  266. package/dist/components/page-container/index.d.ts +20 -0
  267. package/dist/components/page-container/index.js +3 -0
  268. package/dist/components/page-container/page-container.js +5 -5
  269. package/dist/components/pagination/index.d.ts +31 -0
  270. package/dist/components/pagination/index.js +3 -0
  271. package/dist/components/popover/index.d.ts +60 -0
  272. package/dist/components/popover/index.js +3 -0
  273. package/dist/components/preview-card/index.d.ts +24 -0
  274. package/dist/components/preview-card/index.js +2 -0
  275. package/dist/components/progress-bar/index.d.ts +32 -0
  276. package/dist/components/progress-bar/index.js +2 -0
  277. package/dist/components/progress-bar/progress-bar.js +22 -6
  278. package/dist/components/radio-group/index.d.ts +24 -0
  279. package/dist/components/radio-group/index.js +2 -0
  280. package/dist/components/rank-numeral/index.d.ts +30 -0
  281. package/dist/components/rank-numeral/index.js +2 -0
  282. package/dist/components/rank-numeral/rank-numeral.js +26 -0
  283. package/dist/components/reaction-button/index.d.ts +32 -0
  284. package/dist/components/reaction-button/index.js +2 -0
  285. package/dist/components/reaction-button/reaction-button.js +50 -0
  286. package/dist/components/readout/index.d.ts +31 -0
  287. package/dist/components/readout/index.js +2 -0
  288. package/dist/components/readout/readout.js +63 -0
  289. package/dist/components/requirement-list/index.d.ts +52 -0
  290. package/dist/components/requirement-list/index.js +2 -0
  291. package/dist/components/requirement-list/requirement-list.js +29 -8
  292. package/dist/components/resizable/index.d.ts +31 -0
  293. package/dist/components/resizable/index.js +4 -0
  294. package/dist/components/resizable/resizable-group.js +23 -0
  295. package/dist/components/resizable/resizable-panel.js +28 -0
  296. package/dist/components/resizable/resizable-separator.js +24 -0
  297. package/dist/components/reveal/index.d.ts +23 -0
  298. package/dist/components/reveal/index.js +2 -0
  299. package/dist/components/reveal/reveal.js +24 -0
  300. package/dist/components/scroll-area/index.d.ts +27 -0
  301. package/dist/components/scroll-area/index.js +2 -0
  302. package/dist/components/scrollable-sections/index.d.ts +58 -0
  303. package/dist/components/scrollable-sections/index.js +2 -0
  304. package/dist/components/scrollable-sections/scrollable-sections.js +11 -3
  305. package/dist/components/search-box/index.d.ts +32 -0
  306. package/dist/components/search-box/index.js +2 -0
  307. package/dist/components/search-box/search-box.js +18 -3
  308. package/dist/components/search-field-shell.js +1 -1
  309. package/dist/components/select/index.d.ts +44 -0
  310. package/dist/components/select/index.js +2 -0
  311. package/dist/components/selectable-card-list/checkbox-card-list.js +5 -3
  312. package/dist/components/selectable-card-list/index.d.ts +76 -0
  313. package/dist/components/selectable-card-list/index.js +2 -0
  314. package/dist/components/selectable-card-list/radio-card-list.js +12 -6
  315. package/dist/components/selectable-card-list/selectable-card-list-shared.js +24 -12
  316. package/dist/components/selectable-card-list/selectable-card-list.js +12 -3
  317. package/dist/components/separator/index.d.ts +24 -0
  318. package/dist/components/separator/index.js +2 -0
  319. package/dist/components/share-menu/index.d.ts +55 -0
  320. package/dist/components/share-menu/index.js +2 -0
  321. package/dist/components/share-menu/share-marks.js +31 -0
  322. package/dist/components/share-menu/share-menu.js +140 -0
  323. package/dist/components/share-menu/share-urls.js +15 -0
  324. package/dist/components/sheet/index.d.ts +41 -0
  325. package/dist/components/sheet/index.js +2 -0
  326. package/dist/components/showcase-card/index.d.ts +53 -0
  327. package/dist/components/showcase-card/index.js +2 -0
  328. package/dist/components/showcase-card/showcase-card.js +75 -0
  329. package/dist/components/sidebar/index.d.ts +109 -0
  330. package/dist/components/sidebar/index.js +4 -0
  331. package/dist/components/sidebar/sidebar.js +56 -40
  332. package/dist/components/simple-clickable-card/index.d.ts +11 -0
  333. package/dist/components/simple-clickable-card/index.js +2 -0
  334. package/dist/components/simple-clickable-card/simple-clickable-card-shared.js +2 -2
  335. package/dist/components/simple-clickable-card/simple-clickable-card.js +5 -2
  336. package/dist/components/simple-info-card/index.d.ts +25 -0
  337. package/dist/components/simple-info-card/index.js +2 -0
  338. package/dist/components/simple-info-card/simple-info-card.js +6 -3
  339. package/dist/components/simple-list/index.d.ts +63 -0
  340. package/dist/components/simple-list/index.js +2 -0
  341. package/dist/components/simple-list/simple-list.js +3 -1
  342. package/dist/components/simple-paginated-list/index.d.ts +20 -0
  343. package/dist/components/simple-paginated-list/index.js +2 -0
  344. package/dist/components/simplified-date/index.d.ts +18 -0
  345. package/dist/components/simplified-date/index.js +2 -0
  346. package/dist/components/skeleton/index.d.ts +5 -0
  347. package/dist/components/skeleton/index.js +2 -0
  348. package/dist/components/skeletons/index.d.ts +11 -0
  349. package/dist/components/skeletons/index.js +2 -0
  350. package/dist/components/sort-menu/index.d.ts +34 -0
  351. package/dist/components/sort-menu/index.js +2 -0
  352. package/dist/components/sort-menu/sort-menu.js +39 -0
  353. package/dist/components/spinner/index.d.ts +15 -0
  354. package/dist/components/spinner/index.js +2 -0
  355. package/dist/components/stat-card/index.d.ts +43 -0
  356. package/dist/components/stat-card/index.js +2 -0
  357. package/dist/components/stat-card/stat-card.js +31 -12
  358. package/dist/components/status-badge/index.d.ts +24 -0
  359. package/dist/components/status-badge/index.js +2 -0
  360. package/dist/components/status-badge/status-badge.js +3 -2
  361. package/dist/components/status-card-list/index.d.ts +24 -0
  362. package/dist/components/status-card-list/index.js +2 -0
  363. package/dist/components/status-card-list/status-card-list.js +8 -4
  364. package/dist/components/step-tabs/index.d.ts +94 -0
  365. package/dist/components/step-tabs/index.js +2 -0
  366. package/dist/components/step-tabs/step-tabs.js +202 -0
  367. package/dist/components/style-scope/index.d.ts +32 -0
  368. package/dist/components/style-scope/index.js +2 -0
  369. package/dist/components/style-scope/style-scope.js +49 -0
  370. package/dist/components/switch/index.d.ts +15 -0
  371. package/dist/components/switch/index.js +2 -0
  372. package/dist/components/table/index.d.ts +18 -0
  373. package/dist/components/table/index.js +2 -0
  374. package/dist/components/tabs/index.d.ts +103 -0
  375. package/dist/components/tabs/index.js +2 -0
  376. package/dist/components/tag/index.d.ts +31 -0
  377. package/dist/components/tag/index.js +2 -0
  378. package/dist/components/tag/tag.js +79 -28
  379. package/dist/components/tag-input/index.d.ts +36 -0
  380. package/dist/components/tag-input/index.js +2 -0
  381. package/dist/components/tag-input/tag-input.js +10 -4
  382. package/dist/components/text-effects/index.d.ts +53 -0
  383. package/dist/components/text-effects/index.js +6 -0
  384. package/dist/components/textarea/index.d.ts +16 -0
  385. package/dist/components/textarea/index.js +2 -0
  386. package/dist/components/thumbnail-strip/index.d.ts +42 -0
  387. package/dist/components/thumbnail-strip/index.js +2 -0
  388. package/dist/components/thumbnail-strip/thumbnail-strip.js +124 -0
  389. package/dist/components/thumbnail-strip/use-scroll-edges.js +41 -0
  390. package/dist/components/time-picker/index.d.ts +13 -0
  391. package/dist/components/time-picker/index.js +2 -0
  392. package/dist/components/timeline/index.d.ts +39 -0
  393. package/dist/components/timeline/index.js +2 -0
  394. package/dist/components/timeline/timeline.js +85 -0
  395. package/dist/components/toast/index.d.ts +56 -0
  396. package/dist/components/toast/index.js +2 -0
  397. package/dist/components/toast/toast.js +42 -32
  398. package/dist/components/togglable-items-list/index.d.ts +28 -0
  399. package/dist/components/togglable-items-list/index.js +2 -0
  400. package/dist/components/toggle-group/index.d.ts +35 -0
  401. package/dist/components/toggle-group/index.js +2 -0
  402. package/dist/components/toolbar/index.d.ts +58 -0
  403. package/dist/components/toolbar/index.js +3 -0
  404. package/dist/components/toolbar/toolbar-button.js +40 -0
  405. package/dist/components/toolbar/toolbar.js +56 -0
  406. package/dist/components/tooltip/index.d.ts +29 -0
  407. package/dist/components/tooltip/index.js +3 -0
  408. package/dist/components/tooltip/tooltip.js +12 -2
  409. package/dist/components/transfer-list/index.d.ts +36 -0
  410. package/dist/components/transfer-list/index.js +2 -0
  411. package/dist/components/transfer-list/transfer-list.js +1 -1
  412. package/dist/components/truncated-line-with-tooltip/index.d.ts +22 -0
  413. package/dist/components/truncated-line-with-tooltip/index.js +2 -0
  414. package/dist/components/truncated-line-with-tooltip/truncated-line-with-tooltip.js +26 -8
  415. package/dist/components/typography/index.d.ts +19 -0
  416. package/dist/components/typography/index.js +3 -0
  417. package/dist/components/use-mobile/index.d.ts +3 -0
  418. package/dist/components/use-mobile/index.js +2 -0
  419. package/dist/components/user-type-badge/index.d.ts +39 -0
  420. package/dist/components/user-type-badge/index.js +3 -0
  421. package/dist/components/user-type-badge/user-type-badge.js +2 -1
  422. package/dist/components/vertical-stepper/index.d.ts +7 -0
  423. package/dist/components/vertical-stepper/index.js +2 -0
  424. package/dist/components/vertical-stepper/vertical-stepper.js +33 -6
  425. package/dist/components/view-toggle/index.d.ts +38 -0
  426. package/dist/components/view-toggle/index.js +2 -0
  427. package/dist/components/view-toggle/view-toggle.js +56 -0
  428. package/dist/core/animate-ui/components/animate/code.js +83 -9
  429. package/dist/core/animate-ui/components/animate/tabs.js +234 -19
  430. package/dist/core/animate-ui/components/animate/tooltip.js +10 -2
  431. package/dist/core/animate-ui/components/base/preview-card.js +20 -3
  432. package/dist/core/animate-ui/components/buttons/copy.js +12 -6
  433. package/dist/core/animate-ui/components/radix/dialog.js +17 -3
  434. package/dist/core/animate-ui/components/radix/dropdown-menu.js +26 -9
  435. package/dist/core/animate-ui/components/radix/sheet.js +20 -4
  436. package/dist/core/animate-ui/components/radix/sidebar.js +9 -9
  437. package/dist/core/animate-ui/components/radix/toggle-group.js +103 -13
  438. package/dist/core/animate-ui/components/radix/toggle.js +5 -5
  439. package/dist/core/animate-ui/primitives/animate/code-block.js +31 -4
  440. package/dist/core/animate-ui/primitives/animate/shiki-highlighter.js +5 -2
  441. package/dist/core/animate-ui/primitives/animate/tabs.js +7 -4
  442. package/dist/core/animate-ui/primitives/animate/tooltip.js +10 -3
  443. package/dist/core/animate-ui/primitives/base/preview-card.js +2 -2
  444. package/dist/core/animate-ui/primitives/base/progress.js +1 -1
  445. package/dist/core/animate-ui/primitives/base/radio.js +3 -3
  446. package/dist/core/animate-ui/primitives/effects/highlight.js +1 -0
  447. package/dist/core/animate-ui/primitives/radix/accordion.js +1 -1
  448. package/dist/core/animate-ui/primitives/radix/dialog.js +6 -3
  449. package/dist/core/animate-ui/primitives/radix/dropdown-menu.js +2 -2
  450. package/dist/core/animate-ui/primitives/radix/sheet.js +7 -3
  451. package/dist/core/animate-ui/primitives/radix/switch.js +2 -2
  452. package/dist/core/animate-ui/primitives/radix/toggle-group.js +2 -2
  453. package/dist/core/badge.js +5 -2
  454. package/dist/core/breadcrumb.js +1 -1
  455. package/dist/core/button/button.js +8 -8
  456. package/dist/core/button/craft-button.js +8 -2
  457. package/dist/core/button.js +17 -7
  458. package/dist/core/card.js +23 -5
  459. package/dist/core/combobox/combobox.js +8 -2
  460. package/dist/core/command.js +3 -3
  461. package/dist/core/form.js +1 -1
  462. package/dist/core/hooks/use-nested-layer-press-guard.js +46 -0
  463. package/dist/core/hooks/use-on-screen.js +33 -0
  464. package/dist/core/hooks/use-prefers-reduced-motion.js +19 -0
  465. package/dist/core/hooks/use-scroll-overflow.js +20 -0
  466. package/dist/core/index.d.ts +30 -5
  467. package/dist/core/index.js +5 -2
  468. package/dist/core/input/input-password.js +13 -9
  469. package/dist/core/input/input.js +38 -12
  470. package/dist/core/input-otp/input-otp.js +9 -5
  471. package/dist/core/popover-group.js +48 -0
  472. package/dist/core/popover-hover.js +127 -0
  473. package/dist/core/popover.js +75 -6
  474. package/dist/core/select.js +35 -20
  475. package/dist/core/table.js +5 -3
  476. package/dist/core/textarea/textarea.js +11 -3
  477. package/dist/data-table/index.d.ts +4 -0
  478. package/dist/data-table/index.js +3 -0
  479. package/dist/date/index.d.ts +11 -0
  480. package/dist/date/index.js +7 -0
  481. package/dist/forms/index.d.ts +4 -0
  482. package/dist/forms/index.js +2 -0
  483. package/dist/icon-avatar.props-RYtw2eSW.d.ts +31 -0
  484. package/dist/icon-text-action-card.props-B2ggncUK.d.ts +53 -0
  485. package/dist/index.d.ts +169 -15
  486. package/dist/index.js +63 -10
  487. package/dist/input-CYI1hhGc.d.ts +38 -0
  488. package/dist/layouts/index.d.ts +132 -8
  489. package/dist/layouts/index.js +3 -1
  490. package/dist/layouts/minimal-workspace-layout/minimal-workspace-layout-context.js +5 -0
  491. package/dist/layouts/minimal-workspace-layout/minimal-workspace-layout.js +404 -0
  492. package/dist/layouts/minimal-workspace-layout/rail-logo.js +90 -0
  493. package/dist/layouts/minimal-workspace-layout/sidebar-trigger.js +42 -0
  494. package/dist/layouts/shared/account-menu-props.js +21 -0
  495. package/dist/layouts/shared/footer-branding.js +34 -0
  496. package/dist/layouts/shared/sidebar-logo.js +59 -0
  497. package/dist/layouts/workspace-layout/account-menu/account-menu.js +9 -3
  498. package/dist/layouts/workspace-layout/footer/footer.js +1 -1
  499. package/dist/layouts/workspace-layout/header/header.js +1 -1
  500. package/dist/layouts/workspace-layout/workspace-layout.js +28 -80
  501. package/dist/{list.props-x1j3CbcF.d.ts → list.props-DP_xPTqU.d.ts} +2 -1
  502. package/dist/markdown/index.d.ts +11 -0
  503. package/dist/markdown/index.js +5 -0
  504. package/dist/my-account-menu.props-C7DK71WC.d.ts +67 -0
  505. package/dist/page-container.props-JutTvKFq.d.ts +48 -0
  506. package/dist/resizable.props-RxFY5tm_.d.ts +44 -0
  507. package/dist/section-card-B7c5uc08.d.ts +84 -0
  508. package/dist/simple-clickable-card.props-BrPCw7CR.d.ts +51 -0
  509. package/dist/slot-DGErA9zi.d.ts +10 -0
  510. package/dist/status-badge.props-lKlEOfRt.d.ts +32 -0
  511. package/dist/style-axes-DSQ2DGc5.d.ts +133 -0
  512. package/dist/toast/index.d.ts +6 -0
  513. package/dist/toast/index.js +2 -0
  514. package/dist/tooltip-C0bYa8a3.d.ts +37 -0
  515. package/dist/{types-DtUxK-Am.d.ts → types-CkXflqg7.d.ts} +31 -1
  516. package/dist/utils/cn.js +6 -1
  517. package/dist/utils/color.js +35 -10
  518. package/dist/utils/index.d.ts +18 -2
  519. package/dist/utils/index.js +4 -1
  520. package/dist/utils/silver-shine.js +16 -1
  521. package/dist/utils/style-axes.js +227 -0
  522. package/dist/utils/variant.js +104 -8
  523. package/dist/utils/view-transition.js +21 -0
  524. package/dist/variant-D81RhpbR.d.ts +104 -0
  525. package/dist/vertical-stepper.props-BXYcbW70.d.ts +29 -0
  526. package/package.json +52 -6
  527. package/src/styles/colors.css +100 -4
  528. package/src/styles/globals.css +8 -131
  529. package/src/styles/style-axes.css +21 -0
  530. package/src/styles/theme.css +696 -0
  531. package/dist/app-logo.props-Ct7QBdTd.d.ts +0 -40
  532. package/dist/popover-ByLD3-Qv.d.ts +0 -204
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../../utils/cn.js";
3
+ import { useStyleAxes } from "../../utils/style-axes.js";
3
4
  import { SectionCard } from "../cards/section-card.js";
4
5
  import { ScrollArea } from "../../core/scroll-area.js";
5
6
  import { ListDetailsItemButton } from "./list-details-item-button.js";
@@ -47,7 +48,8 @@ function pickSelectedId({ data, controlledValue, currentSelectedId }) {
47
48
  if (currentSelectedId != null && data.some((item) => item.id === currentSelectedId)) return currentSelectedId;
48
49
  return firstId;
49
50
  }
50
- function ListDetails({ value, onSelect, data, height, className, titleListPanelColumnWidth = 4, footer, unmountOnExit = false, variant = "outline", color = "mist", size = "default", mobileNavigation = "dropdown", labels }) {
51
+ function ListDetails({ value, onSelect, data, height, className, titleListPanelColumnWidth = 4, footer, unmountOnExit = false, variant = "outline", color = "mist", size = "default", mobileNavigation = "dropdown", labels, radius }) {
52
+ const { partStyle } = useStyleAxes({ radius }, ["radius"]);
51
53
  const [selectedId, setSelectedId] = useState(() => pickSelectedId({
52
54
  data,
53
55
  controlledValue: value
@@ -120,7 +122,8 @@ function ListDetails({ value, onSelect, data, height, className, titleListPanelC
120
122
  className: "md:hidden"
121
123
  }),
122
124
  /* @__PURE__ */ jsx(ScrollArea, {
123
- className: "items-list-container hidden min-h-0 flex-1 rounded-md border border-border md:block",
125
+ style: partStyle,
126
+ className: "items-list-container hidden min-h-0 flex-1 rounded-[var(--espd-own-radius,var(--espd-radius-surface,var(--radius-md)))] border-[length:var(--espd-own-border-width,var(--espd-border-width-surface,1px))] border-border md:block",
124
127
  children: /* @__PURE__ */ jsx("div", {
125
128
  className: "flex flex-col gap-2 p-2",
126
129
  children: data.map((item) => /* @__PURE__ */ jsx(ListDetailsItemButton, {
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+
3
+ interface LottieAnimationContainerProps {
4
+ animationData: object | string;
5
+ height?: number;
6
+ width?: number;
7
+ }
8
+ declare function LottieAnimationContainer({ animationData, height, width, }: LottieAnimationContainerProps): React.JSX.Element | null;
9
+
10
+ export { LottieAnimationContainer, type LottieAnimationContainerProps };
@@ -0,0 +1,2 @@
1
+ import { LottieAnimationContainer } from "./lottie-animation-container.js";
2
+ export { LottieAnimationContainer };
@@ -1,9 +1,28 @@
1
- import Lottie from "../../_vendor/lottie-react/build/index.es.js";
2
- import { useMemo } from "react";
1
+ import { useEffect, useMemo, useState } from "react";
3
2
  import { jsx } from "react/jsx-runtime";
4
3
  //#region src/components/lottie-animation-container/lottie-animation-container.tsx
5
4
  var DEFAULT_SIZE = 200;
5
+ var loadedLottie = null;
6
+ var lottiePromise = null;
7
+ function loadLottie() {
8
+ lottiePromise ?? (lottiePromise = import("../../_vendor/lottie-react/build/index.es.js").then((mod) => loadedLottie = mod.default, (error) => {
9
+ lottiePromise = null;
10
+ throw error;
11
+ }));
12
+ return lottiePromise;
13
+ }
6
14
  function LottieAnimationContainer({ animationData, height = DEFAULT_SIZE, width = DEFAULT_SIZE }) {
15
+ const [Lottie, setLottie] = useState(() => loadedLottie);
16
+ useEffect(() => {
17
+ if (Lottie) return;
18
+ let active = true;
19
+ loadLottie().then((component) => {
20
+ if (active) setLottie(() => component);
21
+ }, () => {});
22
+ return () => {
23
+ active = false;
24
+ };
25
+ }, [Lottie]);
7
26
  const parsedData = useMemo(() => {
8
27
  if (typeof animationData === "string") try {
9
28
  return JSON.parse(animationData);
@@ -18,7 +37,7 @@ function LottieAnimationContainer({ animationData, height = DEFAULT_SIZE, width
18
37
  height,
19
38
  width
20
39
  },
21
- children: /* @__PURE__ */ jsx(Lottie, {
40
+ children: Lottie && /* @__PURE__ */ jsx(Lottie, {
22
41
  animationData: parsedData,
23
42
  style: {
24
43
  height,
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+
3
+ interface VerificationInProgressProps {
4
+ title?: string;
5
+ }
6
+ declare function VerificationInProgress({ title }: VerificationInProgressProps): React.JSX.Element;
7
+
8
+ export { VerificationInProgress, type VerificationInProgressProps };
@@ -0,0 +1,2 @@
1
+ import { VerificationInProgress } from "./verification-in-progress/verification-in-progress.js";
2
+ export { VerificationInProgress };
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { ElementType } from 'react';
3
+
4
+ interface MarkdownContentProps {
5
+ /**
6
+ * Raw markdown source. Treated as trusted input: embedded raw HTML is **not** parsed
7
+ * (no `rehype-raw`), which is what makes a sanitizer unnecessary here.
8
+ */
9
+ content: string;
10
+ /**
11
+ * Router `Link`, forwarded to the library `Link` so internal hrefs navigate client-side
12
+ * instead of triggering a full page reload. Omit to render internal links as plain `<a>`.
13
+ */
14
+ linkComponent?: ElementType;
15
+ /** Theme for fenced code blocks. Forwarded to the library `Code`. */
16
+ colorTheme?: "light" | "dark";
17
+ className?: string;
18
+ }
19
+
20
+ /**
21
+ * Renders markdown using this library's own primitives (`Typography`, `Code`, `Link`,
22
+ * `Table`, `Separator`), so documents inherit the app's typography and theming.
23
+ *
24
+ * GitHub-flavoured markdown (tables, strikethrough, task lists, autolinks) via `remark-gfm`;
25
+ * headings get stable slug `id`s via `rehype-slug`, so `#anchor` links into a document work.
26
+ *
27
+ * `rehype-raw` is deliberately absent: embedded raw HTML is never parsed, so there is no
28
+ * injection surface and no sanitizer to keep in step. Content is expected to be trusted.
29
+ */
30
+ declare const MarkdownContent: React.ForwardRefExoticComponent<MarkdownContentProps & React.RefAttributes<HTMLDivElement>>;
31
+
32
+ export { MarkdownContent, type MarkdownContentProps };
@@ -0,0 +1,2 @@
1
+ import { MarkdownContent } from "./markdown-content.js";
2
+ export { MarkdownContent };
@@ -0,0 +1,125 @@
1
+ import * as React from 'react';
2
+ import { HTMLAttributes, ImgHTMLAttributes, ReactNode } from 'react';
3
+ import { k as StyleAxisProps } from '../../style-axes-DSQ2DGc5.js';
4
+
5
+ interface MediaCardProps extends HTMLAttributes<HTMLDivElement>, Pick<StyleAxisProps, "radius" | "elevation" | "border"> {
6
+ /** Rise a little on hover and keyboard focus. Default true. */
7
+ lift?: boolean;
8
+ }
9
+ interface MediaCardMediaProps extends HTMLAttributes<HTMLDivElement> {
10
+ /**
11
+ * `bleed` (default): edge to edge at the top of the card, a rule below it —
12
+ * for a photo. `inset`: a rounded stage set in from the card's edge — for a
13
+ * tile or an icon on a tint (give the tint as a `className`, `bg-swatch-2-light`).
14
+ */
15
+ layout?: "bleed" | "inset";
16
+ }
17
+ interface MediaCardImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, "src" | "loading"> {
18
+ src: string;
19
+ /** `cover` (default) fills the media and crops — a photo. `contain` shows all of it — a diagram. */
20
+ fit?: "cover" | "contain";
21
+ /** Load right away instead of when it nears the viewport: the cards in the first screenful. */
22
+ eager?: boolean;
23
+ /** Shown instead when the image fails to load. Nothing when omitted. */
24
+ fallback?: ReactNode;
25
+ }
26
+ interface MediaCardRevealProps extends HTMLAttributes<HTMLDivElement> {
27
+ /**
28
+ * How the layer appears on hover and keyboard focus:
29
+ * - `circle`: a dark scrim opens as a circle from the media's centre, a ring
30
+ * bursts out of it, and its parts (`MediaCardRevealItem`,
31
+ * `MediaCardRevealChips`, `MediaCardRevealFooter`) spring in one after
32
+ * another. Hidden on touch screens, which have no hover: put the action in
33
+ * the body for them too.
34
+ * - `strip`: a strip fades in along the bottom edge, for one or two actions.
35
+ * Always shown on touch screens.
36
+ */
37
+ variant?: "circle" | "strip";
38
+ /** `circle` only: draw the ring that bursts out as it opens. Default true. */
39
+ burst?: boolean;
40
+ /** `circle` only: the ring's colour and size (`text-swatch-2 size-19`). */
41
+ burstClassName?: string;
42
+ }
43
+ interface MediaCardRevealItemProps extends HTMLAttributes<HTMLDivElement> {
44
+ /** Its place in the entrance. Set by `MediaCardReveal` from the order of its children. */
45
+ step?: number;
46
+ }
47
+ interface MediaCardRevealChipsProps extends HTMLAttributes<HTMLUListElement> {
48
+ /** The chips, in order; each pops in a little after the one before. */
49
+ items: {
50
+ key: string;
51
+ label: ReactNode;
52
+ title?: string;
53
+ }[];
54
+ /** A last, dashed chip — "+5" — for what did not fit. */
55
+ more?: ReactNode;
56
+ }
57
+ interface MediaCardRevealFooterProps extends HTMLAttributes<HTMLDivElement> {
58
+ /** The action (a button), swinging in last. */
59
+ action?: ReactNode;
60
+ step?: number;
61
+ }
62
+ interface MediaCardLinkProps extends HTMLAttributes<HTMLAnchorElement> {
63
+ href?: string;
64
+ /** Render your own link (a router's `<Link>`) with the stretched-link styling. */
65
+ asChild?: boolean;
66
+ }
67
+ type MediaCardActionProps = HTMLAttributes<HTMLSpanElement>;
68
+
69
+ /**
70
+ * A card led by a picture — a product photo, a person's tile — that opens as
71
+ * one link: the title's `MediaCardLink` is stretched over the whole card, and
72
+ * anything interactive goes in a `MediaCardAction` (or the reveal), which sits
73
+ * above that link so a button is never nested in it. `MediaCardReveal` adds a
74
+ * layer over the media on hover and keyboard focus.
75
+ *
76
+ * <MediaCard>
77
+ * <MediaCardMedia>…<MediaCardReveal variant="strip">…</MediaCardReveal></MediaCardMedia>
78
+ * <MediaCardBody>
79
+ * <MediaCardTitle><MediaCardLink href="…">Name</MediaCardLink></MediaCardTitle>
80
+ * <MediaCardMeta>@handle</MediaCardMeta>
81
+ * <MediaCardFooter>…</MediaCardFooter>
82
+ * </MediaCardBody>
83
+ * </MediaCard>
84
+ */
85
+ declare function MediaCard({ lift, className, children, ...props }: MediaCardProps): React.JSX.Element;
86
+ /** The picture area, 16:9. Put the image, tile or icon inside, and a `MediaCardReveal` after it. */
87
+ declare function MediaCardMedia({ layout, className, ...props }: MediaCardMediaProps): React.JSX.Element;
88
+ /** The text below the media: title, meta and footer, stacked. */
89
+ declare function MediaCardBody({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.JSX.Element;
90
+ /** The card's name, one line, truncated. Holds the `MediaCardLink`. */
91
+ declare function MediaCardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>): React.JSX.Element;
92
+ /**
93
+ * The card's one link, stretched over the whole card so a click anywhere opens
94
+ * it. `asChild` renders your router's link instead of an `<a>`.
95
+ */
96
+ declare function MediaCardLink({ asChild, className, ...props }: MediaCardLinkProps): React.JSX.Element;
97
+ /** A line under the title — a handle, a byline. */
98
+ declare function MediaCardMeta({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.JSX.Element;
99
+ /** The bottom of the body (counters, a touch-screen action), pushed to the card's end. */
100
+ declare function MediaCardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.JSX.Element;
101
+ /** Lifts what it holds above the card's stretched link, so it can be clicked or hovered on its own. */
102
+ declare function MediaCardAction({ className, ...props }: MediaCardActionProps): React.JSX.Element;
103
+
104
+ /**
105
+ * The picture in a `MediaCardMedia`, with its loading handled: a pulsing
106
+ * placeholder fills the media until the image arrives, the image then fades
107
+ * in, and if it fails the `fallback` (a tint with an icon, say) takes its
108
+ * place. Lazy by default; pass `eager` for the cards in the first screenful.
109
+ */
110
+ declare function MediaCardImage({ src, alt, fit, eager, fallback, className, onLoad, onError, ...props }: MediaCardImageProps): React.JSX.Element;
111
+
112
+ /**
113
+ * The layer over a `MediaCardMedia` that appears on hover and keyboard focus.
114
+ * `circle` opens a scrim from the centre and staggers its parts in, in the
115
+ * order they are given; `strip` fades a strip in along the bottom.
116
+ */
117
+ declare function MediaCardReveal({ variant, burst, burstClassName, className, children, ...props }: MediaCardRevealProps): React.JSX.Element;
118
+ /** A block of the circle panel (a bio, a heading with chips), springing up in turn. */
119
+ declare function MediaCardRevealItem({ step, className, ...props }: MediaCardRevealItemProps): React.JSX.Element;
120
+ /** A row of small labels (the latest builds) popping in one by one, with an optional "+N". */
121
+ declare function MediaCardRevealChips({ items, more, className, ...props }: MediaCardRevealChipsProps): React.JSX.Element;
122
+ /** The circle panel's last row, at its bottom: a note on the left, the action swinging in on the right. */
123
+ declare function MediaCardRevealFooter({ action, step, className, children, ...props }: MediaCardRevealFooterProps): React.JSX.Element;
124
+
125
+ export { MediaCard, MediaCardAction, type MediaCardActionProps, MediaCardBody, MediaCardFooter, MediaCardImage, type MediaCardImageProps, MediaCardLink, type MediaCardLinkProps, MediaCardMedia, type MediaCardMediaProps, MediaCardMeta, type MediaCardProps, MediaCardReveal, MediaCardRevealChips, type MediaCardRevealChipsProps, MediaCardRevealFooter, type MediaCardRevealFooterProps, MediaCardRevealItem, type MediaCardRevealItemProps, type MediaCardRevealProps, MediaCardTitle };
@@ -0,0 +1,4 @@
1
+ import { MediaCard, MediaCardAction, MediaCardBody, MediaCardFooter, MediaCardLink, MediaCardMedia, MediaCardMeta, MediaCardTitle } from "./media-card.js";
2
+ import { MediaCardImage } from "./media-card-image.js";
3
+ import { MediaCardReveal, MediaCardRevealChips, MediaCardRevealFooter, MediaCardRevealItem } from "./media-card-reveal.js";
4
+ export { MediaCard, MediaCardAction, MediaCardBody, MediaCardFooter, MediaCardImage, MediaCardLink, MediaCardMedia, MediaCardMeta, MediaCardReveal, MediaCardRevealChips, MediaCardRevealFooter, MediaCardRevealItem, MediaCardTitle };
@@ -0,0 +1,59 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import { useCallback, useState } from "react";
3
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/components/media-card/media-card-image.tsx
5
+ /**
6
+ * The picture in a `MediaCardMedia`, with its loading handled: a pulsing
7
+ * placeholder fills the media until the image arrives, the image then fades
8
+ * in, and if it fails the `fallback` (a tint with an icon, say) takes its
9
+ * place. Lazy by default; pass `eager` for the cards in the first screenful.
10
+ */
11
+ function MediaCardImage({ src, alt = "", fit = "cover", eager = false, fallback, className, onLoad, onError, ...props }) {
12
+ const [state, setState] = useState({
13
+ src,
14
+ status: "loading"
15
+ });
16
+ if (state.src !== src) setState({
17
+ src,
18
+ status: "loading"
19
+ });
20
+ const status = state.src === src ? state.status : "loading";
21
+ const imageRef = useCallback((node) => {
22
+ if (node?.complete && node.naturalWidth > 0) setState((current) => current.src === src && current.status === "loading" ? {
23
+ src,
24
+ status: "loaded"
25
+ } : current);
26
+ }, [src]);
27
+ if (status === "error") return /* @__PURE__ */ jsx(Fragment$1, { children: fallback ?? null });
28
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [status === "loading" && /* @__PURE__ */ jsx("span", {
29
+ "aria-hidden": true,
30
+ "data-slot": "media-card-image-placeholder",
31
+ className: "absolute inset-0 animate-pulse bg-muted"
32
+ }), /* @__PURE__ */ jsx("img", {
33
+ ref: imageRef,
34
+ "data-slot": "media-card-image",
35
+ "data-status": status,
36
+ src,
37
+ alt,
38
+ loading: eager ? "eager" : "lazy",
39
+ decoding: "async",
40
+ onLoad: (event) => {
41
+ setState({
42
+ src,
43
+ status: "loaded"
44
+ });
45
+ onLoad?.(event);
46
+ },
47
+ onError: (event) => {
48
+ setState({
49
+ src,
50
+ status: "error"
51
+ });
52
+ onError?.(event);
53
+ },
54
+ className: cn("absolute inset-0 h-full w-full transition-opacity duration-300 ease-out motion-reduce:transition-none", fit === "cover" ? "object-cover" : "object-contain", status === "loaded" ? "opacity-100" : "opacity-0", className),
55
+ ...props
56
+ })] });
57
+ }
58
+ //#endregion
59
+ export { MediaCardImage };
@@ -0,0 +1,76 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import { BURST, CHIP_POPS, CIRCLE_PANEL, RISE_STEPS, STRIP, SWING, at } from "./media-card.classes.js";
3
+ import { Children, cloneElement, isValidElement } from "react";
4
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/components/media-card/media-card-reveal.tsx
6
+ /**
7
+ * The layer over a `MediaCardMedia` that appears on hover and keyboard focus.
8
+ * `circle` opens a scrim from the centre and staggers its parts in, in the
9
+ * order they are given; `strip` fades a strip in along the bottom.
10
+ */
11
+ function MediaCardReveal({ variant = "circle", burst = true, burstClassName, className, children, ...props }) {
12
+ if (variant === "strip") return /* @__PURE__ */ jsx("div", {
13
+ "data-slot": "media-card-reveal",
14
+ "data-variant": "strip",
15
+ className: cn("pointer-events-none absolute inset-x-0 bottom-0 z-20 flex justify-end bg-linear-to-t from-background/90 to-transparent p-2 pt-8 [&>*]:pointer-events-auto", STRIP, className),
16
+ ...props,
17
+ children
18
+ });
19
+ const parts = Children.toArray(children).map((child, index) => isValidElement(child) && child.props.step === void 0 ? cloneElement(child, { step: index }) : child);
20
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
21
+ "data-slot": "media-card-reveal",
22
+ "data-variant": "circle",
23
+ className: cn("pointer-events-none absolute inset-0 z-20 flex flex-col gap-2.5 bg-scrim/85 p-3.5 text-scrim-foreground pointer-coarse:hidden", CIRCLE_PANEL, className),
24
+ ...props,
25
+ children: parts
26
+ }), burst && /* @__PURE__ */ jsx("span", {
27
+ "aria-hidden": true,
28
+ "data-slot": "media-card-burst",
29
+ className: cn("pointer-events-none absolute top-1/2 left-1/2 z-30 size-19 -translate-1/2 rounded-full border-2 border-current", BURST, burstClassName)
30
+ })] });
31
+ }
32
+ /** A block of the circle panel (a bio, a heading with chips), springing up in turn. */
33
+ function MediaCardRevealItem({ step = 0, className, ...props }) {
34
+ return /* @__PURE__ */ jsx("div", {
35
+ "data-slot": "media-card-reveal-item",
36
+ className: cn("flex min-w-0 flex-col gap-1.5", at(RISE_STEPS, step), className),
37
+ ...props
38
+ });
39
+ }
40
+ /** A row of small labels (the latest builds) popping in one by one, with an optional "+N". */
41
+ function MediaCardRevealChips({ items, more, className, ...props }) {
42
+ const chip = "inline-flex min-w-0 max-w-full items-center rounded-full px-2.5 py-1 text-xs font-semibold";
43
+ return /* @__PURE__ */ jsxs("ul", {
44
+ "data-slot": "media-card-reveal-chips",
45
+ className: cn("m-0 flex list-none flex-wrap gap-1.5 p-0", className),
46
+ ...props,
47
+ children: [items.map((item, index) => /* @__PURE__ */ jsx("li", {
48
+ title: item.title,
49
+ className: cn(chip, "bg-scrim-foreground/15", at(CHIP_POPS, index)),
50
+ children: /* @__PURE__ */ jsx("span", {
51
+ className: "truncate",
52
+ children: item.label
53
+ })
54
+ }, item.key)), more !== void 0 && more !== null && /* @__PURE__ */ jsx("li", {
55
+ className: cn(chip, "border border-dashed border-scrim-foreground/40", at(CHIP_POPS, items.length)),
56
+ children: more
57
+ })]
58
+ });
59
+ }
60
+ /** The circle panel's last row, at its bottom: a note on the left, the action swinging in on the right. */
61
+ function MediaCardRevealFooter({ action, step = 2, className, children, ...props }) {
62
+ return /* @__PURE__ */ jsxs("div", {
63
+ "data-slot": "media-card-reveal-footer",
64
+ className: cn("mt-auto flex items-center justify-between gap-2.5", at(RISE_STEPS, step), className),
65
+ ...props,
66
+ children: [/* @__PURE__ */ jsx("div", {
67
+ className: "min-w-0 truncate font-mono text-xs text-scrim-foreground/75",
68
+ children
69
+ }), action && /* @__PURE__ */ jsx("span", {
70
+ className: cn("pointer-events-auto relative z-30", SWING),
71
+ children: action
72
+ })]
73
+ });
74
+ }
75
+ //#endregion
76
+ export { MediaCardReveal, MediaCardRevealChips, MediaCardRevealFooter, MediaCardRevealItem };
@@ -0,0 +1,37 @@
1
+ //#region src/components/media-card/media-card.classes.ts
2
+ /** The card: lifts a little on hover and focus. */
3
+ var LIFT = "transition duration-200 ease-out hover:-translate-y-0.75 focus-within:-translate-y-0.75 motion-reduce:transform-none";
4
+ /**
5
+ * The circle panel: a scrim clipped to a circle that opens from the centre.
6
+ * No backdrop blur, on purpose: Chrome paints a backdrop-filter across the
7
+ * whole layer while its clip-path animates, so the circle would never show.
8
+ */
9
+ var CIRCLE_PANEL = "invisible clip-circle-closed transition-clip duration-300 ease-in group-hover/media-card:visible group-hover/media-card:clip-circle-open group-hover/media-card:duration-500 group-hover/media-card:ease-emphasized group-focus-within/media-card:visible group-focus-within/media-card:clip-circle-open group-focus-within/media-card:duration-500 group-focus-within/media-card:ease-emphasized motion-reduce:transition-none";
10
+ /** The ring bursting out of the centre as the circle opens (drawn above the panel). */
11
+ var BURST = "opacity-0 motion-safe:group-hover/media-card:animate-burst motion-safe:group-focus-within/media-card:animate-burst";
12
+ /** The strip: fades in along the bottom; always there on a touch screen. */
13
+ var STRIP = "opacity-0 transition-opacity group-hover/media-card:opacity-100 group-focus-within/media-card:opacity-100 pointer-coarse:opacity-100";
14
+ var RISE = "translate-y-3 scale-96 opacity-0 transition duration-150 group-hover/media-card:translate-y-0 group-hover/media-card:scale-100 group-hover/media-card:opacity-100 group-hover/media-card:duration-500 group-hover/media-card:ease-spring group-focus-within/media-card:translate-y-0 group-focus-within/media-card:scale-100 group-focus-within/media-card:opacity-100 group-focus-within/media-card:duration-500 group-focus-within/media-card:ease-spring motion-reduce:translate-y-0 motion-reduce:scale-100 motion-reduce:transition-none";
15
+ /** A part of the circle panel springing up; one per step, the last repeated. */
16
+ var RISE_STEPS = [
17
+ `${RISE} group-hover/media-card:delay-120 group-focus-within/media-card:delay-120`,
18
+ `${RISE} group-hover/media-card:delay-180 group-focus-within/media-card:delay-180`,
19
+ `${RISE} group-hover/media-card:delay-260 group-focus-within/media-card:delay-260`
20
+ ];
21
+ var POP = "scale-50 -rotate-6 opacity-0 transition duration-120 group-hover/media-card:scale-100 group-hover/media-card:rotate-0 group-hover/media-card:opacity-100 group-hover/media-card:duration-550 group-hover/media-card:ease-overshoot group-focus-within/media-card:scale-100 group-focus-within/media-card:rotate-0 group-focus-within/media-card:opacity-100 group-focus-within/media-card:duration-550 group-focus-within/media-card:ease-overshoot motion-reduce:scale-100 motion-reduce:rotate-0 motion-reduce:transition-none";
22
+ /** A chip popping in with a little turn; one per position, the last repeated. */
23
+ var CHIP_POPS = [
24
+ `${POP} group-hover/media-card:delay-240 group-focus-within/media-card:delay-240`,
25
+ `${POP} group-hover/media-card:delay-310 group-focus-within/media-card:delay-310`,
26
+ `${POP} group-hover/media-card:delay-380 group-focus-within/media-card:delay-380`,
27
+ `${POP} group-hover/media-card:delay-450 group-focus-within/media-card:delay-450`,
28
+ `${POP} group-hover/media-card:delay-520 group-focus-within/media-card:delay-520`
29
+ ];
30
+ /** The footer's action swinging in last; under the pointer it lifts at once. */
31
+ var SWING = "inline-flex translate-x-4 rotate-8 transition duration-150 group-hover/media-card:translate-x-0 group-hover/media-card:rotate-0 group-hover/media-card:duration-600 group-hover/media-card:ease-overshoot group-hover/media-card:delay-300 group-focus-within/media-card:translate-x-0 group-focus-within/media-card:rotate-0 group-focus-within/media-card:duration-600 group-focus-within/media-card:ease-overshoot group-focus-within/media-card:delay-300 hover:-translate-y-px hover:scale-104 hover:delay-0 hover:duration-200 hover:ease-spring motion-reduce:translate-x-0 motion-reduce:rotate-0 motion-reduce:transition-none motion-reduce:hover:translate-y-0 motion-reduce:hover:scale-100";
32
+ /** Pick the class for a position, repeating the last one past the end. */
33
+ function at(list, index) {
34
+ return list[Math.min(Math.max(index, 0), list.length - 1)] ?? "";
35
+ }
36
+ //#endregion
37
+ export { BURST, CHIP_POPS, CIRCLE_PANEL, LIFT, RISE_STEPS, STRIP, SWING, at };
@@ -0,0 +1,91 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import { Card } from "../../core/card.js";
3
+ import { LIFT } from "./media-card.classes.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Slot } from "@radix-ui/react-slot";
6
+ //#region src/components/media-card/media-card.tsx
7
+ /**
8
+ * A card led by a picture — a product photo, a person's tile — that opens as
9
+ * one link: the title's `MediaCardLink` is stretched over the whole card, and
10
+ * anything interactive goes in a `MediaCardAction` (or the reveal), which sits
11
+ * above that link so a button is never nested in it. `MediaCardReveal` adds a
12
+ * layer over the media on hover and keyboard focus.
13
+ *
14
+ * <MediaCard>
15
+ * <MediaCardMedia>…<MediaCardReveal variant="strip">…</MediaCardReveal></MediaCardMedia>
16
+ * <MediaCardBody>
17
+ * <MediaCardTitle><MediaCardLink href="…">Name</MediaCardLink></MediaCardTitle>
18
+ * <MediaCardMeta>@handle</MediaCardMeta>
19
+ * <MediaCardFooter>…</MediaCardFooter>
20
+ * </MediaCardBody>
21
+ * </MediaCard>
22
+ */
23
+ function MediaCard({ lift = true, className, children, ...props }) {
24
+ return /* @__PURE__ */ jsx(Card, {
25
+ "data-slot": "media-card",
26
+ className: cn("group/media-card relative flex w-full flex-col overflow-hidden", "has-[[data-slot=media-card-link]:focus-visible]:ring-2 has-[[data-slot=media-card-link]:focus-visible]:ring-primary", lift && LIFT, className),
27
+ ...props,
28
+ children
29
+ });
30
+ }
31
+ /** The picture area, 16:9. Put the image, tile or icon inside, and a `MediaCardReveal` after it. */
32
+ function MediaCardMedia({ layout = "bleed", className, ...props }) {
33
+ return /* @__PURE__ */ jsx("div", {
34
+ "data-slot": "media-card-media",
35
+ className: cn("relative flex aspect-video items-center justify-center overflow-hidden", layout === "inset" ? "m-2 mb-0 rounded-xl" : "border-b border-border", className),
36
+ ...props
37
+ });
38
+ }
39
+ /** The text below the media: title, meta and footer, stacked. */
40
+ function MediaCardBody({ className, ...props }) {
41
+ return /* @__PURE__ */ jsx("div", {
42
+ "data-slot": "media-card-body",
43
+ className: cn("flex flex-1 flex-col gap-2 p-4", className),
44
+ ...props
45
+ });
46
+ }
47
+ /** The card's name, one line, truncated. Holds the `MediaCardLink`. */
48
+ function MediaCardTitle({ className, ...props }) {
49
+ return /* @__PURE__ */ jsx("h3", {
50
+ "data-slot": "media-card-title",
51
+ className: cn("m-0 min-w-0 truncate text-base font-bold leading-snug text-foreground", className),
52
+ ...props
53
+ });
54
+ }
55
+ /**
56
+ * The card's one link, stretched over the whole card so a click anywhere opens
57
+ * it. `asChild` renders your router's link instead of an `<a>`.
58
+ */
59
+ function MediaCardLink({ asChild, className, ...props }) {
60
+ return /* @__PURE__ */ jsx(asChild ? Slot : "a", {
61
+ "data-slot": "media-card-link",
62
+ className: cn("text-inherit no-underline after:absolute after:inset-0 after:z-10 after:content-[''] focus-visible:outline-none", className),
63
+ ...props
64
+ });
65
+ }
66
+ /** A line under the title — a handle, a byline. */
67
+ function MediaCardMeta({ className, ...props }) {
68
+ return /* @__PURE__ */ jsx("div", {
69
+ "data-slot": "media-card-meta",
70
+ className: cn("flex min-w-0 items-center gap-2 text-sm text-foreground-secondary", className),
71
+ ...props
72
+ });
73
+ }
74
+ /** The bottom of the body (counters, a touch-screen action), pushed to the card's end. */
75
+ function MediaCardFooter({ className, ...props }) {
76
+ return /* @__PURE__ */ jsx("div", {
77
+ "data-slot": "media-card-footer",
78
+ className: cn("mt-auto flex items-center gap-2", className),
79
+ ...props
80
+ });
81
+ }
82
+ /** Lifts what it holds above the card's stretched link, so it can be clicked or hovered on its own. */
83
+ function MediaCardAction({ className, ...props }) {
84
+ return /* @__PURE__ */ jsx("span", {
85
+ "data-slot": "media-card-action",
86
+ className: cn("relative z-30 inline-flex", className),
87
+ ...props
88
+ });
89
+ }
90
+ //#endregion
91
+ export { MediaCard, MediaCardAction, MediaCardBody, MediaCardFooter, MediaCardLink, MediaCardMedia, MediaCardMeta, MediaCardTitle };
@@ -0,0 +1,41 @@
1
+ import * as React from 'react';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ /**
5
+ * `photo`: the picture letterboxed over a blurred, darkened copy of itself, so
6
+ * a portrait, a panorama or a tiny image fills the frame without being cropped.
7
+ * `diagram`: the picture on the dotted canvas surface (a wiring diagram, a
8
+ * schematic), no blur.
9
+ */
10
+ type MediaStageVariant = "photo" | "diagram";
11
+ /** The frame's proportions. It never takes its height from what is inside it. */
12
+ type MediaStageAspect = "4/3" | "16/9" | "1/1";
13
+ interface MediaStageProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
14
+ /** The picture, shown whole. Absent: the bare frame, for a video player or a placeholder passed as `children`. */
15
+ src?: string;
16
+ /** The picture's alt text. The blurred copy behind it is always hidden from assistive technology. */
17
+ alt?: string;
18
+ /** Default `photo`. */
19
+ variant?: MediaStageVariant;
20
+ /** Default `4/3`. */
21
+ aspect?: MediaStageAspect;
22
+ /** `lazy` (default) or `eager`, for the picture above the fold. */
23
+ loading?: "lazy" | "eager";
24
+ /**
25
+ * Drawn over the picture: arrows, a caption chip, a play button, an iframe.
26
+ * Place them yourself (`absolute`, `inset-0`); the frame is `relative`.
27
+ */
28
+ children?: ReactNode;
29
+ }
30
+
31
+ /**
32
+ * A fixed-proportion frame for one picture — a product photo, a video poster,
33
+ * a wiring diagram. The frame's height comes from its width and `aspect`
34
+ * alone, so a gallery never jumps between pictures of different shapes and a
35
+ * column beside it never stretches it. A photo is shown whole (`object-contain`)
36
+ * over a blurred copy of itself; a diagram sits on the dotted canvas.
37
+ * Everything else — arrows, captions, a play button — is `children`, drawn on top.
38
+ */
39
+ declare function MediaStage({ src, alt, variant, aspect, loading, className, children, ...rest }: MediaStageProps): React.JSX.Element;
40
+
41
+ export { MediaStage, type MediaStageAspect, type MediaStageProps, type MediaStageVariant };
@@ -0,0 +1,2 @@
1
+ import { MediaStage } from "./media-stage.js";
2
+ export { MediaStage };
@@ -0,0 +1,48 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/components/media-stage/media-stage.tsx
4
+ var ASPECTS = {
5
+ "4/3": "aspect-4/3",
6
+ "16/9": "aspect-video",
7
+ "1/1": "aspect-square"
8
+ };
9
+ var DOT_GRID = "bg-canvas bg-[image:radial-gradient(var(--color-canvas-dot)_1px,transparent_1.5px)] bg-[size:16px_16px]";
10
+ /**
11
+ * A fixed-proportion frame for one picture — a product photo, a video poster,
12
+ * a wiring diagram. The frame's height comes from its width and `aspect`
13
+ * alone, so a gallery never jumps between pictures of different shapes and a
14
+ * column beside it never stretches it. A photo is shown whole (`object-contain`)
15
+ * over a blurred copy of itself; a diagram sits on the dotted canvas.
16
+ * Everything else — arrows, captions, a play button — is `children`, drawn on top.
17
+ */
18
+ function MediaStage({ src, alt = "", variant = "photo", aspect = "4/3", loading = "lazy", className, children, ...rest }) {
19
+ const diagram = variant === "diagram";
20
+ return /* @__PURE__ */ jsxs("div", {
21
+ "data-slot": "media-stage",
22
+ "data-variant": variant,
23
+ className: cn("relative isolate w-full overflow-hidden rounded-xl", ASPECTS[aspect], diagram ? DOT_GRID : "bg-scrim", className),
24
+ ...rest,
25
+ children: [
26
+ src && !diagram && /* @__PURE__ */ jsx("img", {
27
+ src,
28
+ alt: "",
29
+ "aria-hidden": true,
30
+ loading,
31
+ decoding: "async",
32
+ draggable: false,
33
+ className: "absolute inset-0 -z-10 size-full scale-110 object-cover blur-2xl brightness-85"
34
+ }),
35
+ src && /* @__PURE__ */ jsx("img", {
36
+ src,
37
+ alt,
38
+ loading,
39
+ decoding: "async",
40
+ draggable: false,
41
+ className: cn("absolute inset-0 size-full object-contain", diagram && "p-4")
42
+ }),
43
+ children
44
+ ]
45
+ });
46
+ }
47
+ //#endregion
48
+ export { MediaStage };
@@ -0,0 +1,14 @@
1
+ import React__default from 'react';
2
+
3
+ interface MenuProps {
4
+ children: React__default.ReactNode;
5
+ trigger: React__default.ReactNode;
6
+ align?: "start" | "center" | "end";
7
+ side?: "top" | "right" | "bottom" | "left";
8
+ sideOffset?: number;
9
+ minWidth?: string | number;
10
+ }
11
+
12
+ declare function Menu({ children, trigger, align, side, sideOffset, minWidth, }: MenuProps): React__default.JSX.Element;
13
+
14
+ export { Menu, type MenuProps };
@@ -0,0 +1,2 @@
1
+ import Menu from "./menu.js";
2
+ export { Menu };