Forked from hermes-frontend, stripped openclaw/bun specifics: - Auth tokens: openclaw_session -> nyx_session - Vite proxy: localhost:3003 -> localhost:8000 (assay) - Prod WS: wss://assay.loop42.de/ws - Workspace paths: removed openclaw-specific paths - Added missing deps: @heroicons/vue, overlayscrollbars-vue - Branding: title -> nyx Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
25 KiB
Changelog
2.14.0
Features
- Add the option
options.update.flowDirectionStyleswhich allow to opt-out or customize when the expensive "non default flow direction" check is being performed. #729 #748
Bug Fixes
- Work around browser rounding inaccuracies which prevented a proper detection of a "non default flow direction" for normal density screens. #625
2.13.0
Features
- Add fine grained debounce options via
options.update.debounce. The option is now an object which results in more freedom / fine grained debounce options. A debounce can now be specified formutations,resizes,eventsandenvironmental changesindependently. The oldoptions.update.debounceoption syntax is still supported and works but its deprecated in favor of the new syntax. #744 #729
2.12.0
Improvements
- Improve accessibility when the native scrollbars can't be hidden. This can happen when the browser isn't supporting scrollbar styling & the
ScrollbarsHidingPluginis not being used. In this case the custom scrollbars aren't rendered over the native scrollbars anymore. SimpleBar #726
2.11.5
Bug Fixes
- Sometimes when resizing the window, scrollbars applied to the body element werent updated accordingly.
2.11.4
Bug Fixes
- Remove scrollbars
clickevent when its no longer required. #720
2.11.3
Improvements
- Introduce and document the new
CSS Custom Properties:--os-viewport-overflow-xand--os-viewport-overflow-ywhich can be used to better control theoverflowstyle of theviewportelement. - Support for the
autovalue for overwrites of theoverflowstyle of theviewport.
2.11.2
Improvements
- Streamline css styles for the viewport and wrapper elements to allow overwrites of the
overflowproperty. #718
Bug Fixes
- Initialization bridging via
data-overlayscrollbars-initializeattribute conflicted with theshowNativeOverlaidScrollbars: trueoption when initialized to the body element. #713
2.11.1
Improvements
- Use the ResizeObservers
options.boxoption to remove the need for additional DOM elements in supported browsers. - Significant performance improvements in the
updatelogic.
2.11.0
Features
- Add the possibility to define a
trusted type policyfor websites with a CSP. #697
Improvements
- Change
ScrollAnimationTimelinekeyframes to not animate css-custom-properties to improve scroll performance. #705
2.10.1
Improvements
- Add
pento the list of "hoverable" pointer devices. #690
2.10.0
Features
- The option
scrollbars.clickScrollnow supports the value'instant'. TheClickScrollPluginis not required for it to work. #645
Improvements
- Rewrite
clickScrollanimation for better performance and to support in and out easing for a smoother animation.
2.9.2
Improvements
- Improve initialization and update performance by determining if a non-default scroll direction is possible before measuring scroll coordinates. #655
2.9.1
Improvements
- Resilience against
scroll-behavior: smoothstyle when scrolling should be instant.
2.9.0
Features
Improvements
- Reduced bundle size due to removed compatiblity code.
clickScrollwill not cancel on fast clicks / taps. #650- Add easing to the
clickScrollanimation. - The scrollbar-handle offset and size calculations are now entirely in CSS and will not force reflows.
- Use custom css properties for setting the scrollbar-handle offset and size.
Bug Fixes
- Only take the initial scroll coordinates from the
viewportelement if it has a scrollable overflow. (Otherwise take the initial scroll coordinates from the target element) #652
2.8.4
Improvements
- The scrollbar handle size is now updated if the corresponding scrollbar element has an transition.
2.8.3
Improvements
- Improvements to update performance.
- Added automated e2e performance metrics.
2.8.2
Bug Fixes
- Fix a bug where children attribute mutations were not picked up if the new attribute value was an empty string.
2.8.1
Improvements
- Improve the
scrollCoordinateslogic introduced inv2.8.0to have better defaults in cases of ambiguity. - The
scrollevent is not propagated if it is an result ofscrollCoordinatesdetection during update. - Focus management improvements.
2.8.0
Breaking Changes
- Although not a major release, I've decided to remove the
rtlScrollBehaviorfield from theEnvironmentobject. The reason for it is a switch of how the library now detects scroll coordinates for non default flow directions. The replacement for this field is thescrollCoordinatesfield of theStateobject for each instance.
Features
- Support non default flow directions (block and inline) not only
direction: rtl. #625 - A new field
scrollCoordinatesin theStateobject. It indicates the min. and max. scroll coordinates for the viewport. (useful for non default flow direction scrolling) - A new field
scrollCoordinatesChangedin theupdateHintsobject. It indicates whether the scroll coordinates changed in an update.
Improvements
- Fix a Firefox only behavior where releasing a scrollbar handle over an anchor would trigger the anchor and navigate to it.
- Change
zoomdetection: instead of thewindow.resizeevent, thewindow.matchMediaevent is used. - Greatly improve how dragging and releasing the scrollbar handle behaves for
scroll-snappedviewports.
Bug Fixes
- Fix a bug here pointer capture was released too early for wacom pen devices. #630
2.7.3
Improvements
- Use
{ preventScroll: true }when focusing viewport to prevent unwanted scrolling. #629 - Make the scrollbars hidden when
@media printapplies. #628
2.7.2
Bug Fixes
- Handle case where
document.defaultViewisnull. #627
2.7.1
Improvements
- When interacting with a scrollbar the
viewportelement gets focused under certain conditions. (Like e.g. the previously focused element is not and interactive element.) - Move the environment styles from the stylesheet into javascript to remove the requirement of loaded styles for correct functionality.
2.7.0
Improvements
- Improvements for running in
denoandbun. - Initialization as the
bodyelement is now detected as such when the tag name of the target element is"body". Previously this detection was done withtarget === target.ownerDocument.bodywhich would not work when creating a new body element in memory. - If a non generated
elements.viewportelement is provided during initialization its scroll position will be taken as the initial scroll position instead of the scroll position of thetargetelement. - When interacting with the scrollbars itself the
scrollbars.autoHideDelaywill now apply when the scrollbars would be auto hidden when the interaction ends.
2.6.1
Bug Fixes
- Fully remove lingering IE11 compatibility code which overwrote previously set
heightstyles.
2.6.0
Improvements
- Add
focusinandfocusoutto the focus and blur event management when wrapping and unwrapping elements. #605 - The
scrollbars.visibilityoption was unintuitive to use for adjusting visibility per axis. Its now only applied if the scrollbars scroll axis is able to have a scrollable overflow. #611
2.5.0
Breaking Changes
- Although not a major release, I've decided to drop
IE11support in this version. This change should be beneficial to the majority of users.- The size of the js bundle decreased by
~6%. - The size of the css bundle decreased by
~18%. - The fields
flexboxGlueandcssCustomPropertiesare removed from theEnvironment. (returning object fromOverlayScrollbars.env())
- The size of the js bundle decreased by
Improvements
- Streamlining of scroll related calculations, including RTL direction.
- Focus and Blur event management when wrapping and unwrapping elements during initialization and destroy. #605
2.4.7
Improvements
- Adapt the
exportsfield in thepackage.jsonfor correctcommonjsandmodulehandling. - Additional types exports:
Elements,State,CloneableScrollbarElements,ScrollbarElements,StaticInitializationandDynamicInitialization. - Remove obsolete styles when initializing
OverlayScrollbarson thebodyelement and the browser supports native scrollbar hiding. #601 - Move code to the
ScrollbarsHidingPluginfor better treeshaking.
2.4.6
Bug Fixes
- If the pointer (mouse, pen etc.) is interacting with the scrollbar, the
autoHideoption will wait until the interaction is finished. #597 ScrollTimelineanimations are not canceled anymore when they are updated. Instead the animations keyframe effect is switched out preventing flickering. #598
2.4.5
Improvements
- Its now possible to have a height / width transition on the scrollbar-handle. #587
2.4.4
Bug Fixes
- Fix a bug where ScrollTimeline animation keyframe could contain
NaNorInfinityvalues triggering a warning. #581 - Treat explicitly assigned
undefinedvalues for options as if they would be left out. #586
2.4.3
Bug Fixes
- Bug where the instance wasn't updated when the
windowresized. #578
Improvements
- Further improvements to the update strategy to make finer grained updates.
2.4.2
Improvements
- Makes custom instance plugins compatible with "pure" environments such as
reactand all other component frameworks / libraries.
2.4.1
Improvements
- Add compatibility
exportsfield topackage.jsonso the'overlayscrollbars/styles/overlayscrollbars.css'import works in all node versions. #570
2.4.0
Features
- Finalize and document the plugin system which makes it possible to create "static" and / or "instance" plugins.
- The static
OverlayScrollbars.pluginfunction returns a "static" plugins instance(s) for the registered plugins. - A new
instance.pluginfunction which returns a "instance" plugins instance. - window
resizeevents will now update instances only if it is needed and only what is needed.
Improvements
- Small internal rewrite to improve stability, performance and bundle size.
- Improvements the documentation and README.
2.3.2
Bug Fixes
- The
element.animateapi is only called when the browser supports the ScrollTimeline API. #562
2.3.1
Bug Fixes
- Fix direction
rtlvisual scrollbar handle behavior in browser which support the ScrollTimeline API. - Fix double tap behavior for interactive elements on
iOSdevices ifautoHideisleaveormove. #560 #285 - Fix incorrect scrollbar handle calculation when overscroll on safari occurred. #559
2.3.0
Features
- Make use of the new ScrollTimeline API in supported browsers.
- Add the option
scrollbars.autoHideSuspendto make it possible to suspend the autoHide functionality until the first scroll interaction was performed. The default value for this option isfalsefor backwards compatibility reasons but is recommended to betruefor better accessibility. - Add a CSS selector to bridge deferred initializations visually.
Bug Fixes
- Fix a bug where a change wasn't detected properly when the target element was hidden initially. #546
- Fixed a bug where the scroll offset was reset to
0sometimes after initialization when the target was thebodyelement.
Improvements
- Add online examples to README.
2.2.1
Bug Fixes
- Fix an issue where the
viewportelement could be wider than thehostelement. #538
Improvements
- Instead of
offsetWidth&offsetHeightuse the corresponding properties from thegetBoundingClientRectobject to increase accuracy of scrollbar calculations. #542
2.2.0
Improvements
- Force the
scroll-behaviorcss property to beautowhen the user interacts with a scrollbar to prevent smooth scrolling to apply where it shouldn't. #515 - The
viewort,paddingandcontentelements don't use theclassattribute anymore for their styling. Instead each of them uses its owndata-overlayscrollbars-*attribute. This has been done so that 3rd party libraries aren't conflicting with classnames from overlayscrollbars or vice versa. Selectors like.os-viewport,.os-paddingor.os-contentwon't work anymore. #526 #530
2.1.1
Bug Fixes
- Fixed a bug where pointer events weren't released properly after drag or click scrolling. #512
Improvements
- The
os-theme-darkandos-theme-lightthemes now useborder-boxbox-sizing as their default. - Improve the
README.mddocumentation for initialization, styling and and the browser global version. #509
2.1.0
Bug Fixes
- Fix a bug where initial
RTLdirection wasn't detected properly.
Features
- Introduce
CSS Custom Propertiesto improve theming and styling of scrollbars. #478
Improvements
- Improve pointer event handling on scrollbar handle and track.
- Improve the README documentation with a styling section.
2.0.3
Bug Fixes
- Revert the
viewportandpaddingstyleposition: relativechange introduced inv2.0.2due to breaking behavior. #489 is considered a design limitation.
2.0.2
Bug Fixes
- The
viewportandpaddingelements won't have the styleposition: relativeanymore if its not needed. The style is only needed for older browsers. (#489)
2.0.1
Bug Fixes
- The custom scrollbars are now always hidden if the
showNativeOverlaidScrollbarsoption istrue.
Improvements
- The initialization to the
bodyelement respects nowoverflow: hiddenstyle overrides of thehtmlandbodyelement. (#477) data-overlayscrollbars-initializeis now automatically removed if the instance is destroyed or canceled.data-overlayscrollbars-initializenow always setsoverflow: autoto prevent elements to be suddenly cropped after initialization.- removed obsolete
!importantstyles
2.0.0
OverlayScrollbars was rewritten from the ground up in TypeScript in a functional manner.
The rewrite comes with multiple benefits:
- The library is much smaller now (about 50% smaller fully treeshaken)
- Modern browsers benefit greatly because compat code is inside
pluginswhich are treeshaken if unused - Multiple performance optimizations were made due to the new structure
- Framework Components benefit of the
pureparameter foroptionsandevents(same input produces same output) - TypeScript definitions are always up to date (
@types/overlayscrollbarsis obsolete now)
New Features:
- If applied to
bodyall the native functionality in modern browsers (e.g. swipe down to refresh on mobile, scroll restoration etc.) is preserved (#376, #425, #273, #320) - If you scroll while the cursor hovers a scrollbar element the viewport is now scrolled (#128, #322)
- The initialization process can be fully customized now. This makes it possible to itegrate with other plugins / libraries (#432, #304, #149, #148, #139, #49)
- Scrollbars can be cloned and positioned anywhere in the DOM tree. (#404, #323, #158, #17)
- The update behavior of the
MutationObserverfor the content can be customized with theupdateoptions. (#307, #183, #23) - Works now without adjustments with CSS-Grid, CSS-Flexbox etc.
- Supports all kind of input devices additionally to
mouseandtouch. (Uses native pointer-events now) - Exports a
esmversion which can be treeshaken
Breaking changes:
-
Browser support changed. The minimal version is now IE11.
-
There is no default export anymore. The main entry point is now the
OverlayScrollbarsnamed export. -
The
stylesare now exported under a different path. Read the docs for more info. -
The
scrollfunction is missing. (WIP will be added as a plugin) -
Initialization to
textareaelement is not suppored. (WIP will be added as a plugin) -
extensionsare replaced withplugins. Plugins are more powerful but work nothing likeextensions. -
Any helper functions for
extensionsare removed. -
TypesScriptdefinitions changed completely. -
CSSstyles changed completely. -
There is no
jQueryversion anymore and nojQuerycompat functionality -
The following changed for the
initialization:- Arrays of elements are not supported anymore. If you want to initialize the plugin to multiple elements, you have to loop over them.
- Since the initialization is now fully customizable, the plugin won't have special behavior anymore if it has children with
os-classnames - The third parameter are
eventsnow instead ofeventsionssinceextensionsare removed
-
The following options were removed / replaced / renamed:
resizeis removedsizeAutoCapableis removed (works always now)clipAlwaysis removed (works automatically now)normalizeRTLis removed since thescrollfunction isn't implemented yet there is nothing to normalizeautoUpdateis removed since all browser support theMutationObserverapi there is no need for customizing a update loopautoUpdateIntervalis removedclassNameis replaced withscrollbars.themeupdateOnLoadis replaced withupdate.elementEventsnativeScrollbarsOverlaid.initializeis replaced with theInitializationconcept. You can pass a object as target now where you can specify when to cancel the initialization of the plugin.nativeScrollbarsOverlaid.showNativeScrollbars: is renamed toshowNativeOverlaidScrollbarsscrollbars.dragScrollingis renamed toscrollbars.dragScrollscrollbars.clickScrollingis renamed toscrollbars.clickScrolland animates the scroll change only with theClickScrollPluginotherwise its instantscrollbars.touchSupportis replaced withscrollbars.pointersscrollbars.snapHandleis removedtextareais removed sincetextareainitialization isn't possible yetcallbacksis removed / replaced with theeventsconcept. You can pass listeners / callback separately to the options. Thethiscontext is nowundefinedas a replacement each event recieves theinstanceas its first argument.onScrollStartis removedonScrollStopis removedonInitializedis replaced with theinitializedeventonUpdatedis replaced with theupdatedtheonDestroyedis replaced with thedestroyedeventonScrollis replaced with thescrolleventonInitializationWithdrawnis replaced with thedestroyedevent (if the second argumentcanceledistrue)onOverflowChangedis replaced with theupdatedevent (its second argument holds the information whether the overflow changed)onOverflowAmountChangedis replaced with theupdatedevent (its second argument holds the information whether the overflow amount changed and how much)onDirectionChangedis replaced with theupdatedevent (its second argument holds the information whether the direction changed)onContentSizeChangedis replaced with theupdatedevent (its second argument holds the information whether the content got mutated)onHostSizeChangedis replaced with theupdatedevent (its second argument holds the information whether the host got mutated / its size changed)
-
The following instance methods were removed / replaced / renamed:
sleep()is removed since it doesn't fit into the new structure and shouldn't be needed anymoreext()is removedaddExt()is removedremoveExt()is removedscroll()is removed (WIP)scrollStop()is removed (WIP)getElements()is renamed toelements()and doesn't support any argumens anymore.getState()is renamed tostate()and doesn't support any argumens anymore.
-
The following static methods were removed / replaced / renamed:
extension()is removeddefaultOptions()is replaced withenv().getDefaultOptions()andenv().setDefaultOptions()globals()is replaced withenv()
-
If you used any fields from the
globals()result, please refer to the TypeScript definitions for the correct replacement inenv()
Theming changes:
- Because scrollbars can be cloned and positioned anywhere in the DOM, themes which worked in
v1have to be adapted slightly:.os-scrollbarelements now don't rely on its parent element. Selectors like.os-theme-dark > .os-scrollbar-verticalare now.os-theme-dark.os-scrollbar-vertical- the
.os-host-rtlclass is replaced with.os-scrollbar-rtl. Selectors like.os-theme-dark.os-host-rtl > .os-scrollbar-horizontalare now.os-theme-dark.os-scrollbar-rtl.os-scrollbar-horizontal