@espressif/dashboard-ui-components 1.11.1 → 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 +1020 -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 +50 -19
  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,28 +1,60 @@
1
1
  import Avatar from "../../components/avatar/avatar.js";
2
- import List from "../../components/list/list.js";
2
+ import List$1 from "../../components/list/list.js";
3
3
  import { Button } from "../../components/button/button.js";
4
- import Menu from "../../components/menu/menu.js";
4
+ import Menu$1 from "../../components/menu/menu.js";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { ChevronsUpDown } from "lucide-react";
6
7
  //#region src/common/my-account-menu/my-account-menu.tsx
7
- function MyAccountMenu({ name, email, imageUrl, minWidth = "200px", menuItems, badgeColor, badgeIcon }) {
8
- return /* @__PURE__ */ jsx(Menu, {
9
- trigger: /* @__PURE__ */ jsxs(Button, {
8
+ function MyAccountMenu({ name, email, imageUrl, minWidth = "200px", menuItems, avatarColor, badgeColor, badgeIcon, triggerVariant = "avatar", side, align = "end" }) {
9
+ const avatar = /* @__PURE__ */ jsx(Avatar, {
10
+ name: name || email,
11
+ imageUrl,
12
+ color: avatarColor,
13
+ badgeColor,
14
+ badgeIcon
15
+ });
16
+ return /* @__PURE__ */ jsx(Menu$1, {
17
+ trigger: triggerVariant === "card" ? /* @__PURE__ */ jsxs("button", {
18
+ type: "button",
19
+ "data-slot": "account-menu-card",
20
+ className: "flex w-full min-w-0 cursor-pointer items-center gap-3 overflow-hidden rounded-[var(--espd-radius-item,var(--radius-md))] p-2 text-left outline-hidden ring-ring transition-colors hover:bg-accent/60 focus-visible:ring-[length:var(--espd-ring-width,2px)] data-[state=open]:bg-accent/60",
21
+ children: [
22
+ /* @__PURE__ */ jsx("span", {
23
+ className: "flex shrink-0",
24
+ children: avatar
25
+ }),
26
+ /* @__PURE__ */ jsxs("span", {
27
+ className: "grid min-w-0 flex-1 leading-tight",
28
+ children: [name && /* @__PURE__ */ jsx("span", {
29
+ className: "truncate text-sm font-medium",
30
+ children: name
31
+ }), email && /* @__PURE__ */ jsx("span", {
32
+ className: "truncate text-xs text-muted-foreground",
33
+ children: email
34
+ })]
35
+ }),
36
+ /* @__PURE__ */ jsx(ChevronsUpDown, {
37
+ className: "size-4 shrink-0 opacity-60",
38
+ "aria-hidden": true
39
+ }),
40
+ /* @__PURE__ */ jsx("span", {
41
+ className: "sr-only",
42
+ children: "My Account"
43
+ })
44
+ ]
45
+ }) : /* @__PURE__ */ jsxs(Button, {
10
46
  variant: "ghost",
11
47
  size: "icon",
12
48
  className: "rounded-full",
13
- children: [/* @__PURE__ */ jsx(Avatar, {
14
- name: name || email,
15
- imageUrl,
16
- badgeColor,
17
- badgeIcon
18
- }), /* @__PURE__ */ jsx("span", {
49
+ children: [avatar, /* @__PURE__ */ jsx("span", {
19
50
  className: "sr-only",
20
51
  children: "My Account"
21
52
  })]
22
53
  }),
23
- align: "end",
54
+ side,
55
+ align,
24
56
  minWidth,
25
- children: /* @__PURE__ */ jsx(List, {
57
+ children: /* @__PURE__ */ jsx(List$1, {
26
58
  items: menuItems,
27
59
  role: "dropdown-list"
28
60
  })
@@ -1,14 +1,15 @@
1
1
  import Avatar from "../../components/avatar/avatar.js";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  //#region src/common/profile-card/profile-card.tsx
4
- function ProfileCard({ name, email, imageUrl }) {
4
+ function ProfileCard({ name, email, imageUrl, avatarColor }) {
5
5
  return /* @__PURE__ */ jsxs("div", {
6
6
  className: "flex items-center gap-3",
7
7
  children: [/* @__PURE__ */ jsx("div", {
8
8
  className: "shrink-0",
9
9
  children: /* @__PURE__ */ jsx(Avatar, {
10
10
  name: name || email,
11
- imageUrl: imageUrl || ""
11
+ imageUrl: imageUrl || "",
12
+ color: avatarColor
12
13
  })
13
14
  }), /* @__PURE__ */ jsxs("div", {
14
15
  className: "flex-1 min-w-0 flex flex-col gap-1",
@@ -19,20 +19,29 @@ var sizeStyles = {
19
19
  text: "text-lg font-medium tracking-tight"
20
20
  }
21
21
  };
22
- function Accordion({ items, size = "default", allowMultiple = false, defaultValue, className, triggerClassName, contentClassName }) {
22
+ /** The open ids in the shape the primitive wants for the mode: one string (single), or a list (multiple). */
23
+ function resolveValue(value, allowMultiple) {
24
+ if (allowMultiple) return Array.isArray(value) ? value : value ? [value] : void 0;
25
+ return typeof value === "string" ? value : Array.isArray(value) ? value[0] : void 0;
26
+ }
27
+ function Accordion({ items, size = "default", allowMultiple = false, defaultValue, value, onValueChange, className, itemClassName, triggerClassName, contentClassName }) {
23
28
  const styles = sizeStyles[size];
24
- const resolvedDefault = allowMultiple ? Array.isArray(defaultValue) ? defaultValue : defaultValue ? [defaultValue] : void 0 : typeof defaultValue === "string" ? defaultValue : Array.isArray(defaultValue) ? defaultValue[0] : void 0;
29
+ const state = value === void 0 ? { defaultValue: resolveValue(defaultValue, allowMultiple) } : {
30
+ value: resolveValue(value, allowMultiple) ?? (allowMultiple ? [] : ""),
31
+ onValueChange
32
+ };
25
33
  return /* @__PURE__ */ jsx(Accordion$1, {
26
34
  type: allowMultiple ? "multiple" : "single",
27
35
  collapsible: true,
28
- defaultValue: resolvedDefault,
36
+ ...state,
29
37
  className: cn("w-full", className),
30
38
  children: items.map((item) => /* @__PURE__ */ jsxs(AccordionItem, {
31
39
  value: item.id,
40
+ className: itemClassName,
32
41
  children: [/* @__PURE__ */ jsx(AccordionTrigger, {
33
- className: cn(styles.trigger, triggerClassName),
42
+ className: cn("min-w-0 gap-2", styles.trigger, triggerClassName),
34
43
  children: /* @__PURE__ */ jsxs("span", {
35
- className: "flex items-center gap-2",
44
+ className: "flex min-w-0 flex-1 items-center gap-2",
36
45
  children: [item.icon, typeof item.title === "string" ? /* @__PURE__ */ jsx("span", {
37
46
  className: styles.text,
38
47
  children: item.title
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { S as Size } from '../../index-BQANnKs9.js';
4
+
5
+ interface AccordionItem {
6
+ id: string;
7
+ title: string | ReactNode;
8
+ icon?: ReactNode;
9
+ content: string | ReactNode;
10
+ }
11
+ type AccordionSize = Size;
12
+ interface AccordionProps {
13
+ items: AccordionItem[];
14
+ size?: AccordionSize;
15
+ allowMultiple?: boolean;
16
+ /** What is open at first, when the accordion keeps its own state. */
17
+ defaultValue?: string | string[];
18
+ /**
19
+ * What is open, when the caller keeps the state (controlled): the open
20
+ * item's id, or `''` for none; with `allowMultiple`, the open ids. An
21
+ * accordion the page also opens and closes from elsewhere — a row opened
22
+ * by a click on a drawing — passes this with `onValueChange`.
23
+ */
24
+ value?: string | string[];
25
+ /** Called with the new `value` on every open or close the person makes. */
26
+ onValueChange?: (value: string | string[]) => void;
27
+ className?: string;
28
+ /** On every item (the row): `data-[state=open]:…` styles the open one. */
29
+ itemClassName?: string;
30
+ triggerClassName?: string;
31
+ contentClassName?: string;
32
+ }
33
+
34
+ declare function Accordion({ items, size, allowMultiple, defaultValue, value, onValueChange, className, itemClassName, triggerClassName, contentClassName, }: AccordionProps): React.JSX.Element;
35
+
36
+ export { Accordion, type AccordionItem, type AccordionProps, type AccordionSize };
@@ -0,0 +1,2 @@
1
+ import { Accordion } from "./accordion.js";
2
+ export { Accordion };
@@ -1,4 +1,5 @@
1
1
  import { cn } from "../../utils/cn.js";
2
+ import { useStyleAxes } from "../../utils/style-axes.js";
2
3
  import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuTrigger } from "../../core/animate-ui/components/radix/dropdown-menu.js";
3
4
  import { Button } from "../button/button.js";
4
5
  import { outlineSearchShellClasses, searchFieldContainerSizeClasses, searchFieldIconSizeClasses, searchFieldInputTextClasses } from "../search-field-shell.js";
@@ -7,7 +8,11 @@ import { jsx, jsxs } from "react/jsx-runtime";
7
8
  import { ChevronDown, Search, X } from "lucide-react";
8
9
  //#region src/components/advanced-search-box/advanced-search-box.tsx
9
10
  var DEBOUNCE_MS = 500;
10
- function AdvancedSearchBox({ searchMeta, onSearch, size = "default", className, searchOnEnter = false }) {
11
+ function AdvancedSearchBox({ searchMeta, onSearch, size = "default", className, searchOnEnter = false, radius, border }) {
12
+ const axes = useStyleAxes({
13
+ radius,
14
+ border
15
+ }, ["radius", "border"]);
11
16
  const [selectedId, setSelectedId] = useState(searchMeta[0].id);
12
17
  const [value, setValue] = useState("");
13
18
  const onSearchRef = useRef(onSearch);
@@ -86,7 +91,8 @@ function AdvancedSearchBox({ searchMeta, onSearch, size = "default", className,
86
91
  className: "h-auto w-auto p-0 m-0 shrink-0"
87
92
  }) : /* @__PURE__ */ jsx(Search, { className: cn(iconSize, "text-muted-foreground shrink-0") });
88
93
  return /* @__PURE__ */ jsxs("div", {
89
- className: cn(outlineSearchShellClasses, "flex w-full items-center gap-2 rounded-md", "focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 ring-offset-background", searchFieldContainerSizeClasses[size], className),
94
+ className: cn(outlineSearchShellClasses, "flex w-full items-center gap-2 rounded-[var(--espd-own-radius,var(--espd-radius-control,var(--radius-md)))]", "focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 ring-offset-background", searchFieldContainerSizeClasses[size], className),
95
+ style: axes.style,
90
96
  children: [
91
97
  fieldSelector,
92
98
  /* @__PURE__ */ jsx("div", { className: "h-4 w-px bg-border shrink-0" }),
@@ -0,0 +1,29 @@
1
+ import * as React from 'react';
2
+ import { S as Size } from '../../index-BQANnKs9.js';
3
+ import { k as StyleAxisProps } from '../../style-axes-DSQ2DGc5.js';
4
+
5
+ interface SearchMeta<TId extends string = string> {
6
+ id: TId;
7
+ label: string;
8
+ type: string;
9
+ placeholder: string;
10
+ }
11
+ interface AdvancedSearchBoxProps<TId extends string = string> extends Pick<StyleAxisProps, "radius" | "border"> {
12
+ searchMeta: SearchMeta<TId>[];
13
+ onSearch: (data: {
14
+ id: TId;
15
+ value: string;
16
+ }) => void;
17
+ size?: Size;
18
+ className?: string;
19
+ /**
20
+ * When true, onSearch fires only when the user presses Enter (or clicks the
21
+ * Clear button). Typing and switching the search field do not trigger it.
22
+ * Default: false (500ms debounced as-you-type behavior).
23
+ */
24
+ searchOnEnter?: boolean;
25
+ }
26
+
27
+ declare function AdvancedSearchBox<TId extends string = string>({ searchMeta, onSearch, size, className, searchOnEnter, radius, border, }: AdvancedSearchBoxProps<TId>): React.JSX.Element;
28
+
29
+ export { AdvancedSearchBox, type AdvancedSearchBoxProps, type SearchMeta };
@@ -0,0 +1,2 @@
1
+ import AdvancedSearchBox from "./advanced-search-box.js";
2
+ export { AdvancedSearchBox };
@@ -38,7 +38,7 @@ var dismissButtonSizeClasses = {
38
38
  default: "size-7 [&_svg]:size-4",
39
39
  lg: "size-8 [&_svg]:size-4"
40
40
  };
41
- var Alert = React$1.forwardRef(({ icon, title, description, children, type, color, iconAvatarVariant = "solid", size = "sm", variant = "gradient", hideIcon = false, action, actions, actionsPlacement, dismissible = false, onDismiss, dismissLabel = "Close alert", className }, ref) => {
41
+ var Alert = React$1.forwardRef(({ icon, title, description, children, type, color, iconAvatarVariant = "solid", size = "sm", variant = "gradient", hideIcon = false, action, actions, actionsPlacement, dismissible = false, onDismiss, dismissLabel = "Close alert", className, radius }, ref) => {
42
42
  const [dismissed, setDismissed] = React$1.useState(false);
43
43
  const handleDismiss = React$1.useCallback(() => {
44
44
  setDismissed(true);
@@ -68,6 +68,7 @@ var Alert = React$1.forwardRef(({ icon, title, description, children, type, colo
68
68
  if (dismissed) return null;
69
69
  return /* @__PURE__ */ jsx(IconTextActionCard, {
70
70
  ref,
71
+ radius,
71
72
  title,
72
73
  description: resolvedDescription,
73
74
  icon: resolvedIcon,
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import { b as AlertProps } from '../../alert.props-CcKo49Rb.js';
3
+ export { A as AlertColor, a as AlertIconAvatarVariant, c as AlertSize, d as AlertType, e as AlertVariant } from '../../alert.props-CcKo49Rb.js';
4
+ import '../../index-BQANnKs9.js';
5
+ import '../../variant-D81RhpbR.js';
6
+ import '../../style-axes-DSQ2DGc5.js';
7
+ import '../../icon-avatar.props-RYtw2eSW.js';
8
+ import '../../icon-text-action-card.props-B2ggncUK.js';
9
+
10
+ declare const Alert: React.ForwardRefExoticComponent<AlertProps & React.RefAttributes<HTMLDivElement>>;
11
+
12
+ export { Alert, AlertProps };
@@ -0,0 +1,2 @@
1
+ import { Alert } from "./alert.js";
2
+ export { Alert };
@@ -0,0 +1,83 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import { Popover, PopoverAnchor, PopoverContent } from "../../core/popover.js";
3
+ import { Typography } from "../typography/typography.js";
4
+ import { ToolbarButton } from "../toolbar/toolbar-button.js";
5
+ import { Badge } from "../../core/badge.js";
6
+ import { useId, useRef } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { X } from "lucide-react";
9
+ //#region src/components/anchored-panel/anchored-panel.tsx
10
+ /**
11
+ * A square panel attached to a point by a short leader line — beside the thing
12
+ * it edits, never in a far corner. Non-modal: what is behind it stays live.
13
+ * Focus moves into it on opening; Escape, ✕ or a press elsewhere closes it
14
+ * and focus goes back where it was.
15
+ */
16
+ function AnchoredPanel({ open, anchorRef, side, title, subtitle, badge, closeLabel, onClose, keepOpenFor, children }) {
17
+ const titleId = useId();
18
+ const body = useRef(null);
19
+ function onOpenFocus(event) {
20
+ event.preventDefault();
21
+ body.current?.focus();
22
+ }
23
+ function onOutside(event) {
24
+ if (keepOpenFor && event.target instanceof Element && keepOpenFor(event.target)) event.preventDefault();
25
+ }
26
+ return /* @__PURE__ */ jsxs(Popover, {
27
+ open,
28
+ onOpenChange: (next) => !next && onClose(),
29
+ modal: false,
30
+ children: [/* @__PURE__ */ jsx(PopoverAnchor, {
31
+ ref: anchorRef,
32
+ className: "pointer-events-none absolute top-0 left-0 size-0",
33
+ children: open && /* @__PURE__ */ jsx("span", {
34
+ "aria-hidden": true,
35
+ className: cn("absolute top-0 h-px w-4 bg-primary", side === "right" ? "left-0" : "right-0")
36
+ })
37
+ }), open && /* @__PURE__ */ jsxs(PopoverContent, {
38
+ side,
39
+ align: "center",
40
+ sideOffset: 16,
41
+ avoidCollisions: false,
42
+ "aria-labelledby": titleId,
43
+ onInteractOutside: onOutside,
44
+ onOpenAutoFocus: onOpenFocus,
45
+ "data-slot": "anchored-panel",
46
+ className: "flex max-h-96 w-80 flex-col overflow-hidden rounded-xs border border-primary bg-background p-0 shadow-sm",
47
+ children: [/* @__PURE__ */ jsxs("div", {
48
+ className: "flex h-9 shrink-0 items-center gap-2 border-b border-border bg-surface-container-low pr-1 pl-3",
49
+ children: [
50
+ /* @__PURE__ */ jsx(Typography, {
51
+ id: titleId,
52
+ variant: "subtitle2",
53
+ as: "h2",
54
+ className: "m-0 min-w-0 truncate text-sm text-foreground",
55
+ children: title
56
+ }),
57
+ subtitle && /* @__PURE__ */ jsx("span", {
58
+ className: "min-w-0 flex-1 truncate font-mono text-xs text-foreground-secondary",
59
+ children: subtitle
60
+ }),
61
+ !subtitle && /* @__PURE__ */ jsx("span", { className: "flex-1" }),
62
+ badge && /* @__PURE__ */ jsx(Badge, {
63
+ variant: "outline",
64
+ className: "shrink-0 rounded-xs font-mono text-xs",
65
+ children: badge
66
+ }),
67
+ /* @__PURE__ */ jsx(ToolbarButton, {
68
+ label: closeLabel,
69
+ icon: /* @__PURE__ */ jsx(X, {}),
70
+ onClick: onClose
71
+ })
72
+ ]
73
+ }), /* @__PURE__ */ jsx("div", {
74
+ ref: body,
75
+ tabIndex: -1,
76
+ className: "min-h-0 overflow-y-auto overscroll-contain p-3 outline-none",
77
+ children
78
+ })]
79
+ })]
80
+ });
81
+ }
82
+ //#endregion
83
+ export { AnchoredPanel };
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+ import { Ref, ReactNode } from 'react';
3
+
4
+ interface AnchoredPanelProps {
5
+ open: boolean;
6
+ /** The point it is attached to: a zero-size element the caller keeps in place (it follows pan and zoom). */
7
+ anchorRef: Ref<HTMLDivElement>;
8
+ /** Which side of the anchor it opens on; the caller picks the one with room. */
9
+ side: "left" | "right";
10
+ /** Plain words: what this is ("Room sensor"). */
11
+ title: string;
12
+ /** The engineering name beside it, monospace (`room_sensor · DHT22`). */
13
+ subtitle?: string;
14
+ /** A short tag after the title ("At boot"). */
15
+ badge?: string;
16
+ closeLabel: string;
17
+ onClose: () => void;
18
+ /** A press outside that should NOT close it (the readout that opened it: its own click toggles it). */
19
+ keepOpenFor?: (target: Element) => boolean;
20
+ children: ReactNode;
21
+ }
22
+
23
+ /**
24
+ * A square panel attached to a point by a short leader line — beside the thing
25
+ * it edits, never in a far corner. Non-modal: what is behind it stays live.
26
+ * Focus moves into it on opening; Escape, ✕ or a press elsewhere closes it
27
+ * and focus goes back where it was.
28
+ */
29
+ declare function AnchoredPanel({ open, anchorRef, side, title, subtitle, badge, closeLabel, onClose, keepOpenFor, children }: AnchoredPanelProps): React.JSX.Element;
30
+
31
+ export { AnchoredPanel, type AnchoredPanelProps };
@@ -0,0 +1,2 @@
1
+ import { AnchoredPanel } from "./anchored-panel.js";
2
+ export { AnchoredPanel };
@@ -0,0 +1,13 @@
1
+ import * as React$1 from 'react';
2
+ import { Transition } from 'framer-motion';
3
+
4
+ interface PopCollectionItemProps {
5
+ index: number;
6
+ children: React.ReactNode;
7
+ layout?: boolean;
8
+ delayMultiplier?: number;
9
+ transition?: Transition;
10
+ }
11
+ declare function PopCollectionItem({ index, children, layout, delayMultiplier, transition, }: PopCollectionItemProps): React$1.JSX.Element;
12
+
13
+ export { PopCollectionItem, type PopCollectionItemProps };
@@ -0,0 +1,2 @@
1
+ import { PopCollectionItem } from "./pop-collection-item.js";
2
+ export { PopCollectionItem };
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
  import { cn } from "../../utils/cn.js";
3
+ import { useStyleAxes } from "../../utils/style-axes.js";
3
4
  import { Popover, PopoverContent, PopoverTrigger } from "../../core/popover.js";
4
5
  import { Badge } from "../../core/badge.js";
5
- import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "../../core/command.js";
6
+ import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from "../../core/command.js";
6
7
  import * as React$1 from "react";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
9
  import { Check, ChevronDown, X } from "lucide-react";
@@ -22,8 +23,13 @@ function normalizeValue(value, multiple) {
22
23
  if (Array.isArray(value)) return value;
23
24
  return multiple ? [value] : [value];
24
25
  }
25
- function AsyncMultiSelect({ options, multiple = true, value, onValueChange, onSearchChange, hasMore = false, onLoadMore, isLoading = false, disabled = false, placeholder = "Select...", emptyText = "No results.", searchPlaceholder = "Search...", label, required, size = "default", className, clearable = false, maxDisplayedBadges = 3, portal = true, renderOption }) {
26
+ function AsyncMultiSelect({ options, multiple = true, value, onValueChange, onSearchChange, hasMore = false, onLoadMore, isLoading = false, disabled = false, placeholder = "Select...", emptyText = "No results.", searchPlaceholder = "Search...", label, required, size = "default", className, clearable = false, maxDisplayedBadges = 3, portal = true, renderOption, action, radius, border }) {
27
+ const axes = useStyleAxes({
28
+ radius,
29
+ border
30
+ }, ["radius", "border"]);
26
31
  const [open, setOpen] = React$1.useState(false);
32
+ const triggerId = React$1.useId();
27
33
  const [inputValue, setInputValue] = React$1.useState("");
28
34
  const listRef = React$1.useRef(null);
29
35
  const sentinelRef = React$1.useRef(null);
@@ -63,6 +69,14 @@ function AsyncMultiSelect({ options, multiple = true, value, onValueChange, onSe
63
69
  setOpen(false);
64
70
  }
65
71
  };
72
+ const handleAction = () => {
73
+ setOpen(false);
74
+ action?.onSelect();
75
+ };
76
+ const emptyContent = isLoading ? /* @__PURE__ */ jsx("div", {
77
+ className: "flex items-center justify-center py-6",
78
+ children: /* @__PURE__ */ jsx("div", { className: "h-6 w-6 animate-spin rounded-full border-4 border-primary border-t-transparent" })
79
+ }) : emptyText;
66
80
  const handleRemove = (optionValue, e) => {
67
81
  e.stopPropagation();
68
82
  const next = selected.filter((v) => v !== optionValue);
@@ -118,6 +132,7 @@ function AsyncMultiSelect({ options, multiple = true, value, onValueChange, onSe
118
132
  children: [label != null && /* @__PURE__ */ jsx("div", {
119
133
  className: "flex items-center justify-between",
120
134
  children: /* @__PURE__ */ jsxs("label", {
135
+ htmlFor: triggerId,
121
136
  className: "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50",
122
137
  children: [label, required && /* @__PURE__ */ jsx("span", {
123
138
  className: "text-destructive",
@@ -130,11 +145,13 @@ function AsyncMultiSelect({ options, multiple = true, value, onValueChange, onSe
130
145
  children: [/* @__PURE__ */ jsx(PopoverTrigger, {
131
146
  asChild: true,
132
147
  children: /* @__PURE__ */ jsxs("button", {
148
+ id: triggerId,
133
149
  type: "button",
134
150
  role: "combobox",
135
151
  "aria-expanded": open,
136
152
  disabled,
137
- className: cn("flex w-full items-center justify-between rounded-md border border-input bg-transparent ring-offset-background transition-[box-shadow,border-color] duration-200 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", !multiple && "whitespace-nowrap [&>span]:line-clamp-1", triggerSizeClasses[size], className),
153
+ className: cn("flex w-full items-center justify-between rounded-[var(--espd-own-radius,var(--espd-radius-control,var(--radius-md)))] border-[length:var(--espd-own-border-width,var(--espd-border-width-control,1px))] border-input bg-transparent ring-offset-background transition-[box-shadow,border-color] duration-200 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", !multiple && "whitespace-nowrap [&>span]:line-clamp-1", triggerSizeClasses[size], className),
154
+ style: axes.style,
138
155
  children: [renderTriggerContent(), /* @__PURE__ */ jsx(ChevronDown, { className: cn("ml-2 shrink-0 opacity-50", chevronSizeClasses[size]) })]
139
156
  })
140
157
  }), /* @__PURE__ */ jsx(PopoverContent, {
@@ -151,10 +168,10 @@ function AsyncMultiSelect({ options, multiple = true, value, onValueChange, onSe
151
168
  ref: listRef,
152
169
  className: "overscroll-contain",
153
170
  children: [
154
- /* @__PURE__ */ jsx(CommandEmpty, { children: isLoading ? /* @__PURE__ */ jsx("div", {
155
- className: "flex items-center justify-center py-6",
156
- children: /* @__PURE__ */ jsx("div", { className: "h-6 w-6 animate-spin rounded-full border-4 border-primary border-t-transparent" })
157
- }) : emptyText }),
171
+ action ? options.length === 0 && /* @__PURE__ */ jsx("div", {
172
+ className: "py-6 text-center text-sm",
173
+ children: emptyContent
174
+ }) : /* @__PURE__ */ jsx(CommandEmpty, { children: emptyContent }),
158
175
  /* @__PURE__ */ jsx(CommandGroup, {
159
176
  className: "p-0",
160
177
  children: options.map((opt) => {
@@ -187,6 +204,30 @@ function AsyncMultiSelect({ options, multiple = true, value, onValueChange, onSe
187
204
  isLoading && options.length > 0 && /* @__PURE__ */ jsx("div", {
188
205
  className: "flex items-center justify-center py-3",
189
206
  children: /* @__PURE__ */ jsx("div", { className: "h-5 w-5 animate-spin rounded-full border-2 border-primary border-t-transparent" })
207
+ }),
208
+ action && /* @__PURE__ */ jsxs("div", {
209
+ className: "sticky bottom-0 bg-popover",
210
+ children: [/* @__PURE__ */ jsx(CommandSeparator, {
211
+ alwaysRender: true,
212
+ className: "mx-0 my-1.5"
213
+ }), /* @__PURE__ */ jsxs(CommandItem, {
214
+ value: "__async-multi-select-action__",
215
+ onSelect: handleAction,
216
+ className: "w-full gap-2.5 py-2 pl-2.5 pr-2.5",
217
+ children: [action.icon && /* @__PURE__ */ jsx("span", {
218
+ className: "flex shrink-0 items-center text-muted-foreground",
219
+ children: action.icon
220
+ }), /* @__PURE__ */ jsxs("div", {
221
+ className: "flex min-w-0 flex-col gap-0.5",
222
+ children: [/* @__PURE__ */ jsx("span", {
223
+ className: "font-medium leading-relaxed",
224
+ children: action.label
225
+ }), action.description && /* @__PURE__ */ jsx("span", {
226
+ className: "truncate text-xs font-normal text-muted-foreground",
227
+ children: action.description
228
+ })]
229
+ })]
230
+ })]
190
231
  })
191
232
  ]
192
233
  })]
@@ -0,0 +1,63 @@
1
+ import * as React from 'react';
2
+ import { S as Size } from '../../index-BQANnKs9.js';
3
+ import { k as StyleAxisProps } from '../../style-axes-DSQ2DGc5.js';
4
+
5
+ interface AsyncMultiSelectOption {
6
+ value: string;
7
+ /** Primary text (trigger, badges, screen readers). */
8
+ label: string;
9
+ /** Optional second line in the dropdown (e.g. id), muted smaller text. */
10
+ description?: string;
11
+ }
12
+ /** A row pinned under the options that does something instead of selecting (e.g. "Browse all"). */
13
+ interface AsyncMultiSelectAction {
14
+ label: string;
15
+ /** Optional second line, muted (e.g. how many there are to browse). */
16
+ description?: string;
17
+ /** Leading icon. */
18
+ icon?: React.ReactNode;
19
+ /** Called when the row is chosen; the dropdown closes first. */
20
+ onSelect: () => void;
21
+ }
22
+ interface AsyncMultiSelectProps extends Pick<StyleAxisProps, "radius" | "border"> {
23
+ options: AsyncMultiSelectOption[];
24
+ multiple?: boolean;
25
+ value?: string | string[];
26
+ onValueChange?: (value: string | string[] | undefined) => void;
27
+ onSearchChange?: (query: string) => void;
28
+ hasMore?: boolean;
29
+ onLoadMore?: () => void;
30
+ isLoading?: boolean;
31
+ disabled?: boolean;
32
+ placeholder?: string;
33
+ emptyText?: string;
34
+ searchPlaceholder?: string;
35
+ label?: React.ReactNode;
36
+ required?: boolean;
37
+ size?: Size;
38
+ className?: string;
39
+ clearable?: boolean;
40
+ maxDisplayedBadges?: number;
41
+ /**
42
+ * Render the dropdown in a portal at the document body. Defaults to `true`,
43
+ * which is safe inside a modal `Dialog`/`Sheet` too. Set `false` only to keep
44
+ * the dropdown within a specific stacking context — note that an inline
45
+ * dropdown is clipped by any scrollable ancestor.
46
+ */
47
+ portal?: boolean;
48
+ /**
49
+ * When set, replaces the default label/description row in the dropdown list.
50
+ * Trigger and badges still use `label` / `description` from each option.
51
+ */
52
+ renderOption?: (option: AsyncMultiSelectOption) => React.ReactNode;
53
+ /**
54
+ * A row pinned under the scrolling options, after a separator — always in
55
+ * sight and reachable with the arrow keys, also when nothing matches.
56
+ * Choosing it closes the dropdown and calls `onSelect`; it selects nothing.
57
+ */
58
+ action?: AsyncMultiSelectAction;
59
+ }
60
+
61
+ declare function AsyncMultiSelect({ options, multiple, value, onValueChange, onSearchChange, hasMore, onLoadMore, isLoading, disabled, placeholder, emptyText, searchPlaceholder, label, required, size, className, clearable, maxDisplayedBadges, portal, renderOption, action, radius, border, }: AsyncMultiSelectProps): React.JSX.Element;
62
+
63
+ export { AsyncMultiSelect, type AsyncMultiSelectOption, type AsyncMultiSelectProps };
@@ -0,0 +1,2 @@
1
+ import { AsyncMultiSelect } from "./async-multi-select.js";
2
+ export { AsyncMultiSelect };
@@ -7,21 +7,28 @@ import { User } from "lucide-react";
7
7
  var sizeClasses = {
8
8
  sm: "h-5 w-5 text-[10px]",
9
9
  default: "h-7 w-7 text-xs",
10
- lg: "h-10 w-10 text-sm"
10
+ lg: "h-10 w-10 text-sm",
11
+ xl: "h-19 w-19 text-2xl"
11
12
  };
12
- function Avatar({ name, imageUrl, size = "default", className, badgeColor, badgeIcon }) {
13
+ function Avatar({ name, imageUrl, size = "default", className, badgeColor, badgeIcon, fallback, color = "primary" }) {
13
14
  const displayInitial = name ? name.charAt(0).toUpperCase() : null;
14
15
  const showIconBadge = badgeIcon != null && badgeIcon !== false;
15
16
  const colorResolved = !showIconBadge && badgeColor != null ? resolveColor(badgeColor, "bg") : void 0;
16
17
  const hasBadge = showIconBadge || Boolean(colorResolved);
18
+ const fill = resolveColor(color, "bg");
19
+ const onFill = resolveColor(color, "fg");
17
20
  const avatar = /* @__PURE__ */ jsxs(Avatar$1, {
18
21
  className: cn(sizeClasses[size], className),
19
22
  children: [imageUrl && /* @__PURE__ */ jsx(AvatarImage, {
20
23
  src: imageUrl,
21
24
  alt: name ?? "User avatar"
22
25
  }), /* @__PURE__ */ jsx(AvatarFallback, {
23
- className: cn("bg-primary text-primary-foreground font-medium", sizeClasses[size], className),
24
- children: displayInitial ?? /* @__PURE__ */ jsx(User, { className: "h-3/5 w-3/5" })
26
+ className: cn(fill.className, onFill.className, "font-medium", sizeClasses[size], className),
27
+ style: fill.style || onFill.style ? {
28
+ ...fill.style,
29
+ ...onFill.style
30
+ } : void 0,
31
+ children: fallback ?? displayInitial ?? /* @__PURE__ */ jsx(User, { className: "h-3/5 w-3/5" })
25
32
  })]
26
33
  });
27
34
  if (!hasBadge) return avatar;
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { A as AvatarProps } from '../../avatar.props-2q5BsX-R.js';
3
+ export { a as AvatarSize } from '../../avatar.props-2q5BsX-R.js';
4
+ import '../../index-BQANnKs9.js';
5
+
6
+ declare function Avatar({ name, imageUrl, size, className, badgeColor, badgeIcon, fallback, color, }: AvatarProps): React.JSX.Element;
7
+
8
+ export { Avatar, AvatarProps };
@@ -0,0 +1,2 @@
1
+ import Avatar from "./avatar.js";
2
+ export { Avatar };