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
@@ -1,27 +1,91 @@
1
- // src/internal/ControlSizeContext.tsx
2
- import * as React from "react";
3
- import { jsx } from "react/jsx-runtime";
4
- var ControlSizeContext = React.createContext(null);
5
- ControlSizeContext.displayName = "ControlSizeContext";
6
- function ControlSizeProvider({ value, children }) {
7
- return /* @__PURE__ */ jsx(ControlSizeContext.Provider, { value, children });
8
- }
9
- ControlSizeProvider.displayName = "ControlSizeProvider";
10
- function useOptionalControlSize() {
11
- return React.useContext(ControlSizeContext) ?? void 0;
12
- }
13
- function useControlSize(sizeProp) {
14
- const host = React.useContext(ControlSizeContext);
15
- return sizeProp ?? host ?? "m";
16
- }
1
+ import {
2
+ Activity,
3
+ ArrowDown,
4
+ ArrowUp,
5
+ ArrowUpDown,
6
+ Bell,
7
+ Bold,
8
+ BookOpen,
9
+ Calendar,
10
+ ChartColumn,
11
+ Check,
12
+ ChevronDown,
13
+ ChevronLeft,
14
+ ChevronRight,
15
+ ChevronUp,
16
+ ChevronsLeft,
17
+ ChevronsUpDown,
18
+ Circle,
19
+ CircleCheck,
20
+ CircleX,
21
+ CloudOff,
22
+ CloudUpload,
23
+ CodeXml,
24
+ ControlSizeProvider,
25
+ Copy,
26
+ Download,
27
+ Ellipsis,
28
+ ExternalLink,
29
+ Eye,
30
+ EyeOff,
31
+ FileText,
32
+ GripVertical,
33
+ HardDrive,
34
+ House,
35
+ Image,
36
+ Inbox,
37
+ Info,
38
+ Italic,
39
+ KeyRound,
40
+ LayoutDashboard,
41
+ LayoutGrid,
42
+ Link2,
43
+ List,
44
+ ListFilter,
45
+ ListTodo,
46
+ Lock,
47
+ LogIn,
48
+ LogOut,
49
+ Mail,
50
+ MailCheck,
51
+ Menu,
52
+ MessageSquare,
53
+ Minus,
54
+ Monitor,
55
+ Moon,
56
+ Package,
57
+ PanelLeftClose,
58
+ PanelLeftOpen,
59
+ Pipette,
60
+ Plus,
61
+ Receipt,
62
+ RefreshCw,
63
+ Rocket,
64
+ Search,
65
+ Send,
66
+ Settings,
67
+ ShoppingCart,
68
+ Smartphone,
69
+ Sun,
70
+ Tablet,
71
+ Trash2,
72
+ TriangleAlert,
73
+ Truck,
74
+ Underline,
75
+ UserRound,
76
+ Users,
77
+ Wallet,
78
+ X,
79
+ cx,
80
+ iconBoxClass,
81
+ textTone_default,
82
+ useControlSize,
83
+ useIconRoot,
84
+ useOptionalControlSize
85
+ } from "./chunk-GFKDZFQR.js";
17
86
 
18
87
  // src/components/spinner/Spinner.tsx
19
- import * as React2 from "react";
20
-
21
- // src/internal/cx.ts
22
- function cx(...classNames) {
23
- return classNames.filter(Boolean).join(" ");
24
- }
88
+ import * as React from "react";
25
89
 
26
90
  // src/internal/data-attributes.ts
27
91
  function toDataAttributes(input) {
@@ -36,37 +100,16 @@ function toDataAttributes(input) {
36
100
  return result;
37
101
  }
38
102
 
39
- // src/internal/iconBox.module.css
40
- var iconBox_default = {
41
- box: "iconBox_box",
42
- xs: "iconBox_xs",
43
- s: "iconBox_s",
44
- m: "iconBox_m",
45
- l: "iconBox_l",
46
- xl: "iconBox_xl",
47
- inherit: "iconBox_inherit"
48
- };
49
-
50
- // src/internal/iconBox.ts
51
- function iconBoxClass(size, tier) {
52
- return cx(iconBox_default.box, iconBox_default[size ?? tier ?? "m"], size === void 0 && iconBox_default.inherit);
53
- }
54
-
55
- // src/internal/textTone.module.css
56
- var textTone_default = {
57
- tone: "textTone_tone"
58
- };
59
-
60
103
  // src/internal/VisuallyHidden.module.css
61
104
  var VisuallyHidden_default = {
62
105
  root: "VisuallyHidden_root"
63
106
  };
64
107
 
65
108
  // src/internal/VisuallyHidden.tsx
66
- import { jsx as jsx2 } from "react/jsx-runtime";
109
+ import { jsx } from "react/jsx-runtime";
67
110
  var visuallyHiddenClass = VisuallyHidden_default.root;
68
111
  function VisuallyHidden({ className, ...rest }) {
69
- return /* @__PURE__ */ jsx2("span", { className: cx(VisuallyHidden_default.root, className), ...rest });
112
+ return /* @__PURE__ */ jsx("span", { className: cx(VisuallyHidden_default.root, className), ...rest });
70
113
  }
71
114
 
72
115
  // src/components/spinner/Spinner.module.css
@@ -77,7 +120,7 @@ var Spinner_default = {
77
120
  };
78
121
 
79
122
  // src/components/spinner/Spinner.tsx
80
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
123
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
81
124
  var SPINNER_LABELS = {
82
125
  loading: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430"
83
126
  };
@@ -89,7 +132,7 @@ function Spinner({
89
132
  ...rest
90
133
  }) {
91
134
  const controlSize = useOptionalControlSize();
92
- const labels = React2.useMemo(() => ({ ...SPINNER_LABELS, ...labelsProp }), [labelsProp]);
135
+ const labels = React.useMemo(() => ({ ...SPINNER_LABELS, ...labelsProp }), [labelsProp]);
93
136
  const size = sizeProp ?? controlSize ?? "m";
94
137
  return /* @__PURE__ */ jsxs(
95
138
  "span",
@@ -99,13 +142,16 @@ function Spinner({
99
142
  ...toDataAttributes({ size, tone: tone === "default" ? void 0 : tone }),
100
143
  ...rest,
101
144
  children: [
102
- /* @__PURE__ */ jsx3("span", { className: Spinner_default.ring, "aria-hidden": "true" }),
103
- /* @__PURE__ */ jsx3(VisuallyHidden, { children: labels.loading })
145
+ /* @__PURE__ */ jsx2("span", { className: Spinner_default.ring, "aria-hidden": "true" }),
146
+ /* @__PURE__ */ jsx2(VisuallyHidden, { children: labels.loading })
104
147
  ]
105
148
  }
106
149
  );
107
150
  }
108
151
 
152
+ // src/components/button/Button.tsx
153
+ import * as React7 from "react";
154
+
109
155
  // src/internal/fieldSurface.module.css
110
156
  var fieldSurface_default = {
111
157
  surface: "fieldSurface_surface"
@@ -127,12 +173,12 @@ var fieldTierClass = fieldTier_default.tier;
127
173
  var fieldTriggerClass = `${fieldTier_default.tier} ${fieldSurface_default.surface} ${fieldTrigger_default.trigger}`;
128
174
 
129
175
  // src/internal/iconLayout.ts
130
- import * as React3 from "react";
176
+ import * as React2 from "react";
131
177
  function iconLayout(children, iconType) {
132
- const content = React3.Children.toArray(children).filter(
178
+ const content = React2.Children.toArray(children).filter(
133
179
  (child) => !(typeof child === "string" && child.trim() === "")
134
180
  );
135
- const isIcon = (child) => React3.isValidElement(child) && child.type === iconType;
181
+ const isIcon = (child) => React2.isValidElement(child) && child.type === iconType;
136
182
  const iconOnly = content.length > 0 && content.every(isIcon);
137
183
  return {
138
184
  iconOnly,
@@ -141,11 +187,152 @@ function iconLayout(children, iconType) {
141
187
  };
142
188
  }
143
189
 
190
+ // src/internal/MorphText.tsx
191
+ import * as React4 from "react";
192
+
193
+ // src/hooks/usePresence.ts
194
+ import * as React3 from "react";
195
+ var DURATION_FALLBACK_MS = {
196
+ fast: 230,
197
+ base: 380,
198
+ slow: 570
199
+ };
200
+ var TIMEOUT_SLACK_MS = 50;
201
+ function prefersReducedMotion() {
202
+ return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
203
+ }
204
+ function parseDurationMs(raw) {
205
+ const value = raw.trim();
206
+ if (value === "") return null;
207
+ const n = Number.parseFloat(value);
208
+ if (Number.isNaN(n)) return null;
209
+ if (value.endsWith("ms")) return n;
210
+ if (value.endsWith("s")) return n * 1e3;
211
+ return null;
212
+ }
213
+ function motionDurationMs(token) {
214
+ if (typeof document === "undefined") return DURATION_FALLBACK_MS[token];
215
+ const raw = getComputedStyle(document.documentElement).getPropertyValue(
216
+ `--prime-motion-duration-${token}`
217
+ );
218
+ return parseDurationMs(raw) ?? DURATION_FALLBACK_MS[token];
219
+ }
220
+ function exitTimeoutMs(token) {
221
+ return motionDurationMs(token) + TIMEOUT_SLACK_MS;
222
+ }
223
+ function usePresence(open, options = {}) {
224
+ const { exitDuration = "base" } = options;
225
+ const [mounted, setMounted] = React3.useState(open);
226
+ if (open && !mounted) setMounted(true);
227
+ if (!open && mounted && prefersReducedMotion()) setMounted(false);
228
+ const openRef = React3.useRef(open);
229
+ openRef.current = open;
230
+ React3.useEffect(() => {
231
+ if (open || !mounted) return;
232
+ const id = window.setTimeout(() => setMounted(false), exitTimeoutMs(exitDuration));
233
+ return () => window.clearTimeout(id);
234
+ }, [open, mounted, exitDuration]);
235
+ const onExitEnd = React3.useCallback((event) => {
236
+ if (event.target !== event.currentTarget) return;
237
+ if (!openRef.current) setMounted(false);
238
+ }, []);
239
+ return { mounted: open || mounted, state: open ? "open" : "closed", onExitEnd };
240
+ }
241
+
242
+ // src/internal/MorphText.module.css
243
+ var MorphText_default = {
244
+ root: "MorphText_root",
245
+ morphing: "MorphText_morphing",
246
+ sizer: "MorphText_sizer",
247
+ layer: "MorphText_layer",
248
+ letter: "MorphText_letter",
249
+ letterOut: "MorphText_letterOut",
250
+ primeMorphOut: "MorphText_primeMorphOut",
251
+ letterIn: "MorphText_letterIn",
252
+ primeMorphIn: "MorphText_primeMorphIn"
253
+ };
254
+
255
+ // src/internal/MorphText.tsx
256
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
257
+ function digitsOnly(a, b) {
258
+ return a.replace(/\d/g, "") === b.replace(/\d/g, "");
259
+ }
260
+ function letters(text, kind) {
261
+ return [...text].map((char, i) => /* @__PURE__ */ jsx3(
262
+ "span",
263
+ {
264
+ className: cx(MorphText_default.letter, kind === "in" ? MorphText_default.letterIn : MorphText_default.letterOut),
265
+ style: { "--morph-i": i },
266
+ children: char
267
+ },
268
+ i
269
+ ));
270
+ }
271
+ function settleMs(text, root) {
272
+ const css = getComputedStyle(root);
273
+ const read = (name) => Number.parseFloat(css.getPropertyValue(name)) || 0;
274
+ const base = read("--prime-motion-duration-base");
275
+ const step = read("--prime-motion-stagger") / 6;
276
+ return base + step * text.length + 50;
277
+ }
278
+ function MorphText({ children: text, className }) {
279
+ const rootRef = React4.useRef(null);
280
+ const sizerRef = React4.useRef(null);
281
+ const prevText = React4.useRef(null);
282
+ const restWidth = React4.useRef(0);
283
+ const nextId = React4.useRef(0);
284
+ const [morph, setMorph] = React4.useState(null);
285
+ const morphRef = React4.useRef(morph);
286
+ morphRef.current = morph;
287
+ React4.useLayoutEffect(() => {
288
+ const root = rootRef.current;
289
+ const prev = prevText.current;
290
+ prevText.current = text;
291
+ if (!root || prev === null || prev === text) return;
292
+ if (prefersReducedMotion() || digitsOnly(prev, text)) {
293
+ setMorph(null);
294
+ return;
295
+ }
296
+ const running = morphRef.current;
297
+ const width = running ? root.getBoundingClientRect().width : restWidth.current;
298
+ nextId.current += 1;
299
+ setMorph({ id: nextId.current, from: running ? running.to : prev, to: text, width });
300
+ }, [text]);
301
+ React4.useLayoutEffect(() => {
302
+ if (!morph) return;
303
+ const root = rootRef.current;
304
+ const sizer = sizerRef.current;
305
+ if (!root || !sizer) return;
306
+ const target = sizer.getBoundingClientRect().width;
307
+ if (target !== morph.width) {
308
+ root.style.width = `${morph.width}px`;
309
+ root.getBoundingClientRect();
310
+ root.style.width = `${target}px`;
311
+ }
312
+ const timer = window.setTimeout(() => setMorph(null), settleMs(morph.to, root));
313
+ return () => window.clearTimeout(timer);
314
+ }, [morph]);
315
+ React4.useLayoutEffect(() => {
316
+ if (morph || !rootRef.current) return;
317
+ rootRef.current.style.width = "";
318
+ restWidth.current = rootRef.current.getBoundingClientRect().width;
319
+ });
320
+ if (!morph) {
321
+ return /* @__PURE__ */ jsx3("span", { ref: rootRef, className: cx(MorphText_default.root, className), children: text });
322
+ }
323
+ return /* @__PURE__ */ jsxs2("span", { ref: rootRef, className: cx(MorphText_default.root, MorphText_default.morphing, className), children: [
324
+ /* @__PURE__ */ jsx3("span", { ref: sizerRef, className: MorphText_default.sizer, "aria-hidden": "true", children: morph.to }),
325
+ /* @__PURE__ */ jsx3("span", { className: MorphText_default.layer, "aria-hidden": "true", children: letters(morph.from, "out") }, `out-${morph.id}`),
326
+ /* @__PURE__ */ jsx3("span", { className: MorphText_default.layer, "aria-hidden": "true", children: letters(morph.to, "in") }, `in-${morph.id}`),
327
+ /* @__PURE__ */ jsx3(VisuallyHidden, { children: morph.to })
328
+ ] });
329
+ }
330
+
144
331
  // src/internal/slot.tsx
145
- import * as React5 from "react";
332
+ import * as React6 from "react";
146
333
 
147
334
  // src/hooks/useMergedRefs.ts
148
- import * as React4 from "react";
335
+ import * as React5 from "react";
149
336
 
150
337
  // src/internal/mergeRefs.ts
151
338
  function mergeRefs(...refs) {
@@ -163,7 +350,7 @@ function mergeRefs(...refs) {
163
350
 
164
351
  // src/hooks/useMergedRefs.ts
165
352
  function useMergedRefs(...refs) {
166
- return React4.useMemo(() => mergeRefs(...refs), refs);
353
+ return React5.useMemo(() => mergeRefs(...refs), refs);
167
354
  }
168
355
 
169
356
  // src/internal/slot.tsx
@@ -206,14 +393,14 @@ function blockDisabledClick(event) {
206
393
  event.stopPropagation();
207
394
  }
208
395
  function Slot({ children, ref, ...slotProps }) {
209
- const child = React5.isValidElement(children) ? children : null;
396
+ const child = React6.isValidElement(children) ? children : null;
210
397
  const childRef = child?.props.ref ?? void 0;
211
398
  const composedRef = useMergedRefs(ref, childRef);
212
399
  if (!child) return /* @__PURE__ */ jsx4(Fragment, { children });
213
400
  const merged = mergeProps(slotProps, child.props);
214
401
  const disabled = slotProps["aria-disabled"] === true || slotProps["aria-disabled"] === "true";
215
402
  if (disabled) merged.onClickCapture = blockDisabledClick;
216
- return React5.cloneElement(child, { ...merged, ref: composedRef });
403
+ return React6.cloneElement(child, { ...merged, ref: composedRef });
217
404
  }
218
405
  Slot.displayName = "Slot";
219
406
 
@@ -231,11 +418,57 @@ var touchTargetBlockClass = touchTarget_default.targetBlock;
231
418
  var Button_default = {
232
419
  root: "Button_root",
233
420
  icon: "Button_icon",
234
- spinner: "Button_spinner"
421
+ spinner: "Button_spinner",
422
+ fillTrack: "Button_fillTrack",
423
+ fill: "Button_fill"
235
424
  };
236
425
 
237
426
  // src/components/button/Button.tsx
238
- import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
427
+ import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
428
+ var BUTTON_LABELS = { holdHint: "\u0423\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C" };
429
+ var HOLD_MS = 1200;
430
+ function useHoldToConfirm(enabled, onConfirm) {
431
+ const [phase, setPhase] = React7.useState("idle");
432
+ const timer = React7.useRef(void 0);
433
+ const confirm = React7.useRef(onConfirm);
434
+ confirm.current = onConfirm;
435
+ React7.useEffect(() => () => window.clearTimeout(timer.current), []);
436
+ const start = () => {
437
+ if (!enabled || phase === "holding" || phase === "done") return;
438
+ setPhase("holding");
439
+ timer.current = window.setTimeout(() => {
440
+ setPhase("done");
441
+ confirm.current?.();
442
+ }, HOLD_MS);
443
+ };
444
+ const stop = () => {
445
+ window.clearTimeout(timer.current);
446
+ setPhase(
447
+ (current) => current === "holding" ? "cancel" : current === "done" ? "idle" : current
448
+ );
449
+ };
450
+ return { phase, start, stop };
451
+ }
452
+ function morphLabels(children) {
453
+ const out = [];
454
+ let run = null;
455
+ const flush = () => {
456
+ if (run !== null && run !== "") {
457
+ out.push(/* @__PURE__ */ jsx5(MorphText, { children: run }, `label-${out.length}`));
458
+ }
459
+ run = null;
460
+ };
461
+ for (const child of React7.Children.toArray(children)) {
462
+ if (typeof child === "string" || typeof child === "number") {
463
+ run = (run ?? "") + String(child);
464
+ } else {
465
+ flush();
466
+ out.push(child);
467
+ }
468
+ }
469
+ flush();
470
+ return out;
471
+ }
239
472
  function ButtonRoot({
240
473
  children,
241
474
  className,
@@ -245,6 +478,10 @@ function ButtonRoot({
245
478
  fullWidth,
246
479
  type = "button",
247
480
  loading = false,
481
+ progress,
482
+ holdToConfirm = false,
483
+ onConfirm,
484
+ labels,
248
485
  disabled,
249
486
  asChild = false,
250
487
  onClick: onClick2,
@@ -254,6 +491,11 @@ function ButtonRoot({
254
491
  const size = useControlSize(sizeProp);
255
492
  const isDisabled = disabled || loading;
256
493
  const layout = iconLayout(children, ButtonIcon);
494
+ const hold = useHoldToConfirm(holdToConfirm && !isDisabled, onConfirm);
495
+ const hintId = React7.useId();
496
+ const inProgress = progress !== void 0;
497
+ const [fillUsed, setFillUsed] = React7.useState(false);
498
+ if ((inProgress || holdToConfirm) && !fillUsed) setFillUsed(true);
257
499
  const dataAttrs = toDataAttributes({
258
500
  variant,
259
501
  tone,
@@ -266,7 +508,9 @@ function ButtonRoot({
266
508
  "leading-icon": layout.leadingIcon || void 0,
267
509
  "trailing-icon": layout.trailingIcon || void 0,
268
510
  // Without a leading icon the spinner is centered over the hidden label: width stays put.
269
- "loading-overlay": loading && !asChild && !layout.leadingIcon && !layout.iconOnly || void 0
511
+ "loading-overlay": loading && !asChild && !layout.leadingIcon && !layout.iconOnly || void 0,
512
+ progress: inProgress || void 0,
513
+ hold: holdToConfirm ? hold.phase : void 0
270
514
  });
271
515
  const classes = cx(fieldTierClass, touchTargetClass, Button_default.root, className);
272
516
  if (asChild) {
@@ -284,23 +528,85 @@ function ButtonRoot({
284
528
  }
285
529
  ) });
286
530
  }
287
- return /* @__PURE__ */ jsx5(
531
+ const {
532
+ onPointerDown: onPointerDown2,
533
+ onPointerUp,
534
+ onPointerLeave,
535
+ onPointerCancel,
536
+ onKeyDown: onKeyDown2,
537
+ onKeyUp,
538
+ onBlur
539
+ } = rest;
540
+ const holdHandlers = holdToConfirm ? {
541
+ onPointerDown: (event) => {
542
+ onPointerDown2?.(event);
543
+ if (event.button === 0) hold.start();
544
+ },
545
+ onPointerUp: (event) => {
546
+ onPointerUp?.(event);
547
+ hold.stop();
548
+ },
549
+ onPointerLeave: (event) => {
550
+ onPointerLeave?.(event);
551
+ hold.stop();
552
+ },
553
+ onPointerCancel: (event) => {
554
+ onPointerCancel?.(event);
555
+ hold.stop();
556
+ },
557
+ onKeyDown: (event) => {
558
+ onKeyDown2?.(event);
559
+ if ((event.key === " " || event.key === "Enter") && !event.repeat) {
560
+ event.preventDefault();
561
+ hold.start();
562
+ }
563
+ },
564
+ onKeyUp: (event) => {
565
+ onKeyUp?.(event);
566
+ if (event.key === " " || event.key === "Enter") hold.stop();
567
+ },
568
+ onBlur: (event) => {
569
+ onBlur?.(event);
570
+ hold.stop();
571
+ },
572
+ onContextMenu: (event) => {
573
+ rest.onContextMenu?.(event);
574
+ if (hold.phase === "holding" || hold.phase === "done") event.preventDefault();
575
+ }
576
+ } : null;
577
+ const describedBy = holdToConfirm ? cx(rest["aria-describedby"], hintId) || void 0 : rest["aria-describedby"];
578
+ const button = /* @__PURE__ */ jsxs3(
288
579
  "button",
289
580
  {
290
581
  ...rest,
582
+ ...holdHandlers,
291
583
  ref,
292
584
  type,
293
585
  className: classes,
294
586
  disabled: isDisabled,
295
- "aria-busy": loading || void 0,
587
+ "aria-busy": loading || inProgress || void 0,
588
+ "aria-describedby": describedBy,
296
589
  onClick: onClick2,
590
+ style: inProgress || holdToConfirm ? {
591
+ ...rest.style,
592
+ "--btn-progress": inProgress ? Math.min(1, Math.max(0, progress)) : void 0,
593
+ "--btn-hold-duration": holdToConfirm ? `${HOLD_MS}ms` : void 0
594
+ } : rest.style,
297
595
  ...dataAttrs,
298
- children: /* @__PURE__ */ jsxs2(ControlSizeProvider, { value: size, children: [
299
- loading ? /* @__PURE__ */ jsx5(Spinner, { className: Button_default.spinner, "aria-hidden": "true" }) : null,
300
- children
301
- ] })
596
+ children: [
597
+ fillUsed ? /* @__PURE__ */ jsx5("span", { className: Button_default.fillTrack, "aria-hidden": "true", children: /* @__PURE__ */ jsx5("span", { className: Button_default.fill }) }) : null,
598
+ /* @__PURE__ */ jsxs3(ControlSizeProvider, { value: size, children: [
599
+ loading ? /* @__PURE__ */ jsx5(Spinner, { className: Button_default.spinner, "aria-hidden": "true" }) : null,
600
+ morphLabels(children)
601
+ ] })
602
+ ]
302
603
  }
303
604
  );
605
+ if (!holdToConfirm) return button;
606
+ return /* @__PURE__ */ jsxs3(Fragment2, { children: [
607
+ button,
608
+ /* @__PURE__ */ jsx5(VisuallyHidden, { id: hintId, children: { ...BUTTON_LABELS, ...labels }.holdHint })
609
+ ] });
304
610
  }
305
611
  ButtonRoot.displayName = "Button.Root";
306
612
  function ButtonIcon({ children, className, ...rest }) {
@@ -339,90 +645,7 @@ function Divider({
339
645
  );
340
646
  }
341
647
 
342
- // src/icons/Icon.module.css
343
- var Icon_default = {
344
- root: "Icon_root"
345
- };
346
-
347
648
  // src/icons/registry.ts
348
- import {
349
- Activity,
350
- AlertTriangle,
351
- ArrowDown,
352
- ArrowUp,
353
- ArrowUpDown,
354
- Bell,
355
- Bold,
356
- BookOpen,
357
- Calendar,
358
- ChartColumn,
359
- Check,
360
- CheckCircle2,
361
- ChevronDown,
362
- ChevronLeft,
363
- ChevronRight,
364
- ChevronsLeft,
365
- ChevronsUpDown,
366
- ChevronUp,
367
- Circle,
368
- CloudOff,
369
- CloudUpload,
370
- Code2,
371
- Copy,
372
- Download,
373
- ExternalLink,
374
- Eye,
375
- EyeOff,
376
- FileText,
377
- GripVertical,
378
- HardDrive,
379
- House,
380
- Image,
381
- Inbox,
382
- Info,
383
- Italic,
384
- KeyRound,
385
- LayoutDashboard,
386
- LayoutGrid,
387
- Link2,
388
- List,
389
- ListFilter,
390
- ListTodo,
391
- Lock,
392
- LogIn,
393
- LogOut,
394
- Mail,
395
- MailCheck,
396
- Menu,
397
- MessageSquare,
398
- Minus,
399
- Monitor,
400
- Moon,
401
- MoreHorizontal,
402
- Package,
403
- PanelLeftClose,
404
- PanelLeftOpen,
405
- Pipette,
406
- Plus,
407
- Receipt,
408
- RefreshCw,
409
- Rocket,
410
- Search,
411
- Send,
412
- Settings,
413
- ShoppingCart,
414
- Smartphone,
415
- Sun,
416
- Tablet,
417
- Trash2,
418
- Truck,
419
- Underline,
420
- UserRound,
421
- Users,
422
- Wallet,
423
- X,
424
- XCircle
425
- } from "lucide-react";
426
649
  var iconRegistry = {
427
650
  "nav.chevronDown": ChevronDown,
428
651
  "nav.chevronLeft": ChevronLeft,
@@ -449,7 +672,7 @@ var iconRegistry = {
449
672
  "action.filter": ListFilter,
450
673
  "action.login": LogIn,
451
674
  "action.logout": LogOut,
452
- "action.more": MoreHorizontal,
675
+ "action.more": Ellipsis,
453
676
  "action.refresh": RefreshCw,
454
677
  "action.remove": Minus,
455
678
  "action.search": Search,
@@ -487,16 +710,18 @@ var iconRegistry = {
487
710
  "sort.ascending": ArrowUp,
488
711
  "sort.descending": ArrowDown,
489
712
  "sort.none": ArrowUpDown,
490
- "status.danger": XCircle,
713
+ "status.danger": CircleX,
491
714
  "status.emailSent": MailCheck,
492
715
  "status.info": Info,
493
716
  "status.locked": Lock,
494
717
  "status.offline": CloudOff,
495
- "status.success": CheckCircle2,
496
- "status.warning": AlertTriangle,
718
+ "status.success": CircleCheck,
719
+ /** A rising trend; a falling one is the same arrow turned half a turn (it rotates between them). */
720
+ "status.trendUp": ArrowUp,
721
+ "status.warning": TriangleAlert,
497
722
  "theme.dark": Moon,
498
723
  "theme.light": Sun,
499
- "view.code": Code2,
724
+ "view.code": CodeXml,
500
725
  "view.preview": Eye,
501
726
  "viewport.desktop": Monitor,
502
727
  "viewport.mobile": Smartphone,
@@ -505,46 +730,44 @@ var iconRegistry = {
505
730
 
506
731
  // src/icons/Icon.tsx
507
732
  import { jsx as jsx7 } from "react/jsx-runtime";
508
- function IconSvg({
509
- glyph: GlyphSvg,
510
- className,
511
- size,
512
- tone = "default",
513
- strokeWidth = 1.75,
514
- ...rest
515
- }) {
516
- const tier = useOptionalControlSize();
517
- return /* @__PURE__ */ jsx7(
518
- GlyphSvg,
519
- {
520
- className: cx(Icon_default.root, iconBoxClass(size, tier), textTone_default.tone, className),
521
- "data-tone": tone === "default" ? void 0 : tone,
522
- strokeWidth,
523
- "aria-hidden": "true",
524
- ...rest
525
- }
526
- );
527
- }
528
733
  function Icon({ name, ...rest }) {
529
- return /* @__PURE__ */ jsx7(IconSvg, { glyph: iconRegistry[name], ...rest });
734
+ const Glyph = iconRegistry[name];
735
+ return /* @__PURE__ */ jsx7(Glyph, { ...rest });
530
736
  }
531
737
  function createIcon(glyph) {
532
- function DomainIcon(props) {
533
- return /* @__PURE__ */ jsx7(IconSvg, { glyph, ...props });
738
+ const LucideGlyph = glyph;
739
+ function DomainIcon({
740
+ className,
741
+ size,
742
+ tone,
743
+ animated,
744
+ strokeWidth = 1.75,
745
+ ...rest
746
+ }) {
747
+ const root = useIconRoot({ className, size, tone, animated, motion: "generic" });
748
+ return /* @__PURE__ */ jsx7(
749
+ LucideGlyph,
750
+ {
751
+ strokeWidth,
752
+ "aria-hidden": "true",
753
+ ...root,
754
+ ...rest
755
+ }
756
+ );
534
757
  }
535
758
  DomainIcon.displayName = `Icon(${glyph.displayName ?? "Glyph"})`;
536
759
  return DomainIcon;
537
760
  }
538
761
 
539
762
  // src/components/scroll-container/ScrollContainer.tsx
540
- import * as React7 from "react";
763
+ import * as React9 from "react";
541
764
 
542
765
  // src/hooks/useEdgeOverflow.ts
543
- import * as React6 from "react";
766
+ import * as React8 from "react";
544
767
  var NONE = { start: false, end: false };
545
768
  function useEdgeOverflow(ref, enabled, horizontal) {
546
- const [overflow, setOverflow] = React6.useState(NONE);
547
- React6.useLayoutEffect(() => {
769
+ const [overflow, setOverflow] = React8.useState(NONE);
770
+ React8.useLayoutEffect(() => {
548
771
  const node = ref.current;
549
772
  if (!enabled || !node) return;
550
773
  const update = () => {
@@ -552,6 +775,8 @@ function useEdgeOverflow(ref, enabled, horizontal) {
552
775
  const max = horizontal ? node.scrollWidth - node.clientWidth : node.scrollHeight - node.clientHeight;
553
776
  const start = position > 1;
554
777
  const end = max - position > 1;
778
+ node.style.setProperty("--edge-start", `${Math.max(0, position)}px`);
779
+ node.style.setProperty("--edge-end", `${Math.max(0, max - position)}px`);
555
780
  setOverflow((prev) => prev.start === start && prev.end === end ? prev : { start, end });
556
781
  };
557
782
  let frame = 0;
@@ -613,7 +838,7 @@ function ScrollContainer({
613
838
  ref,
614
839
  ...rest
615
840
  }) {
616
- const innerRef = React7.useRef(null);
841
+ const innerRef = React9.useRef(null);
617
842
  const mergedRef = useMergedRefs(innerRef, ref);
618
843
  const horizontal = axis === "horizontal";
619
844
  const overflow = useEdgeOverflow(innerRef, fade, horizontal);
@@ -725,7 +950,7 @@ var Label_default = {
725
950
  };
726
951
 
727
952
  // src/components/label/Label.tsx
728
- import { jsx as jsx10, jsxs as jsxs3 } from "react/jsx-runtime";
953
+ import { jsx as jsx10, jsxs as jsxs4 } from "react/jsx-runtime";
729
954
  var LABEL_LABELS = { optional: "\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E" };
730
955
  function LabelRoot({
731
956
  className,
@@ -749,7 +974,7 @@ function LabelRoot({
749
974
  "aria-disabled": disabled || void 0,
750
975
  ...rest,
751
976
  ...toDataAttributes({ disabled: disabled || void 0, size }),
752
- children: /* @__PURE__ */ jsxs3(ControlSizeProvider, { value: size, children: [
977
+ children: /* @__PURE__ */ jsxs4(ControlSizeProvider, { value: size, children: [
753
978
  children,
754
979
  required ? /* @__PURE__ */ jsx10("span", { className: Label_default.asterisk, "aria-hidden": "true", children: "*" }) : null,
755
980
  optional ? /* @__PURE__ */ jsx10("span", { className: Label_default.optional, children: labels?.optional ?? LABEL_LABELS.optional }) : null
@@ -774,21 +999,21 @@ var Label = {
774
999
  };
775
1000
 
776
1001
  // src/components/checkbox/Checkbox.tsx
777
- import * as React10 from "react";
1002
+ import * as React12 from "react";
778
1003
 
779
1004
  // src/hooks/useControllableState.ts
780
- import * as React8 from "react";
1005
+ import * as React10 from "react";
781
1006
  function useControllableState({
782
1007
  value,
783
1008
  defaultValue,
784
1009
  onChange
785
1010
  }) {
786
- const [internalValue, setInternalValue] = React8.useState(defaultValue);
1011
+ const [internalValue, setInternalValue] = React10.useState(defaultValue);
787
1012
  const isControlled = value !== void 0;
788
1013
  const currentValue = isControlled ? value : internalValue;
789
- const currentValueRef = React8.useRef(currentValue);
1014
+ const currentValueRef = React10.useRef(currentValue);
790
1015
  currentValueRef.current = currentValue;
791
- const setValue = React8.useCallback(
1016
+ const setValue = React10.useCallback(
792
1017
  (nextValue) => {
793
1018
  const previousValue = currentValueRef.current;
794
1019
  const computedValue = typeof nextValue === "function" ? nextValue(previousValue) : nextValue;
@@ -806,62 +1031,34 @@ function useControllableState({
806
1031
  return [currentValue, setValue];
807
1032
  }
808
1033
 
809
- // src/internal/ChoiceField.module.css
810
- var ChoiceField_default = {
811
- tier: "ChoiceField_tier",
812
- field: "ChoiceField_field",
813
- row: "ChoiceField_row",
814
- controlCell: "ChoiceField_controlCell",
815
- input: "ChoiceField_input",
816
- text: "ChoiceField_text",
817
- support: "ChoiceField_support",
818
- visual: "ChoiceField_visual"
1034
+ // src/internal/CheckMark.module.css
1035
+ var CheckMark_default = {
1036
+ svg: "CheckMark_svg",
1037
+ check: "CheckMark_check",
1038
+ bar: "CheckMark_bar"
819
1039
  };
820
1040
 
821
- // src/internal/ChoiceField.tsx
822
- import { jsx as jsx11, jsxs as jsxs4 } from "react/jsx-runtime";
823
- var choiceInputClass = ChoiceField_default.input;
824
- var choiceVisualClass = ChoiceField_default.visual;
825
- var choiceTierClass = ChoiceField_default.tier;
826
- function ChoiceField({
827
- ids,
828
- size,
829
- state,
830
- disabled,
831
- readOnly = false,
832
- hint,
833
- error,
834
- control,
835
- className,
836
- children
837
- }) {
838
- return /* @__PURE__ */ jsx11(ControlSizeProvider, { value: size, children: /* @__PURE__ */ jsxs4(
839
- "div",
1041
+ // src/internal/CheckMark.tsx
1042
+ import { jsx as jsx11, jsxs as jsxs5 } from "react/jsx-runtime";
1043
+ function CheckMark({ state, className }) {
1044
+ return /* @__PURE__ */ jsxs5(
1045
+ "svg",
840
1046
  {
841
- className: cx(ChoiceField_default.tier, ChoiceField_default.field, className),
842
- ...toDataAttributes({
843
- size,
844
- state,
845
- invalid: ids.invalid || void 0,
846
- disabled: disabled || void 0,
847
- readonly: readOnly || void 0
848
- }),
1047
+ viewBox: "0 0 24 24",
1048
+ className: cx(CheckMark_default.svg, className),
1049
+ "data-state": state,
1050
+ "aria-hidden": "true",
1051
+ focusable: "false",
849
1052
  children: [
850
- /* @__PURE__ */ jsxs4("label", { htmlFor: ids.controlId, className: ChoiceField_default.row, children: [
851
- /* @__PURE__ */ jsx11("span", { className: cx(ChoiceField_default.controlCell, touchTargetClass), children: control }),
852
- children
853
- ] }),
854
- ids.showError ? /* @__PURE__ */ jsx11(Hint.Root, { id: ids.errorId, size, invalid: true, className: ChoiceField_default.support, children: error }) : ids.showHint ? /* @__PURE__ */ jsx11(Hint.Root, { id: ids.hintId, size, disabled, className: ChoiceField_default.support, children: hint }) : null
1053
+ /* @__PURE__ */ jsx11("path", { d: "M5.5 12.5l4.25 4.25L18.5 8", pathLength: 1, className: CheckMark_default.check }),
1054
+ /* @__PURE__ */ jsx11("path", { d: "M7 12h10", pathLength: 1, className: CheckMark_default.bar })
855
1055
  ]
856
- }
857
- ) });
858
- }
859
- function ChoiceLabel({ className, ...rest }) {
860
- return /* @__PURE__ */ jsx11("span", { className: cx(ChoiceField_default.text, className), ...rest });
1056
+ }
1057
+ );
861
1058
  }
862
1059
 
863
1060
  // src/internal/FieldFrame.tsx
864
- import * as React9 from "react";
1061
+ import * as React11 from "react";
865
1062
 
866
1063
  // src/internal/formatLabel.ts
867
1064
  function formatLabel(template, values) {
@@ -871,6 +1068,31 @@ function formatLabel(template, values) {
871
1068
  ).trim();
872
1069
  }
873
1070
 
1071
+ // src/internal/RollingNumber.module.css
1072
+ var RollingNumber_default = {
1073
+ root: "RollingNumber_root",
1074
+ digit: "RollingNumber_digit",
1075
+ char: "RollingNumber_char"
1076
+ };
1077
+
1078
+ // src/internal/RollingNumber.tsx
1079
+ import { jsx as jsx12 } from "react/jsx-runtime";
1080
+ function RollingNumber({ children, className }) {
1081
+ const chars = [...String(children)];
1082
+ return /* @__PURE__ */ jsx12("span", { className: cx(RollingNumber_default.root, className), children: chars.map((char, i) => {
1083
+ const key = chars.length - i;
1084
+ return /\d/.test(char) ? /* @__PURE__ */ jsx12(
1085
+ "span",
1086
+ {
1087
+ className: RollingNumber_default.digit,
1088
+ style: { "--rolling-n": char },
1089
+ children: char
1090
+ },
1091
+ `d${key}`
1092
+ ) : /* @__PURE__ */ jsx12("span", { className: RollingNumber_default.char, children: char }, `c${key}`);
1093
+ }) });
1094
+ }
1095
+
874
1096
  // src/internal/FieldFrame.module.css
875
1097
  var FieldFrame_default = {
876
1098
  root: "FieldFrame_root",
@@ -880,11 +1102,16 @@ var FieldFrame_default = {
880
1102
  body: "FieldFrame_body",
881
1103
  supportText: "FieldFrame_supportText",
882
1104
  support: "FieldFrame_support",
883
- counter: "FieldFrame_counter"
1105
+ shakeSelf: "FieldFrame_shakeSelf",
1106
+ "field-shake-odd": "FieldFrame_field-shake-odd",
1107
+ "field-shake-even": "FieldFrame_field-shake-even",
1108
+ counter: "FieldFrame_counter",
1109
+ leaving: "FieldFrame_leaving",
1110
+ "field-error-leave": "FieldFrame_field-error-leave"
884
1111
  };
885
1112
 
886
1113
  // src/internal/FieldFrame.tsx
887
- import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
1114
+ import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
888
1115
  function hasContent(node) {
889
1116
  return node != null && node !== false && node !== "";
890
1117
  }
@@ -894,7 +1121,7 @@ function useFieldFrame(explicitId, {
894
1121
  error,
895
1122
  invalid
896
1123
  }, ariaDescribedBy) {
897
- const generated = React9.useId();
1124
+ const generated = React11.useId();
898
1125
  const controlId = explicitId ?? generated;
899
1126
  const labelId = `${controlId}-label`;
900
1127
  const hintId = `${controlId}-hint`;
@@ -914,6 +1141,25 @@ function useFieldFrame(explicitId, {
914
1141
  invalid: Boolean(invalid) || showError
915
1142
  };
916
1143
  }
1144
+ function useErrorShake(invalid, error) {
1145
+ const key = !invalid ? null : typeof error === "string" || typeof error === "number" ? String(error) : "invalid";
1146
+ const previous = React11.useRef(key);
1147
+ const [count, setCount] = React11.useState(0);
1148
+ React11.useEffect(() => {
1149
+ if (key !== null && key !== previous.current) setCount((n) => n + 1);
1150
+ previous.current = key;
1151
+ }, [key]);
1152
+ if (count === 0) return void 0;
1153
+ return count % 2 ? "odd" : "even";
1154
+ }
1155
+ function useLeavingError(showError, error) {
1156
+ const last = React11.useRef(error);
1157
+ if (showError) last.current = error;
1158
+ const presence = usePresence(showError, { exitDuration: "fast" });
1159
+ if (showError || !presence.mounted) return null;
1160
+ return { node: last.current, onExitEnd: presence.onExitEnd };
1161
+ }
1162
+ var leavingErrorClass = FieldFrame_default.leaving;
917
1163
  function FieldFrame({
918
1164
  size,
919
1165
  ids,
@@ -933,8 +1179,10 @@ function FieldFrame({
933
1179
  ...rest
934
1180
  }) {
935
1181
  const { showError, showHint } = ids;
936
- const showSupport = showError || showHint || counter != null || reserveSupportRow;
937
- const labelNode = hasContent(label) ? /* @__PURE__ */ jsx12(
1182
+ const leaving = useLeavingError(showError, error);
1183
+ const showSupport = showError || showHint || leaving != null || counter != null || reserveSupportRow;
1184
+ const shake = useErrorShake(ids.invalid, error);
1185
+ const labelNode = hasContent(label) ? /* @__PURE__ */ jsx13(
938
1186
  Label.Root,
939
1187
  {
940
1188
  id: ids.labelId,
@@ -948,7 +1196,7 @@ function FieldFrame({
948
1196
  children: label
949
1197
  }
950
1198
  ) : null;
951
- return /* @__PURE__ */ jsxs5(
1199
+ return /* @__PURE__ */ jsxs6(
952
1200
  "div",
953
1201
  {
954
1202
  ...rest,
@@ -956,22 +1204,34 @@ function FieldFrame({
956
1204
  ...toDataAttributes({
957
1205
  size,
958
1206
  invalid: ids.invalid || void 0,
959
- disabled: disabled || void 0
1207
+ disabled: disabled || void 0,
1208
+ shake
960
1209
  }),
961
1210
  children: [
962
- labelEnd != null ? /* @__PURE__ */ jsxs5("div", { className: FieldFrame_default.labelRow, children: [
1211
+ labelEnd != null ? /* @__PURE__ */ jsxs6("div", { className: FieldFrame_default.labelRow, children: [
963
1212
  labelNode,
964
- /* @__PURE__ */ jsx12("span", { className: FieldFrame_default.labelEnd, children: labelEnd })
1213
+ /* @__PURE__ */ jsx13("span", { className: FieldFrame_default.labelEnd, children: labelEnd })
965
1214
  ] }) : labelNode,
966
- /* @__PURE__ */ jsxs5("div", { className: FieldFrame_default.body, children: [
1215
+ /* @__PURE__ */ jsxs6("div", { className: FieldFrame_default.body, children: [
967
1216
  children,
968
- showSupport ? /* @__PURE__ */ jsxs5(
1217
+ showSupport ? /* @__PURE__ */ jsxs6(
969
1218
  "div",
970
1219
  {
971
1220
  className: FieldFrame_default.support,
972
1221
  ...toDataAttributes({ size, reserve: reserveSupportRow || void 0 }),
973
1222
  children: [
974
- showError ? /* @__PURE__ */ jsx12(Hint.Root, { id: ids.errorId, size, invalid: true, className: FieldFrame_default.supportText, children: error }) : showHint ? /* @__PURE__ */ jsx12(
1223
+ showError ? /* @__PURE__ */ jsx13(Hint.Root, { id: ids.errorId, size, invalid: true, className: FieldFrame_default.supportText, children: error }) : leaving ? /* @__PURE__ */ jsx13(
1224
+ Hint.Root,
1225
+ {
1226
+ size,
1227
+ invalid: true,
1228
+ "aria-hidden": "true",
1229
+ "data-state": "closed",
1230
+ onAnimationEnd: leaving.onExitEnd,
1231
+ className: cx(FieldFrame_default.supportText, FieldFrame_default.leaving),
1232
+ children: leaving.node
1233
+ }
1234
+ ) : showHint ? /* @__PURE__ */ jsx13(
975
1235
  Hint.Root,
976
1236
  {
977
1237
  id: ids.hintId,
@@ -980,7 +1240,7 @@ function FieldFrame({
980
1240
  className: FieldFrame_default.supportText,
981
1241
  children: hint
982
1242
  }
983
- ) : /* @__PURE__ */ jsx12("span", { className: FieldFrame_default.supportText }),
1243
+ ) : /* @__PURE__ */ jsx13("span", { className: FieldFrame_default.supportText }),
984
1244
  counter
985
1245
  ]
986
1246
  }
@@ -991,7 +1251,7 @@ function FieldFrame({
991
1251
  );
992
1252
  }
993
1253
  function FieldCounter({ current, max, size, label, className, ...rest }) {
994
- return /* @__PURE__ */ jsxs5(
1254
+ return /* @__PURE__ */ jsxs6(
995
1255
  "span",
996
1256
  {
997
1257
  ...rest,
@@ -1000,35 +1260,101 @@ function FieldCounter({ current, max, size, label, className, ...rest }) {
1000
1260
  "data-invalid": current > max || void 0,
1001
1261
  "aria-live": "polite",
1002
1262
  children: [
1003
- /* @__PURE__ */ jsxs5("span", { "aria-hidden": "true", children: [
1004
- current,
1263
+ /* @__PURE__ */ jsxs6("span", { "aria-hidden": "true", children: [
1264
+ /* @__PURE__ */ jsx13(RollingNumber, { children: current }),
1005
1265
  "/",
1006
1266
  max
1007
1267
  ] }),
1008
- /* @__PURE__ */ jsx12(VisuallyHidden, { children: formatLabel(label, { current, max }) })
1268
+ /* @__PURE__ */ jsx13(VisuallyHidden, { children: formatLabel(label, { current, max }) })
1009
1269
  ]
1010
1270
  }
1011
1271
  );
1012
1272
  }
1013
1273
 
1274
+ // src/internal/ChoiceField.module.css
1275
+ var ChoiceField_default = {
1276
+ tier: "ChoiceField_tier",
1277
+ field: "ChoiceField_field",
1278
+ row: "ChoiceField_row",
1279
+ controlCell: "ChoiceField_controlCell",
1280
+ input: "ChoiceField_input",
1281
+ text: "ChoiceField_text",
1282
+ support: "ChoiceField_support",
1283
+ visual: "ChoiceField_visual"
1284
+ };
1285
+
1286
+ // src/internal/ChoiceField.tsx
1287
+ import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
1288
+ var choiceInputClass = ChoiceField_default.input;
1289
+ var choiceVisualClass = ChoiceField_default.visual;
1290
+ var choiceTierClass = ChoiceField_default.tier;
1291
+ function ChoiceField({
1292
+ ids,
1293
+ size,
1294
+ state,
1295
+ disabled,
1296
+ readOnly = false,
1297
+ hint,
1298
+ error,
1299
+ control,
1300
+ className,
1301
+ children
1302
+ }) {
1303
+ const shake = useErrorShake(ids.invalid, error);
1304
+ const leaving = useLeavingError(ids.showError, error);
1305
+ return /* @__PURE__ */ jsx14(ControlSizeProvider, { value: size, children: /* @__PURE__ */ jsxs7(
1306
+ "div",
1307
+ {
1308
+ className: cx(ChoiceField_default.tier, ChoiceField_default.field, className),
1309
+ ...toDataAttributes({
1310
+ size,
1311
+ state,
1312
+ invalid: ids.invalid || void 0,
1313
+ disabled: disabled || void 0,
1314
+ readonly: readOnly || void 0
1315
+ }),
1316
+ children: [
1317
+ /* @__PURE__ */ jsxs7(
1318
+ "label",
1319
+ {
1320
+ htmlFor: ids.controlId,
1321
+ className: cx(ChoiceField_default.row, FieldFrame_default.shakeSelf),
1322
+ "data-shake": shake,
1323
+ children: [
1324
+ /* @__PURE__ */ jsx14("span", { className: cx(ChoiceField_default.controlCell, touchTargetClass), children: control }),
1325
+ children
1326
+ ]
1327
+ }
1328
+ ),
1329
+ ids.showError ? /* @__PURE__ */ jsx14(Hint.Root, { id: ids.errorId, size, invalid: true, className: ChoiceField_default.support, children: error }) : leaving ? /* @__PURE__ */ jsx14(
1330
+ Hint.Root,
1331
+ {
1332
+ size,
1333
+ invalid: true,
1334
+ "aria-hidden": "true",
1335
+ "data-state": "closed",
1336
+ onAnimationEnd: leaving.onExitEnd,
1337
+ className: cx(ChoiceField_default.support, leavingErrorClass),
1338
+ children: leaving.node
1339
+ }
1340
+ ) : ids.showHint ? /* @__PURE__ */ jsx14(Hint.Root, { id: ids.hintId, size, disabled, className: ChoiceField_default.support, children: hint }) : null
1341
+ ]
1342
+ }
1343
+ ) });
1344
+ }
1345
+ function ChoiceLabel({ className, ...rest }) {
1346
+ return /* @__PURE__ */ jsx14("span", { className: cx(ChoiceField_default.text, className), ...rest });
1347
+ }
1348
+
1014
1349
  // src/components/checkbox/Checkbox.module.css
1015
1350
  var Checkbox_default = {
1016
1351
  root: "Checkbox_root",
1017
1352
  indicator: "Checkbox_indicator",
1018
- control: "Checkbox_control",
1019
- svg: "Checkbox_svg",
1020
- checkPath: "Checkbox_checkPath",
1021
- indeterminateLine: "Checkbox_indeterminateLine"
1353
+ control: "Checkbox_control"
1022
1354
  };
1023
1355
 
1024
1356
  // src/components/checkbox/Checkbox.tsx
1025
- import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
1026
- function CheckboxMark() {
1027
- return /* @__PURE__ */ jsxs6("svg", { viewBox: "0 0 24 24", className: Checkbox_default.svg, "aria-hidden": "true", focusable: "false", children: [
1028
- /* @__PURE__ */ jsx13("path", { d: "M5.5 12.5l4.25 4.25L18.5 8", pathLength: 1, className: Checkbox_default.checkPath }),
1029
- /* @__PURE__ */ jsx13("path", { d: "M7 12h10", pathLength: 1, className: Checkbox_default.indeterminateLine })
1030
- ] });
1031
- }
1357
+ import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
1032
1358
  function CheckboxRoot({
1033
1359
  id,
1034
1360
  checked: checkedProp,
@@ -1054,12 +1380,12 @@ function CheckboxRoot({
1054
1380
  defaultValue: defaultChecked,
1055
1381
  onChange: onCheckedChange
1056
1382
  });
1057
- const internalRef = React10.useRef(null);
1383
+ const internalRef = React12.useRef(null);
1058
1384
  const mergedRef = useMergedRefs(internalRef, ref);
1059
- React10.useEffect(() => {
1385
+ React12.useEffect(() => {
1060
1386
  if (internalRef.current) internalRef.current.indeterminate = indeterminate;
1061
1387
  }, [indeterminate]);
1062
- return /* @__PURE__ */ jsx13(
1388
+ return /* @__PURE__ */ jsx15(
1063
1389
  ChoiceField,
1064
1390
  {
1065
1391
  ids,
@@ -1070,8 +1396,8 @@ function CheckboxRoot({
1070
1396
  hint,
1071
1397
  error,
1072
1398
  className: cx(Checkbox_default.root, className),
1073
- control: /* @__PURE__ */ jsxs6(Fragment2, { children: [
1074
- /* @__PURE__ */ jsx13(
1399
+ control: /* @__PURE__ */ jsxs8(Fragment3, { children: [
1400
+ /* @__PURE__ */ jsx15(
1075
1401
  "input",
1076
1402
  {
1077
1403
  ...inputRest,
@@ -1089,7 +1415,12 @@ function CheckboxRoot({
1089
1415
  "aria-describedby": ids.describedBy
1090
1416
  }
1091
1417
  ),
1092
- /* @__PURE__ */ jsx13("span", { className: cx(choiceVisualClass, Checkbox_default.control), "aria-hidden": "true", children: /* @__PURE__ */ jsx13(CheckboxMark, {}) })
1418
+ /* @__PURE__ */ jsx15("span", { className: cx(choiceVisualClass, Checkbox_default.control), "aria-hidden": "true", children: /* @__PURE__ */ jsx15(
1419
+ CheckMark,
1420
+ {
1421
+ state: indeterminate ? "indeterminate" : checked ? "checked" : "unchecked"
1422
+ }
1423
+ ) })
1093
1424
  ] }),
1094
1425
  children
1095
1426
  }
@@ -1097,7 +1428,7 @@ function CheckboxRoot({
1097
1428
  }
1098
1429
  CheckboxRoot.displayName = "Checkbox.Root";
1099
1430
  function CheckboxLabel(props) {
1100
- return /* @__PURE__ */ jsx13(ChoiceLabel, { ...props });
1431
+ return /* @__PURE__ */ jsx15(ChoiceLabel, { ...props });
1101
1432
  }
1102
1433
  CheckboxLabel.displayName = "Checkbox.Label";
1103
1434
  function CheckboxIndicator({
@@ -1109,7 +1440,7 @@ function CheckboxIndicator({
1109
1440
  ...rest
1110
1441
  }) {
1111
1442
  const size = useControlSize(sizeProp);
1112
- return /* @__PURE__ */ jsx13(
1443
+ return /* @__PURE__ */ jsx15(
1113
1444
  "span",
1114
1445
  {
1115
1446
  "aria-hidden": "true",
@@ -1126,7 +1457,7 @@ function CheckboxIndicator({
1126
1457
  disabled: disabled || void 0
1127
1458
  }),
1128
1459
  ...rest,
1129
- children: /* @__PURE__ */ jsx13(CheckboxMark, {})
1460
+ children: /* @__PURE__ */ jsx15(CheckMark, { state: indeterminate ? "indeterminate" : checked ? "checked" : "unchecked" })
1130
1461
  }
1131
1462
  );
1132
1463
  }
@@ -1138,7 +1469,7 @@ var Checkbox = {
1138
1469
  };
1139
1470
 
1140
1471
  // src/internal/swatch.tsx
1141
- import * as React11 from "react";
1472
+ import * as React13 from "react";
1142
1473
 
1143
1474
  // src/internal/swatch.module.css
1144
1475
  var swatch_default = {
@@ -1151,7 +1482,7 @@ var swatch_default = {
1151
1482
  };
1152
1483
 
1153
1484
  // src/internal/swatch.tsx
1154
- import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
1485
+ import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
1155
1486
  var COLOR_PRESETS = [
1156
1487
  { value: "#ef4444", label: "\u041A\u0440\u0430\u0441\u043D\u044B\u0439" },
1157
1488
  { value: "#f97316", label: "\u041E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439" },
@@ -1171,7 +1502,7 @@ var COLOR_PRESETS = [
1171
1502
  { value: "#be185d", label: "\u0422\u0451\u043C\u043D\u043E-\u0440\u043E\u0437\u043E\u0432\u044B\u0439" }
1172
1503
  ];
1173
1504
  function useSwatchOptions(presets, allowEmpty, emptyLabel) {
1174
- return React11.useMemo(
1505
+ return React13.useMemo(
1175
1506
  () => [
1176
1507
  ...presets.map((preset) => ({ ...preset, contrast: markContrast(preset.value) })),
1177
1508
  ...allowEmpty ? [{ value: null, label: emptyLabel, contrast: "dark" }] : []
@@ -1182,17 +1513,17 @@ function useSwatchOptions(presets, allowEmpty, emptyLabel) {
1182
1513
  var swatchClass = swatch_default.swatch;
1183
1514
  var swatchTierClass = swatch_default.tier;
1184
1515
  function SwatchFill({ value }) {
1185
- if (value == null) return /* @__PURE__ */ jsx14("span", { "aria-hidden": true, className: swatch_default.checker });
1186
- return /* @__PURE__ */ jsx14("svg", { className: swatch_default.fill, "aria-hidden": "true", viewBox: "0 0 1 1", preserveAspectRatio: "none", children: /* @__PURE__ */ jsx14("rect", { width: "1", height: "1", fill: value }) });
1516
+ if (value == null) return /* @__PURE__ */ jsx16("span", { "aria-hidden": true, className: swatch_default.checker });
1517
+ return /* @__PURE__ */ jsx16("svg", { className: swatch_default.fill, "aria-hidden": "true", viewBox: "0 0 1 1", preserveAspectRatio: "none", children: /* @__PURE__ */ jsx16("rect", { width: "1", height: "1", fill: value }) });
1187
1518
  }
1188
1519
  function SwatchContent({ value, selected }) {
1189
- return /* @__PURE__ */ jsxs7(Fragment3, { children: [
1190
- /* @__PURE__ */ jsx14(SwatchFill, { value }),
1191
- selected ? /* @__PURE__ */ jsx14(Icon, { name: "action.check", strokeWidth: 3, className: swatch_default.check }) : null
1520
+ return /* @__PURE__ */ jsxs9(Fragment4, { children: [
1521
+ /* @__PURE__ */ jsx16(SwatchFill, { value }),
1522
+ /* @__PURE__ */ jsx16(CheckMark, { state: selected ? "checked" : "unchecked", className: swatch_default.check })
1192
1523
  ] });
1193
1524
  }
1194
1525
  function SwatchChip({ value, className, ...rest }) {
1195
- return /* @__PURE__ */ jsx14("span", { ...rest, "aria-hidden": true, className: cx(swatch_default.chip, className), children: /* @__PURE__ */ jsx14(SwatchFill, { value }) });
1526
+ return /* @__PURE__ */ jsx16("span", { ...rest, "aria-hidden": true, className: cx(swatch_default.chip, className), children: /* @__PURE__ */ jsx16(SwatchFill, { value }) });
1196
1527
  }
1197
1528
  function sameColor(a, b) {
1198
1529
  return (a ?? "").trim().toLowerCase() === (b ?? "").trim().toLowerCase();
@@ -1236,7 +1567,7 @@ function markContrast(value) {
1236
1567
  }
1237
1568
 
1238
1569
  // src/components/color-swatches/ColorSwatches.tsx
1239
- import * as React12 from "react";
1570
+ import * as React14 from "react";
1240
1571
 
1241
1572
  // src/internal/rovingFocus.ts
1242
1573
  var PREV = {
@@ -1285,7 +1616,7 @@ var ColorSwatches_default = {
1285
1616
  };
1286
1617
 
1287
1618
  // src/components/color-swatches/ColorSwatches.tsx
1288
- import { jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
1619
+ import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
1289
1620
  var COLOR_SWATCHES_LABELS = {
1290
1621
  group: "\u0426\u0432\u0435\u0442",
1291
1622
  empty: "\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430",
@@ -1330,7 +1661,7 @@ function ColorSwatches({
1330
1661
  const options = useSwatchOptions(presets, allowEmpty, labels.empty);
1331
1662
  const selectedIndex = options.findIndex((option) => sameColor(option.value, value));
1332
1663
  const focusIndex = Math.max(0, selectedIndex);
1333
- const itemRefs = React12.useRef([]);
1664
+ const itemRefs = React14.useRef([]);
1334
1665
  const labelledBy = ariaLabelledBy ?? ids.labelledBy;
1335
1666
  const onKeyDown2 = (event) => {
1336
1667
  const current = itemRefs.current.indexOf(document.activeElement);
@@ -1345,7 +1676,7 @@ function ColorSwatches({
1345
1676
  setValue(options[next].value);
1346
1677
  itemRefs.current[next]?.focus();
1347
1678
  };
1348
- return /* @__PURE__ */ jsx15(
1679
+ return /* @__PURE__ */ jsx17(
1349
1680
  FieldFrame,
1350
1681
  {
1351
1682
  ...rest,
@@ -1360,7 +1691,7 @@ function ColorSwatches({
1360
1691
  optionalLabel: labels.optional,
1361
1692
  group: true,
1362
1693
  className,
1363
- children: /* @__PURE__ */ jsxs8(
1694
+ children: /* @__PURE__ */ jsxs10(
1364
1695
  "div",
1365
1696
  {
1366
1697
  id: ids.controlId,
@@ -1382,7 +1713,7 @@ function ColorSwatches({
1382
1713
  const selected = index === selectedIndex;
1383
1714
  return (
1384
1715
  // biome-ignore lint/a11y/useSemanticElements: a swatch is a styled button in a roving radiogroup; a native radio cannot carry the color fill and check mark
1385
- /* @__PURE__ */ jsx15(
1716
+ /* @__PURE__ */ jsx17(
1386
1717
  "button",
1387
1718
  {
1388
1719
  ref: (el) => {
@@ -1401,13 +1732,13 @@ function ColorSwatches({
1401
1732
  contrast: option.contrast
1402
1733
  }),
1403
1734
  onClick: () => setValue(option.value),
1404
- children: /* @__PURE__ */ jsx15(SwatchContent, { value: option.value, selected })
1735
+ children: /* @__PURE__ */ jsx17(SwatchContent, { value: option.value, selected })
1405
1736
  },
1406
1737
  option.value ?? "empty"
1407
1738
  )
1408
1739
  );
1409
1740
  }),
1410
- name ? /* @__PURE__ */ jsx15("input", { type: "hidden", name, value: value ?? "" }) : null
1741
+ name ? /* @__PURE__ */ jsx17("input", { type: "hidden", name, value: value ?? "" }) : null
1411
1742
  ]
1412
1743
  }
1413
1744
  )
@@ -1425,7 +1756,7 @@ var EmptyPage_default = {
1425
1756
  };
1426
1757
 
1427
1758
  // src/components/empty-page/EmptyPage.tsx
1428
- import { jsx as jsx16 } from "react/jsx-runtime";
1759
+ import { jsx as jsx18 } from "react/jsx-runtime";
1429
1760
  function EmptyPageRoot({
1430
1761
  size = "m",
1431
1762
  layout = "default",
@@ -1433,31 +1764,31 @@ function EmptyPageRoot({
1433
1764
  children,
1434
1765
  ...rest
1435
1766
  }) {
1436
- return /* @__PURE__ */ jsx16(
1767
+ return /* @__PURE__ */ jsx18(
1437
1768
  "div",
1438
1769
  {
1439
1770
  className: cx(EmptyPage_default.root, layout !== "compact" && enterMotion_default.enterBaseChildren, className),
1440
1771
  ...rest,
1441
1772
  ...toDataAttributes({ size, layout: layout === "default" ? void 0 : layout }),
1442
- children: /* @__PURE__ */ jsx16(ControlSizeProvider, { value: size, children })
1773
+ children: /* @__PURE__ */ jsx18(ControlSizeProvider, { value: size, children })
1443
1774
  }
1444
1775
  );
1445
1776
  }
1446
1777
  EmptyPageRoot.displayName = "EmptyPage.Root";
1447
1778
  function EmptyPageIcon({ tone = "neutral", className, ...rest }) {
1448
- return /* @__PURE__ */ jsx16("div", { className: cx(EmptyPage_default.iconWrap, className), "data-tone": tone, ...rest });
1779
+ return /* @__PURE__ */ jsx18("div", { className: cx(EmptyPage_default.iconWrap, className), "data-tone": tone, ...rest });
1449
1780
  }
1450
1781
  EmptyPageIcon.displayName = "EmptyPage.Icon";
1451
1782
  function EmptyPageTitle({ as: Tag = "h2", className, ref, ...rest }) {
1452
- return /* @__PURE__ */ jsx16(Tag, { ref, className: cx(EmptyPage_default.title, className), ...rest });
1783
+ return /* @__PURE__ */ jsx18(Tag, { ref, className: cx(EmptyPage_default.title, className), ...rest });
1453
1784
  }
1454
1785
  EmptyPageTitle.displayName = "EmptyPage.Title";
1455
1786
  function EmptyPageDescription({ className, ...rest }) {
1456
- return /* @__PURE__ */ jsx16("p", { className: cx(EmptyPage_default.description, className), ...rest });
1787
+ return /* @__PURE__ */ jsx18("p", { className: cx(EmptyPage_default.description, className), ...rest });
1457
1788
  }
1458
1789
  EmptyPageDescription.displayName = "EmptyPage.Description";
1459
1790
  function EmptyPageActions({ className, ...rest }) {
1460
- return /* @__PURE__ */ jsx16("div", { className: cx(EmptyPage_default.actions, className), ...rest });
1791
+ return /* @__PURE__ */ jsx18("div", { className: cx(EmptyPage_default.actions, className), ...rest });
1461
1792
  }
1462
1793
  EmptyPageActions.displayName = "EmptyPage.Actions";
1463
1794
  var EmptyPage = {
@@ -1468,16 +1799,208 @@ var EmptyPage = {
1468
1799
  Actions: EmptyPageActions
1469
1800
  };
1470
1801
 
1802
+ // src/components/progress-bar/ProgressBar.tsx
1803
+ import * as React15 from "react";
1804
+
1805
+ // src/internal/progressSegments.ts
1806
+ function resolveValue(value, max) {
1807
+ const top = max !== void 0 && max > 0 ? max : 100;
1808
+ const clamped = Math.min(top, Math.max(Number.isFinite(value) ? value : 0, 0));
1809
+ return {
1810
+ value: clamped,
1811
+ max: top,
1812
+ ratio: clamped / top,
1813
+ percent: Math.round(clamped / top * 100)
1814
+ };
1815
+ }
1816
+ var DEFAULT_PROGRESS_SEGMENTS_LABELS = {
1817
+ empty: "\u041D\u0435\u0442 \u0441\u0435\u0433\u043C\u0435\u043D\u0442\u043E\u0432",
1818
+ allEmpty: "\u0412\u0441\u0435 \u0441\u0435\u0433\u043C\u0435\u043D\u0442\u044B \u043F\u0443\u0441\u0442\u044B"
1819
+ };
1820
+ function nonNegative(n) {
1821
+ return Number.isFinite(n) && n > 0 ? n : 0;
1822
+ }
1823
+ function resolveSegments(input, max, labels) {
1824
+ const segments = input.map((s) => ({ ...s, value: nonNegative(s.value) }));
1825
+ const total = segments.reduce((acc, s) => acc + s.value, 0);
1826
+ const scale = max !== void 0 && max > 0 ? Math.max(max, total) : total;
1827
+ let text;
1828
+ if (segments.length === 0) text = labels.empty;
1829
+ else if (scale <= 0) text = labels.allEmpty;
1830
+ else
1831
+ text = segments.map((s) => {
1832
+ const pct = Math.round(s.value / scale * 100);
1833
+ return s.label ? `${s.label}: ${pct}%` : `${pct}%`;
1834
+ }).join(", ");
1835
+ return {
1836
+ segments,
1837
+ total,
1838
+ scale,
1839
+ rest: scale - total,
1840
+ percent: scale > 0 ? Math.round(total / scale * 100) : 0,
1841
+ text
1842
+ };
1843
+ }
1844
+
1845
+ // src/components/progress-bar/ProgressBar.module.css
1846
+ var ProgressBar_default = {
1847
+ root: "ProgressBar_root",
1848
+ segment: "ProgressBar_segment",
1849
+ header: "ProgressBar_header",
1850
+ label: "ProgressBar_label",
1851
+ value: "ProgressBar_value",
1852
+ native: "ProgressBar_native",
1853
+ bar: "ProgressBar_bar",
1854
+ fill: "ProgressBar_fill",
1855
+ segments: "ProgressBar_segments",
1856
+ rest: "ProgressBar_rest",
1857
+ step: "ProgressBar_step"
1858
+ };
1859
+
1860
+ // src/components/progress-bar/ProgressBar.tsx
1861
+ import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
1862
+ var MIN_STEPS = 2;
1863
+ var MAX_STEPS = 12;
1864
+ function useStepOrder(filled, count) {
1865
+ const prev = React15.useRef(filled);
1866
+ const from = prev.current;
1867
+ React15.useEffect(() => {
1868
+ prev.current = filled;
1869
+ }, [filled]);
1870
+ return Array.from(
1871
+ { length: count },
1872
+ (_, i) => filled >= from ? Math.max(0, i - from) : Math.max(0, from - 1 - i)
1873
+ );
1874
+ }
1875
+ function ProgressBar(props) {
1876
+ const {
1877
+ label,
1878
+ size = "m",
1879
+ showValue = false,
1880
+ className,
1881
+ value: valueProp,
1882
+ max: maxProp,
1883
+ tone: toneProp,
1884
+ segments: segmentsProp,
1885
+ segmentGap = "none",
1886
+ steps = false,
1887
+ labels,
1888
+ "aria-label": ariaLabel,
1889
+ ...rest
1890
+ } = props;
1891
+ const labelId = React15.useId();
1892
+ const descriptionId = React15.useId();
1893
+ const stepResolved = !segmentsProp && steps ? resolveValue(valueProp ?? 0, maxProp) : null;
1894
+ const stepCount = stepResolved ? Math.min(MAX_STEPS, Math.max(MIN_STEPS, Math.round(stepResolved.max))) : 0;
1895
+ const stepFilled = stepResolved ? Math.round(stepResolved.value / stepResolved.max * stepCount) : 0;
1896
+ const stepOrder = useStepOrder(stepFilled, stepCount);
1897
+ let percent;
1898
+ let tone;
1899
+ let bar;
1900
+ if (segmentsProp) {
1901
+ const resolved = resolveSegments(segmentsProp, maxProp, {
1902
+ ...DEFAULT_PROGRESS_SEGMENTS_LABELS,
1903
+ ...labels
1904
+ });
1905
+ const { segments, total, rest: free, text } = resolved;
1906
+ percent = resolved.percent;
1907
+ const named = Boolean(label || ariaLabel);
1908
+ const a11y = named ? {
1909
+ "aria-labelledby": label ? labelId : void 0,
1910
+ "aria-label": label ? void 0 : ariaLabel,
1911
+ "aria-describedby": descriptionId
1912
+ } : { "aria-label": text };
1913
+ bar = /* @__PURE__ */ jsxs11(Fragment5, { children: [
1914
+ named ? /* @__PURE__ */ jsx19(VisuallyHidden, { id: descriptionId, children: text }) : null,
1915
+ /* @__PURE__ */ jsxs11(
1916
+ "div",
1917
+ {
1918
+ className: ProgressBar_default.bar,
1919
+ role: "group",
1920
+ ...a11y,
1921
+ ...toDataAttributes({ "segment-gap": segmentGap }),
1922
+ children: [
1923
+ total > 0 ? /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.segments, style: { flexGrow: total }, children: segments.map((seg, i) => /* @__PURE__ */ jsx19(
1924
+ "span",
1925
+ {
1926
+ className: ProgressBar_default.segment,
1927
+ style: { flexGrow: seg.value },
1928
+ title: seg.label,
1929
+ ...toDataAttributes({ tone: seg.tone ?? "accent" })
1930
+ },
1931
+ i
1932
+ )) }) : null,
1933
+ free > 0 || total === 0 ? /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.rest, style: { flexGrow: free > 0 ? free : 1 } }) : null
1934
+ ]
1935
+ }
1936
+ )
1937
+ ] });
1938
+ } else {
1939
+ const resolved = resolveValue(valueProp ?? 0, maxProp);
1940
+ const { value, max } = resolved;
1941
+ percent = resolved.percent;
1942
+ tone = toneProp ?? "accent";
1943
+ bar = /* @__PURE__ */ jsxs11(Fragment5, { children: [
1944
+ /* @__PURE__ */ jsx19(
1945
+ "progress",
1946
+ {
1947
+ value,
1948
+ max,
1949
+ "aria-labelledby": label ? labelId : void 0,
1950
+ "aria-label": label ? void 0 : ariaLabel,
1951
+ className: ProgressBar_default.native
1952
+ }
1953
+ ),
1954
+ steps ? /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.bar, "aria-hidden": "true", "data-steps": "true", children: stepOrder.map((order, i) => /* @__PURE__ */ jsx19(
1955
+ "span",
1956
+ {
1957
+ className: ProgressBar_default.step,
1958
+ "data-filled": i < stepFilled || void 0,
1959
+ style: { "--pb-step-order": order }
1960
+ },
1961
+ i
1962
+ )) }) : /* @__PURE__ */ jsx19(
1963
+ "span",
1964
+ {
1965
+ className: ProgressBar_default.bar,
1966
+ "aria-hidden": "true",
1967
+ style: { "--pb-ratio": resolved.ratio },
1968
+ children: /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.fill })
1969
+ }
1970
+ )
1971
+ ] });
1972
+ }
1973
+ return /* @__PURE__ */ jsxs11("div", { className: cx(ProgressBar_default.root, className), ...rest, ...toDataAttributes({ size, tone }), children: [
1974
+ label || showValue ? /* @__PURE__ */ jsxs11("div", { className: ProgressBar_default.header, children: [
1975
+ label ? /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.label, id: labelId, children: label }) : null,
1976
+ showValue ? /* @__PURE__ */ jsxs11("span", { className: ProgressBar_default.value, "aria-hidden": "true", children: [
1977
+ percent,
1978
+ "%"
1979
+ ] }) : null
1980
+ ] }) : null,
1981
+ bar
1982
+ ] });
1983
+ }
1984
+
1985
+ // src/components/input/passwordStrength.ts
1986
+ var SHORT = 8;
1987
+ function getPasswordStrength(value) {
1988
+ if (value.length === 0) return 0;
1989
+ const points = Number(/\p{Ll}/u.test(value)) + Number(/\p{Lu}/u.test(value)) + Number(/\p{N}/u.test(value)) + Number(/[^\p{L}\p{N}\s]/u.test(value)) + Number(value.length >= 10) + Number(value.length >= 14);
1990
+ const level = points >= 5 ? 4 : points === 4 ? 3 : points === 3 ? 2 : 1;
1991
+ return value.length < SHORT ? Math.min(level, 2) : level;
1992
+ }
1993
+
1471
1994
  // src/components/input/Input.tsx
1472
- import * as React14 from "react";
1995
+ import * as React17 from "react";
1473
1996
 
1474
1997
  // src/internal/context.ts
1475
- import * as React13 from "react";
1998
+ import * as React16 from "react";
1476
1999
  function createComponentContext(displayName) {
1477
- const Ctx = React13.createContext(null);
2000
+ const Ctx = React16.createContext(null);
1478
2001
  Ctx.displayName = `${displayName}Context`;
1479
2002
  function useComponentContext() {
1480
- const value = React13.useContext(Ctx);
2003
+ const value = React16.useContext(Ctx);
1481
2004
  if (value === null) {
1482
2005
  throw new Error(
1483
2006
  `[prime-ui-kit] \`${displayName}\` sub-component must be used inside \`${displayName}.Root\`.`
@@ -1496,15 +2019,27 @@ var Input_default = {
1496
2019
  field: "Input_field",
1497
2020
  inlineAffix: "Input_inlineAffix",
1498
2021
  icon: "Input_icon",
1499
- action: "Input_action"
2022
+ action: "Input_action",
2023
+ strengthWord: "Input_strengthWord"
1500
2024
  };
1501
2025
 
1502
2026
  // src/components/input/Input.tsx
1503
- import { jsx as jsx17 } from "react/jsx-runtime";
2027
+ import { Fragment as Fragment6, jsx as jsx20, jsxs as jsxs12 } from "react/jsx-runtime";
1504
2028
  var INPUT_LABELS = {
1505
2029
  optional: "\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E",
1506
2030
  clear: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C",
1507
- counter: "{current} \u0438\u0437 {max} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432"
2031
+ counter: "{current} \u0438\u0437 {max} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",
2032
+ strength: "\u041D\u0430\u0434\u0451\u0436\u043D\u043E\u0441\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044F",
2033
+ strengthWeak: "\u0421\u043B\u0430\u0431\u044B\u0439",
2034
+ strengthEasy: "\u041B\u0451\u0433\u043A\u0438\u0439",
2035
+ strengthMedium: "\u0421\u0440\u0435\u0434\u043D\u0438\u0439",
2036
+ strengthHard: "\u0421\u043B\u043E\u0436\u043D\u044B\u0439"
2037
+ };
2038
+ var STRENGTH_TONES = {
2039
+ 1: "danger",
2040
+ 2: "warning",
2041
+ 3: "accent",
2042
+ 4: "success"
1508
2043
  };
1509
2044
  var [InputProvider, useInputContext] = createComponentContext("Input");
1510
2045
  function InputRoot({
@@ -1519,17 +2054,20 @@ function InputRoot({
1519
2054
  counter,
1520
2055
  reserveSupportRow = false,
1521
2056
  id,
2057
+ strength = false,
2058
+ getStrength = getPasswordStrength,
1522
2059
  labels: labelsProp,
1523
2060
  children,
1524
2061
  className,
1525
2062
  ...rest
1526
2063
  }) {
2064
+ const [strengthValue, setStrengthValue] = React17.useState("");
1527
2065
  const size = useControlSize(sizeProp);
1528
2066
  const ids = useFieldFrame(id, { label, hint, error, invalid });
1529
- const labels = React14.useMemo(() => ({ ...INPUT_LABELS, ...labelsProp }), [labelsProp]);
2067
+ const labels = React17.useMemo(() => ({ ...INPUT_LABELS, ...labelsProp }), [labelsProp]);
1530
2068
  const { invalid: isInvalid, controlId: inputId, describedBy } = ids;
1531
- const inputRef = React14.useRef(null);
1532
- const contextValue = React14.useMemo(
2069
+ const inputRef = React17.useRef(null);
2070
+ const contextValue = React17.useMemo(
1533
2071
  () => ({
1534
2072
  size,
1535
2073
  invalid: isInvalid,
@@ -1538,11 +2076,14 @@ function InputRoot({
1538
2076
  inputId,
1539
2077
  inputRef,
1540
2078
  describedBy,
1541
- labels
2079
+ labels,
2080
+ reportValue: strength ? setStrengthValue : null
1542
2081
  }),
1543
- [size, isInvalid, focusRing, required, inputId, describedBy, labels]
2082
+ [size, isInvalid, focusRing, required, inputId, describedBy, labels, strength]
1544
2083
  );
1545
- return /* @__PURE__ */ jsx17(InputProvider, { value: contextValue, children: /* @__PURE__ */ jsx17(ControlSizeProvider, { value: size, children: /* @__PURE__ */ jsx17(
2084
+ const level = strength ? getStrength(strengthValue) : 0;
2085
+ const levelWord = level ? [labels.strengthWeak, labels.strengthEasy, labels.strengthMedium, labels.strengthHard][level - 1] : "";
2086
+ return /* @__PURE__ */ jsx20(InputProvider, { value: contextValue, children: /* @__PURE__ */ jsx20(ControlSizeProvider, { value: size, children: /* @__PURE__ */ jsxs12(
1546
2087
  FieldFrame,
1547
2088
  {
1548
2089
  ...rest,
@@ -1553,18 +2094,45 @@ function InputRoot({
1553
2094
  optional,
1554
2095
  hint,
1555
2096
  error,
1556
- counter,
1557
- reserveSupportRow,
2097
+ counter: strength ? /* @__PURE__ */ jsxs12(Fragment6, { children: [
2098
+ /* @__PURE__ */ jsx20(
2099
+ "span",
2100
+ {
2101
+ className: Input_default.strengthWord,
2102
+ "data-tone": level ? STRENGTH_TONES[level] : void 0,
2103
+ "aria-live": "polite",
2104
+ children: levelWord ? /* @__PURE__ */ jsxs12(Fragment6, { children: [
2105
+ /* @__PURE__ */ jsx20(VisuallyHidden, { children: `${labels.strength}: ` }),
2106
+ /* @__PURE__ */ jsx20(MorphText, { children: levelWord })
2107
+ ] }) : null
2108
+ }
2109
+ ),
2110
+ counter
2111
+ ] }) : counter,
2112
+ reserveSupportRow: reserveSupportRow || strength,
1558
2113
  optionalLabel: labels.optional,
1559
2114
  className: cx(fieldTierClass, Input_default.root, className),
1560
- children
2115
+ children: [
2116
+ children,
2117
+ strength ? /* @__PURE__ */ jsx20(
2118
+ ProgressBar,
2119
+ {
2120
+ steps: true,
2121
+ value: level,
2122
+ max: 4,
2123
+ tone: level ? STRENGTH_TONES[level] : "neutral",
2124
+ size: "xs",
2125
+ "aria-label": labels.strength
2126
+ }
2127
+ ) : null
2128
+ ]
1561
2129
  }
1562
2130
  ) }) });
1563
2131
  }
1564
2132
  InputRoot.displayName = "Input.Root";
1565
2133
  function InputWrapper({ children, className, ...rest }) {
1566
2134
  const { size, invalid, focusRing } = useInputContext();
1567
- return /* @__PURE__ */ jsx17(
2135
+ return /* @__PURE__ */ jsx20(
1568
2136
  "div",
1569
2137
  {
1570
2138
  ...rest,
@@ -1588,10 +2156,23 @@ function InputField({
1588
2156
  ref,
1589
2157
  ...rest
1590
2158
  }) {
1591
- const { inputId, inputRef, invalid, required: requiredCtx, describedBy } = useInputContext();
2159
+ const {
2160
+ inputId,
2161
+ inputRef,
2162
+ invalid,
2163
+ required: requiredCtx,
2164
+ describedBy,
2165
+ reportValue
2166
+ } = useInputContext();
1592
2167
  const setRefs = useMergedRefs(inputRef, ref);
2168
+ const controlled = rest.value;
2169
+ React17.useEffect(() => {
2170
+ if (!reportValue) return;
2171
+ if (controlled !== void 0) reportValue(String(controlled));
2172
+ else if (inputRef.current) reportValue(inputRef.current.value);
2173
+ }, [reportValue, controlled, inputRef]);
1593
2174
  const resolvedDescribedBy = [ariaDescribedBy, describedBy].filter(Boolean).join(" ") || void 0;
1594
- return /* @__PURE__ */ jsx17(
2175
+ return /* @__PURE__ */ jsx20(
1595
2176
  "input",
1596
2177
  {
1597
2178
  ...rest,
@@ -1604,21 +2185,22 @@ function InputField({
1604
2185
  onChange: (event) => {
1605
2186
  onChange?.(event);
1606
2187
  onValueChange?.(event.target.value);
2188
+ reportValue?.(event.target.value);
1607
2189
  }
1608
2190
  }
1609
2191
  );
1610
2192
  }
1611
2193
  InputField.displayName = "Input.Field";
1612
2194
  function InputIcon({ side, children, className, ...rest }) {
1613
- return /* @__PURE__ */ jsx17("span", { ...rest, className: cx(Input_default.icon, className), "data-side": side, "aria-hidden": "true", children });
2195
+ return /* @__PURE__ */ jsx20("span", { ...rest, className: cx(Input_default.icon, className), "data-side": side, "aria-hidden": "true", children });
1614
2196
  }
1615
2197
  InputIcon.displayName = "Input.Icon";
1616
2198
  function InputAffix({ side, children, className, ...rest }) {
1617
- return /* @__PURE__ */ jsx17("div", { ...rest, className: cx(Input_default.affix, className), "data-side": side, "aria-hidden": "true", children });
2199
+ return /* @__PURE__ */ jsx20("div", { ...rest, className: cx(Input_default.affix, className), "data-side": side, "aria-hidden": "true", children });
1618
2200
  }
1619
2201
  InputAffix.displayName = "Input.Affix";
1620
2202
  function InputInlineAffix({ side, children, className, ...rest }) {
1621
- return /* @__PURE__ */ jsx17(
2203
+ return /* @__PURE__ */ jsx20(
1622
2204
  "span",
1623
2205
  {
1624
2206
  ...rest,
@@ -1632,7 +2214,7 @@ function InputInlineAffix({ side, children, className, ...rest }) {
1632
2214
  InputInlineAffix.displayName = "Input.InlineAffix";
1633
2215
  function InputClearButton({ className, onClick: onClick2, ref, ...rest }) {
1634
2216
  const { inputId, inputRef, labels } = useInputContext();
1635
- return /* @__PURE__ */ jsx17(
2217
+ return /* @__PURE__ */ jsx20(
1636
2218
  "button",
1637
2219
  {
1638
2220
  ...rest,
@@ -1645,14 +2227,14 @@ function InputClearButton({ className, onClick: onClick2, ref, ...rest }) {
1645
2227
  onClick2?.(event);
1646
2228
  if (!event.defaultPrevented) inputRef.current?.focus();
1647
2229
  },
1648
- children: /* @__PURE__ */ jsx17(Icon, { name: "action.close" })
2230
+ children: /* @__PURE__ */ jsx20(Icon, { name: "action.close" })
1649
2231
  }
1650
2232
  );
1651
2233
  }
1652
2234
  InputClearButton.displayName = "Input.ClearButton";
1653
2235
  function InputCounter(props) {
1654
2236
  const { size, labels } = useInputContext();
1655
- return /* @__PURE__ */ jsx17(FieldCounter, { ...props, size, label: labels.counter });
2237
+ return /* @__PURE__ */ jsx20(FieldCounter, { ...props, size, label: labels.counter });
1656
2238
  }
1657
2239
  InputCounter.displayName = "Input.Counter";
1658
2240
  var Input = {
@@ -1667,17 +2249,17 @@ var Input = {
1667
2249
  };
1668
2250
 
1669
2251
  // src/internal/imageSlot.tsx
1670
- import * as React16 from "react";
2252
+ import * as React19 from "react";
1671
2253
 
1672
2254
  // src/hooks/useImageStatus.ts
1673
- import * as React15 from "react";
2255
+ import * as React18 from "react";
1674
2256
  function useImageStatus(report, { onLoad, onError } = {}) {
1675
- const [status, setStatus] = React15.useState("loading");
1676
- React15.useLayoutEffect(() => {
2257
+ const [status, setStatus] = React18.useState("loading");
2258
+ React18.useLayoutEffect(() => {
1677
2259
  report("loading");
1678
2260
  return () => report("idle");
1679
2261
  }, [report]);
1680
- const handleLoad = React15.useCallback(
2262
+ const handleLoad = React18.useCallback(
1681
2263
  (event) => {
1682
2264
  setStatus("loaded");
1683
2265
  report("loaded");
@@ -1685,7 +2267,7 @@ function useImageStatus(report, { onLoad, onError } = {}) {
1685
2267
  },
1686
2268
  [onLoad, report]
1687
2269
  );
1688
- const handleError = React15.useCallback(
2270
+ const handleError = React18.useCallback(
1689
2271
  (event) => {
1690
2272
  setStatus("error");
1691
2273
  report("error");
@@ -1697,18 +2279,18 @@ function useImageStatus(report, { onLoad, onError } = {}) {
1697
2279
  }
1698
2280
 
1699
2281
  // src/internal/imageSlot.tsx
1700
- import { jsx as jsx18 } from "react/jsx-runtime";
2282
+ import { jsx as jsx21 } from "react/jsx-runtime";
1701
2283
  function createImageSlot(name, classNames) {
1702
2284
  const [Provider, useSlotContext] = createComponentContext(name);
1703
2285
  function ImageSlotProvider({ children }) {
1704
- const [imageStatus, setImageStatus] = React16.useState("idle");
1705
- const value = React16.useMemo(() => ({ imageStatus, setImageStatus }), [imageStatus]);
1706
- return /* @__PURE__ */ jsx18(Provider, { value, children });
2286
+ const [imageStatus, setImageStatus] = React19.useState("idle");
2287
+ const value = React19.useMemo(() => ({ imageStatus, setImageStatus }), [imageStatus]);
2288
+ return /* @__PURE__ */ jsx21(Provider, { value, children });
1707
2289
  }
1708
2290
  function ImageInner({ src, alt = "", className, onLoad, onError, ...rest }) {
1709
2291
  const { setImageStatus } = useSlotContext();
1710
2292
  const image = useImageStatus(setImageStatus, { onLoad, onError });
1711
- return /* @__PURE__ */ jsx18(
2293
+ return /* @__PURE__ */ jsx21(
1712
2294
  "img",
1713
2295
  {
1714
2296
  src,
@@ -1722,12 +2304,12 @@ function createImageSlot(name, classNames) {
1722
2304
  );
1723
2305
  }
1724
2306
  function Image2(props) {
1725
- return /* @__PURE__ */ jsx18(ImageInner, { ...props }, props.src);
2307
+ return /* @__PURE__ */ jsx21(ImageInner, { ...props }, props.src);
1726
2308
  }
1727
2309
  Image2.displayName = `${name}.Image`;
1728
2310
  function Fallback({ className, ...rest }) {
1729
2311
  const { imageStatus } = useSlotContext();
1730
- return /* @__PURE__ */ jsx18(
2312
+ return /* @__PURE__ */ jsx21(
1731
2313
  "span",
1732
2314
  {
1733
2315
  className: cx(classNames.fallback, className),
@@ -1758,7 +2340,7 @@ var Thumbnail_default = {
1758
2340
  };
1759
2341
 
1760
2342
  // src/components/thumbnail/Thumbnail.tsx
1761
- import { jsx as jsx19 } from "react/jsx-runtime";
2343
+ import { jsx as jsx22 } from "react/jsx-runtime";
1762
2344
  var slot = createImageSlot("Thumbnail", { image: Thumbnail_default.image, fallback: Thumbnail_default.fallback });
1763
2345
  function ThumbnailRoot({
1764
2346
  size = "m",
@@ -1771,7 +2353,7 @@ function ThumbnailRoot({
1771
2353
  children,
1772
2354
  ...rest
1773
2355
  }) {
1774
- return /* @__PURE__ */ jsx19(slot.ImageSlotProvider, { children: /* @__PURE__ */ jsx19(
2356
+ return /* @__PURE__ */ jsx22(slot.ImageSlotProvider, { children: /* @__PURE__ */ jsx22(
1775
2357
  "div",
1776
2358
  {
1777
2359
  className: cx(Thumbnail_default.root, palette_default.hue, className),
@@ -1790,7 +2372,7 @@ function ThumbnailRoot({
1790
2372
  }
1791
2373
  ThumbnailRoot.displayName = "Thumbnail.Root";
1792
2374
  function ThumbnailImage({ fit = "cover", ...rest }) {
1793
- return /* @__PURE__ */ jsx19(slot.Image, { ...rest, "data-fit": fit });
2375
+ return /* @__PURE__ */ jsx22(slot.Image, { ...rest, "data-fit": fit });
1794
2376
  }
1795
2377
  ThumbnailImage.displayName = "Thumbnail.Image";
1796
2378
  var ThumbnailFallback = slot.Fallback;
@@ -1801,10 +2383,10 @@ var Thumbnail = {
1801
2383
  };
1802
2384
 
1803
2385
  // src/components/select/Select.tsx
1804
- import * as React30 from "react";
2386
+ import * as React33 from "react";
1805
2387
 
1806
2388
  // src/internal/listbox.ts
1807
- import * as React17 from "react";
2389
+ import * as React20 from "react";
1808
2390
  var optionDomId = (listboxId, value) => `${listboxId}-opt-${value.replace(/\s+/g, "_")}`;
1809
2391
  function enabledOptions(container) {
1810
2392
  if (!container) return [];
@@ -1829,11 +2411,11 @@ function createStore(initial) {
1829
2411
  };
1830
2412
  }
1831
2413
  function useCreateStore(initial) {
1832
- return React17.useState(() => createStore(initial))[0];
2414
+ return React20.useState(() => createStore(initial))[0];
1833
2415
  }
1834
2416
  function useStoreSlice(store, select) {
1835
2417
  const read = () => select(store.get());
1836
- return React17.useSyncExternalStore(store.subscribe, read, read);
2418
+ return React20.useSyncExternalStore(store.subscribe, read, read);
1837
2419
  }
1838
2420
  function handleListboxKeyDown(event, { items, highlight, onSelect }) {
1839
2421
  if (items.length === 0) return;
@@ -1855,10 +2437,10 @@ function handleListboxKeyDown(event, { items, highlight, onSelect }) {
1855
2437
  }
1856
2438
  var TYPEAHEAD_RESET_MS = 500;
1857
2439
  function useTypeahead() {
1858
- const state = React17.useRef({ buffer: "", timer: 0 });
1859
- React17.useEffect(() => () => window.clearTimeout(state.current.timer), []);
1860
- const isTyping = React17.useCallback(() => state.current.buffer !== "", []);
1861
- const find = React17.useCallback(
2440
+ const state = React20.useRef({ buffer: "", timer: 0 });
2441
+ React20.useEffect(() => () => window.clearTimeout(state.current.timer), []);
2442
+ const isTyping = React20.useCallback(() => state.current.buffer !== "", []);
2443
+ const find = React20.useCallback(
1862
2444
  (key, items, highlighted) => {
1863
2445
  const s = state.current;
1864
2446
  window.clearTimeout(s.timer);
@@ -1880,7 +2462,7 @@ function useTypeahead() {
1880
2462
  }
1881
2463
 
1882
2464
  // src/internal/MenuGroup.tsx
1883
- import * as React18 from "react";
2465
+ import * as React21 from "react";
1884
2466
 
1885
2467
  // src/internal/menu.module.css
1886
2468
  var menu_default = {
@@ -1898,12 +2480,12 @@ var menu_default = {
1898
2480
  };
1899
2481
 
1900
2482
  // src/internal/MenuGroup.tsx
1901
- import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
2483
+ import { jsx as jsx23, jsxs as jsxs13 } from "react/jsx-runtime";
1902
2484
  function MenuGroup({ label, className, children, ...rest }) {
1903
- const labelId = React18.useId();
2485
+ const labelId = React21.useId();
1904
2486
  return (
1905
2487
  // biome-ignore lint/a11y/useSemanticElements: role="group" inside a menu / listbox; <fieldset> is not allowed there
1906
- /* @__PURE__ */ jsxs9(
2488
+ /* @__PURE__ */ jsxs13(
1907
2489
  "div",
1908
2490
  {
1909
2491
  ...rest,
@@ -1911,7 +2493,7 @@ function MenuGroup({ label, className, children, ...rest }) {
1911
2493
  "aria-labelledby": label != null ? labelId : void 0,
1912
2494
  className: cx(menu_default.group, className),
1913
2495
  children: [
1914
- label != null ? /* @__PURE__ */ jsx20("div", { id: labelId, role: "presentation", className: menu_default.groupLabel, children: label }) : null,
2496
+ label != null ? /* @__PURE__ */ jsx23("div", { id: labelId, role: "presentation", className: menu_default.groupLabel, children: label }) : null,
1915
2497
  children
1916
2498
  ]
1917
2499
  }
@@ -1948,11 +2530,11 @@ var overlayMotion_default = {
1948
2530
  };
1949
2531
 
1950
2532
  // src/internal/Portal.tsx
1951
- import * as React19 from "react";
2533
+ import * as React22 from "react";
1952
2534
  import { createPortal } from "react-dom";
1953
2535
  function Portal({ children, container }) {
1954
- const [mounted, setMounted] = React19.useState(false);
1955
- React19.useLayoutEffect(() => {
2536
+ const [mounted, setMounted] = React22.useState(false);
2537
+ React22.useLayoutEffect(() => {
1956
2538
  setMounted(true);
1957
2539
  return () => setMounted(false);
1958
2540
  }, []);
@@ -1967,8 +2549,28 @@ var sheet_default = {
1967
2549
  swipeX: "sheet_swipeX"
1968
2550
  };
1969
2551
 
2552
+ // src/internal/surfaceDepth.tsx
2553
+ import * as React23 from "react";
2554
+ var SurfaceDepthContext = React23.createContext(0);
2555
+ SurfaceDepthContext.displayName = "SurfaceDepthContext";
2556
+ function nextSurfaceDepth(depth) {
2557
+ if (typeof depth === "number") return Math.min(depth + 1, 4);
2558
+ if (depth === "tinted") return 1;
2559
+ return depth === "floating" ? "floating-1" : "floating-2";
2560
+ }
2561
+ function useNestedSurfaceDepth() {
2562
+ return nextSurfaceDepth(React23.useContext(SurfaceDepthContext));
2563
+ }
2564
+ var SurfaceDepthProvider = SurfaceDepthContext.Provider;
2565
+ var StageDepthContext = React23.createContext(0);
2566
+ StageDepthContext.displayName = "StageDepthContext";
2567
+ var StageDepthProvider = StageDepthContext.Provider;
2568
+ function useStageDepth() {
2569
+ return React23.useContext(StageDepthContext);
2570
+ }
2571
+
1970
2572
  // src/internal/overlay/layerStack.ts
1971
- import * as React20 from "react";
2573
+ import * as React24 from "react";
1972
2574
 
1973
2575
  // src/internal/overlay/focus.ts
1974
2576
  var FOCUSABLE = [
@@ -2089,22 +2691,22 @@ function push(entry) {
2089
2691
  if (stack.length === 0) listen(false);
2090
2692
  };
2091
2693
  }
2092
- var LayerContext = React20.createContext(null);
2694
+ var LayerContext = React24.createContext(null);
2093
2695
  var LayerProvider = LayerContext.Provider;
2094
2696
  function useLayer(open, options) {
2095
- const parent = React20.useContext(LayerContext);
2096
- const [entry] = React20.useState(() => ({ parent, trap: false, ...options }));
2697
+ const parent = React24.useContext(LayerContext);
2698
+ const [entry] = React24.useState(() => ({ parent, trap: false, ...options }));
2097
2699
  entry.parent = parent;
2098
2700
  entry.refs = options.refs;
2099
2701
  entry.dismiss = options.dismiss;
2100
2702
  entry.trap = options.trap ?? false;
2101
2703
  entry.onDismiss = options.onDismiss;
2102
- React20.useLayoutEffect(() => open ? push(entry) : void 0, [open, entry]);
2704
+ React24.useLayoutEffect(() => open ? push(entry) : void 0, [open, entry]);
2103
2705
  return entry;
2104
2706
  }
2105
2707
 
2106
2708
  // src/internal/overlay/FloatingPanel.tsx
2107
- import { Fragment as Fragment4, jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
2709
+ import { Fragment as Fragment7, jsx as jsx24, jsxs as jsxs14 } from "react/jsx-runtime";
2108
2710
  function FloatingPanel({
2109
2711
  floating,
2110
2712
  size,
@@ -2129,6 +2731,7 @@ function FloatingPanel({
2129
2731
  className
2130
2732
  ),
2131
2733
  "data-size": size,
2734
+ ...surface && !sheet ? { "data-depth": "floating" } : null,
2132
2735
  ...sheet ? null : {
2133
2736
  "data-state": presence.state,
2134
2737
  "data-side": floating.side,
@@ -2139,9 +2742,9 @@ function FloatingPanel({
2139
2742
  floating.onKeyDown(event);
2140
2743
  }
2141
2744
  };
2142
- const panel = scroll ? /* @__PURE__ */ jsx21(ScrollContainer, { ...props, ref: panelRef, children }) : /* @__PURE__ */ jsx21("div", { ...props, ref: panelRef, children });
2143
- return /* @__PURE__ */ jsx21(Portal, { children: /* @__PURE__ */ jsx21(LayerProvider, { value: floating.layer, children: /* @__PURE__ */ jsx21(ControlSizeProvider, { value: size, children: sheet ? /* @__PURE__ */ jsxs10(Fragment4, { children: [
2144
- /* @__PURE__ */ jsx21(
2745
+ const panel = scroll ? /* @__PURE__ */ jsx24(ScrollContainer, { ...props, ref: panelRef, children }) : /* @__PURE__ */ jsx24("div", { ...props, ref: panelRef, children });
2746
+ return /* @__PURE__ */ jsx24(Portal, { children: /* @__PURE__ */ jsx24(LayerProvider, { value: floating.layer, children: /* @__PURE__ */ jsx24(SurfaceDepthProvider, { value: "floating", children: /* @__PURE__ */ jsx24(ControlSizeProvider, { value: size, children: sheet ? /* @__PURE__ */ jsxs14(Fragment7, { children: [
2747
+ /* @__PURE__ */ jsx24(
2145
2748
  "div",
2146
2749
  {
2147
2750
  role: "presentation",
@@ -2149,7 +2752,7 @@ function FloatingPanel({
2149
2752
  "data-state": presence.state
2150
2753
  }
2151
2754
  ),
2152
- /* @__PURE__ */ jsxs10(
2755
+ /* @__PURE__ */ jsxs14(
2153
2756
  "div",
2154
2757
  {
2155
2758
  ref: floating.panelRef,
@@ -2159,29 +2762,30 @@ function FloatingPanel({
2159
2762
  overlayMotion_default.sheet,
2160
2763
  sheet_default.swipeY
2161
2764
  ),
2765
+ "data-depth": "floating",
2162
2766
  "data-state": presence.state,
2163
2767
  onAnimationEnd: presence.onExitEnd,
2164
2768
  onPointerDown: floating.onSheetPointerDown,
2165
2769
  children: [
2166
- /* @__PURE__ */ jsx21("div", { className: sheet_default.handle, "data-swipe-handle": "", "aria-hidden": "true" }),
2770
+ /* @__PURE__ */ jsx24("div", { className: sheet_default.handle, "data-swipe-handle": "", "aria-hidden": "true" }),
2167
2771
  panel
2168
2772
  ]
2169
2773
  }
2170
2774
  )
2171
- ] }) : panel }) }) });
2775
+ ] }) : panel }) }) }) });
2172
2776
  }
2173
2777
  function FloatingTrigger({ triggerProps, children, ...forwarded }) {
2174
- return /* @__PURE__ */ jsx21(Slot, { ...forwarded, children: /* @__PURE__ */ jsx21(Slot, { ...triggerProps, children }) });
2778
+ return /* @__PURE__ */ jsx24(Slot, { ...forwarded, children: /* @__PURE__ */ jsx24(Slot, { ...triggerProps, children }) });
2175
2779
  }
2176
2780
 
2177
2781
  // src/internal/overlay/useFloatingLayer.ts
2178
- import * as React27 from "react";
2782
+ import * as React30 from "react";
2179
2783
 
2180
2784
  // src/hooks/useMediaQuery.ts
2181
- import * as React21 from "react";
2785
+ import * as React25 from "react";
2182
2786
  var COMPACT_QUERY = "(max-width: 639px)";
2183
2787
  function useMediaQuery(query, enabled = true) {
2184
- const subscribe = React21.useCallback(
2788
+ const subscribe = React25.useCallback(
2185
2789
  (onChange) => {
2186
2790
  if (!enabled || typeof window === "undefined" || !window.matchMedia) return () => {
2187
2791
  };
@@ -2192,18 +2796,18 @@ function useMediaQuery(query, enabled = true) {
2192
2796
  [enabled, query]
2193
2797
  );
2194
2798
  const getSnapshot = () => enabled && typeof window !== "undefined" && !!window.matchMedia ? window.matchMedia(query).matches : false;
2195
- return React21.useSyncExternalStore(subscribe, getSnapshot, () => false);
2799
+ return React25.useSyncExternalStore(subscribe, getSnapshot, () => false);
2196
2800
  }
2197
2801
 
2198
2802
  // src/hooks/usePosition.ts
2199
- import * as React23 from "react";
2803
+ import * as React27 from "react";
2200
2804
 
2201
2805
  // src/internal/AnchorRectContext.tsx
2202
- import * as React22 from "react";
2203
- var AnchorRectContext = React22.createContext(null);
2806
+ import * as React26 from "react";
2807
+ var AnchorRectContext = React26.createContext(null);
2204
2808
  var AnchorRectProvider = AnchorRectContext.Provider;
2205
2809
  function useAnchorRectResolver() {
2206
- return React22.useContext(AnchorRectContext);
2810
+ return React26.useContext(AnchorRectContext);
2207
2811
  }
2208
2812
 
2209
2813
  // src/internal/layoutPxFromPrimitives.ts
@@ -2328,11 +2932,11 @@ function usePosition(enabled, anchorRef, layerRef, {
2328
2932
  offsetToken = "--prime-panel-offset",
2329
2933
  arrowInset
2330
2934
  } = {}) {
2331
- const [attached, setAttached] = React23.useState(false);
2332
- const [resolvedSide, setResolvedSide] = React23.useState(preferredSide);
2935
+ const [attached, setAttached] = React27.useState(false);
2936
+ const [resolvedSide, setResolvedSide] = React27.useState(preferredSide);
2333
2937
  const resolveAnchorRect = useAnchorRectResolver();
2334
- const metricsRef = React23.useRef(null);
2335
- const update = React23.useCallback(
2938
+ const metricsRef = React27.useRef(null);
2939
+ const update = React27.useCallback(
2336
2940
  (remeasure) => {
2337
2941
  const anchor = anchorRef.current;
2338
2942
  const layer = layerRef.current;
@@ -2386,9 +2990,9 @@ function usePosition(enabled, anchorRef, layerRef, {
2386
2990
  resolveAnchorRect
2387
2991
  ]
2388
2992
  );
2389
- const updateRef = React23.useRef(update);
2993
+ const updateRef = React27.useRef(update);
2390
2994
  updateRef.current = update;
2391
- const attachLayer = React23.useCallback(
2995
+ const attachLayer = React27.useCallback(
2392
2996
  (node) => {
2393
2997
  layerRef.current = node;
2394
2998
  setAttached(node !== null);
@@ -2396,10 +3000,10 @@ function usePosition(enabled, anchorRef, layerRef, {
2396
3000
  [layerRef]
2397
3001
  );
2398
3002
  const active = enabled && attached;
2399
- React23.useLayoutEffect(() => {
3003
+ React27.useLayoutEffect(() => {
2400
3004
  if (active) update(true);
2401
3005
  }, [active, update]);
2402
- React23.useLayoutEffect(() => {
3006
+ React27.useLayoutEffect(() => {
2403
3007
  if (!active) return;
2404
3008
  let frame = 0;
2405
3009
  let remeasure = false;
@@ -2433,57 +3037,8 @@ function usePosition(enabled, anchorRef, layerRef, {
2433
3037
  return { side: resolvedSide, attachLayer };
2434
3038
  }
2435
3039
 
2436
- // src/hooks/usePresence.ts
2437
- import * as React24 from "react";
2438
- var DURATION_FALLBACK_MS = {
2439
- fast: 230,
2440
- base: 380,
2441
- slow: 570
2442
- };
2443
- var TIMEOUT_SLACK_MS = 50;
2444
- function prefersReducedMotion() {
2445
- return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
2446
- }
2447
- function parseDurationMs(raw) {
2448
- const value = raw.trim();
2449
- if (value === "") return null;
2450
- const n = Number.parseFloat(value);
2451
- if (Number.isNaN(n)) return null;
2452
- if (value.endsWith("ms")) return n;
2453
- if (value.endsWith("s")) return n * 1e3;
2454
- return null;
2455
- }
2456
- function motionDurationMs(token) {
2457
- if (typeof document === "undefined") return DURATION_FALLBACK_MS[token];
2458
- const raw = getComputedStyle(document.documentElement).getPropertyValue(
2459
- `--prime-motion-duration-${token}`
2460
- );
2461
- return parseDurationMs(raw) ?? DURATION_FALLBACK_MS[token];
2462
- }
2463
- function exitTimeoutMs(token) {
2464
- return motionDurationMs(token) + TIMEOUT_SLACK_MS;
2465
- }
2466
- function usePresence(open, options = {}) {
2467
- const { exitDuration = "base" } = options;
2468
- const [mounted, setMounted] = React24.useState(open);
2469
- if (open && !mounted) setMounted(true);
2470
- if (!open && mounted && prefersReducedMotion()) setMounted(false);
2471
- const openRef = React24.useRef(open);
2472
- openRef.current = open;
2473
- React24.useEffect(() => {
2474
- if (open || !mounted) return;
2475
- const id = window.setTimeout(() => setMounted(false), exitTimeoutMs(exitDuration));
2476
- return () => window.clearTimeout(id);
2477
- }, [open, mounted, exitDuration]);
2478
- const onExitEnd = React24.useCallback((event) => {
2479
- if (event.target !== event.currentTarget) return;
2480
- if (!openRef.current) setMounted(false);
2481
- }, []);
2482
- return { mounted: open || mounted, state: open ? "open" : "closed", onExitEnd };
2483
- }
2484
-
2485
3040
  // src/hooks/useScrollLock.ts
2486
- import * as React25 from "react";
3041
+ import * as React28 from "react";
2487
3042
  var lockCount = 0;
2488
3043
  var saved = null;
2489
3044
  function lockScroll() {
@@ -2508,7 +3063,7 @@ function unlockScroll() {
2508
3063
  }
2509
3064
  }
2510
3065
  function useScrollLock(enabled) {
2511
- React25.useEffect(() => {
3066
+ React28.useEffect(() => {
2512
3067
  if (!enabled) return;
2513
3068
  lockScroll();
2514
3069
  return unlockScroll;
@@ -2516,7 +3071,7 @@ function useScrollLock(enabled) {
2516
3071
  }
2517
3072
 
2518
3073
  // src/hooks/useSwipeDismiss.ts
2519
- import * as React26 from "react";
3074
+ import * as React29 from "react";
2520
3075
  var SLOP_PX = 8;
2521
3076
  var DISTANCE_RATIO = 0.3;
2522
3077
  var FLICK_VELOCITY = 0.5;
@@ -2544,11 +3099,11 @@ function useSwipeDismiss({
2544
3099
  touchAnywhere = false,
2545
3100
  onProgress
2546
3101
  }) {
2547
- const optionsRef = React26.useRef({ direction, onDismiss, handle, touchAnywhere, onProgress });
3102
+ const optionsRef = React29.useRef({ direction, onDismiss, handle, touchAnywhere, onProgress });
2548
3103
  optionsRef.current = { direction, onDismiss, handle, touchAnywhere, onProgress };
2549
- const cleanupRef = React26.useRef(null);
2550
- React26.useEffect(() => () => cleanupRef.current?.(), []);
2551
- const onPointerDown2 = React26.useCallback(
3104
+ const cleanupRef = React29.useRef(null);
3105
+ React29.useEffect(() => () => cleanupRef.current?.(), []);
3106
+ const onPointerDown2 = React29.useCallback(
2552
3107
  (event) => {
2553
3108
  if (!enabled || event.defaultPrevented || !event.isPrimary || event.button !== 0) return;
2554
3109
  const { direction: direction2, handle: handle2, touchAnywhere: touchAnywhere2 } = optionsRef.current;
@@ -2655,24 +3210,24 @@ function useFloatingLayer({
2655
3210
  const sheet = useMediaQuery(COMPACT_QUERY, sheetOption);
2656
3211
  const presence = usePresence(open, { exitDuration: sheet ? "base" : exitDuration });
2657
3212
  const mounted = presence.mounted && (open || !skipExit);
2658
- const contentRef = React27.useRef(null);
3213
+ const contentRef = React30.useRef(null);
2659
3214
  const position = usePosition(mounted && !sheet, triggerRef, contentRef, positionOptions);
2660
3215
  useScrollLock(open && sheet);
2661
- const [panel, setPanel] = React27.useState(null);
3216
+ const [panel, setPanel] = React30.useState(null);
2662
3217
  const { attachLayer } = position;
2663
- const panelRef = React27.useCallback(
3218
+ const panelRef = React30.useCallback(
2664
3219
  (node) => {
2665
3220
  attachLayer(node);
2666
3221
  setPanel(node);
2667
3222
  },
2668
3223
  [attachLayer]
2669
3224
  );
2670
- const outsideRef = React27.useRef(false);
2671
- const close = React27.useCallback(() => {
3225
+ const outsideRef = React30.useRef(false);
3226
+ const close = React30.useCallback(() => {
2672
3227
  outsideRef.current = false;
2673
3228
  onOpenChange(false);
2674
3229
  }, [onOpenChange]);
2675
- const dismissOutside = React27.useCallback(() => {
3230
+ const dismissOutside = React30.useCallback(() => {
2676
3231
  outsideRef.current = true;
2677
3232
  onOpenChange(false);
2678
3233
  }, [onOpenChange]);
@@ -2696,7 +3251,7 @@ function useFloatingLayer({
2696
3251
  onDismiss
2697
3252
  });
2698
3253
  const passive = dismiss === "none";
2699
- React27.useEffect(() => {
3254
+ React30.useEffect(() => {
2700
3255
  if (!open || !panel || passive) return;
2701
3256
  outsideRef.current = false;
2702
3257
  if (focusOnOpen) focusInto(panel);
@@ -2761,10 +3316,10 @@ var Select_default = {
2761
3316
  };
2762
3317
 
2763
3318
  // src/components/select/SelectItem.tsx
2764
- import * as React29 from "react";
3319
+ import * as React32 from "react";
2765
3320
 
2766
3321
  // src/internal/HighlightMatch.tsx
2767
- import * as React28 from "react";
3322
+ import * as React31 from "react";
2768
3323
 
2769
3324
  // src/internal/HighlightMatch.module.css
2770
3325
  var HighlightMatch_default = {
@@ -2772,7 +3327,7 @@ var HighlightMatch_default = {
2772
3327
  };
2773
3328
 
2774
3329
  // src/internal/HighlightMatch.tsx
2775
- import { Fragment as Fragment5, jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
3330
+ import { Fragment as Fragment8, jsx as jsx25, jsxs as jsxs15 } from "react/jsx-runtime";
2776
3331
  function matchIndex(text, query) {
2777
3332
  if (!query) return -1;
2778
3333
  return text.toLowerCase().indexOf(query.toLowerCase());
@@ -2780,18 +3335,18 @@ function matchIndex(text, query) {
2780
3335
  function HighlightMatch({ text, query }) {
2781
3336
  const q = query.trim();
2782
3337
  const at = matchIndex(text, q);
2783
- if (at < 0) return /* @__PURE__ */ jsx22(Fragment5, { children: text });
2784
- return /* @__PURE__ */ jsxs11("span", { children: [
3338
+ if (at < 0) return /* @__PURE__ */ jsx25(Fragment8, { children: text });
3339
+ return /* @__PURE__ */ jsxs15("span", { children: [
2785
3340
  text.slice(0, at),
2786
- /* @__PURE__ */ jsx22("mark", { className: HighlightMatch_default.match, children: text.slice(at, at + q.length) }),
3341
+ /* @__PURE__ */ jsx25("mark", { className: HighlightMatch_default.match, children: text.slice(at, at + q.length) }),
2787
3342
  text.slice(at + q.length)
2788
3343
  ] });
2789
3344
  }
2790
3345
  function highlightChildren(children, query) {
2791
3346
  if (!query.trim()) return children;
2792
- return React28.Children.map(
3347
+ return React31.Children.map(
2793
3348
  children,
2794
- (child) => typeof child === "string" || typeof child === "number" ? /* @__PURE__ */ jsx22(HighlightMatch, { text: String(child), query }) : child
3349
+ (child) => typeof child === "string" || typeof child === "number" ? /* @__PURE__ */ jsx25(HighlightMatch, { text: String(child), query }) : child
2795
3350
  );
2796
3351
  }
2797
3352
 
@@ -2825,24 +3380,24 @@ function createItemRegistry() {
2825
3380
  var [SelectProvider, useSelectContext] = createComponentContext("Select");
2826
3381
 
2827
3382
  // src/components/select/SelectItem.tsx
2828
- import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
3383
+ import { jsx as jsx26, jsxs as jsxs16 } from "react/jsx-runtime";
2829
3384
  var MEDIA_SIZE = { xs: "xs", s: "xs", m: "s", l: "s", xl: "m" };
2830
3385
  function textOf(node) {
2831
3386
  if (node == null || typeof node === "boolean") return "";
2832
3387
  if (typeof node === "string" || typeof node === "number") return String(node);
2833
3388
  if (Array.isArray(node)) return node.map(textOf).join("");
2834
- if (React29.isValidElement(node))
3389
+ if (React32.isValidElement(node))
2835
3390
  return textOf(node.props.children);
2836
3391
  return "";
2837
3392
  }
2838
3393
  function SelectItemIcon({ className, ...rest }) {
2839
- return /* @__PURE__ */ jsx23("span", { "aria-hidden": "true", className: cx(menu_default.itemIcon, className), ...rest });
3394
+ return /* @__PURE__ */ jsx26("span", { "aria-hidden": "true", className: cx(menu_default.itemIcon, className), ...rest });
2840
3395
  }
2841
3396
  SelectItemIcon.displayName = "Select.ItemIcon";
2842
- var OptionQueryContext = React29.createContext("");
3397
+ var OptionQueryContext = React32.createContext("");
2843
3398
  function SelectItemText({ children, className, ...rest }) {
2844
- const query = React29.useContext(OptionQueryContext);
2845
- return /* @__PURE__ */ jsx23("span", { ...rest, className: cx(Select_default.itemTitle, className), children: highlightChildren(children, query) });
3399
+ const query = React32.useContext(OptionQueryContext);
3400
+ return /* @__PURE__ */ jsx26("span", { ...rest, className: cx(Select_default.itemTitle, className), children: highlightChildren(children, query) });
2846
3401
  }
2847
3402
  SelectItemText.displayName = "Select.ItemText";
2848
3403
  function SelectItemDescription({
@@ -2850,12 +3405,12 @@ function SelectItemDescription({
2850
3405
  className,
2851
3406
  ...rest
2852
3407
  }) {
2853
- const query = React29.useContext(OptionQueryContext);
2854
- return /* @__PURE__ */ jsx23("span", { ...rest, className: cx(Select_default.itemDescription, className), children: highlightChildren(children, query) });
3408
+ const query = React32.useContext(OptionQueryContext);
3409
+ return /* @__PURE__ */ jsx26("span", { ...rest, className: cx(Select_default.itemDescription, className), children: highlightChildren(children, query) });
2855
3410
  }
2856
3411
  SelectItemDescription.displayName = "Select.ItemDescription";
2857
3412
  function SelectItemMeta({ children, className, ...rest }) {
2858
- return /* @__PURE__ */ jsx23("span", { ...rest, className: cx(Select_default.itemMeta, className), children });
3413
+ return /* @__PURE__ */ jsx26("span", { ...rest, className: cx(Select_default.itemMeta, className), children });
2859
3414
  }
2860
3415
  SelectItemMeta.displayName = "Select.ItemMeta";
2861
3416
  function splitItemChildren(children) {
@@ -2868,11 +3423,11 @@ function splitItemChildren(children) {
2868
3423
  description: ""
2869
3424
  };
2870
3425
  let plain = "";
2871
- for (const child of React29.Children.toArray(children)) {
2872
- if (!React29.isValidElement(child)) {
3426
+ for (const child of React32.Children.toArray(children)) {
3427
+ if (!React32.isValidElement(child)) {
2873
3428
  plain += textOf(child);
2874
3429
  parts.body.push(child);
2875
- } else if (child.type === React29.Fragment) {
3430
+ } else if (child.type === React32.Fragment) {
2876
3431
  const inner = splitItemChildren(child.props.children);
2877
3432
  parts.leading.push(...inner.leading);
2878
3433
  parts.body.push(...inner.body);
@@ -2902,7 +3457,7 @@ function splitItemChildren(children) {
2902
3457
  }
2903
3458
  function sizeMedia(leading, size) {
2904
3459
  return leading.map(
2905
- (node) => React29.isValidElement(node) && node.type === Thumbnail.Root ? React29.cloneElement(node, {
3460
+ (node) => React32.isValidElement(node) && node.type === Thumbnail.Root ? React32.cloneElement(node, {
2906
3461
  size: node.props.size ?? MEDIA_SIZE[size],
2907
3462
  className: cx(Select_default.media, node.props.className),
2908
3463
  "aria-hidden": true
@@ -2924,7 +3479,7 @@ function SelectItem({
2924
3479
  const haystack = normalize(`${resolvedLabel} ${parts.description} ${keywords ?? ""}`);
2925
3480
  const isSelected = selected.includes(value);
2926
3481
  const isHighlighted = useStoreSlice(highlight, (current) => current === value);
2927
- React29.useLayoutEffect(
3482
+ React32.useLayoutEffect(
2928
3483
  () => registry.register(value, resolvedLabel, haystack),
2929
3484
  [registry, value, resolvedLabel, haystack]
2930
3485
  );
@@ -2933,7 +3488,7 @@ function SelectItem({
2933
3488
  return (
2934
3489
  // biome-ignore lint/a11y/useFocusableInteractive: focus stays on the listbox / search (aria-activedescendant)
2935
3490
  // biome-ignore lint/a11y/useKeyWithClickEvents: the keyboard is handled on the listbox
2936
- /* @__PURE__ */ jsxs12(
3491
+ /* @__PURE__ */ jsxs16(
2937
3492
  "div",
2938
3493
  {
2939
3494
  ref,
@@ -2957,11 +3512,11 @@ function SelectItem({
2957
3512
  rich: parts.rich || void 0
2958
3513
  }),
2959
3514
  children: [
2960
- multiple ? /* @__PURE__ */ jsx23(Checkbox.Indicator, { checked: isSelected, disabled, size: stepDown(size) }) : null,
3515
+ multiple ? /* @__PURE__ */ jsx26(Checkbox.Indicator, { checked: isSelected, disabled, size: stepDown(size) }) : null,
2961
3516
  sizeMedia(parts.leading, size),
2962
- /* @__PURE__ */ jsx23("span", { className: Select_default.itemText, children: /* @__PURE__ */ jsx23(OptionQueryContext.Provider, { value: query, children: highlightChildren(parts.body, query) }) }),
3517
+ /* @__PURE__ */ jsx26("span", { className: Select_default.itemText, children: /* @__PURE__ */ jsx26(OptionQueryContext.Provider, { value: query, children: highlightChildren(parts.body, query) }) }),
2963
3518
  parts.meta,
2964
- multiple ? null : /* @__PURE__ */ jsx23("span", { className: menu_default.check, "aria-hidden": "true", children: isSelected ? /* @__PURE__ */ jsx23(Icon, { name: "action.check" }) : null })
3519
+ multiple ? null : /* @__PURE__ */ jsx26("span", { className: menu_default.check, "aria-hidden": "true", children: isSelected ? /* @__PURE__ */ jsx26(Icon, { name: "action.check" }) : null })
2965
3520
  ]
2966
3521
  }
2967
3522
  )
@@ -2970,7 +3525,7 @@ function SelectItem({
2970
3525
  SelectItem.displayName = "Select.Item";
2971
3526
 
2972
3527
  // src/components/select/Select.tsx
2973
- import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
3528
+ import { jsx as jsx27, jsxs as jsxs17 } from "react/jsx-runtime";
2974
3529
  var SELECT_LABELS = {
2975
3530
  search: "\u041F\u043E\u0438\u0441\u043A",
2976
3531
  empty: "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E",
@@ -3007,14 +3562,14 @@ function SelectRoot(props) {
3007
3562
  ...rest
3008
3563
  } = props;
3009
3564
  const multiple = props.multiple === true;
3010
- const labels = React30.useMemo(() => ({ ...SELECT_LABELS, ...labelsProp }), [labelsProp]);
3565
+ const labels = React33.useMemo(() => ({ ...SELECT_LABELS, ...labelsProp }), [labelsProp]);
3011
3566
  const ids = useFieldFrame(id, { hint, error, invalid });
3012
3567
  const [value, setValue] = useControllableState({
3013
3568
  value: props.value,
3014
3569
  defaultValue: props.defaultValue ?? (multiple ? [] : void 0),
3015
3570
  onChange: props.onValueChange
3016
3571
  });
3017
- const selected = React30.useMemo(
3572
+ const selected = React33.useMemo(
3018
3573
  () => Array.isArray(value) ? value : value ? [value] : [],
3019
3574
  [value]
3020
3575
  );
@@ -3024,11 +3579,11 @@ function SelectRoot(props) {
3024
3579
  onChange: onOpenChange
3025
3580
  });
3026
3581
  const highlight = useCreateStore(void 0);
3027
- const [registry] = React30.useState(createItemRegistry);
3028
- const [query, setQuery] = React30.useState("");
3029
- const triggerRef = React30.useRef(null);
3582
+ const [registry] = React33.useState(createItemRegistry);
3583
+ const [query, setQuery] = React33.useState("");
3584
+ const triggerRef = React33.useRef(null);
3030
3585
  if (!isOpen && query !== "") setQuery("");
3031
- const pick = React30.useCallback(
3586
+ const pick = React33.useCallback(
3032
3587
  (optionValue) => {
3033
3588
  if (multiple) {
3034
3589
  setValue((prev) => {
@@ -3042,8 +3597,8 @@ function SelectRoot(props) {
3042
3597
  },
3043
3598
  [multiple, setValue, setOpen]
3044
3599
  );
3045
- const clear = React30.useCallback(() => setValue(multiple ? [] : ""), [multiple, setValue]);
3046
- const context = React30.useMemo(
3600
+ const clear = React33.useCallback(() => setValue(multiple ? [] : ""), [multiple, setValue]);
3601
+ const context = React33.useMemo(
3047
3602
  () => ({
3048
3603
  size,
3049
3604
  invalid: ids.invalid,
@@ -3092,7 +3647,7 @@ function SelectRoot(props) {
3092
3647
  labels
3093
3648
  ]
3094
3649
  );
3095
- return /* @__PURE__ */ jsx24(
3650
+ return /* @__PURE__ */ jsx27(
3096
3651
  FieldFrame,
3097
3652
  {
3098
3653
  ...rest,
@@ -3106,7 +3661,7 @@ function SelectRoot(props) {
3106
3661
  disabled,
3107
3662
  optionalLabel: labels.optional,
3108
3663
  className,
3109
- children: /* @__PURE__ */ jsx24(SelectProvider, { value: context, children: /* @__PURE__ */ jsx24(ControlSizeProvider, { value: size, children }) })
3664
+ children: /* @__PURE__ */ jsx27(SelectProvider, { value: context, children: /* @__PURE__ */ jsx27(ControlSizeProvider, { value: size, children }) })
3110
3665
  }
3111
3666
  );
3112
3667
  }
@@ -3140,7 +3695,7 @@ function SelectTrigger({
3140
3695
  } = useSelectContext();
3141
3696
  const mergedRef = useMergedRefs(triggerRef, ref);
3142
3697
  const showClear = clearable && selected.length > 0 && !disabled && !loading;
3143
- return /* @__PURE__ */ jsxs13(
3698
+ return /* @__PURE__ */ jsxs17(
3144
3699
  "button",
3145
3700
  {
3146
3701
  ...rest,
@@ -3181,11 +3736,11 @@ function SelectTrigger({
3181
3736
  "focus-ring": focusRing ? void 0 : false
3182
3737
  }),
3183
3738
  children: [
3184
- /* @__PURE__ */ jsx24("span", { className: Select_default.triggerMain, children }),
3739
+ /* @__PURE__ */ jsx27("span", { className: Select_default.triggerMain, children }),
3185
3740
  showClear ? (
3186
3741
  // A segment, not a button: interactive content inside a <button> is invalid. The keyboard
3187
3742
  // clears with Delete / Backspace on the trigger.
3188
- /* @__PURE__ */ jsx24(
3743
+ /* @__PURE__ */ jsx27(
3189
3744
  "span",
3190
3745
  {
3191
3746
  className: Select_default.clear,
@@ -3197,11 +3752,11 @@ function SelectTrigger({
3197
3752
  event.stopPropagation();
3198
3753
  clear();
3199
3754
  },
3200
- children: /* @__PURE__ */ jsx24(Icon, { name: "action.close" })
3755
+ children: /* @__PURE__ */ jsx27(Icon, { name: "action.close" })
3201
3756
  }
3202
3757
  )
3203
3758
  ) : null,
3204
- /* @__PURE__ */ jsx24("span", { className: Select_default.chevron, "aria-hidden": "true", children: loading ? /* @__PURE__ */ jsx24(Spinner, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx24(Icon, { name: "nav.chevronDown" }) })
3759
+ /* @__PURE__ */ jsx27("span", { className: Select_default.chevron, "aria-hidden": "true", children: loading ? /* @__PURE__ */ jsx27(Spinner, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx27(Icon, { name: "nav.chevronDown" }) })
3205
3760
  ]
3206
3761
  }
3207
3762
  );
@@ -3213,7 +3768,7 @@ function SelectValue({ renderValue, className, ...rest }) {
3213
3768
  if (selected.length > 0 && renderValue && !multiple) {
3214
3769
  const value = selected[0] ?? "";
3215
3770
  const parts = splitItemChildren(renderValue({ value, label: text }));
3216
- return /* @__PURE__ */ jsxs13(
3771
+ return /* @__PURE__ */ jsxs17(
3217
3772
  "span",
3218
3773
  {
3219
3774
  ...rest,
@@ -3221,12 +3776,12 @@ function SelectValue({ renderValue, className, ...rest }) {
3221
3776
  ...toDataAttributes({ rich: parts.rich || void 0 }),
3222
3777
  children: [
3223
3778
  sizeMedia(parts.leading, size),
3224
- /* @__PURE__ */ jsx24("span", { className: Select_default.valueBody, children: parts.body })
3779
+ /* @__PURE__ */ jsx27("span", { className: Select_default.valueBody, children: parts.body })
3225
3780
  ]
3226
3781
  }
3227
3782
  );
3228
3783
  }
3229
- return /* @__PURE__ */ jsx24(
3784
+ return /* @__PURE__ */ jsx27(
3230
3785
  "span",
3231
3786
  {
3232
3787
  ...rest,
@@ -3238,7 +3793,7 @@ function SelectValue({ renderValue, className, ...rest }) {
3238
3793
  }
3239
3794
  SelectValue.displayName = "Select.Value";
3240
3795
  function SelectTriggerIcon({ className, ...rest }) {
3241
- return /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", className: cx(Select_default.triggerIcon, className), ...rest });
3796
+ return /* @__PURE__ */ jsx27("span", { "aria-hidden": "true", className: cx(Select_default.triggerIcon, className), ...rest });
3242
3797
  }
3243
3798
  SelectTriggerIcon.displayName = "Select.TriggerIcon";
3244
3799
  function SelectContent({ searchable = false, className, children, ...rest }) {
@@ -3258,7 +3813,7 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
3258
3813
  labels,
3259
3814
  registry
3260
3815
  } = useSelectContext();
3261
- const listboxRef = React30.useRef(null);
3816
+ const listboxRef = React33.useRef(null);
3262
3817
  const floating = useFloatingLayer({
3263
3818
  open: isOpen,
3264
3819
  onOpenChange: setOpen,
@@ -3289,9 +3844,9 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
3289
3844
  }
3290
3845
  handleListboxKeyDown(event, { items, highlight, onSelect: pick });
3291
3846
  };
3292
- if (!floating.mounted) return /* @__PURE__ */ jsx24("div", { hidden: true, children });
3847
+ if (!floating.mounted) return /* @__PURE__ */ jsx27("div", { hidden: true, children });
3293
3848
  const activeDescendant = isOpen && highlighted !== void 0 ? optionDomId(listboxId, highlighted) : void 0;
3294
- return /* @__PURE__ */ jsxs13(
3849
+ return /* @__PURE__ */ jsxs17(
3295
3850
  FloatingPanel,
3296
3851
  {
3297
3852
  ...rest,
@@ -3303,9 +3858,9 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
3303
3858
  children: [
3304
3859
  searchable ? (
3305
3860
  // The permanent focus of the panel: no ring, the caret is the indicator (foundation §7).
3306
- /* @__PURE__ */ jsxs13("div", { className: cx(menu_default.searchRow, Select_default.search), "data-focus-ring": "false", children: [
3307
- /* @__PURE__ */ jsx24(Icon, { name: "action.search", size: "s" }),
3308
- /* @__PURE__ */ jsx24(
3861
+ /* @__PURE__ */ jsxs17("div", { className: cx(menu_default.searchRow, Select_default.search), "data-focus-ring": "false", children: [
3862
+ /* @__PURE__ */ jsx27(Icon, { name: "action.search", size: "s" }),
3863
+ /* @__PURE__ */ jsx27(
3309
3864
  "input",
3310
3865
  {
3311
3866
  type: "text",
@@ -3324,11 +3879,11 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
3324
3879
  )
3325
3880
  ] })
3326
3881
  ) : null,
3327
- loading ? /* @__PURE__ */ jsxs13("div", { className: Select_default.status, role: "status", children: [
3328
- /* @__PURE__ */ jsx24(Spinner, { "aria-hidden": "true" }),
3882
+ loading ? /* @__PURE__ */ jsxs17("div", { className: Select_default.status, role: "status", children: [
3883
+ /* @__PURE__ */ jsx27(Spinner, { "aria-hidden": "true" }),
3329
3884
  labels.loading
3330
3885
  ] }) : null,
3331
- /* @__PURE__ */ jsx24(
3886
+ /* @__PURE__ */ jsx27(
3332
3887
  ScrollContainer,
3333
3888
  {
3334
3889
  ref: listboxRef,
@@ -3344,11 +3899,11 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
3344
3899
  children
3345
3900
  }
3346
3901
  ),
3347
- isEmpty && !loading ? /* @__PURE__ */ jsxs13(EmptyPage.Root, { layout: "compact", role: "status", children: [
3348
- /* @__PURE__ */ jsx24(EmptyPage.Title, { as: "p", children: labels.empty }),
3349
- query !== "" && labels.emptyHint ? /* @__PURE__ */ jsx24(EmptyPage.Description, { children: labels.emptyHint }) : null
3902
+ isEmpty && !loading ? /* @__PURE__ */ jsxs17(EmptyPage.Root, { layout: "compact", role: "status", children: [
3903
+ /* @__PURE__ */ jsx27(EmptyPage.Title, { as: "p", children: labels.empty }),
3904
+ query !== "" && labels.emptyHint ? /* @__PURE__ */ jsx27(EmptyPage.Description, { children: labels.emptyHint }) : null
3350
3905
  ] }) : null,
3351
- /* @__PURE__ */ jsx24(HighlightOnOpen, { listboxRef, highlight })
3906
+ /* @__PURE__ */ jsx27(HighlightOnOpen, { listboxRef, highlight })
3352
3907
  ]
3353
3908
  }
3354
3909
  );
@@ -3359,9 +3914,9 @@ function HighlightOnOpen({
3359
3914
  highlight
3360
3915
  }) {
3361
3916
  const { isOpen, query, selected } = useSelectContext();
3362
- const selectedRef = React30.useRef(selected);
3917
+ const selectedRef = React33.useRef(selected);
3363
3918
  selectedRef.current = selected;
3364
- React30.useLayoutEffect(() => {
3919
+ React33.useLayoutEffect(() => {
3365
3920
  if (!isOpen) return;
3366
3921
  const options = enabledOptions(listboxRef.current);
3367
3922
  const first = options.find((item) => selectedRef.current.includes(item.dataset.value ?? ""));
@@ -3369,17 +3924,17 @@ function HighlightOnOpen({
3369
3924
  first?.scrollIntoView?.({ block: "nearest" });
3370
3925
  return () => highlight.set(void 0);
3371
3926
  }, [isOpen, listboxRef, highlight]);
3372
- React30.useLayoutEffect(() => {
3927
+ React33.useLayoutEffect(() => {
3373
3928
  if (query !== "") highlight.set(enabledOptions(listboxRef.current)[0]?.dataset.value);
3374
3929
  }, [query, listboxRef, highlight]);
3375
3930
  return null;
3376
3931
  }
3377
3932
  function SelectGroup({ className, ...rest }) {
3378
- return /* @__PURE__ */ jsx24(MenuGroup, { ...rest, className: cx(Select_default.group, className) });
3933
+ return /* @__PURE__ */ jsx27(MenuGroup, { ...rest, className: cx(Select_default.group, className) });
3379
3934
  }
3380
3935
  SelectGroup.displayName = "Select.Group";
3381
3936
  function SelectSeparator({ className, ...rest }) {
3382
- return /* @__PURE__ */ jsx24(Divider, { ...rest, className: cx(menu_default.separator, Select_default.separator, className) });
3937
+ return /* @__PURE__ */ jsx27(Divider, { ...rest, className: cx(menu_default.separator, Select_default.separator, className) });
3383
3938
  }
3384
3939
  SelectSeparator.displayName = "Select.Separator";
3385
3940
  var Select = {
@@ -3398,21 +3953,20 @@ var Select = {
3398
3953
  };
3399
3954
 
3400
3955
  export {
3401
- ControlSizeProvider,
3402
- useOptionalControlSize,
3403
- useControlSize,
3404
- cx,
3405
3956
  toDataAttributes,
3406
3957
  fieldSurfaceClass,
3407
3958
  fieldTierClass,
3408
3959
  fieldTriggerClass,
3409
3960
  iconLayout,
3961
+ prefersReducedMotion,
3962
+ motionDurationMs,
3963
+ exitTimeoutMs,
3964
+ usePresence,
3965
+ visuallyHiddenClass,
3966
+ VisuallyHidden,
3410
3967
  useMergedRefs,
3411
3968
  Slot,
3412
3969
  touchTargetBlockClass,
3413
- textTone_default,
3414
- visuallyHiddenClass,
3415
- VisuallyHidden,
3416
3970
  Spinner,
3417
3971
  Button,
3418
3972
  Divider,
@@ -3421,12 +3975,16 @@ export {
3421
3975
  useEdgeOverflow,
3422
3976
  ScrollContainer,
3423
3977
  palette_default,
3978
+ RollingNumber,
3424
3979
  createComponentContext,
3425
3980
  createImageSlot,
3426
3981
  useControllableState,
3427
3982
  overlayMotion_default,
3428
3983
  Portal,
3429
3984
  sheet_default,
3985
+ useNestedSurfaceDepth,
3986
+ SurfaceDepthProvider,
3987
+ useStageDepth,
3430
3988
  focusInto,
3431
3989
  focusBack,
3432
3990
  activeElement,
@@ -3439,10 +3997,6 @@ export {
3439
3997
  AnchorRectProvider,
3440
3998
  readCssLengthPx,
3441
3999
  getViewportPadPx,
3442
- prefersReducedMotion,
3443
- motionDurationMs,
3444
- exitTimeoutMs,
3445
- usePresence,
3446
4000
  useScrollLock,
3447
4001
  useSwipeDismiss,
3448
4002
  useFloatingLayer,
@@ -3457,15 +4011,15 @@ export {
3457
4011
  textTones,
3458
4012
  enterMotion_default,
3459
4013
  Hint,
3460
- choiceInputClass,
3461
- choiceVisualClass,
3462
- ChoiceField,
3463
- ChoiceLabel,
3464
4014
  Label,
3465
4015
  formatLabel,
3466
4016
  useFieldFrame,
3467
4017
  FieldFrame,
3468
4018
  FieldCounter,
4019
+ choiceInputClass,
4020
+ choiceVisualClass,
4021
+ ChoiceField,
4022
+ ChoiceLabel,
3469
4023
  Checkbox,
3470
4024
  COLOR_PRESETS,
3471
4025
  useSwatchOptions,
@@ -3487,6 +4041,11 @@ export {
3487
4041
  handleListboxKeyDown,
3488
4042
  menu_default,
3489
4043
  MenuGroup,
4044
+ resolveValue,
4045
+ DEFAULT_PROGRESS_SEGMENTS_LABELS,
4046
+ resolveSegments,
4047
+ ProgressBar,
4048
+ getPasswordStrength,
3490
4049
  Input,
3491
4050
  Thumbnail,
3492
4051
  Select