plass-ui 1.4.0 → 1.5.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 (253) hide show
  1. package/CHANGELOG.md +372 -0
  2. package/README.md +18 -16
  3. package/dist/components/accordion/PlAccordion.d.ts +1 -1
  4. package/dist/components/alert/PlAlert.js +1 -1
  5. package/dist/components/anchor/PlAnchor.d.ts +14 -1
  6. package/dist/components/anchor/PlAnchor.js +1 -1
  7. package/dist/components/animate-appear/PlAnimateAppear.js +1 -1
  8. package/dist/components/animate-blink/PlAnimateBlink.js +1 -1
  9. package/dist/components/animate-counter/PlAnimateCounter.js +1 -1
  10. package/dist/components/animate-fade/PlAnimateFade.js +1 -1
  11. package/dist/components/animate-float/PlAnimateFloat.js +1 -1
  12. package/dist/components/animate-grow/PlAnimateGrow.js +1 -1
  13. package/dist/components/animate-headline/PlAnimateHeadline.js +1 -1
  14. package/dist/components/animate-lighting/PlAnimateLighting.js +1 -1
  15. package/dist/components/animate-marquee/PlAnimateMarquee.d.ts +13 -4
  16. package/dist/components/animate-marquee/PlAnimateMarquee.js +1 -1
  17. package/dist/components/animate-reveal/PlAnimateReveal.js +1 -1
  18. package/dist/components/animate-rotate/PlAnimateRotate.js +1 -1
  19. package/dist/components/animate-scramble/PlAnimateScramble.js +1 -1
  20. package/dist/components/animate-shake/PlAnimateShake.js +1 -1
  21. package/dist/components/animate-slide/PlAnimateSlide.js +1 -1
  22. package/dist/components/animate-split/PlAnimateSplit.d.ts +7 -4
  23. package/dist/components/animate-split/PlAnimateSplit.js +1 -1
  24. package/dist/components/animate-typing/PlAnimateTyping.d.ts +3 -2
  25. package/dist/components/animate-typing/PlAnimateTyping.js +1 -1
  26. package/dist/components/animate-zoom/PlAnimateZoom.js +1 -1
  27. package/dist/components/app-logo/PlAppLogo.js +1 -1
  28. package/dist/components/area-chart/PlAreaChart.d.ts +1 -1
  29. package/dist/components/area-chart/PlAreaChart.js +1 -1
  30. package/dist/components/aspect-ratio/PlAspectRatio.d.ts +2 -1
  31. package/dist/components/aspect-ratio/PlAspectRatio.js +1 -1
  32. package/dist/components/avatar/PlAvatar.js +1 -1
  33. package/dist/components/back-top/PlBackTop.d.ts +2 -1
  34. package/dist/components/back-top/PlBackTop.js +1 -1
  35. package/dist/components/badge/PlBadge.js +1 -1
  36. package/dist/components/bar-chart/PlBarChart.d.ts +1 -1
  37. package/dist/components/bar-chart/PlBarChart.js +1 -1
  38. package/dist/components/bottom-navigation/PlBottomNavigation.d.ts +3 -0
  39. package/dist/components/breadcrumb/PlBreadcrumb.js +1 -1
  40. package/dist/components/button/PlButton.d.ts +8 -0
  41. package/dist/components/button/PlButton.js +1 -1
  42. package/dist/components/calendar/PlCalendar.js +1 -1
  43. package/dist/components/card/PlCard.js +1 -1
  44. package/dist/components/carousel/PlCarousel.d.ts +1 -1
  45. package/dist/components/carousel/PlCarousel.js +1 -1
  46. package/dist/components/chat-bubble/PlChatBubble.d.ts +4 -1
  47. package/dist/components/chat-bubble/PlChatBubble.js +1 -1
  48. package/dist/components/checkbox/PlCheckbox.js +1 -1
  49. package/dist/components/chip/PlChip.d.ts +6 -2
  50. package/dist/components/chip/PlChip.js +1 -1
  51. package/dist/components/code-block/PlCodeBlock.d.ts +19 -2
  52. package/dist/components/code-block/PlCodeBlock.js +1 -1
  53. package/dist/components/color-picker/PlColorPicker.js +1 -1
  54. package/dist/components/combobox/PlCombobox.d.ts +6 -5
  55. package/dist/components/combobox/PlCombobox.js +1 -1
  56. package/dist/components/command-palette/PlCommandPalette.d.ts +6 -2
  57. package/dist/components/command-palette/PlCommandPalette.js +1 -1
  58. package/dist/components/confirm/PlConfirmProvider.js +1 -1
  59. package/dist/components/container/PlContainer.js +1 -1
  60. package/dist/components/data-table/PlDataTable.d.ts +20 -6
  61. package/dist/components/data-table/PlDataTable.js +1 -1
  62. package/dist/components/date-picker/PlDatePicker.js +1 -1
  63. package/dist/components/date-range-picker/PlDateRangePicker.js +1 -1
  64. package/dist/components/date-time-picker/PlDateTimePicker.js +1 -1
  65. package/dist/components/drawer/PlDrawer.js +1 -1
  66. package/dist/components/file-picker/PlFilePicker.d.ts +4 -1
  67. package/dist/components/file-picker/PlFilePicker.js +1 -1
  68. package/dist/components/floating-bottom-navigation/PlFloatingBottomNavigation.d.ts +3 -0
  69. package/dist/components/floating-bottom-navigation/PlFloatingBottomNavigation.js +1 -1
  70. package/dist/components/form/PlForm.js +1 -1
  71. package/dist/components/gallery/PlGallery.d.ts +40 -2
  72. package/dist/components/gallery/PlGallery.js +1 -1
  73. package/dist/components/gallery/PlGalleryViewer.js +1 -1
  74. package/dist/components/gauge-chart/PlGaugeChart.js +1 -1
  75. package/dist/components/heatmap-chart/PlHeatmapChart.js +1 -1
  76. package/dist/components/highlight/PlHighlight.js +1 -1
  77. package/dist/components/hot-keys/PlHotKeys.js +1 -1
  78. package/dist/components/hover-card/PlHoverCard.d.ts +5 -3
  79. package/dist/components/hover-card/PlHoverCard.js +1 -1
  80. package/dist/components/how-to-steps/PlHowToSteps.js +1 -1
  81. package/dist/components/image/PlImage.d.ts +195 -8
  82. package/dist/components/image/PlImage.js +1 -1
  83. package/dist/components/image/PlImagePreview.d.ts +58 -0
  84. package/dist/components/image/PlImagePreview.js +1 -0
  85. package/dist/components/image/index.d.ts +1 -1
  86. package/dist/components/menu/PlMenu.d.ts +14 -5
  87. package/dist/components/menu/PlMenu.js +1 -1
  88. package/dist/components/meter/PlMeter.js +1 -1
  89. package/dist/components/navigation-menu/PlNavigationMenu.d.ts +7 -1
  90. package/dist/components/navigation-menu/PlNavigationMenu.js +1 -1
  91. package/dist/components/otp-field/PlOtpField.d.ts +6 -0
  92. package/dist/components/otp-field/PlOtpField.js +1 -1
  93. package/dist/components/page-layout/PlPageLayout.js +1 -1
  94. package/dist/components/pagination/PlPagination.d.ts +12 -9
  95. package/dist/components/pagination/PlPagination.js +1 -1
  96. package/dist/components/panes/PlPanes.d.ts +5 -0
  97. package/dist/components/panes/PlPanes.js +1 -1
  98. package/dist/components/pie-chart/PlPieChart.js +1 -1
  99. package/dist/components/pill/PlPill.js +1 -1
  100. package/dist/components/popover/PlPopover.d.ts +5 -5
  101. package/dist/components/popover/PlPopover.js +1 -1
  102. package/dist/components/progress-box/PlProgressBox.js +1 -1
  103. package/dist/components/progress-circular/PlProgressCircular.js +1 -1
  104. package/dist/components/progress-linear/PlProgressLinear.js +1 -1
  105. package/dist/components/radio-group/PlRadioGroup.js +1 -1
  106. package/dist/components/rating/PlRating.d.ts +1 -1
  107. package/dist/components/rating/PlRating.js +1 -1
  108. package/dist/components/scatter-chart/PlScatterChart.js +1 -1
  109. package/dist/components/scroll-area/PlScrollArea.js +1 -1
  110. package/dist/components/scroll-zone/PlScrollZone.d.ts +19 -6
  111. package/dist/components/scroll-zone/PlScrollZone.js +1 -1
  112. package/dist/components/segmented-button/PlSegmentedButton.js +1 -1
  113. package/dist/components/select/PlSelect.js +1 -1
  114. package/dist/components/show/PlShow.d.ts +16 -0
  115. package/dist/components/show/PlShow.js +1 -1
  116. package/dist/components/sidebar/PlSidebar.js +1 -1
  117. package/dist/components/sidebar/PlSidebarTrigger.js +1 -1
  118. package/dist/components/skeleton/PlSkeleton.js +1 -1
  119. package/dist/components/slider/PlSlider.d.ts +13 -1
  120. package/dist/components/slider/PlSlider.js +1 -1
  121. package/dist/components/sparkline/PlSparkline.js +1 -1
  122. package/dist/components/spoiler/PlSpoiler.d.ts +15 -8
  123. package/dist/components/spoiler/PlSpoiler.js +1 -1
  124. package/dist/components/stat/PlStat.d.ts +4 -0
  125. package/dist/components/stat/PlStat.js +1 -1
  126. package/dist/components/stepper/PlStepper.d.ts +1 -1
  127. package/dist/components/stepper/PlStepper.js +1 -1
  128. package/dist/components/switch/PlSwitch.js +1 -1
  129. package/dist/components/table/PlTable.d.ts +5 -5
  130. package/dist/components/tabs/PlTabs.d.ts +26 -1
  131. package/dist/components/tabs/PlTabs.js +1 -1
  132. package/dist/components/text-link/PlTextLink.js +1 -1
  133. package/dist/components/time-picker/PlTimePicker.js +1 -1
  134. package/dist/components/timeline/PlTimeline.js +1 -1
  135. package/dist/components/timeline-chart/PlTimelineChart.js +1 -1
  136. package/dist/components/toast/PlToast.js +1 -1
  137. package/dist/components/toggle/PlToggle.js +1 -1
  138. package/dist/components/tooltip/PlTooltip.js +1 -1
  139. package/dist/components/tour/PlTour.js +1 -1
  140. package/dist/components/transfer/PlTransfer.d.ts +10 -1
  141. package/dist/components/transfer/PlTransfer.js +1 -1
  142. package/dist/components/tree/PlTree.js +1 -1
  143. package/dist/components/tree-select/PlTreeSelect.js +1 -1
  144. package/dist/components/typography/PlTypography.js +1 -1
  145. package/dist/components/window-pane/PlWindowPane.js +1 -1
  146. package/dist/css/area-chart.css +1 -0
  147. package/dist/css/back-top.css +2 -0
  148. package/dist/css/bar-chart.css +1 -0
  149. package/dist/css/calendar.css +1 -0
  150. package/dist/css/carousel.css +2 -0
  151. package/dist/css/color-picker.css +1 -0
  152. package/dist/css/combobox.css +1 -0
  153. package/dist/css/command-palette.css +1 -0
  154. package/dist/css/confirm.css +2 -0
  155. package/dist/css/data-table.css +5 -0
  156. package/dist/css/date-picker.css +1 -0
  157. package/dist/css/date-range-picker.css +1 -0
  158. package/dist/css/date-time-picker.css +1 -0
  159. package/dist/css/floating-action-button.css +2 -0
  160. package/dist/css/gallery.css +5 -0
  161. package/dist/css/gauge-chart.css +1 -0
  162. package/dist/css/heatmap-chart.css +1 -0
  163. package/dist/css/icon-button.css +1 -0
  164. package/dist/css/image.css +2 -0
  165. package/dist/css/line-chart.css +1 -0
  166. package/dist/css/menubar.css +1 -0
  167. package/dist/css/pagination.css +1 -0
  168. package/dist/css/pie-chart.css +1 -0
  169. package/dist/css/popconfirm.css +2 -0
  170. package/dist/css/scatter-chart.css +1 -0
  171. package/dist/css/scroll-zone.css +2 -0
  172. package/dist/css/sidebar.css +3 -0
  173. package/dist/css/sparkline.css +1 -0
  174. package/dist/css/spoiler.css +1 -0
  175. package/dist/css/stat.css +1 -0
  176. package/dist/css/time-picker.css +1 -0
  177. package/dist/css/timeline-chart.css +1 -0
  178. package/dist/css/tour.css +1 -0
  179. package/dist/css/transfer.css +4 -0
  180. package/dist/css/tree-select.css +2 -0
  181. package/dist/hooks/usePlElementSize.d.ts +4 -1
  182. package/dist/hooks/usePlElementSize.js +1 -1
  183. package/dist/hooks/usePlHotKeys.d.ts +5 -1
  184. package/dist/hooks/usePlHotKeys.js +1 -1
  185. package/dist/hooks/usePlOnScreen.d.ts +4 -0
  186. package/dist/hooks/usePlOnScreen.js +1 -1
  187. package/dist/internal/animate.d.ts +30 -2
  188. package/dist/internal/animate.js +1 -1
  189. package/dist/internal/calendar.js +1 -1
  190. package/dist/internal/chart-frame.d.ts +5 -1
  191. package/dist/internal/chart-frame.js +1 -1
  192. package/dist/internal/chart-line.js +1 -1
  193. package/dist/internal/chart.d.ts +81 -3
  194. package/dist/internal/chart.js +1 -1
  195. package/dist/internal/color-scheme.js +1 -1
  196. package/dist/internal/data-table.d.ts +5 -4
  197. package/dist/internal/data-table.js +1 -1
  198. package/dist/internal/date.d.ts +10 -0
  199. package/dist/internal/date.js +1 -1
  200. package/dist/internal/drag.d.ts +16 -0
  201. package/dist/internal/drag.js +1 -1
  202. package/dist/internal/focusable.d.ts +8 -0
  203. package/dist/internal/focusable.js +1 -0
  204. package/dist/internal/form.d.ts +61 -0
  205. package/dist/internal/form.js +1 -0
  206. package/dist/internal/gallery.d.ts +60 -14
  207. package/dist/internal/gallery.js +1 -1
  208. package/dist/internal/glow.d.ts +17 -0
  209. package/dist/internal/glow.js +1 -0
  210. package/dist/internal/highlight.js +1 -1
  211. package/dist/internal/image.d.ts +94 -0
  212. package/dist/internal/image.js +1 -0
  213. package/dist/internal/inert.d.ts +19 -0
  214. package/dist/internal/inert.js +1 -0
  215. package/dist/internal/keys.d.ts +19 -0
  216. package/dist/internal/keys.js +1 -1
  217. package/dist/internal/labels.d.ts +45 -1
  218. package/dist/internal/labels.js +1 -1
  219. package/dist/internal/link.d.ts +17 -0
  220. package/dist/internal/link.js +1 -1
  221. package/dist/internal/page-layout.d.ts +14 -7
  222. package/dist/internal/page-layout.js +1 -1
  223. package/dist/internal/picker.d.ts +43 -6
  224. package/dist/internal/picker.js +1 -1
  225. package/dist/internal/progress.d.ts +16 -8
  226. package/dist/internal/progress.js +1 -1
  227. package/dist/internal/scramble.d.ts +4 -0
  228. package/dist/internal/scramble.js +1 -1
  229. package/dist/internal/scroll-target.d.ts +5 -0
  230. package/dist/internal/scroll-target.js +1 -0
  231. package/dist/internal/steps.js +1 -1
  232. package/dist/internal/styles.d.ts +66 -0
  233. package/dist/internal/styles.js +1 -1
  234. package/dist/internal/text.d.ts +39 -0
  235. package/dist/internal/text.js +1 -0
  236. package/dist/internal/watermark.d.ts +44 -0
  237. package/dist/internal/watermark.js +1 -0
  238. package/dist/internal/wheel.d.ts +52 -0
  239. package/dist/internal/wheel.js +1 -0
  240. package/dist/internal/window.js +1 -1
  241. package/dist/locales/de.js +1 -1
  242. package/dist/locales/es.js +1 -1
  243. package/dist/locales/fr.js +1 -1
  244. package/dist/locales/ja.js +1 -1
  245. package/dist/locales/ko.js +1 -1
  246. package/dist/locales/zh-Hans.js +1 -1
  247. package/dist/provider/PlColorSchemeScript.js +1 -1
  248. package/dist/provider/PlassProvider.js +1 -1
  249. package/dist/styles.css +1 -1
  250. package/dist/tailwind.css +258 -11
  251. package/dist/tokens.css +258 -11
  252. package/dist/types.d.ts +16 -29
  253. package/package.json +15 -15
package/dist/tailwind.css CHANGED
@@ -608,7 +608,11 @@
608
608
  --plass-primary-soft-press: color-mix(in srgb, var(--plass-primary-accent) 26%, transparent);
609
609
  --plass-primary-line: color-mix(in srgb, var(--plass-primary-accent) 30%, transparent);
610
610
  --plass-primary-line-hover: color-mix(in srgb, var(--plass-primary-accent) 48%, transparent);
611
- --plass-primary-ring: color-mix(in srgb, var(--plass-primary-solid) 55%, transparent);
611
+ /* The focus ring is the accent at full strength, because it is read against
612
+ the page rather than looked at: the ring has to clear 3:1 against the
613
+ sheet round a control in both themes, and only the per-theme accent does.
614
+ `solid` is one colour for both, and amber on white cannot reach it. */
615
+ --plass-primary-ring: var(--plass-primary-accent);
612
616
 
613
617
  --plass-secondary-fill: linear-gradient(
614
618
  135deg,
@@ -625,7 +629,7 @@
625
629
  --plass-secondary-soft-press: color-mix(in srgb, var(--plass-secondary-accent) 26%, transparent);
626
630
  --plass-secondary-line: color-mix(in srgb, var(--plass-secondary-accent) 30%, transparent);
627
631
  --plass-secondary-line-hover: color-mix(in srgb, var(--plass-secondary-accent) 48%, transparent);
628
- --plass-secondary-ring: color-mix(in srgb, var(--plass-secondary-solid) 55%, transparent);
632
+ --plass-secondary-ring: var(--plass-secondary-accent);
629
633
 
630
634
  --plass-success-fill: linear-gradient(
631
635
  135deg,
@@ -642,7 +646,7 @@
642
646
  --plass-success-soft-press: color-mix(in srgb, var(--plass-success-accent) 26%, transparent);
643
647
  --plass-success-line: color-mix(in srgb, var(--plass-success-accent) 30%, transparent);
644
648
  --plass-success-line-hover: color-mix(in srgb, var(--plass-success-accent) 48%, transparent);
645
- --plass-success-ring: color-mix(in srgb, var(--plass-success-solid) 55%, transparent);
649
+ --plass-success-ring: var(--plass-success-accent);
646
650
 
647
651
  --plass-warning-fill: linear-gradient(
648
652
  135deg,
@@ -659,7 +663,7 @@
659
663
  --plass-warning-soft-press: color-mix(in srgb, var(--plass-warning-accent) 28%, transparent);
660
664
  --plass-warning-line: color-mix(in srgb, var(--plass-warning-accent) 34%, transparent);
661
665
  --plass-warning-line-hover: color-mix(in srgb, var(--plass-warning-accent) 52%, transparent);
662
- --plass-warning-ring: color-mix(in srgb, var(--plass-warning-solid) 55%, transparent);
666
+ --plass-warning-ring: var(--plass-warning-accent);
663
667
 
664
668
  --plass-danger-fill: linear-gradient(
665
669
  135deg,
@@ -676,7 +680,7 @@
676
680
  --plass-danger-soft-press: color-mix(in srgb, var(--plass-danger-accent) 26%, transparent);
677
681
  --plass-danger-line: color-mix(in srgb, var(--plass-danger-accent) 30%, transparent);
678
682
  --plass-danger-line-hover: color-mix(in srgb, var(--plass-danger-accent) 48%, transparent);
679
- --plass-danger-ring: color-mix(in srgb, var(--plass-danger-solid) 55%, transparent);
683
+ --plass-danger-ring: var(--plass-danger-accent);
680
684
 
681
685
  --plass-info-fill: linear-gradient(
682
686
  135deg,
@@ -693,7 +697,7 @@
693
697
  --plass-info-soft-press: color-mix(in srgb, var(--plass-info-accent) 26%, transparent);
694
698
  --plass-info-line: color-mix(in srgb, var(--plass-info-accent) 30%, transparent);
695
699
  --plass-info-line-hover: color-mix(in srgb, var(--plass-info-accent) 48%, transparent);
696
- --plass-info-ring: color-mix(in srgb, var(--plass-info-solid) 55%, transparent);
700
+ --plass-info-ring: var(--plass-info-accent);
697
701
  /* The three greys a chart draws its frame with, derived so a project that
698
702
  re-tones its border moves the grid with it.
699
703
 
@@ -1191,6 +1195,190 @@
1191
1195
  * drift.
1192
1196
  * ------------------------------------------------------------------------- */
1193
1197
 
1198
+ /*
1199
+ * The per-breakpoint slots do not inherit. Each one is written inline on the
1200
+ * element that reads it, and a custom property is inherited by default, so a
1201
+ * `PlFlex` nested in another took every rung its parent named and it did not:
1202
+ * a vertical flex inside `{ xs: 'vertical', md: 'horizontal' }` turned
1203
+ * horizontal at `md`, and a `PlGridItem` with no `span` inside a cell of eight
1204
+ * was eight columns wide. The slots they resolve into (`--p-cols`, `--p-gap-x`)
1205
+ * still inherit, which is how a grid item reads its grid.
1206
+ */
1207
+ @property --p-gap-x-xs {
1208
+ syntax: '*';
1209
+ inherits: false;
1210
+ }
1211
+
1212
+ @property --p-gap-x-sm {
1213
+ syntax: '*';
1214
+ inherits: false;
1215
+ }
1216
+
1217
+ @property --p-gap-x-md {
1218
+ syntax: '*';
1219
+ inherits: false;
1220
+ }
1221
+
1222
+ @property --p-gap-x-lg {
1223
+ syntax: '*';
1224
+ inherits: false;
1225
+ }
1226
+
1227
+ @property --p-gap-x-xl {
1228
+ syntax: '*';
1229
+ inherits: false;
1230
+ }
1231
+
1232
+ @property --p-gap-y-xs {
1233
+ syntax: '*';
1234
+ inherits: false;
1235
+ }
1236
+
1237
+ @property --p-gap-y-sm {
1238
+ syntax: '*';
1239
+ inherits: false;
1240
+ }
1241
+
1242
+ @property --p-gap-y-md {
1243
+ syntax: '*';
1244
+ inherits: false;
1245
+ }
1246
+
1247
+ @property --p-gap-y-lg {
1248
+ syntax: '*';
1249
+ inherits: false;
1250
+ }
1251
+
1252
+ @property --p-gap-y-xl {
1253
+ syntax: '*';
1254
+ inherits: false;
1255
+ }
1256
+
1257
+ @property --p-cols-xs {
1258
+ syntax: '*';
1259
+ inherits: false;
1260
+ }
1261
+
1262
+ @property --p-cols-sm {
1263
+ syntax: '*';
1264
+ inherits: false;
1265
+ }
1266
+
1267
+ @property --p-cols-md {
1268
+ syntax: '*';
1269
+ inherits: false;
1270
+ }
1271
+
1272
+ @property --p-cols-lg {
1273
+ syntax: '*';
1274
+ inherits: false;
1275
+ }
1276
+
1277
+ @property --p-cols-xl {
1278
+ syntax: '*';
1279
+ inherits: false;
1280
+ }
1281
+
1282
+ @property --p-dir-xs {
1283
+ syntax: '*';
1284
+ inherits: false;
1285
+ }
1286
+
1287
+ @property --p-dir-sm {
1288
+ syntax: '*';
1289
+ inherits: false;
1290
+ }
1291
+
1292
+ @property --p-dir-md {
1293
+ syntax: '*';
1294
+ inherits: false;
1295
+ }
1296
+
1297
+ @property --p-dir-lg {
1298
+ syntax: '*';
1299
+ inherits: false;
1300
+ }
1301
+
1302
+ @property --p-dir-xl {
1303
+ syntax: '*';
1304
+ inherits: false;
1305
+ }
1306
+
1307
+ @property --p-span-xs {
1308
+ syntax: '*';
1309
+ inherits: false;
1310
+ }
1311
+
1312
+ @property --p-span-sm {
1313
+ syntax: '*';
1314
+ inherits: false;
1315
+ }
1316
+
1317
+ @property --p-span-md {
1318
+ syntax: '*';
1319
+ inherits: false;
1320
+ }
1321
+
1322
+ @property --p-span-lg {
1323
+ syntax: '*';
1324
+ inherits: false;
1325
+ }
1326
+
1327
+ @property --p-span-xl {
1328
+ syntax: '*';
1329
+ inherits: false;
1330
+ }
1331
+
1332
+ @property --p-offset-xs {
1333
+ syntax: '*';
1334
+ inherits: false;
1335
+ }
1336
+
1337
+ @property --p-offset-sm {
1338
+ syntax: '*';
1339
+ inherits: false;
1340
+ }
1341
+
1342
+ @property --p-offset-md {
1343
+ syntax: '*';
1344
+ inherits: false;
1345
+ }
1346
+
1347
+ @property --p-offset-lg {
1348
+ syntax: '*';
1349
+ inherits: false;
1350
+ }
1351
+
1352
+ @property --p-offset-xl {
1353
+ syntax: '*';
1354
+ inherits: false;
1355
+ }
1356
+
1357
+ @property --p-maxw-xs {
1358
+ syntax: '*';
1359
+ inherits: false;
1360
+ }
1361
+
1362
+ @property --p-maxw-sm {
1363
+ syntax: '*';
1364
+ inherits: false;
1365
+ }
1366
+
1367
+ @property --p-maxw-md {
1368
+ syntax: '*';
1369
+ inherits: false;
1370
+ }
1371
+
1372
+ @property --p-maxw-lg {
1373
+ syntax: '*';
1374
+ inherits: false;
1375
+ }
1376
+
1377
+ @property --p-maxw-xl {
1378
+ syntax: '*';
1379
+ inherits: false;
1380
+ }
1381
+
1194
1382
  .plass-grid,
1195
1383
  .plass-flex {
1196
1384
  --p-gap-x: var(--p-gap-x-xs, 0px);
@@ -1722,6 +1910,12 @@
1722
1910
  flex-direction: column;
1723
1911
  }
1724
1912
 
1913
+ /* Inset, so a box inside something that clips does not lose its ring. */
1914
+ .plass-marquee:focus-visible {
1915
+ outline: 2px solid var(--plass-primary-ring);
1916
+ outline-offset: -2px;
1917
+ }
1918
+
1725
1919
  .plass-marquee-track {
1726
1920
  display: flex;
1727
1921
  flex: 0 0 auto;
@@ -1927,8 +2121,13 @@
1927
2121
  --p-code-del: oklch(75% 0.15 25);
1928
2122
  }
1929
2123
 
2124
+ /* Both ways of forcing light are named, the same pair the token block above
2125
+ answers to. `auto` means "whatever the page is", so a page that has said it
2126
+ is light with `.light` and one that has said it with `[data-theme='light']`
2127
+ have to leave the block light alike — otherwise the page is white and the
2128
+ code on it is the one dark rectangle nobody asked for. */
1930
2129
  @media (prefers-color-scheme: dark) {
1931
- :root:not([data-theme='light']) .plass-code[data-code-theme='auto'] {
2130
+ :root:not(.light):not([data-theme='light']) .plass-code[data-code-theme='auto'] {
1932
2131
  --p-code-bg: oklch(19.5% 0.014 262);
1933
2132
  --p-code-fg: oklch(90% 0.012 262);
1934
2133
 
@@ -2320,10 +2519,11 @@
2320
2519
  * arrangement that still reads as a set.
2321
2520
  *
2322
2521
  * The three lines below are what the slot is *for*. A grid and a quilt lay out
2323
- * in CSS Grid off `--p-cols`; a masonry deals its items into that many lanes in
2324
- * JavaScript, because which lane an item lands in changes the DOM and no
2325
- * stylesheet can do that; and a justified row is flexbox, which needs no count
2326
- * at all — it fills to the edge with whatever fits.
2522
+ * in CSS Grid off `--p-cols`; a masonry deals its items into lanes in JavaScript
2523
+ * and writes the count and the rows inline, because which lane an item lands in
2524
+ * depends on the heights of the items before it and no stylesheet can work that
2525
+ * out; and a justified row is flexbox, which needs no count at all — it fills
2526
+ * to the edge with whatever fits.
2327
2527
  * ------------------------------------------------------------------------- */
2328
2528
 
2329
2529
  .plass-gallery-grid,
@@ -2331,6 +2531,32 @@
2331
2531
  grid-template-columns: repeat(var(--p-cols, 2), minmax(0, 1fr));
2332
2532
  }
2333
2533
 
2534
+ /*
2535
+ * What holds a justified gallery's last row down.
2536
+ *
2537
+ * Every tile is grown in proportion to its own width, which is what makes a row
2538
+ * come out one height once it has been stretched to the edge. The last row is
2539
+ * the exception: it has fewer tiles and the same width to share, so they stretch
2540
+ * further than any row above them — one leftover photograph ends up filling the
2541
+ * whole width and standing two or three times as tall as the gallery it belongs
2542
+ * to.
2543
+ *
2544
+ * An empty `::after` with an absurd `flex-grow` eats the leftover width instead,
2545
+ * so the real tiles keep their basis and the row lands at the height it was
2546
+ * aiming for. It has to be a pseudo-element rather than a filler item: the list
2547
+ * is a `<ul>` with `role="list"`, and an extra `<li>` would be an extra item in
2548
+ * it — a photograph that is not there, counted by every screen reader that
2549
+ * announces how many there are.
2550
+ *
2551
+ * It costs a row of nothing when the last row happens to be full, which is why
2552
+ * the flex-basis is zero.
2553
+ */
2554
+ .plass-gallery-justified::after {
2555
+ content: '';
2556
+ flex-grow: 1000000;
2557
+ flex-basis: 0;
2558
+ }
2559
+
2334
2560
  /* ---------------------------------------------------------------------------
2335
2561
  * Reduced motion
2336
2562
  *
@@ -2402,6 +2628,27 @@
2402
2628
  animation: none;
2403
2629
  }
2404
2630
 
2631
+ /*
2632
+ * A marquee that stops would leave everything past the edge of its box out
2633
+ * of sight for good. One copy is drawn, and the box scrolls along it instead
2634
+ * of clipping it, so the strip stays one line rather than wrapping down the
2635
+ * page; a platform that draws a permanent scrollbar adds only the bar. The
2636
+ * component makes the box a tab stop while it scrolls.
2637
+ */
2638
+ .plass-marquee {
2639
+ overflow-x: auto;
2640
+ overflow-y: hidden;
2641
+ }
2642
+
2643
+ .plass-marquee-vertical {
2644
+ overflow-x: hidden;
2645
+ overflow-y: auto;
2646
+ }
2647
+
2648
+ .plass-marquee-track + .plass-marquee-track {
2649
+ display: none;
2650
+ }
2651
+
2405
2652
  /* The arc stops travelling and becomes an even glow. The same trade the
2406
2653
  skeleton makes: the decoration survives, the motion does not. */
2407
2654
  .plass-anim-lighting::before {
package/dist/tokens.css CHANGED
@@ -611,7 +611,11 @@
611
611
  --plass-primary-soft-press: color-mix(in srgb, var(--plass-primary-accent) 26%, transparent);
612
612
  --plass-primary-line: color-mix(in srgb, var(--plass-primary-accent) 30%, transparent);
613
613
  --plass-primary-line-hover: color-mix(in srgb, var(--plass-primary-accent) 48%, transparent);
614
- --plass-primary-ring: color-mix(in srgb, var(--plass-primary-solid) 55%, transparent);
614
+ /* The focus ring is the accent at full strength, because it is read against
615
+ the page rather than looked at: the ring has to clear 3:1 against the
616
+ sheet round a control in both themes, and only the per-theme accent does.
617
+ `solid` is one colour for both, and amber on white cannot reach it. */
618
+ --plass-primary-ring: var(--plass-primary-accent);
615
619
 
616
620
  --plass-secondary-fill: linear-gradient(
617
621
  135deg,
@@ -628,7 +632,7 @@
628
632
  --plass-secondary-soft-press: color-mix(in srgb, var(--plass-secondary-accent) 26%, transparent);
629
633
  --plass-secondary-line: color-mix(in srgb, var(--plass-secondary-accent) 30%, transparent);
630
634
  --plass-secondary-line-hover: color-mix(in srgb, var(--plass-secondary-accent) 48%, transparent);
631
- --plass-secondary-ring: color-mix(in srgb, var(--plass-secondary-solid) 55%, transparent);
635
+ --plass-secondary-ring: var(--plass-secondary-accent);
632
636
 
633
637
  --plass-success-fill: linear-gradient(
634
638
  135deg,
@@ -645,7 +649,7 @@
645
649
  --plass-success-soft-press: color-mix(in srgb, var(--plass-success-accent) 26%, transparent);
646
650
  --plass-success-line: color-mix(in srgb, var(--plass-success-accent) 30%, transparent);
647
651
  --plass-success-line-hover: color-mix(in srgb, var(--plass-success-accent) 48%, transparent);
648
- --plass-success-ring: color-mix(in srgb, var(--plass-success-solid) 55%, transparent);
652
+ --plass-success-ring: var(--plass-success-accent);
649
653
 
650
654
  --plass-warning-fill: linear-gradient(
651
655
  135deg,
@@ -662,7 +666,7 @@
662
666
  --plass-warning-soft-press: color-mix(in srgb, var(--plass-warning-accent) 28%, transparent);
663
667
  --plass-warning-line: color-mix(in srgb, var(--plass-warning-accent) 34%, transparent);
664
668
  --plass-warning-line-hover: color-mix(in srgb, var(--plass-warning-accent) 52%, transparent);
665
- --plass-warning-ring: color-mix(in srgb, var(--plass-warning-solid) 55%, transparent);
669
+ --plass-warning-ring: var(--plass-warning-accent);
666
670
 
667
671
  --plass-danger-fill: linear-gradient(
668
672
  135deg,
@@ -679,7 +683,7 @@
679
683
  --plass-danger-soft-press: color-mix(in srgb, var(--plass-danger-accent) 26%, transparent);
680
684
  --plass-danger-line: color-mix(in srgb, var(--plass-danger-accent) 30%, transparent);
681
685
  --plass-danger-line-hover: color-mix(in srgb, var(--plass-danger-accent) 48%, transparent);
682
- --plass-danger-ring: color-mix(in srgb, var(--plass-danger-solid) 55%, transparent);
686
+ --plass-danger-ring: var(--plass-danger-accent);
683
687
 
684
688
  --plass-info-fill: linear-gradient(
685
689
  135deg,
@@ -696,7 +700,7 @@
696
700
  --plass-info-soft-press: color-mix(in srgb, var(--plass-info-accent) 26%, transparent);
697
701
  --plass-info-line: color-mix(in srgb, var(--plass-info-accent) 30%, transparent);
698
702
  --plass-info-line-hover: color-mix(in srgb, var(--plass-info-accent) 48%, transparent);
699
- --plass-info-ring: color-mix(in srgb, var(--plass-info-solid) 55%, transparent);
703
+ --plass-info-ring: var(--plass-info-accent);
700
704
  /* The three greys a chart draws its frame with, derived so a project that
701
705
  re-tones its border moves the grid with it.
702
706
 
@@ -1194,6 +1198,190 @@
1194
1198
  * drift.
1195
1199
  * ------------------------------------------------------------------------- */
1196
1200
 
1201
+ /*
1202
+ * The per-breakpoint slots do not inherit. Each one is written inline on the
1203
+ * element that reads it, and a custom property is inherited by default, so a
1204
+ * `PlFlex` nested in another took every rung its parent named and it did not:
1205
+ * a vertical flex inside `{ xs: 'vertical', md: 'horizontal' }` turned
1206
+ * horizontal at `md`, and a `PlGridItem` with no `span` inside a cell of eight
1207
+ * was eight columns wide. The slots they resolve into (`--p-cols`, `--p-gap-x`)
1208
+ * still inherit, which is how a grid item reads its grid.
1209
+ */
1210
+ @property --p-gap-x-xs {
1211
+ syntax: '*';
1212
+ inherits: false;
1213
+ }
1214
+
1215
+ @property --p-gap-x-sm {
1216
+ syntax: '*';
1217
+ inherits: false;
1218
+ }
1219
+
1220
+ @property --p-gap-x-md {
1221
+ syntax: '*';
1222
+ inherits: false;
1223
+ }
1224
+
1225
+ @property --p-gap-x-lg {
1226
+ syntax: '*';
1227
+ inherits: false;
1228
+ }
1229
+
1230
+ @property --p-gap-x-xl {
1231
+ syntax: '*';
1232
+ inherits: false;
1233
+ }
1234
+
1235
+ @property --p-gap-y-xs {
1236
+ syntax: '*';
1237
+ inherits: false;
1238
+ }
1239
+
1240
+ @property --p-gap-y-sm {
1241
+ syntax: '*';
1242
+ inherits: false;
1243
+ }
1244
+
1245
+ @property --p-gap-y-md {
1246
+ syntax: '*';
1247
+ inherits: false;
1248
+ }
1249
+
1250
+ @property --p-gap-y-lg {
1251
+ syntax: '*';
1252
+ inherits: false;
1253
+ }
1254
+
1255
+ @property --p-gap-y-xl {
1256
+ syntax: '*';
1257
+ inherits: false;
1258
+ }
1259
+
1260
+ @property --p-cols-xs {
1261
+ syntax: '*';
1262
+ inherits: false;
1263
+ }
1264
+
1265
+ @property --p-cols-sm {
1266
+ syntax: '*';
1267
+ inherits: false;
1268
+ }
1269
+
1270
+ @property --p-cols-md {
1271
+ syntax: '*';
1272
+ inherits: false;
1273
+ }
1274
+
1275
+ @property --p-cols-lg {
1276
+ syntax: '*';
1277
+ inherits: false;
1278
+ }
1279
+
1280
+ @property --p-cols-xl {
1281
+ syntax: '*';
1282
+ inherits: false;
1283
+ }
1284
+
1285
+ @property --p-dir-xs {
1286
+ syntax: '*';
1287
+ inherits: false;
1288
+ }
1289
+
1290
+ @property --p-dir-sm {
1291
+ syntax: '*';
1292
+ inherits: false;
1293
+ }
1294
+
1295
+ @property --p-dir-md {
1296
+ syntax: '*';
1297
+ inherits: false;
1298
+ }
1299
+
1300
+ @property --p-dir-lg {
1301
+ syntax: '*';
1302
+ inherits: false;
1303
+ }
1304
+
1305
+ @property --p-dir-xl {
1306
+ syntax: '*';
1307
+ inherits: false;
1308
+ }
1309
+
1310
+ @property --p-span-xs {
1311
+ syntax: '*';
1312
+ inherits: false;
1313
+ }
1314
+
1315
+ @property --p-span-sm {
1316
+ syntax: '*';
1317
+ inherits: false;
1318
+ }
1319
+
1320
+ @property --p-span-md {
1321
+ syntax: '*';
1322
+ inherits: false;
1323
+ }
1324
+
1325
+ @property --p-span-lg {
1326
+ syntax: '*';
1327
+ inherits: false;
1328
+ }
1329
+
1330
+ @property --p-span-xl {
1331
+ syntax: '*';
1332
+ inherits: false;
1333
+ }
1334
+
1335
+ @property --p-offset-xs {
1336
+ syntax: '*';
1337
+ inherits: false;
1338
+ }
1339
+
1340
+ @property --p-offset-sm {
1341
+ syntax: '*';
1342
+ inherits: false;
1343
+ }
1344
+
1345
+ @property --p-offset-md {
1346
+ syntax: '*';
1347
+ inherits: false;
1348
+ }
1349
+
1350
+ @property --p-offset-lg {
1351
+ syntax: '*';
1352
+ inherits: false;
1353
+ }
1354
+
1355
+ @property --p-offset-xl {
1356
+ syntax: '*';
1357
+ inherits: false;
1358
+ }
1359
+
1360
+ @property --p-maxw-xs {
1361
+ syntax: '*';
1362
+ inherits: false;
1363
+ }
1364
+
1365
+ @property --p-maxw-sm {
1366
+ syntax: '*';
1367
+ inherits: false;
1368
+ }
1369
+
1370
+ @property --p-maxw-md {
1371
+ syntax: '*';
1372
+ inherits: false;
1373
+ }
1374
+
1375
+ @property --p-maxw-lg {
1376
+ syntax: '*';
1377
+ inherits: false;
1378
+ }
1379
+
1380
+ @property --p-maxw-xl {
1381
+ syntax: '*';
1382
+ inherits: false;
1383
+ }
1384
+
1197
1385
  .plass-grid,
1198
1386
  .plass-flex {
1199
1387
  --p-gap-x: var(--p-gap-x-xs, 0px);
@@ -1725,6 +1913,12 @@
1725
1913
  flex-direction: column;
1726
1914
  }
1727
1915
 
1916
+ /* Inset, so a box inside something that clips does not lose its ring. */
1917
+ .plass-marquee:focus-visible {
1918
+ outline: 2px solid var(--plass-primary-ring);
1919
+ outline-offset: -2px;
1920
+ }
1921
+
1728
1922
  .plass-marquee-track {
1729
1923
  display: flex;
1730
1924
  flex: 0 0 auto;
@@ -1930,8 +2124,13 @@
1930
2124
  --p-code-del: oklch(75% 0.15 25);
1931
2125
  }
1932
2126
 
2127
+ /* Both ways of forcing light are named, the same pair the token block above
2128
+ answers to. `auto` means "whatever the page is", so a page that has said it
2129
+ is light with `.light` and one that has said it with `[data-theme='light']`
2130
+ have to leave the block light alike — otherwise the page is white and the
2131
+ code on it is the one dark rectangle nobody asked for. */
1933
2132
  @media (prefers-color-scheme: dark) {
1934
- :root:not([data-theme='light']) .plass-code[data-code-theme='auto'] {
2133
+ :root:not(.light):not([data-theme='light']) .plass-code[data-code-theme='auto'] {
1935
2134
  --p-code-bg: oklch(19.5% 0.014 262);
1936
2135
  --p-code-fg: oklch(90% 0.012 262);
1937
2136
 
@@ -2323,10 +2522,11 @@
2323
2522
  * arrangement that still reads as a set.
2324
2523
  *
2325
2524
  * The three lines below are what the slot is *for*. A grid and a quilt lay out
2326
- * in CSS Grid off `--p-cols`; a masonry deals its items into that many lanes in
2327
- * JavaScript, because which lane an item lands in changes the DOM and no
2328
- * stylesheet can do that; and a justified row is flexbox, which needs no count
2329
- * at all — it fills to the edge with whatever fits.
2525
+ * in CSS Grid off `--p-cols`; a masonry deals its items into lanes in JavaScript
2526
+ * and writes the count and the rows inline, because which lane an item lands in
2527
+ * depends on the heights of the items before it and no stylesheet can work that
2528
+ * out; and a justified row is flexbox, which needs no count at all — it fills
2529
+ * to the edge with whatever fits.
2330
2530
  * ------------------------------------------------------------------------- */
2331
2531
 
2332
2532
  .plass-gallery-grid,
@@ -2334,6 +2534,32 @@
2334
2534
  grid-template-columns: repeat(var(--p-cols, 2), minmax(0, 1fr));
2335
2535
  }
2336
2536
 
2537
+ /*
2538
+ * What holds a justified gallery's last row down.
2539
+ *
2540
+ * Every tile is grown in proportion to its own width, which is what makes a row
2541
+ * come out one height once it has been stretched to the edge. The last row is
2542
+ * the exception: it has fewer tiles and the same width to share, so they stretch
2543
+ * further than any row above them — one leftover photograph ends up filling the
2544
+ * whole width and standing two or three times as tall as the gallery it belongs
2545
+ * to.
2546
+ *
2547
+ * An empty `::after` with an absurd `flex-grow` eats the leftover width instead,
2548
+ * so the real tiles keep their basis and the row lands at the height it was
2549
+ * aiming for. It has to be a pseudo-element rather than a filler item: the list
2550
+ * is a `<ul>` with `role="list"`, and an extra `<li>` would be an extra item in
2551
+ * it — a photograph that is not there, counted by every screen reader that
2552
+ * announces how many there are.
2553
+ *
2554
+ * It costs a row of nothing when the last row happens to be full, which is why
2555
+ * the flex-basis is zero.
2556
+ */
2557
+ .plass-gallery-justified::after {
2558
+ content: '';
2559
+ flex-grow: 1000000;
2560
+ flex-basis: 0;
2561
+ }
2562
+
2337
2563
  /* ---------------------------------------------------------------------------
2338
2564
  * Reduced motion
2339
2565
  *
@@ -2405,6 +2631,27 @@
2405
2631
  animation: none;
2406
2632
  }
2407
2633
 
2634
+ /*
2635
+ * A marquee that stops would leave everything past the edge of its box out
2636
+ * of sight for good. One copy is drawn, and the box scrolls along it instead
2637
+ * of clipping it, so the strip stays one line rather than wrapping down the
2638
+ * page; a platform that draws a permanent scrollbar adds only the bar. The
2639
+ * component makes the box a tab stop while it scrolls.
2640
+ */
2641
+ .plass-marquee {
2642
+ overflow-x: auto;
2643
+ overflow-y: hidden;
2644
+ }
2645
+
2646
+ .plass-marquee-vertical {
2647
+ overflow-x: hidden;
2648
+ overflow-y: auto;
2649
+ }
2650
+
2651
+ .plass-marquee-track + .plass-marquee-track {
2652
+ display: none;
2653
+ }
2654
+
2408
2655
  /* The arc stops travelling and becomes an even glow. The same trade the
2409
2656
  skeleton makes: the decoration survives, the motion does not. */
2410
2657
  .plass-anim-lighting::before {