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
@@ -16,9 +16,9 @@ import styles from "./examples.module.css";
16
16
  type Status = "loading" | "ready" | "empty" | "error";
17
17
 
18
18
  const PAYMENTS = [
19
- { id: "p1", payer: "ООО «Гранит»", amount: "₽ 94 750" },
20
- { id: "p2", payer: "ИП Орлов Д. С.", amount: "₽ 18 000" },
21
- { id: "p3", payer: "АО «Альфа Медиа»", amount: "₽ 380 000" },
19
+ { id: "p1", payer: "ООО «Гранит»", amount: "94 750 ₽" },
20
+ { id: "p2", payer: "ИП Орлов Д. С.", amount: "18 000 ₽" },
21
+ { id: "p3", payer: "АО «Альфа Медиа»", amount: "380 000 ₽" },
22
22
  ];
23
23
 
24
24
  export default function CrossfadeOverviewExample() {
@@ -150,8 +150,8 @@ Heads keep `start` whatever the cell alignment, with the sort icon at the end ed
150
150
  | `rowDividers` | hairlines between rows | default; off together with `striped` | `true` |
151
151
  | `columnDividers` | hairlines between content columns (none inside the lead columns) | default; off for 2–3 column key/value lists | `true` |
152
152
  | `striped` | every second row one opaque step off the fill | long numeric grids | `false` |
153
- | `highlightRowOnHover` | `fill-subtle` wash on the hovered row | interactive lists | `true` |
154
- | `highlightColumnOnHover` | `fill-subtle` wash on the hovered column | comparison tables | `false` |
153
+ | `highlightRowOnHover` | `fill-subtle-active` wash on the hovered row (stronger than a zebra step, so a hovered row never takes a zebra row's color) | interactive lists | `true` |
154
+ | `highlightColumnOnHover` | `fill-subtle-active` wash on the hovered column | comparison tables | `false` |
155
155
  | `stickyHeader` · `stickyFirstColumn` | opaque sticky head / first column with a hairline edge; on screens lower than 480px the head scrolls with the rows | long / wide tables in a `scrollHeight` window | `false` |
156
156
  | column `hideable` | `false`: the column stays even when listed in `hiddenColumns` | the key column that names the row | `true` |
157
157
  | `showHeader` | head row shown | off only for self-explanatory key/value tables | `true` |
@@ -169,7 +169,8 @@ Heads keep `start` whatever the cell alignment, with the sort icon at the end ed
169
169
  | sorted | `sort` / `defaultSort` | `aria-sort` and `data-sorted` on the head; the sort icon: unsorted `text-disabled`, hover `text-muted`, sorted `text-secondary` — never accent |
170
170
  | selected | `selected` / `defaultSelected` | `aria-selected` rows with `accent-soft` fill; polite `labels.selectedCount` |
171
171
  | expanded | `expanded` / `defaultExpanded` | `data-expanded` on the parent row (one step darker); toggle `aria-expanded`, chevron turns 90° |
172
- | new rows | rows mounted by an expand or new in `rows` (by `getRowKey`) | `data-animate`: cells drop in from above (`enterMotion`); detail panels open and close through `grid-template-rows` (`data-state` on the detail row; it unmounts after the close) |
172
+ | new rows | rows new in `rows` (by `getRowKey`) | `data-animate`: top-level cells drop in from above (`enterMotion`) |
173
+ | sub-rows and detail panels | an expand / a collapse | both fold open and shut through `grid-template-rows` (0fr ↔ 1fr) with the fade on the same `base` curve; the row height and padding live inside the track, so nothing is left to jump. Sub-rows: `data-fold` on the row (`opening` · `open` · `closed`); a collapsed row's sub-rows stay mounted until the fold ends. Detail row: `data-state`; it unmounts after the close |
173
174
  | overflowing sideways | the table is wider than its viewport | `data-overflow-start` (scrolled from the start) and `data-overflow-end` (more to the end) on the root: a soft shadow over that edge, from the end edge of the sticky first column for the start; fades in and out over `fast` |
174
175
  | hidden columns | `hiddenColumns` | the listed columns (except `hideable: false`) are not rendered in the head, rows, skeleton or state rows; widths are measured again |
175
176
  | state swap | the body moves between loading, rows, empty and error | the body fades in over `base` (opacity only, the same swap motion as [Crossfade](../crossfade/COMPONENT.md)); the head stays still; nothing moves on the first render |
@@ -177,7 +178,7 @@ Heads keep `start` whatever the cell alignment, with the sort icon at the end ed
177
178
  Root attributes: `data-size`, `data-row-dividers`, `data-column-dividers`, `data-sticky-header`, `data-sticky-first-column`, `data-table-width` (`fill` · `auto` · `grow`), `data-highlight-row`, `data-highlight-column`, `data-striped`, `data-loading`, `data-selectable`, `data-expandable`, `data-dragging` (while drag-selecting), `data-overflow-start` · `data-overflow-end` (edges that hide columns). Sorting and paging swap rows instantly; everything is still under `prefers-reduced-motion`.
178
179
 
179
180
  ## Layout & spacing
180
- - The root fills its container on `--prime-color-card-bg`, radius 12, and clips full-bleed head and rows; on a card or a modal it becomes a sunken block — never wrap it in a Card.
181
+ - The root is a layer of the surface ladder (`data-depth`, one above its host): it fills its container on `--prime-color-layer-current`, radius 12, and clips full-bleed head and rows; zebra rows and the sticky column are one ladder step off it, the head two. On a card or in a modal it is the next layer by itself — never wrap it in a Card.
181
182
  - Toolbar padding `--prime-space-3` × cell padding, items `gap: --prime-space-2`; below 30rem of table width toolbar and footer stack.
182
183
  - The footer has a hairline on top: range on the left, Pagination on the right. The range shows only with more than one page or with infinite scroll.
183
184
  - Columns scroll sideways inside the table, never the page; pin the identifying column with `stickyFirstColumn`. Works from 320 px.
@@ -140,7 +140,7 @@ Shared by `Datepicker.Root` and `Datepicker.Panel`.
140
140
  | empty | no value | `data-empty="true"`, `labels.placeholder` (or `placeholder`) in placeholder color |
141
141
  | open | click, `open` | `data-state="open"`, `field-bg-focus` fill, the chevron turns |
142
142
  | focus-visible | keyboard | inset focus ring; none with `focusRing={false}` (`data-focus-ring="false"`) |
143
- | invalid | `invalid`, `error` | `data-invalid`, `aria-invalid`, inset `danger-border` ring |
143
+ | invalid | `invalid`, `error` | `data-invalid`, `aria-invalid`, inset `danger-border` ring; the control shakes once when an error arrives (`data-shake` on the frame) |
144
144
  | disabled | `disabled` | native `disabled`, `data-disabled`, `field-bg-disabled`, cannot open |
145
145
  | today | the current day | `data-today`, `aria-current="date"`, accent text |
146
146
  | selected / band | value | day `aria-pressed`, `data-edge`; cell `data-band="selected" \| "preview"`, `data-band-start` / `-end` |
@@ -201,13 +201,13 @@ Panel DOM: `data-size`, `data-embedded`, `data-compact`, `data-layout` (`aside`
201
201
  | [overview.tsx](examples/overview.tsx) | A shipping date field: a click opens one month, a picked day applies at once — `mode`, `label`. |
202
202
  | [sizes.tsx](examples/sizes.tsx) | Every size tier: the field is 28 to 48 px high, the day cell of the panel 24 to 40 px — `size`. |
203
203
  | [states.tsx](examples/states.tsx) | An empty field with the default placeholder, a filled one and a disabled one — `disabled`. |
204
- | [validation.tsx](examples/validation.tsx) | A required leave period with a hint, the same field with an error and an optional return date — `required`, `hint`, `error`, `optional`. |
204
+ | [validation.tsx](examples/validation.tsx) | A leave period checked live: the error shakes in, names the broken rule and leaves once the period fits; an optional return date — `required`, `hint`, `error`, `optional`. |
205
205
  | [range-presets.tsx](examples/range-presets.tsx) | A report period: presets aside, two months, a step prompt, time fields with Reset / Apply, no future days — `presets`, `months`, `prompt`, `footer`, `withTime`, `disableFuture`. |
206
206
  | [inline-panel.tsx](examples/inline-panel.tsx) | A booking calendar embedded in the page: its own card, two months when the parent has room, the range applies at once — `Datepicker.Panel`, `months`, `prompt`. |
207
207
  | [yearless.tsx](examples/yearless.tsx) | An annual price change date: day and month without a year, a value prefix and taken days disabled — `yearless`, `valuePrefix`, `isDayDisabled`. |
208
208
  | [controlled.tsx](examples/controlled.tsx) | A report filter owns the period: quick buttons set it from outside, the field shows it — `value`, `onValueChange`. |
209
209
  | [controlled-open.tsx](examples/controlled-open.tsx) | The parent owns the panel: a reminder button opens the calendar from code, a picked day closes it — `open`, `onOpenChange`. |
210
- | [in-form.tsx](examples/in-form.tsx) | A leave request form: a required period that turns into an error after submit and an optional return date — `required`, `error`, `optional`. |
210
+ | [in-form.tsx](examples/in-form.tsx) | A leave request form: submit checks the required period, the error shakes in and leaves once the period is fixed; an optional return date — `required`, `error`, `optional`. |
211
211
  | [narrow.tsx](examples/narrow.tsx) | An embedded panel in a 320 px column: one compact month instead of two, the footer fields wrap above the buttons — `months`, `footer`. |
212
212
 
213
213
  ## Mistakes
@@ -1,13 +1,15 @@
1
- /** A leave request form: a required period that turns into an error after submit and an optional return date — `required`, `error`, `optional`. */
2
- import { Button, Card, Datepicker, type DatepickerRange } from "prime-ui-kit";
1
+ /** A leave request form: submit checks the required period, the error shakes in and leaves once the period is fixed; an optional return date — `required`, `error`, `optional`. */
2
+ import { Button, Card, Datepicker, type DatepickerRange, Typography } from "prime-ui-kit";
3
3
  import * as React from "react";
4
4
 
5
5
  import styles from "./examples.module.css";
6
6
 
7
+ const EMPTY_PERIOD: DatepickerRange = { from: null, to: null };
8
+
7
9
  export default function DatepickerInFormExample() {
8
- const [period, setPeriod] = React.useState<DatepickerRange>({ from: null, to: null });
9
- const [submitted, setSubmitted] = React.useState(false);
10
- const missing = submitted && (!period.from || !period.to);
10
+ const [period, setPeriod] = React.useState<DatepickerRange>(EMPTY_PERIOD);
11
+ const [error, setError] = React.useState<string>();
12
+ const [sent, setSent] = React.useState(false);
11
13
 
12
14
  return (
13
15
  <Card.Root className={styles.formCard}>
@@ -15,7 +17,9 @@ export default function DatepickerInFormExample() {
15
17
  className={styles.form}
16
18
  onSubmit={(event) => {
17
19
  event.preventDefault();
18
- setSubmitted(true);
20
+ const complete = Boolean(period.from && period.to);
21
+ setError(complete ? undefined : "Укажите начало и конец отпуска");
22
+ setSent(complete);
19
23
  }}
20
24
  >
21
25
  <Datepicker.Root
@@ -23,17 +27,34 @@ export default function DatepickerInFormExample() {
23
27
  label="Период отпуска"
24
28
  required
25
29
  hint="Не больше 28 дней подряд"
26
- error={missing ? "Укажите начало и конец отпуска" : undefined}
30
+ error={error}
27
31
  value={period}
28
- onValueChange={setPeriod}
32
+ onValueChange={(next) => {
33
+ setPeriod(next);
34
+ setError(undefined);
35
+ setSent(false);
36
+ }}
29
37
  months={2}
30
38
  footer
31
39
  placeholder="Выбрать период"
32
40
  fullWidth
33
41
  />
34
42
  <Datepicker.Root mode="single" label="Выход на работу" optional fullWidth />
43
+ {sent ? (
44
+ <Typography as="p" variant="body-s" tone="secondary" role="status">
45
+ Заявка отправлена на согласование.
46
+ </Typography>
47
+ ) : null}
35
48
  <div className={styles.actions}>
36
- <Button.Root variant="ghost" tone="neutral">
49
+ <Button.Root
50
+ variant="ghost"
51
+ tone="neutral"
52
+ onClick={() => {
53
+ setPeriod(EMPTY_PERIOD);
54
+ setError(undefined);
55
+ setSent(false);
56
+ }}
57
+ >
37
58
  Отмена
38
59
  </Button.Root>
39
60
  <Button.Root type="submit">Отправить заявку</Button.Root>
@@ -1,7 +1,22 @@
1
- /** A required leave period with a hint, the same field with an error and an optional return date — `required`, `hint`, `error`, `optional`. */
2
- import { Datepicker } from "prime-ui-kit";
1
+ /** A leave period checked live: the error shakes in, names the broken rule and leaves once the period fits; an optional return date — `required`, `hint`, `error`, `optional`. */
2
+ import { Datepicker, type DatepickerRange } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ const MAX_DAYS = 28;
6
+ const DAY_MS = 24 * 60 * 60 * 1000;
7
+ const LONG_PERIOD: DatepickerRange = { from: new Date(2026, 6, 1), to: new Date(2026, 7, 4) };
8
+
9
+ /** The period error, or nothing when both ends are set and the period fits the limit. */
10
+ function periodError({ from, to }: DatepickerRange) {
11
+ if (!from || !to) return "Укажите начало и конец отпуска";
12
+ if ((to.getTime() - from.getTime()) / DAY_MS + 1 > MAX_DAYS)
13
+ return "Больше 28 дней подряд нельзя";
14
+ return undefined;
15
+ }
3
16
 
4
17
  export default function DatepickerValidationExample() {
18
+ const [period, setPeriod] = React.useState<DatepickerRange>(LONG_PERIOD);
19
+
5
20
  return (
6
21
  <>
7
22
  <Datepicker.Root
@@ -10,14 +25,9 @@ export default function DatepickerValidationExample() {
10
25
  required
11
26
  hint="Не больше 28 дней подряд"
12
27
  placeholder="Выбрать период"
13
- fullWidth
14
- />
15
- <Datepicker.Root
16
- mode="range"
17
- label="Период отпуска"
18
- required
19
- error="Укажите начало и конец отпуска"
20
- placeholder="Выбрать период"
28
+ value={period}
29
+ onValueChange={setPeriod}
30
+ error={periodError(period)}
21
31
  fullWidth
22
32
  />
23
33
  <Datepicker.Root mode="single" label="Выход на работу" optional fullWidth />
@@ -44,6 +44,7 @@ DigitInput field frame: label row → cells → support row (hint | e
44
44
  | `hint` | `ReactNode` | — | Help text under the cells. Hidden while `error` is shown. |
45
45
  | `error` | `ReactNode` | — | Error message in the hint slot; implies `invalid`. |
46
46
  | `invalid` | `boolean` | — | Danger ring and danger digits on every cell, `aria-invalid`. A non-empty `error` implies it. |
47
+ | `success` | `boolean` | `false` | The code was accepted (after the server checked it): the cells turn success one after another. Ignored while invalid. Say it in words too (`hint`). |
47
48
  | `disabled` | `boolean` | — | Disables the fieldset and every cell. |
48
49
  | `value` | `string` | — | Controlled code; non-digits are dropped, extra digits cut to `length`. |
49
50
  | `defaultValue` | `string` | `""` | Initial code when uncontrolled. |
@@ -92,11 +93,12 @@ No `variant` or `tone`.
92
93
  | State | Driven by | DOM |
93
94
  |---|---|---|
94
95
  | hover | — | cell fill darkens (not on focused or disabled cells) |
95
- | focus | keyboard / click | focused cell: focus fill + inset focus ring; its content is selected so a new digit replaces it |
96
- | filled cell | a digit in the cell | `data-filled="true"` on the cell |
96
+ | focus | keyboard / click | focused cell: focus fill and its content selected so a new digit replaces it; one inset ring for the row appears on the cell and glides to the next one (`fast` · emphasized) instead of each cell drawing its own |
97
+ | filled cell | a digit in the cell | `data-filled="true"` on the cell; the digit fades in as it lands |
98
+ | success | `success` (not while invalid) | `data-success="true"` on the fieldset; the cells turn `success-soft` one after another, half a stagger step apart |
97
99
  | full width | `fullWidth` | `data-full-width="true"` on the fieldset |
98
100
  | group start | `groupSize` | `data-group-start="true"` on the first cell of every group |
99
- | invalid | `invalid` or a non-empty `error` | `data-invalid="true"` on the fieldset and the frame, `aria-invalid="true"` on cells |
101
+ | invalid | `invalid` or a non-empty `error` | `data-invalid="true"` on the fieldset and the frame, `aria-invalid="true"` on cells; the control shakes once when an error arrives (`data-shake` on the frame) |
100
102
  | disabled | `disabled` | `data-disabled="true"` and native `disabled` on the fieldset, every cell disabled, label and hint dimmed |
101
103
  | no focus ring | `focusRing={false}` | `data-focus-ring="false"` on the fieldset |
102
104
 
@@ -139,12 +141,12 @@ No `variant` or `tone`.
139
141
  | [overview.tsx](examples/overview.tsx) | A six-digit code from SMS with its label and a hint — `label`, `hint`, `length`. |
140
142
  | [sizes.tsx](examples/sizes.tsx) | Every size; the cell is a square on its own scale, two steps above the control heights — `size`. |
141
143
  | [states.tsx](examples/states.tsx) | A default code next to a disabled one — `disabled`. |
142
- | [validation.tsx](examples/validation.tsx) | Required and optional markers, a hint and an error that replaces it — `required`, `optional`, `hint`, `error`. |
144
+ | [validation.tsx](examples/validation.tsx) | A confirmation code checked once it is complete: a wrong code shakes in with one message and leaves as soon as you type again; a hint and an optional code — `required`, `optional`, `hint`, `error`. |
143
145
  | [grouped.tsx](examples/grouped.tsx) | A long code read in chunks with a wider gap between groups — `groupSize`. |
144
146
  | [full-width.tsx](examples/full-width.tsx) | Cells that share the container width and keep the tier height, above a full-width button — `fullWidth`. |
145
- | [on-complete.tsx](examples/on-complete.tsx) | The code is checked as soon as the last cell is filled; a wrong code turns the hint into an error — `onComplete`, `error`. |
147
+ | [on-complete.tsx](examples/on-complete.tsx) | The code is checked as soon as the last cell is filled: a right one turns the cells success, a wrong one turns the hint into an error — `onComplete`, `success`, `error`. |
146
148
  | [controlled.tsx](examples/controlled.tsx) | The parent owns the code and clears it with a button — `value`, `onValueChange`. |
147
- | [in-form.tsx](examples/in-form.tsx) | A masked card PIN submitted with a form; a short PIN shows an error — `name`, `mask`, `required`, `error`. |
149
+ | [in-form.tsx](examples/in-form.tsx) | A masked card PIN submitted with a form; a short or wrong PIN shakes in an error that leaves when you type again — `name`, `mask`, `required`, `error`. |
148
150
 
149
151
  ## Mistakes
150
152
  - `<DigitInput.Root>` → the component is a single export: `<DigitInput />`.
@@ -1,18 +1,27 @@
1
- /** A masked card PIN submitted with a form; a short PIN shows an error — `name`, `mask`, `required`, `error`. */
2
- import { Button, DigitInput } from "prime-ui-kit";
1
+ /** A masked card PIN submitted with a form; a short or wrong PIN shakes in an error that leaves when you type again — `name`, `mask`, `required`, `error`. */
2
+ import { Button, DigitInput, Typography } from "prime-ui-kit";
3
3
  import * as React from "react";
4
4
 
5
5
  import styles from "./examples.module.css";
6
6
 
7
7
  const PIN_LENGTH = 4;
8
+ const PIN = "4821";
8
9
 
9
10
  export default function DigitInputInFormExample() {
10
11
  const [error, setError] = React.useState<string>();
12
+ const [linked, setLinked] = React.useState(false);
11
13
 
12
14
  const submit = (event: React.FormEvent<HTMLFormElement>) => {
13
15
  event.preventDefault();
14
16
  const pin = String(new FormData(event.currentTarget).get("pin") ?? "");
15
- setError(pin.length === PIN_LENGTH ? undefined : "Введите все четыре цифры");
17
+ const next =
18
+ pin.length !== PIN_LENGTH
19
+ ? "Введите все четыре цифры"
20
+ : pin === PIN
21
+ ? undefined
22
+ : "Неверный PIN-код";
23
+ setError(next);
24
+ setLinked(next === undefined);
16
25
  };
17
26
 
18
27
  return (
@@ -23,9 +32,18 @@ export default function DigitInputInFormExample() {
23
32
  length={PIN_LENGTH}
24
33
  mask
25
34
  required
35
+ hint={`Для примера — ${PIN}`}
26
36
  error={error}
27
- onValueChange={() => setError(undefined)}
37
+ onValueChange={() => {
38
+ setError(undefined);
39
+ setLinked(false);
40
+ }}
28
41
  />
42
+ {linked ? (
43
+ <Typography as="p" variant="body-s" tone="secondary" role="status">
44
+ Карта привязана.
45
+ </Typography>
46
+ ) : null}
29
47
  <Button.Root type="submit">Привязать карту</Button.Root>
30
48
  </form>
31
49
  );
@@ -1,20 +1,21 @@
1
- /** The code is checked as soon as the last cell is filled; a wrong code turns the hint into an error — `onComplete`, `error`. */
1
+ /** The code is checked as soon as the last cell is filled: a right one turns the cells success, a wrong one turns the hint into an error — `onComplete`, `success`, `error`. */
2
2
  import { DigitInput } from "prime-ui-kit";
3
3
  import * as React from "react";
4
4
 
5
5
  const VALID_CODE = "123456";
6
6
 
7
7
  export default function DigitInputOnCompleteExample() {
8
- const [error, setError] = React.useState<string>();
8
+ const [result, setResult] = React.useState<"accepted" | "rejected">();
9
9
 
10
10
  return (
11
11
  <DigitInput
12
12
  label="Код подтверждения входа"
13
13
  length={6}
14
- hint={`Для проверки подходит ${VALID_CODE}`}
15
- error={error}
16
- onValueChange={() => setError(undefined)}
17
- onComplete={(code) => setError(code === VALID_CODE ? undefined : "Неверный код")}
14
+ hint={result === "accepted" ? "Код подтверждён" : `Для проверки подходит ${VALID_CODE}`}
15
+ error={result === "rejected" ? "Неверный код" : undefined}
16
+ success={result === "accepted"}
17
+ onValueChange={() => setResult(undefined)}
18
+ onComplete={(code) => setResult(code === VALID_CODE ? "accepted" : "rejected")}
18
19
  />
19
20
  );
20
21
  }
@@ -1,15 +1,22 @@
1
- /** Required and optional markers, a hint and an error that replaces it — `required`, `optional`, `hint`, `error`. */
1
+ /** A confirmation code checked once it is complete: a wrong code shakes in with one message and leaves as soon as you type again; a hint and an optional code — `required`, `optional`, `hint`, `error`. */
2
2
  import { DigitInput } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ const CODE = "482916";
3
6
 
4
7
  export default function DigitInputValidationExample() {
8
+ const [error, setError] = React.useState<string>();
9
+
5
10
  return (
6
11
  <>
7
- <DigitInput label="Код из письма" required hint="Проверьте папку «Спам»" length={6} />
8
12
  <DigitInput
9
- label="Код подтверждения"
13
+ label="Код из письма"
10
14
  required
11
- defaultValue="1111"
12
- error="Неверный код, осталось 2 попытки"
15
+ hint={`Проверьте папку «Спам». Для примера — ${CODE}`}
16
+ length={6}
17
+ error={error}
18
+ onValueChange={() => setError(undefined)}
19
+ onComplete={(value) => setError(value === CODE ? undefined : "Неверный код")}
13
20
  />
14
21
  <DigitInput label="Код приглашения" optional />
15
22
  </>
@@ -134,7 +134,7 @@ Generic `Dnd.DropZone<TData>`; `ref` → `HTMLElement`. Renders the `as` element
134
134
  | carried | a drag | the clone follows the pointer, lifted on `--prime-shadow-modal`, scale 1.02; a sortable source leaves the layout (`data-lifted`) and a dashed accent gap of its size and radius fades in and glides with the items as the landing spot moves; entering a connected list, it fades out in the list it left and in where it opens; crossing empty space (the gutter between lists) leaves the gap in the last list that takes the item; neighbours glide aside; a `Dnd.Draggable` stays at 0.4 opacity (`data-dragging`) |
135
135
  | over a zone | pointer over an accepting zone | `data-dnd-over`: `accent-soft` fill, dashed accent outline |
136
136
  | refused | `canDrop` returns `false` | `data-dnd-reject`: `danger-soft` fill; the clone gets a dashed `danger` outline |
137
- | dropped | release over a target, or over empty space while a list holds the gap | the clone glides to the item's new place and is swapped for the real element; `data-dnd-flash` with `flashOnDrop` |
137
+ | dropped | release over a target, or over empty space while a list holds the gap | the clone glides to the item's new place and is swapped for the real element; `data-dnd-flash` with `flashOnDrop`; the clone sets down into the look the item will have in place — its resting shadow, or under the mouse its hover look: the item gets `data-dnd-hover` until the pointer leaves it or presses, so a host styles its hover lift on `:is(:hover, [data-dnd-hover])` and the card never dips to flat and lifts again |
138
138
  | cancelled | Escape, a system-cancelled pointer | the clone flies back, nothing changes |
139
139
  | disabled | `disabled` | `data-disabled`, no `aria-roledescription` |
140
140
 
@@ -14,8 +14,8 @@
14
14
  min-width: 0;
15
15
  padding: var(--prime-space-3) var(--prime-space-4);
16
16
  border-radius: var(--prime-radius-m);
17
- background: var(--prime-color-card-bg);
18
- box-shadow: var(--prime-card-shadow);
17
+ background: var(--prime-color-layer-nested);
18
+ box-shadow: var(--prime-shadow-raised);
19
19
  }
20
20
 
21
21
  /* The grip sits closer to the edge: it is a square button with its own inner room. */
@@ -45,7 +45,7 @@
45
45
  min-height: calc(var(--prime-space-24) * 2);
46
46
  padding: var(--prime-space-3);
47
47
  border-radius: var(--prime-radius-l);
48
- background: var(--prime-color-bg-sunken);
48
+ background: var(--prime-color-fill-muted);
49
49
  }
50
50
 
51
51
  .columnHeader {
@@ -61,7 +61,7 @@
61
61
  gap: var(--prime-space-1);
62
62
  padding: var(--prime-space-3) var(--prime-space-4);
63
63
  border-radius: var(--prime-radius-m);
64
- background: var(--prime-color-bg-surface);
64
+ background: var(--prime-color-layer-nested);
65
65
  box-shadow: var(--prime-shadow-raised);
66
66
  }
67
67
 
@@ -182,7 +182,7 @@ Motion: the scrim fades, the panel slides from its side over `slow` and leaves o
182
182
  | [long-content.tsx](examples/long-content.tsx) | A long body scrolls on its own while the header and the footer stay in place — `Drawer.Body`. |
183
183
  | [dismiss.tsx](examples/dismiss.tsx) | An import closes only from its buttons, and not at all while it runs — `closeOnOutsideClick`, `closeOnEscape`. |
184
184
  | [controlled-open.tsx](examples/controlled-open.tsx) | The parent owns the state and opens the drawer from a link, without a trigger — `open`, `onOpenChange`. |
185
- | [in-form.tsx](examples/in-form.tsx) | A settings form in the panel: the footer button submits the form and an empty name keeps it open — `Drawer.Body`, `Drawer.Footer`, `error`. |
185
+ | [in-form.tsx](examples/in-form.tsx) | A settings form in the panel: the footer button submits the form and an empty name shakes the field and keeps it open until it is filled — `Drawer.Body`, `Drawer.Footer`, `error`. |
186
186
 
187
187
  ## Mistakes
188
188
  - A delete confirmation in a Drawer → use Modal.
@@ -1,4 +1,4 @@
1
- /** A settings form in the panel: the footer button submits the form and an empty name keeps it open — `Drawer.Body`, `Drawer.Footer`, `error`. */
1
+ /** A settings form in the panel: the footer button submits the form and an empty name shakes the field and keeps it open until it is filled — `Drawer.Body`, `Drawer.Footer`, `error`. */
2
2
  import { Button, Drawer, Icon, Input, Select, Switch } from "prime-ui-kit";
3
3
  import * as React from "react";
4
4
 
@@ -44,7 +44,12 @@ export default function DrawerInFormExample() {
44
44
  <form id={formId} className={styles.form} noValidate onSubmit={submit}>
45
45
  <Input.Root label="Название" required error={error} reserveSupportRow>
46
46
  <Input.Wrapper>
47
- <Input.Field name="name" defaultValue="Команда продукта" autoFocus />
47
+ <Input.Field
48
+ name="name"
49
+ defaultValue="Команда продукта"
50
+ autoFocus
51
+ onValueChange={() => setError(undefined)}
52
+ />
48
53
  </Input.Wrapper>
49
54
  </Input.Root>
50
55
  <Input.Root label="Адрес" hint="Только латиница, цифры и дефис">
@@ -115,7 +115,7 @@ No DOM: clones the single child, merges `ref` and `onClick` (toggles), sets `ari
115
115
  `ref` → `HTMLDivElement`. A non-interactive row at the top (who is signed in, the plan): an avatar, Title + Description stacked in one column, a trailing badge or button — in the written order / the medium heading line / the muted line under it; both truncate. + native `<div>` props.
116
116
 
117
117
  ## Variants
118
- The panel is the shared floating surface: `bg-raised`, `--prime-panel-radius` (12), padding 4, `shadow-overlay`; rows have radius 8 and the tier item height.
118
+ The panel is the shared floating surface: the floating layer of the ladder (`data-depth="floating"`), `--prime-panel-radius` (12), padding 4, `shadow-overlay`; rows have radius 8 and the tier item height.
119
119
 
120
120
  ### size (Content)
121
121
  | Value | Looks like | Use when | Default |
@@ -18,5 +18,5 @@
18
18
  padding-block: var(--prime-space-1);
19
19
  padding-inline: var(--prime-space-4) var(--prime-space-1);
20
20
  border-radius: var(--prime-radius-l);
21
- background: var(--prime-color-card-bg);
21
+ background: var(--prime-color-layer-nested);
22
22
  }
@@ -27,7 +27,7 @@
27
27
  width: min(100%, var(--prime-panel-min-width));
28
28
  padding: var(--prime-panel-padding);
29
29
  border-radius: var(--prime-panel-radius);
30
- background: var(--prime-color-bg-raised);
30
+ background: var(--prime-color-layer-floating-bg);
31
31
  box-shadow: var(--prime-shadow-overlay);
32
32
  }
33
33
 
@@ -74,7 +74,7 @@ ExampleFrame frame: toolbar + preview stage or code pane
74
74
  | `light` | stage and code pane in the light theme | default | yes |
75
75
  | `dark` | stage and code pane in the dark theme (`data-theme="dark"`), switched without color transitions | checking dark mode | |
76
76
 
77
- Frame look: `bg-sunken` chrome with a `border-subtle` hairline and `radius-xl`; the stage and code pane are `bg-canvas` wells with `radius-l` (16 − 4 padding = 12). The stage resets the card context (`--prime-color-card-bg: bg-surface`).
77
+ Frame look: the chrome is a layer of the surface ladder (`data-depth`, one above its host) with a `border-subtle` hairline and `radius-xl`; the stage and code pane are wells with `radius-l` (16 − 4 padding = 12). Both wells carry `data-theme`, so each is a page of its own: layer 0 of its scheme, and surfaces in the example count from there.
78
78
 
79
79
  ## States
80
80
  | State | Driven by | DOM |
@@ -157,7 +157,7 @@ The built-in body (icon, `labels.title`, `labels.description` and a decorative s
157
157
  | hover | — | zone fill and dashed line darken |
158
158
  | focus | keyboard focus on the hidden input | inset focus ring on the zone (danger when invalid); Enter / Space opens the dialog |
159
159
  | drag-over | a file dragged over the zone | `data-state="active"` on the zone: accent line, accent soft fill, accent icon |
160
- | invalid | `invalid` or a non-empty `error` | `data-invalid="true"` on the zone, `aria-invalid` on the input; `data-invalid="true"` on Item |
160
+ | invalid | `invalid` or a non-empty `error` | `data-invalid="true"` on the zone, `aria-invalid` on the input; `data-invalid="true"` on Item; the control shakes once when an error arrives (`data-shake` on the frame) |
161
161
  | disabled | `disabled` | `data-disabled="true"`, disabled input, disabled fill and text, drops ignored |
162
162
 
163
163
  Also `data-size`, `data-variant` on the zone and `data-size` on Item. Files are not kept by the component: keep the list in your state and update it in `onFilesChange`.
@@ -197,11 +197,11 @@ Also `data-size`, `data-variant` on the zone and `data-size` on Item. Files are
197
197
  | [variants.tsx](examples/variants.tsx) | The dashed drop line next to a zone with only the fill, for cards and modals — `variant`. |
198
198
  | [sizes.tsx](examples/sizes.tsx) | Every size of the zone and of a file row: padding, icon, button and text follow the tier — `size`. |
199
199
  | [states.tsx](examples/states.tsx) | A default zone, a disabled one and an invalid one without a message — `disabled`, `invalid`. |
200
- | [validation.tsx](examples/validation.tsx) | A required zone with a hint, a rejected file whose error replaces the hint and an optional zone — `required`, `hint`, `error`, `optional`. |
200
+ | [validation.tsx](examples/validation.tsx) | A required scan checked as soon as it is picked: a wrong type or a large file shakes in an error that leaves when the file is removed; a hint and an optional zone — `required`, `hint`, `error`, `optional`. |
201
201
  | [custom-body.tsx](examples/custom-body.tsx) | A custom body: a muted title with a browse link and source buttons instead of the built-in one — `FileUpload.Body`, `FileUpload.Title`. |
202
202
  | [upload-progress.tsx](examples/upload-progress.tsx) | File rows while uploading, uploaded and failed with a retry — `FileUpload.ItemProgress`, `invalid`, `FileUpload.ItemActions`. |
203
203
  | [avatar-upload.tsx](examples/avatar-upload.tsx) | A round zone around an Avatar that takes images and shows a preview; buttons open the same input — `inputRef`, `accept`, `className`. |
204
- | [in-form.tsx](examples/in-form.tsx) | A contract upload form: the required scan is checked on submit and its error replaces the hint — `required`, `error`, `name`. |
204
+ | [in-form.tsx](examples/in-form.tsx) | A contract upload form: submit checks the required scan, its error shakes in and leaves once a valid file is picked or removed — `required`, `error`, `name`. |
205
205
  | [narrow.tsx](examples/narrow.tsx) | In a phone-width column the zone text wraps and a long file name truncates. |
206
206
 
207
207
  ## Mistakes
@@ -1,18 +1,31 @@
1
- /** A contract upload form: the required scan is checked on submit and its error replaces the hint — `required`, `error`, `name`. */
1
+ /** A contract upload form: submit checks the required scan, its error shakes in and leaves once a valid file is picked or removed — `required`, `error`, `name`. */
2
2
  import { Button, FileUpload, Icon, Typography } from "prime-ui-kit";
3
3
  import * as React from "react";
4
4
 
5
5
  import styles from "./examples.module.css";
6
6
 
7
7
  const HINT = "PDF до 20 МБ, все страницы";
8
+ const MAX_SIZE = 20 * 1024 * 1024;
9
+
10
+ /** The scan error on submit, or nothing when exactly a PDF within the limit is attached. */
11
+ function scanError(files: File[]) {
12
+ if (files.length === 0) return "Приложите скан договора";
13
+ if (files.some((file) => !file.name.toLowerCase().endsWith(".pdf")))
14
+ return "Нужен файл в формате PDF";
15
+ if (files.some((file) => file.size > MAX_SIZE)) return "Файл больше 20 МБ";
16
+ return undefined;
17
+ }
8
18
 
9
19
  export default function FileUploadInFormExample() {
10
20
  const [files, setFiles] = React.useState<File[]>([]);
11
21
  const [error, setError] = React.useState<string>();
22
+ const [sent, setSent] = React.useState(false);
12
23
 
13
24
  const submit = (event: React.FormEvent<HTMLFormElement>) => {
14
25
  event.preventDefault();
15
- setError(files.length === 0 ? "Приложите скан договора" : undefined);
26
+ const next = scanError(files);
27
+ setError(next);
28
+ setSent(next === undefined);
16
29
  };
17
30
 
18
31
  return (
@@ -36,18 +49,23 @@ export default function FileUploadInFormExample() {
36
49
  onFilesChange={(next) => {
37
50
  setFiles(next);
38
51
  setError(undefined);
52
+ setSent(false);
39
53
  }}
40
54
  />
41
55
  {files.map((file) => (
42
56
  <FileUpload.Item key={file.name}>
43
- <FileUpload.FormatBadge format="pdf" color="red" />
57
+ <FileUpload.FormatBadge format={file.name.split(".").pop() ?? ""} color="red" />
44
58
  <FileUpload.ItemName>{file.name}</FileUpload.ItemName>
45
59
  <FileUpload.ItemActions>
46
60
  <Button.Root
47
61
  variant="ghost"
48
62
  tone="neutral"
49
63
  aria-label={`Удалить ${file.name}`}
50
- onClick={() => setFiles([])}
64
+ onClick={() => {
65
+ setFiles([]);
66
+ setError(undefined);
67
+ setSent(false);
68
+ }}
51
69
  >
52
70
  <Button.Icon>
53
71
  <Icon name="action.close" />
@@ -57,6 +75,11 @@ export default function FileUploadInFormExample() {
57
75
  </FileUpload.Item>
58
76
  ))}
59
77
  </div>
78
+ {sent ? (
79
+ <Typography as="p" variant="body-s" tone="secondary" role="status">
80
+ Договор отправлен на проверку.
81
+ </Typography>
82
+ ) : null}
60
83
  <div className={styles.formActions}>
61
84
  <Button.Root
62
85
  variant="ghost"
@@ -65,6 +88,7 @@ export default function FileUploadInFormExample() {
65
88
  onClick={() => {
66
89
  setFiles([]);
67
90
  setError(undefined);
91
+ setSent(false);
68
92
  }}
69
93
  >
70
94
  Отменить
@@ -1,18 +1,49 @@
1
- /** A required zone with a hint, a rejected file whose error replaces the hint and an optional zone — `required`, `hint`, `error`, `optional`. */
2
- import { FileUpload } from "prime-ui-kit";
1
+ /** A required scan checked as soon as it is picked: a wrong type or a large file shakes in an error that leaves when the file is removed; a hint and an optional zone — `required`, `hint`, `error`, `optional`. */
2
+ import { Button, FileUpload, Icon } from "prime-ui-kit";
3
+ import * as React from "react";
3
4
 
4
5
  import styles from "./examples.module.css";
5
6
 
7
+ const MAX_SIZE = 20 * 1024 * 1024;
8
+
9
+ /** The scan error, or nothing when every picked file is a PDF within the limit. */
10
+ function scanError(files: File[]) {
11
+ if (files.some((file) => !file.name.toLowerCase().endsWith(".pdf")))
12
+ return "Нужен файл в формате PDF";
13
+ if (files.some((file) => file.size > MAX_SIZE)) return "Файл больше 20 МБ";
14
+ return undefined;
15
+ }
16
+
6
17
  export default function FileUploadValidationExample() {
18
+ const [files, setFiles] = React.useState<File[]>([]);
19
+
7
20
  return (
8
21
  <div className={styles.column}>
9
- <FileUpload.Root label="Скан договора" required hint="PDF до 20 МБ, все страницы" />
10
22
  <FileUpload.Root
11
- label="Счёт на оплату"
23
+ label="Скан договора"
12
24
  required
13
- error="Файл не подошёл: нужен PDF до 20 МБ"
14
- labels={{ title: "Выберите другой файл" }}
25
+ hint="PDF до 20 МБ, все страницы"
26
+ error={scanError(files)}
27
+ onFilesChange={setFiles}
15
28
  />
29
+ {files.map((file) => (
30
+ <FileUpload.Item key={file.name}>
31
+ <FileUpload.FormatBadge format={file.name.split(".").pop() ?? ""} color="red" />
32
+ <FileUpload.ItemName>{file.name}</FileUpload.ItemName>
33
+ <FileUpload.ItemActions>
34
+ <Button.Root
35
+ variant="ghost"
36
+ tone="neutral"
37
+ aria-label={`Удалить ${file.name}`}
38
+ onClick={() => setFiles([])}
39
+ >
40
+ <Button.Icon>
41
+ <Icon name="action.close" />
42
+ </Button.Icon>
43
+ </Button.Root>
44
+ </FileUpload.ItemActions>
45
+ </FileUpload.Item>
46
+ ))}
16
47
  <FileUpload.Root label="Доверенность" optional hint="Если подписывает не директор" />
17
48
  </div>
18
49
  );