material-plus-ui 1.6.0 → 1.8.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 (501) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +20 -14
  3. package/dist/components/accordion/MPAccordion.d.ts +21 -1
  4. package/dist/components/accordion/MPAccordion.js +1 -1
  5. package/dist/components/alert/MPAlert.d.ts +34 -3
  6. package/dist/components/alert/MPAlert.js +1 -1
  7. package/dist/components/anchor/MPAnchor.d.ts +107 -0
  8. package/dist/components/anchor/MPAnchor.js +2 -0
  9. package/dist/components/anchor/index.d.ts +2 -0
  10. package/dist/components/anchor/index.js +1 -0
  11. package/dist/components/animate-appear/MPAnimateAppear.d.ts +2 -2
  12. package/dist/components/animate-appear/MPAnimateAppear.js +1 -1
  13. package/dist/components/animate-blink/MPAnimateBlink.d.ts +2 -2
  14. package/dist/components/animate-blink/MPAnimateBlink.js +2 -1
  15. package/dist/components/animate-counter/MPAnimateCounter.d.ts +67 -0
  16. package/dist/components/animate-counter/MPAnimateCounter.js +2 -0
  17. package/dist/components/animate-counter/index.d.ts +2 -0
  18. package/dist/components/animate-counter/index.js +1 -0
  19. package/dist/components/animate-fade/MPAnimateFade.d.ts +2 -2
  20. package/dist/components/animate-fade/MPAnimateFade.js +2 -1
  21. package/dist/components/animate-float/MPAnimateFloat.d.ts +53 -0
  22. package/dist/components/animate-float/MPAnimateFloat.js +2 -0
  23. package/dist/components/animate-float/index.d.ts +2 -0
  24. package/dist/components/animate-float/index.js +1 -0
  25. package/dist/components/animate-grow/MPAnimateGrow.d.ts +2 -2
  26. package/dist/components/animate-grow/MPAnimateGrow.js +2 -1
  27. package/dist/components/animate-lighting/MPAnimateLighting.js +1 -0
  28. package/dist/components/animate-reveal/MPAnimateReveal.d.ts +64 -0
  29. package/dist/components/animate-reveal/MPAnimateReveal.js +2 -0
  30. package/dist/components/animate-reveal/index.d.ts +2 -0
  31. package/dist/components/animate-reveal/index.js +1 -0
  32. package/dist/components/animate-rotate/MPAnimateRotate.d.ts +2 -2
  33. package/dist/components/animate-rotate/MPAnimateRotate.js +2 -1
  34. package/dist/components/animate-scramble/MPAnimateScramble.d.ts +65 -0
  35. package/dist/components/animate-scramble/MPAnimateScramble.js +2 -0
  36. package/dist/components/animate-scramble/index.d.ts +2 -0
  37. package/dist/components/animate-scramble/index.js +1 -0
  38. package/dist/components/animate-shake/MPAnimateShake.d.ts +65 -0
  39. package/dist/components/animate-shake/MPAnimateShake.js +2 -0
  40. package/dist/components/animate-shake/index.d.ts +2 -0
  41. package/dist/components/animate-shake/index.js +1 -0
  42. package/dist/components/animate-slide/MPAnimateSlide.d.ts +2 -2
  43. package/dist/components/animate-slide/MPAnimateSlide.js +2 -1
  44. package/dist/components/animate-split/MPAnimateSplit.d.ts +56 -0
  45. package/dist/components/animate-split/MPAnimateSplit.js +2 -0
  46. package/dist/components/animate-split/index.d.ts +2 -0
  47. package/dist/components/animate-split/index.js +1 -0
  48. package/dist/components/animate-typing/MPAnimateTyping.js +1 -1
  49. package/dist/components/animate-zoom/MPAnimateZoom.d.ts +2 -2
  50. package/dist/components/animate-zoom/MPAnimateZoom.js +2 -1
  51. package/dist/components/app-logo/MPAppLogo.d.ts +171 -0
  52. package/dist/components/app-logo/MPAppLogo.js +2 -0
  53. package/dist/components/app-logo/index.d.ts +2 -0
  54. package/dist/components/app-logo/index.js +1 -0
  55. package/dist/components/area-chart/MPAreaChart.d.ts +79 -0
  56. package/dist/components/area-chart/MPAreaChart.js +2 -0
  57. package/dist/components/area-chart/index.d.ts +2 -0
  58. package/dist/components/area-chart/index.js +1 -0
  59. package/dist/components/aspect-ratio/MPAspectRatio.d.ts +1 -1
  60. package/dist/components/aspect-ratio/MPAspectRatio.js +2 -1
  61. package/dist/components/avatar/MPAvatar.d.ts +10 -1
  62. package/dist/components/avatar/MPAvatar.js +1 -1
  63. package/dist/components/bar-chart/MPBarChart.d.ts +74 -0
  64. package/dist/components/bar-chart/MPBarChart.js +2 -0
  65. package/dist/components/bar-chart/index.d.ts +2 -0
  66. package/dist/components/bar-chart/index.js +1 -0
  67. package/dist/components/blockquote/MPBlockquote.d.ts +18 -1
  68. package/dist/components/blockquote/MPBlockquote.js +1 -1
  69. package/dist/components/bottom-navigation/MPBottomNavigation.d.ts +2 -18
  70. package/dist/components/bottom-navigation/MPBottomNavigation.js +1 -1
  71. package/dist/components/box/MPBox.d.ts +43 -8
  72. package/dist/components/box/MPBox.js +2 -1
  73. package/dist/components/breadcrumb/MPBreadcrumb.js +1 -1
  74. package/dist/components/button/MPButton.js +1 -1
  75. package/dist/components/calendar/MPCalendar.js +1 -1
  76. package/dist/components/card/MPCard.js +1 -1
  77. package/dist/components/carousel/MPCarousel.js +1 -1
  78. package/dist/components/checkbox/MPCheckbox.js +1 -1
  79. package/dist/components/chip/MPChip.d.ts +11 -2
  80. package/dist/components/chip/MPChip.js +1 -1
  81. package/dist/components/code-block/MPCodeBlock.d.ts +177 -0
  82. package/dist/components/code-block/MPCodeBlock.js +2 -0
  83. package/dist/components/code-block/index.d.ts +2 -0
  84. package/dist/components/code-block/index.js +1 -0
  85. package/dist/components/collapsible/MPCollapsible.d.ts +12 -1
  86. package/dist/components/collapsible/MPCollapsible.js +1 -1
  87. package/dist/components/color-picker/MPColorPicker.js +1 -1
  88. package/dist/components/combobox/MPCombobox.d.ts +21 -4
  89. package/dist/components/combobox/MPCombobox.js +1 -1
  90. package/dist/components/command-palette/MPCommandPalette.d.ts +12 -2
  91. package/dist/components/command-palette/MPCommandPalette.js +1 -1
  92. package/dist/components/config/MPConfigProvider.d.ts +49 -7
  93. package/dist/components/config/MPConfigProvider.js +1 -1
  94. package/dist/components/confirm/MPConfirmProvider.js +1 -1
  95. package/dist/components/container/MPContainer.d.ts +9 -2
  96. package/dist/components/container/MPContainer.js +2 -1
  97. package/dist/components/data-list/MPDataList.d.ts +82 -0
  98. package/dist/components/data-list/MPDataList.js +2 -0
  99. package/dist/components/data-list/index.d.ts +2 -0
  100. package/dist/components/data-list/index.js +1 -0
  101. package/dist/components/data-table/MPDataTable.d.ts +314 -0
  102. package/dist/components/data-table/MPDataTable.js +2 -0
  103. package/dist/components/data-table/index.d.ts +2 -0
  104. package/dist/components/data-table/index.js +1 -0
  105. package/dist/components/date-picker/MPDatePicker.js +1 -1
  106. package/dist/components/dialog/MPDialog.d.ts +10 -2
  107. package/dist/components/dialog/MPDialog.js +1 -1
  108. package/dist/components/drawer/MPDrawer.d.ts +8 -2
  109. package/dist/components/drawer/MPDrawer.js +1 -1
  110. package/dist/components/empty/MPEmpty.d.ts +10 -1
  111. package/dist/components/empty/MPEmpty.js +1 -1
  112. package/dist/components/fieldset/MPFieldset.js +1 -1
  113. package/dist/components/file-picker/MPFilePicker.js +1 -1
  114. package/dist/components/flex/MPFlex.d.ts +95 -0
  115. package/dist/components/flex/MPFlex.js +2 -0
  116. package/dist/components/flex/index.d.ts +2 -0
  117. package/dist/components/flex/index.js +1 -0
  118. package/dist/components/floating-action-button/MPFloatingActionButton.js +1 -1
  119. package/dist/components/floating-bottom-navigation/MPFloatingBottomNavigation.d.ts +127 -0
  120. package/dist/components/floating-bottom-navigation/MPFloatingBottomNavigation.js +2 -0
  121. package/dist/components/floating-bottom-navigation/index.d.ts +2 -0
  122. package/dist/components/floating-bottom-navigation/index.js +1 -0
  123. package/dist/components/footer/MPFooter.d.ts +24 -4
  124. package/dist/components/footer/MPFooter.js +1 -1
  125. package/dist/components/form/MPForm.js +1 -1
  126. package/dist/components/gauge-chart/MPGaugeChart.d.ts +78 -0
  127. package/dist/components/gauge-chart/MPGaugeChart.js +2 -0
  128. package/dist/components/gauge-chart/index.d.ts +2 -0
  129. package/dist/components/gauge-chart/index.js +1 -0
  130. package/dist/components/grid/MPGrid.d.ts +25 -8
  131. package/dist/components/grid/MPGrid.js +1 -1
  132. package/dist/components/header/MPHeader.d.ts +26 -4
  133. package/dist/components/header/MPHeader.js +1 -1
  134. package/dist/components/heatmap-chart/MPHeatmapChart.d.ts +75 -0
  135. package/dist/components/heatmap-chart/MPHeatmapChart.js +2 -0
  136. package/dist/components/heatmap-chart/index.d.ts +2 -0
  137. package/dist/components/heatmap-chart/index.js +1 -0
  138. package/dist/components/hover-card/MPHoverCard.d.ts +101 -0
  139. package/dist/components/hover-card/MPHoverCard.js +2 -0
  140. package/dist/components/hover-card/index.d.ts +2 -0
  141. package/dist/components/hover-card/index.js +1 -0
  142. package/dist/components/icon/MPIcon.js +1 -1
  143. package/dist/components/image/MPImage.d.ts +122 -5
  144. package/dist/components/image/MPImage.js +1 -1
  145. package/dist/components/image/index.d.ts +1 -1
  146. package/dist/components/line-chart/MPLineChart.d.ts +66 -0
  147. package/dist/components/line-chart/MPLineChart.js +2 -0
  148. package/dist/components/line-chart/index.d.ts +2 -0
  149. package/dist/components/line-chart/index.js +1 -0
  150. package/dist/components/list/MPList.d.ts +23 -1
  151. package/dist/components/list/MPList.js +1 -1
  152. package/dist/components/menu/MPMenu.d.ts +1 -1
  153. package/dist/components/menu/MPMenu.js +1 -1
  154. package/dist/components/menubar/MPMenubar.js +1 -1
  155. package/dist/components/meter/MPMeter.d.ts +87 -0
  156. package/dist/components/meter/MPMeter.js +2 -0
  157. package/dist/components/meter/index.d.ts +2 -0
  158. package/dist/components/meter/index.js +1 -0
  159. package/dist/components/mockup/MPMockup.d.ts +143 -0
  160. package/dist/components/mockup/MPMockup.js +2 -0
  161. package/dist/components/mockup/index.d.ts +2 -0
  162. package/dist/components/mockup/index.js +1 -0
  163. package/dist/components/navigation-menu/MPNavigationMenu.js +1 -1
  164. package/dist/components/number-field/MPNumberField.js +1 -1
  165. package/dist/components/pie-chart/MPPieChart.d.ts +77 -0
  166. package/dist/components/pie-chart/MPPieChart.js +2 -0
  167. package/dist/components/pie-chart/index.d.ts +2 -0
  168. package/dist/components/pie-chart/index.js +1 -0
  169. package/dist/components/pill/MPPill.js +1 -1
  170. package/dist/components/popconfirm/MPPopconfirm.d.ts +2 -2
  171. package/dist/components/popover/MPPopover.d.ts +1 -0
  172. package/dist/components/popover/MPPopover.js +1 -1
  173. package/dist/components/portal/MPPortal.d.ts +75 -0
  174. package/dist/components/portal/MPPortal.js +2 -0
  175. package/dist/components/portal/index.d.ts +2 -0
  176. package/dist/components/portal/index.js +1 -0
  177. package/dist/components/radio-group/MPRadioGroup.js +1 -1
  178. package/dist/components/rating/MPRating.js +1 -1
  179. package/dist/components/scatter-chart/MPScatterChart.d.ts +66 -0
  180. package/dist/components/scatter-chart/MPScatterChart.js +2 -0
  181. package/dist/components/scatter-chart/index.d.ts +2 -0
  182. package/dist/components/scatter-chart/index.js +1 -0
  183. package/dist/components/scroll-area/MPScrollArea.d.ts +82 -0
  184. package/dist/components/scroll-area/MPScrollArea.js +2 -0
  185. package/dist/components/scroll-area/index.d.ts +2 -0
  186. package/dist/components/scroll-area/index.js +1 -0
  187. package/dist/components/scroll-zone/MPScrollZone.d.ts +165 -0
  188. package/dist/components/scroll-zone/MPScrollZone.js +2 -0
  189. package/dist/components/scroll-zone/index.d.ts +2 -0
  190. package/dist/components/scroll-zone/index.js +1 -0
  191. package/dist/components/segmented-button/MPSegmentedButton.js +1 -1
  192. package/dist/components/select/MPSelect.d.ts +27 -4
  193. package/dist/components/select/MPSelect.js +1 -1
  194. package/dist/components/show/MPShow.d.ts +78 -0
  195. package/dist/components/show/MPShow.js +2 -0
  196. package/dist/components/show/index.d.ts +2 -0
  197. package/dist/components/show/index.js +1 -0
  198. package/dist/components/sidebar/MPSidebar.d.ts +20 -1
  199. package/dist/components/sidebar/MPSidebar.js +1 -1
  200. package/dist/components/sparkline/MPSparkline.d.ts +85 -0
  201. package/dist/components/sparkline/MPSparkline.js +2 -0
  202. package/dist/components/sparkline/index.d.ts +2 -0
  203. package/dist/components/sparkline/index.js +1 -0
  204. package/dist/components/spoiler/MPSpoiler.d.ts +12 -0
  205. package/dist/components/spoiler/MPSpoiler.js +1 -1
  206. package/dist/components/stack/MPStack.d.ts +198 -0
  207. package/dist/components/stack/MPStack.js +2 -0
  208. package/dist/components/stack/index.d.ts +2 -0
  209. package/dist/components/stack/index.js +1 -0
  210. package/dist/components/statistic/MPStatistic.d.ts +104 -0
  211. package/dist/components/statistic/MPStatistic.js +2 -0
  212. package/dist/components/statistic/index.d.ts +2 -0
  213. package/dist/components/statistic/index.js +1 -0
  214. package/dist/components/stepper/MPStepper.js +1 -1
  215. package/dist/components/table/MPTable.d.ts +25 -3
  216. package/dist/components/table/MPTable.js +1 -1
  217. package/dist/components/tabs/MPTabs.d.ts +12 -0
  218. package/dist/components/tabs/MPTabs.js +1 -1
  219. package/dist/components/timeline/MPTimeline.js +1 -1
  220. package/dist/components/timeline-chart/MPTimelineChart.d.ts +63 -0
  221. package/dist/components/timeline-chart/MPTimelineChart.js +2 -0
  222. package/dist/components/timeline-chart/index.d.ts +2 -0
  223. package/dist/components/timeline-chart/index.js +1 -0
  224. package/dist/components/toggle/MPToggle.js +1 -1
  225. package/dist/components/toolbar/MPToolbar.d.ts +106 -0
  226. package/dist/components/toolbar/MPToolbar.js +2 -0
  227. package/dist/components/toolbar/index.d.ts +2 -0
  228. package/dist/components/toolbar/index.js +1 -0
  229. package/dist/components/tooltip/MPTooltip.js +1 -1
  230. package/dist/components/tour/MPTour.d.ts +120 -0
  231. package/dist/components/tour/MPTour.js +2 -0
  232. package/dist/components/tour/index.d.ts +2 -0
  233. package/dist/components/tour/index.js +1 -0
  234. package/dist/components/transfer/MPTransfer.js +1 -1
  235. package/dist/components/tree-select/MPTreeSelect.d.ts +113 -0
  236. package/dist/components/tree-select/MPTreeSelect.js +2 -0
  237. package/dist/components/tree-select/index.d.ts +2 -0
  238. package/dist/components/tree-select/index.js +1 -0
  239. package/dist/components/tree-view/MPTreeView.d.ts +153 -0
  240. package/dist/components/tree-view/MPTreeView.js +2 -0
  241. package/dist/components/tree-view/index.d.ts +2 -0
  242. package/dist/components/tree-view/index.js +1 -0
  243. package/dist/components/typography/MPTypography.d.ts +10 -1
  244. package/dist/components/typography/MPTypography.js +2 -1
  245. package/dist/constants/glyphs.d.ts +33 -31
  246. package/dist/constants/glyphs.js +1 -1
  247. package/dist/constants/icons.d.ts +32 -31
  248. package/dist/constants/icons.js +1 -1
  249. package/dist/hooks/index.d.ts +22 -5
  250. package/dist/hooks/index.js +1 -1
  251. package/dist/hooks/useMPColorScheme.js +1 -0
  252. package/dist/hooks/useMPDisclosure.d.ts +58 -0
  253. package/dist/hooks/useMPDisclosure.js +2 -0
  254. package/dist/hooks/useMPElementSize.d.ts +55 -0
  255. package/dist/hooks/useMPElementSize.js +2 -0
  256. package/dist/hooks/useMPMediaQuery.d.ts +40 -0
  257. package/dist/hooks/useMPMediaQuery.js +2 -0
  258. package/dist/hooks/useMPOnScreen.d.ts +58 -0
  259. package/dist/hooks/useMPOnScreen.js +2 -0
  260. package/dist/hooks/useMPReducedMotion.js +1 -0
  261. package/dist/hooks/useMPWindowClass.d.ts +7 -0
  262. package/dist/hooks/useMPWindowClass.js +1 -0
  263. package/dist/index.d.ts +35 -1
  264. package/dist/index.js +1 -1
  265. package/dist/internal/Calendar.js +1 -1
  266. package/dist/internal/ChartChrome.d.ts +199 -0
  267. package/dist/internal/ChartChrome.js +2 -0
  268. package/dist/internal/ChartFrame.d.ts +197 -0
  269. package/dist/internal/ChartFrame.js +2 -0
  270. package/dist/internal/FieldOutline.d.ts +14 -5
  271. package/dist/internal/FieldOutline.js +1 -1
  272. package/dist/internal/Picker.js +1 -1
  273. package/dist/internal/PopupArrow.d.ts +60 -0
  274. package/dist/internal/PopupArrow.js +2 -0
  275. package/dist/internal/SupportingText.d.ts +24 -0
  276. package/dist/internal/SupportingText.js +1 -1
  277. package/dist/internal/animate-core.d.ts +121 -0
  278. package/dist/internal/animate-core.js +1 -0
  279. package/dist/internal/animate.d.ts +75 -55
  280. package/dist/internal/animate.js +1 -1
  281. package/dist/internal/bottom-navigation.d.ts +58 -0
  282. package/dist/internal/bottom-navigation.js +2 -0
  283. package/dist/internal/chart.d.ts +461 -0
  284. package/dist/internal/chart.js +1 -0
  285. package/dist/internal/color-scheme.d.ts +0 -9
  286. package/dist/internal/color-scheme.js +1 -1
  287. package/dist/internal/config.d.ts +24 -5
  288. package/dist/internal/config.js +1 -1
  289. package/dist/internal/data-table.d.ts +195 -0
  290. package/dist/internal/data-table.js +1 -0
  291. package/dist/internal/date.d.ts +22 -18
  292. package/dist/internal/date.js +1 -1
  293. package/dist/internal/density.d.ts +9 -0
  294. package/dist/internal/density.js +1 -0
  295. package/dist/internal/elevation.d.ts +26 -0
  296. package/dist/internal/elevation.js +1 -0
  297. package/dist/internal/highlight.d.ts +96 -0
  298. package/dist/internal/highlight.js +1 -0
  299. package/dist/internal/i18n.d.ts +180 -0
  300. package/dist/internal/initials.d.ts +28 -0
  301. package/dist/internal/initials.js +1 -0
  302. package/dist/internal/intl.d.ts +64 -0
  303. package/dist/internal/intl.js +1 -0
  304. package/dist/internal/mark.d.ts +52 -0
  305. package/dist/internal/mark.js +1 -0
  306. package/dist/internal/measure.d.ts +31 -0
  307. package/dist/internal/measure.js +1 -0
  308. package/dist/internal/messages/anchor.d.ts +3 -0
  309. package/dist/internal/messages/anchor.js +1 -0
  310. package/dist/internal/messages/chart.d.ts +3 -0
  311. package/dist/internal/messages/chart.js +1 -0
  312. package/dist/internal/messages/code.d.ts +3 -0
  313. package/dist/internal/messages/code.js +1 -0
  314. package/dist/internal/messages/data-table.d.ts +3 -0
  315. package/dist/internal/messages/data-table.js +1 -0
  316. package/dist/internal/messages/scroll.d.ts +3 -0
  317. package/dist/internal/messages/scroll.js +1 -0
  318. package/dist/internal/messages/sparkline.d.ts +3 -0
  319. package/dist/internal/messages/sparkline.js +1 -0
  320. package/dist/internal/messages/tour.d.ts +3 -0
  321. package/dist/internal/messages/tour.js +1 -0
  322. package/dist/internal/messages/transfer.d.ts +1 -1
  323. package/dist/internal/messages/transfer.js +1 -1
  324. package/dist/internal/mockup.d.ts +174 -0
  325. package/dist/internal/mockup.js +2 -0
  326. package/dist/internal/page-layout.d.ts +24 -5
  327. package/dist/internal/page-layout.js +1 -1
  328. package/dist/internal/responsive.d.ts +55 -0
  329. package/dist/internal/responsive.js +1 -0
  330. package/dist/internal/scale.d.ts +0 -17
  331. package/dist/internal/scale.js +1 -1
  332. package/dist/internal/step.d.ts +15 -0
  333. package/dist/internal/step.js +1 -1
  334. package/dist/internal/table.d.ts +53 -0
  335. package/dist/internal/table.js +1 -0
  336. package/dist/internal/text.d.ts +57 -0
  337. package/dist/internal/text.js +1 -0
  338. package/dist/internal/threshold.d.ts +19 -0
  339. package/dist/internal/threshold.js +1 -0
  340. package/dist/internal/time-scale.d.ts +44 -0
  341. package/dist/internal/time-scale.js +1 -0
  342. package/dist/internal/transition.d.ts +33 -0
  343. package/dist/internal/transition.js +1 -0
  344. package/dist/internal/visibility.d.ts +48 -0
  345. package/dist/internal/visibility.js +1 -0
  346. package/dist/internal/window-class.d.ts +29 -2
  347. package/dist/internal/window-class.js +1 -1
  348. package/dist/locales/ar.js +1 -1
  349. package/dist/locales/de.js +1 -1
  350. package/dist/locales/es.js +1 -1
  351. package/dist/locales/fr.js +1 -1
  352. package/dist/locales/hi.js +1 -1
  353. package/dist/locales/id.js +1 -1
  354. package/dist/locales/it.js +1 -1
  355. package/dist/locales/ja.js +1 -1
  356. package/dist/locales/ko.js +1 -1
  357. package/dist/locales/nl.js +1 -1
  358. package/dist/locales/pl.js +1 -1
  359. package/dist/locales/pt.js +1 -1
  360. package/dist/locales/ru.js +1 -1
  361. package/dist/locales/th.js +1 -1
  362. package/dist/locales/tr.js +1 -1
  363. package/dist/locales/vi.js +1 -1
  364. package/dist/locales/zh-hans.js +1 -1
  365. package/dist/locales/zh-hant.js +1 -1
  366. package/dist/styles/accordion.css +1 -1
  367. package/dist/styles/alert.css +1 -1
  368. package/dist/styles/anchor.css +2 -0
  369. package/dist/styles/animate-appear.css +1 -1
  370. package/dist/styles/animate-blink.css +1 -1
  371. package/dist/styles/animate-counter.css +2 -0
  372. package/dist/styles/animate-fade.css +1 -1
  373. package/dist/styles/animate-float.css +2 -0
  374. package/dist/styles/animate-grow.css +1 -1
  375. package/dist/styles/animate-headline.css +1 -1
  376. package/dist/styles/animate-lighting.css +1 -1
  377. package/dist/styles/animate-marquee.css +1 -1
  378. package/dist/styles/animate-reveal.css +2 -0
  379. package/dist/styles/animate-rotate.css +1 -1
  380. package/dist/styles/animate-scramble.css +2 -0
  381. package/dist/styles/animate-shake.css +2 -0
  382. package/dist/styles/animate-slide.css +1 -1
  383. package/dist/styles/animate-split.css +2 -0
  384. package/dist/styles/animate-typing.css +1 -1
  385. package/dist/styles/animate-zoom.css +1 -1
  386. package/dist/styles/app-logo.css +2 -0
  387. package/dist/styles/area-chart.css +2 -0
  388. package/dist/styles/aspect-ratio.css +1 -1
  389. package/dist/styles/avatar.css +1 -1
  390. package/dist/styles/badge.css +1 -1
  391. package/dist/styles/bar-chart.css +2 -0
  392. package/dist/styles/blockquote.css +1 -1
  393. package/dist/styles/bottom-navigation.css +1 -1
  394. package/dist/styles/box.css +1 -1
  395. package/dist/styles/breadcrumb.css +1 -1
  396. package/dist/styles/button.css +1 -1
  397. package/dist/styles/calendar.css +1 -1
  398. package/dist/styles/card.css +1 -1
  399. package/dist/styles/carousel.css +1 -1
  400. package/dist/styles/chat-bubble.css +1 -1
  401. package/dist/styles/checkbox.css +1 -1
  402. package/dist/styles/chip.css +1 -1
  403. package/dist/styles/code-block.css +2 -0
  404. package/dist/styles/collapsible.css +1 -1
  405. package/dist/styles/color-picker.css +1 -1
  406. package/dist/styles/combobox.css +1 -1
  407. package/dist/styles/command-palette.css +1 -1
  408. package/dist/styles/config.css +1 -1
  409. package/dist/styles/confirm.css +1 -1
  410. package/dist/styles/container.css +1 -1
  411. package/dist/styles/data-list.css +2 -0
  412. package/dist/styles/data-table.css +2 -0
  413. package/dist/styles/date-picker.css +1 -1
  414. package/dist/styles/date-range-picker.css +1 -1
  415. package/dist/styles/date-time-picker.css +1 -1
  416. package/dist/styles/dialog.css +1 -1
  417. package/dist/styles/divider.css +1 -1
  418. package/dist/styles/drawer.css +1 -1
  419. package/dist/styles/empty.css +1 -1
  420. package/dist/styles/fieldset.css +1 -1
  421. package/dist/styles/file-picker.css +1 -1
  422. package/dist/styles/flex.css +2 -0
  423. package/dist/styles/floating-action-button.css +1 -1
  424. package/dist/styles/floating-bottom-navigation.css +2 -0
  425. package/dist/styles/footer.css +1 -1
  426. package/dist/styles/form.css +1 -1
  427. package/dist/styles/gauge-chart.css +2 -0
  428. package/dist/styles/grid.css +1 -1
  429. package/dist/styles/header.css +1 -1
  430. package/dist/styles/heatmap-chart.css +2 -0
  431. package/dist/styles/highlight.css +1 -1
  432. package/dist/styles/hover-card.css +2 -0
  433. package/dist/styles/icon-button.css +1 -1
  434. package/dist/styles/icon.css +1 -1
  435. package/dist/styles/image.css +1 -1
  436. package/dist/styles/line-chart.css +2 -0
  437. package/dist/styles/list.css +1 -1
  438. package/dist/styles/locale.css +1 -1
  439. package/dist/styles/menu.css +1 -1
  440. package/dist/styles/menubar.css +1 -1
  441. package/dist/styles/meter.css +2 -0
  442. package/dist/styles/mockup.css +2 -0
  443. package/dist/styles/navigation-menu.css +1 -1
  444. package/dist/styles/number-field.css +1 -1
  445. package/dist/styles/otp-field.css +1 -1
  446. package/dist/styles/overlay.css +1 -1
  447. package/dist/styles/page-layout.css +1 -1
  448. package/dist/styles/pagination.css +1 -1
  449. package/dist/styles/pie-chart.css +2 -0
  450. package/dist/styles/pill.css +1 -1
  451. package/dist/styles/popconfirm.css +1 -1
  452. package/dist/styles/popover.css +1 -1
  453. package/dist/styles/portal.css +2 -0
  454. package/dist/styles/progress-box.css +1 -1
  455. package/dist/styles/progress-circular.css +1 -1
  456. package/dist/styles/progress-linear.css +1 -1
  457. package/dist/styles/radio-group.css +1 -1
  458. package/dist/styles/rating.css +1 -1
  459. package/dist/styles/scatter-chart.css +2 -0
  460. package/dist/styles/scroll-area.css +2 -0
  461. package/dist/styles/scroll-zone.css +2 -0
  462. package/dist/styles/segmented-button.css +1 -1
  463. package/dist/styles/select.css +1 -1
  464. package/dist/styles/show.css +2 -0
  465. package/dist/styles/sidebar.css +1 -1
  466. package/dist/styles/skeleton.css +1 -1
  467. package/dist/styles/slider.css +1 -1
  468. package/dist/styles/snackbar.css +1 -1
  469. package/dist/styles/sparkline.css +2 -0
  470. package/dist/styles/spoiler.css +1 -1
  471. package/dist/styles/stack.css +2 -0
  472. package/dist/styles/statistic.css +2 -0
  473. package/dist/styles/stepper.css +1 -1
  474. package/dist/styles/switch.css +1 -1
  475. package/dist/styles/table.css +1 -1
  476. package/dist/styles/tabs.css +1 -1
  477. package/dist/styles/text-field.css +1 -1
  478. package/dist/styles/text-link.css +1 -1
  479. package/dist/styles/time-picker.css +1 -1
  480. package/dist/styles/timeline-chart.css +2 -0
  481. package/dist/styles/timeline.css +1 -1
  482. package/dist/styles/toggle.css +1 -1
  483. package/dist/styles/tokens.css +1 -1
  484. package/dist/styles/toolbar.css +2 -0
  485. package/dist/styles/tour.css +2 -0
  486. package/dist/styles/transfer.css +1 -1
  487. package/dist/styles/tree-select.css +2 -0
  488. package/dist/styles/tree-view.css +2 -0
  489. package/dist/styles/typography.css +1 -1
  490. package/dist/styles.css +1 -1
  491. package/dist/tailwind.css +2606 -185
  492. package/dist/types.d.ts +566 -5
  493. package/package.json +26 -25
  494. package/.fix.py +0 -92
  495. package/dist/components/avatar-group/MPAvatarGroup.d.ts +0 -74
  496. package/dist/components/avatar-group/MPAvatarGroup.js +0 -2
  497. package/dist/components/avatar-group/index.d.ts +0 -2
  498. package/dist/components/avatar-group/index.js +0 -1
  499. package/dist/internal/avatar-group.d.ts +0 -22
  500. package/dist/internal/avatar-group.js +0 -2
  501. package/dist/styles/avatar-group.css +0 -2
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{jsx as t,jsxs as e}from"react/jsx-runtime";const i={desktop:["macos","windows","linux"],tablet:["ipados","android"],mobile:["ios","android"]},s={desktop:"macos",tablet:"ipados",mobile:"ios"};export function resolveOs(t,e){return e&&i[t].includes(e)?e:s[t]}export function defaultNotch(t,e){return"mobile"!==t?"none":"ios"===e?"dynamic-island":"punch-hole"}export const RESOLUTIONS={mobile:{xs:{width:320,height:568},sm:{width:360,height:780},md:{width:390,height:844},lg:{width:414,height:896},xl:{width:430,height:932}},tablet:{xs:{width:744,height:1133},sm:{width:810,height:1080},md:{width:820,height:1180},lg:{width:1024,height:1366},xl:{width:1032,height:1376}},desktop:{xs:{width:1024,height:640},sm:{width:1280,height:800},md:{width:1440,height:900},lg:{width:1680,height:1050},xl:{width:1920,height:1200}}};const a={mobile:{thin:{side:10,top:10,bottom:10,radius:46},standard:{side:14,top:14,bottom:14,radius:52},thick:{side:12,top:62,bottom:82,radius:26}},tablet:{thin:{side:14,top:14,bottom:14,radius:28},standard:{side:22,top:22,bottom:22,radius:36},thick:{side:20,top:58,bottom:58,radius:22}},desktop:{thin:{side:10,top:10,bottom:10,radius:12},standard:{side:14,top:14,bottom:52,radius:16},thick:{side:20,top:20,bottom:72,radius:10}}},n={mobile:44,tablet:26,desktop:8};export function mockupMetrics(t){const{device:e,bezel:i,hardware:s,orientation:h,resolution:d}=t,o="desktop"!==e&&"landscape"===h?{width:d.height,height:d.width}:{width:d.width,height:d.height};if("none"===i)return{screen:o,body:o,frame:o,shell:{side:0,top:0,bottom:0,radius:n[e]},screenRadius:n[e],stand:null,laptop:null};const r=a[e][i],l={width:o.width+2*r.side,height:o.height+r.top+r.bottom};if("desktop"!==e)return{screen:o,body:l,frame:l,shell:r,screenRadius:Math.max(2,r.radius-r.side),stand:null,laptop:null};if("laptop"===s){const t={width:Math.round(1.14*l.width),height:Math.round(.028*l.height)+12,lipWidth:Math.round(.12*l.width)};return{screen:o,body:l,frame:{width:t.width,height:l.height+t.height},shell:r,screenRadius:Math.max(2,r.radius-r.side),stand:null,laptop:t}}const c={neckWidth:Math.round(.16*l.width),neckHeight:Math.round(.11*l.height),footWidth:Math.round(.42*l.width),footHeight:Math.max(8,Math.round(.018*l.height))};return{screen:o,body:l,frame:{width:Math.max(l.width,c.footWidth),height:l.height+c.neckHeight+c.footHeight},shell:r,screenRadius:Math.max(2,r.radius-r.side),stand:c,laptop:null}}export const FINISHES={graphite:{"--_mp-device":"#2f3033","--_mp-device-edge":"#131416"},silver:{"--_mp-device":"#d8d9dd","--_mp-device-edge":"#a3a5aa"},white:{"--_mp-device":"#f3f3f5","--_mp-device-edge":"#c8c9ce"}};export const HARDWARE="bg-(--_mp-device) ring-1 ring-(--_mp-device-edge) ring-inset";export function MockupCutout({notch:e,width:i}){if("none"===e)return null;if("punch-hole"===e){const e=Math.round(.032*i);return t("span",{"aria-hidden":"true",className:"absolute left-1/2 -translate-x-1/2 rounded-full bg-black",style:{top:.8*e,width:e,height:e}})}if("dynamic-island"===e){const e=Math.round(.09*i);return t("span",{"aria-hidden":"true",className:"absolute left-1/2 -translate-x-1/2 rounded-full bg-black",style:{top:.35*e,width:Math.round(.31*i),height:e}})}const s=Math.round(.075*i);return t("span",{"aria-hidden":"true",className:"absolute top-0 left-1/2 -translate-x-1/2 bg-black",style:{width:Math.round(.52*i),height:s,borderBottomLeftRadius:.6*s,borderBottomRightRadius:.6*s}})}function h({width:e,height:i,round:s}){return t("span",{className:"bg-mp-on-surface/38 shrink-0",style:{width:e,height:i,borderRadius:s?"9999px":.3*i}})}function d({widths:e,height:i,gap:s,round:a}){return t("span",{className:"flex items-center",style:{gap:s},children:e.map((e,s)=>t(h,{width:e,height:i,round:a},s))})}function o({height:i}){const s=Math.max(1,Math.round(.18*i));return e("span",{className:"flex items-end",style:{gap:.4*i},children:[t("span",{className:"flex items-end",style:{gap:.6*s},children:[.4,.6,.8,1].map(e=>t("span",{className:"bg-mp-on-surface rounded-[1px]",style:{width:s,height:i*e}},e))}),t("span",{className:"relative",style:{width:1.2*i,height:i},children:[1,.62,.26].map((e,a)=>t("span",{className:"border-mp-on-surface absolute bottom-0 left-1/2 -translate-x-1/2 rounded-t-full border-t",style:{width:1.2*i*e,height:i*e,borderWidth:2===a?.3*i:s}},e))}),e("span",{className:"flex items-center",style:{gap:.8*s},children:[t("span",{className:"border-mp-on-surface/60 relative rounded-[2px] border",style:{width:1.9*i,height:i,padding:.6*s},children:t("span",{className:"bg-mp-on-surface block h-full rounded-[1px]",style:{width:"68%"}})}),t("span",{className:"bg-mp-on-surface/60 rounded-r-[1px]",style:{width:s,height:.4*i}})]})]})}function r({size:i}){return e("span",{className:"flex items-center",style:{gap:1.6*i},children:[t("span",{className:"border-mp-on-surface rotate-45 border-b-2 border-l-2",style:{width:.6*i,height:.6*i}}),t("span",{className:"border-mp-on-surface rounded-full border-2",style:{width:.75*i,height:.75*i}}),t("span",{className:"border-mp-on-surface rounded-[2px] border-2",style:{width:.7*i,height:.7*i}})]})}export function mockupChrome(i){const{os:s,width:a,notch:n}=i,l=Math.max(10,Math.round(.035*a)),c=Math.round(.36*l),p=Math.round(.5*l),u="text-mp-on-surface pointer-events-none flex shrink-0 items-center";if("ios"===s||"ipados"===s||"android"===s){const i="none"===n?Math.round(1.3*l):Math.round(2.2*l),d=Math.round(1.4*l),m=e("span",{className:`${u} justify-between`,style:{height:i,paddingInline:2*p,paddingTop:"none"===n?0:Math.round(.6*l)},children:[t(h,{width:Math.round(1.4*l),height:c}),t(o,{height:c})]});return"android"===s?{top:m,bottom:t("span",{className:`${u} justify-center`,style:{height:Math.round(1.8*l)},children:t(r,{size:1.6*c})}),insetTop:i,insetBottom:Math.round(1.8*l)}:{top:m,bottom:t("span",{className:`${u} justify-center`,style:{height:d},children:t("span",{className:"bg-mp-on-surface/60 rounded-full",style:{width:Math.round(.36*a),height:Math.max(3,.28*c)}})}),insetTop:i,insetBottom:d}}if("macos"===s){const i=Math.round(.95*l),s=Math.round(2.1*l),a=Math.round(1.3*l);return{top:e("span",{className:`${u} bg-mp-surface-container/80 justify-between`,style:{height:i,paddingInline:1.5*p,gap:2*p},children:[e("span",{className:"flex items-center",style:{gap:p},children:[t("span",{className:"flex items-center",style:{gap:.7*p},children:["#ff5f57","#febc2e","#28c840"].map(e=>t("span",{className:"rounded-full",style:{width:c,height:c,background:e}},e))}),t(d,{widths:[3*c,2*c,2.4*c],height:c,gap:p})]}),t(d,{widths:[1.6*c,3*c],height:c,gap:p})]}),bottom:t("span",{className:`${u} justify-center`,style:{height:s},children:t("span",{className:"bg-mp-surface-container-high/80 flex items-center rounded-[18%]",style:{gap:p,padding:p},children:[0,1,2,3,4].map(e=>t(h,{width:a,height:a},e))})}),insetTop:i,insetBottom:s}}const m=Math.round(1.5*l),g=Math.round(.95*l);return"windows"===s?{top:null,bottom:e("span",{className:`${u} bg-mp-surface-container/85 justify-center`,style:{height:m,gap:1.5*p},children:[t("span",{className:"grid shrink-0",style:{width:g,height:g,gap:.14*g,gridTemplateColumns:"1fr 1fr"},children:[0,1,2,3].map(e=>t("span",{className:"bg-mp-on-surface/60 rounded-[1px]"},e))}),t(d,{widths:[g,g,g,g],height:g,gap:p})]}),insetTop:0,insetBottom:m}:{top:e("span",{className:`${u} bg-mp-surface-container/85 justify-between`,style:{height:m,paddingInline:2*p},children:[t(d,{widths:[3*c,2*c],height:c,gap:p}),t(h,{width:3.4*c,height:c}),t(d,{widths:[1.6*c,1.6*c,2.4*c],height:c,gap:p})]}),bottom:null,insetTop:m,insetBottom:0}}
@@ -15,7 +15,7 @@
15
15
  * stops being a column, whether a drawer is open, and how tall the bars are.
16
16
  */
17
17
  import * as React from 'react';
18
- import type { MPSide, MPVariant, MPWindowClass } from '../types.js';
18
+ import type { MPElevation, MPSide, MPVariant, MPWindowClass } from '../types.js';
19
19
  /**
20
20
  * Which end of the band a sidebar takes.
21
21
  *
@@ -109,18 +109,25 @@ export declare const MPPageLayoutContext: React.Context<MPPageLayoutContextValue
109
109
  */
110
110
  export declare const MPSidebarSideContext: React.Context<MPSidebarSide | null>;
111
111
  /**
112
- * The same four widths as classes, for the part of this that is decided in CSS
112
+ * The same boundaries as classes, for the part of this that is decided in CSS
113
113
  * rather than in JavaScript.
114
114
  *
115
- * `COLLAPSED_ONLY` hides something from the breakpoint *up*, which is what a
115
+ * `COLLAPSED_ONLY` hides something from the class *up*, which is what a
116
116
  * sidebar's own trigger wants: the button exists exactly while the column does
117
117
  * not. `EXPANDED_ONLY` hides it below, which is what the column wants for the
118
118
  * one paint between the server's markup arriving and JavaScript finding out how
119
119
  * wide the window is — without it a phone draws a full-width sidebar and throws
120
120
  * it away a moment later.
121
121
  *
122
- * Written out per class because Tailwind finds classes by scanning source text:
123
- * an interpolated `max-[${width}px]:hidden` generates no rule at all.
122
+ * These were four arbitrary variants each — `min-[600px]:hidden` and its
123
+ * mirror — which is to say two more copies of the four widths, sitting a few
124
+ * lines under the copy that has just been removed. They are `internal/visibility.ts`
125
+ * now, and the same classes `MPShow` puts on: one vocabulary for "not at this
126
+ * width", so a sidebar and a bottom bar written against each other cannot part
127
+ * company at one of them.
128
+ *
129
+ * `none` is the only value that is not a window size class. A sidebar that never
130
+ * collapses has a trigger that is never shown and a column that always is.
124
131
  */
125
132
  export declare const COLLAPSED_ONLY: Record<MPPageCollapse, string>;
126
133
  export declare const EXPANDED_ONLY: Record<MPPageCollapse, string>;
@@ -180,3 +187,15 @@ export declare function drawerSide(side: MPSidebarSide): MPSide;
180
187
  * `surface` — which is why it is what a bar defaults to.
181
188
  */
182
189
  export declare const BAR_SURFACE: Record<MPVariant, string>;
190
+ /**
191
+ * What a bar paints, from whichever of `variant` and `elevation` answered.
192
+ *
193
+ * `containerSurface`'s rule, with the one difference a bar has: `outlined` does not
194
+ * draw a hairline round it — the rule under a top app bar belongs to the bar's
195
+ * own edge treatment — so a level replaces the surface outright whatever the
196
+ * variant was.
197
+ *
198
+ * A bar's `elevated` is level 2 rather than 1, because a bar sits over the
199
+ * page's content rather than in it. An explicit level says what it says.
200
+ */
201
+ export declare function barSurface(variant: MPVariant, elevation: MPElevation | undefined): string;
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import*as e from"react";export const MPPageLayoutContext=/*@__PURE__*/e.createContext({present:!1,register:()=>{},collapseBelow:"none",open:{start:!1,end:!1},setOpen:()=>{},scroll:"page"});export const MPSidebarSideContext=/*@__PURE__*/e.createContext(null);const n={none:null,compact:null,medium:"(width < 600px)",expanded:"(width < 840px)",large:"(width < 1200px)","extra-large":"(width < 1600px)"};export const COLLAPSED_ONLY={none:"hidden",compact:"hidden",medium:"min-[600px]:hidden",expanded:"min-[840px]:hidden",large:"min-[1200px]:hidden","extra-large":"min-[1600px]:hidden"};export const EXPANDED_ONLY={none:"",compact:"",medium:"max-[600px]:hidden",expanded:"max-[840px]:hidden",large:"max-[1200px]:hidden","extra-large":"max-[1600px]:hidden"};export function useMPCollapsed(t){const d=n[t],a=e.useCallback(e=>{if(!d||"undefined"==typeof window||!window.matchMedia)return()=>{};const n=window.matchMedia(d);return n.addEventListener("change",e),()=>n.removeEventListener("change",e)},[d]),o=e.useCallback(()=>!(!d||"undefined"==typeof window||!window.matchMedia)&&window.matchMedia(d).matches,[d]);return e.useSyncExternalStore(a,o,()=>!1)}export function drawerSide(e){const n="undefined"!=typeof document&&"rtl"===document.documentElement.dir;return"start"===e?n?"right":"left":n?"left":"right"}export const BAR_SURFACE={filled:"bg-mp-surface-container-highest",tonal:"bg-mp-surface-container",elevated:"shadow-mp-2 bg-mp-surface-container-low",outlined:"bg-mp-surface",text:"bg-transparent"};
2
+ import*as e from"react";import{HIDDEN_BELOW as t,HIDDEN_FROM as n}from"./visibility.js";import{below as r,useWindowMins as o}from"./window-class.js";import{ELEVATION_SURFACE as a}from"./elevation.js";export const MPPageLayoutContext=/*@__PURE__*/e.createContext({present:!1,register:()=>{},collapseBelow:"none",open:{start:!1,end:!1},setOpen:()=>{},scroll:"page"});export const MPSidebarSideContext=/*@__PURE__*/e.createContext(null);export const COLLAPSED_ONLY={none:"hidden",compact:n.compact,medium:n.medium,expanded:n.expanded,large:n.large,"extra-large":n["extra-large"]};export const EXPANDED_ONLY={none:"",compact:t.compact,medium:t.medium,expanded:t.expanded,large:t.large,"extra-large":t["extra-large"]};export function useMPCollapsed(t){const n=o(),a=r("none"===t?0:n[t]),d=e.useCallback(e=>{if(!a||"undefined"==typeof window||!window.matchMedia)return()=>{};const t=window.matchMedia(a);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)},[a]),i=e.useCallback(()=>!(!a||"undefined"==typeof window||!window.matchMedia)&&window.matchMedia(a).matches,[a]);return e.useSyncExternalStore(d,i,()=>!1)}export function drawerSide(e){const t="undefined"!=typeof document&&"rtl"===document.documentElement.dir;return"start"===e?t?"right":"left":t?"left":"right"}export const BAR_SURFACE={filled:"bg-mp-surface-container-highest",tonal:"bg-mp-surface-container",elevated:"shadow-mp-2 bg-mp-surface-container-low",outlined:"bg-mp-surface",text:"bg-transparent"};export function barSurface(e,t){return void 0===t?BAR_SURFACE[e]:a[t]}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The one shape a value that changes with the window is written in.
3
+ *
4
+ * `MPResponsive<T>` in `src/types.ts` is the type — a value, or a map keyed by
5
+ * window size class, each entry applying from its own class upward. This is what
6
+ * turns one of those into something the stylesheet can read, and it is a module
7
+ * rather than three functions inside `MPGrid` because the grid stopped being the
8
+ * only component with a responsive prop.
9
+ *
10
+ * ## Why a custom property and not a class
11
+ *
12
+ * Because the values are arithmetic a caller picks at runtime. A column is
13
+ * `(100% + gutter) * span / columns - gutter` and a measure is whatever length
14
+ * was asked for; Tailwind finds classes by scanning source text, so an
15
+ * interpolated `w-[${n}]` generates no rule at all. The rules are therefore
16
+ * written once in `src/styles.css` and the per-instance numbers arrive as inline
17
+ * `--_mp-{name}-{class}` slots, exactly as a `color` reaches a background.
18
+ *
19
+ * The other half of that decision is what a media query can do that React
20
+ * cannot: an inherited custom property changes at a boundary without anything
21
+ * re-rendering, so the value a component lays itself out against is always the
22
+ * one that is actually on screen. A responsive prop resolved in JavaScript would
23
+ * be a subtree re-rendering at every window class to say the same thing, and a
24
+ * first paint on the server that has to be corrected afterwards.
25
+ *
26
+ * ## Why only the classes that were named
27
+ *
28
+ * `span={{ expanded: 6 }}` writes one custom property and not five. The gaps are
29
+ * filled in by the stylesheet, which falls each class back to the one below it —
30
+ * see the rungs in `src/styles.css`. That keeps the `style` attribute down to
31
+ * what was asked for, which is the difference between a list of two hundred rows
32
+ * carrying one declaration each and carrying five.
33
+ */
34
+ import type * as React from 'react';
35
+ import type { MPResponsive, MPWindowClass } from '../types.js';
36
+ /** A bare value means "from `compact` up"; a map is already per class. */
37
+ export declare function classMap<T>(value: MPResponsive<T> | undefined): Partial<Record<MPWindowClass, T>>;
38
+ /**
39
+ * Turns a responsive value into the `--_mp-{name}-{class}` slots the stylesheet
40
+ * reads, writing only the classes the caller actually named.
41
+ *
42
+ * `toCss` is the component's own, because what a number means is the component's
43
+ * business: a span is a count, a gutter is a length on Tailwind's spacing scale,
44
+ * a measure is either a rung of the size ladder or a length said outright.
45
+ */
46
+ export declare function responsiveSlots<T>(name: string, value: MPResponsive<T> | undefined, toCss: (value: T) => string): React.CSSProperties;
47
+ /**
48
+ * Fills the `compact` entry of a partial map in with the prop's own default.
49
+ *
50
+ * Without this, `spacing={{ expanded: 8 }}` would be a grid with no gutter at all
51
+ * below 840dp — the stylesheet's `0px` fallback rather than the documented 4 —
52
+ * and a caller who widened one class would silently lose every class under it. A
53
+ * map says "from here up, this instead"; it does not say "and nothing below".
54
+ */
55
+ export declare function withBaseline<T>(value: MPResponsive<T> | undefined, baseline: T): MPResponsive<T>;
@@ -0,0 +1 @@
1
+ import{WINDOW_CLASSES as o}from"./window-class.js";export function classMap(o){return null==o?{}:"object"==typeof o?o:{compact:o}}export function responsiveSlots(t,n,c){const e=classMap(n),s={};for(const n of o){const o=e[n];void 0!==o&&(s[`--_mp-${t}-${n}`]=c(o))}return s}export function withBaseline(o,t){return null==o?t:"object"==typeof o?{compact:t,...o}:o}
@@ -116,23 +116,6 @@ export declare const SHEET_TITLE: Record<MPSize, string>;
116
116
  export declare const SHEET_GAP: Record<MPSize, string>;
117
117
  /** The gap between a control and the text stacked above or below it. */
118
118
  export declare const STACK_GAP: Record<MPSize, string>;
119
- /**
120
- * The measure — how wide a row of content is allowed to get — in `rem` and
121
- * pinned to MD3's window size class boundaries: 600, 840, 1200 and 1600dp, with
122
- * one rung below them.
123
- *
124
- * So `maxWidth="md"` is "never wider than a medium window", which is a sentence
125
- * about the specification rather than a number somebody liked. Tailwind's own
126
- * `max-w-*` scale is a different set — `max-w-lg` is 32rem — and two ladders
127
- * called `lg` on one page is how a layout drifts by a few pixels for no reason
128
- * anybody can find later.
129
- *
130
- * It is here rather than in `MPContainer`, which was its first reader, for the
131
- * reason at the top of this file: a header, a footer and a container that hold
132
- * their content to "a medium window" have to agree on where that edge is, or the
133
- * bar and the article under it line up at every width but one.
134
- */
135
- export declare const MEASURE: Record<MPSize, string>;
136
119
  /**
137
120
  * Whether a slot was given something worth drawing a wrapper around.
138
121
  *
@@ -1 +1 @@
1
- export const CONTROL_HEIGHT={xs:"h-8",sm:"h-10",md:"h-14",lg:"h-16",xl:"h-18"};export const CONTROL_SQUARE={xs:"size-8",sm:"size-10",md:"size-14",lg:"size-16",xl:"size-18"};export const CONTROL_TEXT={xs:"text-mp-label-large",sm:"text-mp-label-large",md:"text-mp-title-medium",lg:"text-mp-title-medium",xl:"text-mp-title-medium"};export const CONTROL_PAD_X={xs:"px-3",sm:"px-4",md:"px-6",lg:"px-8",xl:"px-10"};export const CONTROL_GAP={xs:"gap-1.5",sm:"gap-2",md:"gap-2",lg:"gap-2.5",xl:"gap-3"};export const CONTROL_ICON={xs:16,sm:18,md:20,lg:22,xl:24};export const PROSE_TEXT={xs:"text-mp-body-medium",sm:"text-mp-body-medium",md:"text-mp-body-large",lg:"text-mp-body-large",xl:"text-mp-body-large"};export const META_TEXT="text-mp-body-small";export const SHEET_PAD={xs:"p-2.5",sm:"p-3",md:"p-4",lg:"p-5",xl:"p-6"};export const SHEET_PAD_X={xs:"px-2.5",sm:"px-3",md:"px-4",lg:"px-5",xl:"px-6"};export const SHEET_PAD_Y={xs:"py-2.5",sm:"py-3",md:"py-4",lg:"py-5",xl:"py-6"};export const SHEET_TITLE={xs:"text-mp-title-small",sm:"text-mp-title-small",md:"text-mp-title-medium",lg:"text-mp-title-large",xl:"text-mp-headline-small"};export const SHEET_GAP={xs:"gap-1.5",sm:"gap-2",md:"gap-3",lg:"gap-3.5",xl:"gap-4"};export const STACK_GAP={xs:"gap-0.5",sm:"gap-0.5",md:"gap-1",lg:"gap-1",xl:"gap-1.5"};export const MEASURE={xs:"max-w-[30rem]",sm:"max-w-[37.5rem]",md:"max-w-[52.5rem]",lg:"max-w-[75rem]",xl:"max-w-[100rem]"};export function hasContent(t){return null!=t&&!1!==t&&""!==t}
1
+ export const CONTROL_HEIGHT={xs:"h-8",sm:"h-10",md:"h-14",lg:"h-16",xl:"h-18"};export const CONTROL_SQUARE={xs:"size-8",sm:"size-10",md:"size-14",lg:"size-16",xl:"size-18"};export const CONTROL_TEXT={xs:"text-mp-label-large",sm:"text-mp-label-large",md:"text-mp-title-medium",lg:"text-mp-title-medium",xl:"text-mp-title-medium"};export const CONTROL_PAD_X={xs:"px-3",sm:"px-4",md:"px-6",lg:"px-8",xl:"px-10"};export const CONTROL_GAP={xs:"gap-1.5",sm:"gap-2",md:"gap-2",lg:"gap-2.5",xl:"gap-3"};export const CONTROL_ICON={xs:16,sm:18,md:20,lg:22,xl:24};export const PROSE_TEXT={xs:"text-mp-body-medium",sm:"text-mp-body-medium",md:"text-mp-body-large",lg:"text-mp-body-large",xl:"text-mp-body-large"};export const META_TEXT="text-mp-body-small";export const SHEET_PAD={xs:"p-2.5",sm:"p-3",md:"p-4",lg:"p-5",xl:"p-6"};export const SHEET_PAD_X={xs:"px-2.5",sm:"px-3",md:"px-4",lg:"px-5",xl:"px-6"};export const SHEET_PAD_Y={xs:"py-2.5",sm:"py-3",md:"py-4",lg:"py-5",xl:"py-6"};export const SHEET_TITLE={xs:"text-mp-title-small",sm:"text-mp-title-small",md:"text-mp-title-medium",lg:"text-mp-title-large",xl:"text-mp-headline-small"};export const SHEET_GAP={xs:"gap-1.5",sm:"gap-2",md:"gap-3",lg:"gap-3.5",xl:"gap-4"};export const STACK_GAP={xs:"gap-0.5",sm:"gap-0.5",md:"gap-1",lg:"gap-1",xl:"gap-1.5"};export function hasContent(t){return null!=t&&!1!==t&&""!==t}
@@ -51,6 +51,21 @@ export declare const BULLET_GAP: Record<MPSize, string>;
51
51
  export declare const ITEM_GAP: Record<MPSize, string>;
52
52
  /** The same ladder across, for the horizontal form. */
53
53
  export declare const ITEM_GAP_X: Record<MPSize, string>;
54
+ /**
55
+ * What everything that changes with a step's status eases on.
56
+ *
57
+ * The bullet always had this. The line leaving it and the title beside it did
58
+ * not, so advancing a stepper drew one event twice: a bullet filling with the
59
+ * accent over 200ms, and a connector and a heading arriving at their new colours
60
+ * in the frame the state changed. A sequence is read across, and the half of it
61
+ * that snapped was the half that carries the eye to the next step.
62
+ *
63
+ * `border-color` and `color` rather than a blanket `transition-colors`, which
64
+ * would also put the `background-color` and the `box-shadow` of the three-line
65
+ * `BULLET` table on every connector — a line has neither, and a transition
66
+ * listing a property nothing declares is a declaration the browser keeps.
67
+ */
68
+ export declare const STEP_MOTION: string;
54
69
  export declare const BORDER_STYLE: Record<MPStepConnector, string>;
55
70
  /**
56
71
  * The bullet at each of the three states.
@@ -1 +1 @@
1
- export const BULLET_SIZE={xs:"0.875rem",sm:"1rem",md:"1.25rem",lg:"1.5rem",xl:"1.875rem"};export const BULLET_GAP={xs:"gap-2",sm:"gap-2.5",md:"gap-3",lg:"gap-3.5",xl:"gap-4"};export const ITEM_GAP={xs:"pb-5",sm:"pb-6",md:"pb-7",lg:"pb-8",xl:"pb-10"};export const ITEM_GAP_X={xs:"pe-5",sm:"pe-6",md:"pe-7",lg:"pe-8",xl:"pe-10"};export const BORDER_STYLE={solid:"border-solid",dashed:"border-dashed",dotted:"border-dotted",none:""};export const BULLET={complete:"bg-(--_mp-accent) text-(--_mp-on-accent)",current:"bg-(--_mp-accent) text-(--_mp-on-accent) shadow-[0_0_0_0.25rem_var(--_mp-accent-container)]",upcoming:"border-mp-outline text-mp-on-surface-variant border-2 bg-transparent"};export const CONNECTOR_COLOR={complete:"border-(--_mp-accent)",current:"border-mp-outline-variant",upcoming:"border-mp-outline-variant"};export const TITLE_COLOR={complete:"text-mp-on-surface",current:"text-(--_mp-accent)",upcoming:"text-mp-on-surface-variant"};
1
+ export const BULLET_SIZE={xs:"0.875rem",sm:"1rem",md:"1.25rem",lg:"1.5rem",xl:"1.875rem"};export const BULLET_GAP={xs:"gap-2",sm:"gap-2.5",md:"gap-3",lg:"gap-3.5",xl:"gap-4"};export const ITEM_GAP={xs:"pb-5",sm:"pb-6",md:"pb-7",lg:"pb-8",xl:"pb-10"};export const ITEM_GAP_X={xs:"pe-5",sm:"pe-6",md:"pe-7",lg:"pe-8",xl:"pe-10"};export const STEP_MOTION=/*@__PURE__*/["transition-[border-color,color]","duration-(--mp-sys-motion-duration-short4)","ease-mp-standard"].join(" ");export const BORDER_STYLE={solid:"border-solid",dashed:"border-dashed",dotted:"border-dotted",none:""};export const BULLET={complete:"bg-(--_mp-accent) text-(--_mp-on-accent)",current:"bg-(--_mp-accent) text-(--_mp-on-accent) shadow-[0_0_0_0.25rem_var(--_mp-accent-container)]",upcoming:"border-mp-outline text-mp-on-surface-variant border-2 bg-transparent"};export const CONNECTOR_COLOR={complete:"border-(--_mp-accent)",current:"border-mp-outline-variant",upcoming:"border-mp-outline-variant"};export const TITLE_COLOR={complete:"text-mp-on-surface",current:"text-(--_mp-accent)",upcoming:"text-mp-on-surface-variant"};
@@ -0,0 +1,53 @@
1
+ import * as React from 'react';
2
+ import type { MPDensity, MPSize } from '../types.js';
3
+ /**
4
+ * The cell padding at a density step: two pixels off each face, which is MD3's
5
+ * four off the row.
6
+ *
7
+ * The two axes bottom out in different places because they are answering
8
+ * different questions. Sideways it is the room between one column and the next,
9
+ * and 6px is where two numbers start touching. Vertically it is the row height,
10
+ * and 4px is what keeps the shortest row — `body-small`'s 16px line box at `xs`
11
+ * — on the 24px floor `MPDensity` names.
12
+ */
13
+ export declare function cellPadX(size: MPSize, density: MPDensity): string;
14
+ export declare function cellPadY(size: MPSize, density: MPDensity): string;
15
+ /**
16
+ * What a cell is set in. MD3's data table puts its cells in `body-medium` and
17
+ * its column headings in `title-small` — 14px at weight 500, which is the same
18
+ * size one weight up, so a heading reads as a heading without changing the
19
+ * column's measure.
20
+ */
21
+ export declare const CELL_TEXT: Record<MPSize, string>;
22
+ export declare const HEAD_TEXT: Record<MPSize, string>;
23
+ /**
24
+ * A row's own background, read from a slot rather than written inline.
25
+ *
26
+ * Everything else about a cell is inline because a host stylesheet outranks a
27
+ * utility — but a row has a *hover* state, and an inline style has no `:hover`.
28
+ * A custom property is the way out: the host cannot see it, so a one-class
29
+ * variant sets it without a fight, and the inline `background-color` on the row
30
+ * just reads whatever it currently holds.
31
+ */
32
+ export declare const ROW: string;
33
+ /**
34
+ * A cell's raw value, if React can draw it, and nothing if it cannot.
35
+ *
36
+ * Without `render`, a cell is `row[column.key]` — and `Row` is the caller's own
37
+ * type, so that value is genuinely anything. A `Date`, a nested object, a `Map`:
38
+ * handed to React each of them throws *Objects are not valid as a React child*,
39
+ * from inside a `.map()` in a `<tbody>`, which takes down the table and every
40
+ * boundary above it. One unexpected column in an API response was a blank page.
41
+ *
42
+ * A blank cell is the honest answer to "this is not text". The column already
43
+ * has `render` for the case where it is something else, and the prop docs
44
+ * already say so — what was missing is that failing to reach for it cost the
45
+ * whole page rather than one cell.
46
+ *
47
+ * The list is what React itself will draw: strings, numbers, bigints, and the
48
+ * three nothings. `null`, `undefined` and `boolean` are already nothing to
49
+ * React, and are passed through rather than filtered so that the `false` a
50
+ * `condition && value` leaves behind stays as harmless here as it is anywhere
51
+ * else in this library.
52
+ */
53
+ export declare function drawableCell(value: unknown): React.ReactNode;
@@ -0,0 +1 @@
1
+ import*as t from"react";const e={xs:10,sm:12,md:16,lg:20,xl:24},m={xs:6,sm:10,md:16,lg:20,xl:24};function l(t){return t/16+"rem"}export function cellPadX(t,m){return l(Math.max(6,e[t]+2*m))}export function cellPadY(t,e){return l(Math.max(4,m[t]+2*e))}export const CELL_TEXT={xs:"text-mp-body-small",sm:"text-mp-body-small",md:"text-mp-body-medium",lg:"text-mp-body-medium",xl:"text-mp-body-large"};export const HEAD_TEXT={xs:"text-mp-label-medium",sm:"text-mp-label-medium",md:"text-mp-title-small",lg:"text-mp-title-small",xl:"text-mp-title-medium"};export const ROW=/*@__PURE__*/["[--_mp-row:transparent]","transition-[background-color] duration-(--mp-sys-motion-duration-short4)"].join(" ");export function drawableCell(e){if(null==e)return null;const m=typeof e;return"string"===m||"number"===m||"bigint"===m||"boolean"===m||t.isValidElement(e)?e:null}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Where a character ends, and where a word does.
3
+ *
4
+ * One module, because the alternative is three. `MPAnimateTyping` counts
5
+ * characters, `MPAnimateScramble` replaces them and `MPAnimateSplit` hands each
6
+ * one its own delay, and every one of those has to agree about what a character
7
+ * *is*. Three copies would be three opinions, and they would only disagree on
8
+ * the text nobody tests with.
9
+ *
10
+ * ## Why not `[...text]`, and why not `split('')`
11
+ *
12
+ * A code point is not a character. `👩‍👩‍👧` is seven of them joined by zero-width
13
+ * joiners; `한` typed on a Korean keyboard can be three; a flag is two; an
14
+ * accented letter may be one or two depending on how the file was normalised.
15
+ * A typewriter that advances by code points spends four frames assembling an
16
+ * emoji out of parts that mean nothing on their own, and a splitter that does it
17
+ * hands a screen reader — or a `key` — a fragment that is not a character.
18
+ *
19
+ * `split('')` is worse again: it splits by UTF-16 code *unit*, so it halves
20
+ * every astral character into two lone surrogates, which render as `�`.
21
+ *
22
+ * ## Why not `split(' ')` for words
23
+ *
24
+ * Because a word boundary is not a space anywhere east of Myanmar. Japanese,
25
+ * Chinese, Thai, Khmer and Lao write without them, so splitting on whitespace
26
+ * hands back the entire sentence as a single fragment — an effect that silently
27
+ * does nothing, in the languages where nobody testing it would notice.
28
+ *
29
+ * `Intl.Segmenter` knows both boundaries and is in every current engine. The
30
+ * fallbacks below are for a runtime that does not have it, and they are the
31
+ * naive answers rather than an attempt at a second implementation: something
32
+ * imperfect that runs beats an effect that throws.
33
+ */
34
+ import * as React from 'react';
35
+ /**
36
+ * The text a node carries, and nothing about its markup.
37
+ *
38
+ * Elements contribute nothing on purpose. There is no honest way to type out
39
+ * half of a link, or to scramble the third character of a `<strong>` and leave
40
+ * the emphasis intact — the effects that read this animate *text*, so what they
41
+ * take is text.
42
+ */
43
+ export declare function textOf(node: React.ReactNode): string;
44
+ /** The text split the way a reader would split it: by grapheme cluster. */
45
+ export declare function graphemesOf(text: string, locale?: string): string[];
46
+ /**
47
+ * The text split into words, with the space after each one kept on it.
48
+ *
49
+ * Kept rather than dropped, because a set of fragments that has thrown its
50
+ * whitespace away cannot be laid out again: joining with `' '` puts a space
51
+ * where a line break was and another one before a full stop. Each fragment
52
+ * carries what followed it, so the pieces still concatenate to the original.
53
+ *
54
+ * `isWordLike` is what separates a word from the punctuation and spacing
55
+ * between two of them, and the run of non-words after a word is folded onto it.
56
+ */
57
+ export declare function wordsOf(text: string, locale?: string): string[];
@@ -0,0 +1 @@
1
+ import{segmenter as t}from"./intl.js";const e={granularity:"grapheme"},r={granularity:"word"};export function textOf(t){return"string"==typeof t||"number"==typeof t?String(t):Array.isArray(t)?t.map(textOf).join(""):""}export function graphemesOf(r,n){const o=t(n,e);return o?[...o.segment(r)].map(t=>t.segment):[...r]}export function wordsOf(e,n){const o=t(n,r);if(!o)return e.match(/\S+\s*|\s+/g)??[];const s=[];for(const t of o.segment(e))t.isWordLike||0===s.length?s.push(t.segment):s[s.length-1]+=t.segment;return s}
@@ -0,0 +1,19 @@
1
+ import type { MPColor, MPThreshold } from '../types.js';
2
+ /**
3
+ * Where a reading changes colour, resolved once.
4
+ *
5
+ * A meter and a gauge are the same quantity in two shapes, and a page carrying
6
+ * both must not disagree about where the amber starts. That is the whole reason
7
+ * this is not a private function inside whichever component needed it first —
8
+ * two copies of a scan this short would agree until the day one of them was
9
+ * edited alone.
10
+ *
11
+ * It is a file of its own rather than a section of `internal/chart.ts` because
12
+ * `MPMeter` is not a chart: reaching into that module for six lines would hand
13
+ * a bar the scales, the path builders and the palette.
14
+ *
15
+ * Written as a scan rather than a sort, so the array is read in the order it
16
+ * was given. Thresholds are meant to be listed in ascending order, and quietly
17
+ * reordering them would hide the one call site that did not.
18
+ */
19
+ export declare function thresholdColor(value: number, color: MPColor, thresholds: readonly MPThreshold[] | undefined): MPColor;
@@ -0,0 +1 @@
1
+ export function thresholdColor(o,r,t){if(!t||0===t.length)return r;let e=r;for(const r of t)o>=r.from&&(e=r.color);return e}
@@ -0,0 +1,44 @@
1
+ import type { ValueScale } from './chart.js';
2
+ /**
3
+ * A scale for an axis of instants.
4
+ *
5
+ * `valueScale`'s 1-2-5-10 family is the right one for a count and exactly the
6
+ * wrong one for a moment: run on epoch milliseconds it produces a tick every
7
+ * 200,000,000 ms, which lands at 14:53:20 on an arbitrary Tuesday. Nobody reads
8
+ * that. Time is not decimal below the year — sixty, sixty, twenty-four, seven,
9
+ * twelve — so its steps are written down rather than derived.
10
+ *
11
+ * A file of its own because only the timeline needs it. The other seven charts
12
+ * would carry a calendar for nothing.
13
+ */
14
+ /** The units a time axis is allowed to step in. */
15
+ export type TimeUnit = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';
16
+ /** A value scale whose ticks are instants, plus the unit they step in. */
17
+ export interface TimeScale extends ValueScale {
18
+ unit: TimeUnit;
19
+ count: number;
20
+ }
21
+ /**
22
+ * The scale an axis of instants runs on.
23
+ *
24
+ * The ends round outward to the step, exactly as `valueScale`'s do, so an axis
25
+ * of work starting on a Wednesday afternoon begins at midnight on the Wednesday
26
+ * rather than at the first task's start.
27
+ */
28
+ export declare function timeScale(extent: {
29
+ min: number;
30
+ max: number;
31
+ } | null, options?: {
32
+ min?: number;
33
+ max?: number;
34
+ tickCount?: number;
35
+ }): TimeScale;
36
+ /**
37
+ * A tick written at the resolution its step implies.
38
+ *
39
+ * An axis stepping in hours writes clock times and one stepping in months
40
+ * writes month names. Writing the whole instant at every step would be an axis
41
+ * of identical strings differing in one field, which is the least readable form
42
+ * of a date there is.
43
+ */
44
+ export declare function formatTimeTick(value: number, unit: TimeUnit, locale: string | undefined): string;
@@ -0,0 +1 @@
1
+ import{dateTimeFormatter as e}from"./intl.js";const t=1e3,n=6e4,o=36e5,s=24*o,u=[{unit:"second",count:1,size:t},{unit:"second",count:5,size:5e3},{unit:"second",count:15,size:15e3},{unit:"second",count:30,size:3e4},{unit:"minute",count:1,size:n},{unit:"minute",count:5,size:3e5},{unit:"minute",count:15,size:9e5},{unit:"minute",count:30,size:18e5},{unit:"hour",count:1,size:o},{unit:"hour",count:3,size:3*o},{unit:"hour",count:6,size:6*o},{unit:"hour",count:12,size:12*o},{unit:"day",count:1,size:s},{unit:"day",count:2,size:2*s},{unit:"week",count:1,size:7*s},{unit:"month",count:1,size:30*s},{unit:"month",count:3,size:91*s},{unit:"year",count:1,size:365*s}];function i(e,t,n){const o=new Date(e);switch(t){case"second":o.setSeconds(o.getSeconds()+n);break;case"minute":o.setMinutes(o.getMinutes()+n);break;case"hour":o.setHours(o.getHours()+n);break;case"day":o.setDate(o.getDate()+n);break;case"week":o.setDate(o.getDate()+7*n);break;case"month":o.setMonth(o.getMonth()+n);break;default:o.setFullYear(o.getFullYear()+n)}return o.getTime()}function a(e,t,n){const o=function(e,t){const n=new Date(e);switch(t){case"second":n.setMilliseconds(0);break;case"minute":n.setSeconds(0,0);break;case"hour":n.setMinutes(0,0,0);break;case"day":n.setHours(0,0,0,0);break;case"week":n.setHours(0,0,0,0),n.setDate(n.getDate()-(n.getDay()+6)%7);break;case"month":n.setHours(0,0,0,0),n.setDate(1);break;default:n.setHours(0,0,0,0),n.setMonth(0,1)}return n.getTime()}(e,t);if(n<=1)return o;const s=new Date(o);switch(t){case"second":s.setSeconds(Math.floor(s.getSeconds()/n)*n);break;case"minute":s.setMinutes(Math.floor(s.getMinutes()/n)*n);break;case"hour":s.setHours(Math.floor(s.getHours()/n)*n);break;case"month":s.setMonth(Math.floor(s.getMonth()/n)*n);break;case"year":s.setFullYear(Math.floor(s.getFullYear()/n)*n)}return s.getTime()}export function timeScale(e,t={}){const{tickCount:n=6}=t,r=t.min??e?.min??Date.now(),c=t.max??e?.max??r+s,h=c-r||2*o,m=h/Math.max(1,n),d=u.reduce((e,t)=>Math.abs(Math.log(t.size/m))<Math.abs(Math.log(e.size/m))?t:e),l="year"===d.unit?function(e){const t=10**Math.floor(Math.log10(Math.max(1,e))),n=Math.max(1,e)/t;return n<=1?t:n<=2?2*t:n<=5?5*t:10*t}(h/(365*s)/n):d.count,M=void 0!==t.min?r:a(r,d.unit,l),g=void 0!==t.max?c:(()=>{let e=M;do{e=i(e,d.unit,l)}while(e<c);return e})(),k=g-M||1,f=[];for(let e=M;e<=g&&(f.push(e),!(f.length>500));e=i(e,d.unit,l));return{min:M,max:g,ticks:f,unit:d.unit,count:l,fraction:e=>(e-M)/k}}export function formatTimeTick(t,n,o){return e(o,"second"===n?{minute:"2-digit",second:"2-digit"}:"minute"===n||"hour"===n?{hour:"numeric",minute:"2-digit"}:"day"===n||"week"===n?{month:"short",day:"numeric"}:"month"===n?{year:"numeric",month:"short"}:{year:"numeric"}).format(t)}
@@ -0,0 +1,33 @@
1
+ import type * as React from 'react';
2
+ import type { MPAnimation, MPEasing, MPTransition } from '../types.js';
3
+ /**
4
+ * The class and the inline slots one transition comes to.
5
+ *
6
+ * Split from `transitionProps` because `MPStack` needs the *options* rather than
7
+ * the finished style: it has a per-child step to add to the delay before the
8
+ * slots are filled. One table read by both is what keeps `transition="fade"` the
9
+ * same fade on a card and on a stack item.
10
+ */
11
+ export declare function transitionParts(transition: MPTransition | undefined): {
12
+ effect: MPAnimation;
13
+ duration?: number;
14
+ delay: number;
15
+ easing?: MPEasing;
16
+ opacity: number;
17
+ scale?: number;
18
+ x?: string;
19
+ y?: string;
20
+ angle?: string;
21
+ clip?: string;
22
+ } | null;
23
+ /**
24
+ * The same reading, as the two things a component spreads onto its root.
25
+ *
26
+ * Returns empty strings and an empty object rather than `null` for the common
27
+ * case, so a caller composes them unconditionally instead of branching around
28
+ * them at every call site.
29
+ */
30
+ export declare function transitionProps(transition: MPTransition | undefined): {
31
+ className: string;
32
+ style: React.CSSProperties;
33
+ };
@@ -0,0 +1 @@
1
+ import{ANIM_BASE as e,ANIMATION_CLASS as t,animationSlots as a,revealClip as o,slideOffsets as n}from"./animate-core.js";const r={grow:.8,zoom:.4};export function transitionParts(e){if(!e)return null;const t="string"==typeof e?{effect:e}:e,{effect:a}=t,s="slide"===a?n(t.from??"bottom",t.distance??"100%"):null;return{effect:a,duration:t.duration,delay:t.delay??0,easing:t.easing,opacity:!1===t.fade||"reveal"===a?1:0,scale:t.scale??r[a],x:s?.x,y:s?.y,angle:"rotate"===a?`${t.angle??-180}deg`:void 0,clip:"reveal"===a?o(t.from??"left"):void 0}}export function transitionProps(o){const n=transitionParts(o);return n?{className:`${e} ${t[n.effect]}`,style:a({...n,repeat:1})}:{className:"",style:{}}}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Showing and hiding at a window size class, as class names.
3
+ *
4
+ * Two components need this and neither is really about it: `MPShow` is nothing
5
+ * but this, and `MPSidebar` uses it to keep a column off a narrow screen for the
6
+ * one paint before JavaScript has found out how wide the window is.
7
+ *
8
+ * ## Why it is CSS and not the hook
9
+ *
10
+ * `useMPWindowClass` could answer the same question, and a page that swapped a
11
+ * whole navigation pattern on it would be right — eventually. The correction is
12
+ * a second render, so the first paint is a guess, and on a phone that guess is a
13
+ * desktop sidebar drawn and thrown away. A media query has no first render to be
14
+ * wrong: the browser resolves it before it paints anything, on the server's own
15
+ * markup.
16
+ *
17
+ * The cost is that both branches are in the DOM. That is the trade, and it is
18
+ * the right way round for a nav bar or a column of filters and the wrong way
19
+ * round for a heavy subtree that only one width ever sees — which is where the
20
+ * hook earns its second render.
21
+ *
22
+ * ## Why the names are written out
23
+ *
24
+ * These are Tailwind's own `hidden`, under the variants `src/styles.css`
25
+ * registers. Tailwind finds classes by scanning source text, so
26
+ * `mp-${windowClass}:hidden` assembled at runtime generates no rule at all and
27
+ * the component comes out visible at every width. Ten literal strings is what
28
+ * that costs, and it is why these are tables rather than a function.
29
+ *
30
+ * A consumer can spell the same classes — they are in the shipped stylesheet
31
+ * either way.
32
+ */
33
+ import type { MPWindowClass } from '../types.js';
34
+ /**
35
+ * Hidden while the window is *narrower* than this class — "show from here up".
36
+ *
37
+ * `compact` is the empty string rather than a class: no window is narrower than
38
+ * compact, so there is nothing to hide it at.
39
+ */
40
+ export declare const HIDDEN_BELOW: Record<MPWindowClass, string>;
41
+ /**
42
+ * Hidden from this class *up* — "show until here", the upper bound.
43
+ *
44
+ * `compact` is a plain `hidden`, and that is not a special case being smuggled
45
+ * in: shown only below compact is shown nowhere, and the honest answer to a
46
+ * bound of zero is an element that never appears.
47
+ */
48
+ export declare const HIDDEN_FROM: Record<MPWindowClass, string>;
@@ -0,0 +1 @@
1
+ export const HIDDEN_BELOW={compact:"",medium:"mp-below-medium:hidden",expanded:"mp-below-expanded:hidden",large:"mp-below-large:hidden","extra-large":"mp-below-extra-large:hidden"};export const HIDDEN_FROM={compact:"hidden",medium:"mp-medium:hidden",expanded:"mp-expanded:hidden",large:"mp-large:hidden","extra-large":"mp-extra-large:hidden"};
@@ -9,13 +9,40 @@ export declare const WINDOW_CLASSES: readonly MPWindowClass[];
9
9
  * window narrower than no window.
10
10
  */
11
11
  export declare const WINDOW_MIN: Record<MPWindowClass, number>;
12
- /** Which class a width falls in. Widest match wins. */
13
- export declare function windowClassFor(width: number): MPWindowClass;
12
+ /**
13
+ * The media query a floor is, and the one below it.
14
+ *
15
+ * A width rather than a class name, because the floors are no longer constants:
16
+ * whose ladder is being asked about is the caller's business and this only
17
+ * knows how to say one. Nought has no query — every window is at least that
18
+ * wide — and both return `null` there, which a caller reads as "there is nothing
19
+ * to watch".
20
+ */
21
+ export declare function atLeast(min: number): string | null;
22
+ export declare function below(min: number): string | null;
23
+ /**
24
+ * The floors in force at this point in the tree.
25
+ *
26
+ * MD3's, with whatever an `MPConfigProvider` moved written over them. `compact`
27
+ * is forced back to nought whatever it was given: a class whose floor is above
28
+ * zero leaves a band of windows in no class at all.
29
+ *
30
+ * The object is rebuilt on every call rather than memoised, and deliberately —
31
+ * every caller turns it into a number or a string before doing anything with it,
32
+ * so its identity is never a dependency of anything. Memoising it would be a
33
+ * `useMemo` whose own dependency is the identity of a prop callers write inline.
34
+ */
35
+ export declare function useWindowMins(): Record<MPWindowClass, number>;
14
36
  /**
15
37
  * `useSyncExternalStore` rather than an effect and a `useState`, for the reason
16
38
  * `useMPCollapsed` gives: the hook needs a **server snapshot**, and this is the
17
39
  * one API that tells React the server's answer and the client's are meant to
18
40
  * differ. An effect would render the wrong layout once and then correct it,
19
41
  * which React would not know to expect.
42
+ *
43
+ * The ladder reaches the store as a string. Everything `useSyncExternalStore`
44
+ * is given has to be stable between renders or it resubscribes on each one, and
45
+ * a `breakpoints` prop written inline — which is how anybody would write it — is
46
+ * a new object every time its provider renders.
20
47
  */
21
48
  export declare function useWindowClass(onServer: MPWindowClass): MPWindowClass;
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import*as e from"react";export const WINDOW_CLASSES=["compact","medium","expanded","large","extra-large"];export const WINDOW_MIN={compact:0,medium:600,expanded:840,large:1200,"extra-large":1600};export function windowClassFor(e){let t="compact";for(const n of WINDOW_CLASSES)e>=WINDOW_MIN[n]&&(t=n);return t}let t=null;function n(){return"undefined"!=typeof window&&window.matchMedia?(t??=WINDOW_CLASSES.filter(e=>WINDOW_MIN[e]>0).map(e=>window.matchMedia(`(min-width: ${WINDOW_MIN[e]}px)`)),t):[]}function o(e){const t=n();for(const n of t)n.addEventListener("change",e);return()=>{for(const n of t)n.removeEventListener("change",e)}}export function useWindowClass(t){const r=e.useCallback(()=>function(e){const t=n();if(0===t.length)return e;let o="compact",r=0;for(const e of WINDOW_CLASSES)0!==WINDOW_MIN[e]&&(t[r]?.matches&&(o=e),r+=1);return o}(t),[t]);return e.useSyncExternalStore(o,r,r)}
2
+ import*as t from"react";import{MPConfigContext as e}from"./config.js";export const WINDOW_CLASSES=["compact","medium","expanded","large","extra-large"];export const WINDOW_MIN={compact:0,medium:600,expanded:840,large:1200,"extra-large":1600};export function atLeast(t){return t>0?`(width >= ${t}px)`:null}export function below(t){return t>0?`(width < ${t}px)`:null}export function useWindowMins(){const{breakpoints:n}=t.useContext(e);return n?{...WINDOW_MIN,...n,compact:0}:WINDOW_MIN}const n={classes:[],lists:[]},o=new Map;function s(t){if("undefined"==typeof window||!window.matchMedia)return n;let e=o.get(t);if(!e){const n=t.split(",").map(Number),s=WINDOW_CLASSES.map((t,e)=>[t,n[e]]).filter(([,t])=>t>0);e={classes:s.map(([t])=>t),lists:s.map(([,t])=>window.matchMedia(atLeast(t)))},o.set(t,e)}return e}export function useWindowClass(e){const n=(o=useWindowMins(),WINDOW_CLASSES.map(t=>o[t]).join(","));var o;const r=t.useCallback(t=>function(t,e){const{lists:n}=s(t);for(const t of n)t.addEventListener("change",e);return()=>{for(const t of n)t.removeEventListener("change",e)}}(n,t),[n]),a=t.useCallback(()=>function(t,e){const{classes:n,lists:o}=s(t);if(0===o.length)return e;let r=WINDOW_CLASSES[0];return n.forEach((t,e)=>{o[e]?.matches&&(r=t)}),r}(n,e),[n,e]);return t.useSyncExternalStore(r,a,a)}
@@ -1 +1 @@
1
- export const ar={locale:"ar",messages:{common:{close:"إغلاق",clear:"مسح",open:"فتح",remove:"إزالة",removeNamed:"إزالة {label}",loading:"جارٍ التحميل"},textField:{showPassword:"إظهار كلمة المرور",hidePassword:"إخفاء كلمة المرور"},empty:{title:"لا يوجد شيء هنا"},picker:{previousMonth:"الشهر السابق",nextMonth:"الشهر التالي",previousYear:"السنة السابقة",nextYear:"السنة التالية",previousYears:"السنوات السابقة",nextYears:"السنوات التالية",chooseMonth:"اختيار شهر",chooseYear:"اختيار سنة",today:"اليوم",thisMonth:"هذا الشهر",thisYear:"هذه السنة",now:"الآن",clear:"مسح",done:"تم",hour:"الساعة",minute:"الدقيقة",second:"الثانية",meridiem:"ص/م",start:"البداية",end:"النهاية"},numberField:{increase:"زيادة",decrease:"إنقاص"},carousel:{label:"عرض دوّار",previous:"الشريحة السابقة",next:"الشريحة التالية",slide:"الشريحة {index} من {total}"},breadcrumb:{label:"مسار التنقل",expand:"إظهار الخطوات المخفية"},combobox:{empty:"لا توجد نتائج",add:"إضافة ”{label}“"},table:{empty:"لا توجد بيانات"},filePicker:{prompt:"أفلِت الملفات هنا، أو انقر للاستعراض"},textLink:{newTab:"يُفتح في تبويب جديد"},overlay:{label:"طبقة تراكب"},alert:{dismiss:"إغلاق"},chat:{sending:"جارٍ الإرسال",sent:"تم الإرسال",delivered:"تم التسليم",read:"تمت القراءة",failed:"لم يتم الإرسال",typing:"يكتب الآن"},spoiler:{reveal:"إظهار",hide:"إخفاء",notice:"مخفي حتى لا يُقرأ بالخطأ"},pagination:{label:"ترقيم الصفحات",page:"الصفحة {page}",status:"الصفحة {page} من {total}",previous:"الصفحة السابقة",next:"الصفحة التالية",first:"الصفحة الأولى",last:"الصفحة الأخيرة"},rating:{label:"التقييم",value:"{value} من {max}",empty:"بدون تقييم"},colorPicker:{area:"التشبع والسطوع",hue:"درجة اللون",alpha:"العتامة",value:"قيمة اللون",swatches:"ألوان جاهزة",clear:"مسح",empty:"بلا لون"},transfer:{source:"المتاح",target:"المحدد",toTarget:"النقل إلى المحدد",toSource:"الإرجاع إلى المتاح",search:"بحث",empty:"لا شيء هنا"},command:{label:"لوحة الأوامر",search:"اكتب أمراً أو ابحث…",empty:"لا توجد أوامر مطابقة"},layout:{skipToContent:"تخطٍ إلى المحتوى",sidebar:"الشريط الجانبي",openSidebar:"فتح الشريط الجانبي",closeSidebar:"إغلاق الشريط الجانبي",resizeSidebar:"تغيير عرض الشريط الجانبي"},confirm:{confirm:"تأكيد",cancel:"إلغاء",ok:"حسنًا"}}};
1
+ export const ar={locale:"ar",messages:{common:{close:"إغلاق",clear:"مسح",open:"فتح",remove:"إزالة",removeNamed:"إزالة {label}",loading:"جارٍ التحميل"},textField:{showPassword:"إظهار كلمة المرور",hidePassword:"إخفاء كلمة المرور"},empty:{title:"لا يوجد شيء هنا"},picker:{previousMonth:"الشهر السابق",nextMonth:"الشهر التالي",previousYear:"السنة السابقة",nextYear:"السنة التالية",previousYears:"السنوات السابقة",nextYears:"السنوات التالية",chooseMonth:"اختيار شهر",chooseYear:"اختيار سنة",today:"اليوم",thisMonth:"هذا الشهر",thisYear:"هذه السنة",now:"الآن",clear:"مسح",done:"تم",hour:"الساعة",minute:"الدقيقة",second:"الثانية",meridiem:"ص/م",start:"البداية",end:"النهاية"},numberField:{increase:"زيادة",decrease:"إنقاص"},carousel:{label:"عرض دوّار",previous:"الشريحة السابقة",next:"الشريحة التالية",slide:"الشريحة {index} من {total}"},scroll:{label:"محتوى قابل للتمرير",previous:"التمرير للخلف",next:"التمرير للأمام"},anchor:{label:"في هذه الصفحة"},code:{copy:"نسخ",copied:"تم النسخ",copyFailed:"تعذّر النسخ",raw:"النص الخام",label:"شفرة"},breadcrumb:{label:"مسار التنقل",expand:"إظهار الخطوات المخفية"},combobox:{empty:"لا توجد نتائج",add:"إضافة ”{label}“"},tour:{previous:"رجوع",next:"التالي",done:"تم",skip:"تخطي",position:"الخطوة {index} من {total}"},chart:{label:"مخطط",table:"بيانات المخطط",category:"الفئة"},sparkline:{summary:"نقاط: {count}، من {first} إلى {last}"},table:{empty:"لا توجد بيانات"},dataTable:{selectAll:"تحديد كل الصفوف",selectRow:"تحديد الصف",total:"الصفوف: {total}",selected:"المحدد: {count}",download:"تنزيل CSV",perPage:"صفوف لكل صفحة",resize:"تغيير عرض العمود"},filePicker:{prompt:"أفلِت الملفات هنا، أو انقر للاستعراض"},textLink:{newTab:"يُفتح في تبويب جديد"},overlay:{label:"طبقة تراكب"},alert:{dismiss:"إغلاق"},chat:{sending:"جارٍ الإرسال",sent:"تم الإرسال",delivered:"تم التسليم",read:"تمت القراءة",failed:"لم يتم الإرسال",typing:"يكتب الآن"},spoiler:{reveal:"إظهار",hide:"إخفاء",notice:"مخفي حتى لا يُقرأ بالخطأ"},pagination:{label:"ترقيم الصفحات",page:"الصفحة {page}",status:"الصفحة {page} من {total}",previous:"الصفحة السابقة",next:"الصفحة التالية",first:"الصفحة الأولى",last:"الصفحة الأخيرة"},rating:{label:"التقييم",value:"{value} من {max}",empty:"بدون تقييم"},colorPicker:{area:"التشبع والسطوع",hue:"درجة اللون",alpha:"العتامة",value:"قيمة اللون",swatches:"ألوان جاهزة",clear:"مسح",empty:"بلا لون"},transfer:{source:"المتاح",target:"المحدد",toTarget:"النقل إلى المحدد",toSource:"الإرجاع إلى المتاح",search:"بحث",empty:"لا شيء هنا",moved:"تم النقل إلى {list}: {count}"},command:{label:"لوحة الأوامر",search:"اكتب أمراً أو ابحث…",empty:"لا توجد أوامر مطابقة"},layout:{skipToContent:"تخطٍ إلى المحتوى",sidebar:"الشريط الجانبي",openSidebar:"فتح الشريط الجانبي",closeSidebar:"إغلاق الشريط الجانبي",resizeSidebar:"تغيير عرض الشريط الجانبي"},confirm:{confirm:"تأكيد",cancel:"إلغاء",ok:"حسنًا"}}};
@@ -1 +1 @@
1
- export const de={locale:"de",messages:{common:{close:"Schließen",clear:"Löschen",open:"Öffnen",remove:"Entfernen",removeNamed:"{label} entfernen",loading:"Wird geladen"},textField:{showPassword:"Passwort anzeigen",hidePassword:"Passwort verbergen"},empty:{title:"Nichts vorhanden"},picker:{previousMonth:"Voriger Monat",nextMonth:"Nächster Monat",previousYear:"Voriges Jahr",nextYear:"Nächstes Jahr",previousYears:"Vorige Jahre",nextYears:"Nächste Jahre",chooseMonth:"Monat auswählen",chooseYear:"Jahr auswählen",today:"Heute",thisMonth:"Dieser Monat",thisYear:"Dieses Jahr",now:"Jetzt",clear:"Löschen",done:"Fertig",hour:"Stunde",minute:"Minute",second:"Sekunde",meridiem:"AM/PM",start:"Beginn",end:"Ende"},numberField:{increase:"Erhöhen",decrease:"Verringern"},carousel:{label:"Karussell",previous:"Vorherige Folie",next:"Nächste Folie",slide:"Folie {index} von {total}"},breadcrumb:{label:"Brotkrümelnavigation",expand:"Ausgeblendete Schritte anzeigen"},combobox:{empty:"Keine Treffer",add:"„{label}“ hinzufügen"},table:{empty:"Keine Daten"},filePicker:{prompt:"Dateien hier ablegen oder zum Auswählen klicken"},textLink:{newTab:"Wird in einem neuen Tab geöffnet"},overlay:{label:"Overlay"},alert:{dismiss:"Schließen"},chat:{sending:"Wird gesendet",sent:"Gesendet",delivered:"Zugestellt",read:"Gelesen",failed:"Nicht gesendet",typing:"Schreibt"},spoiler:{reveal:"Anzeigen",hide:"Verbergen",notice:"Verborgen, damit es nicht versehentlich gelesen wird"},pagination:{label:"Seitennummerierung",page:"Seite {page}",status:"Seite {page} von {total}",previous:"Vorherige Seite",next:"Nächste Seite",first:"Erste Seite",last:"Letzte Seite"},rating:{label:"Bewertung",value:"{value} von {max}",empty:"Nicht bewertet"},colorPicker:{area:"Sättigung und Helligkeit",hue:"Farbton",alpha:"Deckkraft",value:"Farbwert",swatches:"Vorgegebene Farben",clear:"Löschen",empty:"Keine Farbe"},transfer:{source:"Verfügbar",target:"Ausgewählt",toTarget:"Zu Ausgewählt verschieben",toSource:"Zurück zu Verfügbar",search:"Suchen",empty:"Nichts vorhanden"},command:{label:"Befehlspalette",search:"Befehl eingeben oder suchen…",empty:"Keine Befehle gefunden"},layout:{skipToContent:"Zum Inhalt springen",sidebar:"Seitenleiste",openSidebar:"Seitenleiste öffnen",closeSidebar:"Seitenleiste schließen",resizeSidebar:"Seitenleiste anpassen"},confirm:{confirm:"Bestätigen",cancel:"Abbrechen",ok:"OK"}}};
1
+ export const de={locale:"de",messages:{common:{close:"Schließen",clear:"Löschen",open:"Öffnen",remove:"Entfernen",removeNamed:"{label} entfernen",loading:"Wird geladen"},textField:{showPassword:"Passwort anzeigen",hidePassword:"Passwort verbergen"},empty:{title:"Nichts vorhanden"},picker:{previousMonth:"Voriger Monat",nextMonth:"Nächster Monat",previousYear:"Voriges Jahr",nextYear:"Nächstes Jahr",previousYears:"Vorige Jahre",nextYears:"Nächste Jahre",chooseMonth:"Monat auswählen",chooseYear:"Jahr auswählen",today:"Heute",thisMonth:"Dieser Monat",thisYear:"Dieses Jahr",now:"Jetzt",clear:"Löschen",done:"Fertig",hour:"Stunde",minute:"Minute",second:"Sekunde",meridiem:"AM/PM",start:"Beginn",end:"Ende"},numberField:{increase:"Erhöhen",decrease:"Verringern"},carousel:{label:"Karussell",previous:"Vorherige Folie",next:"Nächste Folie",slide:"Folie {index} von {total}"},scroll:{label:"Scrollbarer Inhalt",previous:"Zurückscrollen",next:"Vorwärtsscrollen"},anchor:{label:"Auf dieser Seite"},code:{copy:"Kopieren",copied:"Kopiert",copyFailed:"Kopieren fehlgeschlagen",raw:"Unformatiert",label:"Code"},breadcrumb:{label:"Brotkrümelnavigation",expand:"Ausgeblendete Schritte anzeigen"},combobox:{empty:"Keine Treffer",add:"„{label}“ hinzufügen"},tour:{previous:"Zurück",next:"Weiter",done:"Fertig",skip:"Überspringen",position:"Schritt {index} von {total}"},chart:{label:"Diagramm",table:"Diagrammdaten",category:"Kategorie"},sparkline:{summary:"{count} Punkte, von {first} bis {last}"},table:{empty:"Keine Daten"},dataTable:{selectAll:"Alle Zeilen auswählen",selectRow:"Zeile auswählen",total:"Zeilen: {total}",selected:"Ausgewählt: {count}",download:"CSV herunterladen",perPage:"Zeilen pro Seite",resize:"Spaltenbreite ändern"},filePicker:{prompt:"Dateien hier ablegen oder zum Auswählen klicken"},textLink:{newTab:"Wird in einem neuen Tab geöffnet"},overlay:{label:"Overlay"},alert:{dismiss:"Schließen"},chat:{sending:"Wird gesendet",sent:"Gesendet",delivered:"Zugestellt",read:"Gelesen",failed:"Nicht gesendet",typing:"Schreibt"},spoiler:{reveal:"Anzeigen",hide:"Verbergen",notice:"Verborgen, damit es nicht versehentlich gelesen wird"},pagination:{label:"Seitennummerierung",page:"Seite {page}",status:"Seite {page} von {total}",previous:"Vorherige Seite",next:"Nächste Seite",first:"Erste Seite",last:"Letzte Seite"},rating:{label:"Bewertung",value:"{value} von {max}",empty:"Nicht bewertet"},colorPicker:{area:"Sättigung und Helligkeit",hue:"Farbton",alpha:"Deckkraft",value:"Farbwert",swatches:"Vorgegebene Farben",clear:"Löschen",empty:"Keine Farbe"},transfer:{source:"Verfügbar",target:"Ausgewählt",toTarget:"Zu Ausgewählt verschieben",toSource:"Zurück zu Verfügbar",search:"Suchen",empty:"Nichts vorhanden",moved:"Verschoben nach {list}: {count}"},command:{label:"Befehlspalette",search:"Befehl eingeben oder suchen…",empty:"Keine Befehle gefunden"},layout:{skipToContent:"Zum Inhalt springen",sidebar:"Seitenleiste",openSidebar:"Seitenleiste öffnen",closeSidebar:"Seitenleiste schließen",resizeSidebar:"Seitenleiste anpassen"},confirm:{confirm:"Bestätigen",cancel:"Abbrechen",ok:"OK"}}};