@vuetify/nightly 3.6.3-master.2024-05-06 → 3.6.3-master.2024-05-07

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +8 -2
  2. package/dist/json/attributes.json +148 -8
  3. package/dist/json/importMap-labs.json +4 -4
  4. package/dist/json/importMap.json +112 -112
  5. package/dist/json/tags.json +36 -1
  6. package/dist/json/web-types.json +433 -23
  7. package/dist/vuetify-labs.css +1744 -1744
  8. package/dist/vuetify-labs.d.ts +631 -317
  9. package/dist/vuetify-labs.esm.js +65 -89
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +65 -89
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +4507 -4507
  14. package/dist/vuetify.d.ts +273 -315
  15. package/dist/vuetify.esm.js +12 -14
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +12 -14
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +11 -11
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs +1 -1
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  24. package/lib/components/VAutocomplete/index.d.mts +18 -18
  25. package/lib/components/VBottomSheet/index.d.mts +9 -15
  26. package/lib/components/VCarousel/index.d.mts +6 -6
  27. package/lib/components/VCombobox/index.d.mts +18 -18
  28. package/lib/components/VDialog/index.d.mts +27 -33
  29. package/lib/components/VFileInput/VFileInput.mjs +1 -1
  30. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  31. package/lib/components/VFileInput/index.d.mts +9 -9
  32. package/lib/components/VImg/index.d.mts +6 -6
  33. package/lib/components/VList/VListItem.mjs +3 -2
  34. package/lib/components/VList/VListItem.mjs.map +1 -1
  35. package/lib/components/VList/index.d.mts +6 -6
  36. package/lib/components/VMenu/index.d.mts +27 -33
  37. package/lib/components/VOverlay/VOverlay.mjs +2 -5
  38. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  39. package/lib/components/VOverlay/index.d.mts +9 -15
  40. package/lib/components/VResponsive/VResponsive.mjs +1 -1
  41. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  42. package/lib/components/VResponsive/index.d.mts +6 -6
  43. package/lib/components/VSelect/index.d.mts +18 -18
  44. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  45. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  46. package/lib/components/VSnackbar/index.d.mts +41 -47
  47. package/lib/components/VSpeedDial/index.d.mts +9 -15
  48. package/lib/components/VTooltip/index.d.mts +27 -33
  49. package/lib/components/index.d.mts +236 -278
  50. package/lib/composables/component.mjs +1 -1
  51. package/lib/composables/component.mjs.map +1 -1
  52. package/lib/entry-bundler.mjs +1 -1
  53. package/lib/framework.mjs +1 -1
  54. package/lib/index.d.mts +37 -37
  55. package/lib/labs/VNumberInput/VNumberInput.mjs +57 -81
  56. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  57. package/lib/labs/VNumberInput/index.d.mts +402 -34
  58. package/lib/labs/VSnackbarQueue/index.d.mts +41 -47
  59. package/lib/labs/VTreeview/index.d.mts +6 -6
  60. package/lib/labs/components.d.mts +442 -86
  61. package/package.json +2 -2
@@ -2,7 +2,7 @@
2
2
  import { propsFactory } from "../util/propsFactory.mjs"; // Types
3
3
  // Composables
4
4
  export const makeComponentProps = propsFactory({
5
- class: [String, Array],
5
+ class: [String, Array, Object],
6
6
  style: {
7
7
  type: [String, Array, Object],
8
8
  default: null
@@ -1 +1 @@
1
- {"version":3,"file":"component.mjs","names":["propsFactory","makeComponentProps","class","String","Array","style","type","Object","default"],"sources":["../../src/composables/component.ts"],"sourcesContent":["// Utilities\nimport { propsFactory } from '@/util/propsFactory'\n\n// Types\nimport type { PropType, StyleValue } from 'vue'\n\nexport type ClassValue = any\n\nexport interface ComponentProps {\n class?: ClassValue\n style: StyleValue | undefined\n}\n\n// Composables\nexport const makeComponentProps = propsFactory({\n class: [String, Array] as PropType<ClassValue>,\n style: {\n type: [String, Array, Object] as PropType<StyleValue>,\n default: null,\n },\n}, 'component')\n"],"mappings":"AAAA;AAAA,SACSA,YAAY,oCAErB;AAUA;AACA,OAAO,MAAMC,kBAAkB,GAAGD,YAAY,CAAC;EAC7CE,KAAK,EAAE,CAACC,MAAM,EAAEC,KAAK,CAAyB;EAC9CC,KAAK,EAAE;IACLC,IAAI,EAAE,CAACH,MAAM,EAAEC,KAAK,EAAEG,MAAM,CAAyB;IACrDC,OAAO,EAAE;EACX;AACF,CAAC,EAAE,WAAW,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"component.mjs","names":["propsFactory","makeComponentProps","class","String","Array","Object","style","type","default"],"sources":["../../src/composables/component.ts"],"sourcesContent":["// Utilities\nimport { propsFactory } from '@/util/propsFactory'\n\n// Types\nimport type { PropType, StyleValue } from 'vue'\n\nexport type ClassValue = any\n\nexport interface ComponentProps {\n class: ClassValue\n style: StyleValue | undefined\n}\n\n// Composables\nexport const makeComponentProps = propsFactory({\n class: [String, Array, Object] as PropType<ClassValue>,\n style: {\n type: [String, Array, Object] as PropType<StyleValue>,\n default: null,\n },\n}, 'component')\n"],"mappings":"AAAA;AAAA,SACSA,YAAY,oCAErB;AAUA;AACA,OAAO,MAAMC,kBAAkB,GAAGD,YAAY,CAAC;EAC7CE,KAAK,EAAE,CAACC,MAAM,EAAEC,KAAK,EAAEC,MAAM,CAAyB;EACtDC,KAAK,EAAE;IACLC,IAAI,EAAE,CAACJ,MAAM,EAAEC,KAAK,EAAEC,MAAM,CAAyB;IACrDG,OAAO,EAAE;EACX;AACF,CAAC,EAAE,WAAW,CAAC","ignoreList":[]}
@@ -16,7 +16,7 @@ export const createVuetify = function () {
16
16
  ...options
17
17
  });
18
18
  };
19
- export const version = "3.6.3-master.2024-05-06";
19
+ export const version = "3.6.3-master.2024-05-07";
20
20
  createVuetify.version = version;
21
21
  export { blueprints, components, directives };
22
22
  export * from "./composables/index.mjs";
package/lib/framework.mjs CHANGED
@@ -97,7 +97,7 @@ export function createVuetify() {
97
97
  goTo
98
98
  };
99
99
  }
100
- export const version = "3.6.3-master.2024-05-06";
100
+ export const version = "3.6.3-master.2024-05-07";
101
101
  createVuetify.version = version;
102
102
 
103
103
  // Vue's inject() can only be used in setup
package/lib/index.d.mts CHANGED
@@ -494,38 +494,38 @@ declare module '@vue/runtime-core' {
494
494
 
495
495
  export interface GlobalComponents {
496
496
  VApp: typeof import('vuetify/components')['VApp']
497
+ VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
498
+ VBadge: typeof import('vuetify/components')['VBadge']
499
+ VAvatar: typeof import('vuetify/components')['VAvatar']
497
500
  VAppBar: typeof import('vuetify/components')['VAppBar']
498
501
  VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
499
502
  VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
500
503
  VAlert: typeof import('vuetify/components')['VAlert']
501
504
  VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
502
- VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
503
- VAvatar: typeof import('vuetify/components')['VAvatar']
504
- VBadge: typeof import('vuetify/components')['VBadge']
505
505
  VBanner: typeof import('vuetify/components')['VBanner']
506
506
  VBannerActions: typeof import('vuetify/components')['VBannerActions']
507
507
  VBannerText: typeof import('vuetify/components')['VBannerText']
508
- VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
509
508
  VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
509
+ VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
510
+ VCarousel: typeof import('vuetify/components')['VCarousel']
511
+ VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
510
512
  VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
511
513
  VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
512
514
  VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
513
515
  VBtn: typeof import('vuetify/components')['VBtn']
514
516
  VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
517
+ VChip: typeof import('vuetify/components')['VChip']
518
+ VCheckbox: typeof import('vuetify/components')['VCheckbox']
519
+ VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
520
+ VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
515
521
  VCard: typeof import('vuetify/components')['VCard']
516
522
  VCardActions: typeof import('vuetify/components')['VCardActions']
517
523
  VCardItem: typeof import('vuetify/components')['VCardItem']
518
524
  VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
519
525
  VCardText: typeof import('vuetify/components')['VCardText']
520
526
  VCardTitle: typeof import('vuetify/components')['VCardTitle']
521
- VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
522
- VCarousel: typeof import('vuetify/components')['VCarousel']
523
- VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
524
- VCheckbox: typeof import('vuetify/components')['VCheckbox']
525
- VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
526
- VChip: typeof import('vuetify/components')['VChip']
527
- VChipGroup: typeof import('vuetify/components')['VChipGroup']
528
527
  VCode: typeof import('vuetify/components')['VCode']
528
+ VChipGroup: typeof import('vuetify/components')['VChipGroup']
529
529
  VColorPicker: typeof import('vuetify/components')['VColorPicker']
530
530
  VCombobox: typeof import('vuetify/components')['VCombobox']
531
531
  VCounter: typeof import('vuetify/components')['VCounter']
@@ -543,29 +543,28 @@ declare module '@vue/runtime-core' {
543
543
  VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
544
544
  VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
545
545
  VDialog: typeof import('vuetify/components')['VDialog']
546
- VEmptyState: typeof import('vuetify/components')['VEmptyState']
547
546
  VDivider: typeof import('vuetify/components')['VDivider']
547
+ VFab: typeof import('vuetify/components')['VFab']
548
548
  VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
549
549
  VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
550
550
  VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
551
551
  VExpansionPanelTitle: typeof import('vuetify/components')['VExpansionPanelTitle']
552
- VFab: typeof import('vuetify/components')['VFab']
552
+ VEmptyState: typeof import('vuetify/components')['VEmptyState']
553
553
  VField: typeof import('vuetify/components')['VField']
554
554
  VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
555
- VFileInput: typeof import('vuetify/components')['VFileInput']
556
555
  VFooter: typeof import('vuetify/components')['VFooter']
556
+ VFileInput: typeof import('vuetify/components')['VFileInput']
557
+ VInput: typeof import('vuetify/components')['VInput']
557
558
  VIcon: typeof import('vuetify/components')['VIcon']
558
559
  VComponentIcon: typeof import('vuetify/components')['VComponentIcon']
559
560
  VSvgIcon: typeof import('vuetify/components')['VSvgIcon']
560
561
  VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
561
562
  VClassIcon: typeof import('vuetify/components')['VClassIcon']
562
- VImg: typeof import('vuetify/components')['VImg']
563
563
  VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
564
- VInput: typeof import('vuetify/components')['VInput']
564
+ VImg: typeof import('vuetify/components')['VImg']
565
565
  VItemGroup: typeof import('vuetify/components')['VItemGroup']
566
566
  VItem: typeof import('vuetify/components')['VItem']
567
567
  VKbd: typeof import('vuetify/components')['VKbd']
568
- VLabel: typeof import('vuetify/components')['VLabel']
569
568
  VList: typeof import('vuetify/components')['VList']
570
569
  VListGroup: typeof import('vuetify/components')['VListGroup']
571
570
  VListImg: typeof import('vuetify/components')['VListImg']
@@ -575,48 +574,50 @@ declare module '@vue/runtime-core' {
575
574
  VListItemSubtitle: typeof import('vuetify/components')['VListItemSubtitle']
576
575
  VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
577
576
  VListSubheader: typeof import('vuetify/components')['VListSubheader']
578
- VMain: typeof import('vuetify/components')['VMain']
579
- VMenu: typeof import('vuetify/components')['VMenu']
577
+ VLabel: typeof import('vuetify/components')['VLabel']
580
578
  VMessages: typeof import('vuetify/components')['VMessages']
579
+ VMenu: typeof import('vuetify/components')['VMenu']
580
+ VMain: typeof import('vuetify/components')['VMain']
581
581
  VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
582
- VOtpInput: typeof import('vuetify/components')['VOtpInput']
583
- VOverlay: typeof import('vuetify/components')['VOverlay']
584
582
  VPagination: typeof import('vuetify/components')['VPagination']
585
- VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
583
+ VOtpInput: typeof import('vuetify/components')['VOtpInput']
586
584
  VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
587
- VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
588
585
  VRating: typeof import('vuetify/components')['VRating']
586
+ VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
587
+ VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
588
+ VOverlay: typeof import('vuetify/components')['VOverlay']
589
589
  VSelect: typeof import('vuetify/components')['VSelect']
590
- VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
591
- VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
592
590
  VSheet: typeof import('vuetify/components')['VSheet']
591
+ VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
592
+ VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
593
+ VSlider: typeof import('vuetify/components')['VSlider']
593
594
  VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
594
595
  VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
595
- VSlider: typeof import('vuetify/components')['VSlider']
596
+ VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
597
+ VSwitch: typeof import('vuetify/components')['VSwitch']
596
598
  VSnackbar: typeof import('vuetify/components')['VSnackbar']
599
+ VTextField: typeof import('vuetify/components')['VTextField']
597
600
  VStepper: typeof import('vuetify/components')['VStepper']
598
601
  VStepperActions: typeof import('vuetify/components')['VStepperActions']
599
602
  VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
600
603
  VStepperItem: typeof import('vuetify/components')['VStepperItem']
601
604
  VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
602
605
  VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
603
- VSwitch: typeof import('vuetify/components')['VSwitch']
604
- VSystemBar: typeof import('vuetify/components')['VSystemBar']
606
+ VTable: typeof import('vuetify/components')['VTable']
605
607
  VTab: typeof import('vuetify/components')['VTab']
606
608
  VTabs: typeof import('vuetify/components')['VTabs']
607
609
  VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
608
610
  VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
609
- VTable: typeof import('vuetify/components')['VTable']
610
- VTextarea: typeof import('vuetify/components')['VTextarea']
611
- VTextField: typeof import('vuetify/components')['VTextField']
612
- VTimeline: typeof import('vuetify/components')['VTimeline']
613
- VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
611
+ VSystemBar: typeof import('vuetify/components')['VSystemBar']
614
612
  VToolbar: typeof import('vuetify/components')['VToolbar']
615
613
  VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
616
614
  VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
617
- VTooltip: typeof import('vuetify/components')['VTooltip']
615
+ VTextarea: typeof import('vuetify/components')['VTextarea']
616
+ VTimeline: typeof import('vuetify/components')['VTimeline']
617
+ VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
618
618
  VWindow: typeof import('vuetify/components')['VWindow']
619
619
  VWindowItem: typeof import('vuetify/components')['VWindowItem']
620
+ VTooltip: typeof import('vuetify/components')['VTooltip']
620
621
  VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
621
622
  VDataIterator: typeof import('vuetify/components')['VDataIterator']
622
623
  VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
@@ -638,8 +639,8 @@ declare module '@vue/runtime-core' {
638
639
  VSparkline: typeof import('vuetify/components')['VSparkline']
639
640
  VSpeedDial: typeof import('vuetify/components')['VSpeedDial']
640
641
  VThemeProvider: typeof import('vuetify/components')['VThemeProvider']
641
- VValidation: typeof import('vuetify/components')['VValidation']
642
642
  VVirtualScroll: typeof import('vuetify/components')['VVirtualScroll']
643
+ VValidation: typeof import('vuetify/components')['VValidation']
643
644
  VFabTransition: typeof import('vuetify/components')['VFabTransition']
644
645
  VDialogBottomTransition: typeof import('vuetify/components')['VDialogBottomTransition']
645
646
  VDialogTopTransition: typeof import('vuetify/components')['VDialogTopTransition']
@@ -656,16 +657,15 @@ declare module '@vue/runtime-core' {
656
657
  VExpandTransition: typeof import('vuetify/components')['VExpandTransition']
657
658
  VExpandXTransition: typeof import('vuetify/components')['VExpandXTransition']
658
659
  VDialogTransition: typeof import('vuetify/components')['VDialogTransition']
659
- VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
660
660
  VCalendar: typeof import('vuetify/labs/components')['VCalendar']
661
661
  VCalendarDay: typeof import('vuetify/labs/components')['VCalendarDay']
662
662
  VCalendarHeader: typeof import('vuetify/labs/components')['VCalendarHeader']
663
663
  VCalendarInterval: typeof import('vuetify/labs/components')['VCalendarInterval']
664
664
  VCalendarIntervalEvent: typeof import('vuetify/labs/components')['VCalendarIntervalEvent']
665
665
  VCalendarMonthDay: typeof import('vuetify/labs/components')['VCalendarMonthDay']
666
+ VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
666
667
  VPicker: typeof import('vuetify/labs/components')['VPicker']
667
668
  VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
668
- VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
669
669
  VTreeview: typeof import('vuetify/labs/components')['VTreeview']
670
670
  VTreeviewItem: typeof import('vuetify/labs/components')['VTreeviewItem']
671
671
  VTreeviewGroup: typeof import('vuetify/labs/components')['VTreeviewGroup']
@@ -1,4 +1,4 @@
1
- import { Fragment as _Fragment, mergeProps as _mergeProps, createVNode as _createVNode } from "vue";
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 { filterFieldProps, makeVFieldProps, VField } from "../../components/VField/VField.mjs";
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, ref, watchEffect } from 'vue';
14
- import { clamp, filterInputAttrs, genericComponent, getDecimals, only, propsFactory, useRender } from "../../util/index.mjs"; // Types
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
- ...only(makeVInputProps(), ['density', 'disabled', 'focused', 'hideDetails', 'hint', 'label', 'persistentHint', 'readonly']),
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 onInput(e) {
129
- const el = e.target;
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
- ...inputProps
138
- } = VInput.filterProps(props);
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
- return _createVNode(VInput, _mergeProps({
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
- }, rootAttrs, inputProps, {
206
- "focused": isFocused.value,
216
+ }, textFieldProps, {
207
217
  "style": props.style
208
218
  }), {
209
219
  ...slots,
210
- default: () => _createVNode(VField, _mergeProps(fieldProps, {
211
- "active": true,
212
- "focused": isFocused.value
213
- }), {
214
- ...slots,
215
- default: _ref2 => {
216
- let {
217
- props: {
218
- class: fieldClass,
219
- ...slotProps
220
- }
221
- } = _ref2;
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":[]}