vuetify 3.6.3 → 3.6.5
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/_component-variables-labs.sass +1 -0
- package/dist/json/attributes.json +489 -61
- package/dist/json/importMap-labs.json +30 -18
- package/dist/json/importMap.json +168 -168
- package/dist/json/tags.json +123 -1
- package/dist/json/web-types.json +1915 -198
- package/dist/vuetify-labs.css +3151 -2738
- package/dist/vuetify-labs.d.ts +3424 -1434
- package/dist/vuetify-labs.esm.js +483 -173
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +482 -172
- package/dist/vuetify-labs.min.css +3 -3
- package/dist/vuetify.css +957 -616
- package/dist/vuetify.d.ts +1451 -1380
- package/dist/vuetify.esm.js +171 -99
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +170 -98
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +3 -3
- package/dist/vuetify.min.js +982 -978
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +3 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.mts +187 -158
- package/lib/components/VAvatar/VAvatar.css +3 -1
- package/lib/components/VBanner/index.d.mts +11 -11
- package/lib/components/VBottomSheet/index.d.mts +42 -42
- package/lib/components/VBtn/VBtn.css +3 -1
- package/lib/components/VBtn/index.d.mts +2 -0
- package/lib/components/VCard/VCard.css +3 -1
- package/lib/components/VCarousel/index.d.mts +6 -6
- package/lib/components/VChip/VChip.css +3 -1
- package/lib/components/VChipGroup/index.d.mts +11 -11
- package/lib/components/VColorPicker/VColorPickerCanvas.mjs +1 -1
- package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
- package/lib/components/VCombobox/index.d.mts +187 -158
- package/lib/components/VDataIterator/index.d.mts +1 -1
- package/lib/components/VDataTable/VDataTable.css +1 -1
- package/lib/components/VDataTable/VDataTable.mjs +6 -2
- package/lib/components/VDataTable/VDataTable.mjs.map +1 -1
- package/lib/components/VDataTable/VDataTable.sass +2 -1
- package/lib/components/VDataTable/VDataTableHeaders.mjs +1 -1
- package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
- package/lib/components/VDataTable/VDataTableServer.mjs +3 -2
- package/lib/components/VDataTable/VDataTableServer.mjs.map +1 -1
- package/lib/components/VDataTable/VDataTableVirtual.mjs +3 -1
- package/lib/components/VDataTable/VDataTableVirtual.mjs.map +1 -1
- package/lib/components/VDataTable/composables/select.mjs +2 -1
- package/lib/components/VDataTable/composables/select.mjs.map +1 -1
- package/lib/components/VDataTable/index.d.mts +130 -71
- package/lib/components/VDatePicker/VDatePickerYears.mjs +4 -4
- package/lib/components/VDatePicker/VDatePickerYears.mjs.map +1 -1
- package/lib/components/VDialog/index.d.mts +126 -126
- package/lib/components/VExpansionPanel/VExpansionPanel.mjs +3 -1
- package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanels.mjs +15 -4
- package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
- package/lib/components/VExpansionPanel/index.d.mts +82 -27
- package/lib/components/VFileInput/VFileInput.mjs +2 -2
- package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
- package/lib/components/VFileInput/index.d.mts +9 -9
- package/lib/components/VImg/index.d.mts +6 -6
- package/lib/components/VInfiniteScroll/VInfiniteScroll.mjs +1 -1
- package/lib/components/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -1
- package/lib/components/VList/VList.mjs.map +1 -1
- package/lib/components/VList/VListItem.css +3 -1
- package/lib/components/VList/VListItem.mjs +3 -2
- package/lib/components/VList/VListItem.mjs.map +1 -1
- package/lib/components/VList/index.d.mts +76 -52
- package/lib/components/VMenu/index.d.mts +126 -126
- package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +3 -1
- package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
- package/lib/components/VNavigationDrawer/index.d.mts +19 -13
- package/lib/components/VOverlay/VOverlay.mjs +2 -5
- package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
- package/lib/components/VOverlay/index.d.mts +42 -42
- package/lib/components/VOverlay/useActivator.mjs +5 -5
- package/lib/components/VOverlay/useActivator.mjs.map +1 -1
- package/lib/components/VResponsive/VResponsive.mjs +1 -1
- package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
- package/lib/components/VResponsive/index.d.mts +6 -6
- package/lib/components/VSelect/index.d.mts +187 -158
- package/lib/components/VSheet/VSheet.css +1 -1
- package/lib/components/VSheet/_variables.scss +1 -1
- package/lib/components/VSlideGroup/VSlideGroup.mjs +25 -25
- package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
- package/lib/components/VSlideGroup/index.d.mts +13 -11
- package/lib/components/VSlider/VSliderThumb.css +5 -0
- package/lib/components/VSlider/VSliderThumb.sass +3 -0
- package/lib/components/VSlider/VSliderTrack.css +15 -0
- package/lib/components/VSlider/VSliderTrack.sass +9 -0
- package/lib/components/VSnackbar/VSnackbar.css +3 -1
- package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
- package/lib/components/VSnackbar/index.d.mts +126 -126
- package/lib/components/VSpeedDial/index.d.mts +42 -42
- package/lib/components/VStepper/VStepper.mjs +17 -8
- package/lib/components/VStepper/VStepper.mjs.map +1 -1
- package/lib/components/VStepper/VStepperItem.css +47 -0
- package/lib/components/VStepper/VStepperItem.mjs +10 -5
- package/lib/components/VStepper/VStepperItem.mjs.map +1 -1
- package/lib/components/VStepper/VStepperItem.sass +18 -0
- package/lib/components/VStepper/VStepperWindow.mjs +2 -1
- package/lib/components/VStepper/VStepperWindow.mjs.map +1 -1
- package/lib/components/VStepper/VStepperWindowItem.mjs +2 -1
- package/lib/components/VStepper/VStepperWindowItem.mjs.map +1 -1
- package/lib/components/VStepper/index.d.mts +1 -1
- package/lib/components/VTabs/VTabs.mjs +8 -3
- package/lib/components/VTabs/VTabs.mjs.map +1 -1
- package/lib/components/VTabs/VTabsWindow.mjs +2 -1
- package/lib/components/VTabs/VTabsWindow.mjs.map +1 -1
- package/lib/components/VTabs/index.d.mts +13 -11
- package/lib/components/VToolbar/VToolbar.css +5 -5
- package/lib/components/VToolbar/_variables.scss +3 -3
- package/lib/components/VTooltip/index.d.mts +126 -126
- package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
- package/lib/components/VWindow/index.d.mts +2 -0
- package/lib/components/index.d.mts +1393 -1325
- package/lib/composables/component.mjs +1 -1
- package/lib/composables/component.mjs.map +1 -1
- package/lib/composables/display.mjs +1 -1
- package/lib/composables/display.mjs.map +1 -1
- package/lib/composables/group.mjs +8 -0
- package/lib/composables/group.mjs.map +1 -1
- package/lib/composables/nested/activeStrategies.mjs +16 -10
- package/lib/composables/nested/activeStrategies.mjs.map +1 -1
- package/lib/composables/nested/nested.mjs +7 -5
- package/lib/composables/nested/nested.mjs.map +1 -1
- package/lib/composables/resizeObserver.mjs +5 -5
- package/lib/composables/resizeObserver.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/index.d.mts +58 -55
- package/lib/labs/VCalendar/VCalendar.css +5 -1
- package/lib/labs/VCalendar/VCalendar.sass +3 -2
- package/lib/labs/VCalendar/_variables.scss +8 -0
- package/lib/labs/VNumberInput/VNumberInput.mjs +57 -81
- package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
- package/lib/labs/VNumberInput/index.d.mts +402 -34
- package/lib/labs/VSnackbarQueue/index.d.mts +138 -138
- package/lib/labs/VStepperVertical/VStepperVertical.mjs +106 -0
- package/lib/labs/VStepperVertical/VStepperVertical.mjs.map +1 -0
- package/lib/labs/VStepperVertical/VStepperVerticalActions.mjs +38 -0
- package/lib/labs/VStepperVertical/VStepperVerticalActions.mjs.map +1 -0
- package/lib/labs/VStepperVertical/VStepperVerticalItem.css +69 -0
- package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs +134 -0
- package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs.map +1 -0
- package/lib/labs/VStepperVertical/VStepperVerticalItem.sass +74 -0
- package/lib/labs/VStepperVertical/_variables.scss +3 -0
- package/lib/labs/VStepperVertical/index.d.mts +1590 -0
- package/lib/labs/VStepperVertical/index.mjs +4 -0
- package/lib/labs/VStepperVertical/index.mjs.map +1 -0
- package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
- package/lib/labs/VTreeview/index.d.mts +88 -64
- package/lib/labs/components.d.mts +2303 -339
- package/lib/labs/components.mjs +1 -0
- package/lib/labs/components.mjs.map +1 -1
- package/lib/styles/generic/_colors.scss +1 -0
- package/lib/styles/main.css +260 -0
- package/lib/styles/tools/_variant.sass +3 -1
- package/lib/util/helpers.mjs +16 -0
- package/lib/util/helpers.mjs.map +1 -1
- package/package.json +3 -3
package/lib/index.d.mts
CHANGED
|
@@ -493,48 +493,42 @@ declare module '@vue/runtime-core' {
|
|
|
493
493
|
}
|
|
494
494
|
|
|
495
495
|
export interface GlobalComponents {
|
|
496
|
-
VApp: typeof import('vuetify/components')['VApp']
|
|
497
496
|
VAppBar: typeof import('vuetify/components')['VAppBar']
|
|
498
497
|
VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
|
|
499
498
|
VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
|
|
499
|
+
VApp: typeof import('vuetify/components')['VApp']
|
|
500
|
+
VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
|
|
501
|
+
VAvatar: typeof import('vuetify/components')['VAvatar']
|
|
500
502
|
VAlert: typeof import('vuetify/components')['VAlert']
|
|
501
503
|
VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
|
|
502
|
-
|
|
503
|
-
|
|
504
|
+
VBadge: typeof import('vuetify/components')['VBadge']
|
|
505
|
+
VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
|
|
504
506
|
VBanner: typeof import('vuetify/components')['VBanner']
|
|
505
507
|
VBannerActions: typeof import('vuetify/components')['VBannerActions']
|
|
506
508
|
VBannerText: typeof import('vuetify/components')['VBannerText']
|
|
507
509
|
VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
|
|
508
|
-
VBadge: typeof import('vuetify/components')['VBadge']
|
|
509
|
-
VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
|
|
510
|
-
VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
|
|
511
|
-
VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
|
|
512
|
-
VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
|
|
513
|
-
VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
|
|
514
510
|
VBtn: typeof import('vuetify/components')['VBtn']
|
|
515
|
-
VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
|
|
516
|
-
VChip: typeof import('vuetify/components')['VChip']
|
|
517
|
-
VCarousel: typeof import('vuetify/components')['VCarousel']
|
|
518
|
-
VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
|
|
519
511
|
VCard: typeof import('vuetify/components')['VCard']
|
|
520
512
|
VCardActions: typeof import('vuetify/components')['VCardActions']
|
|
521
513
|
VCardItem: typeof import('vuetify/components')['VCardItem']
|
|
522
514
|
VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
|
|
523
515
|
VCardText: typeof import('vuetify/components')['VCardText']
|
|
524
516
|
VCardTitle: typeof import('vuetify/components')['VCardTitle']
|
|
517
|
+
VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
|
|
518
|
+
VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
|
|
519
|
+
VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
|
|
520
|
+
VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
|
|
521
|
+
VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
|
|
525
522
|
VCheckbox: typeof import('vuetify/components')['VCheckbox']
|
|
526
523
|
VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
|
|
527
|
-
|
|
524
|
+
VCarousel: typeof import('vuetify/components')['VCarousel']
|
|
525
|
+
VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
|
|
528
526
|
VChipGroup: typeof import('vuetify/components')['VChipGroup']
|
|
527
|
+
VChip: typeof import('vuetify/components')['VChip']
|
|
529
528
|
VColorPicker: typeof import('vuetify/components')['VColorPicker']
|
|
530
|
-
|
|
529
|
+
VCode: typeof import('vuetify/components')['VCode']
|
|
531
530
|
VCounter: typeof import('vuetify/components')['VCounter']
|
|
532
|
-
|
|
533
|
-
VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
|
|
534
|
-
VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
|
|
535
|
-
VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
|
|
536
|
-
VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
|
|
537
|
-
VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
|
|
531
|
+
VCombobox: typeof import('vuetify/components')['VCombobox']
|
|
538
532
|
VDataTable: typeof import('vuetify/components')['VDataTable']
|
|
539
533
|
VDataTableHeaders: typeof import('vuetify/components')['VDataTableHeaders']
|
|
540
534
|
VDataTableFooter: typeof import('vuetify/components')['VDataTableFooter']
|
|
@@ -543,30 +537,33 @@ declare module '@vue/runtime-core' {
|
|
|
543
537
|
VDataTableVirtual: typeof import('vuetify/components')['VDataTableVirtual']
|
|
544
538
|
VDataTableServer: typeof import('vuetify/components')['VDataTableServer']
|
|
545
539
|
VDialog: typeof import('vuetify/components')['VDialog']
|
|
540
|
+
VDatePicker: typeof import('vuetify/components')['VDatePicker']
|
|
541
|
+
VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
|
|
542
|
+
VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
|
|
543
|
+
VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
|
|
544
|
+
VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
|
|
545
|
+
VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
|
|
546
546
|
VDivider: typeof import('vuetify/components')['VDivider']
|
|
547
|
+
VEmptyState: typeof import('vuetify/components')['VEmptyState']
|
|
548
|
+
VFooter: typeof import('vuetify/components')['VFooter']
|
|
549
|
+
VFab: typeof import('vuetify/components')['VFab']
|
|
547
550
|
VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
|
|
548
551
|
VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
|
|
549
552
|
VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
|
|
550
553
|
VExpansionPanelTitle: typeof import('vuetify/components')['VExpansionPanelTitle']
|
|
551
|
-
|
|
554
|
+
VFileInput: typeof import('vuetify/components')['VFileInput']
|
|
552
555
|
VField: typeof import('vuetify/components')['VField']
|
|
553
556
|
VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
|
|
554
|
-
|
|
555
|
-
VFooter: typeof import('vuetify/components')['VFooter']
|
|
557
|
+
VImg: typeof import('vuetify/components')['VImg']
|
|
556
558
|
VIcon: typeof import('vuetify/components')['VIcon']
|
|
557
559
|
VComponentIcon: typeof import('vuetify/components')['VComponentIcon']
|
|
558
560
|
VSvgIcon: typeof import('vuetify/components')['VSvgIcon']
|
|
559
561
|
VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
|
|
560
562
|
VClassIcon: typeof import('vuetify/components')['VClassIcon']
|
|
561
|
-
|
|
563
|
+
VInput: typeof import('vuetify/components')['VInput']
|
|
562
564
|
VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
|
|
563
|
-
VImg: typeof import('vuetify/components')['VImg']
|
|
564
565
|
VKbd: typeof import('vuetify/components')['VKbd']
|
|
565
|
-
VInput: typeof import('vuetify/components')['VInput']
|
|
566
566
|
VLabel: typeof import('vuetify/components')['VLabel']
|
|
567
|
-
VItemGroup: typeof import('vuetify/components')['VItemGroup']
|
|
568
|
-
VItem: typeof import('vuetify/components')['VItem']
|
|
569
|
-
VMain: typeof import('vuetify/components')['VMain']
|
|
570
567
|
VList: typeof import('vuetify/components')['VList']
|
|
571
568
|
VListGroup: typeof import('vuetify/components')['VListGroup']
|
|
572
569
|
VListImg: typeof import('vuetify/components')['VListImg']
|
|
@@ -576,50 +573,53 @@ declare module '@vue/runtime-core' {
|
|
|
576
573
|
VListItemSubtitle: typeof import('vuetify/components')['VListItemSubtitle']
|
|
577
574
|
VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
|
|
578
575
|
VListSubheader: typeof import('vuetify/components')['VListSubheader']
|
|
579
|
-
|
|
576
|
+
VItemGroup: typeof import('vuetify/components')['VItemGroup']
|
|
577
|
+
VItem: typeof import('vuetify/components')['VItem']
|
|
580
578
|
VMenu: typeof import('vuetify/components')['VMenu']
|
|
581
|
-
|
|
579
|
+
VMain: typeof import('vuetify/components')['VMain']
|
|
582
580
|
VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
|
|
581
|
+
VOtpInput: typeof import('vuetify/components')['VOtpInput']
|
|
582
|
+
VMessages: typeof import('vuetify/components')['VMessages']
|
|
583
583
|
VPagination: typeof import('vuetify/components')['VPagination']
|
|
584
584
|
VOverlay: typeof import('vuetify/components')['VOverlay']
|
|
585
|
-
VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
|
|
586
585
|
VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
|
|
587
|
-
|
|
586
|
+
VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
|
|
588
587
|
VSelect: typeof import('vuetify/components')['VSelect']
|
|
589
|
-
VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
|
|
590
588
|
VRating: typeof import('vuetify/components')['VRating']
|
|
589
|
+
VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
|
|
590
|
+
VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
|
|
591
591
|
VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
|
|
592
|
+
VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
|
|
592
593
|
VSheet: typeof import('vuetify/components')['VSheet']
|
|
593
594
|
VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
|
|
594
595
|
VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
|
|
595
596
|
VSlider: typeof import('vuetify/components')['VSlider']
|
|
596
|
-
|
|
597
|
+
VSnackbar: typeof import('vuetify/components')['VSnackbar']
|
|
598
|
+
VTab: typeof import('vuetify/components')['VTab']
|
|
599
|
+
VTabs: typeof import('vuetify/components')['VTabs']
|
|
600
|
+
VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
|
|
601
|
+
VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
|
|
602
|
+
VSwitch: typeof import('vuetify/components')['VSwitch']
|
|
603
|
+
VTable: typeof import('vuetify/components')['VTable']
|
|
597
604
|
VStepper: typeof import('vuetify/components')['VStepper']
|
|
598
605
|
VStepperActions: typeof import('vuetify/components')['VStepperActions']
|
|
599
606
|
VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
|
|
600
607
|
VStepperItem: typeof import('vuetify/components')['VStepperItem']
|
|
601
608
|
VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
|
|
602
609
|
VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
|
|
603
|
-
VSnackbar: typeof import('vuetify/components')['VSnackbar']
|
|
604
|
-
VSwitch: typeof import('vuetify/components')['VSwitch']
|
|
605
610
|
VSystemBar: typeof import('vuetify/components')['VSystemBar']
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
VTabs: typeof import('vuetify/components')['VTabs']
|
|
609
|
-
VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
|
|
610
|
-
VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
|
|
611
|
+
VTextarea: typeof import('vuetify/components')['VTextarea']
|
|
612
|
+
VTextField: typeof import('vuetify/components')['VTextField']
|
|
611
613
|
VTimeline: typeof import('vuetify/components')['VTimeline']
|
|
612
614
|
VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
|
|
613
|
-
VTextarea: typeof import('vuetify/components')['VTextarea']
|
|
614
615
|
VToolbar: typeof import('vuetify/components')['VToolbar']
|
|
615
616
|
VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
|
|
616
617
|
VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
|
|
617
618
|
VTooltip: typeof import('vuetify/components')['VTooltip']
|
|
618
|
-
VTextField: typeof import('vuetify/components')['VTextField']
|
|
619
619
|
VWindow: typeof import('vuetify/components')['VWindow']
|
|
620
620
|
VWindowItem: typeof import('vuetify/components')['VWindowItem']
|
|
621
|
-
VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
|
|
622
621
|
VDataIterator: typeof import('vuetify/components')['VDataIterator']
|
|
622
|
+
VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
|
|
623
623
|
VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
|
|
624
624
|
VForm: typeof import('vuetify/components')['VForm']
|
|
625
625
|
VContainer: typeof import('vuetify/components')['VContainer']
|
|
@@ -627,20 +627,20 @@ declare module '@vue/runtime-core' {
|
|
|
627
627
|
VRow: typeof import('vuetify/components')['VRow']
|
|
628
628
|
VSpacer: typeof import('vuetify/components')['VSpacer']
|
|
629
629
|
VHover: typeof import('vuetify/components')['VHover']
|
|
630
|
+
VLazy: typeof import('vuetify/components')['VLazy']
|
|
630
631
|
VLayout: typeof import('vuetify/components')['VLayout']
|
|
631
632
|
VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
|
|
632
|
-
VLazy: typeof import('vuetify/components')['VLazy']
|
|
633
633
|
VLocaleProvider: typeof import('vuetify/components')['VLocaleProvider']
|
|
634
634
|
VNoSsr: typeof import('vuetify/components')['VNoSsr']
|
|
635
635
|
VParallax: typeof import('vuetify/components')['VParallax']
|
|
636
|
-
VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
|
|
637
636
|
VRadio: typeof import('vuetify/components')['VRadio']
|
|
637
|
+
VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
|
|
638
638
|
VResponsive: typeof import('vuetify/components')['VResponsive']
|
|
639
639
|
VSparkline: typeof import('vuetify/components')['VSparkline']
|
|
640
640
|
VSpeedDial: typeof import('vuetify/components')['VSpeedDial']
|
|
641
641
|
VThemeProvider: typeof import('vuetify/components')['VThemeProvider']
|
|
642
|
-
VVirtualScroll: typeof import('vuetify/components')['VVirtualScroll']
|
|
643
642
|
VValidation: typeof import('vuetify/components')['VValidation']
|
|
643
|
+
VVirtualScroll: typeof import('vuetify/components')['VVirtualScroll']
|
|
644
644
|
VFabTransition: typeof import('vuetify/components')['VFabTransition']
|
|
645
645
|
VDialogBottomTransition: typeof import('vuetify/components')['VDialogBottomTransition']
|
|
646
646
|
VDialogTopTransition: typeof import('vuetify/components')['VDialogTopTransition']
|
|
@@ -657,23 +657,26 @@ declare module '@vue/runtime-core' {
|
|
|
657
657
|
VExpandTransition: typeof import('vuetify/components')['VExpandTransition']
|
|
658
658
|
VExpandXTransition: typeof import('vuetify/components')['VExpandXTransition']
|
|
659
659
|
VDialogTransition: typeof import('vuetify/components')['VDialogTransition']
|
|
660
|
+
VPicker: typeof import('vuetify/labs/components')['VPicker']
|
|
661
|
+
VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
|
|
660
662
|
VCalendar: typeof import('vuetify/labs/components')['VCalendar']
|
|
661
663
|
VCalendarDay: typeof import('vuetify/labs/components')['VCalendarDay']
|
|
662
664
|
VCalendarHeader: typeof import('vuetify/labs/components')['VCalendarHeader']
|
|
663
665
|
VCalendarInterval: typeof import('vuetify/labs/components')['VCalendarInterval']
|
|
664
666
|
VCalendarIntervalEvent: typeof import('vuetify/labs/components')['VCalendarIntervalEvent']
|
|
665
667
|
VCalendarMonthDay: typeof import('vuetify/labs/components')['VCalendarMonthDay']
|
|
666
|
-
VPicker: typeof import('vuetify/labs/components')['VPicker']
|
|
667
|
-
VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
|
|
668
668
|
VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
669
|
+
VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
|
|
670
|
+
VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
|
|
671
|
+
VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
|
|
672
672
|
VTreeview: typeof import('vuetify/labs/components')['VTreeview']
|
|
673
673
|
VTreeviewItem: typeof import('vuetify/labs/components')['VTreeviewItem']
|
|
674
674
|
VTreeviewGroup: typeof import('vuetify/labs/components')['VTreeviewGroup']
|
|
675
|
+
VTimePicker: typeof import('vuetify/labs/components')['VTimePicker']
|
|
676
|
+
VTimePickerClock: typeof import('vuetify/labs/components')['VTimePickerClock']
|
|
677
|
+
VTimePickerControls: typeof import('vuetify/labs/components')['VTimePickerControls']
|
|
678
|
+
VDateInput: typeof import('vuetify/labs/components')['VDateInput']
|
|
675
679
|
VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
|
|
676
680
|
VSnackbarQueue: typeof import('vuetify/labs/components')['VSnackbarQueue']
|
|
677
|
-
VDateInput: typeof import('vuetify/labs/components')['VDateInput']
|
|
678
681
|
}
|
|
679
682
|
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
.v-calendar {
|
|
2
|
+
background: rgb(var(--v-theme-background));
|
|
3
|
+
color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity));
|
|
4
|
+
}
|
|
5
|
+
|
|
1
6
|
.v-calendar-weekly {
|
|
2
7
|
width: 100%;
|
|
3
8
|
height: 100%;
|
|
4
9
|
display: flex;
|
|
5
10
|
flex-direction: column;
|
|
6
11
|
min-height: 0;
|
|
7
|
-
background-color: #fff;
|
|
8
12
|
}
|
|
9
13
|
|
|
10
14
|
.v-calendar__container {
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
@use './variables' as *
|
|
3
3
|
|
|
4
4
|
@include tools.layer('components')
|
|
5
|
+
.v-calendar
|
|
6
|
+
@include tools.theme($calendar-theme...)
|
|
7
|
+
|
|
5
8
|
.v-calendar-weekly
|
|
6
9
|
width: 100%
|
|
7
10
|
height: 100%
|
|
@@ -9,8 +12,6 @@
|
|
|
9
12
|
flex-direction: column
|
|
10
13
|
// https://github.com/vuetifyjs/vuetify/issues/8319
|
|
11
14
|
min-height: 0
|
|
12
|
-
// Themed
|
|
13
|
-
background-color: #fff
|
|
14
15
|
|
|
15
16
|
.v-calendar__container
|
|
16
17
|
border-top: $calendar-line-width solid $calendar-line-color
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
$calendar-color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)) !default;
|
|
2
|
+
$calendar-background: rgb(var(--v-theme-background)) !default;
|
|
3
|
+
|
|
1
4
|
$calendar-line-width: thin !default;
|
|
2
5
|
$calendar-line-color: #e0e0e0 !default;
|
|
3
6
|
|
|
@@ -45,3 +48,8 @@ $calendar-event-border-width: 1px !default;
|
|
|
45
48
|
$calendar-event-font-size: 12px !default;
|
|
46
49
|
$calendar-event-line-height: 20px !default;
|
|
47
50
|
$calendar-event-right-empty: 10px !default;
|
|
51
|
+
|
|
52
|
+
$calendar-theme: (
|
|
53
|
+
$calendar-background,
|
|
54
|
+
$calendar-color
|
|
55
|
+
) !default;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { mergeProps as _mergeProps, Fragment as _Fragment, createVNode as _createVNode } from "vue";
|
|
2
2
|
// Styles
|
|
3
3
|
import "./VNumberInput.css";
|
|
4
4
|
|
|
@@ -6,12 +6,10 @@ import "./VNumberInput.css";
|
|
|
6
6
|
import { VBtn } from "../../components/VBtn/index.mjs";
|
|
7
7
|
import { VDefaultsProvider } from "../../components/VDefaultsProvider/index.mjs";
|
|
8
8
|
import { VDivider } from "../../components/VDivider/index.mjs";
|
|
9
|
-
import {
|
|
10
|
-
import { makeVInputProps, VInput } from "../../components/VInput/VInput.mjs"; // Composables
|
|
11
|
-
import { makeFocusProps, useFocus } from "../../composables/focus.mjs";
|
|
9
|
+
import { makeVTextFieldProps, VTextField } from "../../components/VTextField/VTextField.mjs"; // Composables
|
|
12
10
|
import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
|
|
13
|
-
import { computed,
|
|
14
|
-
import { clamp,
|
|
11
|
+
import { computed, watchEffect } from 'vue';
|
|
12
|
+
import { clamp, genericComponent, getDecimals, omit, propsFactory, useRender } from "../../util/index.mjs"; // Types
|
|
15
13
|
const makeVNumberInputProps = propsFactory({
|
|
16
14
|
controlVariant: {
|
|
17
15
|
type: String,
|
|
@@ -31,19 +29,13 @@ const makeVNumberInputProps = propsFactory({
|
|
|
31
29
|
type: Number,
|
|
32
30
|
default: 1
|
|
33
31
|
},
|
|
34
|
-
...
|
|
35
|
-
...only(makeVFieldProps(), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'reverse', 'rounded', 'style', 'theme', 'variant']),
|
|
36
|
-
...makeFocusProps()
|
|
32
|
+
...omit(makeVTextFieldProps(), ['appendInnerIcon', 'prependInnerIcon'])
|
|
37
33
|
}, 'VNumberInput');
|
|
38
34
|
export const VNumberInput = genericComponent()({
|
|
39
35
|
name: 'VNumberInput',
|
|
40
36
|
inheritAttrs: false,
|
|
41
37
|
props: {
|
|
42
|
-
...makeVNumberInputProps()
|
|
43
|
-
modelValue: {
|
|
44
|
-
type: Number,
|
|
45
|
-
default: undefined
|
|
46
|
-
}
|
|
38
|
+
...makeVNumberInputProps()
|
|
47
39
|
},
|
|
48
40
|
emits: {
|
|
49
41
|
'update:modelValue': val => true
|
|
@@ -55,12 +47,6 @@ export const VNumberInput = genericComponent()({
|
|
|
55
47
|
slots
|
|
56
48
|
} = _ref;
|
|
57
49
|
const model = useProxiedModel(props, 'modelValue');
|
|
58
|
-
const {
|
|
59
|
-
isFocused,
|
|
60
|
-
focus,
|
|
61
|
-
blur
|
|
62
|
-
} = useFocus(props);
|
|
63
|
-
const inputRef = ref();
|
|
64
50
|
const stepDecimals = computed(() => getDecimals(props.step));
|
|
65
51
|
const modelDecimals = computed(() => model.value != null ? getDecimals(model.value) : 0);
|
|
66
52
|
const canIncrease = computed(() => {
|
|
@@ -76,9 +62,6 @@ export const VNumberInput = genericComponent()({
|
|
|
76
62
|
model.value = clamp(model.value, props.min, props.max);
|
|
77
63
|
}
|
|
78
64
|
});
|
|
79
|
-
function onFocus() {
|
|
80
|
-
if (!isFocused.value) focus();
|
|
81
|
-
}
|
|
82
65
|
const controlVariant = computed(() => {
|
|
83
66
|
return props.hideInput ? 'stacked' : props.controlVariant;
|
|
84
67
|
});
|
|
@@ -108,7 +91,7 @@ export const VNumberInput = genericComponent()({
|
|
|
108
91
|
toggleUpDown(false);
|
|
109
92
|
}
|
|
110
93
|
function onKeydown(e) {
|
|
111
|
-
if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace'].includes(e.key) || e.ctrlKey) return;
|
|
94
|
+
if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Tab'].includes(e.key) || e.ctrlKey) return;
|
|
112
95
|
if (['ArrowDown'].includes(e.key)) {
|
|
113
96
|
e.preventDefault();
|
|
114
97
|
toggleUpDown(false);
|
|
@@ -125,17 +108,14 @@ export const VNumberInput = genericComponent()({
|
|
|
125
108
|
e.preventDefault();
|
|
126
109
|
}
|
|
127
110
|
}
|
|
128
|
-
function
|
|
129
|
-
|
|
130
|
-
model.value = el.value ? +el.value : undefined;
|
|
111
|
+
function onModelUpdate(v) {
|
|
112
|
+
model.value = v ? +v : undefined;
|
|
131
113
|
}
|
|
132
114
|
useRender(() => {
|
|
133
|
-
const fieldProps = filterFieldProps(props);
|
|
134
|
-
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
|
|
135
115
|
const {
|
|
136
116
|
modelValue: _,
|
|
137
|
-
...
|
|
138
|
-
} =
|
|
117
|
+
...textFieldProps
|
|
118
|
+
} = VTextField.filterProps(props);
|
|
139
119
|
function controlNode() {
|
|
140
120
|
const defaultHeight = controlVariant.value === 'stacked' ? 'auto' : '100%';
|
|
141
121
|
return _createVNode("div", {
|
|
@@ -148,6 +128,7 @@ export const VNumberInput = genericComponent()({
|
|
|
148
128
|
"name": "decrement-btn",
|
|
149
129
|
"icon": "$expand",
|
|
150
130
|
"size": "small",
|
|
131
|
+
"tabindex": "-1",
|
|
151
132
|
"onClick": onClickDown
|
|
152
133
|
}, null) : _createVNode(VDefaultsProvider, {
|
|
153
134
|
"key": "decrement-defaults",
|
|
@@ -172,7 +153,8 @@ export const VNumberInput = genericComponent()({
|
|
|
172
153
|
"name": "increment-btn",
|
|
173
154
|
"icon": "$collapse",
|
|
174
155
|
"onClick": onClickUp,
|
|
175
|
-
"size": "small"
|
|
156
|
+
"size": "small",
|
|
157
|
+
"tabindex": "-1"
|
|
176
158
|
}, null) : _createVNode(VDefaultsProvider, {
|
|
177
159
|
"key": "increment-defaults",
|
|
178
160
|
"defaults": {
|
|
@@ -193,7 +175,36 @@ export const VNumberInput = genericComponent()({
|
|
|
193
175
|
"vertical": true
|
|
194
176
|
}, null) : undefined;
|
|
195
177
|
}
|
|
196
|
-
|
|
178
|
+
const appendInnerControl = controlVariant.value === 'split' ? _createVNode("div", {
|
|
179
|
+
"class": "v-number-input__control"
|
|
180
|
+
}, [_createVNode(VDivider, {
|
|
181
|
+
"vertical": true
|
|
182
|
+
}, null), _createVNode(VBtn, {
|
|
183
|
+
"flat": true,
|
|
184
|
+
"height": "100%",
|
|
185
|
+
"icon": "$plus",
|
|
186
|
+
"tile": true,
|
|
187
|
+
"tabindex": "-1",
|
|
188
|
+
"onClick": onClickUp
|
|
189
|
+
}, null)]) : !props.reverse ? _createVNode(_Fragment, null, [dividerNode(), controlNode()]) : undefined;
|
|
190
|
+
const hasAppendInner = slots['append-inner'] || appendInnerControl;
|
|
191
|
+
const prependInnerControl = controlVariant.value === 'split' ? _createVNode("div", {
|
|
192
|
+
"class": "v-number-input__control"
|
|
193
|
+
}, [_createVNode(VBtn, {
|
|
194
|
+
"flat": true,
|
|
195
|
+
"height": "100%",
|
|
196
|
+
"icon": "$minus",
|
|
197
|
+
"tile": true,
|
|
198
|
+
"tabindex": "-1",
|
|
199
|
+
"onClick": onClickDown
|
|
200
|
+
}, null), _createVNode(VDivider, {
|
|
201
|
+
"vertical": true
|
|
202
|
+
}, null)]) : props.reverse ? _createVNode(_Fragment, null, [controlNode(), dividerNode()]) : undefined;
|
|
203
|
+
const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
|
|
204
|
+
return _createVNode(VTextField, _mergeProps({
|
|
205
|
+
"modelValue": model.value,
|
|
206
|
+
"onUpdate:modelValue": onModelUpdate,
|
|
207
|
+
"onKeydown": onKeydown,
|
|
197
208
|
"class": ['v-number-input', {
|
|
198
209
|
'v-number-input--default': controlVariant.value === 'default',
|
|
199
210
|
'v-number-input--hide-input': props.hideInput,
|
|
@@ -202,57 +213,22 @@ export const VNumberInput = genericComponent()({
|
|
|
202
213
|
'v-number-input--split': controlVariant.value === 'split',
|
|
203
214
|
'v-number-input--stacked': controlVariant.value === 'stacked'
|
|
204
215
|
}, props.class]
|
|
205
|
-
},
|
|
206
|
-
"focused": isFocused.value,
|
|
216
|
+
}, textFieldProps, {
|
|
207
217
|
"style": props.style
|
|
208
218
|
}), {
|
|
209
219
|
...slots,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
...
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
return _createVNode("input", _mergeProps({
|
|
223
|
-
"ref": inputRef,
|
|
224
|
-
"type": "text",
|
|
225
|
-
"value": model.value,
|
|
226
|
-
"onInput": onInput,
|
|
227
|
-
"onKeydown": onKeydown,
|
|
228
|
-
"class": fieldClass,
|
|
229
|
-
"onFocus": onFocus,
|
|
230
|
-
"onBlur": blur
|
|
231
|
-
}, inputAttrs), null);
|
|
232
|
-
},
|
|
233
|
-
'append-inner': controlVariant.value === 'split' ? () => _createVNode("div", {
|
|
234
|
-
"class": "v-number-input__control"
|
|
235
|
-
}, [_createVNode(VDivider, {
|
|
236
|
-
"vertical": true
|
|
237
|
-
}, null), _createVNode(VBtn, {
|
|
238
|
-
"flat": true,
|
|
239
|
-
"height": "100%",
|
|
240
|
-
"icon": "$plus",
|
|
241
|
-
"tile": true,
|
|
242
|
-
"onClick": onClickUp
|
|
243
|
-
}, null)]) : !props.reverse ? () => _createVNode(_Fragment, null, [dividerNode(), controlNode()]) : undefined,
|
|
244
|
-
'prepend-inner': controlVariant.value === 'split' ? () => _createVNode("div", {
|
|
245
|
-
"class": "v-number-input__control"
|
|
246
|
-
}, [_createVNode(VBtn, {
|
|
247
|
-
"flat": true,
|
|
248
|
-
"height": "100%",
|
|
249
|
-
"icon": "$minus",
|
|
250
|
-
"tile": true,
|
|
251
|
-
"onClick": onClickDown
|
|
252
|
-
}, null), _createVNode(VDivider, {
|
|
253
|
-
"vertical": true
|
|
254
|
-
}, null)]) : props.reverse ? () => _createVNode(_Fragment, null, [controlNode(), dividerNode()]) : undefined
|
|
255
|
-
})
|
|
220
|
+
'append-inner': hasAppendInner ? function () {
|
|
221
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
222
|
+
args[_key] = arguments[_key];
|
|
223
|
+
}
|
|
224
|
+
return _createVNode(_Fragment, null, [slots['append-inner']?.(...args), appendInnerControl]);
|
|
225
|
+
} : undefined,
|
|
226
|
+
'prepend-inner': hasPrependInner ? function () {
|
|
227
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
228
|
+
args[_key2] = arguments[_key2];
|
|
229
|
+
}
|
|
230
|
+
return _createVNode(_Fragment, null, [prependInnerControl, slots['prepend-inner']?.(...args)]);
|
|
231
|
+
} : undefined
|
|
256
232
|
});
|
|
257
233
|
});
|
|
258
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VNumberInput.mjs","names":["VBtn","VDefaultsProvider","VDivider","filterFieldProps","makeVFieldProps","VField","makeVInputProps","VInput","makeFocusProps","useFocus","useProxiedModel","computed","ref","watchEffect","clamp","filterInputAttrs","genericComponent","getDecimals","only","propsFactory","useRender","makeVNumberInputProps","controlVariant","type","String","default","inset","Boolean","hideInput","min","Number","Infinity","max","step","VNumberInput","name","inheritAttrs","props","modelValue","undefined","emits","val","setup","_ref","attrs","emit","slots","model","isFocused","focus","blur","inputRef","stepDecimals","modelDecimals","value","canIncrease","canDecrease","onFocus","incrementSlotProps","click","onClickUp","decrementSlotProps","onClickDown","toggleUpDown","increment","arguments","length","decimals","Math","toFixed","onKeydown","e","includes","key","ctrlKey","preventDefault","test","onInput","el","target","fieldProps","rootAttrs","inputAttrs","_","inputProps","filterProps","controlNode","defaultHeight","_createVNode","decrement","disabled","flat","height","size","icon","dividerNode","_mergeProps","reverse","class","style","_ref2","fieldClass","slotProps","_Fragment"],"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 { filterFieldProps, makeVFieldProps, VField } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, watchEffect } from 'vue'\nimport { clamp, filterInputAttrs, genericComponent, getDecimals, only, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\ntype ControlSlot = {\n click: () => void\n}\n\ntype VNumberInputSlots = Omit<VInputSlots & VFieldSlots, '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 ...only(makeVInputProps(), [\n 'density',\n 'disabled',\n 'focused',\n 'hideDetails',\n 'hint',\n 'label',\n 'persistentHint',\n 'readonly',\n ]),\n ...only(makeVFieldProps(), [\n 'baseColor',\n 'bgColor',\n 'class',\n 'color',\n 'disabled',\n 'error',\n 'loading',\n 'reverse',\n 'rounded',\n 'style',\n 'theme',\n 'variant',\n ]),\n ...makeFocusProps(),\n}, 'VNumberInput')\n\nexport const VNumberInput = genericComponent<VNumberInputSlots>()({\n name: 'VNumberInput',\n\n inheritAttrs: false,\n\n props: {\n ...makeVNumberInputProps(),\n\n modelValue: {\n type: Number,\n default: undefined,\n },\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 const { isFocused, focus, blur } = useFocus(props)\n const inputRef = ref<HTMLInputElement>()\n\n const stepDecimals = computed(() => getDecimals(props.step))\n const modelDecimals = computed(() => model.value != null ? getDecimals(model.value) : 0)\n\n const canIncrease = computed(() => {\n if (model.value == null) return true\n return model.value + props.step <= props.max\n })\n const canDecrease = computed(() => {\n if (model.value == null) return true\n return model.value - props.step >= props.min\n })\n\n watchEffect(() => {\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 function onFocus () {\n if (!isFocused.value) focus()\n }\n\n const controlVariant = computed(() => {\n return props.hideInput ? 'stacked' : props.controlVariant\n })\n\n const incrementSlotProps = computed(() => ({ click: onClickUp }))\n\n const decrementSlotProps = computed(() => ({ click: onClickDown }))\n\n function toggleUpDown (increment = true) {\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 () {\n toggleUpDown()\n }\n\n function onClickDown () {\n toggleUpDown(false)\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (\n ['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace'].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 onInput (e: Event) {\n const el = e.target as HTMLInputElement\n model.value = el.value ? +(el.value) : undefined\n }\n\n useRender(() => {\n const fieldProps = filterFieldProps(props)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n\n function controlNode () {\n const defaultHeight = controlVariant.value === 'stacked' ? 'auto' : '100%'\n return (\n <div class=\"v-number-input__control\">\n {\n !slots.decrement ? (\n <VBtn\n disabled={ !canDecrease.value }\n flat\n key=\"decrement-btn\"\n height={ defaultHeight }\n name=\"decrement-btn\"\n icon=\"$expand\"\n size=\"small\"\n onClick={ onClickDown }\n />\n ) : (\n <VDefaultsProvider\n key=\"decrement-defaults\"\n defaults={{\n VBtn: {\n disabled: !canDecrease.value,\n flat: true,\n height: defaultHeight,\n size: 'small',\n icon: '$expand',\n },\n }}\n >\n { slots.decrement(decrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\n\n <VDivider\n vertical={ controlVariant.value !== 'stacked' }\n />\n\n {\n !slots.increment ? (\n <VBtn\n disabled={ !canIncrease.value }\n flat\n key=\"increment-btn\"\n height={ defaultHeight }\n name=\"increment-btn\"\n icon=\"$collapse\"\n onClick={ onClickUp }\n size=\"small\"\n />\n ) : (\n <VDefaultsProvider\n key=\"increment-defaults\"\n defaults={{\n VBtn: {\n disabled: !canIncrease.value,\n flat: true,\n height: defaultHeight,\n size: 'small',\n icon: '$collapse',\n },\n }}\n >\n { slots.increment(incrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\n </div>\n )\n }\n\n function dividerNode () {\n return !props.hideInput && !props.inset ? <VDivider vertical /> : undefined\n }\n\n return (\n <VInput\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 { ...rootAttrs }\n { ...inputProps }\n focused={ isFocused.value }\n style={ props.style }\n >\n {{\n ...slots,\n default: () => (\n <VField\n { ...fieldProps }\n active\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => (\n <input\n ref={ inputRef }\n type=\"text\"\n value={ model.value }\n onInput={ onInput }\n onKeydown={ onKeydown }\n class={ fieldClass }\n onFocus={ onFocus }\n onBlur={ blur }\n { ...inputAttrs }\n />\n ),\n 'append-inner': controlVariant.value === 'split' ? () => (\n <div class=\"v-number-input__control\">\n <VDivider vertical />\n\n <VBtn\n flat\n height=\"100%\"\n icon=\"$plus\"\n tile\n onClick={ onClickUp }\n />\n </div>\n ) : (!props.reverse\n ? () => <>{ dividerNode() }{ controlNode() }</>\n : undefined),\n 'prepend-inner': controlVariant.value === 'split' ? () => (\n <div class=\"v-number-input__control\">\n <VBtn\n flat\n height=\"100%\"\n icon=\"$minus\"\n tile\n onClick={ onClickDown }\n />\n\n <VDivider vertical />\n </div>\n ) : (props.reverse\n ? () => <>{ controlNode() }{ dividerNode() }</>\n : undefined),\n }}\n </VField>\n ),\n }}\n </VInput>\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","useProxiedModel","computed","watchEffect","clamp","genericComponent","getDecimals","omit","propsFactory","useRender","makeVNumberInputProps","controlVariant","type","String","default","inset","Boolean","hideInput","min","Number","Infinity","max","step","VNumberInput","name","inheritAttrs","props","emits","val","setup","_ref","attrs","emit","slots","model","stepDecimals","modelDecimals","value","canIncrease","canDecrease","incrementSlotProps","click","onClickUp","decrementSlotProps","onClickDown","toggleUpDown","increment","arguments","length","undefined","decimals","Math","toFixed","onKeydown","e","includes","key","ctrlKey","preventDefault","test","onModelUpdate","v","modelValue","_","textFieldProps","filterProps","controlNode","defaultHeight","_createVNode","decrement","disabled","flat","height","size","icon","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 { 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: () => 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 inheritAttrs: false,\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 canIncrease = computed(() => {\n if (model.value == null) return true\n return model.value + props.step <= props.max\n })\n const canDecrease = computed(() => {\n if (model.value == null) return true\n return model.value - props.step >= props.min\n })\n\n watchEffect(() => {\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 incrementSlotProps = computed(() => ({ click: onClickUp }))\n\n const decrementSlotProps = computed(() => ({ click: onClickDown }))\n\n function toggleUpDown (increment = true) {\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 () {\n toggleUpDown()\n }\n\n function onClickDown () {\n toggleUpDown(false)\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (\n ['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', '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 useRender(() => {\n const { modelValue: _, ...textFieldProps } = VTextField.filterProps(props)\n\n function controlNode () {\n const defaultHeight = controlVariant.value === 'stacked' ? 'auto' : '100%'\n return (\n <div class=\"v-number-input__control\">\n {\n !slots.decrement ? (\n <VBtn\n disabled={ !canDecrease.value }\n flat\n key=\"decrement-btn\"\n height={ defaultHeight }\n name=\"decrement-btn\"\n icon=\"$expand\"\n size=\"small\"\n tabindex=\"-1\"\n onClick={ onClickDown }\n />\n ) : (\n <VDefaultsProvider\n key=\"decrement-defaults\"\n defaults={{\n VBtn: {\n disabled: !canDecrease.value,\n flat: true,\n height: defaultHeight,\n size: 'small',\n icon: '$expand',\n },\n }}\n >\n { slots.decrement(decrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\n\n <VDivider\n vertical={ controlVariant.value !== 'stacked' }\n />\n\n {\n !slots.increment ? (\n <VBtn\n disabled={ !canIncrease.value }\n flat\n key=\"increment-btn\"\n height={ defaultHeight }\n name=\"increment-btn\"\n icon=\"$collapse\"\n onClick={ onClickUp }\n size=\"small\"\n tabindex=\"-1\"\n />\n ) : (\n <VDefaultsProvider\n key=\"increment-defaults\"\n defaults={{\n VBtn: {\n disabled: !canIncrease.value,\n flat: true,\n height: defaultHeight,\n size: 'small',\n icon: '$collapse',\n },\n }}\n >\n { slots.increment(incrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\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 <VBtn\n flat\n height=\"100%\"\n icon=\"$plus\"\n tile\n tabindex=\"-1\"\n onClick={ onClickUp }\n />\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 <VBtn\n flat\n height=\"100%\"\n icon=\"$minus\"\n tile\n tabindex=\"-1\"\n onClick={ onClickDown }\n />\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 >\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":[]}
|