@acronis-platform/ui-react 0.54.0 → 0.56.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 (300) hide show
  1. package/README.md +1 -1
  2. package/package.json +4 -2
  3. package/dist/components/ui/accordion/accordion.js +0 -53
  4. package/dist/components/ui/accordion/accordion.js.map +0 -1
  5. package/dist/components/ui/alert/alert.js +0 -99
  6. package/dist/components/ui/alert/alert.js.map +0 -1
  7. package/dist/components/ui/app-shell/app-shell.js +0 -75
  8. package/dist/components/ui/app-shell/app-shell.js.map +0 -1
  9. package/dist/components/ui/auth-layout/auth-layout.js +0 -56
  10. package/dist/components/ui/auth-layout/auth-layout.js.map +0 -1
  11. package/dist/components/ui/avatar/avatar.js +0 -70
  12. package/dist/components/ui/avatar/avatar.js.map +0 -1
  13. package/dist/components/ui/breadcrumb/breadcrumb.js +0 -116
  14. package/dist/components/ui/breadcrumb/breadcrumb.js.map +0 -1
  15. package/dist/components/ui/button/button.js +0 -50
  16. package/dist/components/ui/button/button.js.map +0 -1
  17. package/dist/components/ui/button-icon/button-icon.js +0 -35
  18. package/dist/components/ui/button-icon/button-icon.js.map +0 -1
  19. package/dist/components/ui/button-menu/button-menu.js +0 -52
  20. package/dist/components/ui/button-menu/button-menu.js.map +0 -1
  21. package/dist/components/ui/card/card.js +0 -92
  22. package/dist/components/ui/card/card.js.map +0 -1
  23. package/dist/components/ui/card-filter/card-filter.js +0 -63
  24. package/dist/components/ui/card-filter/card-filter.js.map +0 -1
  25. package/dist/components/ui/chart/chart.js +0 -213
  26. package/dist/components/ui/chart/chart.js.map +0 -1
  27. package/dist/components/ui/checkbox/checkbox.js +0 -70
  28. package/dist/components/ui/checkbox/checkbox.js.map +0 -1
  29. package/dist/components/ui/chip/chip.js +0 -70
  30. package/dist/components/ui/chip/chip.js.map +0 -1
  31. package/dist/components/ui/collapsible/collapsible.js +0 -22
  32. package/dist/components/ui/collapsible/collapsible.js.map +0 -1
  33. package/dist/components/ui/combobox/combobox.js +0 -149
  34. package/dist/components/ui/combobox/combobox.js.map +0 -1
  35. package/dist/components/ui/data-table/data-table-column-header.js +0 -36
  36. package/dist/components/ui/data-table/data-table-column-header.js.map +0 -1
  37. package/dist/components/ui/data-table/data-table-pagination.js +0 -89
  38. package/dist/components/ui/data-table/data-table-pagination.js.map +0 -1
  39. package/dist/components/ui/data-table/data-table-toolbar.js +0 -46
  40. package/dist/components/ui/data-table/data-table-toolbar.js.map +0 -1
  41. package/dist/components/ui/data-table/data-table-view-options.js +0 -40
  42. package/dist/components/ui/data-table/data-table-view-options.js.map +0 -1
  43. package/dist/components/ui/data-table/data-table.js +0 -89
  44. package/dist/components/ui/data-table/data-table.js.map +0 -1
  45. package/dist/components/ui/description-list/description-list.js +0 -54
  46. package/dist/components/ui/description-list/description-list.js.map +0 -1
  47. package/dist/components/ui/dialog/dialog.js +0 -140
  48. package/dist/components/ui/dialog/dialog.js.map +0 -1
  49. package/dist/components/ui/dropdown-menu/dropdown-menu.js +0 -159
  50. package/dist/components/ui/dropdown-menu/dropdown-menu.js.map +0 -1
  51. package/dist/components/ui/empty/empty.js +0 -78
  52. package/dist/components/ui/empty/empty.js.map +0 -1
  53. package/dist/components/ui/field/field.js +0 -189
  54. package/dist/components/ui/field/field.js.map +0 -1
  55. package/dist/components/ui/form/form.js +0 -16
  56. package/dist/components/ui/form/form.js.map +0 -1
  57. package/dist/components/ui/grid/grid.js +0 -69
  58. package/dist/components/ui/grid/grid.js.map +0 -1
  59. package/dist/components/ui/input/input.js +0 -22
  60. package/dist/components/ui/input/input.js.map +0 -1
  61. package/dist/components/ui/input-date-picker/input-date-picker.js +0 -104
  62. package/dist/components/ui/input-date-picker/input-date-picker.js.map +0 -1
  63. package/dist/components/ui/input-search/input-search.js +0 -57
  64. package/dist/components/ui/input-search/input-search.js.map +0 -1
  65. package/dist/components/ui/input-select/input-select.js +0 -265
  66. package/dist/components/ui/input-select/input-select.js.map +0 -1
  67. package/dist/components/ui/input-text/input-text.js +0 -87
  68. package/dist/components/ui/input-text/input-text.js.map +0 -1
  69. package/dist/components/ui/input-text-area/input-text-area.js +0 -77
  70. package/dist/components/ui/input-text-area/input-text-area.js.map +0 -1
  71. package/dist/components/ui/label/label.js +0 -12
  72. package/dist/components/ui/label/label.js.map +0 -1
  73. package/dist/components/ui/link/link.js +0 -39
  74. package/dist/components/ui/link/link.js.map +0 -1
  75. package/dist/components/ui/number-field/number-field.js +0 -61
  76. package/dist/components/ui/number-field/number-field.js.map +0 -1
  77. package/dist/components/ui/page-content/page-content.js +0 -19
  78. package/dist/components/ui/page-content/page-content.js.map +0 -1
  79. package/dist/components/ui/page-header/page-header.js +0 -74
  80. package/dist/components/ui/page-header/page-header.js.map +0 -1
  81. package/dist/components/ui/pagination/pagination.js +0 -87
  82. package/dist/components/ui/pagination/pagination.js.map +0 -1
  83. package/dist/components/ui/popover/popover.js +0 -48
  84. package/dist/components/ui/popover/popover.js.map +0 -1
  85. package/dist/components/ui/progress/progress.js +0 -30
  86. package/dist/components/ui/progress/progress.js.map +0 -1
  87. package/dist/components/ui/progress-circle/progress-circle.js +0 -115
  88. package/dist/components/ui/progress-circle/progress-circle.js.map +0 -1
  89. package/dist/components/ui/radio/radio.js +0 -44
  90. package/dist/components/ui/radio/radio.js.map +0 -1
  91. package/dist/components/ui/resizable/resizable.js +0 -52
  92. package/dist/components/ui/resizable/resizable.js.map +0 -1
  93. package/dist/components/ui/scroll-area/scroll-area.js +0 -61
  94. package/dist/components/ui/scroll-area/scroll-area.js.map +0 -1
  95. package/dist/components/ui/search/search.js +0 -93
  96. package/dist/components/ui/search/search.js.map +0 -1
  97. package/dist/components/ui/search-global/search-global.js +0 -60
  98. package/dist/components/ui/search-global/search-global.js.map +0 -1
  99. package/dist/components/ui/section/section.js +0 -37
  100. package/dist/components/ui/section/section.js.map +0 -1
  101. package/dist/components/ui/separator/separator.js +0 -22
  102. package/dist/components/ui/separator/separator.js.map +0 -1
  103. package/dist/components/ui/sheet/sheet-details.js +0 -80
  104. package/dist/components/ui/sheet/sheet-details.js.map +0 -1
  105. package/dist/components/ui/sheet/sheet.js +0 -138
  106. package/dist/components/ui/sheet/sheet.js.map +0 -1
  107. package/dist/components/ui/sidebar-primary/sidebar-primary.js +0 -252
  108. package/dist/components/ui/sidebar-primary/sidebar-primary.js.map +0 -1
  109. package/dist/components/ui/sidebar-secondary/sidebar-secondary.js +0 -470
  110. package/dist/components/ui/sidebar-secondary/sidebar-secondary.js.map +0 -1
  111. package/dist/components/ui/skeleton/skeleton.js +0 -22
  112. package/dist/components/ui/skeleton/skeleton.js.map +0 -1
  113. package/dist/components/ui/slider/slider.js +0 -42
  114. package/dist/components/ui/slider/slider.js.map +0 -1
  115. package/dist/components/ui/spinner/spinner.js +0 -38
  116. package/dist/components/ui/spinner/spinner.js.map +0 -1
  117. package/dist/components/ui/stack/stack.js +0 -61
  118. package/dist/components/ui/stack/stack.js.map +0 -1
  119. package/dist/components/ui/switch/switch.js +0 -41
  120. package/dist/components/ui/switch/switch.js.map +0 -1
  121. package/dist/components/ui/table/table.js +0 -118
  122. package/dist/components/ui/table/table.js.map +0 -1
  123. package/dist/components/ui/tabs/tabs.js +0 -44
  124. package/dist/components/ui/tabs/tabs.js.map +0 -1
  125. package/dist/components/ui/tag/tag.js +0 -47
  126. package/dist/components/ui/tag/tag.js.map +0 -1
  127. package/dist/components/ui/toast/toast.js +0 -83
  128. package/dist/components/ui/toast/toast.js.map +0 -1
  129. package/dist/components/ui/toggle-group/toggle-group.js +0 -47
  130. package/dist/components/ui/toggle-group/toggle-group.js.map +0 -1
  131. package/dist/components/ui/tooltip/tooltip.js +0 -49
  132. package/dist/components/ui/tooltip/tooltip.js.map +0 -1
  133. package/dist/components/ui/widget-placeholder/widget-placeholder.js +0 -106
  134. package/dist/components/ui/widget-placeholder/widget-placeholder.js.map +0 -1
  135. package/dist/index.d.ts +0 -2
  136. package/dist/index.js +0 -360
  137. package/dist/index.js.map +0 -1
  138. package/dist/lib/utils.js +0 -9
  139. package/dist/lib/utils.js.map +0 -1
  140. package/dist/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-table/build/lib/index.js +0 -104
  141. package/dist/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-table/build/lib/index.js.map +0 -1
  142. package/dist/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.js +0 -1900
  143. package/dist/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.js.map +0 -1
  144. package/dist/node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js +0 -36
  145. package/dist/node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js.map +0 -1
  146. package/dist/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js +0 -17
  147. package/dist/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +0 -1
  148. package/dist/node_modules/.pnpm/react-resizable-panels@4.11.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/react-resizable-panels/dist/react-resizable-panels.js +0 -2093
  149. package/dist/node_modules/.pnpm/react-resizable-panels@4.11.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/react-resizable-panels/dist/react-resizable-panels.js.map +0 -1
  150. package/dist/node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -2996
  151. package/dist/node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
  152. package/dist/react.d.ts +0 -2
  153. package/dist/react.js +0 -360
  154. package/dist/react.js.map +0 -1
  155. package/dist/src/components/ui/accordion/accordion.d.ts +0 -7
  156. package/dist/src/components/ui/accordion/index.d.ts +0 -1
  157. package/dist/src/components/ui/alert/alert.d.ts +0 -14
  158. package/dist/src/components/ui/alert/index.d.ts +0 -2
  159. package/dist/src/components/ui/app-shell/app-shell.d.ts +0 -8
  160. package/dist/src/components/ui/app-shell/index.d.ts +0 -1
  161. package/dist/src/components/ui/auth-layout/auth-layout.d.ts +0 -6
  162. package/dist/src/components/ui/auth-layout/index.d.ts +0 -1
  163. package/dist/src/components/ui/avatar/avatar.d.ts +0 -27
  164. package/dist/src/components/ui/avatar/index.d.ts +0 -1
  165. package/dist/src/components/ui/breadcrumb/breadcrumb.d.ts +0 -30
  166. package/dist/src/components/ui/breadcrumb/index.d.ts +0 -1
  167. package/dist/src/components/ui/button/button.d.ts +0 -16
  168. package/dist/src/components/ui/button/index.d.ts +0 -1
  169. package/dist/src/components/ui/button-icon/button-icon.d.ts +0 -20
  170. package/dist/src/components/ui/button-icon/index.d.ts +0 -1
  171. package/dist/src/components/ui/button-menu/button-menu.d.ts +0 -29
  172. package/dist/src/components/ui/button-menu/index.d.ts +0 -1
  173. package/dist/src/components/ui/card/card.d.ts +0 -17
  174. package/dist/src/components/ui/card/index.d.ts +0 -1
  175. package/dist/src/components/ui/card-filter/card-filter.d.ts +0 -27
  176. package/dist/src/components/ui/card-filter/index.d.ts +0 -1
  177. package/dist/src/components/ui/chart/chart.d.ts +0 -55
  178. package/dist/src/components/ui/chart/index.d.ts +0 -2
  179. package/dist/src/components/ui/checkbox/checkbox.d.ts +0 -10
  180. package/dist/src/components/ui/checkbox/index.d.ts +0 -1
  181. package/dist/src/components/ui/chip/chip.d.ts +0 -20
  182. package/dist/src/components/ui/chip/index.d.ts +0 -1
  183. package/dist/src/components/ui/collapsible/collapsible.d.ts +0 -5
  184. package/dist/src/components/ui/collapsible/index.d.ts +0 -1
  185. package/dist/src/components/ui/combobox/combobox.d.ts +0 -28
  186. package/dist/src/components/ui/combobox/index.d.ts +0 -2
  187. package/dist/src/components/ui/data-table/data-table-column-header.d.ts +0 -8
  188. package/dist/src/components/ui/data-table/data-table-pagination.d.ts +0 -8
  189. package/dist/src/components/ui/data-table/data-table-toolbar.d.ts +0 -9
  190. package/dist/src/components/ui/data-table/data-table-view-options.d.ts +0 -6
  191. package/dist/src/components/ui/data-table/data-table.d.ts +0 -24
  192. package/dist/src/components/ui/data-table/data-table.docs.d.ts +0 -22
  193. package/dist/src/components/ui/data-table/index.d.ts +0 -5
  194. package/dist/src/components/ui/description-list/description-list.d.ts +0 -8
  195. package/dist/src/components/ui/description-list/index.d.ts +0 -1
  196. package/dist/src/components/ui/dialog/dialog.d.ts +0 -39
  197. package/dist/src/components/ui/dialog/dialog.docs.d.ts +0 -24
  198. package/dist/src/components/ui/dialog/index.d.ts +0 -1
  199. package/dist/src/components/ui/dropdown-menu/dropdown-menu.d.ts +0 -39
  200. package/dist/src/components/ui/dropdown-menu/dropdown-menu.docs.d.ts +0 -25
  201. package/dist/src/components/ui/dropdown-menu/index.d.ts +0 -1
  202. package/dist/src/components/ui/empty/empty.d.ts +0 -9
  203. package/dist/src/components/ui/empty/index.d.ts +0 -1
  204. package/dist/src/components/ui/field/field.d.ts +0 -39
  205. package/dist/src/components/ui/field/field.docs.d.ts +0 -27
  206. package/dist/src/components/ui/field/index.d.ts +0 -2
  207. package/dist/src/components/ui/form/form.d.ts +0 -6
  208. package/dist/src/components/ui/form/index.d.ts +0 -1
  209. package/dist/src/components/ui/grid/grid.d.ts +0 -15
  210. package/dist/src/components/ui/grid/index.d.ts +0 -1
  211. package/dist/src/components/ui/input/index.d.ts +0 -1
  212. package/dist/src/components/ui/input/input.d.ts +0 -4
  213. package/dist/src/components/ui/input-date-picker/index.d.ts +0 -1
  214. package/dist/src/components/ui/input-date-picker/input-date-picker.d.ts +0 -27
  215. package/dist/src/components/ui/input-search/index.d.ts +0 -1
  216. package/dist/src/components/ui/input-search/input-search.d.ts +0 -10
  217. package/dist/src/components/ui/input-select/index.d.ts +0 -1
  218. package/dist/src/components/ui/input-select/input-select.d.ts +0 -46
  219. package/dist/src/components/ui/input-text/index.d.ts +0 -1
  220. package/dist/src/components/ui/input-text/input-text.d.ts +0 -20
  221. package/dist/src/components/ui/input-text-area/index.d.ts +0 -1
  222. package/dist/src/components/ui/input-text-area/input-text-area.d.ts +0 -16
  223. package/dist/src/components/ui/label/index.d.ts +0 -1
  224. package/dist/src/components/ui/label/label.d.ts +0 -5
  225. package/dist/src/components/ui/label/label.docs.d.ts +0 -10
  226. package/dist/src/components/ui/link/index.d.ts +0 -1
  227. package/dist/src/components/ui/link/link.d.ts +0 -15
  228. package/dist/src/components/ui/number-field/index.d.ts +0 -1
  229. package/dist/src/components/ui/number-field/number-field.d.ts +0 -7
  230. package/dist/src/components/ui/page-content/index.d.ts +0 -1
  231. package/dist/src/components/ui/page-content/page-content.d.ts +0 -4
  232. package/dist/src/components/ui/page-header/index.d.ts +0 -1
  233. package/dist/src/components/ui/page-header/page-header.d.ts +0 -8
  234. package/dist/src/components/ui/pagination/index.d.ts +0 -2
  235. package/dist/src/components/ui/pagination/pagination.d.ts +0 -25
  236. package/dist/src/components/ui/popover/index.d.ts +0 -1
  237. package/dist/src/components/ui/popover/popover.d.ts +0 -27
  238. package/dist/src/components/ui/popover/popover.docs.d.ts +0 -25
  239. package/dist/src/components/ui/progress/index.d.ts +0 -1
  240. package/dist/src/components/ui/progress/progress.d.ts +0 -9
  241. package/dist/src/components/ui/progress/progress.docs.d.ts +0 -16
  242. package/dist/src/components/ui/progress-circle/index.d.ts +0 -1
  243. package/dist/src/components/ui/progress-circle/progress-circle.d.ts +0 -47
  244. package/dist/src/components/ui/progress-circle/progress-circle.docs.d.ts +0 -21
  245. package/dist/src/components/ui/radio/index.d.ts +0 -1
  246. package/dist/src/components/ui/radio/radio.d.ts +0 -8
  247. package/dist/src/components/ui/resizable/index.d.ts +0 -1
  248. package/dist/src/components/ui/resizable/resizable.d.ts +0 -9
  249. package/dist/src/components/ui/scroll-area/index.d.ts +0 -1
  250. package/dist/src/components/ui/scroll-area/scroll-area.d.ts +0 -10
  251. package/dist/src/components/ui/search/index.d.ts +0 -1
  252. package/dist/src/components/ui/search/search.d.ts +0 -7
  253. package/dist/src/components/ui/search-global/index.d.ts +0 -1
  254. package/dist/src/components/ui/search-global/search-global.d.ts +0 -7
  255. package/dist/src/components/ui/section/index.d.ts +0 -1
  256. package/dist/src/components/ui/section/section.d.ts +0 -7
  257. package/dist/src/components/ui/select/index.d.ts +0 -1
  258. package/dist/src/components/ui/select/select.d.ts +0 -1
  259. package/dist/src/components/ui/separator/index.d.ts +0 -1
  260. package/dist/src/components/ui/separator/separator.d.ts +0 -3
  261. package/dist/src/components/ui/sheet/index.d.ts +0 -3
  262. package/dist/src/components/ui/sheet/sheet-details.d.ts +0 -42
  263. package/dist/src/components/ui/sheet/sheet.d.ts +0 -36
  264. package/dist/src/components/ui/sheet/sheet.docs.d.ts +0 -21
  265. package/dist/src/components/ui/sidebar-primary/index.d.ts +0 -1
  266. package/dist/src/components/ui/sidebar-primary/sidebar-primary.d.ts +0 -54
  267. package/dist/src/components/ui/sidebar-secondary/index.d.ts +0 -1
  268. package/dist/src/components/ui/sidebar-secondary/sidebar-secondary.d.ts +0 -112
  269. package/dist/src/components/ui/skeleton/index.d.ts +0 -1
  270. package/dist/src/components/ui/skeleton/skeleton.d.ts +0 -4
  271. package/dist/src/components/ui/slider/index.d.ts +0 -1
  272. package/dist/src/components/ui/slider/slider.d.ts +0 -7
  273. package/dist/src/components/ui/spinner/index.d.ts +0 -1
  274. package/dist/src/components/ui/spinner/spinner.d.ts +0 -9
  275. package/dist/src/components/ui/stack/index.d.ts +0 -1
  276. package/dist/src/components/ui/stack/stack.d.ts +0 -13
  277. package/dist/src/components/ui/switch/index.d.ts +0 -1
  278. package/dist/src/components/ui/switch/switch.d.ts +0 -8
  279. package/dist/src/components/ui/table/index.d.ts +0 -1
  280. package/dist/src/components/ui/table/table.d.ts +0 -23
  281. package/dist/src/components/ui/tabs/index.d.ts +0 -1
  282. package/dist/src/components/ui/tabs/tabs.d.ts +0 -6
  283. package/dist/src/components/ui/tabs/tabs.docs.d.ts +0 -25
  284. package/dist/src/components/ui/tag/index.d.ts +0 -1
  285. package/dist/src/components/ui/tag/tag.d.ts +0 -12
  286. package/dist/src/components/ui/toast/index.d.ts +0 -1
  287. package/dist/src/components/ui/toast/toast.d.ts +0 -48
  288. package/dist/src/components/ui/toast/toast.docs.d.ts +0 -12
  289. package/dist/src/components/ui/toggle-group/index.d.ts +0 -1
  290. package/dist/src/components/ui/toggle-group/toggle-group.d.ts +0 -7
  291. package/dist/src/components/ui/tooltip/index.d.ts +0 -1
  292. package/dist/src/components/ui/tooltip/tooltip.d.ts +0 -13
  293. package/dist/src/components/ui/widget-placeholder/index.d.ts +0 -1
  294. package/dist/src/components/ui/widget-placeholder/widget-placeholder.d.ts +0 -18
  295. package/dist/src/components/ui/widget-placeholder/widget-placeholder.docs.d.ts +0 -14
  296. package/dist/src/index.d.ts +0 -66
  297. package/dist/src/lib/utils.d.ts +0 -2
  298. package/dist/src/react.d.ts +0 -1
  299. package/dist/styles.d.ts +0 -1
  300. package/dist/ui-react.css +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"button.js","sources":["../../../../src/components/ui/button/button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { SparklesIcon } from '@acronis-platform/icons-react/stroke-mono';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\n// Variants mirror the Figma \"Button\" component's `Variant` property (Primary,\n// Secondary, Link→ghost, Destructive, Ai, Inverted). Each interaction state\n// (idle / hover / active / disabled) wires the container fill, label, icon, and\n// — for the variants that have one — the border to its own dedicated\n// `--ui-button-*` token from @acronis-platform/tokens-pd. Every state is wired\n// explicitly — even where acronis's value is unchanged — because these are\n// runtime `var()` references: a brand override is only honored if the matching\n// state token is referenced. The icon color is wired separately from the label\n// because the next-gen tier diverges the two on hover/active for `secondary` and\n// `ghost` (the icon keeps the brighter blue while the label darkens). Disabled\n// uses the design's explicit disabled tokens (not opacity); the focus ring uses\n// the `--ui-focus-*` tokens.\n//\n// Geometry is now tokenized: the shared box metrics (32px height, 8px gap, 4px\n// radius, 16px icon) come from `--ui-button-global-container-*` / `-icon-size`,\n// while padding-x and min-width are per-variant — `ghost` has 0 padding-x and no\n// min-width (it reads as an inline link), every other variant has 12px / 64px.\n// Only `secondary` and `inverted` draw a 1px container border — they add `border`\n// in their own class so the design's 12px horizontal padding sits inside it. The\n// other variants have NO border (the Figma draws none), so their `px` is measured\n// from the box edge and matches the design exactly (no stray 1px from a\n// transparent border). The `ai` variant paints its gradient via `background-image`.\n//\n// Focus: the Figma focus state is a 3px `--ui-focus-primary` ring flush to the\n// button edge (no offset) — `ring-[3px]`, no `ring-offset`.\nconst buttonVariants = cva(\n 'inline-flex h-[var(--ui-button-global-container-height)] items-center justify-center gap-[var(--ui-button-global-container-gap)] whitespace-nowrap rounded-[var(--ui-button-global-container-border-radius)] text-sm font-semibold leading-6 transition-colors focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ui-focus-primary)] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:size-[var(--ui-button-global-icon-size)] [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default:\n 'min-w-[var(--ui-button-primary-container-width-min)] px-[var(--ui-button-primary-container-padding-x)] bg-[var(--ui-button-primary-container-color-idle)] text-[var(--ui-button-primary-label-color-idle)] [&_svg]:text-[var(--ui-button-primary-icon-color-idle)] hover:bg-[var(--ui-button-primary-container-color-hover)] hover:text-[var(--ui-button-primary-label-color-hover)] hover:[&_svg]:text-[var(--ui-button-primary-icon-color-hover)] active:bg-[var(--ui-button-primary-container-color-active)] active:text-[var(--ui-button-primary-label-color-active)] active:[&_svg]:text-[var(--ui-button-primary-icon-color-active)] disabled:bg-[var(--ui-button-primary-container-color-disabled)] disabled:text-[var(--ui-button-primary-label-color-disabled)] disabled:[&_svg]:text-[var(--ui-button-primary-icon-color-disabled)]',\n secondary:\n 'border min-w-[var(--ui-button-secondary-container-width-min)] px-[var(--ui-button-secondary-container-padding-x)] bg-[var(--ui-button-secondary-container-color-idle)] text-[var(--ui-button-secondary-label-color-idle)] border-[var(--ui-button-secondary-container-border-color-idle)] [&_svg]:text-[var(--ui-button-secondary-icon-color-idle)] hover:bg-[var(--ui-button-secondary-container-color-hover)] hover:text-[var(--ui-button-secondary-label-color-hover)] hover:border-[var(--ui-button-secondary-container-border-color-hover)] hover:[&_svg]:text-[var(--ui-button-secondary-icon-color-hover)] active:bg-[var(--ui-button-secondary-container-color-active)] active:text-[var(--ui-button-secondary-label-color-active)] active:border-[var(--ui-button-secondary-container-border-color-active)] active:[&_svg]:text-[var(--ui-button-secondary-icon-color-active)] disabled:bg-[var(--ui-button-secondary-container-color-disabled)] disabled:text-[var(--ui-button-secondary-label-color-disabled)] disabled:border-[var(--ui-button-secondary-container-border-color-disabled)] disabled:[&_svg]:text-[var(--ui-button-secondary-icon-color-disabled)]',\n ghost:\n 'px-[var(--ui-button-ghost-container-padding-x)] text-[var(--ui-button-ghost-label-color-idle)] [&_svg]:text-[var(--ui-button-ghost-icon-color-idle)] hover:text-[var(--ui-button-ghost-label-color-hover)] hover:[&_svg]:text-[var(--ui-button-ghost-icon-color-hover)] active:text-[var(--ui-button-ghost-label-color-active)] active:[&_svg]:text-[var(--ui-button-ghost-icon-color-active)] disabled:text-[var(--ui-button-ghost-label-color-disabled)] disabled:[&_svg]:text-[var(--ui-button-ghost-icon-color-disabled)]',\n destructive:\n 'min-w-[var(--ui-button-destructive-container-width-min)] px-[var(--ui-button-destructive-container-padding-x)] bg-[var(--ui-button-destructive-container-color-idle)] text-[var(--ui-button-destructive-label-color-idle)] [&_svg]:text-[var(--ui-button-destructive-icon-color-idle)] hover:bg-[var(--ui-button-destructive-container-color-hover)] hover:text-[var(--ui-button-destructive-label-color-hover)] hover:[&_svg]:text-[var(--ui-button-destructive-icon-color-hover)] active:bg-[var(--ui-button-destructive-container-color-active)] active:text-[var(--ui-button-destructive-label-color-active)] active:[&_svg]:text-[var(--ui-button-destructive-icon-color-active)] disabled:bg-[var(--ui-button-destructive-container-color-disabled)] disabled:text-[var(--ui-button-destructive-label-color-disabled)] disabled:[&_svg]:text-[var(--ui-button-destructive-icon-color-disabled)]',\n ai: 'min-w-[var(--ui-button-ai-container-width-min)] px-[var(--ui-button-ai-container-padding-x)] bg-origin-border text-[var(--ui-button-ai-label-color-idle)] [&_svg]:text-[var(--ui-button-ai-icon-color-idle)] [background-image:var(--ui-button-ai-container-color-idle)] hover:text-[var(--ui-button-ai-label-color-hover)] hover:[&_svg]:text-[var(--ui-button-ai-icon-color-hover)] hover:[background-image:var(--ui-button-ai-container-color-hover)] active:text-[var(--ui-button-ai-label-color-active)] active:[&_svg]:text-[var(--ui-button-ai-icon-color-active)] active:[background-image:var(--ui-button-ai-container-color-active)] disabled:text-[var(--ui-button-ai-label-color-disabled)] disabled:[&_svg]:text-[var(--ui-button-ai-icon-color-disabled)] disabled:[background-image:var(--ui-button-ai-container-color-disabled)]',\n inverted:\n 'border min-w-[var(--ui-button-inverted-container-width-min)] px-[var(--ui-button-inverted-container-padding-x)] bg-[var(--ui-button-inverted-container-color-idle)] text-[var(--ui-button-inverted-label-color-idle)] border-[var(--ui-button-inverted-container-border-color-idle)] [&_svg]:text-[var(--ui-button-inverted-icon-color-idle)] hover:bg-[var(--ui-button-inverted-container-color-hover)] hover:text-[var(--ui-button-inverted-label-color-hover)] hover:border-[var(--ui-button-inverted-container-border-color-hover)] hover:[&_svg]:text-[var(--ui-button-inverted-icon-color-hover)] active:bg-[var(--ui-button-inverted-container-color-active)] active:text-[var(--ui-button-inverted-label-color-active)] active:border-[var(--ui-button-inverted-container-border-color-active)] active:[&_svg]:text-[var(--ui-button-inverted-icon-color-active)] disabled:bg-[var(--ui-button-inverted-container-color-disabled)] disabled:text-[var(--ui-button-inverted-label-color-disabled)] disabled:border-[var(--ui-button-inverted-container-border-color-disabled)] disabled:[&_svg]:text-[var(--ui-button-inverted-icon-color-disabled)]',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * Replace the rendered `<button>` with another element or component\n * (Base UI composition). Accepts a React element or a render function —\n * the component's props and class names are merged onto it.\n */\n render?: useRender.RenderProp;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, render, children, ...props }, ref) => {\n // The AI variant always leads with the Sparkles icon before its label\n // (the Figma \"Ai\" button is a Sparkles instance + label).\n const content =\n variant === 'ai' ? (\n <>\n <SparklesIcon />\n {children}\n </>\n ) : (\n children\n );\n return useRender({\n render,\n ref,\n defaultTagName: 'button',\n props: mergeProps<'button'>(\n {\n className: cn(buttonVariants({ variant, className })),\n children: content,\n },\n props\n ),\n });\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n"],"names":["buttonVariants","cva","Button","React","className","variant","render","children","props","ref","content","jsxs","Fragment","jsx","SparklesIcon","useRender","mergeProps","cn"],"mappings":";;;;;;;AAiCA,MAAMA,IAAiBC;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,WACE;AAAA,QACF,OACE;AAAA,QACF,aACE;AAAA,QACF,IAAI;AAAA,QACJ,UACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAcMC,IAASC,EAAM;AAAA,EACnB,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,QAAAC,GAAQ,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAAQ;AAG3D,UAAMC,IACJL,MAAY,OACV,gBAAAM,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC,EAACC,GAAA,EAAa;AAAA,MACbP;AAAA,IAAA,EAAA,CACH,IAEAA;AAEJ,WAAOQ,EAAU;AAAA,MACf,QAAAT;AAAA,MACA,KAAAG;AAAA,MACA,gBAAgB;AAAA,MAChB,OAAOO;AAAA,QACL;AAAA,UACE,WAAWC,EAAGjB,EAAe,EAAE,SAAAK,GAAS,WAAAD,EAAA,CAAW,CAAC;AAAA,UACpD,UAAUM;AAAA,QAAA;AAAA,QAEZF;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EACH;AACF;AACAN,EAAO,cAAc;"}
@@ -1,35 +0,0 @@
1
- import * as e from "react";
2
- import { mergeProps as a } from "@base-ui/react/merge-props";
3
- import { useRender as c } from "@base-ui/react/use-render";
4
- import { cva as l } from "../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js";
5
- import { cn as b } from "../../../lib/utils.js";
6
- const s = l(
7
- "inline-flex size-[var(--ui-button-icon-global-container-height)] shrink-0 items-center justify-center rounded-[var(--ui-button-icon-global-container-border-radius)] transition-colors bg-[var(--ui-button-icon-global-container-color-idle)] text-[var(--ui-button-icon-global-icon-color-idle)] hover:bg-[var(--ui-button-icon-global-container-color-hover)] hover:text-[var(--ui-button-icon-global-icon-color-hover)] active:bg-[var(--ui-button-icon-global-container-color-active)] active:text-[var(--ui-button-icon-global-icon-color-active)] disabled:pointer-events-none disabled:bg-[var(--ui-button-icon-global-container-color-disabled)] disabled:text-[var(--ui-button-icon-global-icon-color-disabled)] focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ui-focus-primary)] [&_svg]:pointer-events-none [&_svg]:size-[var(--ui-button-icon-global-icon-size)] [&_svg]:shrink-0",
8
- {
9
- variants: {
10
- variant: {
11
- ghost: "",
12
- secondary: "border border-[var(--ui-button-icon-secondary-container-border-color-idle)] hover:border-[var(--ui-button-icon-secondary-container-border-color-hover)] active:border-[var(--ui-button-icon-secondary-container-border-color-active)] disabled:border-[var(--ui-button-icon-secondary-container-border-color-disabled)]"
13
- }
14
- },
15
- defaultVariants: {
16
- variant: "ghost"
17
- }
18
- }
19
- ), u = e.forwardRef(
20
- ({ className: o, variant: r, render: n, ...i }, t) => c({
21
- render: n,
22
- ref: t,
23
- defaultTagName: "button",
24
- props: a(
25
- { className: b(s({ variant: r, className: o })) },
26
- i
27
- )
28
- })
29
- );
30
- u.displayName = "ButtonIcon";
31
- export {
32
- u as ButtonIcon,
33
- s as buttonIconVariants
34
- };
35
- //# sourceMappingURL=button-icon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"button-icon.js","sources":["../../../../src/components/ui/button-icon/button-icon.tsx"],"sourcesContent":["import * as React from 'react';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\n// Mirrors the Figma \"ButtonIcon\" component set: an icon-only button (square 32px\n// box, 24px glyph centered → the design's 4px padding) with a `variant` property\n// (`ghost` / `secondary`) and idle / hover / active / disabled states. The\n// container fill and the glyph color are shared across both variants and come\n// from the `--ui-button-icon-global-*` tokens; only `secondary` draws a 1px\n// container border (it adds `border` in its own class), from the\n// `--ui-button-icon-secondary-container-border-color-*` tokens — `ghost` has no\n// border (the Figma draws none). Each interaction state is wired to its own token\n// (runtime `var()` references, so brand overrides are honored). Box geometry —\n// 32px height, 4px radius, 24px icon — comes from the `global-container-*` /\n// `global-icon-size` tokens. Like Button, disabled uses the design's explicit\n// disabled tokens (not opacity), and the focus state is a 3px `--ui-focus-primary`\n// ring flush to the edge (no offset), matching the Figma.\nconst buttonIconVariants = cva(\n 'inline-flex size-[var(--ui-button-icon-global-container-height)] shrink-0 items-center justify-center rounded-[var(--ui-button-icon-global-container-border-radius)] transition-colors ' +\n 'bg-[var(--ui-button-icon-global-container-color-idle)] text-[var(--ui-button-icon-global-icon-color-idle)] ' +\n 'hover:bg-[var(--ui-button-icon-global-container-color-hover)] hover:text-[var(--ui-button-icon-global-icon-color-hover)] ' +\n 'active:bg-[var(--ui-button-icon-global-container-color-active)] active:text-[var(--ui-button-icon-global-icon-color-active)] ' +\n 'disabled:pointer-events-none disabled:bg-[var(--ui-button-icon-global-container-color-disabled)] disabled:text-[var(--ui-button-icon-global-icon-color-disabled)] ' +\n 'focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ui-focus-primary)] ' +\n '[&_svg]:pointer-events-none [&_svg]:size-[var(--ui-button-icon-global-icon-size)] [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n ghost: '',\n secondary:\n 'border border-[var(--ui-button-icon-secondary-container-border-color-idle)] hover:border-[var(--ui-button-icon-secondary-container-border-color-hover)] active:border-[var(--ui-button-icon-secondary-container-border-color-active)] disabled:border-[var(--ui-button-icon-secondary-container-border-color-disabled)]',\n },\n },\n defaultVariants: {\n variant: 'ghost',\n },\n }\n);\n\nexport interface ButtonIconProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonIconVariants> {\n /**\n * Replace the rendered `<button>` with another element or component\n * (Base UI composition). Accepts a React element or a render function —\n * the component's props and class names are merged onto it.\n */\n render?: useRender.RenderProp;\n}\n\n/**\n * Icon-only button. The icon is passed as `children`; provide an `aria-label`\n * (or `aria-labelledby`) so the control has an accessible name.\n */\nconst ButtonIcon = React.forwardRef<HTMLButtonElement, ButtonIconProps>(\n ({ className, variant, render, ...props }, ref) => {\n return useRender({\n render,\n ref,\n defaultTagName: 'button',\n props: mergeProps<'button'>(\n { className: cn(buttonIconVariants({ variant, className })) },\n props\n ),\n });\n }\n);\nButtonIcon.displayName = 'ButtonIcon';\n\nexport { ButtonIcon, buttonIconVariants };\n"],"names":["buttonIconVariants","cva","ButtonIcon","React","className","variant","render","props","ref","useRender","mergeProps","cn"],"mappings":";;;;;AAoBA,MAAMA,IAAqBC;AAAA,EACzB;AAAA,EAOA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,OAAO;AAAA,QACP,WACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAkBMC,IAAaC,EAAM;AAAA,EACvB,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,QAAAC,GAAQ,GAAGC,EAAA,GAASC,MAClCC,EAAU;AAAA,IACf,QAAAH;AAAA,IACA,KAAAE;AAAA,IACA,gBAAgB;AAAA,IAChB,OAAOE;AAAA,MACL,EAAE,WAAWC,EAAGX,EAAmB,EAAE,SAAAK,GAAS,WAAAD,EAAA,CAAW,CAAC,EAAA;AAAA,MAC1DG;AAAA,IAAA;AAAA,EACF,CACD;AAEL;AACAL,EAAW,cAAc;"}
@@ -1,52 +0,0 @@
1
- import { jsxs as c, Fragment as b, jsx as d } from "react/jsx-runtime";
2
- import * as l from "react";
3
- import { mergeProps as v } from "@base-ui/react/merge-props";
4
- import { useRender as s } from "@base-ui/react/use-render";
5
- import { ChevronUpIcon as m, ChevronDownIcon as p } from "@acronis-platform/icons-react/stroke-mono";
6
- import { cva as g } from "../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js";
7
- import { cn as y } from "../../../lib/utils.js";
8
- const h = g(
9
- "inline-flex h-[var(--ui-button-menu-global-container-height)] min-w-[var(--ui-button-menu-global-container-width-min)] items-center justify-center gap-[var(--ui-button-menu-global-container-gap)] whitespace-nowrap rounded-[var(--ui-button-menu-global-container-border-radius)] border border-transparent px-[var(--ui-button-menu-global-container-padding-x)] text-sm font-semibold leading-6 transition-colors focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ui-focus-primary)] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:size-[var(--ui-button-menu-global-icon-size)] [&_svg]:shrink-0",
10
- {
11
- variants: {
12
- variant: {
13
- primary: "bg-[var(--ui-button-menu-primary-container-color-idle)] text-[var(--ui-button-menu-primary-label-color)] [&_svg]:text-[var(--ui-button-menu-primary-icon-color)] hover:bg-[var(--ui-button-menu-primary-container-color-hover)] active:bg-[var(--ui-button-menu-primary-container-color-active)] data-[open]:bg-[var(--ui-button-menu-primary-container-color-active)] disabled:bg-[var(--ui-button-menu-primary-container-color-disabled)]",
14
- secondary: "bg-[var(--ui-button-menu-secondary-container-color-idle)] text-[var(--ui-button-menu-secondary-label-color-idle)] border-[var(--ui-button-menu-secondary-container-border-color-idle)] [&_svg]:text-[var(--ui-button-menu-secondary-icon-color-idle)] hover:bg-[var(--ui-button-menu-secondary-container-color-hover)] hover:text-[var(--ui-button-menu-secondary-label-color-hover)] hover:border-[var(--ui-button-menu-secondary-container-border-color-hover)] hover:[&_svg]:text-[var(--ui-button-menu-secondary-icon-color-hover)] active:bg-[var(--ui-button-menu-secondary-container-color-active)] active:text-[var(--ui-button-menu-secondary-label-color-active)] active:border-[var(--ui-button-menu-secondary-container-border-color-active)] active:[&_svg]:text-[var(--ui-button-menu-secondary-icon-color-active)] data-[open]:bg-[var(--ui-button-menu-secondary-container-color-active)] data-[open]:text-[var(--ui-button-menu-secondary-label-color-active)] data-[open]:border-[var(--ui-button-menu-secondary-container-border-color-active)] data-[open]:[&_svg]:text-[var(--ui-button-menu-secondary-icon-color-active)] disabled:bg-[var(--ui-button-menu-secondary-container-color-disabled)] disabled:text-[var(--ui-button-menu-secondary-label-color-disabled)] disabled:border-[var(--ui-button-menu-secondary-container-border-color-disabled)] disabled:[&_svg]:text-[var(--ui-button-menu-secondary-icon-color-disabled)]"
15
- }
16
- },
17
- defaultVariants: {
18
- variant: "primary"
19
- }
20
- }
21
- ), x = l.forwardRef(
22
- ({ className: r, variant: e, open: o, render: n, children: t, ...a }, i) => {
23
- const u = o ? m : p;
24
- return s({
25
- render: n,
26
- ref: i,
27
- defaultTagName: "button",
28
- props: v(
29
- {
30
- className: y(h({ variant: e, className: r })),
31
- "aria-expanded": o,
32
- // `data-open` drives the open (`*-active`) token switch via attribute
33
- // selectors; present only while open, and typed loosely because
34
- // React's button attribute map doesn't include arbitrary data-* keys
35
- // as literals.
36
- ...o ? { "data-open": "" } : {},
37
- children: /* @__PURE__ */ c(b, { children: [
38
- t,
39
- /* @__PURE__ */ d(u, {})
40
- ] })
41
- },
42
- a
43
- )
44
- });
45
- }
46
- );
47
- x.displayName = "ButtonMenu";
48
- export {
49
- x as ButtonMenu,
50
- h as buttonMenuVariants
51
- };
52
- //# sourceMappingURL=button-menu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"button-menu.js","sources":["../../../../src/components/ui/button-menu/button-menu.tsx"],"sourcesContent":["import * as React from 'react';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n} from '@acronis-platform/icons-react/stroke-mono';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\n// Mirrors the Figma \"ButtonMenu\" component: a Button-like trigger (label +\n// trailing chevron) that opens a menu. `variant` maps to the Figma `variant`\n// property (Primary / Secondary); the Figma `active` state is the **open** state\n// — the chevron flips down→up and the container takes its `*-active` colors. Each\n// interaction state wires the container fill, label, icon, and — for `secondary`\n// — the border to its own dedicated `--ui-button-menu-*` token from\n// @acronis-platform/tokens-pd. Every state is referenced explicitly (runtime\n// `var()` lookups: a brand override is only honored if the matching state token is\n// referenced). `primary` keeps a single label/icon color across states; only\n// `secondary` diverges them per state. Geometry — 32px height, 8px gap, 12px\n// padding-x, 4px radius, 64px min-width, 16px icon — comes from the\n// `--ui-button-menu-global-*` tokens. The open treatment is driven by the\n// `data-open` attribute (set from the `open` prop) and CSS `:active` for press\n// feedback; disabled uses the explicit disabled tokens (not opacity). Focus: the\n// Figma focus state is a 3px `--ui-focus-primary` ring flush to the button edge\n// (no offset) — `ring-[3px]`, no `ring-offset`.\nconst buttonMenuVariants = cva(\n 'inline-flex h-[var(--ui-button-menu-global-container-height)] min-w-[var(--ui-button-menu-global-container-width-min)] items-center justify-center gap-[var(--ui-button-menu-global-container-gap)] whitespace-nowrap rounded-[var(--ui-button-menu-global-container-border-radius)] border border-transparent px-[var(--ui-button-menu-global-container-padding-x)] text-sm font-semibold leading-6 transition-colors focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ui-focus-primary)] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:size-[var(--ui-button-menu-global-icon-size)] [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'bg-[var(--ui-button-menu-primary-container-color-idle)] text-[var(--ui-button-menu-primary-label-color)] [&_svg]:text-[var(--ui-button-menu-primary-icon-color)] hover:bg-[var(--ui-button-menu-primary-container-color-hover)] active:bg-[var(--ui-button-menu-primary-container-color-active)] data-[open]:bg-[var(--ui-button-menu-primary-container-color-active)] disabled:bg-[var(--ui-button-menu-primary-container-color-disabled)]',\n secondary:\n 'bg-[var(--ui-button-menu-secondary-container-color-idle)] text-[var(--ui-button-menu-secondary-label-color-idle)] border-[var(--ui-button-menu-secondary-container-border-color-idle)] [&_svg]:text-[var(--ui-button-menu-secondary-icon-color-idle)] hover:bg-[var(--ui-button-menu-secondary-container-color-hover)] hover:text-[var(--ui-button-menu-secondary-label-color-hover)] hover:border-[var(--ui-button-menu-secondary-container-border-color-hover)] hover:[&_svg]:text-[var(--ui-button-menu-secondary-icon-color-hover)] active:bg-[var(--ui-button-menu-secondary-container-color-active)] active:text-[var(--ui-button-menu-secondary-label-color-active)] active:border-[var(--ui-button-menu-secondary-container-border-color-active)] active:[&_svg]:text-[var(--ui-button-menu-secondary-icon-color-active)] data-[open]:bg-[var(--ui-button-menu-secondary-container-color-active)] data-[open]:text-[var(--ui-button-menu-secondary-label-color-active)] data-[open]:border-[var(--ui-button-menu-secondary-container-border-color-active)] data-[open]:[&_svg]:text-[var(--ui-button-menu-secondary-icon-color-active)] disabled:bg-[var(--ui-button-menu-secondary-container-color-disabled)] disabled:text-[var(--ui-button-menu-secondary-label-color-disabled)] disabled:border-[var(--ui-button-menu-secondary-container-border-color-disabled)] disabled:[&_svg]:text-[var(--ui-button-menu-secondary-icon-color-disabled)]',\n },\n },\n defaultVariants: {\n variant: 'primary',\n },\n }\n);\n\nexport interface ButtonMenuProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>,\n VariantProps<typeof buttonMenuVariants> {\n /**\n * Whether the associated menu is open. Flips the trailing chevron\n * (down → up), applies the open (`*-active`) treatment, and reflects\n * `aria-expanded`. Control this in sync with the menu you trigger.\n */\n open?: boolean;\n /** Label content rendered before the chevron. */\n children?: React.ReactNode;\n /**\n * Replace the rendered `<button>` with another element or component\n * (Base UI composition). Accepts a React element or a render function —\n * the component's props and class names are merged onto it.\n */\n render?: useRender.RenderProp;\n}\n\n/**\n * A button that opens a dropdown menu: a label followed by a chevron that\n * points up while `open`. Pair it with the menu/popover it controls and keep\n * the `open` prop in sync.\n */\nconst ButtonMenu = React.forwardRef<HTMLButtonElement, ButtonMenuProps>(\n ({ className, variant, open, render, children, ...props }, ref) => {\n const Chevron = open ? ChevronUpIcon : ChevronDownIcon;\n return useRender({\n render,\n ref,\n defaultTagName: 'button',\n props: mergeProps<'button'>(\n {\n className: cn(buttonMenuVariants({ variant, className })),\n 'aria-expanded': open,\n // `data-open` drives the open (`*-active`) token switch via attribute\n // selectors; present only while open, and typed loosely because\n // React's button attribute map doesn't include arbitrary data-* keys\n // as literals.\n ...(open ? ({ 'data-open': '' } as Record<string, string>) : {}),\n children: (\n <>\n {children}\n <Chevron />\n </>\n ),\n },\n props\n ),\n });\n }\n);\nButtonMenu.displayName = 'ButtonMenu';\n\nexport { ButtonMenu, buttonMenuVariants };\n"],"names":["buttonMenuVariants","cva","ButtonMenu","React","className","variant","open","render","children","props","ref","Chevron","ChevronUpIcon","ChevronDownIcon","useRender","mergeProps","cn","jsxs","Fragment"],"mappings":";;;;;;;AA2BA,MAAMA,IAAqBC;AAAA,EACzB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,WACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GA2BMC,IAAaC,EAAM;AAAA,EACvB,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,MAAAC,GAAM,QAAAC,GAAQ,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAAQ;AACjE,UAAMC,IAAUL,IAAOM,IAAgBC;AACvC,WAAOC,EAAU;AAAA,MACf,QAAAP;AAAA,MACA,KAAAG;AAAA,MACA,gBAAgB;AAAA,MAChB,OAAOK;AAAA,QACL;AAAA,UACE,WAAWC,EAAGhB,EAAmB,EAAE,SAAAK,GAAS,WAAAD,EAAA,CAAW,CAAC;AAAA,UACxD,iBAAiBE;AAAA;AAAA;AAAA;AAAA;AAAA,UAKjB,GAAIA,IAAQ,EAAE,aAAa,GAAA,IAAkC,CAAA;AAAA,UAC7D,UACE,gBAAAW,EAAAC,GAAA,EACG,UAAA;AAAA,YAAAV;AAAA,8BACAG,GAAA,CAAA,CAAQ;AAAA,UAAA,EAAA,CACX;AAAA,QAAA;AAAA,QAGJF;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EACH;AACF;AACAP,EAAW,cAAc;"}
@@ -1,92 +0,0 @@
1
- import * as o from "react";
2
- import { mergeProps as t } from "@base-ui/react/merge-props";
3
- import { useRender as s } from "@base-ui/react/use-render";
4
- import { cn as p } from "../../../lib/utils.js";
5
- const m = o.forwardRef(
6
- ({ className: e, render: a, ...r }, d) => s({
7
- render: a,
8
- ref: d,
9
- defaultTagName: "div",
10
- props: t(
11
- {
12
- className: p(
13
- "rounded-lg border border-border bg-background text-foreground shadow-xs",
14
- e
15
- )
16
- },
17
- r
18
- )
19
- })
20
- );
21
- m.displayName = "Card";
22
- const f = o.forwardRef(
23
- ({ className: e, render: a, ...r }, d) => s({
24
- render: a,
25
- ref: d,
26
- defaultTagName: "div",
27
- props: t(
28
- { className: p("flex flex-col space-y-1.5 p-6", e) },
29
- r
30
- )
31
- })
32
- );
33
- f.displayName = "CardHeader";
34
- const l = o.forwardRef(
35
- ({ className: e, render: a, ...r }, d) => s({
36
- render: a,
37
- ref: d,
38
- defaultTagName: "div",
39
- props: t(
40
- {
41
- className: p(
42
- "text-2xl font-semibold leading-none tracking-tight",
43
- e
44
- )
45
- },
46
- r
47
- )
48
- })
49
- );
50
- l.displayName = "CardTitle";
51
- const i = o.forwardRef(
52
- ({ className: e, render: a, ...r }, d) => s({
53
- render: a,
54
- ref: d,
55
- defaultTagName: "div",
56
- props: t(
57
- { className: p("text-sm text-muted-foreground", e) },
58
- r
59
- )
60
- })
61
- );
62
- i.displayName = "CardDescription";
63
- const n = o.forwardRef(
64
- ({ className: e, render: a, ...r }, d) => s({
65
- render: a,
66
- ref: d,
67
- defaultTagName: "div",
68
- props: t({ className: p("p-6 pt-0", e) }, r)
69
- })
70
- );
71
- n.displayName = "CardContent";
72
- const c = o.forwardRef(
73
- ({ className: e, render: a, ...r }, d) => s({
74
- render: a,
75
- ref: d,
76
- defaultTagName: "div",
77
- props: t(
78
- { className: p("flex items-center p-6 pt-0", e) },
79
- r
80
- )
81
- })
82
- );
83
- c.displayName = "CardFooter";
84
- export {
85
- m as Card,
86
- n as CardContent,
87
- i as CardDescription,
88
- c as CardFooter,
89
- f as CardHeader,
90
- l as CardTitle
91
- };
92
- //# sourceMappingURL=card.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"card.js","sources":["../../../../src/components/ui/card/card.tsx"],"sourcesContent":["import * as React from 'react';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\n\nimport { cn } from '@/lib/utils';\n\n// Initial version ported from `@acronis-platform/shadcn-uikit`'s `card`\n// (packages/ui-legacy/src/components/ui/card.tsx). No \"ready for dev\" Figma node\n// exists yet, so this is a design-pending v1: there is no `--ui-card-*` token\n// tier, so the surface/text/border colors resolve to the shared **semantic**\n// tokens via the bridged Tailwind names in `src/styles/index.css`:\n// • bg-background → --ui-background-surface-primary (legacy `bg-card`)\n// • text-foreground → --ui-text-on-surface-primary (legacy `text-card-foreground`)\n// • border-border → --ui-border-on-surface-border (legacy bare `border`)\n// • text-muted-foreground → --ui-text-on-surface-secondary (description)\n// Geometry (radius, padding, gaps, shadow) is carried over verbatim from legacy.\n// Reconcile against the real design with `/figma-component Card <url> --update`\n// once a mockup lands — at which point an elevated-surface token may replace the\n// primary surface used for the card background.\n\ninterface CardPartProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Replace the rendered `<div>` with another element or component (Base UI\n * composition) — e.g. render `CardTitle` as a heading. The component's props\n * and class names are merged onto it.\n */\n render?: useRender.RenderProp;\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardPartProps>(\n ({ className, render, ...props }, ref) =>\n useRender({\n render,\n ref,\n defaultTagName: 'div',\n props: mergeProps<'div'>(\n {\n className: cn(\n 'rounded-lg border border-border bg-background text-foreground shadow-xs',\n className\n ),\n },\n props\n ),\n })\n);\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardPartProps>(\n ({ className, render, ...props }, ref) =>\n useRender({\n render,\n ref,\n defaultTagName: 'div',\n props: mergeProps<'div'>(\n { className: cn('flex flex-col space-y-1.5 p-6', className) },\n props\n ),\n })\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, CardPartProps>(\n ({ className, render, ...props }, ref) =>\n useRender({\n render,\n ref,\n defaultTagName: 'div',\n props: mergeProps<'div'>(\n {\n className: cn(\n 'text-2xl font-semibold leading-none tracking-tight',\n className\n ),\n },\n props\n ),\n })\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, CardPartProps>(\n ({ className, render, ...props }, ref) =>\n useRender({\n render,\n ref,\n defaultTagName: 'div',\n props: mergeProps<'div'>(\n { className: cn('text-sm text-muted-foreground', className) },\n props\n ),\n })\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, CardPartProps>(\n ({ className, render, ...props }, ref) =>\n useRender({\n render,\n ref,\n defaultTagName: 'div',\n props: mergeProps<'div'>({ className: cn('p-6 pt-0', className) }, props),\n })\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardPartProps>(\n ({ className, render, ...props }, ref) =>\n useRender({\n render,\n ref,\n defaultTagName: 'div',\n props: mergeProps<'div'>(\n { className: cn('flex items-center p-6 pt-0', className) },\n props\n ),\n })\n);\nCardFooter.displayName = 'CardFooter';\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n type CardPartProps,\n};\n"],"names":["Card","React","className","render","props","ref","useRender","mergeProps","cn","CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],"mappings":";;;;AA6BA,MAAMA,IAAOC,EAAM;AAAA,EACjB,CAAC,EAAE,WAAAC,GAAW,QAAAC,GAAQ,GAAGC,EAAA,GAASC,MAChCC,EAAU;AAAA,IACR,QAAAH;AAAA,IACA,KAAAE;AAAA,IACA,gBAAgB;AAAA,IAChB,OAAOE;AAAA,MACL;AAAA,QACE,WAAWC;AAAA,UACT;AAAA,UACAN;AAAA,QAAA;AAAA,MACF;AAAA,MAEFE;AAAA,IAAA;AAAA,EACF,CACD;AACL;AACAJ,EAAK,cAAc;AAEnB,MAAMS,IAAaR,EAAM;AAAA,EACvB,CAAC,EAAE,WAAAC,GAAW,QAAAC,GAAQ,GAAGC,EAAA,GAASC,MAChCC,EAAU;AAAA,IACR,QAAAH;AAAA,IACA,KAAAE;AAAA,IACA,gBAAgB;AAAA,IAChB,OAAOE;AAAA,MACL,EAAE,WAAWC,EAAG,iCAAiCN,CAAS,EAAA;AAAA,MAC1DE;AAAA,IAAA;AAAA,EACF,CACD;AACL;AACAK,EAAW,cAAc;AAEzB,MAAMC,IAAYT,EAAM;AAAA,EACtB,CAAC,EAAE,WAAAC,GAAW,QAAAC,GAAQ,GAAGC,EAAA,GAASC,MAChCC,EAAU;AAAA,IACR,QAAAH;AAAA,IACA,KAAAE;AAAA,IACA,gBAAgB;AAAA,IAChB,OAAOE;AAAA,MACL;AAAA,QACE,WAAWC;AAAA,UACT;AAAA,UACAN;AAAA,QAAA;AAAA,MACF;AAAA,MAEFE;AAAA,IAAA;AAAA,EACF,CACD;AACL;AACAM,EAAU,cAAc;AAExB,MAAMC,IAAkBV,EAAM;AAAA,EAC5B,CAAC,EAAE,WAAAC,GAAW,QAAAC,GAAQ,GAAGC,EAAA,GAASC,MAChCC,EAAU;AAAA,IACR,QAAAH;AAAA,IACA,KAAAE;AAAA,IACA,gBAAgB;AAAA,IAChB,OAAOE;AAAA,MACL,EAAE,WAAWC,EAAG,iCAAiCN,CAAS,EAAA;AAAA,MAC1DE;AAAA,IAAA;AAAA,EACF,CACD;AACL;AACAO,EAAgB,cAAc;AAE9B,MAAMC,IAAcX,EAAM;AAAA,EACxB,CAAC,EAAE,WAAAC,GAAW,QAAAC,GAAQ,GAAGC,EAAA,GAASC,MAChCC,EAAU;AAAA,IACR,QAAAH;AAAA,IACA,KAAAE;AAAA,IACA,gBAAgB;AAAA,IAChB,OAAOE,EAAkB,EAAE,WAAWC,EAAG,YAAYN,CAAS,EAAA,GAAKE,CAAK;AAAA,EAAA,CACzE;AACL;AACAQ,EAAY,cAAc;AAE1B,MAAMC,IAAaZ,EAAM;AAAA,EACvB,CAAC,EAAE,WAAAC,GAAW,QAAAC,GAAQ,GAAGC,EAAA,GAASC,MAChCC,EAAU;AAAA,IACR,QAAAH;AAAA,IACA,KAAAE;AAAA,IACA,gBAAgB;AAAA,IAChB,OAAOE;AAAA,MACL,EAAE,WAAWC,EAAG,8BAA8BN,CAAS,EAAA;AAAA,MACvDE;AAAA,IAAA;AAAA,EACF,CACD;AACL;AACAS,EAAW,cAAc;"}
@@ -1,63 +0,0 @@
1
- import { jsxs as i, Fragment as v, jsx as l } from "react/jsx-runtime";
2
- import * as g from "react";
3
- import { mergeProps as m } from "@base-ui/react/merge-props";
4
- import { useRender as p } from "@base-ui/react/use-render";
5
- import { cva as x } from "../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js";
6
- import { cn as o } from "../../../lib/utils.js";
7
- const h = x(
8
- "inline-flex w-[224px] min-h-[var(--ui-card-filter-global-container-height)] flex-col items-start rounded-[var(--ui-card-filter-global-container-border-radius)] border-[length:var(--ui-card-filter-global-container-border-width)] border-solid border-[color:var(--ui-card-filter-global-border-color-idle)] bg-[var(--ui-card-filter-global-container-color-idle)] px-[var(--ui-card-filter-global-container-padding-x)] py-[var(--ui-card-filter-global-container-padding-y)] transition-colors",
9
- {
10
- variants: {
11
- variant: {
12
- static: "",
13
- "static-empty": "",
14
- clickable: "cursor-pointer outline-none hover:border-[color:var(--ui-card-filter-global-border-color-hover)] hover:bg-[var(--ui-card-filter-global-container-color-hover)] active:border-[color:var(--ui-card-filter-global-border-color-active)] active:bg-[var(--ui-card-filter-global-container-color-active)] focus-visible:border-[color:var(--ui-card-filter-global-border-color-focused)] focus-visible:ring-[3px] focus-visible:ring-[var(--ui-focus-primary)]"
15
- }
16
- },
17
- defaultVariants: {
18
- variant: "static"
19
- }
20
- }
21
- ), y = {
22
- static: "text-[var(--ui-card-filter-static-value-color-idle)]",
23
- "static-empty": "text-[var(--ui-card-filter-static-value-color-disabled)]",
24
- clickable: "text-[var(--ui-card-filter-clickable-value-color)]"
25
- }, k = g.forwardRef(
26
- ({ className: t, variant: r = "static", label: c, value: s, icon: d, render: n, ...b }, u) => {
27
- const a = r === "static-empty", e = r === "clickable", f = a ? "–" : s;
28
- return p({
29
- render: n,
30
- ref: u,
31
- defaultTagName: e ? "button" : "div",
32
- props: m(
33
- {
34
- className: o(h({ variant: r }), t),
35
- ...e ? { type: "button" } : {},
36
- children: /* @__PURE__ */ i(v, { children: [
37
- /* @__PURE__ */ l("span", { className: "text-xs font-normal leading-4 text-[var(--ui-card-filter-global-label-color)]", children: c }),
38
- /* @__PURE__ */ i("span", { className: "flex items-center gap-[var(--ui-card-filter-global-content-gap)] [&_svg]:size-4 [&_svg]:shrink-0", children: [
39
- !a && d,
40
- /* @__PURE__ */ l(
41
- "span",
42
- {
43
- className: o(
44
- "text-2xl font-semibold leading-8",
45
- y[r ?? "static"]
46
- ),
47
- children: f
48
- }
49
- )
50
- ] })
51
- ] })
52
- },
53
- b
54
- )
55
- });
56
- }
57
- );
58
- k.displayName = "CardFilter";
59
- export {
60
- k as CardFilter,
61
- h as cardFilterVariants
62
- };
63
- //# sourceMappingURL=card-filter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"card-filter.js","sources":["../../../../src/components/ui/card-filter/card-filter.tsx"],"sourcesContent":["import * as React from 'react';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { useRender } from '@base-ui/react/use-render';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\n// Mirrors the Figma \"CardFilter\" component: a compact stat/filter card — a caption\n// `label` above a content row (optional `icon` + a large `value`). `variant` maps\n// to the Figma `variant` property:\n// • `static` — non-interactive; value in `--ui-card-filter-static-value-color-idle`.\n// • `static-empty` — non-interactive placeholder; no icon, an em-dash value in\n// `--ui-card-filter-static-value-color-disabled`.\n// • `clickable` — interactive (renders a <button>); value in\n// `--ui-card-filter-clickable-value-color`, plus hover / active /\n// focus-visible treatments.\n// Per the Figma constraint (\"if an element is not clickable, it cannot have a state\n// other than Idle\") only `clickable` carries the hover / active / focus state\n// classes — `static` / `static-empty` stay idle. Geometry (224px width, 64px min\n// height, 8px radius, 16/8px padding, 8px content gap, 1px border) and every state\n// color come from the `--ui-card-filter-*` tokens. Focus: a 3px `--ui-focus-primary`\n// ring flush to the edge (no offset), matching the rest of the library.\nconst cardFilterVariants = cva(\n 'inline-flex w-[224px] min-h-[var(--ui-card-filter-global-container-height)] flex-col items-start rounded-[var(--ui-card-filter-global-container-border-radius)] border-[length:var(--ui-card-filter-global-container-border-width)] border-solid border-[color:var(--ui-card-filter-global-border-color-idle)] bg-[var(--ui-card-filter-global-container-color-idle)] px-[var(--ui-card-filter-global-container-padding-x)] py-[var(--ui-card-filter-global-container-padding-y)] transition-colors',\n {\n variants: {\n variant: {\n static: '',\n 'static-empty': '',\n clickable:\n 'cursor-pointer outline-none hover:border-[color:var(--ui-card-filter-global-border-color-hover)] hover:bg-[var(--ui-card-filter-global-container-color-hover)] active:border-[color:var(--ui-card-filter-global-border-color-active)] active:bg-[var(--ui-card-filter-global-container-color-active)] focus-visible:border-[color:var(--ui-card-filter-global-border-color-focused)] focus-visible:ring-[3px] focus-visible:ring-[var(--ui-focus-primary)]',\n },\n },\n defaultVariants: {\n variant: 'static',\n },\n }\n);\n\n// The value color is the one token that varies by variant rather than by state.\nconst valueColorClass: Record<\n NonNullable<VariantProps<typeof cardFilterVariants>['variant']>,\n string\n> = {\n static: 'text-[var(--ui-card-filter-static-value-color-idle)]',\n 'static-empty': 'text-[var(--ui-card-filter-static-value-color-disabled)]',\n clickable: 'text-[var(--ui-card-filter-clickable-value-color)]',\n};\n\nexport interface CardFilterProps\n extends\n Omit<React.HTMLAttributes<HTMLElement>, 'children'>,\n VariantProps<typeof cardFilterVariants> {\n /** Caption shown above the value. */\n label?: React.ReactNode;\n /** The large value. Ignored for `variant=\"static-empty\"` (shows an em-dash). */\n value?: React.ReactNode;\n /** Optional leading icon (16px) rendered before the value. Hidden for `static-empty`. */\n icon?: React.ReactNode;\n /**\n * Replace the rendered element (`<button>` for `clickable`, otherwise `<div>`)\n * with another element or component (Base UI composition) — e.g. a router link\n * for a clickable filter. The component's props and class names are merged onto it.\n */\n render?: useRender.RenderProp;\n}\n\n/**\n * A compact stat/filter card: a label, an optional icon, and a prominent value.\n * Use `variant=\"clickable\"` for a filter the user can activate (renders a button);\n * `static` / `static-empty` are presentational.\n */\nconst CardFilter = React.forwardRef<HTMLElement, CardFilterProps>(\n (\n { className, variant = 'static', label, value, icon, render, ...props },\n ref\n ) => {\n const isEmpty = variant === 'static-empty';\n const isClickable = variant === 'clickable';\n const displayValue = isEmpty ? '–' : value;\n\n return useRender({\n render,\n ref,\n defaultTagName: isClickable ? 'button' : 'div',\n props: mergeProps<'button'>(\n {\n className: cn(cardFilterVariants({ variant }), className),\n ...(isClickable ? { type: 'button' as const } : {}),\n children: (\n <>\n <span className=\"text-xs font-normal leading-4 text-[var(--ui-card-filter-global-label-color)]\">\n {label}\n </span>\n <span className=\"flex items-center gap-[var(--ui-card-filter-global-content-gap)] [&_svg]:size-4 [&_svg]:shrink-0\">\n {!isEmpty && icon}\n <span\n className={cn(\n 'text-2xl font-semibold leading-8',\n valueColorClass[variant ?? 'static']\n )}\n >\n {displayValue}\n </span>\n </span>\n </>\n ),\n },\n props\n ),\n });\n }\n);\nCardFilter.displayName = 'CardFilter';\n\nexport { CardFilter, cardFilterVariants };\n"],"names":["cardFilterVariants","cva","valueColorClass","CardFilter","React","className","variant","label","value","icon","render","props","ref","isEmpty","isClickable","displayValue","useRender","mergeProps","cn","jsxs","Fragment","jsx"],"mappings":";;;;;;AAsBA,MAAMA,IAAqBC;AAAA,EACzB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,WACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAGMC,IAGF;AAAA,EACF,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,WAAW;AACb,GAyBMC,IAAaC,EAAM;AAAA,EACvB,CACE,EAAE,WAAAC,GAAW,SAAAC,IAAU,UAAU,OAAAC,GAAO,OAAAC,GAAO,MAAAC,GAAM,QAAAC,GAAQ,GAAGC,EAAA,GAChEC,MACG;AACH,UAAMC,IAAUP,MAAY,gBACtBQ,IAAcR,MAAY,aAC1BS,IAAeF,IAAU,MAAML;AAErC,WAAOQ,EAAU;AAAA,MACf,QAAAN;AAAA,MACA,KAAAE;AAAA,MACA,gBAAgBE,IAAc,WAAW;AAAA,MACzC,OAAOG;AAAA,QACL;AAAA,UACE,WAAWC,EAAGlB,EAAmB,EAAE,SAAAM,EAAA,CAAS,GAAGD,CAAS;AAAA,UACxD,GAAIS,IAAc,EAAE,MAAM,SAAA,IAAsB,CAAA;AAAA,UAChD,UACE,gBAAAK,EAAAC,GAAA,EACE,UAAA;AAAA,YAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,iFACb,UAAAd,GACH;AAAA,YACA,gBAAAY,EAAC,QAAA,EAAK,WAAU,oGACb,UAAA;AAAA,cAAA,CAACN,KAAWJ;AAAA,cACb,gBAAAY;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWH;AAAA,oBACT;AAAA,oBACAhB,EAAgBI,KAAW,QAAQ;AAAA,kBAAA;AAAA,kBAGpC,UAAAS;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,QAGJJ;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EACH;AACF;AACAR,EAAW,cAAc;"}
@@ -1,213 +0,0 @@
1
- import { jsx as c, jsxs as v, Fragment as E } from "react/jsx-runtime";
2
- import * as b from "react";
3
- import * as C from "recharts";
4
- import { cn as d } from "../../../lib/utils.js";
5
- const I = { light: "", dark: "[data-theme='dark']" }, $ = b.createContext(null);
6
- function L() {
7
- const s = b.useContext($);
8
- if (!s)
9
- throw new Error("useChart must be used within a <ChartContainer />");
10
- return s;
11
- }
12
- function M({
13
- id: s,
14
- className: e,
15
- children: r,
16
- config: o,
17
- ...n
18
- }) {
19
- const i = b.useId(), a = `chart-${s || i.replace(/:/g, "")}`;
20
- return /* @__PURE__ */ c($.Provider, { value: { config: o }, children: /* @__PURE__ */ v(
21
- "div",
22
- {
23
- id: s,
24
- "data-slot": "chart",
25
- "data-chart": a,
26
- className: d(
27
- "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
28
- e
29
- ),
30
- ...n,
31
- children: [
32
- /* @__PURE__ */ c(R, { id: a, config: o }),
33
- /* @__PURE__ */ c(C.ResponsiveContainer, { children: r })
34
- ]
35
- }
36
- ) });
37
- }
38
- const R = ({ id: s, config: e }) => {
39
- const r = Object.entries(e).filter(
40
- ([, o]) => o.theme || o.color
41
- );
42
- return r.length ? /* @__PURE__ */ c("style", { children: Object.entries(I).map(
43
- ([o, n]) => `
44
- ${n} [data-chart=${s}] {
45
- ${r.map(([i, a]) => {
46
- var l;
47
- const h = ((l = a.theme) == null ? void 0 : l[o]) || a.color;
48
- return h ? ` --color-${i}: ${h};` : null;
49
- }).join(`
50
- `)}
51
- }
52
- `
53
- ).join(`
54
- `) }) : null;
55
- }, O = C.Tooltip;
56
- function q({
57
- active: s,
58
- payload: e,
59
- label: r,
60
- className: o,
61
- indicator: n = "dot",
62
- hideLabel: i = !1,
63
- hideIndicator: a = !1,
64
- labelFormatter: h,
65
- formatter: l,
66
- labelClassName: p,
67
- color: P,
68
- nameKey: T,
69
- labelKey: _
70
- }) {
71
- const { config: m } = L(), N = b.useMemo(() => {
72
- if (i || !(e != null && e.length))
73
- return null;
74
- const [t] = e, k = `${_ || (t == null ? void 0 : t.dataKey) || (t == null ? void 0 : t.name) || "value"}`, f = w(m, t, k), u = (() => {
75
- var j;
76
- const g = !_ && typeof r == "string" ? ((j = m[r]) == null ? void 0 : j.label) ?? r : f == null ? void 0 : f.label;
77
- return typeof g == "string" || typeof g == "number" ? g : void 0;
78
- })();
79
- return h ? /* @__PURE__ */ c("div", { className: d("font-medium", p), children: h(u, e) }) : u ? /* @__PURE__ */ c("div", { className: d("font-medium", p), children: u }) : null;
80
- }, [
81
- r,
82
- h,
83
- e,
84
- i,
85
- p,
86
- m,
87
- _
88
- ]);
89
- if (!s || !(e != null && e.length))
90
- return null;
91
- const x = e.length === 1 && n !== "dot";
92
- return /* @__PURE__ */ v(
93
- "div",
94
- {
95
- className: d(
96
- "grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border bg-background px-2.5 py-1.5 text-xs text-foreground shadow-xl",
97
- o
98
- ),
99
- children: [
100
- x ? null : N,
101
- /* @__PURE__ */ c("div", { className: "grid gap-1.5", children: e.map((t, k) => {
102
- const f = `${T || t.name || t.dataKey || "value"}`, u = w(m, t, f), g = P || t.payload.fill || t.color;
103
- return /* @__PURE__ */ c(
104
- "div",
105
- {
106
- className: d(
107
- "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
108
- n === "dot" && "items-center"
109
- ),
110
- children: l && (t == null ? void 0 : t.value) !== void 0 && t.name ? l(t.value, t.name, t, k, e) : /* @__PURE__ */ v(E, { children: [
111
- u != null && u.icon ? /* @__PURE__ */ c(u.icon, {}) : !a && /* @__PURE__ */ c(
112
- "div",
113
- {
114
- className: d(
115
- "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
116
- {
117
- "h-2.5 w-2.5": n === "dot",
118
- "h-4 w-1": n === "line",
119
- "h-4 w-0 border-[1.5px] border-dashed bg-transparent": n === "dashed",
120
- "my-0.5": x && n === "dashed"
121
- }
122
- ),
123
- style: {
124
- "--color-bg": g,
125
- "--color-border": g
126
- }
127
- }
128
- ),
129
- /* @__PURE__ */ v(
130
- "div",
131
- {
132
- className: d(
133
- "flex flex-1 justify-between leading-none",
134
- x ? "items-end" : "items-center"
135
- ),
136
- children: [
137
- /* @__PURE__ */ v("div", { className: "grid gap-1.5", children: [
138
- x ? N : null,
139
- /* @__PURE__ */ c("span", { className: "text-muted-foreground", children: (u == null ? void 0 : u.label) || t.name })
140
- ] }),
141
- t.value != null && /* @__PURE__ */ c("span", { className: "font-mono font-medium tabular-nums text-foreground", children: t.value.toLocaleString() })
142
- ]
143
- }
144
- )
145
- ] })
146
- },
147
- f
148
- );
149
- }) })
150
- ]
151
- }
152
- );
153
- }
154
- const H = C.Legend;
155
- function z({
156
- className: s,
157
- hideIcon: e = !1,
158
- payload: r,
159
- verticalAlign: o = "bottom",
160
- nameKey: n
161
- }) {
162
- const { config: i } = L();
163
- return r != null && r.length ? /* @__PURE__ */ c(
164
- "div",
165
- {
166
- className: d(
167
- "flex items-center justify-center gap-4",
168
- o === "top" ? "pb-3" : "pt-3",
169
- s
170
- ),
171
- children: r.map((a) => {
172
- const h = `${n || a.dataKey || "value"}`, l = w(i, a, h);
173
- return /* @__PURE__ */ v(
174
- "div",
175
- {
176
- className: d(
177
- "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
178
- ),
179
- children: [
180
- l != null && l.icon && !e ? /* @__PURE__ */ c(l.icon, {}) : /* @__PURE__ */ c(
181
- "div",
182
- {
183
- className: "h-2 w-2 shrink-0 rounded-[2px]",
184
- style: {
185
- backgroundColor: a.color
186
- }
187
- }
188
- ),
189
- l == null ? void 0 : l.label
190
- ]
191
- },
192
- a.value
193
- );
194
- })
195
- }
196
- ) : null;
197
- }
198
- function w(s, e, r) {
199
- if (typeof e != "object" || e === null)
200
- return;
201
- const o = "payload" in e && typeof e.payload == "object" && e.payload !== null ? e.payload : void 0;
202
- let n = r;
203
- return r in e && typeof e[r] == "string" ? n = e[r] : o && r in o && typeof o[r] == "string" && (n = o[r]), n in s ? s[n] : s[r];
204
- }
205
- export {
206
- M as ChartContainer,
207
- H as ChartLegend,
208
- z as ChartLegendContent,
209
- R as ChartStyle,
210
- O as ChartTooltip,
211
- q as ChartTooltipContent
212
- };
213
- //# sourceMappingURL=chart.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chart.js","sources":["../../../../src/components/ui/chart/chart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\nimport type { LegendPayload } from 'recharts/types/component/DefaultLegendContent';\nimport {\n NameType,\n Payload,\n ValueType,\n} from 'recharts/types/component/DefaultTooltipContent';\nimport type { Props as LegendProps } from 'recharts/types/component/Legend';\nimport { TooltipContentProps } from 'recharts/types/component/Tooltip';\n\nimport { cn } from '@/lib/utils';\n\n// Format: { THEME_NAME: CSS_SELECTOR }. ui-react flips light/dark via the\n// `[data-theme]` attribute (the tokens resolve `light-dark()` through\n// `color-scheme`), not the legacy `.dark` class — so per-series `theme` colors\n// scope their dark value under `[data-theme='dark']`.\nconst THEMES = { light: '', dark: \"[data-theme='dark']\" } as const;\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n );\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nexport type ChartTooltipContentProps = Partial<\n TooltipContentProps<ValueType, NameType>\n> & {\n className?: string;\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: 'line' | 'dot' | 'dashed';\n nameKey?: string;\n labelKey?: string;\n labelFormatter?: (\n label: TooltipContentProps<number, string>['label'],\n payload: TooltipContentProps<number, string>['payload']\n ) => React.ReactNode;\n formatter?: (\n value: number | string,\n name: string,\n item: Payload<number | string, string>,\n index: number,\n payload: ReadonlyArray<Payload<number | string, string>>\n ) => React.ReactNode;\n labelClassName?: string;\n color?: string;\n};\n\nexport type ChartLegendContentProps = {\n className?: string;\n hideIcon?: boolean;\n verticalAlign?: LegendProps['verticalAlign'];\n payload?: LegendPayload[];\n nameKey?: string;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n}\n\nexport interface ChartContainerProps extends React.ComponentProps<'div'> {\n config: ChartConfig;\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >['children'];\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n ...props\n}: ChartContainerProps) {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n id={id}\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme || config.color\n );\n\n if (!colorConfig.length) {\n return null;\n }\n\n // Rendered as a text child (not dangerouslySetInnerHTML): React sets it via\n // textContent, which the browser does not HTML-parse, so a `</style>` in a\n // config color can't break out of the tag.\n return (\n <style>\n {Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n ${prefix} [data-chart=${id}] {\n ${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join('\\n')}\n }\n `\n )\n .join('\\n')}\n </style>\n );\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nfunction ChartTooltipContent({\n active,\n payload,\n label,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n labelFormatter,\n formatter,\n labelClassName,\n color,\n nameKey,\n labelKey,\n}: ChartTooltipContentProps) {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value = (() => {\n const v =\n !labelKey && typeof label === 'string'\n ? (config[label as keyof typeof config]?.label ?? label)\n : itemConfig?.label;\n\n return typeof v === 'string' || typeof v === 'number' ? v : undefined;\n })();\n\n if (labelFormatter) {\n return (\n <div className={cn('font-medium', labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n );\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n className={cn(\n 'grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border bg-background px-2.5 py-1.5 text-xs text-foreground shadow-xl',\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload.map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = color || item.payload.fill || item.color;\n\n return (\n <div\n key={key}\n className={cn(\n 'flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground',\n indicator === 'dot' && 'items-center'\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n 'shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)',\n {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'h-4 w-1': indicator === 'line',\n 'h-4 w-0 border-[1.5px] border-dashed bg-transparent':\n indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n }\n )}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center'\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value != null && (\n <span className=\"font-mono font-medium tabular-nums text-foreground\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = 'bottom',\n nameKey,\n}: ChartLegendContentProps) {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'flex items-center justify-center gap-4',\n verticalAlign === 'top' ? 'pb-3' : 'pt-3',\n className\n )}\n >\n {payload.map((item) => {\n const key = `${nameKey || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={item.value}\n className={cn(\n 'flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground'\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string\n) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n 'payload' in payload &&\n typeof payload.payload === 'object' &&\n payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === 'string'\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string;\n }\n\n return configLabelKey in config\n ? config[configLabelKey]\n : config[key as keyof typeof config];\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n};\n"],"names":["THEMES","ChartContext","React","useChart","context","ChartContainer","id","className","children","config","props","uniqueId","chartId","jsxs","cn","jsx","ChartStyle","RechartsPrimitive","colorConfig","theme","prefix","key","itemConfig","color","_a","ChartTooltip","ChartTooltipContent","active","payload","label","indicator","hideLabel","hideIndicator","labelFormatter","formatter","labelClassName","nameKey","labelKey","tooltipLabel","item","getPayloadConfigFromPayload","value","v","nestLabel","index","indicatorColor","Fragment","ChartLegend","ChartLegendContent","hideIcon","verticalAlign","payloadPayload","configLabelKey"],"mappings":"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"}