@wpmoo/ui 1.2.2 → 1.4.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.
package/ASSET_LICENSE.md CHANGED
@@ -14,6 +14,6 @@ product, site, template, library, training dataset, or marketing asset without
14
14
  prior written permission from WPMoo.
15
15
 
16
16
  Third-party assets remain under their own licenses. See the
17
- [version-pinned third-party notices](https://github.com/wpmoo-org/ui/blob/v1.2.2/THIRD_PARTY_NOTICES.md).
17
+ [version-pinned third-party notices](https://github.com/wpmoo-org/ui/blob/v1.4.0/THIRD_PARTY_NOTICES.md).
18
18
  Those notices are repository-only and are intentionally not shipped in the npm
19
19
  package.
package/README.md CHANGED
@@ -168,6 +168,29 @@ import { initSheets } from "@wpmoo/ui/sheet.js";
168
168
  initSheets(document);
169
169
  ```
170
170
 
171
+ For an opt-in document overlay scrollbar, load the stylesheet first and pass
172
+ the resolved page theme owner explicitly:
173
+
174
+ ```js
175
+ import OverlayScrollbar from "@wpmoo/ui/overlay-scrollbar.js";
176
+ const scrollbar = OverlayScrollbar.getOrCreateInstance(document.querySelector(".moo-ui"), {
177
+ label: "Page scroll position", // supply a localized accessible name
178
+ hideDelay: 900,
179
+ });
180
+ // scrollbar.refresh(); // after host geometry changes
181
+ // scrollbar.dispose(); // restore the native scrollbar
182
+ ```
183
+
184
+ The module preserves native document/touch/wheel scrolling. Its thin thumb
185
+ appears while scrolling, near the trailing mouse edge or on keyboard focus;
186
+ show/hide never reserves a layout gutter. Initial activation removes any native
187
+ gutter. By default it controls the standards-mode document. Pass
188
+ `scrollElement: element` for an existing native scrolling region belonging to
189
+ the same theme owner; the catalog uses this for its Page main region. There is
190
+ one instance per scroll target, without replacing or wrapping that target.
191
+ Printing, forced colors and horizontal overflow use the
192
+ native scrollbar instead. It does not initialize merely by importing the module.
193
+
171
194
  ## Why Teams Try It
172
195
 
173
196
  - Keep server-rendered HTML, Bootstrap classes, and familiar plugin behavior.
@@ -194,9 +217,10 @@ calm.
194
217
 
195
218
  ## Status And Support
196
219
 
197
- The `1.2.2` patch release target preserves Navigation parent hover across
198
- submenus and readable DataTable column widths in catalog compositions. It
199
- preserves the 1.2.1 public package API. Component certification remains
220
+ The `1.4.0` minor release target adds the opt-in OverlayScrollbar module and
221
+ scoped Sass support while preserving native scrolling. It retains existing
222
+ 1.3.0 exports and component defaults and corrects logical text alignment.
223
+ The catalog shares this runtime and unifies its reading navigation. Component certification remains
200
224
  `preview`, with its documented manual and browser/device limits. Public exports, package boundaries, browser support, and release evidence live in [Support & Evidence](https://ui.wpmoo.org/support/).
201
225
  Complete release notes are on
202
226
  [GitHub Releases](https://github.com/wpmoo-org/ui/releases).
@@ -222,4 +246,4 @@ The published `LICENSE` also retains the full MIT notices for bundled
222
246
  Chart.js and `@kurkle/color`.
223
247
  Asset terms live in [ASSET_LICENSE.md](ASSET_LICENSE.md); dependency notices
224
248
  live in the
225
- [version-pinned third-party notices](https://github.com/wpmoo-org/ui/blob/v1.2.2/THIRD_PARTY_NOTICES.md).
249
+ [version-pinned third-party notices](https://github.com/wpmoo-org/ui/blob/v1.4.0/THIRD_PARTY_NOTICES.md).
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "0.1",
3
3
  "status": "preview",
4
- "coreVersion": "1.2.2",
4
+ "coreVersion": "1.4.0",
5
5
  "bootstrap": {
6
6
  "canonicalVersion": "5.3.3",
7
7
  "targetRange": ">=5.3.0 <5.4",
@@ -29,6 +29,7 @@
29
29
  "./datatable.js",
30
30
  "./slider.js",
31
31
  "./toc.js",
32
+ "./overlay-scrollbar.js",
32
33
  "./table-of-contents.js",
33
34
  "./sheet.js",
34
35
  "./chart.js",
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Moo UI v1.2.2 (https://wpmoo.org/)
2
+ * Moo UI v1.4.0 (https://wpmoo.org/)
3
3
  * Copyright 2026 WPMoo Authors
4
4
  * Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
5
5
  *
@@ -5624,11 +5624,11 @@ progress {
5624
5624
  }
5625
5625
 
5626
5626
  .text-start {
5627
- text-align: left !important;
5627
+ text-align: start !important;
5628
5628
  }
5629
5629
 
5630
5630
  .text-end {
5631
- text-align: right !important;
5631
+ text-align: end !important;
5632
5632
  }
5633
5633
 
5634
5634
  .text-center {
@@ -6900,10 +6900,10 @@ progress {
6900
6900
  column-gap: 3rem !important;
6901
6901
  }
6902
6902
  .text-sm-start {
6903
- text-align: left !important;
6903
+ text-align: start !important;
6904
6904
  }
6905
6905
  .text-sm-end {
6906
- text-align: right !important;
6906
+ text-align: end !important;
6907
6907
  }
6908
6908
  .text-sm-center {
6909
6909
  text-align: center !important;
@@ -7451,10 +7451,10 @@ progress {
7451
7451
  column-gap: 3rem !important;
7452
7452
  }
7453
7453
  .text-md-start {
7454
- text-align: left !important;
7454
+ text-align: start !important;
7455
7455
  }
7456
7456
  .text-md-end {
7457
- text-align: right !important;
7457
+ text-align: end !important;
7458
7458
  }
7459
7459
  .text-md-center {
7460
7460
  text-align: center !important;
@@ -8002,10 +8002,10 @@ progress {
8002
8002
  column-gap: 3rem !important;
8003
8003
  }
8004
8004
  .text-lg-start {
8005
- text-align: left !important;
8005
+ text-align: start !important;
8006
8006
  }
8007
8007
  .text-lg-end {
8008
- text-align: right !important;
8008
+ text-align: end !important;
8009
8009
  }
8010
8010
  .text-lg-center {
8011
8011
  text-align: center !important;
@@ -8553,10 +8553,10 @@ progress {
8553
8553
  column-gap: 3rem !important;
8554
8554
  }
8555
8555
  .text-xl-start {
8556
- text-align: left !important;
8556
+ text-align: start !important;
8557
8557
  }
8558
8558
  .text-xl-end {
8559
- text-align: right !important;
8559
+ text-align: end !important;
8560
8560
  }
8561
8561
  .text-xl-center {
8562
8562
  text-align: center !important;
@@ -9104,10 +9104,10 @@ progress {
9104
9104
  column-gap: 3rem !important;
9105
9105
  }
9106
9106
  .text-xxl-start {
9107
- text-align: left !important;
9107
+ text-align: start !important;
9108
9108
  }
9109
9109
  .text-xxl-end {
9110
- text-align: right !important;
9110
+ text-align: end !important;
9111
9111
  }
9112
9112
  .text-xxl-center {
9113
9113
  text-align: center !important;
@@ -9225,6 +9225,23 @@ progress {
9225
9225
  }
9226
9226
  }
9227
9227
 
9228
+ html.scrollbar-overlay-native {
9229
+ scrollbar-width: none;
9230
+ }
9231
+
9232
+ html.scrollbar-overlay-native::-webkit-scrollbar {
9233
+ display: none;
9234
+ }
9235
+
9236
+ @media print, (forced-colors: active) {
9237
+ html.scrollbar-overlay-native {
9238
+ scrollbar-width: auto !important;
9239
+ }
9240
+ html.scrollbar-overlay-native::-webkit-scrollbar {
9241
+ display: revert !important;
9242
+ }
9243
+ }
9244
+
9228
9245
  @keyframes moo-overlay-backdrop-enter {
9229
9246
  from {
9230
9247
  opacity: 0;
@@ -14301,8 +14318,10 @@ label.btn {
14301
14318
  flex: 0 0 auto;
14302
14319
  margin-top: 0.125rem;
14303
14320
  }
14304
- .alert-icon [data-icon] {
14321
+ .alert-icon [data-icon]:not([width]) {
14305
14322
  width: 1rem;
14323
+ }
14324
+ .alert-icon [data-icon]:not([height]) {
14306
14325
  height: 1rem;
14307
14326
  }
14308
14327
  .alert-body {
@@ -14907,6 +14926,15 @@ label.btn {
14907
14926
  .accordion-button:not(.collapsed) [data-icon] {
14908
14927
  transform: translateY(-50%) rotate(-180deg);
14909
14928
  }
14929
+ .accordion-button:not(.collapsed) [data-accordion-indicator="plus-minus"] {
14930
+ transform: translateY(-50%);
14931
+ }
14932
+ .accordion-button:not(.collapsed) [data-accordion-indicator="plus-minus"] [data-accordion-plus] {
14933
+ display: none;
14934
+ }
14935
+ .accordion-button:dir(rtl):has([data-accordion-indicator="plus-minus"]) {
14936
+ padding-inline-end: 3rem !important;
14937
+ }
14910
14938
  .accordion-flush .accordion-button {
14911
14939
  text-align: start;
14912
14940
  }
@@ -16868,6 +16896,70 @@ label.btn {
16868
16896
  .border-dashed {
16869
16897
  border-style: dashed !important;
16870
16898
  }
16899
+ .text-start {
16900
+ text-align: start !important;
16901
+ }
16902
+ .text-end {
16903
+ text-align: end !important;
16904
+ }
16905
+ .text-center {
16906
+ text-align: center !important;
16907
+ }
16908
+ @media (min-width: 576px) {
16909
+ .text-sm-start {
16910
+ text-align: start !important;
16911
+ }
16912
+ .text-sm-end {
16913
+ text-align: end !important;
16914
+ }
16915
+ .text-sm-center {
16916
+ text-align: center !important;
16917
+ }
16918
+ }
16919
+ @media (min-width: 768px) {
16920
+ .text-md-start {
16921
+ text-align: start !important;
16922
+ }
16923
+ .text-md-end {
16924
+ text-align: end !important;
16925
+ }
16926
+ .text-md-center {
16927
+ text-align: center !important;
16928
+ }
16929
+ }
16930
+ @media (min-width: 992px) {
16931
+ .text-lg-start {
16932
+ text-align: start !important;
16933
+ }
16934
+ .text-lg-end {
16935
+ text-align: end !important;
16936
+ }
16937
+ .text-lg-center {
16938
+ text-align: center !important;
16939
+ }
16940
+ }
16941
+ @media (min-width: 1200px) {
16942
+ .text-xl-start {
16943
+ text-align: start !important;
16944
+ }
16945
+ .text-xl-end {
16946
+ text-align: end !important;
16947
+ }
16948
+ .text-xl-center {
16949
+ text-align: center !important;
16950
+ }
16951
+ }
16952
+ @media (min-width: 1400px) {
16953
+ .text-xxl-start {
16954
+ text-align: start !important;
16955
+ }
16956
+ .text-xxl-end {
16957
+ text-align: end !important;
16958
+ }
16959
+ .text-xxl-center {
16960
+ text-align: center !important;
16961
+ }
16962
+ }
16871
16963
  :where( .scroll-fade, .scroll-fade-y, .scroll-fade-x, .scroll-fade-t, .scroll-fade-b, .scroll-fade-l, .scroll-fade-r, .scroll-fade-s, .scroll-fade-e ) {
16872
16964
  --scroll-fade-size: min(12%, 2.5rem);
16873
16965
  --scroll-fade-reveal: 6rem;
@@ -17036,6 +17128,61 @@ label.btn {
17036
17128
  --moo-scroll-fade-e: var(--moo-scroll-fade-e-size);
17037
17129
  }
17038
17130
  }
17131
+ .scrollbar-overlay-native {
17132
+ scrollbar-width: none;
17133
+ }
17134
+ .scrollbar-overlay-native::-webkit-scrollbar {
17135
+ display: none;
17136
+ }
17137
+ @media print, (forced-colors: active) {
17138
+ .scrollbar-overlay-native {
17139
+ scrollbar-width: auto !important;
17140
+ }
17141
+ .scrollbar-overlay-native::-webkit-scrollbar {
17142
+ display: revert !important;
17143
+ }
17144
+ }
17145
+ .scrollbar-overlay {
17146
+ --moo-scrollbar-overlay-hit-size: 1.5rem;
17147
+ --moo-scrollbar-overlay-thumb-size: 0.375rem;
17148
+ position: fixed;
17149
+ inset-block: 0;
17150
+ inset-inline-end: 0;
17151
+ z-index: 1030;
17152
+ inline-size: var(--moo-scrollbar-overlay-hit-size);
17153
+ color: var(--bs-secondary-color);
17154
+ opacity: 0;
17155
+ pointer-events: none;
17156
+ touch-action: none;
17157
+ transition: opacity 0.15s linear;
17158
+ }
17159
+ @media (prefers-reduced-motion: reduce) {
17160
+ .scrollbar-overlay {
17161
+ transition: none;
17162
+ }
17163
+ }
17164
+ .scrollbar-overlay[data-scrollbar-visible="true"], .scrollbar-overlay:focus-visible {
17165
+ opacity: 1;
17166
+ }
17167
+ .scrollbar-overlay[data-scrollbar-interactive="true"], .scrollbar-overlay:focus-visible {
17168
+ pointer-events: auto;
17169
+ }
17170
+ .scrollbar-overlay:hover, .scrollbar-overlay:focus-visible {
17171
+ color: var(--bs-emphasis-color);
17172
+ }
17173
+ .scrollbar-overlay-thumb {
17174
+ position: absolute;
17175
+ inset-block-start: 0;
17176
+ inset-inline-end: 0.25rem;
17177
+ inline-size: var(--moo-scrollbar-overlay-thumb-size);
17178
+ background-color: currentColor;
17179
+ border-radius: var(--bs-border-radius-pill);
17180
+ }
17181
+ @media print, (forced-colors: active) {
17182
+ .scrollbar-overlay {
17183
+ display: none !important;
17184
+ }
17185
+ }
17039
17186
  .scroll-smooth {
17040
17187
  scroll-behavior: smooth;
17041
17188
  }