@vuetify/nightly 3.7.5-master.2024-12-12 → 3.7.5-master.2024-12-16
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/dist/json/attributes.json +2816 -2816
- package/dist/json/importMap-labs.json +32 -32
- package/dist/json/importMap.json +184 -184
- package/dist/json/web-types.json +5212 -5212
- package/dist/vuetify-labs.css +2838 -2838
- package/dist/vuetify-labs.esm.js +22 -13
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +22 -13
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +2064 -2064
- package/dist/vuetify.d.ts +69 -69
- package/dist/vuetify.esm.js +15 -9
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +15 -9
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +33 -33
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VCombobox/VCombobox.mjs +2 -1
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VSelect/VSelect.mjs +2 -1
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VVirtualScroll/VVirtualScroll.mjs +1 -1
- package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
- package/lib/composables/nested/nested.mjs +4 -2
- package/lib/composables/nested/nested.mjs.map +1 -1
- package/lib/composables/virtual.mjs +3 -2
- package/lib/composables/virtual.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/index.d.mts +69 -69
- package/lib/labs/VNumberInput/VNumberInput.mjs +7 -4
- package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.d.mts
CHANGED
@@ -487,47 +487,47 @@ declare module 'vue' {
|
|
487
487
|
}
|
488
488
|
export interface GlobalComponents {
|
489
489
|
VApp: typeof import('vuetify/components')['VApp']
|
490
|
-
VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
|
491
|
-
VAppBar: typeof import('vuetify/components')['VAppBar']
|
492
|
-
VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
|
493
|
-
VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
|
494
490
|
VAlert: typeof import('vuetify/components')['VAlert']
|
495
491
|
VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
|
496
|
-
|
492
|
+
VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
|
497
493
|
VAvatar: typeof import('vuetify/components')['VAvatar']
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
|
494
|
+
VBadge: typeof import('vuetify/components')['VBadge']
|
495
|
+
VBtn: typeof import('vuetify/components')['VBtn']
|
496
|
+
VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
|
502
497
|
VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
|
503
498
|
VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
|
504
499
|
VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
|
505
|
-
|
500
|
+
VBanner: typeof import('vuetify/components')['VBanner']
|
501
|
+
VBannerActions: typeof import('vuetify/components')['VBannerActions']
|
502
|
+
VBannerText: typeof import('vuetify/components')['VBannerText']
|
506
503
|
VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
|
507
|
-
VBtn: typeof import('vuetify/components')['VBtn']
|
508
|
-
VCheckbox: typeof import('vuetify/components')['VCheckbox']
|
509
|
-
VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
|
510
|
-
VChipGroup: typeof import('vuetify/components')['VChipGroup']
|
511
|
-
VCarousel: typeof import('vuetify/components')['VCarousel']
|
512
|
-
VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
|
513
|
-
VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
|
514
504
|
VCard: typeof import('vuetify/components')['VCard']
|
515
505
|
VCardActions: typeof import('vuetify/components')['VCardActions']
|
516
506
|
VCardItem: typeof import('vuetify/components')['VCardItem']
|
517
507
|
VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
|
518
508
|
VCardText: typeof import('vuetify/components')['VCardText']
|
519
509
|
VCardTitle: typeof import('vuetify/components')['VCardTitle']
|
510
|
+
VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
|
511
|
+
VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
|
520
512
|
VChip: typeof import('vuetify/components')['VChip']
|
521
|
-
|
513
|
+
VCheckbox: typeof import('vuetify/components')['VCheckbox']
|
514
|
+
VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
|
515
|
+
VChipGroup: typeof import('vuetify/components')['VChipGroup']
|
516
|
+
VAppBar: typeof import('vuetify/components')['VAppBar']
|
517
|
+
VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
|
518
|
+
VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
|
519
|
+
VCarousel: typeof import('vuetify/components')['VCarousel']
|
520
|
+
VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
|
522
521
|
VColorPicker: typeof import('vuetify/components')['VColorPicker']
|
522
|
+
VCounter: typeof import('vuetify/components')['VCounter']
|
523
|
+
VCode: typeof import('vuetify/components')['VCode']
|
523
524
|
VDatePicker: typeof import('vuetify/components')['VDatePicker']
|
524
525
|
VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
|
525
526
|
VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
|
526
527
|
VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
|
527
528
|
VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
|
528
529
|
VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
|
529
|
-
|
530
|
-
VCounter: typeof import('vuetify/components')['VCounter']
|
530
|
+
VCombobox: typeof import('vuetify/components')['VCombobox']
|
531
531
|
VDataTable: typeof import('vuetify/components')['VDataTable']
|
532
532
|
VDataTableHeaders: typeof import('vuetify/components')['VDataTableHeaders']
|
533
533
|
VDataTableFooter: typeof import('vuetify/components')['VDataTableFooter']
|
@@ -536,28 +536,28 @@ declare module 'vue' {
|
|
536
536
|
VDataTableVirtual: typeof import('vuetify/components')['VDataTableVirtual']
|
537
537
|
VDataTableServer: typeof import('vuetify/components')['VDataTableServer']
|
538
538
|
VDialog: typeof import('vuetify/components')['VDialog']
|
539
|
-
VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
|
540
|
-
VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
|
541
|
-
VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
|
542
|
-
VExpansionPanelTitle: typeof import('vuetify/components')['VExpansionPanelTitle']
|
543
|
-
VDivider: typeof import('vuetify/components')['VDivider']
|
544
539
|
VEmptyState: typeof import('vuetify/components')['VEmptyState']
|
545
|
-
VField: typeof import('vuetify/components')['VField']
|
546
|
-
VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
|
547
540
|
VFab: typeof import('vuetify/components')['VFab']
|
548
|
-
|
549
|
-
VImg: typeof import('vuetify/components')['VImg']
|
541
|
+
VDivider: typeof import('vuetify/components')['VDivider']
|
550
542
|
VFileInput: typeof import('vuetify/components')['VFileInput']
|
551
|
-
|
543
|
+
VField: typeof import('vuetify/components')['VField']
|
544
|
+
VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
|
552
545
|
VIcon: typeof import('vuetify/components')['VIcon']
|
553
546
|
VComponentIcon: typeof import('vuetify/components')['VComponentIcon']
|
554
547
|
VSvgIcon: typeof import('vuetify/components')['VSvgIcon']
|
555
548
|
VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
|
556
549
|
VClassIcon: typeof import('vuetify/components')['VClassIcon']
|
550
|
+
VFooter: typeof import('vuetify/components')['VFooter']
|
551
|
+
VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
|
552
|
+
VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
|
553
|
+
VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
|
554
|
+
VExpansionPanelTitle: typeof import('vuetify/components')['VExpansionPanelTitle']
|
555
|
+
VImg: typeof import('vuetify/components')['VImg']
|
556
|
+
VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
|
557
557
|
VInput: typeof import('vuetify/components')['VInput']
|
558
558
|
VItemGroup: typeof import('vuetify/components')['VItemGroup']
|
559
559
|
VItem: typeof import('vuetify/components')['VItem']
|
560
|
-
|
560
|
+
VLabel: typeof import('vuetify/components')['VLabel']
|
561
561
|
VList: typeof import('vuetify/components')['VList']
|
562
562
|
VListGroup: typeof import('vuetify/components')['VListGroup']
|
563
563
|
VListImg: typeof import('vuetify/components')['VListImg']
|
@@ -567,55 +567,54 @@ declare module 'vue' {
|
|
567
567
|
VListItemSubtitle: typeof import('vuetify/components')['VListItemSubtitle']
|
568
568
|
VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
|
569
569
|
VListSubheader: typeof import('vuetify/components')['VListSubheader']
|
570
|
-
|
571
|
-
VLabel: typeof import('vuetify/components')['VLabel']
|
572
|
-
VMessages: typeof import('vuetify/components')['VMessages']
|
570
|
+
VKbd: typeof import('vuetify/components')['VKbd']
|
573
571
|
VMenu: typeof import('vuetify/components')['VMenu']
|
574
|
-
|
572
|
+
VMain: typeof import('vuetify/components')['VMain']
|
575
573
|
VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
|
574
|
+
VOtpInput: typeof import('vuetify/components')['VOtpInput']
|
575
|
+
VMessages: typeof import('vuetify/components')['VMessages']
|
576
|
+
VOverlay: typeof import('vuetify/components')['VOverlay']
|
576
577
|
VPagination: typeof import('vuetify/components')['VPagination']
|
577
578
|
VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
|
578
|
-
|
579
|
-
VOverlay: typeof import('vuetify/components')['VOverlay']
|
579
|
+
VRating: typeof import('vuetify/components')['VRating']
|
580
580
|
VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
|
581
|
-
VSheet: typeof import('vuetify/components')['VSheet']
|
582
581
|
VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
|
583
|
-
VRating: typeof import('vuetify/components')['VRating']
|
584
|
-
VSelect: typeof import('vuetify/components')['VSelect']
|
585
|
-
VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
|
586
582
|
VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
|
587
583
|
VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
|
588
|
-
|
589
|
-
|
590
|
-
VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
|
584
|
+
VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
|
585
|
+
VSheet: typeof import('vuetify/components')['VSheet']
|
591
586
|
VSlider: typeof import('vuetify/components')['VSlider']
|
592
|
-
|
587
|
+
VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
|
588
|
+
VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
|
589
|
+
VSelect: typeof import('vuetify/components')['VSelect']
|
593
590
|
VStepper: typeof import('vuetify/components')['VStepper']
|
594
591
|
VStepperActions: typeof import('vuetify/components')['VStepperActions']
|
595
592
|
VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
|
596
593
|
VStepperItem: typeof import('vuetify/components')['VStepperItem']
|
597
594
|
VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
|
598
595
|
VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
|
596
|
+
VTab: typeof import('vuetify/components')['VTab']
|
597
|
+
VTabs: typeof import('vuetify/components')['VTabs']
|
598
|
+
VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
|
599
|
+
VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
|
600
|
+
VSwitch: typeof import('vuetify/components')['VSwitch']
|
601
|
+
VSnackbar: typeof import('vuetify/components')['VSnackbar']
|
599
602
|
VTable: typeof import('vuetify/components')['VTable']
|
603
|
+
VTextarea: typeof import('vuetify/components')['VTextarea']
|
604
|
+
VTooltip: typeof import('vuetify/components')['VTooltip']
|
605
|
+
VSystemBar: typeof import('vuetify/components')['VSystemBar']
|
600
606
|
VTextField: typeof import('vuetify/components')['VTextField']
|
601
607
|
VToolbar: typeof import('vuetify/components')['VToolbar']
|
602
608
|
VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
|
603
609
|
VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
|
604
|
-
VTextarea: typeof import('vuetify/components')['VTextarea']
|
605
|
-
VTab: typeof import('vuetify/components')['VTab']
|
606
|
-
VTabs: typeof import('vuetify/components')['VTabs']
|
607
|
-
VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
|
608
|
-
VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
|
609
610
|
VTimeline: typeof import('vuetify/components')['VTimeline']
|
610
611
|
VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
|
611
|
-
VTooltip: typeof import('vuetify/components')['VTooltip']
|
612
612
|
VWindow: typeof import('vuetify/components')['VWindow']
|
613
613
|
VWindowItem: typeof import('vuetify/components')['VWindowItem']
|
614
|
-
VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
|
615
614
|
VDataIterator: typeof import('vuetify/components')['VDataIterator']
|
615
|
+
VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
|
616
616
|
VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
|
617
617
|
VForm: typeof import('vuetify/components')['VForm']
|
618
|
-
VHover: typeof import('vuetify/components')['VHover']
|
619
618
|
VContainer: typeof import('vuetify/components')['VContainer']
|
620
619
|
VCol: typeof import('vuetify/components')['VCol']
|
621
620
|
VRow: typeof import('vuetify/components')['VRow']
|
@@ -624,16 +623,17 @@ declare module 'vue' {
|
|
624
623
|
VLayout: typeof import('vuetify/components')['VLayout']
|
625
624
|
VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
|
626
625
|
VLocaleProvider: typeof import('vuetify/components')['VLocaleProvider']
|
627
|
-
|
626
|
+
VHover: typeof import('vuetify/components')['VHover']
|
628
627
|
VParallax: typeof import('vuetify/components')['VParallax']
|
628
|
+
VNoSsr: typeof import('vuetify/components')['VNoSsr']
|
629
629
|
VRadio: typeof import('vuetify/components')['VRadio']
|
630
|
-
VResponsive: typeof import('vuetify/components')['VResponsive']
|
631
630
|
VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
|
632
|
-
|
631
|
+
VResponsive: typeof import('vuetify/components')['VResponsive']
|
633
632
|
VSpeedDial: typeof import('vuetify/components')['VSpeedDial']
|
633
|
+
VSparkline: typeof import('vuetify/components')['VSparkline']
|
634
634
|
VThemeProvider: typeof import('vuetify/components')['VThemeProvider']
|
635
|
-
VVirtualScroll: typeof import('vuetify/components')['VVirtualScroll']
|
636
635
|
VValidation: typeof import('vuetify/components')['VValidation']
|
636
|
+
VVirtualScroll: typeof import('vuetify/components')['VVirtualScroll']
|
637
637
|
VFabTransition: typeof import('vuetify/components')['VFabTransition']
|
638
638
|
VDialogBottomTransition: typeof import('vuetify/components')['VDialogBottomTransition']
|
639
639
|
VDialogTopTransition: typeof import('vuetify/components')['VDialogTopTransition']
|
@@ -650,28 +650,28 @@ declare module 'vue' {
|
|
650
650
|
VExpandTransition: typeof import('vuetify/components')['VExpandTransition']
|
651
651
|
VExpandXTransition: typeof import('vuetify/components')['VExpandXTransition']
|
652
652
|
VDialogTransition: typeof import('vuetify/components')['VDialogTransition']
|
653
|
+
VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
|
654
|
+
VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
|
655
|
+
VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
|
656
|
+
VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
|
657
|
+
VPicker: typeof import('vuetify/labs/components')['VPicker']
|
658
|
+
VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
|
659
|
+
VFileUpload: typeof import('vuetify/labs/components')['VFileUpload']
|
660
|
+
VFileUploadItem: typeof import('vuetify/labs/components')['VFileUploadItem']
|
661
|
+
VTreeview: typeof import('vuetify/labs/components')['VTreeview']
|
662
|
+
VTreeviewItem: typeof import('vuetify/labs/components')['VTreeviewItem']
|
663
|
+
VTreeviewGroup: typeof import('vuetify/labs/components')['VTreeviewGroup']
|
653
664
|
VCalendar: typeof import('vuetify/labs/components')['VCalendar']
|
654
665
|
VCalendarDay: typeof import('vuetify/labs/components')['VCalendarDay']
|
655
666
|
VCalendarHeader: typeof import('vuetify/labs/components')['VCalendarHeader']
|
656
667
|
VCalendarInterval: typeof import('vuetify/labs/components')['VCalendarInterval']
|
657
668
|
VCalendarIntervalEvent: typeof import('vuetify/labs/components')['VCalendarIntervalEvent']
|
658
669
|
VCalendarMonthDay: typeof import('vuetify/labs/components')['VCalendarMonthDay']
|
659
|
-
VPicker: typeof import('vuetify/labs/components')['VPicker']
|
660
|
-
VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
|
661
|
-
VTreeview: typeof import('vuetify/labs/components')['VTreeview']
|
662
|
-
VTreeviewItem: typeof import('vuetify/labs/components')['VTreeviewItem']
|
663
|
-
VTreeviewGroup: typeof import('vuetify/labs/components')['VTreeviewGroup']
|
664
|
-
VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
|
665
|
-
VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
|
666
|
-
VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
|
667
|
-
VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
|
668
|
-
VFileUpload: typeof import('vuetify/labs/components')['VFileUpload']
|
669
|
-
VFileUploadItem: typeof import('vuetify/labs/components')['VFileUploadItem']
|
670
670
|
VTimePicker: typeof import('vuetify/labs/components')['VTimePicker']
|
671
671
|
VTimePickerClock: typeof import('vuetify/labs/components')['VTimePickerClock']
|
672
672
|
VTimePickerControls: typeof import('vuetify/labs/components')['VTimePickerControls']
|
673
673
|
VDateInput: typeof import('vuetify/labs/components')['VDateInput']
|
674
|
-
VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
|
675
674
|
VSnackbarQueue: typeof import('vuetify/labs/components')['VSnackbarQueue']
|
675
|
+
VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
|
676
676
|
}
|
677
677
|
}
|
@@ -52,13 +52,16 @@ export const VNumberInput = genericComponent()({
|
|
52
52
|
const _model = useProxiedModel(props, 'modelValue');
|
53
53
|
const model = computed({
|
54
54
|
get: () => _model.value,
|
55
|
+
// model.value could be empty string from VTextField
|
56
|
+
// but _model.value should be eventually kept in type Number | null
|
55
57
|
set(val) {
|
56
|
-
if (val === null) {
|
58
|
+
if (val === null || val === '') {
|
57
59
|
_model.value = null;
|
58
60
|
return;
|
59
61
|
}
|
60
|
-
|
61
|
-
|
62
|
+
const value = Number(val);
|
63
|
+
if (!isNaN(value) && value <= props.max && value >= props.min) {
|
64
|
+
_model.value = value;
|
62
65
|
}
|
63
66
|
}
|
64
67
|
});
|
@@ -231,7 +234,7 @@ export const VNumberInput = genericComponent()({
|
|
231
234
|
"class": "v-number-input__control"
|
232
235
|
}, [_createVNode(VDivider, {
|
233
236
|
"vertical": true
|
234
|
-
}, null), incrementControlNode()]) :
|
237
|
+
}, null), incrementControlNode()]) : props.reverse ? undefined : _createVNode(_Fragment, null, [dividerNode(), controlNode()]);
|
235
238
|
const hasAppendInner = slots['append-inner'] || appendInnerControl;
|
236
239
|
const prependInnerControl = controlVariant.value === 'split' ? _createVNode("div", {
|
237
240
|
"class": "v-number-input__control"
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"VNumberInput.mjs","names":["VBtn","VDefaultsProvider","VDivider","makeVTextFieldProps","VTextField","useForm","forwardRefs","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","isNaN","vTextFieldRef","stepDecimals","modelDecimals","form","controlsDisabled","isDisabled","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","_","textFieldProps","filterProps","incrementControlNode","_createVNode","disabled","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 { forwardRefs } from '@/composables/forwardRefs'\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 (val === null) {\n _model.value = null\n return\n }\n\n if (!isNaN(+val) && +val <= props.max && +val >= props.min) {\n _model.value = +val\n }\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(props)\n const controlsDisabled = computed(() => (\n form.isDisabled.value || 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 (!controlsDisabled.value) {\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 data-testid=\"increment\"\n aria-hidden=\"true\"\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 data-testid=\"decrement\"\n aria-hidden=\"true\"\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 return forwardRefs({}, vTextFieldRef)\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","forwardRefs","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","isNaN","vTextFieldRef","stepDecimals","modelDecimals","form","controlsDisabled","isDisabled","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","_","textFieldProps","filterProps","incrementControlNode","_createVNode","disabled","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 { forwardRefs } from '@/composables/forwardRefs'\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 // model.value could be empty string from VTextField\n // but _model.value should be eventually kept in type Number | null\n set (val: Number | null | string) {\n if (val === null || val === '') {\n _model.value = null\n return\n }\n\n const value = Number(val)\n if (!isNaN(value) && value <= props.max && value >= props.min) {\n _model.value = value\n }\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(props)\n const controlsDisabled = computed(() => (\n form.isDisabled.value || 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 (!controlsDisabled.value) {\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 data-testid=\"increment\"\n aria-hidden=\"true\"\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 data-testid=\"decrement\"\n aria-hidden=\"true\"\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 ? undefined\n : <>{ dividerNode() }{ controlNode() }</>)\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 return forwardRefs({}, vTextFieldRef)\n },\n})\n\nexport type VNumberInput = InstanceType<typeof VNumberInput>\n"],"mappings":"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","ignoreList":[]}
|