@vuetify/nightly 3.6.13-3.7.0-beta.0.0-pr-20092.a834b18 → 3.6.14-master.2024-08-01

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 (202) hide show
  1. package/dist/json/attributes.json +127 -275
  2. package/dist/json/importMap-labs.json +20 -20
  3. package/dist/json/importMap.json +130 -130
  4. package/dist/json/tags.json +5 -42
  5. package/dist/json/web-types.json +241 -612
  6. package/dist/vuetify-labs.css +3861 -3156
  7. package/dist/vuetify-labs.d.ts +368 -697
  8. package/dist/vuetify-labs.esm.js +238 -240
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +238 -240
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +1162 -457
  13. package/dist/vuetify.d.ts +348 -611
  14. package/dist/vuetify.esm.js +99 -159
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +99 -159
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +1038 -1037
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAlert/VAlert.css +5 -1
  22. package/lib/components/VAppBar/index.d.mts +0 -6
  23. package/lib/components/VAutocomplete/VAutocomplete.css +4 -0
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +8 -15
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/index.d.mts +42 -61
  27. package/lib/components/VAvatar/VAvatar.css +2 -7
  28. package/lib/components/VAvatar/VAvatar.mjs +2 -7
  29. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  30. package/lib/components/VAvatar/VAvatar.sass +0 -1
  31. package/lib/components/VAvatar/_variables.scss +0 -13
  32. package/lib/components/VAvatar/index.d.mts +0 -6
  33. package/lib/components/VBadge/VBadge.css +2 -0
  34. package/lib/components/VBanner/VBanner.css +12 -4
  35. package/lib/components/VBottomNavigation/VBottomNavigation.css +11 -3
  36. package/lib/components/VBottomSheet/VBottomSheet.css +2 -0
  37. package/lib/components/VBreadcrumbs/index.d.mts +8 -8
  38. package/lib/components/VBtn/VBtn.css +16 -9
  39. package/lib/components/VBtn/VBtn.mjs +2 -4
  40. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  41. package/lib/components/VBtn/VBtn.sass +4 -4
  42. package/lib/components/VBtn/index.d.mts +0 -6
  43. package/lib/components/VBtnGroup/VBtnGroup.css +12 -4
  44. package/lib/components/VCard/VCard.css +9 -1
  45. package/lib/components/VCarousel/VCarousel.css +2 -0
  46. package/lib/components/VCarousel/index.d.mts +0 -9
  47. package/lib/components/VCheckbox/index.d.mts +6 -6
  48. package/lib/components/VChip/VChip.css +15 -9
  49. package/lib/components/VChip/VChip.sass +1 -1
  50. package/lib/components/VColorPicker/VColorPicker.css +2 -0
  51. package/lib/components/VColorPicker/VColorPicker.sass +4 -4
  52. package/lib/components/VColorPicker/VColorPickerPreview.sass +4 -4
  53. package/lib/components/VCombobox/VCombobox.css +4 -0
  54. package/lib/components/VCombobox/VCombobox.mjs +8 -15
  55. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  56. package/lib/components/VCombobox/index.d.mts +42 -61
  57. package/lib/components/VDialog/VDialog.css +5 -0
  58. package/lib/components/VDialog/index.d.mts +3 -3
  59. package/lib/components/VDivider/VDivider.css +2 -0
  60. package/lib/components/VExpansionPanel/VExpansionPanel.css +11 -5
  61. package/lib/components/VExpansionPanel/VExpansionPanel.sass +3 -3
  62. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +2 -7
  63. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  64. package/lib/components/VExpansionPanel/index.d.mts +0 -72
  65. package/lib/components/VFab/index.d.mts +0 -6
  66. package/lib/components/VField/VField.css +13 -1
  67. package/lib/components/VField/VField.sass +5 -8
  68. package/lib/components/VFileInput/index.d.mts +18 -18
  69. package/lib/components/VFooter/VFooter.css +12 -4
  70. package/lib/components/VFooter/VFooter.mjs +20 -14
  71. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  72. package/lib/components/VFooter/index.d.mts +3 -3
  73. package/lib/components/VForm/index.d.mts +9 -9
  74. package/lib/components/VGrid/VContainer.mjs +1 -6
  75. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  76. package/lib/components/VGrid/VGrid.sass +1 -1
  77. package/lib/components/VGrid/_mixins.sass +4 -4
  78. package/lib/components/VGrid/index.d.mts +0 -36
  79. package/lib/components/VImg/VImg.css +6 -9
  80. package/lib/components/VImg/VImg.mjs +0 -2
  81. package/lib/components/VImg/VImg.mjs.map +1 -1
  82. package/lib/components/VImg/VImg.sass +0 -9
  83. package/lib/components/VImg/index.d.mts +0 -9
  84. package/lib/components/VInput/index.d.mts +6 -6
  85. package/lib/components/VKbd/VKbd.css +2 -0
  86. package/lib/components/VList/VList.css +12 -4
  87. package/lib/components/VList/VListItem.css +23 -13
  88. package/lib/components/VList/VListItem.mjs +1 -3
  89. package/lib/components/VList/VListItem.mjs.map +1 -1
  90. package/lib/components/VList/VListItem.sass +2 -2
  91. package/lib/components/VList/index.d.mts +18 -19
  92. package/lib/components/VMain/VMain.css +2 -0
  93. package/lib/components/VMenu/VMenu.css +6 -0
  94. package/lib/components/VMenu/VMenu.mjs +8 -26
  95. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  96. package/lib/components/VMenu/index.d.mts +15 -30
  97. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +9 -3
  98. package/lib/components/VOtpInput/VOtpInput.css +3 -1
  99. package/lib/components/VOtpInput/VOtpInput.sass +1 -2
  100. package/lib/components/VOverflowBtn/VOverflowBtn.sass +1 -1
  101. package/lib/components/VOverlay/VOverlay.mjs +4 -5
  102. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  103. package/lib/components/VOverlay/useActivator.mjs +2 -3
  104. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  105. package/lib/components/VRadioGroup/index.d.mts +6 -6
  106. package/lib/components/VRangeSlider/index.d.mts +6 -6
  107. package/lib/components/VSelect/VSelect.css +4 -0
  108. package/lib/components/VSelect/VSelect.mjs +13 -15
  109. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  110. package/lib/components/VSelect/index.d.mts +42 -61
  111. package/lib/components/VSelect/useScrolling.mjs +3 -3
  112. package/lib/components/VSelect/useScrolling.mjs.map +1 -1
  113. package/lib/components/VSelectionControl/VSelectionControl.css +6 -4
  114. package/lib/components/VSelectionControl/VSelectionControl.sass +1 -1
  115. package/lib/components/VSheet/VSheet.css +12 -4
  116. package/lib/components/VSkeletonLoader/VSkeletonLoader.css +6 -4
  117. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs +9 -8
  118. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
  119. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +1 -2
  120. package/lib/components/VSlideGroup/VSlideGroup.mjs +1 -3
  121. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  122. package/lib/components/VSlideGroup/index.d.mts +0 -6
  123. package/lib/components/VSlider/VSliderThumb.sass +2 -2
  124. package/lib/components/VSlider/index.d.mts +6 -6
  125. package/lib/components/VSnackbar/VSnackbar.css +2 -0
  126. package/lib/components/VSnackbar/VSnackbar.mjs +4 -4
  127. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  128. package/lib/components/VSnackbar/index.d.mts +3 -3
  129. package/lib/components/VSpeedDial/index.d.mts +13 -28
  130. package/lib/components/VStepper/VStepper.css +8 -2
  131. package/lib/components/VStepper/VStepper.sass +2 -4
  132. package/lib/components/VStepper/VStepperItem.css +4 -1
  133. package/lib/components/VStepper/VStepperItem.sass +1 -1
  134. package/lib/components/VSwitch/VSwitch.css +2 -0
  135. package/lib/components/VSwitch/VSwitch.sass +10 -10
  136. package/lib/components/VSwitch/index.d.mts +6 -6
  137. package/lib/components/VSystemBar/VSystemBar.css +14 -8
  138. package/lib/components/VTable/VTable.css +8 -4
  139. package/lib/components/VTable/VTable.sass +2 -3
  140. package/lib/components/VTabs/index.d.mts +3 -21
  141. package/lib/components/VTextField/index.d.mts +18 -18
  142. package/lib/components/VTextarea/index.d.mts +18 -18
  143. package/lib/components/VTimeline/VTimeline.css +2 -0
  144. package/lib/components/VToolbar/VToolbar.css +21 -7
  145. package/lib/components/VToolbar/VToolbar.sass +1 -2
  146. package/lib/components/VTooltip/index.d.mts +3 -3
  147. package/lib/components/VTreeview/VTreeview.sass +9 -9
  148. package/lib/components/VValidation/index.d.mts +8 -9
  149. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +0 -2
  150. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  151. package/lib/components/VVirtualScroll/index.d.mts +0 -3
  152. package/lib/components/index.d.mts +302 -565
  153. package/lib/composables/nested/nested.mjs +3 -3
  154. package/lib/composables/nested/nested.mjs.map +1 -1
  155. package/lib/composables/nested/openStrategies.mjs +2 -4
  156. package/lib/composables/nested/openStrategies.mjs.map +1 -1
  157. package/lib/composables/nested/selectStrategies.mjs +5 -5
  158. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  159. package/lib/composables/validation.mjs +6 -8
  160. package/lib/composables/validation.mjs.map +1 -1
  161. package/lib/composables/virtual.mjs +0 -1
  162. package/lib/composables/virtual.mjs.map +1 -1
  163. package/lib/entry-bundler.mjs +1 -1
  164. package/lib/entry-bundler.mjs.map +1 -1
  165. package/lib/framework.mjs +1 -1
  166. package/lib/framework.mjs.map +1 -1
  167. package/lib/index.d.mts +46 -46
  168. package/lib/labs/VDateInput/index.d.mts +6 -6
  169. package/lib/labs/VNumberInput/VNumberInput.mjs +60 -36
  170. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  171. package/lib/labs/VNumberInput/index.d.mts +23 -14
  172. package/lib/labs/VPicker/VPicker.css +6 -2
  173. package/lib/labs/VPicker/VPicker.sass +2 -3
  174. package/lib/labs/VSnackbarQueue/index.d.mts +3 -3
  175. package/lib/labs/VStepperVertical/index.d.mts +0 -36
  176. package/lib/labs/VTreeview/VTreeview.mjs +5 -7
  177. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
  178. package/lib/labs/VTreeview/VTreeviewChildren.mjs +10 -33
  179. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -1
  180. package/lib/labs/VTreeview/VTreeviewItem.css +1 -1
  181. package/lib/labs/VTreeview/VTreeviewItem.mjs +74 -14
  182. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  183. package/lib/labs/VTreeview/VTreeviewItem.sass +5 -2
  184. package/lib/labs/VTreeview/index.d.mts +60 -77
  185. package/lib/labs/components.d.mts +92 -136
  186. package/lib/styles/generic/_colors.scss +9 -3
  187. package/lib/styles/main.css +520 -0
  188. package/lib/styles/tools/_absolute.sass +8 -7
  189. package/lib/styles/tools/_border.sass +4 -3
  190. package/lib/styles/tools/_display.sass +8 -7
  191. package/lib/styles/tools/_elevation.sass +4 -2
  192. package/lib/styles/tools/_index.sass +0 -1
  193. package/lib/styles/tools/_radius.sass +6 -5
  194. package/lib/styles/tools/_rounded.sass +2 -1
  195. package/lib/styles/tools/_theme.sass +3 -2
  196. package/lib/styles/tools/_typography.sass +6 -5
  197. package/lib/styles/tools/_utilities.sass +5 -5
  198. package/lib/styles/utilities/_index.sass +7 -7
  199. package/lib/util/helpers.mjs +0 -5
  200. package/lib/util/helpers.mjs.map +1 -1
  201. package/package.json +1 -1
  202. package/lib/styles/tools/_sheet.sass +0 -14
package/lib/index.d.mts CHANGED
@@ -468,37 +468,37 @@ interface _GlobalComponents {
468
468
  VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
469
469
  VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
470
470
  VApp: typeof import('vuetify/components')['VApp']
471
- VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
472
471
  VAlert: typeof import('vuetify/components')['VAlert']
473
472
  VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
474
473
  VAvatar: typeof import('vuetify/components')['VAvatar']
475
- VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
474
+ VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
476
475
  VBadge: typeof import('vuetify/components')['VBadge']
477
- VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
478
- VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
479
- VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
476
+ VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
477
+ VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
480
478
  VBanner: typeof import('vuetify/components')['VBanner']
481
479
  VBannerActions: typeof import('vuetify/components')['VBannerActions']
482
480
  VBannerText: typeof import('vuetify/components')['VBannerText']
483
- VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
484
- VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
485
- VBtn: typeof import('vuetify/components')['VBtn']
481
+ VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
482
+ VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
483
+ VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
486
484
  VCard: typeof import('vuetify/components')['VCard']
487
485
  VCardActions: typeof import('vuetify/components')['VCardActions']
488
486
  VCardItem: typeof import('vuetify/components')['VCardItem']
489
487
  VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
490
488
  VCardText: typeof import('vuetify/components')['VCardText']
491
489
  VCardTitle: typeof import('vuetify/components')['VCardTitle']
490
+ VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
492
491
  VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
493
- VCarousel: typeof import('vuetify/components')['VCarousel']
494
- VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
495
- VChipGroup: typeof import('vuetify/components')['VChipGroup']
496
492
  VCheckbox: typeof import('vuetify/components')['VCheckbox']
497
493
  VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
498
- VColorPicker: typeof import('vuetify/components')['VColorPicker']
499
- VCode: typeof import('vuetify/components')['VCode']
494
+ VBtn: typeof import('vuetify/components')['VBtn']
500
495
  VChip: typeof import('vuetify/components')['VChip']
496
+ VCode: typeof import('vuetify/components')['VCode']
497
+ VCarousel: typeof import('vuetify/components')['VCarousel']
498
+ VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
499
+ VColorPicker: typeof import('vuetify/components')['VColorPicker']
501
500
  VCombobox: typeof import('vuetify/components')['VCombobox']
501
+ VChipGroup: typeof import('vuetify/components')['VChipGroup']
502
502
  VCounter: typeof import('vuetify/components')['VCounter']
503
503
  VDataTable: typeof import('vuetify/components')['VDataTable']
504
504
  VDataTableHeaders: typeof import('vuetify/components')['VDataTableHeaders']
@@ -507,35 +507,35 @@ interface _GlobalComponents {
507
507
  VDataTableRow: typeof import('vuetify/components')['VDataTableRow']
508
508
  VDataTableVirtual: typeof import('vuetify/components')['VDataTableVirtual']
509
509
  VDataTableServer: typeof import('vuetify/components')['VDataTableServer']
510
- VEmptyState: typeof import('vuetify/components')['VEmptyState']
511
- VDivider: typeof import('vuetify/components')['VDivider']
512
- VDialog: typeof import('vuetify/components')['VDialog']
513
510
  VDatePicker: typeof import('vuetify/components')['VDatePicker']
514
511
  VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
515
512
  VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
516
513
  VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
517
514
  VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
518
515
  VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
516
+ VDialog: typeof import('vuetify/components')['VDialog']
517
+ VDivider: typeof import('vuetify/components')['VDivider']
518
+ VEmptyState: typeof import('vuetify/components')['VEmptyState']
519
+ VFab: typeof import('vuetify/components')['VFab']
519
520
  VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
520
521
  VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
521
522
  VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
522
523
  VExpansionPanelTitle: typeof import('vuetify/components')['VExpansionPanelTitle']
523
- VFab: typeof import('vuetify/components')['VFab']
524
524
  VField: typeof import('vuetify/components')['VField']
525
525
  VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
526
- VFooter: typeof import('vuetify/components')['VFooter']
527
- VImg: typeof import('vuetify/components')['VImg']
528
526
  VFileInput: typeof import('vuetify/components')['VFileInput']
529
527
  VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
530
- VItemGroup: typeof import('vuetify/components')['VItemGroup']
531
- VItem: typeof import('vuetify/components')['VItem']
532
- VKbd: typeof import('vuetify/components')['VKbd']
533
- VInput: typeof import('vuetify/components')['VInput']
528
+ VFooter: typeof import('vuetify/components')['VFooter']
534
529
  VIcon: typeof import('vuetify/components')['VIcon']
535
530
  VComponentIcon: typeof import('vuetify/components')['VComponentIcon']
536
531
  VSvgIcon: typeof import('vuetify/components')['VSvgIcon']
537
532
  VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
538
533
  VClassIcon: typeof import('vuetify/components')['VClassIcon']
534
+ VImg: typeof import('vuetify/components')['VImg']
535
+ VKbd: typeof import('vuetify/components')['VKbd']
536
+ VInput: typeof import('vuetify/components')['VInput']
537
+ VItemGroup: typeof import('vuetify/components')['VItemGroup']
538
+ VItem: typeof import('vuetify/components')['VItem']
539
539
  VLabel: typeof import('vuetify/components')['VLabel']
540
540
  VList: typeof import('vuetify/components')['VList']
541
541
  VListGroup: typeof import('vuetify/components')['VListGroup']
@@ -547,66 +547,66 @@ interface _GlobalComponents {
547
547
  VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
548
548
  VListSubheader: typeof import('vuetify/components')['VListSubheader']
549
549
  VMain: typeof import('vuetify/components')['VMain']
550
- VMessages: typeof import('vuetify/components')['VMessages']
551
550
  VMenu: typeof import('vuetify/components')['VMenu']
552
551
  VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
553
- VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
554
552
  VOtpInput: typeof import('vuetify/components')['VOtpInput']
553
+ VMessages: typeof import('vuetify/components')['VMessages']
555
554
  VOverlay: typeof import('vuetify/components')['VOverlay']
555
+ VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
556
+ VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
556
557
  VPagination: typeof import('vuetify/components')['VPagination']
558
+ VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
557
559
  VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
558
560
  VRating: typeof import('vuetify/components')['VRating']
559
- VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
560
561
  VSelect: typeof import('vuetify/components')['VSelect']
561
- VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
562
562
  VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
563
563
  VSheet: typeof import('vuetify/components')['VSheet']
564
+ VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
564
565
  VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
565
566
  VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
566
- VSlider: typeof import('vuetify/components')['VSlider']
567
- VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
568
567
  VSnackbar: typeof import('vuetify/components')['VSnackbar']
569
- VSwitch: typeof import('vuetify/components')['VSwitch']
570
568
  VStepper: typeof import('vuetify/components')['VStepper']
571
569
  VStepperActions: typeof import('vuetify/components')['VStepperActions']
572
570
  VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
573
571
  VStepperItem: typeof import('vuetify/components')['VStepperItem']
574
572
  VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
575
573
  VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
574
+ VSystemBar: typeof import('vuetify/components')['VSystemBar']
575
+ VSlider: typeof import('vuetify/components')['VSlider']
576
576
  VTab: typeof import('vuetify/components')['VTab']
577
577
  VTabs: typeof import('vuetify/components')['VTabs']
578
578
  VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
579
579
  VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
580
- VSystemBar: typeof import('vuetify/components')['VSystemBar']
581
- VTextarea: typeof import('vuetify/components')['VTextarea']
580
+ VSwitch: typeof import('vuetify/components')['VSwitch']
582
581
  VTable: typeof import('vuetify/components')['VTable']
583
582
  VTextField: typeof import('vuetify/components')['VTextField']
584
- VTooltip: typeof import('vuetify/components')['VTooltip']
585
- VTimeline: typeof import('vuetify/components')['VTimeline']
586
- VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
583
+ VTextarea: typeof import('vuetify/components')['VTextarea']
587
584
  VToolbar: typeof import('vuetify/components')['VToolbar']
588
585
  VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
589
586
  VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
587
+ VTimeline: typeof import('vuetify/components')['VTimeline']
588
+ VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
589
+ VTooltip: typeof import('vuetify/components')['VTooltip']
590
590
  VWindow: typeof import('vuetify/components')['VWindow']
591
591
  VWindowItem: typeof import('vuetify/components')['VWindowItem']
592
592
  VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
593
593
  VDataIterator: typeof import('vuetify/components')['VDataIterator']
594
594
  VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
595
+ VForm: typeof import('vuetify/components')['VForm']
595
596
  VContainer: typeof import('vuetify/components')['VContainer']
596
597
  VCol: typeof import('vuetify/components')['VCol']
597
598
  VRow: typeof import('vuetify/components')['VRow']
598
599
  VSpacer: typeof import('vuetify/components')['VSpacer']
599
- VForm: typeof import('vuetify/components')['VForm']
600
600
  VHover: typeof import('vuetify/components')['VHover']
601
601
  VLayout: typeof import('vuetify/components')['VLayout']
602
602
  VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
603
- VLazy: typeof import('vuetify/components')['VLazy']
604
603
  VLocaleProvider: typeof import('vuetify/components')['VLocaleProvider']
604
+ VLazy: typeof import('vuetify/components')['VLazy']
605
605
  VNoSsr: typeof import('vuetify/components')['VNoSsr']
606
606
  VParallax: typeof import('vuetify/components')['VParallax']
607
607
  VRadio: typeof import('vuetify/components')['VRadio']
608
- VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
609
608
  VResponsive: typeof import('vuetify/components')['VResponsive']
609
+ VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
610
610
  VSparkline: typeof import('vuetify/components')['VSparkline']
611
611
  VSpeedDial: typeof import('vuetify/components')['VSpeedDial']
612
612
  VThemeProvider: typeof import('vuetify/components')['VThemeProvider']
@@ -634,21 +634,21 @@ interface _GlobalComponents {
634
634
  VCalendarInterval: typeof import('vuetify/labs/components')['VCalendarInterval']
635
635
  VCalendarIntervalEvent: typeof import('vuetify/labs/components')['VCalendarIntervalEvent']
636
636
  VCalendarMonthDay: typeof import('vuetify/labs/components')['VCalendarMonthDay']
637
+ VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
637
638
  VPicker: typeof import('vuetify/labs/components')['VPicker']
638
639
  VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
639
- VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
640
- VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
641
- VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
642
- VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
643
- VTreeview: typeof import('vuetify/labs/components')['VTreeview']
644
- VTreeviewItem: typeof import('vuetify/labs/components')['VTreeviewItem']
645
- VTreeviewGroup: typeof import('vuetify/labs/components')['VTreeviewGroup']
646
640
  VTimePicker: typeof import('vuetify/labs/components')['VTimePicker']
647
641
  VTimePickerClock: typeof import('vuetify/labs/components')['VTimePickerClock']
648
642
  VTimePickerControls: typeof import('vuetify/labs/components')['VTimePickerControls']
643
+ VTreeview: typeof import('vuetify/labs/components')['VTreeview']
644
+ VTreeviewItem: typeof import('vuetify/labs/components')['VTreeviewItem']
645
+ VTreeviewGroup: typeof import('vuetify/labs/components')['VTreeviewGroup']
646
+ VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
647
+ VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
648
+ VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
649
+ VDateInput: typeof import('vuetify/labs/components')['VDateInput']
649
650
  VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
650
651
  VSnackbarQueue: typeof import('vuetify/labs/components')['VSnackbarQueue']
651
- VDateInput: typeof import('vuetify/labs/components')['VDateInput']
652
652
  }
653
653
  declare module 'vue' {
654
654
  export type JSXComponent<Props = any> = { new (): ComponentPublicInstance<Props> } | FunctionalComponent<Props>
@@ -98,7 +98,7 @@ declare const VDateInput: {
98
98
  counter?: string | number | boolean | undefined;
99
99
  'onUpdate:focused'?: ((args_0: boolean) => void) | undefined;
100
100
  modelValue?: any;
101
- validateOn?: ("eager" | "lazy" | ("input" | "blur" | "submit" | "invalid-input") | "input lazy" | "blur lazy" | "submit lazy" | "invalid-input lazy" | "input eager" | "blur eager" | "submit eager" | "invalid-input eager" | "lazy input" | "lazy blur" | "lazy submit" | "lazy invalid-input" | "eager input" | "eager blur" | "eager submit" | "eager invalid-input") | undefined;
101
+ validateOn?: "lazy" | ("input" | "blur" | "submit") | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined;
102
102
  validationValue?: any;
103
103
  rounded?: string | number | boolean | undefined;
104
104
  baseColor?: string | undefined;
@@ -211,7 +211,7 @@ declare const VDateInput: {
211
211
  counter?: string | number | boolean | undefined;
212
212
  'onUpdate:focused'?: ((args_0: boolean) => void) | undefined;
213
213
  modelValue?: any;
214
- validateOn?: ("eager" | "lazy" | ("input" | "blur" | "submit" | "invalid-input") | "input lazy" | "blur lazy" | "submit lazy" | "invalid-input lazy" | "input eager" | "blur eager" | "submit eager" | "invalid-input eager" | "lazy input" | "lazy blur" | "lazy submit" | "lazy invalid-input" | "eager input" | "eager blur" | "eager submit" | "eager invalid-input") | undefined;
214
+ validateOn?: "lazy" | ("input" | "blur" | "submit") | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined;
215
215
  validationValue?: any;
216
216
  rounded?: string | number | boolean | undefined;
217
217
  baseColor?: string | undefined;
@@ -384,7 +384,7 @@ declare const VDateInput: {
384
384
  counter?: string | number | boolean | undefined;
385
385
  'onUpdate:focused'?: ((args_0: boolean) => void) | undefined;
386
386
  modelValue?: any;
387
- validateOn?: ("eager" | "lazy" | ("input" | "blur" | "submit" | "invalid-input") | "input lazy" | "blur lazy" | "submit lazy" | "invalid-input lazy" | "input eager" | "blur eager" | "submit eager" | "invalid-input eager" | "lazy input" | "lazy blur" | "lazy submit" | "lazy invalid-input" | "eager input" | "eager blur" | "eager submit" | "eager invalid-input") | undefined;
387
+ validateOn?: "lazy" | ("input" | "blur" | "submit") | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined;
388
388
  validationValue?: any;
389
389
  rounded?: string | number | boolean | undefined;
390
390
  baseColor?: string | undefined;
@@ -550,7 +550,7 @@ declare const VDateInput: {
550
550
  counter?: string | number | boolean | undefined;
551
551
  'onUpdate:focused'?: ((args_0: boolean) => void) | undefined;
552
552
  modelValue?: any;
553
- validateOn?: ("eager" | "lazy" | ("input" | "blur" | "submit" | "invalid-input") | "input lazy" | "blur lazy" | "submit lazy" | "invalid-input lazy" | "input eager" | "blur eager" | "submit eager" | "invalid-input eager" | "lazy input" | "lazy blur" | "lazy submit" | "lazy invalid-input" | "eager input" | "eager blur" | "eager submit" | "eager invalid-input") | undefined;
553
+ validateOn?: "lazy" | ("input" | "blur" | "submit") | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined;
554
554
  validationValue?: any;
555
555
  rounded?: string | number | boolean | undefined;
556
556
  baseColor?: string | undefined;
@@ -800,7 +800,7 @@ declare const VDateInput: {
800
800
  type: vue.PropType<readonly ValidationRule[]>;
801
801
  default: () => never[];
802
802
  };
803
- validateOn: vue.PropType<("eager" | "lazy" | ("input" | "blur" | "submit" | "invalid-input") | "input lazy" | "blur lazy" | "submit lazy" | "invalid-input lazy" | "input eager" | "blur eager" | "submit eager" | "invalid-input eager" | "lazy input" | "lazy blur" | "lazy submit" | "lazy invalid-input" | "eager input" | "eager blur" | "eager submit" | "eager invalid-input") | undefined>;
803
+ validateOn: vue.PropType<"lazy" | ("input" | "blur" | "submit") | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined>;
804
804
  validationValue: null;
805
805
  density: {
806
806
  type: vue.PropType<Density>;
@@ -1014,7 +1014,7 @@ declare const VDateInput: {
1014
1014
  type: vue.PropType<readonly ValidationRule[]>;
1015
1015
  default: () => never[];
1016
1016
  };
1017
- validateOn: vue.PropType<("eager" | "lazy" | ("input" | "blur" | "submit" | "invalid-input") | "input lazy" | "blur lazy" | "submit lazy" | "invalid-input lazy" | "input eager" | "blur eager" | "submit eager" | "invalid-input eager" | "lazy input" | "lazy blur" | "lazy submit" | "lazy invalid-input" | "eager input" | "eager blur" | "eager submit" | "eager invalid-input") | undefined>;
1017
+ validateOn: vue.PropType<"lazy" | ("input" | "blur" | "submit") | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined>;
1018
1018
  validationValue: null;
1019
1019
  density: {
1020
1020
  type: vue.PropType<Density>;
@@ -9,7 +9,7 @@ import { VDivider } from "../../components/VDivider/index.mjs";
9
9
  import { makeVTextFieldProps, VTextField } from "../../components/VTextField/VTextField.mjs"; // Composables
10
10
  import { useForm } from "../../composables/form.mjs";
11
11
  import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
12
- import { computed, watchEffect } from 'vue';
12
+ import { computed, nextTick, onMounted, ref } from 'vue';
13
13
  import { clamp, genericComponent, getDecimals, omit, propsFactory, useRender } from "../../util/index.mjs"; // Types
14
14
  const makeVNumberInputProps = propsFactory({
15
15
  controlVariant: {
@@ -18,19 +18,23 @@ const makeVNumberInputProps = propsFactory({
18
18
  },
19
19
  inset: Boolean,
20
20
  hideInput: Boolean,
21
+ modelValue: {
22
+ type: Number,
23
+ default: null
24
+ },
21
25
  min: {
22
26
  type: Number,
23
- default: -Infinity
27
+ default: Number.MIN_SAFE_INTEGER
24
28
  },
25
29
  max: {
26
30
  type: Number,
27
- default: Infinity
31
+ default: Number.MAX_SAFE_INTEGER
28
32
  },
29
33
  step: {
30
34
  type: Number,
31
35
  default: 1
32
36
  },
33
- ...omit(makeVTextFieldProps(), ['appendInnerIcon', 'prependInnerIcon'])
37
+ ...omit(makeVTextFieldProps({}), ['appendInnerIcon', 'modelValue', 'prependInnerIcon'])
34
38
  }, 'VNumberInput');
35
39
  export const VNumberInput = genericComponent()({
36
40
  name: 'VNumberInput',
@@ -42,30 +46,27 @@ export const VNumberInput = genericComponent()({
42
46
  },
43
47
  setup(props, _ref) {
44
48
  let {
45
- attrs,
46
- emit,
47
49
  slots
48
50
  } = _ref;
49
- const model = useProxiedModel(props, 'modelValue');
51
+ const _model = useProxiedModel(props, 'modelValue');
52
+ const model = computed({
53
+ get: () => _model.value,
54
+ set(val) {
55
+ if (typeof val !== 'string') _model.value = val;
56
+ }
57
+ });
58
+ const vTextFieldRef = ref();
50
59
  const stepDecimals = computed(() => getDecimals(props.step));
51
- const modelDecimals = computed(() => model.value != null ? getDecimals(model.value) : 0);
60
+ const modelDecimals = computed(() => typeof model.value === 'number' ? getDecimals(model.value) : 0);
52
61
  const form = useForm();
53
62
  const controlsDisabled = computed(() => props.disabled || props.readonly || form?.isReadonly.value);
54
63
  const canIncrease = computed(() => {
55
64
  if (controlsDisabled.value) return false;
56
- if (model.value == null) return true;
57
- return model.value + props.step <= props.max;
65
+ return (model.value ?? 0) + props.step <= props.max;
58
66
  });
59
67
  const canDecrease = computed(() => {
60
68
  if (controlsDisabled.value) return false;
61
- if (model.value == null) return true;
62
- return model.value - props.step >= props.min;
63
- });
64
- watchEffect(() => {
65
- if (controlsDisabled.value) return;
66
- if (model.value != null && (model.value < props.min || model.value > props.max)) {
67
- model.value = clamp(model.value, props.min, props.max);
68
- }
69
+ return (model.value ?? 0) - props.step >= props.min;
69
70
  });
70
71
  const controlVariant = computed(() => {
71
72
  return props.hideInput ? 'stacked' : props.controlVariant;
@@ -80,11 +81,16 @@ export const VNumberInput = genericComponent()({
80
81
  const decrementSlotProps = computed(() => ({
81
82
  click: onClickDown
82
83
  }));
84
+ onMounted(() => {
85
+ if (!props.readonly && !props.disabled) {
86
+ clampModel();
87
+ }
88
+ });
83
89
  function toggleUpDown() {
84
90
  let increment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
85
91
  if (controlsDisabled.value) return;
86
92
  if (model.value == null) {
87
- model.value = 0;
93
+ model.value = clamp(0, props.min, props.max);
88
94
  return;
89
95
  }
90
96
  const decimals = Math.max(modelDecimals.value, stepDecimals.value);
@@ -102,30 +108,45 @@ export const VNumberInput = genericComponent()({
102
108
  e.stopPropagation();
103
109
  toggleUpDown(false);
104
110
  }
105
- function onKeydown(e) {
106
- if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
107
- if (['ArrowDown'].includes(e.key)) {
111
+ function onBeforeinput(e) {
112
+ if (!e.data) return;
113
+ const existingTxt = e.target?.value;
114
+ const selectionStart = e.target?.selectionStart;
115
+ const selectionEnd = e.target?.selectionEnd;
116
+ const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
117
+ // Only numbers, "-", "." are allowed
118
+ // AND "-", "." are allowed only once
119
+ // AND "-" is only allowed at the start
120
+ if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
108
121
  e.preventDefault();
109
- toggleUpDown(false);
110
- return;
111
122
  }
112
- if (['ArrowUp'].includes(e.key)) {
113
- e.preventDefault();
114
- toggleUpDown();
115
- return;
116
- }
117
-
118
- // Only numbers, +, - & . are allowed
119
- if (!/^[0-9\-+.]+$/.test(e.key)) {
123
+ }
124
+ async function onKeydown(e) {
125
+ if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
126
+ if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
120
127
  e.preventDefault();
128
+ clampModel();
129
+ // _model is controlled, so need to wait until props['modelValue'] is updated
130
+ await nextTick();
131
+ if (e.key === 'ArrowDown') {
132
+ toggleUpDown(false);
133
+ } else {
134
+ toggleUpDown();
135
+ }
121
136
  }
122
137
  }
123
- function onModelUpdate(v) {
124
- model.value = v ? +v : undefined;
125
- }
126
138
  function onControlMousedown(e) {
127
139
  e.stopPropagation();
128
140
  }
141
+ function clampModel() {
142
+ if (!vTextFieldRef.value) return;
143
+ const inputText = vTextFieldRef.value.value;
144
+ if (inputText && !isNaN(+inputText)) {
145
+ model.value = clamp(+inputText, props.min, props.max);
146
+ } else {
147
+ model.value = null;
148
+ }
149
+ }
129
150
  useRender(() => {
130
151
  const {
131
152
  modelValue: _,
@@ -210,8 +231,11 @@ export const VNumberInput = genericComponent()({
210
231
  }, null)]) : props.reverse ? _createVNode(_Fragment, null, [controlNode(), dividerNode()]) : undefined;
211
232
  const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
212
233
  return _createVNode(VTextField, _mergeProps({
234
+ "ref": vTextFieldRef,
213
235
  "modelValue": model.value,
214
- "onUpdate:modelValue": onModelUpdate,
236
+ "onUpdate:modelValue": $event => model.value = $event,
237
+ "onBeforeinput": onBeforeinput,
238
+ "onChange": clampModel,
215
239
  "onKeydown": onKeydown,
216
240
  "class": ['v-number-input', {
217
241
  'v-number-input--default': controlVariant.value === 'default',
@@ -1 +1 @@
1
- {"version":3,"file":"VNumberInput.mjs","names":["VBtn","VDefaultsProvider","VDivider","makeVTextFieldProps","VTextField","useForm","useProxiedModel","computed","watchEffect","clamp","genericComponent","getDecimals","omit","propsFactory","useRender","makeVNumberInputProps","controlVariant","type","String","default","inset","Boolean","hideInput","min","Number","Infinity","max","step","VNumberInput","name","props","emits","val","setup","_ref","attrs","emit","slots","model","stepDecimals","modelDecimals","value","form","controlsDisabled","disabled","readonly","isReadonly","canIncrease","canDecrease","incrementIcon","decrementIcon","controlNodeSize","controlNodeDefaultHeight","incrementSlotProps","click","onClickUp","decrementSlotProps","onClickDown","toggleUpDown","increment","arguments","length","undefined","decimals","Math","toFixed","e","stopPropagation","onKeydown","includes","key","ctrlKey","preventDefault","test","onModelUpdate","v","onControlMousedown","modelValue","_","textFieldProps","filterProps","incrementControlNode","_createVNode","flat","height","size","icon","decrementControlNode","decrement","controlNode","dividerNode","appendInnerControl","reverse","_Fragment","hasAppendInner","prependInnerControl","hasPrependInner","_mergeProps","class","style","_len","args","Array","_key","_len2","_key2"],"sources":["../../../src/labs/VNumberInput/VNumberInput.tsx"],"sourcesContent":["// Styles\nimport './VNumberInput.sass'\n\n// Components\nimport { VBtn } from '../../components/VBtn'\nimport { VDefaultsProvider } from '../../components/VDefaultsProvider'\nimport { VDivider } from '../../components/VDivider'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useForm } from '@/composables/form'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, watchEffect } from 'vue'\nimport { clamp, genericComponent, getDecimals, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\ntype ControlSlot = {\n click: (e: MouseEvent) => void\n}\n\ntype VNumberInputSlots = Omit<VTextFieldSlots, 'default'> & {\n increment: ControlSlot\n decrement: ControlSlot\n}\n\ntype ControlVariant = 'default' | 'stacked' | 'split'\n\nconst makeVNumberInputProps = propsFactory({\n controlVariant: {\n type: String as PropType<ControlVariant>,\n default: 'default',\n },\n inset: Boolean,\n hideInput: Boolean,\n min: {\n type: Number,\n default: -Infinity,\n },\n max: {\n type: Number,\n default: Infinity,\n },\n step: {\n type: Number,\n default: 1,\n },\n\n ...omit(makeVTextFieldProps(), ['appendInnerIcon', 'prependInnerIcon']),\n}, 'VNumberInput')\n\nexport const VNumberInput = genericComponent<VNumberInputSlots>()({\n name: 'VNumberInput',\n\n props: {\n ...makeVNumberInputProps(),\n },\n\n emits: {\n 'update:modelValue': (val: number) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n\n const stepDecimals = computed(() => getDecimals(props.step))\n const modelDecimals = computed(() => model.value != null ? getDecimals(model.value) : 0)\n\n const form = useForm()\n const controlsDisabled = computed(() => (\n props.disabled || props.readonly || form?.isReadonly.value\n ))\n\n const canIncrease = computed(() => {\n if (controlsDisabled.value) return false\n if (model.value == null) return true\n return model.value + props.step <= props.max\n })\n const canDecrease = computed(() => {\n if (controlsDisabled.value) return false\n if (model.value == null) return true\n return model.value - props.step >= props.min\n })\n\n watchEffect(() => {\n if (controlsDisabled.value) return\n if (model.value != null && (model.value < props.min || model.value > props.max)) {\n model.value = clamp(model.value, props.min, props.max)\n }\n })\n\n const controlVariant = computed(() => {\n return props.hideInput ? 'stacked' : props.controlVariant\n })\n\n const incrementIcon = computed(() => controlVariant.value === 'split' ? '$plus' : '$collapse')\n const decrementIcon = computed(() => controlVariant.value === 'split' ? '$minus' : '$expand')\n const controlNodeSize = computed(() => controlVariant.value === 'split' ? 'default' : 'small')\n const controlNodeDefaultHeight = computed(() => controlVariant.value === 'stacked' ? 'auto' : '100%')\n\n const incrementSlotProps = computed(() => ({ click: onClickUp }))\n\n const decrementSlotProps = computed(() => ({ click: onClickDown }))\n\n function toggleUpDown (increment = true) {\n if (controlsDisabled.value) return\n if (model.value == null) {\n model.value = 0\n return\n }\n\n const decimals = Math.max(modelDecimals.value, stepDecimals.value)\n if (increment) {\n if (canIncrease.value) model.value = +(((model.value + props.step).toFixed(decimals)))\n } else {\n if (canDecrease.value) model.value = +(((model.value - props.step).toFixed(decimals)))\n }\n }\n\n function onClickUp (e: MouseEvent) {\n e.stopPropagation()\n toggleUpDown()\n }\n\n function onClickDown (e: MouseEvent) {\n e.stopPropagation()\n toggleUpDown(false)\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (\n ['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) ||\n e.ctrlKey\n ) return\n\n if (['ArrowDown'].includes(e.key)) {\n e.preventDefault()\n toggleUpDown(false)\n return\n }\n if (['ArrowUp'].includes(e.key)) {\n e.preventDefault()\n toggleUpDown()\n return\n }\n\n // Only numbers, +, - & . are allowed\n if (!/^[0-9\\-+.]+$/.test(e.key)) {\n e.preventDefault()\n }\n }\n\n function onModelUpdate (v: string) {\n model.value = v ? +(v) : undefined\n }\n\n function onControlMousedown (e: MouseEvent) {\n e.stopPropagation()\n }\n\n useRender(() => {\n const { modelValue: _, ...textFieldProps } = VTextField.filterProps(props)\n\n function incrementControlNode () {\n return !slots.increment ? (\n <VBtn\n disabled={ !canIncrease.value }\n flat\n key=\"increment-btn\"\n height={ controlNodeDefaultHeight.value }\n name=\"increment-btn\"\n icon={ incrementIcon.value }\n onClick={ onClickUp }\n onMousedown={ onControlMousedown }\n size={ controlNodeSize.value }\n tabindex=\"-1\"\n />\n ) : (\n <VDefaultsProvider\n key=\"increment-defaults\"\n defaults={{\n VBtn: {\n disabled: !canIncrease.value,\n flat: true,\n height: controlNodeDefaultHeight.value,\n size: controlNodeSize.value,\n icon: incrementIcon.value,\n },\n }}\n >\n { slots.increment(incrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\n\n function decrementControlNode () {\n return !slots.decrement ? (\n <VBtn\n disabled={ !canDecrease.value }\n flat\n key=\"decrement-btn\"\n height={ controlNodeDefaultHeight.value }\n name=\"decrement-btn\"\n icon={ decrementIcon.value }\n size={ controlNodeSize.value }\n tabindex=\"-1\"\n onClick={ onClickDown }\n onMousedown={ onControlMousedown }\n />\n ) : (\n <VDefaultsProvider\n key=\"decrement-defaults\"\n defaults={{\n VBtn: {\n disabled: !canDecrease.value,\n flat: true,\n height: controlNodeDefaultHeight.value,\n size: controlNodeSize.value,\n icon: decrementIcon.value,\n },\n }}\n >\n { slots.decrement(decrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\n\n function controlNode () {\n return (\n <div class=\"v-number-input__control\">\n { decrementControlNode() }\n\n <VDivider\n vertical={ controlVariant.value !== 'stacked' }\n />\n\n { incrementControlNode() }\n </div>\n )\n }\n\n function dividerNode () {\n return !props.hideInput && !props.inset ? <VDivider vertical /> : undefined\n }\n\n const appendInnerControl =\n controlVariant.value === 'split'\n ? (\n <div class=\"v-number-input__control\">\n <VDivider vertical />\n\n { incrementControlNode() }\n </div>\n ) : (!props.reverse\n ? <>{ dividerNode() }{ controlNode() }</>\n : undefined)\n\n const hasAppendInner = slots['append-inner'] || appendInnerControl\n\n const prependInnerControl =\n controlVariant.value === 'split'\n ? (\n <div class=\"v-number-input__control\">\n { decrementControlNode() }\n\n <VDivider vertical />\n </div>\n ) : (props.reverse\n ? <>{ controlNode() }{ dividerNode() }</>\n : undefined)\n\n const hasPrependInner = slots['prepend-inner'] || prependInnerControl\n\n return (\n <VTextField\n modelValue={ model.value }\n onUpdate:modelValue={ onModelUpdate }\n onKeydown={ onKeydown }\n class={[\n 'v-number-input',\n {\n 'v-number-input--default': controlVariant.value === 'default',\n 'v-number-input--hide-input': props.hideInput,\n 'v-number-input--inset': props.inset,\n 'v-number-input--reverse': props.reverse,\n 'v-number-input--split': controlVariant.value === 'split',\n 'v-number-input--stacked': controlVariant.value === 'stacked',\n },\n props.class,\n ]}\n { ...textFieldProps }\n style={ props.style }\n inputmode=\"decimal\"\n >\n {{\n ...slots,\n 'append-inner': hasAppendInner ? (...args) => (\n <>\n { slots['append-inner']?.(...args) }\n { appendInnerControl }\n </>\n ) : undefined,\n 'prepend-inner': hasPrependInner ? (...args) => (\n <>\n { prependInnerControl }\n { slots['prepend-inner']?.(...args) }\n </>\n ) : undefined,\n }}\n </VTextField>\n )\n })\n },\n})\n\nexport type VNumberInput = InstanceType<typeof VNumberInput>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VNumberInput.mjs","names":["VBtn","VDefaultsProvider","VDivider","makeVTextFieldProps","VTextField","useForm","useProxiedModel","computed","nextTick","onMounted","ref","clamp","genericComponent","getDecimals","omit","propsFactory","useRender","makeVNumberInputProps","controlVariant","type","String","default","inset","Boolean","hideInput","modelValue","Number","min","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","step","VNumberInput","name","props","emits","val","setup","_ref","slots","_model","model","get","value","set","vTextFieldRef","stepDecimals","modelDecimals","form","controlsDisabled","disabled","readonly","isReadonly","canIncrease","canDecrease","incrementIcon","decrementIcon","controlNodeSize","controlNodeDefaultHeight","incrementSlotProps","click","onClickUp","decrementSlotProps","onClickDown","clampModel","toggleUpDown","increment","arguments","length","undefined","decimals","Math","toFixed","e","stopPropagation","onBeforeinput","data","existingTxt","target","selectionStart","selectionEnd","potentialNewInputVal","slice","test","preventDefault","onKeydown","includes","key","ctrlKey","onControlMousedown","inputText","isNaN","_","textFieldProps","filterProps","incrementControlNode","_createVNode","flat","height","size","icon","decrementControlNode","decrement","controlNode","dividerNode","appendInnerControl","reverse","_Fragment","hasAppendInner","prependInnerControl","hasPrependInner","_mergeProps","$event","class","style","_len","args","Array","_key","_len2","_key2"],"sources":["../../../src/labs/VNumberInput/VNumberInput.tsx"],"sourcesContent":["// Styles\nimport './VNumberInput.sass'\n\n// Components\nimport { VBtn } from '../../components/VBtn'\nimport { VDefaultsProvider } from '../../components/VDefaultsProvider'\nimport { VDivider } from '../../components/VDivider'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useForm } from '@/composables/form'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref } from 'vue'\nimport { clamp, genericComponent, getDecimals, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\ntype ControlSlot = {\n click: (e: MouseEvent) => void\n}\n\ntype VNumberInputSlots = Omit<VTextFieldSlots, 'default'> & {\n increment: ControlSlot\n decrement: ControlSlot\n}\n\ntype ControlVariant = 'default' | 'stacked' | 'split'\n\nconst makeVNumberInputProps = propsFactory({\n controlVariant: {\n type: String as PropType<ControlVariant>,\n default: 'default',\n },\n inset: Boolean,\n hideInput: Boolean,\n modelValue: {\n type: Number as PropType<Number | null>,\n default: null,\n },\n min: {\n type: Number,\n default: Number.MIN_SAFE_INTEGER,\n },\n max: {\n type: Number,\n default: Number.MAX_SAFE_INTEGER,\n },\n step: {\n type: Number,\n default: 1,\n },\n\n ...omit(makeVTextFieldProps({}), ['appendInnerIcon', 'modelValue', 'prependInnerIcon']),\n}, 'VNumberInput')\n\nexport const VNumberInput = genericComponent<VNumberInputSlots>()({\n name: 'VNumberInput',\n\n props: {\n ...makeVNumberInputProps(),\n },\n\n emits: {\n 'update:modelValue': (val: number) => true,\n },\n\n setup (props, { slots }) {\n const _model = useProxiedModel(props, 'modelValue')\n\n const model = computed({\n get: () => _model.value,\n set (val) {\n if (typeof val !== 'string') _model.value = val\n },\n })\n\n const vTextFieldRef = ref<VTextField | undefined>()\n\n const stepDecimals = computed(() => getDecimals(props.step))\n const modelDecimals = computed(() => typeof model.value === 'number' ? getDecimals(model.value) : 0)\n\n const form = useForm()\n const controlsDisabled = computed(() => (\n props.disabled || props.readonly || form?.isReadonly.value\n ))\n\n const canIncrease = computed(() => {\n if (controlsDisabled.value) return false\n return (model.value ?? 0) as number + props.step <= props.max\n })\n const canDecrease = computed(() => {\n if (controlsDisabled.value) return false\n return (model.value ?? 0) as number - props.step >= props.min\n })\n\n const controlVariant = computed(() => {\n return props.hideInput ? 'stacked' : props.controlVariant\n })\n\n const incrementIcon = computed(() => controlVariant.value === 'split' ? '$plus' : '$collapse')\n const decrementIcon = computed(() => controlVariant.value === 'split' ? '$minus' : '$expand')\n const controlNodeSize = computed(() => controlVariant.value === 'split' ? 'default' : 'small')\n const controlNodeDefaultHeight = computed(() => controlVariant.value === 'stacked' ? 'auto' : '100%')\n\n const incrementSlotProps = computed(() => ({ click: onClickUp }))\n\n const decrementSlotProps = computed(() => ({ click: onClickDown }))\n\n onMounted(() => {\n if (!props.readonly && !props.disabled) {\n clampModel()\n }\n })\n\n function toggleUpDown (increment = true) {\n if (controlsDisabled.value) return\n if (model.value == null) {\n model.value = clamp(0, props.min, props.max)\n return\n }\n\n const decimals = Math.max(modelDecimals.value, stepDecimals.value)\n if (increment) {\n if (canIncrease.value) model.value = +((((model.value as number) + props.step).toFixed(decimals)))\n } else {\n if (canDecrease.value) model.value = +((((model.value as number) - props.step).toFixed(decimals)))\n }\n }\n\n function onClickUp (e: MouseEvent) {\n e.stopPropagation()\n toggleUpDown()\n }\n\n function onClickDown (e: MouseEvent) {\n e.stopPropagation()\n toggleUpDown(false)\n }\n\n function onBeforeinput (e: InputEvent) {\n if (!e.data) return\n const existingTxt = (e.target as HTMLInputElement)?.value\n const selectionStart = (e.target as HTMLInputElement)?.selectionStart\n const selectionEnd = (e.target as HTMLInputElement)?.selectionEnd\n const potentialNewInputVal =\n existingTxt\n ? existingTxt.slice(0, selectionStart as number | undefined) + e.data + existingTxt.slice(selectionEnd as number | undefined)\n : e.data\n // Only numbers, \"-\", \".\" are allowed\n // AND \"-\", \".\" are allowed only once\n // AND \"-\" is only allowed at the start\n if (!/^-?(\\d+(\\.\\d*)?|(\\.\\d+)|\\d*|\\.)$/.test(potentialNewInputVal)) {\n e.preventDefault()\n }\n }\n\n async function onKeydown (e: KeyboardEvent) {\n if (\n ['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) ||\n e.ctrlKey\n ) return\n\n if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n e.preventDefault()\n clampModel()\n // _model is controlled, so need to wait until props['modelValue'] is updated\n await nextTick()\n if (e.key === 'ArrowDown') {\n toggleUpDown(false)\n } else {\n toggleUpDown()\n }\n }\n }\n\n function onControlMousedown (e: MouseEvent) {\n e.stopPropagation()\n }\n\n function clampModel () {\n if (!vTextFieldRef.value) return\n const inputText = vTextFieldRef.value.value\n if (inputText && !isNaN(+inputText)) {\n model.value = clamp(+(inputText), props.min, props.max)\n } else {\n model.value = null\n }\n }\n\n useRender(() => {\n const { modelValue: _, ...textFieldProps } = VTextField.filterProps(props)\n\n function incrementControlNode () {\n return !slots.increment ? (\n <VBtn\n disabled={ !canIncrease.value }\n flat\n key=\"increment-btn\"\n height={ controlNodeDefaultHeight.value }\n name=\"increment-btn\"\n icon={ incrementIcon.value }\n onClick={ onClickUp }\n onMousedown={ onControlMousedown }\n size={ controlNodeSize.value }\n tabindex=\"-1\"\n />\n ) : (\n <VDefaultsProvider\n key=\"increment-defaults\"\n defaults={{\n VBtn: {\n disabled: !canIncrease.value,\n flat: true,\n height: controlNodeDefaultHeight.value,\n size: controlNodeSize.value,\n icon: incrementIcon.value,\n },\n }}\n >\n { slots.increment(incrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\n\n function decrementControlNode () {\n return !slots.decrement ? (\n <VBtn\n disabled={ !canDecrease.value }\n flat\n key=\"decrement-btn\"\n height={ controlNodeDefaultHeight.value }\n name=\"decrement-btn\"\n icon={ decrementIcon.value }\n size={ controlNodeSize.value }\n tabindex=\"-1\"\n onClick={ onClickDown }\n onMousedown={ onControlMousedown }\n />\n ) : (\n <VDefaultsProvider\n key=\"decrement-defaults\"\n defaults={{\n VBtn: {\n disabled: !canDecrease.value,\n flat: true,\n height: controlNodeDefaultHeight.value,\n size: controlNodeSize.value,\n icon: decrementIcon.value,\n },\n }}\n >\n { slots.decrement(decrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\n\n function controlNode () {\n return (\n <div class=\"v-number-input__control\">\n { decrementControlNode() }\n\n <VDivider\n vertical={ controlVariant.value !== 'stacked' }\n />\n\n { incrementControlNode() }\n </div>\n )\n }\n\n function dividerNode () {\n return !props.hideInput && !props.inset ? <VDivider vertical /> : undefined\n }\n\n const appendInnerControl =\n controlVariant.value === 'split'\n ? (\n <div class=\"v-number-input__control\">\n <VDivider vertical />\n\n { incrementControlNode() }\n </div>\n ) : (!props.reverse\n ? <>{ dividerNode() }{ controlNode() }</>\n : undefined)\n\n const hasAppendInner = slots['append-inner'] || appendInnerControl\n\n const prependInnerControl =\n controlVariant.value === 'split'\n ? (\n <div class=\"v-number-input__control\">\n { decrementControlNode() }\n\n <VDivider vertical />\n </div>\n ) : (props.reverse\n ? <>{ controlNode() }{ dividerNode() }</>\n : undefined)\n\n const hasPrependInner = slots['prepend-inner'] || prependInnerControl\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n v-model={ model.value }\n onBeforeinput={ onBeforeinput }\n onChange={ clampModel }\n onKeydown={ onKeydown }\n class={[\n 'v-number-input',\n {\n 'v-number-input--default': controlVariant.value === 'default',\n 'v-number-input--hide-input': props.hideInput,\n 'v-number-input--inset': props.inset,\n 'v-number-input--reverse': props.reverse,\n 'v-number-input--split': controlVariant.value === 'split',\n 'v-number-input--stacked': controlVariant.value === 'stacked',\n },\n props.class,\n ]}\n { ...textFieldProps }\n style={ props.style }\n inputmode=\"decimal\"\n >\n {{\n ...slots,\n 'append-inner': hasAppendInner ? (...args) => (\n <>\n { slots['append-inner']?.(...args) }\n { appendInnerControl }\n </>\n ) : undefined,\n 'prepend-inner': hasPrependInner ? (...args) => (\n <>\n { prependInnerControl }\n { slots['prepend-inner']?.(...args) }\n </>\n ) : undefined,\n }}\n </VTextField>\n )\n })\n },\n})\n\nexport type VNumberInput = InstanceType<typeof VNumberInput>\n"],"mappings":"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","ignoreList":[]}