prime-ui-kit 0.9.2 → 0.10.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 (641) hide show
  1. package/README.md +18 -9
  2. package/THIRD_PARTY_NOTICES +76 -0
  3. package/dist/chunks/{chunk-ZEFCDEEQ.js → chunk-4TRNUP45.js} +1085 -526
  4. package/dist/chunks/chunk-EJ2ZVQYL.js +5805 -0
  5. package/dist/chunks/chunk-GFKDZFQR.js +1208 -0
  6. package/dist/chunks/{chunk-LXGRKN34.js → chunk-K4FACFQ2.js} +776 -484
  7. package/dist/chunks/{chunk-IQELQNMR.js → chunk-T7CLQXGB.js} +20 -5
  8. package/dist/color-picker.js +3 -2
  9. package/dist/components/button/Button.d.ts +24 -4
  10. package/dist/components/card/Card.d.ts +1 -1
  11. package/dist/components/code-block/CodeBlock.d.ts +1 -1
  12. package/dist/components/color-picker/ColorPicker.d.ts +1 -1
  13. package/dist/components/data-table/Row.d.ts +3 -1
  14. package/dist/components/data-table/rows.d.ts +4 -0
  15. package/dist/components/digit-input/DigitInput.d.ts +6 -1
  16. package/dist/components/index.d.ts +4 -1
  17. package/dist/components/input/Input.d.ts +16 -1
  18. package/dist/components/input/passwordStrength.d.ts +9 -0
  19. package/dist/components/progress-bar/ProgressBar.d.ts +16 -1
  20. package/dist/components/sparkline/Sparkline.d.ts +26 -0
  21. package/dist/hooks/useEdgeOverflow.d.ts +4 -0
  22. package/dist/icon-set.d.ts +501 -0
  23. package/dist/icons/Icon.d.ts +10 -18
  24. package/dist/icons/glyph.d.ts +40 -0
  25. package/dist/icons/glyphs/a-arrow-down.d.ts +2 -0
  26. package/dist/icons/glyphs/a-arrow-up.d.ts +2 -0
  27. package/dist/icons/glyphs/accessibility.d.ts +2 -0
  28. package/dist/icons/glyphs/activity.d.ts +2 -0
  29. package/dist/icons/glyphs/air-vent.d.ts +2 -0
  30. package/dist/icons/glyphs/airplay.d.ts +2 -0
  31. package/dist/icons/glyphs/alarm-clock-check.d.ts +2 -0
  32. package/dist/icons/glyphs/alarm-clock-minus.d.ts +2 -0
  33. package/dist/icons/glyphs/alarm-clock-plus.d.ts +2 -0
  34. package/dist/icons/glyphs/alarm-clock.d.ts +2 -0
  35. package/dist/icons/glyphs/alarm-smoke.d.ts +2 -0
  36. package/dist/icons/glyphs/align-horizontal-space-around.d.ts +2 -0
  37. package/dist/icons/glyphs/align-vertical-space-around.d.ts +2 -0
  38. package/dist/icons/glyphs/ambulance.d.ts +2 -0
  39. package/dist/icons/glyphs/angry.d.ts +2 -0
  40. package/dist/icons/glyphs/annoyed.d.ts +2 -0
  41. package/dist/icons/glyphs/archive.d.ts +2 -0
  42. package/dist/icons/glyphs/arrow-big-down-dash.d.ts +2 -0
  43. package/dist/icons/glyphs/arrow-big-down.d.ts +2 -0
  44. package/dist/icons/glyphs/arrow-big-left-dash.d.ts +2 -0
  45. package/dist/icons/glyphs/arrow-big-left.d.ts +2 -0
  46. package/dist/icons/glyphs/arrow-big-right-dash.d.ts +2 -0
  47. package/dist/icons/glyphs/arrow-big-right.d.ts +2 -0
  48. package/dist/icons/glyphs/arrow-big-up-dash.d.ts +2 -0
  49. package/dist/icons/glyphs/arrow-big-up.d.ts +2 -0
  50. package/dist/icons/glyphs/arrow-down-0-1.d.ts +2 -0
  51. package/dist/icons/glyphs/arrow-down-1-0.d.ts +2 -0
  52. package/dist/icons/glyphs/arrow-down-a-z.d.ts +2 -0
  53. package/dist/icons/glyphs/arrow-down-left.d.ts +2 -0
  54. package/dist/icons/glyphs/arrow-down-right.d.ts +2 -0
  55. package/dist/icons/glyphs/arrow-down-z-a.d.ts +2 -0
  56. package/dist/icons/glyphs/arrow-down.d.ts +2 -0
  57. package/dist/icons/glyphs/arrow-left.d.ts +2 -0
  58. package/dist/icons/glyphs/arrow-right.d.ts +2 -0
  59. package/dist/icons/glyphs/arrow-up-down.d.ts +2 -0
  60. package/dist/icons/glyphs/arrow-up-left.d.ts +2 -0
  61. package/dist/icons/glyphs/arrow-up-right.d.ts +2 -0
  62. package/dist/icons/glyphs/arrow-up.d.ts +2 -0
  63. package/dist/icons/glyphs/at-sign.d.ts +2 -0
  64. package/dist/icons/glyphs/atom.d.ts +2 -0
  65. package/dist/icons/glyphs/audio-lines.d.ts +2 -0
  66. package/dist/icons/glyphs/axe.d.ts +2 -0
  67. package/dist/icons/glyphs/badge-alert.d.ts +2 -0
  68. package/dist/icons/glyphs/badge-percent.d.ts +2 -0
  69. package/dist/icons/glyphs/ban.d.ts +2 -0
  70. package/dist/icons/glyphs/banana.d.ts +2 -0
  71. package/dist/icons/glyphs/battery-charging.d.ts +2 -0
  72. package/dist/icons/glyphs/battery-full.d.ts +2 -0
  73. package/dist/icons/glyphs/battery-low.d.ts +2 -0
  74. package/dist/icons/glyphs/battery-medium.d.ts +2 -0
  75. package/dist/icons/glyphs/battery-plus.d.ts +2 -0
  76. package/dist/icons/glyphs/battery-warning.d.ts +2 -0
  77. package/dist/icons/glyphs/battery.d.ts +2 -0
  78. package/dist/icons/glyphs/bell-electric.d.ts +2 -0
  79. package/dist/icons/glyphs/bell.d.ts +2 -0
  80. package/dist/icons/glyphs/biceps-flexed.d.ts +2 -0
  81. package/dist/icons/glyphs/binary.d.ts +2 -0
  82. package/dist/icons/glyphs/blocks.d.ts +2 -0
  83. package/dist/icons/glyphs/bluetooth-connected.d.ts +2 -0
  84. package/dist/icons/glyphs/bluetooth-off.d.ts +2 -0
  85. package/dist/icons/glyphs/bluetooth-searching.d.ts +2 -0
  86. package/dist/icons/glyphs/bluetooth.d.ts +2 -0
  87. package/dist/icons/glyphs/bold.d.ts +2 -0
  88. package/dist/icons/glyphs/bone.d.ts +2 -0
  89. package/dist/icons/glyphs/book-open.d.ts +2 -0
  90. package/dist/icons/glyphs/book-text.d.ts +2 -0
  91. package/dist/icons/glyphs/bookmark-check.d.ts +2 -0
  92. package/dist/icons/glyphs/bookmark-minus.d.ts +2 -0
  93. package/dist/icons/glyphs/bookmark-plus.d.ts +2 -0
  94. package/dist/icons/glyphs/bookmark-x.d.ts +2 -0
  95. package/dist/icons/glyphs/bookmark.d.ts +2 -0
  96. package/dist/icons/glyphs/bot-message-square.d.ts +2 -0
  97. package/dist/icons/glyphs/bot.d.ts +2 -0
  98. package/dist/icons/glyphs/box.d.ts +2 -0
  99. package/dist/icons/glyphs/boxes.d.ts +2 -0
  100. package/dist/icons/glyphs/brain.d.ts +2 -0
  101. package/dist/icons/glyphs/briefcase-business.d.ts +2 -0
  102. package/dist/icons/glyphs/calendar-check-2.d.ts +2 -0
  103. package/dist/icons/glyphs/calendar-check.d.ts +2 -0
  104. package/dist/icons/glyphs/calendar-cog.d.ts +2 -0
  105. package/dist/icons/glyphs/calendar-days.d.ts +2 -0
  106. package/dist/icons/glyphs/calendar.d.ts +2 -0
  107. package/dist/icons/glyphs/car.d.ts +2 -0
  108. package/dist/icons/glyphs/cast.d.ts +2 -0
  109. package/dist/icons/glyphs/cctv.d.ts +2 -0
  110. package/dist/icons/glyphs/chart-bar-decreasing.d.ts +2 -0
  111. package/dist/icons/glyphs/chart-bar-increasing.d.ts +2 -0
  112. package/dist/icons/glyphs/chart-column-decreasing.d.ts +2 -0
  113. package/dist/icons/glyphs/chart-column-increasing.d.ts +2 -0
  114. package/dist/icons/glyphs/chart-column.d.ts +2 -0
  115. package/dist/icons/glyphs/chart-line.d.ts +2 -0
  116. package/dist/icons/glyphs/chart-no-axes-column-decreasing.d.ts +2 -0
  117. package/dist/icons/glyphs/chart-no-axes-column-increasing.d.ts +2 -0
  118. package/dist/icons/glyphs/chart-pie.d.ts +2 -0
  119. package/dist/icons/glyphs/chart-scatter.d.ts +2 -0
  120. package/dist/icons/glyphs/chart-spline.d.ts +2 -0
  121. package/dist/icons/glyphs/check-check.d.ts +2 -0
  122. package/dist/icons/glyphs/check.d.ts +2 -0
  123. package/dist/icons/glyphs/chess-bishop.d.ts +2 -0
  124. package/dist/icons/glyphs/chess-king.d.ts +2 -0
  125. package/dist/icons/glyphs/chess-knight.d.ts +2 -0
  126. package/dist/icons/glyphs/chess-pawn.d.ts +2 -0
  127. package/dist/icons/glyphs/chevron-down.d.ts +2 -0
  128. package/dist/icons/glyphs/chevron-first.d.ts +2 -0
  129. package/dist/icons/glyphs/chevron-left.d.ts +2 -0
  130. package/dist/icons/glyphs/chevron-right.d.ts +2 -0
  131. package/dist/icons/glyphs/chevron-up.d.ts +2 -0
  132. package/dist/icons/glyphs/chevrons-down-up.d.ts +2 -0
  133. package/dist/icons/glyphs/chevrons-left-right.d.ts +2 -0
  134. package/dist/icons/glyphs/chevrons-left.d.ts +2 -0
  135. package/dist/icons/glyphs/chevrons-right-left.d.ts +2 -0
  136. package/dist/icons/glyphs/chevrons-up-down.d.ts +2 -0
  137. package/dist/icons/glyphs/chromium.d.ts +2 -0
  138. package/dist/icons/glyphs/cigarette-off.d.ts +2 -0
  139. package/dist/icons/glyphs/cigarette.d.ts +2 -0
  140. package/dist/icons/glyphs/circle-check.d.ts +2 -0
  141. package/dist/icons/glyphs/circle-chevron-down.d.ts +2 -0
  142. package/dist/icons/glyphs/circle-chevron-left.d.ts +2 -0
  143. package/dist/icons/glyphs/circle-chevron-right.d.ts +2 -0
  144. package/dist/icons/glyphs/circle-chevron-up.d.ts +2 -0
  145. package/dist/icons/glyphs/circle-dashed.d.ts +2 -0
  146. package/dist/icons/glyphs/circle-dollar-sign.d.ts +2 -0
  147. package/dist/icons/glyphs/circle-gauge.d.ts +2 -0
  148. package/dist/icons/glyphs/circle-question-mark.d.ts +2 -0
  149. package/dist/icons/glyphs/circle-x.d.ts +2 -0
  150. package/dist/icons/glyphs/circle.d.ts +2 -0
  151. package/dist/icons/glyphs/clapperboard.d.ts +2 -0
  152. package/dist/icons/glyphs/clipboard-check.d.ts +2 -0
  153. package/dist/icons/glyphs/clock.d.ts +2 -0
  154. package/dist/icons/glyphs/cloud-backup.d.ts +2 -0
  155. package/dist/icons/glyphs/cloud-cog.d.ts +2 -0
  156. package/dist/icons/glyphs/cloud-download.d.ts +2 -0
  157. package/dist/icons/glyphs/cloud-lightning.d.ts +2 -0
  158. package/dist/icons/glyphs/cloud-off.d.ts +2 -0
  159. package/dist/icons/glyphs/cloud-rain-wind.d.ts +2 -0
  160. package/dist/icons/glyphs/cloud-rain.d.ts +2 -0
  161. package/dist/icons/glyphs/cloud-snow.d.ts +2 -0
  162. package/dist/icons/glyphs/cloud-sun.d.ts +2 -0
  163. package/dist/icons/glyphs/cloud-sync.d.ts +2 -0
  164. package/dist/icons/glyphs/cloud-upload.d.ts +2 -0
  165. package/dist/icons/glyphs/code-xml.d.ts +2 -0
  166. package/dist/icons/glyphs/coffee.d.ts +2 -0
  167. package/dist/icons/glyphs/cog.d.ts +2 -0
  168. package/dist/icons/glyphs/compass.d.ts +2 -0
  169. package/dist/icons/glyphs/concierge-bell.d.ts +2 -0
  170. package/dist/icons/glyphs/construction.d.ts +2 -0
  171. package/dist/icons/glyphs/contrast.d.ts +2 -0
  172. package/dist/icons/glyphs/cooking-pot.d.ts +2 -0
  173. package/dist/icons/glyphs/copy.d.ts +2 -0
  174. package/dist/icons/glyphs/corner-down-left.d.ts +2 -0
  175. package/dist/icons/glyphs/corner-down-right.d.ts +2 -0
  176. package/dist/icons/glyphs/corner-left-down.d.ts +2 -0
  177. package/dist/icons/glyphs/corner-left-up.d.ts +2 -0
  178. package/dist/icons/glyphs/corner-right-down.d.ts +2 -0
  179. package/dist/icons/glyphs/corner-right-up.d.ts +2 -0
  180. package/dist/icons/glyphs/corner-up-left.d.ts +2 -0
  181. package/dist/icons/glyphs/corner-up-right.d.ts +2 -0
  182. package/dist/icons/glyphs/cpu.d.ts +2 -0
  183. package/dist/icons/glyphs/credit-card.d.ts +2 -0
  184. package/dist/icons/glyphs/cup-soda.d.ts +2 -0
  185. package/dist/icons/glyphs/database-backup.d.ts +2 -0
  186. package/dist/icons/glyphs/delete.d.ts +2 -0
  187. package/dist/icons/glyphs/disc-3.d.ts +2 -0
  188. package/dist/icons/glyphs/dollar-sign.d.ts +2 -0
  189. package/dist/icons/glyphs/download.d.ts +2 -0
  190. package/dist/icons/glyphs/dribbble.d.ts +2 -0
  191. package/dist/icons/glyphs/droplet.d.ts +2 -0
  192. package/dist/icons/glyphs/drum.d.ts +2 -0
  193. package/dist/icons/glyphs/earth.d.ts +2 -0
  194. package/dist/icons/glyphs/ellipsis.d.ts +2 -0
  195. package/dist/icons/glyphs/euro.d.ts +2 -0
  196. package/dist/icons/glyphs/ev-charger.d.ts +2 -0
  197. package/dist/icons/glyphs/expand.d.ts +2 -0
  198. package/dist/icons/glyphs/external-link.d.ts +2 -0
  199. package/dist/icons/glyphs/eye-off.d.ts +2 -0
  200. package/dist/icons/glyphs/eye.d.ts +2 -0
  201. package/dist/icons/glyphs/facebook.d.ts +2 -0
  202. package/dist/icons/glyphs/fan.d.ts +2 -0
  203. package/dist/icons/glyphs/feather.d.ts +2 -0
  204. package/dist/icons/glyphs/figma.d.ts +2 -0
  205. package/dist/icons/glyphs/file-chart-line.d.ts +2 -0
  206. package/dist/icons/glyphs/file-check-corner.d.ts +2 -0
  207. package/dist/icons/glyphs/file-check.d.ts +2 -0
  208. package/dist/icons/glyphs/file-cog.d.ts +2 -0
  209. package/dist/icons/glyphs/file-pen-line.d.ts +2 -0
  210. package/dist/icons/glyphs/file-stack.d.ts +2 -0
  211. package/dist/icons/glyphs/file-text.d.ts +2 -0
  212. package/dist/icons/glyphs/fingerprint-pattern.d.ts +2 -0
  213. package/dist/icons/glyphs/fish-symbol.d.ts +2 -0
  214. package/dist/icons/glyphs/flame.d.ts +2 -0
  215. package/dist/icons/glyphs/flask-conical.d.ts +2 -0
  216. package/dist/icons/glyphs/folder-archive.d.ts +2 -0
  217. package/dist/icons/glyphs/folder-check.d.ts +2 -0
  218. package/dist/icons/glyphs/folder-clock.d.ts +2 -0
  219. package/dist/icons/glyphs/folder-code.d.ts +2 -0
  220. package/dist/icons/glyphs/folder-cog.d.ts +2 -0
  221. package/dist/icons/glyphs/folder-dot.d.ts +2 -0
  222. package/dist/icons/glyphs/folder-down.d.ts +2 -0
  223. package/dist/icons/glyphs/folder-git-2.d.ts +2 -0
  224. package/dist/icons/glyphs/folder-git.d.ts +2 -0
  225. package/dist/icons/glyphs/folder-heart.d.ts +2 -0
  226. package/dist/icons/glyphs/folder-input.d.ts +2 -0
  227. package/dist/icons/glyphs/folder-kanban.d.ts +2 -0
  228. package/dist/icons/glyphs/folder-key.d.ts +2 -0
  229. package/dist/icons/glyphs/folder-lock.d.ts +2 -0
  230. package/dist/icons/glyphs/folder-minus.d.ts +2 -0
  231. package/dist/icons/glyphs/folder-open.d.ts +2 -0
  232. package/dist/icons/glyphs/folder-output.d.ts +2 -0
  233. package/dist/icons/glyphs/folder-plus.d.ts +2 -0
  234. package/dist/icons/glyphs/folder-root.d.ts +2 -0
  235. package/dist/icons/glyphs/folder-sync.d.ts +2 -0
  236. package/dist/icons/glyphs/folder-tree.d.ts +2 -0
  237. package/dist/icons/glyphs/folder-up.d.ts +2 -0
  238. package/dist/icons/glyphs/folder-x.d.ts +2 -0
  239. package/dist/icons/glyphs/folders.d.ts +2 -0
  240. package/dist/icons/glyphs/frame.d.ts +2 -0
  241. package/dist/icons/glyphs/frown.d.ts +2 -0
  242. package/dist/icons/glyphs/gallery-horizontal-end.d.ts +2 -0
  243. package/dist/icons/glyphs/gallery-thumbnails.d.ts +2 -0
  244. package/dist/icons/glyphs/gallery-vertical-end.d.ts +2 -0
  245. package/dist/icons/glyphs/gauge.d.ts +2 -0
  246. package/dist/icons/glyphs/gavel.d.ts +2 -0
  247. package/dist/icons/glyphs/georgian-lari.d.ts +2 -0
  248. package/dist/icons/glyphs/git-branch.d.ts +2 -0
  249. package/dist/icons/glyphs/git-commit-horizontal.d.ts +2 -0
  250. package/dist/icons/glyphs/git-commit-vertical.d.ts +2 -0
  251. package/dist/icons/glyphs/git-compare-arrows.d.ts +2 -0
  252. package/dist/icons/glyphs/git-compare.d.ts +2 -0
  253. package/dist/icons/glyphs/git-fork.d.ts +2 -0
  254. package/dist/icons/glyphs/git-graph.d.ts +2 -0
  255. package/dist/icons/glyphs/git-merge.d.ts +2 -0
  256. package/dist/icons/glyphs/git-pull-request-closed.d.ts +2 -0
  257. package/dist/icons/glyphs/git-pull-request-create.d.ts +2 -0
  258. package/dist/icons/glyphs/git-pull-request.d.ts +2 -0
  259. package/dist/icons/glyphs/github.d.ts +2 -0
  260. package/dist/icons/glyphs/gitlab.d.ts +2 -0
  261. package/dist/icons/glyphs/graduation-cap.d.ts +2 -0
  262. package/dist/icons/glyphs/grip-horizontal.d.ts +2 -0
  263. package/dist/icons/glyphs/grip-vertical.d.ts +2 -0
  264. package/dist/icons/glyphs/grip.d.ts +2 -0
  265. package/dist/icons/glyphs/hammer.d.ts +2 -0
  266. package/dist/icons/glyphs/hand-coins.d.ts +2 -0
  267. package/dist/icons/glyphs/hand-fist.d.ts +2 -0
  268. package/dist/icons/glyphs/hand-grab.d.ts +2 -0
  269. package/dist/icons/glyphs/hand-heart.d.ts +2 -0
  270. package/dist/icons/glyphs/hand-helping.d.ts +2 -0
  271. package/dist/icons/glyphs/hand-metal.d.ts +2 -0
  272. package/dist/icons/glyphs/hand.d.ts +2 -0
  273. package/dist/icons/glyphs/hard-drive-download.d.ts +2 -0
  274. package/dist/icons/glyphs/hard-drive-upload.d.ts +2 -0
  275. package/dist/icons/glyphs/hard-drive.d.ts +2 -0
  276. package/dist/icons/glyphs/hat-glasses.d.ts +2 -0
  277. package/dist/icons/glyphs/heart-handshake.d.ts +2 -0
  278. package/dist/icons/glyphs/heart-pulse.d.ts +2 -0
  279. package/dist/icons/glyphs/heart.d.ts +2 -0
  280. package/dist/icons/glyphs/history.d.ts +2 -0
  281. package/dist/icons/glyphs/hourglass.d.ts +2 -0
  282. package/dist/icons/glyphs/house.d.ts +2 -0
  283. package/dist/icons/glyphs/id-card.d.ts +2 -0
  284. package/dist/icons/glyphs/image.d.ts +2 -0
  285. package/dist/icons/glyphs/inbox.d.ts +2 -0
  286. package/dist/icons/glyphs/indian-rupee.d.ts +2 -0
  287. package/dist/icons/glyphs/info.d.ts +2 -0
  288. package/dist/icons/glyphs/instagram.d.ts +2 -0
  289. package/dist/icons/glyphs/italic.d.ts +2 -0
  290. package/dist/icons/glyphs/japanese-yen.d.ts +2 -0
  291. package/dist/icons/glyphs/key-round.d.ts +2 -0
  292. package/dist/icons/glyphs/key-square.d.ts +2 -0
  293. package/dist/icons/glyphs/key.d.ts +2 -0
  294. package/dist/icons/glyphs/keyboard.d.ts +2 -0
  295. package/dist/icons/glyphs/languages.d.ts +2 -0
  296. package/dist/icons/glyphs/laptop-minimal-check.d.ts +2 -0
  297. package/dist/icons/glyphs/laugh.d.ts +2 -0
  298. package/dist/icons/glyphs/layers.d.ts +2 -0
  299. package/dist/icons/glyphs/layout-dashboard.d.ts +2 -0
  300. package/dist/icons/glyphs/layout-grid.d.ts +2 -0
  301. package/dist/icons/glyphs/layout-panel-top.d.ts +2 -0
  302. package/dist/icons/glyphs/leaf.d.ts +2 -0
  303. package/dist/icons/glyphs/leafy-green.d.ts +2 -0
  304. package/dist/icons/glyphs/link-2.d.ts +2 -0
  305. package/dist/icons/glyphs/link.d.ts +2 -0
  306. package/dist/icons/glyphs/linkedin.d.ts +2 -0
  307. package/dist/icons/glyphs/list-filter.d.ts +2 -0
  308. package/dist/icons/glyphs/list-todo.d.ts +2 -0
  309. package/dist/icons/glyphs/list.d.ts +2 -0
  310. package/dist/icons/glyphs/loader-circle.d.ts +2 -0
  311. package/dist/icons/glyphs/loader-pinwheel.d.ts +2 -0
  312. package/dist/icons/glyphs/loader.d.ts +2 -0
  313. package/dist/icons/glyphs/lock-keyhole-open.d.ts +2 -0
  314. package/dist/icons/glyphs/lock-keyhole.d.ts +2 -0
  315. package/dist/icons/glyphs/lock-open.d.ts +2 -0
  316. package/dist/icons/glyphs/lock.d.ts +2 -0
  317. package/dist/icons/glyphs/log-in.d.ts +2 -0
  318. package/dist/icons/glyphs/log-out.d.ts +2 -0
  319. package/dist/icons/glyphs/mail-check.d.ts +2 -0
  320. package/dist/icons/glyphs/mail.d.ts +2 -0
  321. package/dist/icons/glyphs/mailbox.d.ts +2 -0
  322. package/dist/icons/glyphs/map-pin-check-inside.d.ts +2 -0
  323. package/dist/icons/glyphs/map-pin-check.d.ts +2 -0
  324. package/dist/icons/glyphs/map-pin-house.d.ts +2 -0
  325. package/dist/icons/glyphs/map-pin-minus-inside.d.ts +2 -0
  326. package/dist/icons/glyphs/map-pin-minus.d.ts +2 -0
  327. package/dist/icons/glyphs/map-pin-off.d.ts +2 -0
  328. package/dist/icons/glyphs/map-pin-plus-inside.d.ts +2 -0
  329. package/dist/icons/glyphs/map-pin-plus.d.ts +2 -0
  330. package/dist/icons/glyphs/map-pin-x-inside.d.ts +2 -0
  331. package/dist/icons/glyphs/map-pin.d.ts +2 -0
  332. package/dist/icons/glyphs/maximize-2.d.ts +2 -0
  333. package/dist/icons/glyphs/maximize.d.ts +2 -0
  334. package/dist/icons/glyphs/meh.d.ts +2 -0
  335. package/dist/icons/glyphs/menu.d.ts +2 -0
  336. package/dist/icons/glyphs/message-circle-check.d.ts +2 -0
  337. package/dist/icons/glyphs/message-circle-dashed.d.ts +2 -0
  338. package/dist/icons/glyphs/message-circle-more.d.ts +2 -0
  339. package/dist/icons/glyphs/message-circle-plus.d.ts +2 -0
  340. package/dist/icons/glyphs/message-circle-x.d.ts +2 -0
  341. package/dist/icons/glyphs/message-circle.d.ts +2 -0
  342. package/dist/icons/glyphs/message-square-check.d.ts +2 -0
  343. package/dist/icons/glyphs/message-square-dashed.d.ts +2 -0
  344. package/dist/icons/glyphs/message-square-more.d.ts +2 -0
  345. package/dist/icons/glyphs/message-square-plus.d.ts +2 -0
  346. package/dist/icons/glyphs/message-square-x.d.ts +2 -0
  347. package/dist/icons/glyphs/message-square.d.ts +2 -0
  348. package/dist/icons/glyphs/mic-off.d.ts +2 -0
  349. package/dist/icons/glyphs/mic.d.ts +2 -0
  350. package/dist/icons/glyphs/minimize.d.ts +2 -0
  351. package/dist/icons/glyphs/minus.d.ts +2 -0
  352. package/dist/icons/glyphs/monitor-check.d.ts +2 -0
  353. package/dist/icons/glyphs/monitor-cog.d.ts +2 -0
  354. package/dist/icons/glyphs/monitor.d.ts +2 -0
  355. package/dist/icons/glyphs/moon.d.ts +2 -0
  356. package/dist/icons/glyphs/mouse-pointer-click.d.ts +2 -0
  357. package/dist/icons/glyphs/nfc.d.ts +2 -0
  358. package/dist/icons/glyphs/package.d.ts +2 -0
  359. package/dist/icons/glyphs/palette.d.ts +2 -0
  360. package/dist/icons/glyphs/panel-left-close.d.ts +2 -0
  361. package/dist/icons/glyphs/panel-left-open.d.ts +2 -0
  362. package/dist/icons/glyphs/panel-right-open.d.ts +2 -0
  363. package/dist/icons/glyphs/paperclip.d.ts +2 -0
  364. package/dist/icons/glyphs/party-popper.d.ts +2 -0
  365. package/dist/icons/glyphs/pause.d.ts +2 -0
  366. package/dist/icons/glyphs/pen-tool.d.ts +2 -0
  367. package/dist/icons/glyphs/philippine-peso.d.ts +2 -0
  368. package/dist/icons/glyphs/phone-call.d.ts +2 -0
  369. package/dist/icons/glyphs/phone-forwarded.d.ts +2 -0
  370. package/dist/icons/glyphs/phone-incoming.d.ts +2 -0
  371. package/dist/icons/glyphs/phone-missed.d.ts +2 -0
  372. package/dist/icons/glyphs/phone-off.d.ts +2 -0
  373. package/dist/icons/glyphs/phone.d.ts +2 -0
  374. package/dist/icons/glyphs/pickaxe.d.ts +2 -0
  375. package/dist/icons/glyphs/pipette.d.ts +2 -0
  376. package/dist/icons/glyphs/plane-landing.d.ts +2 -0
  377. package/dist/icons/glyphs/plane-takeoff.d.ts +2 -0
  378. package/dist/icons/glyphs/plane.d.ts +2 -0
  379. package/dist/icons/glyphs/play.d.ts +2 -0
  380. package/dist/icons/glyphs/plug-zap.d.ts +2 -0
  381. package/dist/icons/glyphs/plus.d.ts +2 -0
  382. package/dist/icons/glyphs/pound-sterling.d.ts +2 -0
  383. package/dist/icons/glyphs/projector.d.ts +2 -0
  384. package/dist/icons/glyphs/rabbit.d.ts +2 -0
  385. package/dist/icons/glyphs/radio-tower.d.ts +2 -0
  386. package/dist/icons/glyphs/radio.d.ts +2 -0
  387. package/dist/icons/glyphs/receipt-cent.d.ts +2 -0
  388. package/dist/icons/glyphs/receipt-euro.d.ts +2 -0
  389. package/dist/icons/glyphs/receipt-indian-rupee.d.ts +2 -0
  390. package/dist/icons/glyphs/receipt-japanese-yen.d.ts +2 -0
  391. package/dist/icons/glyphs/receipt-pound-sterling.d.ts +2 -0
  392. package/dist/icons/glyphs/receipt-russian-ruble.d.ts +2 -0
  393. package/dist/icons/glyphs/receipt-swiss-franc.d.ts +2 -0
  394. package/dist/icons/glyphs/receipt-text.d.ts +2 -0
  395. package/dist/icons/glyphs/receipt-turkish-lira.d.ts +2 -0
  396. package/dist/icons/glyphs/receipt.d.ts +2 -0
  397. package/dist/icons/glyphs/redo-dot.d.ts +2 -0
  398. package/dist/icons/glyphs/redo.d.ts +2 -0
  399. package/dist/icons/glyphs/refresh-ccw-dot.d.ts +2 -0
  400. package/dist/icons/glyphs/refresh-ccw.d.ts +2 -0
  401. package/dist/icons/glyphs/refresh-cw-off.d.ts +2 -0
  402. package/dist/icons/glyphs/refresh-cw.d.ts +2 -0
  403. package/dist/icons/glyphs/rocket.d.ts +2 -0
  404. package/dist/icons/glyphs/rocking-chair.d.ts +2 -0
  405. package/dist/icons/glyphs/roller-coaster.d.ts +2 -0
  406. package/dist/icons/glyphs/rotate-ccw.d.ts +2 -0
  407. package/dist/icons/glyphs/rotate-cw.d.ts +2 -0
  408. package/dist/icons/glyphs/route.d.ts +2 -0
  409. package/dist/icons/glyphs/router.d.ts +2 -0
  410. package/dist/icons/glyphs/russian-ruble.d.ts +2 -0
  411. package/dist/icons/glyphs/satellite-dish.d.ts +2 -0
  412. package/dist/icons/glyphs/saudi-riyal.d.ts +2 -0
  413. package/dist/icons/glyphs/scan-face.d.ts +2 -0
  414. package/dist/icons/glyphs/scan-text.d.ts +2 -0
  415. package/dist/icons/glyphs/search.d.ts +2 -0
  416. package/dist/icons/glyphs/send.d.ts +2 -0
  417. package/dist/icons/glyphs/server-cog.d.ts +2 -0
  418. package/dist/icons/glyphs/server-crash.d.ts +2 -0
  419. package/dist/icons/glyphs/server.d.ts +2 -0
  420. package/dist/icons/glyphs/settings.d.ts +2 -0
  421. package/dist/icons/glyphs/shield-check.d.ts +2 -0
  422. package/dist/icons/glyphs/ship-wheel.d.ts +2 -0
  423. package/dist/icons/glyphs/ship.d.ts +2 -0
  424. package/dist/icons/glyphs/shopping-cart.d.ts +2 -0
  425. package/dist/icons/glyphs/shower-head.d.ts +2 -0
  426. package/dist/icons/glyphs/shredder.d.ts +2 -0
  427. package/dist/icons/glyphs/shrink.d.ts +2 -0
  428. package/dist/icons/glyphs/sliders-horizontal.d.ts +2 -0
  429. package/dist/icons/glyphs/smartphone-charging.d.ts +2 -0
  430. package/dist/icons/glyphs/smartphone-nfc.d.ts +2 -0
  431. package/dist/icons/glyphs/smartphone.d.ts +2 -0
  432. package/dist/icons/glyphs/smile-plus.d.ts +2 -0
  433. package/dist/icons/glyphs/smile.d.ts +2 -0
  434. package/dist/icons/glyphs/snowflake.d.ts +2 -0
  435. package/dist/icons/glyphs/soup.d.ts +2 -0
  436. package/dist/icons/glyphs/sparkles.d.ts +2 -0
  437. package/dist/icons/glyphs/spray-can.d.ts +2 -0
  438. package/dist/icons/glyphs/square-activity.d.ts +2 -0
  439. package/dist/icons/glyphs/square-arrow-down.d.ts +2 -0
  440. package/dist/icons/glyphs/square-arrow-left.d.ts +2 -0
  441. package/dist/icons/glyphs/square-arrow-right.d.ts +2 -0
  442. package/dist/icons/glyphs/square-arrow-up.d.ts +2 -0
  443. package/dist/icons/glyphs/square-chevron-down.d.ts +2 -0
  444. package/dist/icons/glyphs/square-chevron-left.d.ts +2 -0
  445. package/dist/icons/glyphs/square-chevron-right.d.ts +2 -0
  446. package/dist/icons/glyphs/square-chevron-up.d.ts +2 -0
  447. package/dist/icons/glyphs/square-pen.d.ts +2 -0
  448. package/dist/icons/glyphs/square-stack.d.ts +2 -0
  449. package/dist/icons/glyphs/stamp.d.ts +2 -0
  450. package/dist/icons/glyphs/stethoscope.d.ts +2 -0
  451. package/dist/icons/glyphs/sun-dim.d.ts +2 -0
  452. package/dist/icons/glyphs/sun-medium.d.ts +2 -0
  453. package/dist/icons/glyphs/sun-moon.d.ts +2 -0
  454. package/dist/icons/glyphs/sun.d.ts +2 -0
  455. package/dist/icons/glyphs/sunset.d.ts +2 -0
  456. package/dist/icons/glyphs/swiss-franc.d.ts +2 -0
  457. package/dist/icons/glyphs/switch-camera.d.ts +2 -0
  458. package/dist/icons/glyphs/syringe.d.ts +2 -0
  459. package/dist/icons/glyphs/tablet.d.ts +2 -0
  460. package/dist/icons/glyphs/telescope.d.ts +2 -0
  461. package/dist/icons/glyphs/terminal.d.ts +2 -0
  462. package/dist/icons/glyphs/text-align-center.d.ts +2 -0
  463. package/dist/icons/glyphs/text-align-end.d.ts +2 -0
  464. package/dist/icons/glyphs/text-align-start.d.ts +2 -0
  465. package/dist/icons/glyphs/thermometer.d.ts +2 -0
  466. package/dist/icons/glyphs/thumbs-down.d.ts +2 -0
  467. package/dist/icons/glyphs/thumbs-up.d.ts +2 -0
  468. package/dist/icons/glyphs/ticket.d.ts +2 -0
  469. package/dist/icons/glyphs/timer.d.ts +2 -0
  470. package/dist/icons/glyphs/tornado.d.ts +2 -0
  471. package/dist/icons/glyphs/train-track.d.ts +2 -0
  472. package/dist/icons/glyphs/trash-2.d.ts +2 -0
  473. package/dist/icons/glyphs/tree-deciduous.d.ts +2 -0
  474. package/dist/icons/glyphs/tree-pine.d.ts +2 -0
  475. package/dist/icons/glyphs/trending-down.d.ts +2 -0
  476. package/dist/icons/glyphs/trending-up-down.d.ts +2 -0
  477. package/dist/icons/glyphs/trending-up.d.ts +2 -0
  478. package/dist/icons/glyphs/triangle-alert.d.ts +2 -0
  479. package/dist/icons/glyphs/truck.d.ts +2 -0
  480. package/dist/icons/glyphs/turkish-lira.d.ts +2 -0
  481. package/dist/icons/glyphs/twitch.d.ts +2 -0
  482. package/dist/icons/glyphs/twitter.d.ts +2 -0
  483. package/dist/icons/glyphs/underline.d.ts +2 -0
  484. package/dist/icons/glyphs/undo-dot.d.ts +2 -0
  485. package/dist/icons/glyphs/undo.d.ts +2 -0
  486. package/dist/icons/glyphs/unplug.d.ts +2 -0
  487. package/dist/icons/glyphs/upload.d.ts +2 -0
  488. package/dist/icons/glyphs/user-check.d.ts +2 -0
  489. package/dist/icons/glyphs/user-plus.d.ts +2 -0
  490. package/dist/icons/glyphs/user-round-check.d.ts +2 -0
  491. package/dist/icons/glyphs/user-round-cog.d.ts +2 -0
  492. package/dist/icons/glyphs/user-round-plus.d.ts +2 -0
  493. package/dist/icons/glyphs/user-round.d.ts +2 -0
  494. package/dist/icons/glyphs/user.d.ts +2 -0
  495. package/dist/icons/glyphs/users-round.d.ts +2 -0
  496. package/dist/icons/glyphs/users.d.ts +2 -0
  497. package/dist/icons/glyphs/vibrate.d.ts +2 -0
  498. package/dist/icons/glyphs/volume.d.ts +2 -0
  499. package/dist/icons/glyphs/wallet.d.ts +2 -0
  500. package/dist/icons/glyphs/washing-machine.d.ts +2 -0
  501. package/dist/icons/glyphs/waves-arrow-down.d.ts +2 -0
  502. package/dist/icons/glyphs/waves-arrow-up.d.ts +2 -0
  503. package/dist/icons/glyphs/waves-ladder.d.ts +2 -0
  504. package/dist/icons/glyphs/waves.d.ts +2 -0
  505. package/dist/icons/glyphs/waypoints.d.ts +2 -0
  506. package/dist/icons/glyphs/webhook.d.ts +2 -0
  507. package/dist/icons/glyphs/wifi-cog.d.ts +2 -0
  508. package/dist/icons/glyphs/wifi-low.d.ts +2 -0
  509. package/dist/icons/glyphs/wifi-pen.d.ts +2 -0
  510. package/dist/icons/glyphs/wifi-sync.d.ts +2 -0
  511. package/dist/icons/glyphs/wifi.d.ts +2 -0
  512. package/dist/icons/glyphs/wind-arrow-down.d.ts +2 -0
  513. package/dist/icons/glyphs/wind.d.ts +2 -0
  514. package/dist/icons/glyphs/workflow.d.ts +2 -0
  515. package/dist/icons/glyphs/wrench.d.ts +2 -0
  516. package/dist/icons/glyphs/x.d.ts +2 -0
  517. package/dist/icons/glyphs/youtube.d.ts +2 -0
  518. package/dist/icons/glyphs/zap-off.d.ts +2 -0
  519. package/dist/icons/glyphs/zap.d.ts +2 -0
  520. package/dist/icons/iconPlay.d.ts +2 -0
  521. package/dist/icons/registry.d.ts +81 -78
  522. package/dist/icons.js +996 -0
  523. package/dist/index.css +1257 -399
  524. package/dist/index.d.ts +1 -0
  525. package/dist/index.js +13 -5
  526. package/dist/internal/CheckMark.d.ts +12 -0
  527. package/dist/internal/ChoiceField.d.ts +1 -1
  528. package/dist/internal/FieldFrame.d.ts +17 -0
  529. package/dist/internal/MorphText.d.ts +12 -0
  530. package/dist/internal/RollingNumber.d.ts +14 -0
  531. package/dist/internal/surfaceDepth.d.ts +25 -0
  532. package/dist/internal/swatch.d.ts +4 -1
  533. package/dist/layout/app-shell/AppShell.d.ts +2 -2
  534. package/dist/motion/celebrate.d.ts +18 -0
  535. package/dist/tokens/layers.d.ts +37 -0
  536. package/dist/tokens/naming.d.ts +1 -1
  537. package/dist/tokens/primitives.d.ts +1 -0
  538. package/dist/tokens/semantic.d.ts +67 -56
  539. package/dist/tokens/themes/dark.d.ts +7 -14
  540. package/package.json +11 -4
  541. package/src/components/accordion/COMPONENT.md +4 -4
  542. package/src/components/avatar/COMPONENT.md +1 -1
  543. package/src/components/button/COMPONENT.md +30 -7
  544. package/src/components/button/examples/download.tsx +45 -0
  545. package/src/components/button/examples/hold-to-confirm.tsx +23 -0
  546. package/src/components/button/examples/in-form.tsx +15 -3
  547. package/src/components/button/examples/label-morph.tsx +38 -0
  548. package/src/components/button/examples/variants.tsx +1 -0
  549. package/src/components/card/COMPONENT.md +4 -2
  550. package/src/components/card/examples/narrow.tsx +2 -2
  551. package/src/components/card/examples/panel-chart.tsx +1 -1
  552. package/src/components/card/examples/variants.tsx +1 -1
  553. package/src/components/checkbox/COMPONENT.md +1 -1
  554. package/src/components/checkbox/examples/examples.module.css +1 -1
  555. package/src/components/code-block/COMPONENT.md +6 -6
  556. package/src/components/code-block/examples/overview.tsx +1 -1
  557. package/src/components/code-block/examples/variants.tsx +1 -1
  558. package/src/components/color-picker/COMPONENT.md +3 -3
  559. package/src/components/color-picker/examples/in-form.tsx +13 -5
  560. package/src/components/color-picker/examples/validation.tsx +10 -4
  561. package/src/components/color-swatches/COMPONENT.md +6 -6
  562. package/src/components/color-swatches/examples/in-form.tsx +11 -5
  563. package/src/components/command-menu/COMPONENT.md +1 -1
  564. package/src/components/crossfade/examples/overview.tsx +3 -3
  565. package/src/components/data-table/COMPONENT.md +5 -4
  566. package/src/components/datepicker/COMPONENT.md +3 -3
  567. package/src/components/datepicker/examples/in-form.tsx +30 -9
  568. package/src/components/datepicker/examples/validation.tsx +20 -10
  569. package/src/components/digit-input/COMPONENT.md +8 -6
  570. package/src/components/digit-input/examples/in-form.tsx +22 -4
  571. package/src/components/digit-input/examples/on-complete.tsx +7 -6
  572. package/src/components/digit-input/examples/validation.tsx +12 -5
  573. package/src/components/dnd/COMPONENT.md +1 -1
  574. package/src/components/dnd/examples/examples.module.css +4 -4
  575. package/src/components/drawer/COMPONENT.md +1 -1
  576. package/src/components/drawer/examples/in-form.tsx +7 -2
  577. package/src/components/dropdown/COMPONENT.md +1 -1
  578. package/src/components/dropdown/examples/examples.module.css +1 -1
  579. package/src/components/empty-page/examples/examples.module.css +1 -1
  580. package/src/components/example-frame/COMPONENT.md +1 -1
  581. package/src/components/file-upload/COMPONENT.md +3 -3
  582. package/src/components/file-upload/examples/in-form.tsx +28 -4
  583. package/src/components/file-upload/examples/validation.tsx +37 -6
  584. package/src/components/input/COMPONENT.md +13 -4
  585. package/src/components/input/examples/in-form.tsx +42 -7
  586. package/src/components/input/examples/password-strength.tsx +12 -0
  587. package/src/components/input/examples/validation.tsx +38 -13
  588. package/src/components/kanban/COMPONENT.md +4 -4
  589. package/src/components/login-form/COMPONENT.md +4 -4
  590. package/src/components/login-form/examples/register.tsx +2 -2
  591. package/src/components/login-form/examples/reset-password.tsx +2 -2
  592. package/src/components/modal/COMPONENT.md +3 -3
  593. package/src/components/modal/examples/examples.module.css +2 -2
  594. package/src/components/modal/examples/in-form.tsx +7 -2
  595. package/src/components/native-select/COMPONENT.md +3 -3
  596. package/src/components/native-select/examples/examples.module.css +2 -0
  597. package/src/components/native-select/examples/in-form.tsx +18 -3
  598. package/src/components/native-select/examples/validation.tsx +8 -3
  599. package/src/components/page-content/examples/examples.module.css +1 -1
  600. package/src/components/popover/COMPONENT.md +2 -2
  601. package/src/components/popover/examples/in-form.tsx +27 -5
  602. package/src/components/progress-bar/COMPONENT.md +5 -1
  603. package/src/components/progress-bar/examples/examples.module.css +7 -0
  604. package/src/components/progress-bar/examples/milestone.tsx +43 -0
  605. package/src/components/progress-bar/examples/steps.tsx +35 -0
  606. package/src/components/radio/COMPONENT.md +1 -1
  607. package/src/components/select/COMPONENT.md +3 -3
  608. package/src/components/select/examples/examples.module.css +1 -0
  609. package/src/components/select/examples/in-form.tsx +25 -3
  610. package/src/components/select/examples/validation.tsx +8 -3
  611. package/src/components/skeleton/examples/with-crossfade.tsx +3 -3
  612. package/src/components/slider/COMPONENT.md +1 -1
  613. package/src/components/sparkline/COMPONENT.md +98 -0
  614. package/src/components/sparkline/examples/examples.module.css +13 -0
  615. package/src/components/sparkline/examples/overview.tsx +27 -0
  616. package/src/components/sparkline/examples/period.tsx +46 -0
  617. package/src/components/switch/COMPONENT.md +1 -1
  618. package/src/components/tabs/COMPONENT.md +15 -16
  619. package/src/components/tabs/examples/examples.module.css +14 -0
  620. package/src/components/tabs/examples/orientation.tsx +87 -33
  621. package/src/components/tag-select/COMPONENT.md +3 -3
  622. package/src/components/tag-select/examples/examples.module.css +1 -0
  623. package/src/components/tag-select/examples/in-form.tsx +19 -2
  624. package/src/components/tag-select/examples/validation.tsx +7 -2
  625. package/src/components/textarea/COMPONENT.md +3 -3
  626. package/src/components/textarea/examples/in-form.tsx +20 -8
  627. package/src/components/textarea/examples/validation.tsx +24 -8
  628. package/src/components/tooltip/COMPONENT.md +8 -6
  629. package/src/components/tooltip/examples/examples.module.css +2 -2
  630. package/src/layout/app-header/COMPONENT.md +1 -1
  631. package/src/layout/app-header/examples/examples.module.css +4 -4
  632. package/src/layout/app-shell/COMPONENT.md +8 -8
  633. package/src/layout/app-shell/examples/examples.module.css +3 -3
  634. package/src/layout/bottom-nav/COMPONENT.md +1 -1
  635. package/src/layout/bottom-nav/examples/examples.module.css +1 -1
  636. package/src/layout/sidebar/COMPONENT.md +4 -4
  637. package/src/layout/sidebar/examples/examples.module.css +5 -5
  638. package/src/styles/globals.css +125 -2
  639. package/src/styles/theme-dark.css +37 -13
  640. package/src/styles/theme-light.css +61 -16
  641. package/src/styles/tokens.css +1 -0
@@ -8,3 +8,10 @@
8
8
  width: min(100%, var(--prime-modal-width-s));
9
9
  min-width: 0;
10
10
  }
11
+
12
+ /* Buttons under a bar that drive it. */
13
+ .actions {
14
+ display: flex;
15
+ flex-wrap: wrap;
16
+ gap: var(--prime-space-2);
17
+ }
@@ -0,0 +1,43 @@
1
+ /** A rare milestone: the last invoice of the quarter fills the bar, the tone turns success and a short confetti burst marks it — `value`, `tone`, `celebrate()`. */
2
+ import { Button, celebrate, ProgressBar } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ import styles from "./examples.module.css";
6
+
7
+ const INVOICES = 12;
8
+
9
+ export default function ProgressBarMilestoneExample() {
10
+ const [paid, setPaid] = React.useState(INVOICES - 1);
11
+ const closed = paid === INVOICES;
12
+
13
+ return (
14
+ <div className={styles.column}>
15
+ <ProgressBar
16
+ value={paid}
17
+ max={INVOICES}
18
+ tone={closed ? "success" : "accent"}
19
+ label={
20
+ closed
21
+ ? "III квартал закрыт: все счета оплачены"
22
+ : `Оплачено счетов: ${paid} из ${INVOICES}`
23
+ }
24
+ />
25
+ <div className={styles.actions}>
26
+ <Button.Root
27
+ variant={closed ? "soft" : "solid"}
28
+ tone={closed ? "neutral" : "accent"}
29
+ onClick={(event) => {
30
+ if (closed) {
31
+ setPaid(INVOICES - 1);
32
+ return;
33
+ }
34
+ setPaid(INVOICES);
35
+ celebrate({ origin: event.currentTarget });
36
+ }}
37
+ >
38
+ {closed ? "Вернуть последний счёт" : "Отметить оплату ООО «Вектор»"}
39
+ </Button.Root>
40
+ </div>
41
+ </div>
42
+ );
43
+ }
@@ -0,0 +1,35 @@
1
+ /** The scale as whole cells that fill one after another: 2 of 5 onboarding steps, forward and back — `steps`, `max`. */
2
+ import { Button, ProgressBar } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ import styles from "./examples.module.css";
6
+
7
+ const TOTAL = 5;
8
+
9
+ export default function ProgressBarStepsExample() {
10
+ const [done, setDone] = React.useState(2);
11
+
12
+ return (
13
+ <div className={styles.column}>
14
+ <ProgressBar
15
+ steps
16
+ value={done}
17
+ max={TOTAL}
18
+ label={`Настройка компании: ${done} из ${TOTAL}`}
19
+ />
20
+ <div className={styles.actions}>
21
+ <Button.Root
22
+ variant="soft"
23
+ tone="neutral"
24
+ disabled={done === 0}
25
+ onClick={() => setDone(done - 1)}
26
+ >
27
+ Назад
28
+ </Button.Root>
29
+ <Button.Root disabled={done === TOTAL} onClick={() => setDone(done + 1)}>
30
+ Следующий шаг
31
+ </Button.Root>
32
+ </div>
33
+ </div>
34
+ );
35
+ }
@@ -109,7 +109,7 @@ No `variant` / `tone` / `color`.
109
109
  |---|---|---|
110
110
  | unselected | group `value` ≠ option `value` | `data-state="unchecked"` on the option; circle `fill-strong`, hover `fill-strong-hover` |
111
111
  | selected | group `value` = option `value` | `data-state="checked"`; accent circle with a thumb-coloured dot that grows in |
112
- | invalid | `invalid` or a non-empty `error` on the group | `data-invalid="true"`, `aria-invalid` on the group and the inputs; danger ring on unselected circles |
112
+ | invalid | `invalid` or a non-empty `error` on the group | `data-invalid="true"`, `aria-invalid` on the group and the inputs; danger ring on unselected circles; the control shakes once when an error arrives (`data-shake` on the frame) |
113
113
  | disabled | group or option `disabled` | `data-disabled="true"`, native `disabled` on every radio; `fill-muted` circle, `cursor: not-allowed` |
114
114
  | pressed | pointer press | the circle scales to the compact press scale |
115
115
  | focus-visible | keyboard | outer focus ring around the circle |
@@ -159,7 +159,7 @@ No `variant` or `tone`. The trigger is the field look (fill, inset control borde
159
159
  |---|---|---|
160
160
  | empty | no value | `data-placeholder="true"` on Value, placeholder color |
161
161
  | open | `open` / click / arrows | trigger `data-state="open"`, `aria-expanded`; panel `data-state`, `data-side`; chevron turns 180° |
162
- | invalid | `invalid` or `error` | `data-invalid="true"`, `aria-invalid` on the trigger; error text below |
162
+ | invalid | `invalid` or `error` | `data-invalid="true"`, `aria-invalid` on the trigger; error text below; the control shakes once when an error arrives (`data-shake` on the frame) |
163
163
  | disabled | `disabled` | native `disabled`, `data-disabled="true"` |
164
164
  | loading | `loading` | `data-loading="true"`, `aria-busy`; status row in the list |
165
165
  | searching | typing in the search | panel `data-searching="true"`; groups without matches and separators hide; the match in an option's title, description and plain text is a `<mark>` in `accent-text` (not in the trigger) |
@@ -209,7 +209,7 @@ No `variant` or `tone`. The trigger is the field look (fill, inset control borde
209
209
  | [overview.tsx](examples/overview.tsx) | A labelled field with a placeholder; picking an option closes the list and shows its label — `label`, `placeholder`. |
210
210
  | [sizes.tsx](examples/sizes.tsx) | Every size tier; the label, the list rows and the hint take the tier of the field — `size`. |
211
211
  | [states.tsx](examples/states.tsx) | A default field next to a disabled, a loading, an invalid one and a list with nothing in it — `disabled`, `loading`, `invalid`, `labels`. |
212
- | [validation.tsx](examples/validation.tsx) | Required and optional markers, a hint, and an error that replaces the hint in the same row — `required`, `optional`, `hint`, `error`. |
212
+ | [validation.tsx](examples/validation.tsx) | Live validation: unassigning the owner shakes the field and drops the error in, picking someone clears it; required and optional markers and a hint — `required`, `optional`, `hint`, `error`. |
213
213
  | [with-icon.tsx](examples/with-icon.tsx) | A leading icon in the trigger and an icon before every option label — `Select.TriggerIcon`, `Select.ItemIcon`. |
214
214
  | [multiple.tsx](examples/multiple.tsx) | Several values: checkboxes in the list, the list stays open on a pick, labels joined in the trigger — `multiple`. |
215
215
  | [searchable.tsx](examples/searchable.tsx) | A long list with a search field: options match their label and keywords, groups and the separator hide while searching — `searchable`, `keywords`, `Select.Group`. |
@@ -217,7 +217,7 @@ No `variant` or `tone`. The trigger is the field look (fill, inset control borde
217
217
  | [rich-options.tsx](examples/rich-options.tsx) | Options with a picture, a second line and a price; the trigger draws the picked option with the same parts — `renderValue`, `Select.ItemText`, `Select.ItemDescription`, `Select.ItemMeta`. |
218
218
  | [controlled.tsx](examples/controlled.tsx) | The parent owns the value: the plan drives the price under the field and a button resets it — `value`, `onValueChange`. |
219
219
  | [controlled-open.tsx](examples/controlled-open.tsx) | The parent owns the list: a button opens it from code, a pick or Escape closes it — `open`, `onOpenChange`. |
220
- | [in-form.tsx](examples/in-form.tsx) | Regional settings form: the required country is checked on submit, the error replaces the hint — `required`, `error`, `hint`. |
220
+ | [in-form.tsx](examples/in-form.tsx) | Regional settings form: the required country is checked on submit, the error shakes the field and leaves once a country is picked, a calm note confirms the save — `required`, `error`, `hint`. |
221
221
 
222
222
  ## Mistakes
223
223
  - A Label + `aria-labelledby` next to the field → pass `label`, `hint`, `error` to `Select.Root`.
@@ -23,6 +23,7 @@
23
23
 
24
24
  .formActions {
25
25
  display: flex;
26
+ align-items: center;
26
27
  justify-content: flex-end;
27
28
  gap: var(--prime-space-2);
28
29
  }
@@ -1,4 +1,4 @@
1
- /** Regional settings form: the required country is checked on submit, the error replaces the hint — `required`, `error`, `hint`. */
1
+ /** Regional settings form: the required country is checked on submit, the error shakes the field and leaves once a country is picked, a calm note confirms the save — `required`, `error`, `hint`. */
2
2
  import { Button, Select, Typography } from "prime-ui-kit";
3
3
  import * as React from "react";
4
4
 
@@ -7,10 +7,12 @@ import styles from "./examples.module.css";
7
7
  export default function SelectInFormExample() {
8
8
  const [country, setCountry] = React.useState("");
9
9
  const [error, setError] = React.useState<string>();
10
+ const [saved, setSaved] = React.useState(false);
10
11
 
11
12
  const submit = (event: React.FormEvent<HTMLFormElement>) => {
12
13
  event.preventDefault();
13
14
  setError(country ? undefined : "Выберите страну");
15
+ setSaved(Boolean(country));
14
16
  };
15
17
 
16
18
  return (
@@ -33,6 +35,7 @@ export default function SelectInFormExample() {
33
35
  onValueChange={(value) => {
34
36
  setCountry(value);
35
37
  setError(undefined);
38
+ setSaved(false);
36
39
  }}
37
40
  >
38
41
  <Select.Trigger>
@@ -44,7 +47,12 @@ export default function SelectInFormExample() {
44
47
  <Select.Item value="am">Армения</Select.Item>
45
48
  </Select.Content>
46
49
  </Select.Root>
47
- <Select.Root label="Часовой пояс" hint="Время в отчётах и уведомлениях" defaultValue="msk">
50
+ <Select.Root
51
+ label="Часовой пояс"
52
+ hint="Время в отчётах и уведомлениях"
53
+ defaultValue="msk"
54
+ onValueChange={() => setSaved(false)}
55
+ >
48
56
  <Select.Trigger>
49
57
  <Select.Value />
50
58
  </Select.Trigger>
@@ -56,7 +64,21 @@ export default function SelectInFormExample() {
56
64
  </Select.Root>
57
65
  </div>
58
66
  <div className={styles.formActions}>
59
- <Button.Root variant="ghost" tone="neutral" type="reset">
67
+ {saved ? (
68
+ <Typography as="p" variant="body-s" tone="secondary">
69
+ Настройки сохранены
70
+ </Typography>
71
+ ) : null}
72
+ <Button.Root
73
+ variant="ghost"
74
+ tone="neutral"
75
+ type="reset"
76
+ onClick={() => {
77
+ setCountry("");
78
+ setError(undefined);
79
+ setSaved(false);
80
+ }}
81
+ >
60
82
  Отменить
61
83
  </Button.Root>
62
84
  <Button.Root type="submit">Сохранить</Button.Root>
@@ -1,7 +1,10 @@
1
- /** Required and optional markers, a hint, and an error that replaces the hint in the same row — `required`, `optional`, `hint`, `error`. */
1
+ /** Live validation: unassigning the owner shakes the field and drops the error in, picking someone clears it; required and optional markers and a hint — `required`, `optional`, `hint`, `error`. */
2
2
  import { Select } from "prime-ui-kit";
3
+ import * as React from "react";
3
4
 
4
5
  export default function SelectValidationExample() {
6
+ const [owner, setOwner] = React.useState("anna");
7
+
5
8
  return (
6
9
  <>
7
10
  <Select.Root label="Страна" required hint="Определяет валюту счетов" defaultValue="ru">
@@ -16,13 +19,15 @@ export default function SelectValidationExample() {
16
19
  <Select.Root
17
20
  label="Ответственный"
18
21
  required
19
- error="Назначьте ответственного"
20
- placeholder="Не выбран"
22
+ error={owner === "none" ? "Назначьте ответственного" : undefined}
23
+ value={owner}
24
+ onValueChange={setOwner}
21
25
  >
22
26
  <Select.Trigger>
23
27
  <Select.Value />
24
28
  </Select.Trigger>
25
29
  <Select.Content>
30
+ <Select.Item value="none">Не назначен</Select.Item>
26
31
  <Select.Item value="anna">Анна Петрова</Select.Item>
27
32
  <Select.Item value="ivan">Иван Смирнов</Select.Item>
28
33
  </Select.Content>
@@ -5,9 +5,9 @@ import * as React from "react";
5
5
  import styles from "./examples.module.css";
6
6
 
7
7
  const PAYMENTS = [
8
- { id: "p1", payer: "ООО «Гранит»", amount: "₽ 94 750" },
9
- { id: "p2", payer: "ИП Орлов Д. С.", amount: "₽ 18 000" },
10
- { id: "p3", payer: "АО «Альфа Медиа»", amount: "₽ 380 000" },
8
+ { id: "p1", payer: "ООО «Гранит»", amount: "94 750 ₽" },
9
+ { id: "p2", payer: "ИП Орлов Д. С.", amount: "18 000 ₽" },
10
+ { id: "p3", payer: "АО «Альфа Медиа»", amount: "380 000 ₽" },
11
11
  ];
12
12
 
13
13
  const LOAD_MS = 1500;
@@ -110,7 +110,7 @@ Tone never carries meaning alone: the label names what the value means.
110
110
  |---|---|---|
111
111
  | default | — | `data-size`, `data-tone`; track `fill-strong`, tone pill up to the thumb centre, opaque thumb |
112
112
  | hover | pointer (fine pointers only) | light liquid glass: the thumb grows to 110%, turns translucent and slightly frosted |
113
- | invalid | `invalid` or a non-empty `error` | `data-invalid="true"` on the root, `aria-invalid` on the input; the error replaces the hint, danger focus ring |
113
+ | invalid | `invalid` or a non-empty `error` | `data-invalid="true"` on the root, `aria-invalid` on the input; the error replaces the hint, danger focus ring; the control shakes once when an error arrives (`data-shake` on the frame) |
114
114
  | pressed | dragging | clear glass: the thumb grows to 125%, the rounded end of the fill shows through |
115
115
  | focus-visible | keyboard | outer focus ring around the thumb |
116
116
  | disabled | `disabled` | `data-disabled="true"` on the root, native `disabled`; muted track and fill, flat thumb, `cursor: not-allowed` |
@@ -0,0 +1,98 @@
1
+ # Sparkline
2
+
3
+ **Category:** data-display
4
+ **Kind:** primitive
5
+
6
+ > A small line chart with its headline — the latest value, its change against the point before and its date — where any point can be scrubbed.
7
+
8
+ ## When to use
9
+ - A metric card on a dashboard: revenue, orders, sign-ups over the last days or weeks.
10
+ - A trend next to a number where the shape matters more than exact axes.
11
+ - A detail page header that shows how a value moved.
12
+
13
+ ## When not to use
14
+ - Exact values on axes, several series, or a legend → a full chart library; Sparkline has no axes.
15
+ - Progress toward a goal → [ProgressBar](../progress-bar/COMPONENT.md) or [ProgressCircle](../progress-circle/COMPONENT.md).
16
+ - A list of values to compare → [DataTable](../data-table/COMPONENT.md).
17
+
18
+ ## Import
19
+ ```tsx
20
+ import { Sparkline, type SparklinePoint } from "prime-ui-kit";
21
+ ```
22
+
23
+ ## Anatomy
24
+ ```
25
+ Sparkline <div>; the headline and the chart
26
+ ├─ head title (label) · date of the shown point
27
+ ├─ value row value (rolling digits when settled) · change Badge with the trend arrow
28
+ └─ plot role="slider" over the svg line and area
29
+ └─ cursor guide line and dot of the shown point (aria-hidden)
30
+ ```
31
+
32
+ ## API
33
+
34
+ <!-- Generated from api.ts by `bun run docs:build`. Edit api.ts, not this section. -->
35
+
36
+ ### Sparkline
37
+ `ref` → `HTMLDivElement` (the root). A headline (title · date, value · change) over a line chart; the chart is a `role="slider"` that picks a point.
38
+
39
+ | Prop | Type | Default | Description |
40
+ |---|---|---|---|
41
+ | `data` | `SparklinePoint[]` | — (required) | Points oldest first, `{ label, value }`; `label` names the point («8 окт»). Two or more draw a line. A new array cross-fades the line in. |
42
+ | `label` | `string` | — (required) | Visible title above the value and the accessible name of the chart. |
43
+ | `formatValue` | `(value: number) => string` | `Russian digit groups` | Display of a value in the headline and the spoken point («312 400 ₽»). |
44
+ | `labels` | `Partial<SparklineLabels>` | — | Built-in strings, see Labels. |
45
+ | `…rest` | `Omit<HTMLAttributes<HTMLDivElement>, "children">` | — | `className`, `data-*` and the other div attributes on the root. |
46
+
47
+ ## Variants
48
+ No variants: one accent line on the surface it sits on. Put it in a `Card` for a dashboard tile.
49
+
50
+ ## States
51
+ | State | Driven by | DOM |
52
+ |---|---|---|
53
+ | at rest | — | the latest point; the value rolls its digits when `data` changes |
54
+ | scrubbing | pointer or touch over the plot | `data-scrubbing` on the root; the cursor and the headline follow the pointer with no easing (direct manipulation), digits change in place |
55
+ | keyboard | arrows, Home, End on the focused plot | `aria-valuenow` / `aria-valuetext`; the cursor glides to the point (`base` · emphasized) |
56
+ | settle | pointer leaves, touch ends, focus leaves | the cursor glides back to the latest point |
57
+ | new series | a new `data` array | the line cross-fades in (swap motion); the trend arrow turns half a turn between up and down |
58
+
59
+ ## Layout & spacing
60
+ - Takes the width of its container; the plot is 80 px high and inset by the dot radius so the cursor is never clipped.
61
+ - In a dashboard, wrap it in `Card.Root` + `Card.Body`; several cards go in a grid.
62
+ - Below 320 px the value row wraps the change badge under the value.
63
+
64
+ ## Accessibility
65
+
66
+ ### Keyboard
67
+ | Key | Action |
68
+ |---|---|
69
+ | `←` · `→` | Previous or next point. |
70
+ | `Home` · `End` | First or last point. |
71
+ | `Tab` | Focuses the chart; leaving focus returns to the latest point. |
72
+
73
+ ### ARIA
74
+ - The plot is `role="slider"` named by `label`; `aria-valuetext` speaks the point («8 окт: 312 400 ₽», `labels.point`).
75
+ - The headline with the latest value and change reads as plain text.
76
+ - The change carries a sign and an arrow, never color alone.
77
+
78
+ ### Labels
79
+ <!-- Generated from api.ts by `bun run docs:build`. Edit api.ts, not this section. -->
80
+
81
+ | Key | Default | Used for |
82
+ |---|---|---|
83
+ | `point` | `"{label}: {value}"` | Spoken value of the chosen point (`aria-valuetext`); `{label}` and `{value}` are replaced. |
84
+
85
+ ## Examples
86
+ | Example | Shows |
87
+ |---|---|
88
+ | [overview.tsx](examples/overview.tsx) | Revenue for 30 days in a dashboard card: drag across the chart, the headline follows and the trend arrow turns — `data`, `label`, `formatValue`. |
89
+ | [period.tsx](examples/period.tsx) | Another period swaps the series: the line cross-fades in and the headline digits roll to the new total — `data`. |
90
+
91
+ ## Mistakes
92
+ - A new array on every render (`data={rows.map(...)}` inline) → the line cross-fades on every render; memoize the series.
93
+ - Formatting inside `label` of a point («312 400 ₽») → the point label is its name («8 окт»); format values with `formatValue`.
94
+ - A Sparkline without a container width (inside an inline flex row) → give it a width or put it in a `Card`.
95
+
96
+ ## Related
97
+ - **Built from:** [Badge](../badge/COMPONENT.md)
98
+ - **See also:** [Card](../card/COMPONENT.md), [ProgressBar](../progress-bar/COMPONENT.md), [SegmentedControl](../segmented-control/COMPONENT.md)
@@ -0,0 +1,13 @@
1
+ /* Layout of the Sparkline scenarios: semantic tokens only. */
2
+
3
+ /* A dashboard card's width: the chart takes the card width. */
4
+ .card {
5
+ width: min(100%, var(--prime-modal-width-s));
6
+ }
7
+
8
+ /* The period switch above the chart inside the card body. */
9
+ .body {
10
+ display: flex;
11
+ flex-direction: column;
12
+ gap: var(--prime-space-4);
13
+ }
@@ -0,0 +1,27 @@
1
+ /** Revenue for 30 days in a dashboard card: drag across the chart, the headline follows and the trend arrow turns — `data`, `label`, `formatValue`. */
2
+ import { Card, Sparkline, type SparklinePoint } from "prime-ui-kit";
3
+
4
+ import styles from "./examples.module.css";
5
+
6
+ const MONTHS = ["янв", "фев", "мар", "апр", "мая", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"];
7
+
8
+ /** Daily revenue, 9 September — 8 October 2026. */
9
+ const REVENUE: SparklinePoint[] = Array.from({ length: 30 }, (_, i) => {
10
+ const day = new Date(2026, 8, 9 + i);
11
+ return {
12
+ label: `${day.getDate()} ${MONTHS[day.getMonth()]}`,
13
+ value: Math.round(260 + 40 * Math.sin(i / 3.2) + 28 * Math.sin(i / 1.4 + 1) + i * 2.6) * 1000,
14
+ };
15
+ });
16
+
17
+ const formatRubles = (value: number) => `${value.toLocaleString("ru-RU")} ₽`;
18
+
19
+ export default function SparklineOverviewExample() {
20
+ return (
21
+ <Card.Root className={styles.card}>
22
+ <Card.Body>
23
+ <Sparkline data={REVENUE} label="Выручка за 30 дней" formatValue={formatRubles} />
24
+ </Card.Body>
25
+ </Card.Root>
26
+ );
27
+ }
@@ -0,0 +1,46 @@
1
+ /** Another period swaps the series: the line cross-fades in and the headline digits roll to the new total — `data`. */
2
+ import { Card, SegmentedControl, Sparkline, type SparklinePoint } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ import styles from "./examples.module.css";
6
+
7
+ type Period = "week" | "month" | "quarter";
8
+
9
+ const series = (labels: string[], base: number, swing: number): SparklinePoint[] =>
10
+ labels.map((label, i) => ({
11
+ label,
12
+ value: Math.round((base + swing * Math.sin(i / 1.7) + (swing / 4) * i) / 100) * 100,
13
+ }));
14
+
15
+ const SERIES: Record<Period, SparklinePoint[]> = {
16
+ week: series(["2 окт", "3 окт", "4 окт", "5 окт", "6 окт", "7 окт", "8 окт"], 41_000, 6_000),
17
+ month: series(
18
+ ["сен, 1 нед.", "сен, 2 нед.", "сен, 3 нед.", "сен, 4 нед.", "окт, 1 нед."],
19
+ 286_000,
20
+ 32_000,
21
+ ),
22
+ quarter: series(["авг", "сен", "окт"], 1_240_000, 160_000),
23
+ };
24
+
25
+ const formatRubles = (value: number) => `${value.toLocaleString("ru-RU")} ₽`;
26
+
27
+ export default function SparklinePeriodExample() {
28
+ const [period, setPeriod] = React.useState<Period>("month");
29
+
30
+ return (
31
+ <Card.Root className={styles.card}>
32
+ <Card.Body className={styles.body}>
33
+ <SegmentedControl.Root
34
+ value={period}
35
+ onValueChange={(value) => setPeriod(value as Period)}
36
+ aria-label="Период"
37
+ >
38
+ <SegmentedControl.Item value="week">Неделя</SegmentedControl.Item>
39
+ <SegmentedControl.Item value="month">Месяц</SegmentedControl.Item>
40
+ <SegmentedControl.Item value="quarter">Квартал</SegmentedControl.Item>
41
+ </SegmentedControl.Root>
42
+ <Sparkline data={SERIES[period]} label="Новые заказы" formatValue={formatRubles} />
43
+ </Card.Body>
44
+ </Card.Root>
45
+ );
46
+ }
@@ -87,7 +87,7 @@ No `variant` / `tone` / `color`.
87
87
  |---|---|---|
88
88
  | off | `checked={false}` / default | `data-state="unchecked"`; track `fill-strong` (hover `fill-strong-hover`), thumb at the start |
89
89
  | on | `checked` / `defaultChecked` | `data-state="checked"`; accent track, the thumb glides to the end |
90
- | invalid | `invalid` or a non-empty `error` | `data-invalid="true"`, `aria-invalid`; danger ring on the off track and on focus |
90
+ | invalid | `invalid` or a non-empty `error` | `data-invalid="true"`, `aria-invalid`; danger ring on the off track and on focus; the row shakes once when an error arrives (`data-shake`) |
91
91
  | disabled | `disabled` | `data-disabled="true"`; off track `fill-muted`, on track `accent-soft`, `cursor: not-allowed` |
92
92
  | read-only | `readOnly` | `aria-readonly="true"` on the input, `data-readonly="true"` on the field; no hover or press, default cursor |
93
93
  | pressed | pointer press | the track scales to the compact press scale (not when disabled or read-only) |
@@ -26,8 +26,8 @@ import { Tabs } from "prime-ui-kit";
26
26
 
27
27
  ## Anatomy
28
28
  ```
29
- Tabs.Root value, size, orientation, tone, fullWidth, min/maxItemWidth; horizontal: the frame
30
- ├─ Tabs.List role="tablist" on a ScrollContainer, sliding folder / pill; collapses, then scrolls
29
+ Tabs.Root value, size, orientation, tone, fullWidth, min/maxItemWidth; the frame (a layer)
30
+ ├─ Tabs.List role="tablist" on a ScrollContainer, sliding folder; collapses, then scrolls
31
31
  │ ├─ Tabs.Item one tab (role="tab") in an item wrapper; onRemove adds a close button; parts:
32
32
  │ │ ├─ Tabs.Icon decorative icon; hidden first, kept last
33
33
  │ │ ├─ Tabs.Label title; keeps its width when it turns medium weight
@@ -42,14 +42,14 @@ Tabs.Root value, size, orientation, tone, fullWidth, min/maxItem
42
42
  <!-- Generated from api.ts by `bun run docs:build`. Edit api.ts, not this section. -->
43
43
 
44
44
  ### Tabs.Root
45
- `ref` → `HTMLDivElement`. `<div>` that owns the active value, size and orientation and lays out the list and the panel; horizontal, it is the frame: a sunken strip over the panel surface.
45
+ `ref` → `HTMLDivElement`. `<div>` that owns the active value, size and orientation and lays out the list and the panel. It is the frame and a layer of the surface ladder in both orientations: a strip two steps off the layer and the panel in the layer's own color — above the panel when horizontal, at its inline start when vertical.
46
46
 
47
47
  | Prop | Type | Default | Description |
48
48
  |---|---|---|---|
49
49
  | `value` | `string` | — | Active tab (controlled). |
50
50
  | `defaultValue` | `string` | `""` | Initial active tab (uncontrolled). With `""` no tab is selected. |
51
51
  | `onValueChange` | `(value: string) => void` | — | Called with the new active value. |
52
- | `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | List direction and arrow keys. A vertical list stacks above the panel when the container is narrower than 600px. |
52
+ | `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | List direction and arrow keys. Vertical: a column of sections at the panel's inline start, the active one the panel reaching into the column; when the container is narrower than 600px the column becomes the horizontal strip above the panel. |
53
53
  | `size` | `"xs" \| "s" \| "m" \| "l" \| "xl"` | `"m"` | Control tier: text, icon, spacing, folder radius and panel padding. A horizontal tab is the control height plus the folder rise on both sides; a vertical one is the control height. |
54
54
  | `fullWidth` | `boolean` | `true` | Horizontal tabs fill the list and tend to equal widths within `minItemWidth` … `maxItemWidth`, never narrower than their content: a long label keeps its width, short ones share the rest; when they do not fit, the list collapses, then scrolls. `false` sizes each tab to its content within the same bounds. |
55
55
  | `tone` | `"neutral" \| "accent"` | `"neutral"` | Colour of the active tab: `neutral` is primary text with an accent icon, `accent` puts text and icon in accent. |
@@ -60,7 +60,7 @@ Tabs.Root value, size, orientation, tone, fullWidth, min/maxItem
60
60
  | `…rest` | `Omit<HTMLAttributes<HTMLDivElement>, "defaultValue">` | — | `className` and the other div attributes. |
61
61
 
62
62
  ### Tabs.List
63
- `ref` → `HTMLDivElement`. `role="tablist"` on a `ScrollContainer` (horizontal, edge fade, hidden scrollbar) with the sliding folder (vertical: pill), which glides only into a choice by click or keys and is placed without motion on mount, resize and collapse. When tabs do not fit or a label would be cut, it hides icons and descriptions, then labels (icons with tooltips stay; only when every tab has an icon); then the list scrolls; a label is never cut to make room. The active tab is kept in view: only the list scrolls, never the page.
63
+ `ref` → `HTMLDivElement`. `role="tablist"` on a `ScrollContainer` (horizontal, edge fade, hidden scrollbar) with the sliding folder (in both orientations), which glides only into a choice by click or keys and is placed without motion on mount, resize and collapse. When tabs do not fit or a label would be cut, it hides icons and descriptions, then labels (icons with tooltips stay; only when every tab has an icon); then the list scrolls; a label is never cut to make room. The active tab is kept in view and clear of the edge fades (the first and the last tab scroll all the way to the end); only the list scrolls, never the page.
64
64
 
65
65
  | Prop | Type | Default | Description |
66
66
  |---|---|---|---|
@@ -128,7 +128,7 @@ Tabs.Root value, size, orientation, tone, fullWidth, min/maxItem
128
128
  | `…rest` | `HTMLAttributes<HTMLDivElement>` | — | `className` and the other div attributes. |
129
129
 
130
130
  ## Variants
131
- Tabs have no `variant`: navigation tabs are always a folder (horizontal) or pills (vertical).
131
+ Tabs have no `variant`: navigation tabs are always a folder — rising from the panel's top edge (horizontal) or reaching out of its side (vertical).
132
132
 
133
133
  ### tone
134
134
  | Value | Looks like | Use when | Default |
@@ -139,8 +139,8 @@ Tabs have no `variant`: navigation tabs are always a folder (horizontal) or pill
139
139
  ### orientation
140
140
  | Value | Looks like | Use when | Default |
141
141
  |---|---|---|---|
142
- | `horizontal` | a `bg-sunken` strip over a padded `bg-surface` panel, tabs edge to edge; the active tab is the panel surface rising into the strip with concave flares, gliding between tabs; primary text, medium weight, accent icon; hover is the same shape in `fill-faint` | switching sections above the content | yes |
143
- | `vertical` | items padded like controls, no rail; active item is a `fill-muted` pill with a short accent mark at the start; hover `fill-subtle`; below a 600px container it becomes a scrolling row above the panel | settings pages with a side list of sections | |
142
+ | `horizontal` | a layer of the surface ladder: a `fill-muted-hover` strip (two steps off the layer) over a padded panel in the layer's own color, tabs edge to edge; the active tab is the panel rising into the strip with concave flares, gliding between tabs; primary text, medium weight, accent icon; hover is the same shape in `fill-faint` | switching sections above the content | yes |
143
+ | `vertical` | the same folder on its side: a column of sections in the `fill-muted-hover` strip at the panel's inline start; the active section is the panel reaching into the column, rounded on the outer side, with concave flares above and below where it meets the panel; hover is the same shape in `fill-faint`. Below a 600px container the column becomes the horizontal strip above the panel (it scrolls, never wraps) | settings pages with a side list of sections | |
144
144
 
145
145
  ### size
146
146
  | Value | Looks like | Use when | Default |
@@ -180,26 +180,25 @@ Avoid icons or descriptions on only some tabs (uneven rows; without an icon on e
180
180
  | State | Driven by | DOM |
181
181
  |---|---|---|
182
182
  | active | `value` / `defaultValue` | item `aria-selected="true"`, `data-state="active"`, `tabIndex=0`; others `data-state="inactive"`, `tabIndex=-1` |
183
- | hover | pointer | text → primary; horizontal: the folder shape in `fill-faint`, under the folder; vertical: `fill-subtle` background |
183
+ | hover | pointer | text → primary; the folder shape in `fill-faint`, under the folder |
184
184
  | pressed | pointer down | the tab content scales to `--prime-motion-press-scale-compact` |
185
- | focus-visible | keyboard | focus ring inside the tab, above the folder; the panel shows an inset ring (vertical: outer ring) |
185
+ | focus-visible | keyboard | focus ring inside the tab, above the folder; the panel shows an inset ring |
186
186
  | disabled | `disabled` on Item | native `disabled`, `data-disabled="true"`, `text-disabled`; a removable tab loses its close button |
187
187
  | removable | `onRemove` on Item | item wrapper `data-removable="true"`, close button, tab `aria-keyshortcuts="Delete"` |
188
188
  | two-line | `Tabs.Description` child | `data-two-line="true"` |
189
189
  | collapsed | tabs wider than the list, or a label that would be cut (horizontal) | list `data-collapse="full" \| "compact" \| "icon"`: `compact` hides icons and descriptions; `icon` hides labels (sr-only, shown in a `Tooltip`), counts and close buttons, only when every tab has an icon |
190
- | overflow | tabs at their narrowest (content width, `minItemWidth` or icon squares) still wider than the list | `data-overflow-start` / `data-overflow-end` on the list (ScrollContainer), faded edges; the active tab is kept in view on mount and on every value change — only the list scrolls, never the page |
190
+ | overflow | tabs at their narrowest (content width, `minItemWidth` or icon squares) still wider than the list | `data-overflow-start` / `data-overflow-end` on the list (ScrollContainer), faded edges as deep as the hidden part at most (they grow and melt with the scroll, never switch); the active tab is kept in view and clear of the fades on mount and on every value change, the first and the last tab scroll all the way to the end — only the list scrolls, never the page |
191
191
 
192
192
  The indicator glides (`emphasized` + `base`, `data-animate="true"`) only into a choice by click, arrow keys or closing the active tab; on mount, a value set from outside, a resize, font loading, tabs added or removed and collapse it is placed without motion, and it stays still under `prefers-reduced-motion`. The list scrolls smoothly to the active tab only after such a choice too.
193
193
 
194
- Other attributes: Root `data-orientation`, `data-size`, `data-tone`, `data-full-width`, inline `--tabs-item-min` / `--tabs-item-max` when set; List `data-indicator="folder" | "pill"`; Item `data-value` on the tab, `data-state` / `data-disabled` on its wrapper too; Label `data-text`. Inactive panels are unmounted; a panel's content enters each time it opens.
194
+ Other attributes: Root `data-orientation`, `data-size`, `data-tone`, `data-full-width`, inline `--tabs-item-min` / `--tabs-item-max` when set; List `data-indicator="folder"`, its indicator `data-axis="x" | "y"` (follows the list's direction, so a vertical list in a narrow container gets the top folder); Item `data-value` on the tab, `data-state` / `data-disabled` on its wrapper too; Label `data-text`. Inactive panels are unmounted; a panel's content enters each time it opens.
195
195
 
196
196
  ## Layout & spacing
197
- - Horizontal: the root is the frame (`radius-xl`, `bg-sunken`), the list sits flush on the panel and runs edge to edge; the panel pads its content by tier (`--prime-space-4` … `--prime-space-8`). Do not wrap Tabs in a Card — it already is one.
198
- - Vertical list → panel: `var(--prime-space-6)`.
197
+ - The root is the frame and a layer of the ladder in both orientations (`data-depth`, `radius-xl`, the strip two steps off the layer); the list sits flush on the panel; the panel pads its content by tier (`--prime-space-4` … `--prime-space-8`). Do not wrap Tabs in a Card — it already is one.
198
+ - Vertical: the column is as wide as its widest section (at least four control heights, at most 40% of the root), inset by the folder rise from the frame on the outer side, flush with the panel on the other.
199
199
  - The list never wraps: it collapses, then scrolls horizontally with faded edges (hidden scrollbar, `overscroll-behavior: contain`). Give the list's container a width (`min-width: 0` on flex children).
200
200
  - A horizontal tab is never narrower than its content (`min-width: max-content`; the tab bounds that content between `minItemWidth` and `maxItemWidth`), so a label is never cut to make room. Full width, tabs tend to equal widths, not widths in proportion to their labels (`flex: 1 1 0`): a long label keeps its width, the short ones share the rest.
201
201
  - A vertical Tabs.Root is a size container: give it a width (it measures itself to switch to a row).
202
- - In a vertical layout align the panel heading with the first tab by making the heading row one control tall (`min-height: var(--prime-control-m-height)`).
203
202
 
204
203
  ## Accessibility
205
204
 
@@ -235,7 +234,7 @@ Other attributes: Root `data-orientation`, `data-size`, `data-tone`, `data-full-
235
234
  | [sizes.tsx](examples/sizes.tsx) | Every size tier: text, icon, folder radius and spacing grow together — `size`. |
236
235
  | [states.tsx](examples/states.tsx) | A disabled tab that clicks and arrow keys skip — `disabled`. |
237
236
  | [with-icon.tsx](examples/with-icon.tsx) | A muted icon before the label and a hairline before the service section — `Tabs.Icon`, `Tabs.Label`, `Tabs.Separator`. |
238
- | [orientation.tsx](examples/orientation.tsx) | Tabs over the panel and a side list of sections that stacks on top below 600px — `orientation`. |
237
+ | [orientation.tsx](examples/orientation.tsx) | Account settings with a side list of sections: the active section reaches out of the panel, and below 600px the list moves above it — `orientation`. |
239
238
  | [overflow.tsx](examples/overflow.tsx) | Drag the frame narrower: icons go first, then labels, and icons with tooltips stay; then the list scrolls — `Tabs.Icon`. |
240
239
  | [closable.tsx](examples/closable.tsx) | Open order cards as browser tabs: each closes by its button, Delete or a middle click; tabs stay between two widths, and the list scrolls when they do not fit — `onRemove`, `minItemWidth`, `maxItemWidth`. |
241
240
  | [two-line.tsx](examples/two-line.tsx) | A label and a counter on the first line, a summary on the second — `Tabs.Count`, `Tabs.Description`. |
@@ -8,6 +8,20 @@
8
8
  margin-inline: auto;
9
9
  }
10
10
 
11
+ /* A settings block: wide enough for the side list next to a form, never wider than the preview. */
12
+ .wide {
13
+ box-sizing: border-box;
14
+ width: min(100%, calc(20 * var(--prime-control-m-height)));
15
+ margin-inline: auto;
16
+ }
17
+
18
+ /* Fields and switches of a settings section: field → field rhythm (foundation §1). */
19
+ .form {
20
+ display: grid;
21
+ gap: var(--prime-space-5);
22
+ max-width: calc(10 * var(--prime-control-m-height));
23
+ }
24
+
11
25
  /* The same column, which the reader can drag narrower to watch the tabs collapse and scroll. */
12
26
  .resizable {
13
27
  composes: frame;