plass-ui 0.0.1 → 1.0.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 (408) hide show
  1. package/dist/components/accordion/PlAccordion.d.ts +98 -0
  2. package/dist/components/accordion/PlAccordion.js +131 -0
  3. package/dist/components/accordion/index.d.ts +2 -0
  4. package/dist/components/accordion/index.js +1 -0
  5. package/dist/components/alert/PlAlert.d.ts +50 -0
  6. package/dist/components/alert/PlAlert.js +109 -0
  7. package/dist/components/alert/index.d.ts +2 -0
  8. package/dist/components/alert/index.js +1 -0
  9. package/dist/components/animate-appear/PlAnimateAppear.d.ts +55 -0
  10. package/dist/components/animate-appear/PlAnimateAppear.js +71 -0
  11. package/dist/components/animate-appear/index.d.ts +2 -0
  12. package/dist/components/animate-appear/index.js +1 -0
  13. package/dist/components/animate-blink/PlAnimateBlink.d.ts +30 -0
  14. package/dist/components/animate-blink/PlAnimateBlink.js +47 -0
  15. package/dist/components/animate-blink/index.d.ts +2 -0
  16. package/dist/components/animate-blink/index.js +1 -0
  17. package/dist/components/animate-fade/PlAnimateFade.d.ts +35 -0
  18. package/dist/components/animate-fade/PlAnimateFade.js +48 -0
  19. package/dist/components/animate-fade/index.d.ts +2 -0
  20. package/dist/components/animate-fade/index.js +1 -0
  21. package/dist/components/animate-grow/PlAnimateGrow.d.ts +45 -0
  22. package/dist/components/animate-grow/PlAnimateGrow.js +49 -0
  23. package/dist/components/animate-grow/index.d.ts +2 -0
  24. package/dist/components/animate-grow/index.js +1 -0
  25. package/dist/components/animate-headline/PlAnimateHeadline.d.ts +55 -0
  26. package/dist/components/animate-headline/PlAnimateHeadline.js +120 -0
  27. package/dist/components/animate-headline/index.d.ts +2 -0
  28. package/dist/components/animate-headline/index.js +1 -0
  29. package/dist/components/animate-lighting/PlAnimateLighting.d.ts +67 -0
  30. package/dist/components/animate-lighting/PlAnimateLighting.js +65 -0
  31. package/dist/components/animate-lighting/index.d.ts +2 -0
  32. package/dist/components/animate-lighting/index.js +1 -0
  33. package/dist/components/animate-marquee/PlAnimateMarquee.d.ts +65 -0
  34. package/dist/components/animate-marquee/PlAnimateMarquee.js +94 -0
  35. package/dist/components/animate-marquee/index.d.ts +2 -0
  36. package/dist/components/animate-marquee/index.js +1 -0
  37. package/dist/components/animate-rotate/PlAnimateRotate.d.ts +52 -0
  38. package/dist/components/animate-rotate/PlAnimateRotate.js +50 -0
  39. package/dist/components/animate-rotate/index.d.ts +2 -0
  40. package/dist/components/animate-rotate/index.js +1 -0
  41. package/dist/components/animate-slide/PlAnimateSlide.d.ts +47 -0
  42. package/dist/components/animate-slide/PlAnimateSlide.js +49 -0
  43. package/dist/components/animate-slide/index.d.ts +2 -0
  44. package/dist/components/animate-slide/index.js +1 -0
  45. package/dist/components/animate-typing/PlAnimateTyping.d.ts +56 -0
  46. package/dist/components/animate-typing/PlAnimateTyping.js +177 -0
  47. package/dist/components/animate-typing/index.d.ts +2 -0
  48. package/dist/components/animate-typing/index.js +1 -0
  49. package/dist/components/animate-zoom/PlAnimateZoom.d.ts +37 -0
  50. package/dist/components/animate-zoom/PlAnimateZoom.js +45 -0
  51. package/dist/components/animate-zoom/index.d.ts +2 -0
  52. package/dist/components/animate-zoom/index.js +1 -0
  53. package/dist/components/aspect-ratio/PlAspectRatio.d.ts +64 -0
  54. package/dist/components/aspect-ratio/PlAspectRatio.js +58 -0
  55. package/dist/components/aspect-ratio/index.d.ts +2 -0
  56. package/dist/components/aspect-ratio/index.js +1 -0
  57. package/dist/components/avatar/PlAvatar.d.ts +102 -0
  58. package/dist/components/avatar/PlAvatar.js +121 -0
  59. package/dist/components/avatar/index.d.ts +2 -0
  60. package/dist/components/avatar/index.js +1 -0
  61. package/dist/components/badge/PlBadge.d.ts +86 -0
  62. package/dist/components/badge/PlBadge.js +168 -0
  63. package/dist/components/badge/index.d.ts +2 -0
  64. package/dist/components/badge/index.js +1 -0
  65. package/dist/components/blockquote/PlBlockquote.d.ts +64 -0
  66. package/dist/components/blockquote/PlBlockquote.js +112 -0
  67. package/dist/components/blockquote/index.d.ts +2 -0
  68. package/dist/components/blockquote/index.js +1 -0
  69. package/dist/components/bottom-navigation/PlBottomNavigation.d.ts +111 -0
  70. package/dist/components/bottom-navigation/PlBottomNavigation.js +141 -0
  71. package/dist/components/bottom-navigation/index.d.ts +2 -0
  72. package/dist/components/bottom-navigation/index.js +1 -0
  73. package/dist/components/box/PlBox.d.ts +50 -0
  74. package/dist/components/box/PlBox.js +46 -0
  75. package/dist/components/box/index.d.ts +2 -0
  76. package/dist/components/box/index.js +1 -0
  77. package/dist/components/breadcrumb/PlBreadcrumb.d.ts +138 -0
  78. package/dist/components/breadcrumb/PlBreadcrumb.js +201 -0
  79. package/dist/components/breadcrumb/index.d.ts +2 -0
  80. package/dist/components/breadcrumb/index.js +1 -0
  81. package/dist/components/button/{Button.d.ts → PlButton.d.ts} +3 -3
  82. package/dist/components/button/PlButton.js +196 -0
  83. package/dist/components/button/index.d.ts +2 -2
  84. package/dist/components/button/index.js +1 -1
  85. package/dist/components/button-group/PlButtonGroup.d.ts +32 -0
  86. package/dist/components/button-group/PlButtonGroup.js +64 -0
  87. package/dist/components/button-group/index.d.ts +2 -0
  88. package/dist/components/button-group/index.js +1 -0
  89. package/dist/components/card/PlCard.d.ts +81 -0
  90. package/dist/components/card/PlCard.js +102 -0
  91. package/dist/components/card/index.d.ts +2 -0
  92. package/dist/components/card/index.js +1 -0
  93. package/dist/components/carousel/PlCarousel.d.ts +78 -0
  94. package/dist/components/carousel/PlCarousel.js +177 -0
  95. package/dist/components/carousel/index.d.ts +2 -0
  96. package/dist/components/carousel/index.js +1 -0
  97. package/dist/components/chat-bubble/PlChatBubble.d.ts +127 -0
  98. package/dist/components/chat-bubble/PlChatBubble.js +206 -0
  99. package/dist/components/chat-bubble/index.d.ts +2 -0
  100. package/dist/components/chat-bubble/index.js +1 -0
  101. package/dist/components/checkbox/PlCheckbox.d.ts +39 -0
  102. package/dist/components/checkbox/PlCheckbox.js +100 -0
  103. package/dist/components/checkbox/index.d.ts +2 -0
  104. package/dist/components/checkbox/index.js +1 -0
  105. package/dist/components/chip/PlChip.d.ts +55 -0
  106. package/dist/components/chip/PlChip.js +144 -0
  107. package/dist/components/chip/index.d.ts +2 -0
  108. package/dist/components/chip/index.js +1 -0
  109. package/dist/components/collapsible/PlCollapsible.d.ts +84 -0
  110. package/dist/components/collapsible/PlCollapsible.js +65 -0
  111. package/dist/components/collapsible/index.d.ts +2 -0
  112. package/dist/components/collapsible/index.js +1 -0
  113. package/dist/components/combobox/PlCombobox.d.ts +140 -0
  114. package/dist/components/combobox/PlCombobox.js +199 -0
  115. package/dist/components/combobox/index.d.ts +2 -0
  116. package/dist/components/combobox/index.js +1 -0
  117. package/dist/components/container/PlContainer.d.ts +66 -0
  118. package/dist/components/container/PlContainer.js +47 -0
  119. package/dist/components/container/index.d.ts +2 -0
  120. package/dist/components/container/index.js +1 -0
  121. package/dist/components/date-picker/PlDatePicker.d.ts +73 -0
  122. package/dist/components/date-picker/PlDatePicker.js +87 -0
  123. package/dist/components/date-picker/index.d.ts +2 -0
  124. package/dist/components/date-picker/index.js +1 -0
  125. package/dist/components/date-range-picker/PlDateRangePicker.d.ts +91 -0
  126. package/dist/components/date-range-picker/PlDateRangePicker.js +152 -0
  127. package/dist/components/date-range-picker/index.d.ts +2 -0
  128. package/dist/components/date-range-picker/index.js +1 -0
  129. package/dist/components/date-time-picker/PlDateTimePicker.d.ts +74 -0
  130. package/dist/components/date-time-picker/PlDateTimePicker.js +106 -0
  131. package/dist/components/date-time-picker/index.d.ts +2 -0
  132. package/dist/components/date-time-picker/index.js +1 -0
  133. package/dist/components/divider/PlDivider.d.ts +73 -0
  134. package/dist/components/divider/PlDivider.js +107 -0
  135. package/dist/components/divider/index.d.ts +2 -0
  136. package/dist/components/divider/index.js +1 -0
  137. package/dist/components/drawer/PlDrawer.d.ts +144 -0
  138. package/dist/components/drawer/PlDrawer.js +190 -0
  139. package/dist/components/drawer/index.d.ts +2 -0
  140. package/dist/components/drawer/index.js +1 -0
  141. package/dist/components/file-picker/PlFilePicker.d.ts +105 -0
  142. package/dist/components/file-picker/PlFilePicker.js +274 -0
  143. package/dist/components/file-picker/index.d.ts +2 -0
  144. package/dist/components/file-picker/index.js +1 -0
  145. package/dist/components/floating-bottom-navigation/PlFloatingBottomNavigation.d.ts +118 -0
  146. package/dist/components/floating-bottom-navigation/PlFloatingBottomNavigation.js +291 -0
  147. package/dist/components/floating-bottom-navigation/index.d.ts +2 -0
  148. package/dist/components/floating-bottom-navigation/index.js +1 -0
  149. package/dist/components/grid/PlGrid.d.ts +67 -0
  150. package/dist/components/grid/PlGrid.js +51 -0
  151. package/dist/components/grid/PlGridItem.d.ts +50 -0
  152. package/dist/components/grid/PlGridItem.js +34 -0
  153. package/dist/components/grid/index.d.ts +4 -0
  154. package/dist/components/grid/index.js +2 -0
  155. package/dist/components/highlight/PlHighlight.d.ts +90 -0
  156. package/dist/components/highlight/PlHighlight.js +185 -0
  157. package/dist/components/highlight/index.d.ts +2 -0
  158. package/dist/components/highlight/index.js +1 -0
  159. package/dist/components/hot-keys/PlHotKeys.d.ts +93 -0
  160. package/dist/components/hot-keys/PlHotKeys.js +294 -0
  161. package/dist/components/hot-keys/index.d.ts +2 -0
  162. package/dist/components/hot-keys/index.js +1 -0
  163. package/dist/components/icon/PlIcon.d.ts +62 -0
  164. package/dist/components/icon/PlIcon.js +58 -0
  165. package/dist/components/icon/index.d.ts +2 -0
  166. package/dist/components/icon/index.js +1 -0
  167. package/dist/components/icon-button/PlIconButton.d.ts +39 -0
  168. package/dist/components/icon-button/PlIconButton.js +37 -0
  169. package/dist/components/icon-button/index.d.ts +2 -0
  170. package/dist/components/icon-button/index.js +1 -0
  171. package/dist/components/list/PlList.d.ts +82 -0
  172. package/dist/components/list/PlList.js +160 -0
  173. package/dist/components/list/index.d.ts +2 -0
  174. package/dist/components/list/index.js +1 -0
  175. package/dist/components/menu/PlMenu.d.ts +210 -0
  176. package/dist/components/menu/PlMenu.js +209 -0
  177. package/dist/components/menu/index.d.ts +2 -0
  178. package/dist/components/menu/index.js +1 -0
  179. package/dist/components/modal/PlModal.d.ts +112 -0
  180. package/dist/components/modal/PlModal.js +150 -0
  181. package/dist/components/modal/index.d.ts +2 -0
  182. package/dist/components/modal/index.js +1 -0
  183. package/dist/components/number-field/PlNumberField.d.ts +133 -0
  184. package/dist/components/number-field/PlNumberField.js +111 -0
  185. package/dist/components/number-field/index.d.ts +2 -0
  186. package/dist/components/number-field/index.js +1 -0
  187. package/dist/components/otp-field/PlOtpField.d.ts +82 -0
  188. package/dist/components/otp-field/PlOtpField.js +109 -0
  189. package/dist/components/otp-field/index.d.ts +2 -0
  190. package/dist/components/otp-field/index.js +1 -0
  191. package/dist/components/overlay/PlOverlay.d.ts +96 -0
  192. package/dist/components/overlay/PlOverlay.js +77 -0
  193. package/dist/components/overlay/index.d.ts +2 -0
  194. package/dist/components/overlay/index.js +1 -0
  195. package/dist/components/pagination/PlPagination.d.ts +88 -0
  196. package/dist/components/pagination/PlPagination.js +159 -0
  197. package/dist/components/pagination/index.d.ts +2 -0
  198. package/dist/components/pagination/index.js +1 -0
  199. package/dist/components/panes/PlPanes.d.ts +79 -0
  200. package/dist/components/panes/PlPanes.js +324 -0
  201. package/dist/components/panes/index.d.ts +2 -0
  202. package/dist/components/panes/index.js +1 -0
  203. package/dist/components/pill/PlPill.d.ts +81 -0
  204. package/dist/components/pill/PlPill.js +154 -0
  205. package/dist/components/pill/index.d.ts +2 -0
  206. package/dist/components/pill/index.js +1 -0
  207. package/dist/components/popover/PlPopover.d.ts +107 -0
  208. package/dist/components/popover/PlPopover.js +113 -0
  209. package/dist/components/popover/index.d.ts +2 -0
  210. package/dist/components/popover/index.js +1 -0
  211. package/dist/components/progress-box/PlProgressBox.d.ts +32 -0
  212. package/dist/components/progress-box/PlProgressBox.js +34 -0
  213. package/dist/components/progress-box/index.d.ts +2 -0
  214. package/dist/components/progress-box/index.js +1 -0
  215. package/dist/components/progress-circular/PlProgressCircular.d.ts +22 -0
  216. package/dist/components/progress-circular/PlProgressCircular.js +47 -0
  217. package/dist/components/progress-circular/index.d.ts +2 -0
  218. package/dist/components/progress-circular/index.js +1 -0
  219. package/dist/components/progress-linear/PlProgressLinear.d.ts +31 -0
  220. package/dist/components/progress-linear/PlProgressLinear.js +40 -0
  221. package/dist/components/progress-linear/index.d.ts +2 -0
  222. package/dist/components/progress-linear/index.js +1 -0
  223. package/dist/components/radio-group/PlRadioGroup.d.ts +54 -0
  224. package/dist/components/radio-group/PlRadioGroup.js +99 -0
  225. package/dist/components/radio-group/index.d.ts +2 -0
  226. package/dist/components/radio-group/index.js +1 -0
  227. package/dist/components/rating/PlRating.d.ts +90 -0
  228. package/dist/components/rating/PlRating.js +101 -0
  229. package/dist/components/rating/index.d.ts +2 -0
  230. package/dist/components/rating/index.js +1 -0
  231. package/dist/components/scroll-zone/PlScrollZone.d.ts +132 -0
  232. package/dist/components/scroll-zone/PlScrollZone.js +411 -0
  233. package/dist/components/scroll-zone/index.d.ts +2 -0
  234. package/dist/components/scroll-zone/index.js +1 -0
  235. package/dist/components/segmented-button/PlSegmentedButton.d.ts +79 -0
  236. package/dist/components/segmented-button/PlSegmentedButton.js +206 -0
  237. package/dist/components/segmented-button/index.d.ts +2 -0
  238. package/dist/components/segmented-button/index.js +1 -0
  239. package/dist/components/select/PlSelect.d.ts +77 -0
  240. package/dist/components/select/PlSelect.js +115 -0
  241. package/dist/components/select/index.d.ts +2 -0
  242. package/dist/components/select/index.js +1 -0
  243. package/dist/components/skeleton/PlSkeleton.d.ts +73 -0
  244. package/dist/components/skeleton/PlSkeleton.js +142 -0
  245. package/dist/components/skeleton/index.d.ts +2 -0
  246. package/dist/components/skeleton/index.js +1 -0
  247. package/dist/components/slider/PlSlider.d.ts +44 -0
  248. package/dist/components/slider/PlSlider.js +132 -0
  249. package/dist/components/slider/index.d.ts +2 -0
  250. package/dist/components/slider/index.js +1 -0
  251. package/dist/components/spoiler/PlSpoiler.d.ts +84 -0
  252. package/dist/components/spoiler/PlSpoiler.js +74 -0
  253. package/dist/components/spoiler/index.d.ts +2 -0
  254. package/dist/components/spoiler/index.js +1 -0
  255. package/dist/components/switch/PlSwitch.d.ts +42 -0
  256. package/dist/components/switch/PlSwitch.js +131 -0
  257. package/dist/components/switch/index.d.ts +2 -0
  258. package/dist/components/switch/index.js +1 -0
  259. package/dist/components/table/PlTable.d.ts +112 -0
  260. package/dist/components/table/PlTable.js +210 -0
  261. package/dist/components/table/index.d.ts +2 -0
  262. package/dist/components/table/index.js +1 -0
  263. package/dist/components/tabs/PlTabs.d.ts +94 -0
  264. package/dist/components/tabs/PlTabs.js +182 -0
  265. package/dist/components/tabs/index.d.ts +2 -0
  266. package/dist/components/tabs/index.js +1 -0
  267. package/dist/components/text-field/{TextField.d.ts → PlTextField.d.ts} +5 -5
  268. package/dist/components/text-field/PlTextField.js +126 -0
  269. package/dist/components/text-field/index.d.ts +2 -2
  270. package/dist/components/text-field/index.js +1 -1
  271. package/dist/components/text-link/PlTextLink.d.ts +80 -0
  272. package/dist/components/text-link/PlTextLink.js +136 -0
  273. package/dist/components/text-link/index.d.ts +2 -0
  274. package/dist/components/text-link/index.js +1 -0
  275. package/dist/components/time-picker/PlTimePicker.d.ts +88 -0
  276. package/dist/components/time-picker/PlTimePicker.js +97 -0
  277. package/dist/components/time-picker/index.d.ts +2 -0
  278. package/dist/components/time-picker/index.js +1 -0
  279. package/dist/components/timeline/PlTimeline.d.ts +98 -0
  280. package/dist/components/timeline/PlTimeline.js +207 -0
  281. package/dist/components/timeline/index.d.ts +2 -0
  282. package/dist/components/timeline/index.js +1 -0
  283. package/dist/components/toast/PlToast.d.ts +122 -0
  284. package/dist/components/toast/PlToast.js +174 -0
  285. package/dist/components/toast/index.d.ts +2 -0
  286. package/dist/components/toast/index.js +1 -0
  287. package/dist/components/toolbar/PlToolbar.d.ts +68 -0
  288. package/dist/components/toolbar/PlToolbar.js +65 -0
  289. package/dist/components/toolbar/index.d.ts +2 -0
  290. package/dist/components/toolbar/index.js +1 -0
  291. package/dist/components/tooltip/PlTooltip.d.ts +92 -0
  292. package/dist/components/tooltip/PlTooltip.js +117 -0
  293. package/dist/components/tooltip/index.d.ts +2 -0
  294. package/dist/components/tooltip/index.js +1 -0
  295. package/dist/components/typography/PlTypography.d.ts +66 -0
  296. package/dist/components/typography/PlTypography.js +143 -0
  297. package/dist/components/typography/index.d.ts +2 -0
  298. package/dist/components/typography/index.js +1 -0
  299. package/dist/css/accordion.css +2 -0
  300. package/dist/css/alert.css +2 -0
  301. package/dist/css/animate-appear.css +2 -0
  302. package/dist/css/animate-blink.css +2 -0
  303. package/dist/css/animate-fade.css +2 -0
  304. package/dist/css/animate-grow.css +2 -0
  305. package/dist/css/animate-headline.css +2 -0
  306. package/dist/css/animate-lighting.css +2 -0
  307. package/dist/css/animate-marquee.css +2 -0
  308. package/dist/css/animate-rotate.css +2 -0
  309. package/dist/css/animate-slide.css +2 -0
  310. package/dist/css/animate-typing.css +2 -0
  311. package/dist/css/animate-zoom.css +2 -0
  312. package/dist/css/aspect-ratio.css +2 -0
  313. package/dist/css/avatar.css +2 -0
  314. package/dist/css/badge.css +2 -0
  315. package/dist/css/base.css +4 -0
  316. package/dist/css/blockquote.css +2 -0
  317. package/dist/css/bottom-navigation.css +2 -0
  318. package/dist/css/box.css +2 -0
  319. package/dist/css/breadcrumb.css +2 -0
  320. package/dist/css/button-group.css +2 -0
  321. package/dist/css/button.css +2 -0
  322. package/dist/css/card.css +2 -0
  323. package/dist/css/carousel.css +2 -0
  324. package/dist/css/chat-bubble.css +2 -0
  325. package/dist/css/checkbox.css +2 -0
  326. package/dist/css/chip.css +2 -0
  327. package/dist/css/collapsible.css +2 -0
  328. package/dist/css/combobox.css +2 -0
  329. package/dist/css/container.css +2 -0
  330. package/dist/css/date-picker.css +2 -0
  331. package/dist/css/date-range-picker.css +2 -0
  332. package/dist/css/date-time-picker.css +2 -0
  333. package/dist/css/divider.css +2 -0
  334. package/dist/css/drawer.css +2 -0
  335. package/dist/css/file-picker.css +2 -0
  336. package/dist/css/floating-bottom-navigation.css +2 -0
  337. package/dist/css/grid.css +2 -0
  338. package/dist/css/highlight.css +2 -0
  339. package/dist/css/hot-keys.css +2 -0
  340. package/dist/css/icon-button.css +2 -0
  341. package/dist/css/icon.css +2 -0
  342. package/dist/css/list.css +2 -0
  343. package/dist/css/menu.css +2 -0
  344. package/dist/css/modal.css +2 -0
  345. package/dist/css/number-field.css +2 -0
  346. package/dist/css/otp-field.css +2 -0
  347. package/dist/css/overlay.css +2 -0
  348. package/dist/css/pagination.css +2 -0
  349. package/dist/css/panes.css +2 -0
  350. package/dist/css/pill.css +2 -0
  351. package/dist/css/popover.css +2 -0
  352. package/dist/css/progress-box.css +2 -0
  353. package/dist/css/progress-circular.css +2 -0
  354. package/dist/css/progress-linear.css +2 -0
  355. package/dist/css/radio-group.css +2 -0
  356. package/dist/css/rating.css +2 -0
  357. package/dist/css/scroll-zone.css +2 -0
  358. package/dist/css/segmented-button.css +2 -0
  359. package/dist/css/select.css +2 -0
  360. package/dist/css/skeleton.css +2 -0
  361. package/dist/css/slider.css +2 -0
  362. package/dist/css/spoiler.css +2 -0
  363. package/dist/css/switch.css +2 -0
  364. package/dist/css/table.css +2 -0
  365. package/dist/css/tabs.css +2 -0
  366. package/dist/css/text-field.css +2 -0
  367. package/dist/css/text-link.css +2 -0
  368. package/dist/css/time-picker.css +2 -0
  369. package/dist/css/timeline.css +2 -0
  370. package/dist/css/toast.css +2 -0
  371. package/dist/css/toolbar.css +2 -0
  372. package/dist/css/tooltip.css +2 -0
  373. package/dist/css/typography.css +2 -0
  374. package/dist/index.d.ts +75 -3
  375. package/dist/index.js +75 -1
  376. package/dist/internal/animate.d.ts +161 -0
  377. package/dist/internal/animate.js +318 -0
  378. package/dist/internal/button-group.d.ts +27 -0
  379. package/dist/internal/button-group.js +19 -0
  380. package/dist/internal/calendar.d.ts +148 -0
  381. package/dist/internal/calendar.js +501 -0
  382. package/dist/internal/date.d.ts +173 -0
  383. package/dist/internal/date.js +353 -0
  384. package/dist/internal/format.d.ts +24 -0
  385. package/dist/internal/format.js +41 -0
  386. package/dist/internal/grid.d.ts +67 -0
  387. package/dist/internal/grid.js +143 -0
  388. package/dist/internal/icons.d.ts +86 -1
  389. package/dist/internal/icons.js +138 -1
  390. package/dist/internal/menu.d.ts +20 -0
  391. package/dist/internal/menu.js +18 -0
  392. package/dist/internal/picker.d.ts +118 -0
  393. package/dist/internal/picker.js +139 -0
  394. package/dist/internal/progress.d.ts +145 -0
  395. package/dist/internal/progress.js +167 -0
  396. package/dist/internal/sizer.d.ts +32 -0
  397. package/dist/internal/sizer.js +35 -0
  398. package/dist/internal/styles.d.ts +198 -8
  399. package/dist/internal/styles.js +636 -1
  400. package/dist/styles.css +1 -1
  401. package/dist/tailwind.css +899 -125
  402. package/dist/tokens.css +1275 -0
  403. package/dist/types.d.ts +150 -8
  404. package/dist/types.js +1 -1
  405. package/package.json +31 -27
  406. package/README.md +0 -111
  407. package/dist/components/button/Button.js +0 -1
  408. package/dist/components/text-field/TextField.js +0 -1
@@ -0,0 +1,154 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { controlSlots, controlTextClasses, cx, focusRingClasses, gapClasses, glassClasses, hasContent, iconClasses, iconSizeClasses, metaTextClasses, paddingXClasses, sheetBodyClasses, transitionClasses } from '../../internal/styles.js';
4
+ /**
5
+ * The three materials, said the way a *control* says them — the surface takes
6
+ * the tint, as on a `PlButton` and a `PlChip`, because a pill is the thing being
7
+ * coloured rather than a sheet holding somebody else's content.
8
+ */
9
+ const restClasses = {
10
+ solid: 'text-(--p-on-solid) [background-image:var(--p-fill)] [box-shadow:var(--p-elev),var(--p-lift)]',
11
+ glass: /* @__PURE__ */ [
12
+ glassClasses,
13
+ 'border text-(--p-accent) bg-(--plass-glass)',
14
+ '[border-color:var(--plass-glass-line)]',
15
+ '[box-shadow:var(--p-elev),var(--plass-gloss-glass)]'
16
+ ].join(' '),
17
+ ghost: `${glassClasses} text-(--p-accent) bg-(--p-soft)`
18
+ };
19
+ const hoverClasses = {
20
+ solid: 'hover:brightness-105 active:brightness-95',
21
+ glass: 'hover:bg-(--plass-glass-hover) hover:[border-color:var(--p-line)] active:bg-(--plass-glass-press)',
22
+ ghost: 'hover:bg-(--p-soft-hover) active:bg-(--p-soft-press)'
23
+ };
24
+ /**
25
+ * The row's floor, as a minimum rather than as a height.
26
+ *
27
+ * The numbers are `controlHeightClasses`' — a collapsed pill lines up with a
28
+ * `PlButton` of the same `size` beside it — but a pill carrying a description is
29
+ * two lines tall and a fixed height would clip the second.
30
+ */
31
+ const rowMinHeightClasses = {
32
+ xs: 'min-h-5.5',
33
+ sm: 'min-h-6.5',
34
+ md: 'min-h-8',
35
+ lg: 'min-h-10',
36
+ xl: 'min-h-12'
37
+ };
38
+ /**
39
+ * Exactly half the row's minimum height at every step — 22, 26, 32, 40 and 48px
40
+ * — so a collapsed pill is a true stadium.
41
+ *
42
+ * Written as a length rather than as `rounded-full`, and the difference only
43
+ * shows once the pill grows: `rounded-full` on a box that has taken a second
44
+ * line, or opened its `details`, is a corner half its new height, and a corner
45
+ * that big eats the first two words of every line. Pinning the radius to the
46
+ * *row* is what lets the lozenge grow into a rounded rectangle with the same
47
+ * corner it always had.
48
+ */
49
+ const pillRadiusClasses = {
50
+ xs: 'rounded-[0.6875rem]',
51
+ sm: 'rounded-[0.8125rem]',
52
+ md: 'rounded-[1rem]',
53
+ lg: 'rounded-[1.25rem]',
54
+ xl: 'rounded-[1.5rem]'
55
+ };
56
+ /**
57
+ * The air either side of the middle, and the thing that makes this shape read as
58
+ * the lozenge it is rather than as a wide `PlChip`.
59
+ *
60
+ * Roughly double the control padding at every step. The leading glyph and the
61
+ * trailing slot are the pill's furniture; what it is *about* is the column
62
+ * between them, and giving that column noticeably more room than either
63
+ * neighbour is what puts the eye there first. `density` halves it, exactly as it
64
+ * does everywhere else.
65
+ */
66
+ const centerPaddingClasses = {
67
+ default: { xs: 'px-3', sm: 'px-4', md: 'px-5', lg: 'px-6', xl: 'px-8' },
68
+ compact: { xs: 'px-1.5', sm: 'px-2', md: 'px-2.5', lg: 'px-3', xl: 'px-4' }
69
+ };
70
+ /**
71
+ * The leading box: a square the size of a standalone glyph, clipped round.
72
+ *
73
+ * `iconSizeClasses` rather than a ladder of its own, because that table already
74
+ * answers the same question — how big is a glyph that is not riding on a label —
75
+ * and the leading slot of a pill is exactly that.
76
+ */
77
+ const mediaClasses = 'flex shrink-0 items-center justify-center overflow-hidden rounded-full [&_img]:size-full [&_img]:object-cover';
78
+ /**
79
+ * The description under the title.
80
+ *
81
+ * Mixed toward transparent rather than pointed at `--plass-muted-fg`: the middle
82
+ * of a pill sits on the colour family's own fill as often as on a bare surface,
83
+ * and a fixed grey that reads as secondary on white reads as dirt on `primary`.
84
+ * Taking the ink that is already there and letting some of the surface through
85
+ * is the one form of "one step quieter" that holds on all three materials.
86
+ */
87
+ const descriptionClasses = '[color:color-mix(in_oklab,currentColor_72%,transparent)]';
88
+ /** Where a pinned pill hangs, and how far in from the edge. */
89
+ const positionClasses = {
90
+ static: { top: '', bottom: '' },
91
+ sticky: { top: 'sticky top-3 z-20', bottom: 'sticky bottom-3 z-20' },
92
+ fixed: {
93
+ // Centred by stretching the box across the viewport and letting `mx-auto`
94
+ // shrink it back, not by translating it half its own width. The house rule
95
+ // against transforming a surface holds here too, and `auto` margins are
96
+ // direction-agnostic, so the lozenge stays centred under RTL.
97
+ top: 'fixed inset-x-0 top-3 z-30 mx-auto w-fit',
98
+ bottom: 'fixed inset-x-0 bottom-3 z-30 mx-auto w-fit'
99
+ }
100
+ };
101
+ /**
102
+ * A floating lozenge holding a small amount of live information.
103
+ *
104
+ * The shape is a **stadium**, which the house radius rule otherwise forbids:
105
+ * every control is held just short of the 50% that would make it a pill, because
106
+ * the flat run along its top and bottom edge is what still reads as a sheet with
107
+ * the corners cut off it. This is the exception the rule is drawn against, and
108
+ * it works for the same reason the rule does — this is not a sheet lying on the
109
+ * page. It is an object hovering over one, and an object hovering over the page
110
+ * should not look as though it was cut from the same material.
111
+ *
112
+ * `details` is revealed by animating a measured height, exactly as a
113
+ * `PlAccordion` panel is: nothing is transformed and no text is resampled, the
114
+ * pill is simply a window that opens. The measurement is a `ResizeObserver`
115
+ * rather than a hardcoded height, so a details area whose content changes —
116
+ * which is what live information does — grows with it.
117
+ */
118
+ export const PlPill = /* @__PURE__ */ React.forwardRef(function PlPill({ variant = 'solid', size = 'md', color = 'secondary', density = 'default', elevation = 2, startIcon, endIcon, title, description, details, expanded = false, position = 'static', side = 'top', className, style, children, onClick, ...props }, ref) {
119
+ const detailsRef = React.useRef(null);
120
+ const [detailsHeight, setDetailsHeight] = React.useState(0);
121
+ React.useEffect(() => {
122
+ const element = detailsRef.current;
123
+ if (!element || typeof ResizeObserver === 'undefined') {
124
+ return;
125
+ }
126
+ const observer = new ResizeObserver(() => setDetailsHeight(element.scrollHeight));
127
+ observer.observe(element);
128
+ setDetailsHeight(element.scrollHeight);
129
+ return () => observer.disconnect();
130
+ }, [details]);
131
+ const interactive = Boolean(onClick);
132
+ const padX = paddingXClasses[density][size];
133
+ const row = (_jsxs(_Fragment, { children: [hasContent(startIcon) ? (_jsx("span", { className: cx(mediaClasses, iconSizeClasses[size]), children: startIcon })) : null, hasContent(title) || hasContent(description) || hasContent(children) ? (_jsxs("span", { className: cx('flex min-w-0 flex-1 flex-col items-center justify-center text-center', centerPaddingClasses[density][size]), children: [hasContent(title) ? _jsx("span", { className: "max-w-full truncate", children: title }) : null, hasContent(description) ? (_jsx("span", { className: cx('max-w-full truncate font-normal', metaTextClasses[size], descriptionClasses), children: description })) : null, children] })) : null] }));
134
+ return (_jsxs("div", { ref: ref, className: cx('inline-flex max-w-full flex-col overflow-hidden align-middle', pillRadiusClasses[size], 'font-medium whitespace-nowrap select-none', controlTextClasses[size], restClasses[variant], transitionClasses, iconClasses, interactive ? `plass-glow ${hoverClasses[variant]}` : '', positionClasses[position][side], className), style: { ...controlSlots(color, elevation, variant), ...style }, ...props, children: [_jsxs("div", { className: cx(
135
+ // `min-h` rather than a fixed height: one line keeps the stadium the
136
+ // radius ladder is cut for, and a title with a description under it
137
+ // grows into a rounded rectangle instead of being clipped. `py-1`
138
+ // costs nothing in the one-line case — the minimum is taller than
139
+ // the line plus the padding — and is what keeps two lines off the
140
+ // edges.
141
+ 'flex shrink-0 items-center py-1', rowMinHeightClasses[size], gapClasses[size],
142
+ // With a pressable middle the padding belongs to the button, so its
143
+ // hit area covers the whole row rather than just the words.
144
+ interactive ? 'ps-0' : padX, hasContent(endIcon) ? 'pe-1' : interactive ? 'pe-0' : ''), children: [interactive ? (_jsx("button", { type: "button", className: cx('flex min-w-0 flex-1 cursor-pointer items-center justify-center self-stretch',
145
+ // `inherit`, so the focus ring traces the lozenge's own corners
146
+ // rather than drawing a second, squarer rectangle inside them.
147
+ 'rounded-[inherit]', gapClasses[size], padX, focusRingClasses), onClick: onClick, children: row })) : (row), hasContent(endIcon) ? (_jsx("span", { className: "flex h-[1lh] shrink-0 items-center", children: endIcon })) : null] }), hasContent(details) ? (_jsx("div", { className: cx('overflow-hidden', '[transition:height_var(--plass-duration-slow)_var(--plass-ease)]', 'motion-reduce:[transition-duration:0ms]'), style: { height: expanded ? detailsHeight : 0 },
148
+ // `inert` rather than `aria-hidden`: a collapsed panel is a
149
+ // zero-height box that its content is still perfectly focusable
150
+ // inside, and `aria-hidden` alone would leave a keyboard reader
151
+ // tabbing into something their screen reader has been told does not
152
+ // exist.
153
+ inert: !expanded, children: _jsx("div", { ref: detailsRef, className: cx('whitespace-normal pb-2', padX, sheetBodyClasses[size]), children: details }) })) : null] }));
154
+ });
@@ -0,0 +1,2 @@
1
+ export { PlPill } from './PlPill.js';
2
+ export type { PlPillProps } from './PlPill.js';
@@ -0,0 +1 @@
1
+ export { PlPill } from './PlPill.js';
@@ -0,0 +1,107 @@
1
+ import * as React from 'react';
2
+ import { Popover as BaseUIPopover } from '@base-ui/react/popover';
3
+ import type { PlassAlign, PlassSide, PlassStyleProps } from '../../types.js';
4
+ /**
5
+ * A popover takes `size`, `color` and `density` and stops there.
6
+ *
7
+ * There is no `variant`, for `PlMenu`'s reason: the three materials answer "how
8
+ * much does this surface assert itself against the page", and a popup that had
9
+ * to be asked for has already answered it. There is no `elevation` either — a
10
+ * popover genuinely floats, which is the one case the ladder exists for, so it
11
+ * is fixed at its top rung.
12
+ */
13
+ export interface PlPopoverProps extends Pick<PlassStyleProps, 'size' | 'color' | 'density'>, Omit<React.ComponentPropsWithoutRef<'div'>, 'color' | 'title' | 'children'> {
14
+ /**
15
+ * The element the popup hangs off and that opens it. Exactly one element,
16
+ * which must accept a ref and spread props — every Plass component does.
17
+ *
18
+ * Optional: a controlled popover anchored from elsewhere needs none, though it
19
+ * then has nothing to position against and will sit against the viewport.
20
+ */
21
+ trigger?: React.ReactElement;
22
+ /** The heading, rendered as the element that names the popup. */
23
+ title?: React.ReactNode;
24
+ /** A line under the title, and the popup's accessible description. */
25
+ description?: React.ReactNode;
26
+ /** The body. */
27
+ children?: React.ReactNode;
28
+ /**
29
+ * Which edge of the trigger it appears on. Flips to the opposite side when
30
+ * there is no room, which is Base UI's doing and is the right behaviour.
31
+ * @default 'bottom'
32
+ */
33
+ side?: PlassSide;
34
+ /** Where it sits along that edge. @default 'center' */
35
+ align?: PlassAlign;
36
+ /** Distance from the trigger, in pixels. @default 6 */
37
+ sideOffset?: number;
38
+ /** Shift along that edge, in pixels. @default 0 */
39
+ alignOffset?: number;
40
+ /**
41
+ * Draws the little wedge pointing at the trigger.
42
+ *
43
+ * Off by default, unlike on a `PlTooltip`. A tooltip is a filled plate and its
44
+ * wedge is the same solid colour; this surface is translucent over a blurred
45
+ * backdrop, and a wedge sticking out past the popup's own box cannot carry
46
+ * that backdrop with it. Turn it on where the trigger is far enough away that
47
+ * the popup needs to say what it belongs to.
48
+ * @default false
49
+ */
50
+ arrow?: boolean;
51
+ /** Whether the popover is open. Use with `onOpenChange` for a controlled one. */
52
+ open?: boolean;
53
+ /** Whether it starts open, for an uncontrolled one. */
54
+ defaultOpen?: boolean;
55
+ onOpenChange?: (open: boolean) => void;
56
+ /**
57
+ * Whether the page behind is taken away. `false` — the default — leaves the
58
+ * page scrollable and clickable, which is what separates a popover from a
59
+ * `PlModal`: it is a detail beside the page, not instead of it.
60
+ * `'trap-focus'` holds focus inside without locking the scroll.
61
+ * @default false
62
+ */
63
+ modal?: boolean | 'trap-focus';
64
+ /**
65
+ * Whether pressing Escape or clicking outside closes the popup. Turn it off
66
+ * only for a popup with its own way out, because there will be no other.
67
+ * @default true
68
+ */
69
+ dismissible?: boolean;
70
+ /** Shows the × in the corner. @default false */
71
+ showClose?: boolean;
72
+ /** Accessible name of the × button. Never drawn. @default 'Close' */
73
+ closeLabel?: string;
74
+ /**
75
+ * A hard cap on the popup's width, overriding the one `size` implies. Numbers
76
+ * are pixels. For the popover whose content decides its width — a form, a
77
+ * single line of help — rather than for tuning the scale, which is `size`.
78
+ */
79
+ width?: number | string;
80
+ }
81
+ export type PlPopoverCloseProps = React.ComponentPropsWithoutRef<typeof BaseUIPopover.Close>;
82
+ /**
83
+ * Closes the popover it is inside.
84
+ *
85
+ * Exported for `PlModalClose`'s reason: an uncontrolled popover has no `setOpen`
86
+ * for its Cancel button to call, and making every popover controlled is a piece
87
+ * of state per popover that exists only to answer a button.
88
+ *
89
+ * `render` is Base UI's own escape hatch, so a real Plass button dismisses:
90
+ * `<PlPopoverClose render={<PlButton variant="ghost">Cancel</PlButton>} />`.
91
+ */
92
+ export declare const PlPopoverClose: React.ForwardRefExoticComponent<Omit<import("@base-ui/react").PopoverCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
93
+ /**
94
+ * A sheet that opens beside the thing that opened it.
95
+ *
96
+ * The difference from a `PlTooltip` is that this one can be **reached**: it
97
+ * stays up until it is dismissed, it can be entered with the pointer or the
98
+ * keyboard, and what is inside it can be clicked and typed into. The difference
99
+ * from a `PlModal` is that it does not take the page — it is anchored to a
100
+ * control, and the page behind goes on working.
101
+ *
102
+ * Base UI owns everything hard about it: the anchoring and the flip at the
103
+ * window edge, the click-outside and Escape, returning focus to the trigger, and
104
+ * the `aria-labelledby` / `aria-describedby` wiring. What is left here is the
105
+ * surface, the width ladder and the header.
106
+ */
107
+ export declare function PlPopover({ size, color, density, trigger, title, description, children, side, align, sideOffset, alignOffset, arrow, open, defaultOpen, onOpenChange, modal, dismissible, showClose, closeLabel, width, className, style, ...props }: PlPopoverProps): React.JSX.Element;
@@ -0,0 +1,113 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Popover as BaseUIPopover } from '@base-ui/react/popover';
3
+ import { CloseIcon } from '../../internal/icons.js';
4
+ import { cx, focusRingClasses, glassClasses, hasContent, metaTextClasses, radiusClasses, sheetBodyClasses, sheetHeaderGapClasses, sheetPaddingXClasses, sheetPaddingYClasses, sheetSectionGapClasses, sheetTitleClasses, surfaceSlots } from '../../internal/styles.js';
5
+ /**
6
+ * How wide the popup is allowed to get, per `size` — the same axis `PlModal`
7
+ * folds its width into, one rung narrower at every step because a popover is a
8
+ * detail beside a control rather than a sheet in the middle of the page.
9
+ */
10
+ const maxWidthClasses = {
11
+ xs: 'max-w-56',
12
+ sm: 'max-w-64',
13
+ md: 'max-w-80',
14
+ lg: 'max-w-96',
15
+ xl: 'max-w-lg'
16
+ };
17
+ /**
18
+ * The sheet. The same frosted panel a `PlSelect` popup and a `PlModal` draw, and
19
+ * for the same reason it carries the top of the shadow ladder: it is one of the
20
+ * few surfaces in the library that is genuinely meant to float.
21
+ */
22
+ const popupClasses = /* @__PURE__ */ [
23
+ glassClasses,
24
+ 'relative flex flex-col',
25
+ 'border text-(--plass-fg) bg-(--plass-glass-press)',
26
+ '[border-color:var(--plass-glass-line)]',
27
+ '[box-shadow:var(--plass-shadow-3),var(--plass-gloss-glass)]',
28
+ '[outline:none]',
29
+ // Opacity only. A popup that scales or slides in drags its own text across the
30
+ // screen for the length of the transition, which is the one thing the house
31
+ // style is against — and unlike a control, this one is full of text.
32
+ '[transition:opacity_var(--plass-duration)_var(--plass-ease)]',
33
+ 'data-[starting-style]:opacity-0 data-[ending-style]:opacity-0'
34
+ ].join(' ');
35
+ /** The wedge, at roughly a third of the sheet's corner radius per step. */
36
+ const arrowSizes = {
37
+ xs: 8,
38
+ sm: 9,
39
+ md: 10,
40
+ lg: 11,
41
+ xl: 12
42
+ };
43
+ /** The × in the corner, the same one a `PlModal` draws. */
44
+ const closeButtonClasses = /* @__PURE__ */ [
45
+ 'flex size-[1.6em] shrink-0 cursor-pointer items-center justify-center',
46
+ 'rounded-full text-(--plass-muted-fg)',
47
+ '[&_svg]:size-[1.1em] [&_svg]:shrink-0',
48
+ '[transition:background-color_var(--plass-duration)_var(--plass-ease),color_var(--plass-duration)_var(--plass-ease)]',
49
+ 'hover:bg-(--p-soft) hover:text-(--plass-fg)',
50
+ focusRingClasses
51
+ ].join(' ');
52
+ /**
53
+ * Closes the popover it is inside.
54
+ *
55
+ * Exported for `PlModalClose`'s reason: an uncontrolled popover has no `setOpen`
56
+ * for its Cancel button to call, and making every popover controlled is a piece
57
+ * of state per popover that exists only to answer a button.
58
+ *
59
+ * `render` is Base UI's own escape hatch, so a real Plass button dismisses:
60
+ * `<PlPopoverClose render={<PlButton variant="ghost">Cancel</PlButton>} />`.
61
+ */
62
+ export const PlPopoverClose = BaseUIPopover.Close;
63
+ /**
64
+ * A sheet that opens beside the thing that opened it.
65
+ *
66
+ * The difference from a `PlTooltip` is that this one can be **reached**: it
67
+ * stays up until it is dismissed, it can be entered with the pointer or the
68
+ * keyboard, and what is inside it can be clicked and typed into. The difference
69
+ * from a `PlModal` is that it does not take the page — it is anchored to a
70
+ * control, and the page behind goes on working.
71
+ *
72
+ * Base UI owns everything hard about it: the anchoring and the flip at the
73
+ * window edge, the click-outside and Escape, returning focus to the trigger, and
74
+ * the `aria-labelledby` / `aria-describedby` wiring. What is left here is the
75
+ * surface, the width ladder and the header.
76
+ */
77
+ export function PlPopover({ size = 'md', color = 'primary', density = 'default', trigger, title, description, children, side = 'bottom', align = 'center', sideOffset = 6, alignOffset = 0, arrow = false, open, defaultOpen, onOpenChange, modal = false, dismissible = true, showClose = false, closeLabel = 'Close', width, className, style, ...props }) {
78
+ const insetX = sheetPaddingXClasses[density][size];
79
+ const insetY = sheetPaddingYClasses[density][size];
80
+ const arrowSize = arrowSizes[size];
81
+ const hasHeader = hasContent(title) || hasContent(description);
82
+ return (_jsxs(BaseUIPopover.Root, { open: open, defaultOpen: defaultOpen, modal: modal, onOpenChange: (next, details) => {
83
+ // Base UI has no `disablePointerDismissal` on a popover, so both ways
84
+ // out are cancelled here by the reason the change arrives with. An
85
+ // imperative close and a `PlPopoverClose` press still get through, which
86
+ // is what keeps `dismissible={false}` from being a trap.
87
+ if (!dismissible &&
88
+ !next &&
89
+ (details.reason === 'escape-key' ||
90
+ details.reason === 'outside-press' ||
91
+ details.reason === 'focus-out')) {
92
+ details.cancel();
93
+ return;
94
+ }
95
+ onOpenChange?.(next);
96
+ }, children: [trigger ? _jsx(BaseUIPopover.Trigger, { render: trigger }) : null, _jsx(BaseUIPopover.Portal, { children: _jsx(BaseUIPopover.Positioner, { className: "plass-portal z-50 [outline:none]", side: side, align: align, sideOffset: sideOffset, alignOffset: alignOffset, children: _jsxs(BaseUIPopover.Popup, { className: cx(popupClasses, radiusClasses[size], sheetBodyClasses[size], sheetSectionGapClasses[size], insetX, insetY, width === undefined ? maxWidthClasses[size] : '', className), style: {
97
+ ...surfaceSlots(color, 3),
98
+ ...(width === undefined
99
+ ? null
100
+ : { maxWidth: typeof width === 'number' ? `${width}px` : width }),
101
+ ...style
102
+ }, ...props, children: [arrow ? (_jsx(BaseUIPopover.Arrow
103
+ // Base UI positions the wedge and reports which side it ended up
104
+ // on. It is drawn pointing down once and turned to match — a
105
+ // rotation of a glyph, which is the one allowance the
106
+ // no-transform rule makes.
107
+ , {
108
+ // Base UI positions the wedge and reports which side it ended up
109
+ // on. It is drawn pointing down once and turned to match — a
110
+ // rotation of a glyph, which is the one allowance the
111
+ // no-transform rule makes.
112
+ className: cx('data-[side=top]:bottom-[-1px]', 'data-[side=bottom]:top-[-1px] data-[side=bottom]:rotate-180', 'data-[side=left]:right-[-1px] data-[side=left]:-rotate-90', 'data-[side=right]:left-[-1px] data-[side=right]:rotate-90'), children: _jsxs("svg", { width: arrowSize, height: arrowSize / 2, viewBox: "0 0 10 5", "aria-hidden": "true", className: "block", children: [_jsx("path", { d: "M0 0h10L5 5z", fill: "var(--plass-glass-press)" }), _jsx("path", { d: "M0 0 5 5 10 0", fill: "none", stroke: "var(--plass-glass-line)", strokeWidth: "1", vectorEffect: "non-scaling-stroke" })] }) })) : null, hasHeader || showClose ? (_jsxs("div", { className: "flex shrink-0 items-start gap-3", children: [_jsxs("div", { className: cx('flex min-w-0 flex-1 flex-col', sheetHeaderGapClasses[size]), children: [hasContent(title) ? (_jsx(BaseUIPopover.Title, { className: cx('m-0 font-semibold', sheetTitleClasses[size]), children: title })) : null, hasContent(description) ? (_jsx(BaseUIPopover.Description, { className: cx('m-0 text-(--plass-muted-fg)', metaTextClasses[size]), children: description })) : null] }), showClose ? (_jsx(BaseUIPopover.Close, { "aria-label": closeLabel, className: closeButtonClasses, children: _jsx(CloseIcon, {}) })) : null] })) : null, hasContent(children) ? _jsx("div", { className: "min-w-0", children: children }) : null] }) }) })] }));
113
+ }
@@ -0,0 +1,2 @@
1
+ export { PlPopover, PlPopoverClose } from './PlPopover.js';
2
+ export type { PlPopoverCloseProps, PlPopoverProps } from './PlPopover.js';
@@ -0,0 +1 @@
1
+ export { PlPopover, PlPopoverClose } from './PlPopover.js';
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { type PlassProgressProps } from '../../internal/progress.js';
3
+ export interface PlProgressBoxProps extends PlassProgressProps {
4
+ /** Size of one plate. */
5
+ size?: PlassProgressProps['size'];
6
+ /**
7
+ * How many plates the row is made of.
8
+ *
9
+ * Four by default: enough that the wave reads as a wave, few enough that a
10
+ * determinate row can be counted at a glance rather than measured. Set it to
11
+ * the number of steps when the thing being waited on genuinely has steps.
12
+ * @default 4
13
+ */
14
+ count?: number;
15
+ }
16
+ /**
17
+ * A row of small glass plates that light up.
18
+ *
19
+ * The third shape, and the one that is about the material rather than about the
20
+ * quantity. A bar and a ring both say "this much of it is done"; a row of
21
+ * plates says "this is working" in the library's own vocabulary — the same
22
+ * groove, the same corner, the same gradient — which is what makes it the right
23
+ * one for a loading state inside a Plass surface, where a foreign grey spinner
24
+ * would look borrowed.
25
+ *
26
+ * It answers a value when it has one: the plates fill in order, the leading one
27
+ * partially, so four plates read as a four-segment bar rather than as four
28
+ * quarters. Without a value they cycle, each held back by its own index — and
29
+ * what cycles is the fill's **opacity**, because a gradient has no interpolation
30
+ * between itself and nothing.
31
+ */
32
+ export declare const PlProgressBox: React.ForwardRefExoticComponent<PlProgressBoxProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Progress } from '@base-ui/react/progress';
4
+ import { fillTransitionClasses, plateGapClasses, plateRadiusClasses, plateSizeClasses, progressAriaText, progressFraction, progressSlots, progressText, trackClasses } from '../../internal/progress.js';
5
+ import { cx, metaTextClasses, stackGapClasses } from '../../internal/styles.js';
6
+ /**
7
+ * A row of small glass plates that light up.
8
+ *
9
+ * The third shape, and the one that is about the material rather than about the
10
+ * quantity. A bar and a ring both say "this much of it is done"; a row of
11
+ * plates says "this is working" in the library's own vocabulary — the same
12
+ * groove, the same corner, the same gradient — which is what makes it the right
13
+ * one for a loading state inside a Plass surface, where a foreign grey spinner
14
+ * would look borrowed.
15
+ *
16
+ * It answers a value when it has one: the plates fill in order, the leading one
17
+ * partially, so four plates read as a four-segment bar rather than as four
18
+ * quarters. Without a value they cycle, each held back by its own index — and
19
+ * what cycles is the fill's **opacity**, because a gradient has no interpolation
20
+ * between itself and nothing.
21
+ */
22
+ export const PlProgressBox = /* @__PURE__ */ React.forwardRef(function PlProgressBox({ size = 'md', color = 'primary', count = 4, value = null, min = 0, max = 100, label, showValue = false, format, className, style, ...props }, ref) {
23
+ const fraction = progressFraction(value, min, max);
24
+ const indeterminate = fraction === null;
25
+ const hasFormat = format !== undefined;
26
+ // A row of no plates is not a loading indicator, and a fractional count is a
27
+ // caller who divided something. Both land on one plate rather than on none.
28
+ const plates = Math.max(1, Math.floor(count));
29
+ return (_jsxs(Progress.Root, { ref: ref, value: value ?? null, min: min, max: max, format: format, getAriaValueText: progressAriaText(fraction, hasFormat), className: cx('inline-flex flex-col', stackGapClasses[size], className), style: { ...progressSlots(color), ...style }, ...props, children: [label || showValue ? (_jsxs("div", { className: cx('flex items-baseline gap-2', label ? 'justify-between' : 'justify-end', metaTextClasses[size]), children: [label ? (_jsx(Progress.Label, { className: "min-w-0 truncate text-(--plass-fg)", children: label })) : null, showValue ? (_jsx(Progress.Value, { className: "shrink-0 tabular-nums text-(--plass-muted-fg)", children: (formatted) => progressText(fraction, formatted, hasFormat) })) : null] })) : null, _jsx(Progress.Track, { className: cx('flex', plateGapClasses[size]), children: Array.from({ length: plates }, (_, index) => (_jsx("span", { className: cx('relative overflow-hidden', trackClasses, plateSizeClasses[size], plateRadiusClasses[size]), children: _jsx("span", { "aria-hidden": "true", className: cx('absolute inset-y-0 start-0 [background-image:var(--p-fill)]', indeterminate ? 'plass-plate-wave w-full' : fillTransitionClasses), style: indeterminate
30
+ ? { '--p-i': index }
31
+ : {
32
+ width: `${Math.min(100, Math.max(0, (fraction * plates - index) * 100))}%`
33
+ } }) }, index))) })] }));
34
+ });
@@ -0,0 +1,2 @@
1
+ export { PlProgressBox } from './PlProgressBox.js';
2
+ export type { PlProgressBoxProps } from './PlProgressBox.js';
@@ -0,0 +1 @@
1
+ export { PlProgressBox } from './PlProgressBox.js';
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import { type PlassProgressProps } from '../../internal/progress.js';
3
+ export interface PlProgressCircularProps extends PlassProgressProps {
4
+ /** Diameter of the ring. Sits just under the control ladder at every step. */
5
+ size?: PlassProgressProps['size'];
6
+ }
7
+ /**
8
+ * A ring that fills, and the one to reach for where there is no room for a bar
9
+ * — inside a button, at the end of a table row, next to a field.
10
+ *
11
+ * The arc is the family's gradient rather than a flat colour, which takes a
12
+ * `<linearGradient>` of its own: an SVG stroke cannot be given a CSS gradient,
13
+ * so the two ends of the fill are lifted out of the slots and rebuilt at 135°.
14
+ * It is worth the extra element — a flat ring beside a swept bar is two
15
+ * materials for one idea.
16
+ *
17
+ * The value and the label sit *beside* the ring rather than inside it. A number
18
+ * in the middle of a dial is the picture everyone has of this component, and it
19
+ * only works at two of the five sizes: at `xs` the ring is fourteen pixels
20
+ * across and there is nowhere for "40%" to go. Beside it, every size reads.
21
+ */
22
+ export declare const PlProgressCircular: React.ForwardRefExoticComponent<PlProgressCircularProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Progress } from '@base-ui/react/progress';
4
+ import { progressAriaText, progressFraction, progressSlots, progressText, ringDiameters, ringStrokes } from '../../internal/progress.js';
5
+ import { cx, gapClasses, metaTextClasses } from '../../internal/styles.js';
6
+ /**
7
+ * A ring that fills, and the one to reach for where there is no room for a bar
8
+ * — inside a button, at the end of a table row, next to a field.
9
+ *
10
+ * The arc is the family's gradient rather than a flat colour, which takes a
11
+ * `<linearGradient>` of its own: an SVG stroke cannot be given a CSS gradient,
12
+ * so the two ends of the fill are lifted out of the slots and rebuilt at 135°.
13
+ * It is worth the extra element — a flat ring beside a swept bar is two
14
+ * materials for one idea.
15
+ *
16
+ * The value and the label sit *beside* the ring rather than inside it. A number
17
+ * in the middle of a dial is the picture everyone has of this component, and it
18
+ * only works at two of the five sizes: at `xs` the ring is fourteen pixels
19
+ * across and there is nowhere for "40%" to go. Beside it, every size reads.
20
+ */
21
+ export const PlProgressCircular = /* @__PURE__ */ React.forwardRef(function PlProgressCircular({ size = 'md', color = 'primary', value = null, min = 0, max = 100, label, showValue = false, format, className, style, ...props }, ref) {
22
+ const fraction = progressFraction(value, min, max);
23
+ const indeterminate = fraction === null;
24
+ const hasFormat = format !== undefined;
25
+ const gradientId = `${React.useId()}-fill`;
26
+ const diameter = ringDiameters[size];
27
+ const stroke = ringStrokes[size];
28
+ const centre = diameter / 2;
29
+ // The stroke straddles the path, so the radius has to come in by half of it
30
+ // or the ring is clipped by its own viewBox.
31
+ const radius = centre - stroke / 2;
32
+ const circumference = 2 * Math.PI * radius;
33
+ // Indeterminate draws a fixed quarter-arc and turns; determinate holds still
34
+ // and lets the gap close. Both are one dash pattern on one circle.
35
+ const dashArray = indeterminate ? `${circumference * 0.28} ${circumference}` : `${circumference}`;
36
+ const dashOffset = indeterminate ? 0 : circumference * (1 - fraction);
37
+ return (_jsxs(Progress.Root, { ref: ref, value: value ?? null, min: min, max: max, format: format, getAriaValueText: progressAriaText(fraction, hasFormat), className: cx('inline-flex items-center', gapClasses[size], metaTextClasses[size], className), style: { ...progressSlots(color), ...style }, ...props, children: [_jsxs("svg", {
38
+ // The rotation is on the whole `<svg>` and not on a group inside it:
39
+ // `transform-origin: center` resolves against an element's border box,
40
+ // which an SVG child does not have one of unless `transform-box` is set
41
+ // as well. One element, one rule, no surprises across browsers.
42
+ className: cx('shrink-0', indeterminate && 'plass-ring-spin'), width: diameter, height: diameter, viewBox: `0 0 ${diameter} ${diameter}`, fill: "none", "aria-hidden": "true", children: [_jsx("defs", { children: _jsxs("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "1", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "var(--p-solid)" }), _jsx("stop", { offset: "100%", stopColor: "var(--p-solid-to)" })] }) }), _jsx("circle", { cx: centre, cy: centre, r: radius, stroke: "var(--plass-track)", strokeWidth: stroke }), _jsx("circle", { cx: centre, cy: centre, r: radius, stroke: `url(#${gradientId})`, strokeWidth: stroke, strokeLinecap: "round", strokeDasharray: dashArray, strokeDashoffset: dashOffset,
43
+ // An SVG geometry attribute rather than a CSS transform: this is where
44
+ // the arc starts, not something the ring does when its state changes.
45
+ // Without it a determinate ring would fill from three o'clock.
46
+ transform: `rotate(-90 ${centre} ${centre})`, className: "[transition:stroke-dashoffset_var(--plass-duration-slow)_var(--plass-ease)]" })] }), label ? (_jsx(Progress.Label, { className: "min-w-0 truncate text-(--plass-fg)", children: label })) : null, showValue ? (_jsx(Progress.Value, { className: "shrink-0 tabular-nums text-(--plass-muted-fg)", children: (formatted) => progressText(fraction, formatted, hasFormat) })) : null] }));
47
+ });
@@ -0,0 +1,2 @@
1
+ export { PlProgressCircular } from './PlProgressCircular.js';
2
+ export type { PlProgressCircularProps } from './PlProgressCircular.js';
@@ -0,0 +1 @@
1
+ export { PlProgressCircular } from './PlProgressCircular.js';
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+ import { type PlassProgressProps } from '../../internal/progress.js';
3
+ export interface PlProgressLinearProps extends PlassProgressProps {
4
+ /** Thickness of the groove. Nothing else on a bar has a size. */
5
+ size?: PlassProgressProps['size'];
6
+ }
7
+ /**
8
+ * A bar that fills.
9
+ *
10
+ * The workhorse of the three: it is the only one that can show *how much* is
11
+ * left at a glance, because length is the one quantity a reader can compare
12
+ * without counting.
13
+ *
14
+ * The groove is `--plass-track`, the same neutral ink a PlSlider's rail and a
15
+ * PlSwitch's off state are cut in, and the segment over it is the family's
16
+ * gradient — so the filled part of the run is made of exactly the same material
17
+ * as the button that submits the form it is in. Which is also why the movement
18
+ * is on `width`: a gradient cannot be transitioned, and a length can.
19
+ *
20
+ * Both the groove and the segment are fully rounded, and that is the one place
21
+ * the library's rule about pills does not apply. The rule protects the flat run
22
+ * along a control's edge that a line of text sits on; at six pixels tall there
23
+ * is no flat run left to protect, and a square-ended bar reads as a rendering
24
+ * fault rather than as a cut edge.
25
+ *
26
+ * Base UI owns the semantics — `role="progressbar"`, the value and range
27
+ * attributes, `aria-valuetext`, and dropping the value entirely when the bar is
28
+ * indeterminate — and it computes the fill width too, so the determinate case
29
+ * here is a class list and nothing else.
30
+ */
31
+ export declare const PlProgressLinear: React.ForwardRefExoticComponent<PlProgressLinearProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Progress } from '@base-ui/react/progress';
4
+ import { barThicknessClasses, fillTransitionClasses, progressAriaText, progressFraction, progressSlots, progressText, trackClasses } from '../../internal/progress.js';
5
+ import { cx, metaTextClasses, stackGapClasses } from '../../internal/styles.js';
6
+ /**
7
+ * A bar that fills.
8
+ *
9
+ * The workhorse of the three: it is the only one that can show *how much* is
10
+ * left at a glance, because length is the one quantity a reader can compare
11
+ * without counting.
12
+ *
13
+ * The groove is `--plass-track`, the same neutral ink a PlSlider's rail and a
14
+ * PlSwitch's off state are cut in, and the segment over it is the family's
15
+ * gradient — so the filled part of the run is made of exactly the same material
16
+ * as the button that submits the form it is in. Which is also why the movement
17
+ * is on `width`: a gradient cannot be transitioned, and a length can.
18
+ *
19
+ * Both the groove and the segment are fully rounded, and that is the one place
20
+ * the library's rule about pills does not apply. The rule protects the flat run
21
+ * along a control's edge that a line of text sits on; at six pixels tall there
22
+ * is no flat run left to protect, and a square-ended bar reads as a rendering
23
+ * fault rather than as a cut edge.
24
+ *
25
+ * Base UI owns the semantics — `role="progressbar"`, the value and range
26
+ * attributes, `aria-valuetext`, and dropping the value entirely when the bar is
27
+ * indeterminate — and it computes the fill width too, so the determinate case
28
+ * here is a class list and nothing else.
29
+ */
30
+ export const PlProgressLinear = /* @__PURE__ */ React.forwardRef(function PlProgressLinear({ size = 'md', color = 'primary', value = null, min = 0, max = 100, label, showValue = false, format, className, style, ...props }, ref) {
31
+ const fraction = progressFraction(value, min, max);
32
+ const indeterminate = fraction === null;
33
+ const hasFormat = format !== undefined;
34
+ return (_jsxs(Progress.Root, { ref: ref, value: value ?? null, min: min, max: max, format: format, getAriaValueText: progressAriaText(fraction, hasFormat), className: cx('flex w-full flex-col', stackGapClasses[size], className), style: { ...progressSlots(color), ...style }, ...props, children: [label || showValue ? (_jsxs("div", { className: cx('flex items-baseline gap-2', label ? 'justify-between' : 'justify-end', metaTextClasses[size]), children: [label ? (_jsx(Progress.Label, { className: "min-w-0 truncate text-(--plass-fg)", children: label })) : null, showValue ? (_jsx(Progress.Value, { className: "shrink-0 tabular-nums text-(--plass-muted-fg)", children: (formatted) => progressText(fraction, formatted, hasFormat) })) : null] })) : null, _jsx(Progress.Track, { className: cx('relative w-full overflow-hidden rounded-full', trackClasses, barThicknessClasses[size]), children: _jsx(Progress.Indicator, { className: cx('rounded-full [background-image:var(--p-fill)]',
35
+ // `plass-progress-sweep` supplies the position, the width and the
36
+ // animation; with a value Base UI supplies the width instead and
37
+ // this transition is what makes it travel rather than jump. Both
38
+ // change an inline size, never a transform.
39
+ indeterminate ? 'plass-progress-sweep' : `absolute top-0 ${fillTransitionClasses}`) }) })] }));
40
+ });
@@ -0,0 +1,2 @@
1
+ export { PlProgressLinear } from './PlProgressLinear.js';
2
+ export type { PlProgressLinearProps } from './PlProgressLinear.js';
@@ -0,0 +1 @@
1
+ export { PlProgressLinear } from './PlProgressLinear.js';