@osovitny/anatoly 3.19.16 → 3.19.18

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.
@@ -3732,6 +3732,26 @@ class ScriptService {
3732
3732
  Created:
3733
3733
  2 May 2023
3734
3734
 
3735
+ Details
3736
+ https://getbootstrap.com/docs/5.3/layout/breakpoints
3737
+
3738
+ $grid-breakpoints: (
3739
+ xs: 0,
3740
+
3741
+ // Small devices (landscape phones, 576px and up)
3742
+ sm: 576px,
3743
+
3744
+ // Medium devices (tablets, 768px and up)
3745
+ md: 768px,
3746
+
3747
+ // Large devices (desktops, 992px and up)
3748
+ lg: 992px,
3749
+
3750
+ // X-Large devices (large desktops, 1200px and up)
3751
+ xl: 1200px,
3752
+ xxl: 1400px
3753
+ );
3754
+
3735
3755
  Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
3736
3756
  </file>
3737
3757
  */
@@ -3743,43 +3763,41 @@ class Browser {
3743
3763
  return window !== window.parent && !window.opener;
3744
3764
  }
3745
3765
  static isMobile() {
3746
- const userAgent = navigator.userAgent || navigator.vendor;
3766
+ const userAgent = navigator.userAgent || navigator.vendor || window.opera;
3767
+ // Touch capability detection
3768
+ const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
3769
+ // Basic screen width check
3770
+ const isMobileScreen = window.innerWidth < 768;
3771
+ // Mobile detection regex
3747
3772
  const mobileRegex = new RegExp("(android|bb\\d+|meego).+mobile|" +
3748
3773
  "avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|" +
3749
3774
  "iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|" +
3750
3775
  "mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|" +
3751
3776
  "p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|" +
3752
3777
  "up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|" +
3753
- "1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|" +
3754
- "ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|" +
3755
- "attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|" +
3756
- "br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|" +
3757
- "craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|" +
3758
- "el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|" +
3759
- "g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|" +
3760
- "hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|" +
3761
- "i230|iac( |-\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|" +
3762
- "keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|" +
3763
- "libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|" +
3764
- "mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|" +
3765
- "ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|" +
3766
- "pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|" +
3767
- "pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|" +
3768
- "s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|" +
3769
- "sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|" +
3770
- "sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|" +
3771
- "ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|" +
3772
- "vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|" +
3773
- "wmlb|wonu|x700|yas-|your|zeto|zte-", "i");
3778
+ "nokia|samsung|htc|motorola|sonyericsson|iemobile", "i");
3774
3779
  const isMobileUserAgent = mobileRegex.test(userAgent);
3775
- const isSmallScreen = window.innerWidth <= 800 && window.innerHeight <= 600;
3776
- return (isMobileUserAgent && !this.isTablet()) || isSmallScreen;
3780
+ // Combine checks
3781
+ return (hasTouch && isMobileScreen) || isMobileUserAgent;
3777
3782
  }
3778
3783
  static isTablet() {
3779
3784
  const userAgent = navigator.userAgent || navigator.vendor;
3780
- const isTabletRegex = new RegExp("ipad|android(?!.*mobile)|tablet|kindle|playbook|silk|nexus 7|nexus 10|Macintosh|" +
3781
- "fire|sm-t|tab|gt-p|sch-i|xoom|tf101|kftt|kfot|kfjw|kfsowi|a500|rim\\w", "i");
3782
- return isTabletRegex.test(userAgent);
3785
+ const tabletRegex = new RegExp("ipad|" +
3786
+ "android(?!.*mobile)|" +
3787
+ "tablet|kindle|playbook|silk|" +
3788
+ "nexus 7|nexus 10|" +
3789
+ "fire|sm-t|tab|gt-p|sch-i|xoom|tf101|" +
3790
+ "kftt|kfot|kfjw|kfsowi|a500|rim\\w", "i");
3791
+ const isTabletUserAgent = tabletRegex.test(userAgent);
3792
+ const isTabletScreen = window.innerWidth >= 768 && window.innerWidth < 992;
3793
+ return isTabletUserAgent || isTabletScreen;
3794
+ }
3795
+ static isDesktopMacOS() {
3796
+ const userAgent = navigator.userAgent || navigator.vendor;
3797
+ const isMac = /macintosh|mac os x/i.test(userAgent);
3798
+ const isIPad = /ipad/i.test(userAgent);
3799
+ // iPads may spoof macOS user agent, so exclude them
3800
+ return isMac && !isIPad;
3783
3801
  }
3784
3802
  static isMobileOrTablet() {
3785
3803
  return this.isMobile() || this.isTablet();