@vuetify/nightly 3.8.6-master.2025-05-21 → 3.8.6-master.2025-05-23

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.6-master.2025-05-21
2
+ * Vuetify v3.8.6-master.2025-05-23
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -591,6 +591,21 @@
591
591
  function isPrimitive(value) {
592
592
  return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
593
593
  }
594
+ function extractNumber(text, decimalDigitsLimit) {
595
+ const cleanText = text.split('').filter(x => /[\d\-.]/.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
596
+ // sign allowed at the start
597
+ x === '.' && i === all.indexOf('.') ||
598
+ // decimal separator allowed only once
599
+ /\d/.test(x)).join('');
600
+ if (decimalDigitsLimit === 0) {
601
+ return cleanText.split('.')[0];
602
+ }
603
+ if (decimalDigitsLimit !== null && /\.\d/.test(cleanText)) {
604
+ const parts = cleanText.split('.');
605
+ return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join('.');
606
+ }
607
+ return cleanText;
608
+ }
594
609
 
595
610
  // Utilities
596
611
  const block = ['top', 'bottom'];
@@ -695,6 +710,33 @@
695
710
  return target.getBoundingClientRect();
696
711
  }
697
712
  }
713
+ function getElementBox(el) {
714
+ if (el === document.documentElement) {
715
+ if (!visualViewport) {
716
+ return new Box({
717
+ x: 0,
718
+ y: 0,
719
+ width: document.documentElement.clientWidth,
720
+ height: document.documentElement.clientHeight
721
+ });
722
+ } else {
723
+ return new Box({
724
+ x: visualViewport.scale > 1 ? 0 : visualViewport.offsetLeft,
725
+ y: visualViewport.scale > 1 ? 0 : visualViewport.offsetTop,
726
+ width: visualViewport.width * visualViewport.scale,
727
+ height: visualViewport.height * visualViewport.scale
728
+ });
729
+ }
730
+ } else {
731
+ const rect = el.getBoundingClientRect();
732
+ return new Box({
733
+ x: rect.x,
734
+ y: rect.y,
735
+ width: el.clientWidth,
736
+ height: el.clientHeight
737
+ });
738
+ }
739
+ }
698
740
 
699
741
  // Utilities
700
742
 
@@ -10000,11 +10042,19 @@
10000
10042
  vue.watch(() => props.locationStrategy, reset);
10001
10043
  vue.onScopeDispose(() => {
10002
10044
  window.removeEventListener('resize', onResize);
10045
+ visualViewport?.removeEventListener('resize', onVisualResize);
10046
+ visualViewport?.removeEventListener('scroll', onVisualScroll);
10003
10047
  updateLocation.value = undefined;
10004
10048
  });
10005
10049
  window.addEventListener('resize', onResize, {
10006
10050
  passive: true
10007
10051
  });
10052
+ visualViewport?.addEventListener('resize', onVisualResize, {
10053
+ passive: true
10054
+ });
10055
+ visualViewport?.addEventListener('scroll', onVisualScroll, {
10056
+ passive: true
10057
+ });
10008
10058
  if (typeof props.locationStrategy === 'function') {
10009
10059
  updateLocation.value = props.locationStrategy(data, props, contentStyles)?.updateLocation;
10010
10060
  } else {
@@ -10015,6 +10065,12 @@
10015
10065
  function onResize(e) {
10016
10066
  updateLocation.value?.(e);
10017
10067
  }
10068
+ function onVisualResize(e) {
10069
+ updateLocation.value?.(e);
10070
+ }
10071
+ function onVisualScroll(e) {
10072
+ updateLocation.value?.(e);
10073
+ }
10018
10074
  return {
10019
10075
  contentStyles,
10020
10076
  updateLocation
@@ -10166,13 +10222,7 @@
10166
10222
  }
10167
10223
  }
10168
10224
  const viewport = scrollParents.reduce((box, el) => {
10169
- const rect = el.getBoundingClientRect();
10170
- const scrollBox = new Box({
10171
- x: el === document.documentElement ? 0 : rect.x,
10172
- y: el === document.documentElement ? 0 : rect.y,
10173
- width: el.clientWidth,
10174
- height: el.clientHeight
10175
- });
10225
+ const scrollBox = getElementBox(el);
10176
10226
  if (box) {
10177
10227
  return new Box({
10178
10228
  x: Math.max(box.left, scrollBox.left),
@@ -24862,25 +24912,33 @@
24862
24912
  }
24863
24913
  function onBeforeinput(e) {
24864
24914
  if (!e.data) return;
24865
- const existingTxt = e.target?.value;
24866
- const selectionStart = e.target?.selectionStart;
24867
- const selectionEnd = e.target?.selectionEnd;
24915
+ const inputElement = e.target;
24916
+ const {
24917
+ value: existingTxt,
24918
+ selectionStart,
24919
+ selectionEnd
24920
+ } = inputElement ?? {};
24868
24921
  const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
24922
+ const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision);
24923
+
24869
24924
  // Only numbers, "-", "." are allowed
24870
24925
  // AND "-", "." are allowed only once
24871
24926
  // AND "-" is only allowed at the start
24872
24927
  if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
24873
24928
  e.preventDefault();
24929
+ inputElement.value = potentialNewNumber;
24874
24930
  }
24875
24931
  if (props.precision == null) return;
24876
24932
 
24877
24933
  // Ignore decimal digits above precision limit
24878
24934
  if (potentialNewInputVal.split('.')[1]?.length > props.precision) {
24879
24935
  e.preventDefault();
24936
+ inputElement.value = potentialNewNumber;
24880
24937
  }
24881
24938
  // Ignore decimal separator when precision = 0
24882
24939
  if (props.precision === 0 && potentialNewInputVal.includes('.')) {
24883
24940
  e.preventDefault();
24941
+ inputElement.value = potentialNewNumber;
24884
24942
  }
24885
24943
  }
24886
24944
  async function onKeydown(e) {
@@ -31954,7 +32012,7 @@
31954
32012
  };
31955
32013
  });
31956
32014
  }
31957
- const version$1 = "3.8.6-master.2025-05-21";
32015
+ const version$1 = "3.8.6-master.2025-05-23";
31958
32016
  createVuetify$1.version = version$1;
31959
32017
 
31960
32018
  // Vue's inject() can only be used in setup
@@ -32252,7 +32310,7 @@
32252
32310
 
32253
32311
  /* eslint-disable local-rules/sort-imports */
32254
32312
 
32255
- const version = "3.8.6-master.2025-05-21";
32313
+ const version = "3.8.6-master.2025-05-23";
32256
32314
 
32257
32315
  /* eslint-disable local-rules/sort-imports */
32258
32316