bitboss-ui 2.1.113 → 2.1.115
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/ai/BaseButton.md +448 -0
- package/dist/ai/BaseCheckbox.md +494 -0
- package/dist/ai/BaseCheckboxGroup.md +597 -0
- package/dist/ai/BaseColorInput.md +461 -0
- package/dist/ai/BaseDatePicker.md +739 -0
- package/dist/ai/BaseDatePickerInput.md +1517 -0
- package/dist/ai/BaseDialog.md +610 -0
- package/dist/ai/BaseInputContainer.md +570 -0
- package/dist/ai/BaseNumberInput.md +509 -0
- package/dist/ai/BaseRadio.md +405 -0
- package/dist/ai/BaseRadioGroup.md +535 -0
- package/dist/ai/BaseRating.md +489 -0
- package/dist/ai/BaseSelect.md +1720 -0
- package/dist/ai/BaseSlider.md +871 -0
- package/dist/ai/BaseSwitch.md +322 -0
- package/dist/ai/BaseSwitchGroup.md +298 -0
- package/dist/ai/BaseTag.md +624 -0
- package/dist/ai/BaseTextInput.md +392 -0
- package/dist/ai/BaseTextarea.md +398 -0
- package/dist/ai/BbAccordion.md +135 -0
- package/dist/ai/BbAlert.md +226 -0
- package/dist/ai/BbAvatar.md +200 -0
- package/dist/ai/BbBadge.md +185 -0
- package/dist/ai/BbBreadcrumbs.md +536 -0
- package/dist/ai/BbButton.md +687 -0
- package/dist/ai/BbCheckbox.md +280 -0
- package/dist/ai/BbCheckboxGroup.md +387 -0
- package/dist/ai/BbChip.md +148 -0
- package/dist/ai/BbCollapsible.md +119 -0
- package/dist/ai/BbColorInput.md +345 -0
- package/dist/ai/BbColorPalette.md +360 -0
- package/dist/ai/BbConfirm.md +160 -0
- package/dist/ai/BbDatePickerInput.md +414 -0
- package/dist/ai/BbDialog.md +135 -0
- package/dist/ai/BbDropdown.md +765 -0
- package/dist/ai/BbDropdownButton.md +629 -0
- package/dist/ai/BbDropzone.md +504 -0
- package/dist/ai/BbIcon.md +238 -0
- package/dist/ai/BbIntersection.md +121 -0
- package/dist/ai/BbNumberInput.md +372 -0
- package/dist/ai/BbOffCanvas.md +549 -0
- package/dist/ai/BbPagination.md +562 -0
- package/dist/ai/BbPopover.md +580 -0
- package/dist/ai/BbProgress.md +97 -0
- package/dist/ai/BbRadio.md +256 -0
- package/dist/ai/BbRadioGroup.md +373 -0
- package/dist/ai/BbRating.md +245 -0
- package/dist/ai/BbRatio.md +62 -0
- package/dist/ai/BbRows.md +307 -0
- package/dist/ai/BbSelect.md +562 -0
- package/dist/ai/BbSelectPopover.md +2010 -0
- package/dist/ai/BbSlider.md +274 -0
- package/dist/ai/BbSmoothHeight.md +167 -0
- package/dist/ai/BbSpinner.md +154 -0
- package/dist/ai/BbSwitch.md +151 -0
- package/dist/ai/BbSwitchGroup.md +237 -0
- package/dist/ai/BbTab.md +954 -0
- package/dist/ai/BbTable.md +1624 -0
- package/dist/ai/BbTag.md +315 -0
- package/dist/ai/BbTextInput.md +357 -0
- package/dist/ai/BbTextarea.md +277 -0
- package/dist/ai/BbToast.md +219 -0
- package/dist/ai/BbTooltip.md +353 -0
- package/dist/ai/BbTree.md +271 -0
- package/dist/ai/ChipsBox.md +211 -0
- package/dist/ai/ClearableButton.md +67 -0
- package/dist/ai/CommaBox.md +212 -0
- package/dist/ai/CommonInputInnerContainer.md +419 -0
- package/dist/ai/CommonInputOuterContainer.md +56 -0
- package/dist/ai/CommonPopover.md +446 -0
- package/dist/ai/ErrorIcon.md +61 -0
- package/dist/ai/FlatListBox.md +382 -0
- package/dist/ai/GroupedListBox.md +538 -0
- package/dist/ai/ListBox.md +234 -0
- package/dist/ai/OptionsContainer.md +257 -0
- package/dist/ai/index.md +124 -0
- package/dist/components/BaseButton/BaseButton.vue.d.ts +2 -163
- package/dist/components/BaseButton/types.d.ts +158 -0
- package/dist/components/BaseCheckbox/BaseCheckbox.vue.d.ts +4 -4
- package/dist/components/BaseCheckboxGroup/BaseCheckboxGroup.vue.d.ts +2 -2
- package/dist/components/BaseCheckboxGroup/types.d.ts +16 -9
- package/dist/components/BaseColorInput/BaseColorInput.vue.d.ts +12 -52
- package/dist/components/BaseDatePicker/BaseDatePicker.vue.d.ts +4 -76
- package/dist/components/BaseDatePicker/types.d.ts +100 -0
- package/dist/components/BaseDatePickerInput/BaseDatePickerInput.vue.d.ts +18 -315
- package/dist/components/BaseDatePickerInput/types.d.ts +206 -0
- package/dist/components/BaseDialog/BaseDialog.vue.d.ts +6 -156
- package/dist/components/BaseDialog/types.d.ts +180 -0
- package/dist/components/BaseInputContainer/BaseInputContainer.vue.d.ts +1 -107
- package/dist/components/BaseInputContainer/types.d.ts +126 -0
- package/dist/components/BaseNumberInput/BaseNumberInput.vue.d.ts +7 -170
- package/dist/components/BaseNumberInput/types.d.ts +191 -0
- package/dist/components/BaseRadio/BaseRadio.vue.d.ts +6 -119
- package/dist/components/BaseRadio/types.d.ts +173 -0
- package/dist/components/BaseRadioGroup/BaseRadioGroup.vue.d.ts +4 -274
- package/dist/components/BaseRadioGroup/types.d.ts +240 -0
- package/dist/components/BaseRating/BaseRating.vue.d.ts +5 -106
- package/dist/components/BaseRating/types.d.ts +144 -0
- package/dist/components/BaseSelect/BaseSelect.vue.d.ts +2 -363
- package/dist/components/BaseSelect/types.d.ts +457 -0
- package/dist/components/BaseSlider/BaseSlider.vue.d.ts +6 -178
- package/dist/components/BaseSlider/types.d.ts +201 -0
- package/dist/components/BaseSwitch/BaseSwitch.vue.d.ts +7 -35
- package/dist/components/BaseSwitch/types.d.ts +25 -0
- package/dist/components/BaseSwitchGroup/BaseSwitchGroup.vue.d.ts +5 -11
- package/dist/components/BaseSwitchGroup/types.d.ts +8 -0
- package/dist/components/BaseTag/BaseTag.vue.d.ts +27 -222
- package/dist/components/BaseTag/types.d.ts +136 -0
- package/dist/components/BaseTextInput/BaseTextInput.vue.d.ts +5 -141
- package/dist/components/BaseTextInput/types.d.ts +166 -0
- package/dist/components/BaseTextarea/BaseTextarea.vue.d.ts +5 -131
- package/dist/components/BaseTextarea/types.d.ts +151 -0
- package/dist/components/BbAccordion/BbAccordion.vue.d.ts +3 -51
- package/dist/components/BbAccordion/types.d.ts +32 -0
- package/dist/components/BbAlert/BbAlert.vue.d.ts +3 -50
- package/dist/components/BbAlert/types.d.ts +42 -0
- package/dist/components/BbAvatar/BbAvatar.vue.d.ts +3 -23
- package/dist/components/BbAvatar/types.d.ts +34 -0
- package/dist/components/BbBadge/BbBadge.vue.d.ts +3 -40
- package/dist/components/BbBadge/types.d.ts +30 -0
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.d.ts +14 -178
- package/dist/components/BbBreadcrumbs/types.d.ts +109 -0
- package/dist/components/BbButton/BbButton.vue.d.ts +4 -163
- package/dist/components/BbButton/types.d.ts +159 -0
- package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -165
- package/dist/components/BbCheckbox/types.d.ts +130 -0
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +7 -324
- package/dist/components/BbCheckboxGroup/types.d.ts +189 -0
- package/dist/components/BbChip/BbChip.vue.d.ts +6 -28
- package/dist/components/BbChip/types.d.ts +23 -0
- package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +3 -24
- package/dist/components/BbCollapsible/types.d.ts +20 -0
- package/dist/components/BbColorInput/BbColorInput.vue.d.ts +10 -151
- package/dist/components/BbColorInput/types.d.ts +131 -0
- package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +2 -112
- package/dist/components/BbColorPalette/types.d.ts +127 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +6 -212
- package/dist/components/BbDatePickerInput/types.d.ts +180 -0
- package/dist/components/BbDialog/BbDialog.vue.d.ts +2 -2
- package/dist/components/BbDialog/types.d.ts +1 -0
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +21 -247
- package/dist/components/BbDropdown/types.d.ts +147 -0
- package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +16 -209
- package/dist/components/BbDropdownButton/types.d.ts +114 -0
- package/dist/components/BbDropzone/BbDropzone.vue.d.ts +7 -86
- package/dist/components/BbDropzone/types.d.ts +67 -0
- package/dist/components/BbIcon/BbIcon.vue.d.ts +2 -26
- package/dist/components/BbIcon/types.d.ts +28 -0
- package/dist/components/BbIntersection/BbIntersection.vue.d.ts +3 -41
- package/dist/components/BbIntersection/types.d.ts +36 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +44 -175
- package/dist/components/BbNumberInput/types.d.ts +130 -0
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +5 -93
- package/dist/components/BbOffCanvas/types.d.ts +97 -0
- package/dist/components/BbPagination/BbPagination.vue.d.ts +4 -87
- package/dist/components/BbPagination/types.d.ts +80 -0
- package/dist/components/BbPopover/BbPopover.vue.d.ts +9 -135
- package/dist/components/BbPopover/types.d.ts +99 -0
- package/dist/components/BbProgress/BbProgress.vue.d.ts +2 -14
- package/dist/components/BbProgress/types.d.ts +20 -0
- package/dist/components/BbRadio/BbRadio.vue.d.ts +7 -150
- package/dist/components/BbRadio/types.d.ts +117 -0
- package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +7 -322
- package/dist/components/BbRadioGroup/types.d.ts +182 -0
- package/dist/components/BbRating/BbRating.vue.d.ts +10 -113
- package/dist/components/BbRating/types.d.ts +105 -0
- package/dist/components/BbRatio/BbRatio.vue.d.ts +3 -18
- package/dist/components/BbRatio/types.d.ts +15 -0
- package/dist/components/BbSelect/BbSelect.vue.d.ts +7 -375
- package/dist/components/BbSelect/types.d.ts +351 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +1 -1
- package/dist/components/BbSelectPopover/types.d.ts +351 -0
- package/dist/components/BbSlider/BbSlider.vue.d.ts +10 -129
- package/dist/components/BbSlider/types.d.ts +123 -0
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +2 -23
- package/dist/components/BbSmoothHeight/types.d.ts +24 -0
- package/dist/components/BbSpinner/BbSpinner.vue.d.ts +3 -5
- package/dist/components/BbSpinner/types.d.ts +8 -0
- package/dist/components/BbSwitch/BbSwitch.vue.d.ts +9 -65
- package/dist/components/BbSwitch/types.d.ts +29 -0
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +7 -190
- package/dist/components/BbSwitchGroup/types.d.ts +81 -0
- package/dist/components/BbTab/BbTab.vue.d.ts +9 -247
- package/dist/components/BbTab/types.d.ts +186 -0
- package/dist/components/BbTag/BbTag.vue.d.ts +6 -156
- package/dist/components/BbTag/types.d.ts +158 -0
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -152
- package/dist/components/BbTextInput/types.d.ts +137 -0
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +10 -142
- package/dist/components/BbTextarea/types.d.ts +123 -0
- package/dist/components/BbToast/BbToast.vue.d.ts +2 -6
- package/dist/components/BbToast/types.d.ts +8 -0
- package/dist/components/BbTooltip/BbTooltip.vue.d.ts +8 -65
- package/dist/components/BbTooltip/types.d.ts +55 -0
- package/dist/components/BbTree/BbTree.vue.d.ts +2 -65
- package/dist/components/BbTree/types.d.ts +69 -0
- package/dist/components/{ChipsBox.vue.d.ts → ChipsBox/ChipsBox.vue.d.ts} +5 -6
- package/dist/components/ChipsBox/types.d.ts +14 -0
- package/dist/components/{ClearableButton.vue.d.ts → ClearableButton/ClearableButton.vue.d.ts} +2 -0
- package/dist/components/ClearableButton/types.d.ts +3 -0
- package/dist/components/{CommaBox.vue.d.ts → CommaBox/CommaBox.vue.d.ts} +5 -6
- package/dist/components/CommaBox/types.d.ts +14 -0
- package/dist/components/CommonInputInnerContainer/CommonInputInnerContainer.vue.d.ts +25 -0
- package/dist/components/CommonInputInnerContainer/types.d.ts +47 -0
- package/dist/components/CommonInputOuterContainer/CommonInputOuterContainer.vue.d.ts +17 -0
- package/dist/components/CommonInputOuterContainer/types.d.ts +16 -0
- package/dist/components/{CommonPopover.vue.d.ts → CommonPopover/CommonPopover.vue.d.ts} +5 -30
- package/dist/components/CommonPopover/types.d.ts +43 -0
- package/dist/components/{ErrorIcon.vue.d.ts → ErrorIcon/ErrorIcon.vue.d.ts} +2 -0
- package/dist/components/ErrorIcon/types.d.ts +3 -0
- package/dist/components/FlatListBox/types.d.ts +97 -0
- package/dist/components/GroupedListBox/types.d.ts +118 -0
- package/dist/components/ListBox/ListBox.vue.d.ts +30 -0
- package/dist/components/ListBox/types.d.ts +133 -0
- package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +13 -0
- package/dist/components/OptionsContainer/types.d.ts +96 -0
- package/dist/composables/useBbConfig.d.ts +1 -1
- package/dist/composables/useConfirm.d.ts +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +18 -18
- package/dist/index109.js +9 -9
- package/dist/index110.js +50 -49
- package/dist/index114.js +1 -1
- package/dist/index118.js +1 -1
- package/dist/index122.js +1 -0
- package/dist/index124.js +4 -4
- package/dist/index126.js +13 -13
- package/dist/index132.js +22 -19
- package/dist/index134.js +1 -1
- package/dist/index136.js +5 -5
- package/dist/index138.js +1 -1
- package/dist/index14.js +1 -1
- package/dist/index140.js +18 -17
- package/dist/index144.js +1 -1
- package/dist/index146.js +2 -2
- package/dist/index149.js +2 -2
- package/dist/index16.js +3 -3
- package/dist/index18.js +3 -3
- package/dist/index20.js +70 -59
- package/dist/index22.js +14 -14
- package/dist/index221.js +138 -2
- package/dist/index222.js +2 -138
- package/dist/index224.js +5 -34
- package/dist/index225.js +7 -32
- package/dist/index226.js +32 -26
- package/dist/index227.js +7 -0
- package/dist/index228.js +5 -5
- package/dist/index229.js +5 -8
- package/dist/index230.js +5 -7
- package/dist/index231.js +3 -2
- package/dist/index232.js +2 -9
- package/dist/index233.js +6 -13
- package/dist/index234.js +8 -3
- package/dist/index235.js +268 -2
- package/dist/index236.js +52 -11
- package/dist/index237.js +50 -6
- package/dist/index238.js +32 -3
- package/dist/index239.js +60 -3
- package/dist/index24.js +10 -10
- package/dist/index240.js +13 -2
- package/dist/index241.js +187 -17
- package/dist/index242.js +3 -12
- package/dist/index243.js +2 -51
- package/dist/index244.js +2 -18
- package/dist/index245.js +2 -12
- package/dist/index246.js +12 -16
- package/dist/index247.js +11 -28
- package/dist/index248.js +48 -15
- package/dist/index249.js +17 -4
- package/dist/index250.js +2 -2
- package/dist/index252.js +2 -2
- package/dist/index254.js +3 -135
- package/dist/index255.js +4 -0
- package/dist/index256.js +4 -107
- package/dist/index257.js +19 -12
- package/dist/index258.js +6 -2
- package/dist/index259.js +16 -7
- package/dist/index26.js +3 -3
- package/dist/index260.js +86 -7
- package/dist/index262.js +32 -0
- package/dist/index263.js +18 -5
- package/dist/index264.js +12 -5
- package/dist/index265.js +18 -5
- package/dist/index266.js +2 -5
- package/dist/index267.js +7 -5
- package/dist/index268.js +7 -5
- package/dist/index269.js +3 -67
- package/dist/index270.js +4 -33
- package/dist/index271.js +5 -2
- package/dist/index272.js +5 -2
- package/dist/index273.js +5 -3
- package/dist/index274.js +135 -4
- package/dist/index276.js +9 -6
- package/dist/index277.js +7 -11
- package/dist/index278.js +23 -5
- package/dist/index279.js +3 -5
- package/dist/index28.js +57 -55
- package/dist/index280.js +21 -266
- package/dist/index281.js +364 -43
- package/dist/index283.js +32 -31
- package/dist/index284.js +3 -60
- package/dist/index285.js +25 -4
- package/dist/index286.js +3 -20
- package/dist/index287.js +18 -5
- package/dist/index288.js +12 -373
- package/dist/index289.js +109 -0
- package/dist/index290.js +11 -6
- package/dist/index291.js +66 -15
- package/dist/index292.js +32 -10
- package/dist/index294.js +5 -8
- package/dist/index295.js +9 -20
- package/dist/index296.js +2 -8
- package/dist/index297.js +9 -23
- package/dist/index298.js +52 -24
- package/dist/index299.js +5 -188
- package/dist/index30.js +3 -3
- package/dist/index300.js +21 -3
- package/dist/index301.js +28 -3
- package/dist/index303.js +9 -0
- package/dist/index304.js +2 -7
- package/dist/index305.js +280 -3
- package/dist/index306.js +2 -2
- package/dist/index307.js +16 -5
- package/dist/index308.js +2 -7
- package/dist/index309.js +16 -3
- package/dist/index310.js +2 -3
- package/dist/index311.js +27 -3
- package/dist/index312.js +2 -2
- package/dist/index313.js +2 -28
- package/dist/index314.js +2 -17
- package/dist/index315.js +2 -4
- package/dist/index316.js +1 -1
- package/dist/index317.js +28 -3
- package/dist/index318.js +2 -280
- package/dist/index319.js +7 -2
- package/dist/index32.js +2 -2
- package/dist/index320.js +719 -125
- package/dist/index321.js +366 -2
- package/dist/index322.js +56 -14
- package/dist/index323.js +4 -2
- package/dist/index324.js +3 -16
- package/dist/index325.js +17 -2
- package/dist/index326.js +3 -16
- package/dist/index327.js +3 -2
- package/dist/index328.js +3 -19
- package/dist/index329.js +3 -2
- package/dist/index330.js +120 -22
- package/dist/index331.js +2 -2
- package/dist/index332.js +15 -2
- package/dist/index333.js +2 -2
- package/dist/index334.js +19 -2
- package/dist/index335.js +2 -2
- package/dist/index336.js +5 -2
- package/dist/index337.js +5 -3
- package/dist/index338.js +2 -4
- package/dist/index339.js +4 -719
- package/dist/index34.js +8 -8
- package/dist/index340.js +2 -366
- package/dist/index341.js +3 -57
- package/dist/index342.js +3 -6
- package/dist/index343.js +6 -5
- package/dist/index344.js +6 -34
- package/dist/index345.js +17 -127
- package/dist/index346.js +7 -396
- package/dist/index347.js +14 -199
- package/dist/index348.js +5 -259
- package/dist/index349.js +6 -227
- package/dist/index352.js +35 -2
- package/dist/index353.js +129 -2
- package/dist/index354.js +378 -114
- package/dist/index355.js +92 -6
- package/dist/index356.js +226 -17
- package/dist/index357.js +22 -9
- package/dist/index359.js +7 -5
- package/dist/index36.js +4 -4
- package/dist/index360.js +200 -7
- package/dist/index361.js +255 -18
- package/dist/index362.js +136 -0
- package/dist/index363.js +2 -93
- package/dist/index364.js +2 -441
- package/dist/index365.js +427 -114
- package/dist/index366.js +127 -46
- package/dist/index367.js +44 -67
- package/dist/index368.js +66 -516
- package/dist/index369.js +515 -45
- package/dist/index370.js +52 -0
- package/dist/index38.js +133 -131
- package/dist/index40.js +8 -8
- package/dist/index42.js +2 -2
- package/dist/index44.js +16 -15
- package/dist/index46.js +4 -4
- package/dist/index50.js +28 -25
- package/dist/index54.js +1 -1
- package/dist/index56.js +1 -1
- package/dist/index58.js +2 -2
- package/dist/index60.js +2 -2
- package/dist/index62.js +5 -5
- package/dist/index66.js +3 -1
- package/dist/index68.js +1 -1
- package/dist/index74.js +4 -4
- package/dist/index82.js +6 -6
- package/dist/index84.js +1 -1
- package/dist/index86.js +2 -2
- package/dist/index88.js +3 -3
- package/dist/index90.js +1 -1
- package/dist/index93.js +3 -3
- package/dist/index95.js +2 -2
- package/dist/index97.js +5 -5
- package/dist/index99.js +1 -1
- package/dist/utilities/functions/parseSize.d.ts +1 -1
- package/package.json +5 -3
- package/dist/components/CommonInputInnerContainer.vue.d.ts +0 -81
- package/dist/components/CommonInputOuterContainer.vue.d.ts +0 -41
- package/dist/components/FlatListBox.vue.d.ts +0 -119
- package/dist/components/GroupedListBox.vue.d.ts +0 -153
- package/dist/components/ListBox.vue.d.ts +0 -170
- package/dist/components/OptionsContainer.vue.d.ts +0 -172
- package/dist/index261.js +0 -88
- package/dist/index275.js +0 -25
- package/dist/index282.js +0 -54
- package/dist/index293.js +0 -5
- package/dist/index302.js +0 -55
- package/dist/index358.js +0 -17
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
# BaseNumberInput
|
|
2
|
+
|
|
3
|
+
## Template & Script
|
|
4
|
+
|
|
5
|
+
```vue
|
|
6
|
+
<template>
|
|
7
|
+
<CommonInputOuterContainer :class="classes">
|
|
8
|
+
<template #prepend-outer
|
|
9
|
+
><slot
|
|
10
|
+
:decrease="decrease"
|
|
11
|
+
:increase="increase"
|
|
12
|
+
name="prepend-outer"
|
|
13
|
+
></slot
|
|
14
|
+
></template>
|
|
15
|
+
<CommonInputInnerContainer
|
|
16
|
+
:append:icon="props['append:icon']"
|
|
17
|
+
:clearable="props.clearable && isNotNil(modelValue)"
|
|
18
|
+
:prepend:icon="props['prepend:icon']"
|
|
19
|
+
@click:clear="$emit('update:modelValue', null)"
|
|
20
|
+
>
|
|
21
|
+
<template #prepend
|
|
22
|
+
><slot :decrease="decrease" :increase="increase" name="prepend"
|
|
23
|
+
/></template>
|
|
24
|
+
<template #prefix
|
|
25
|
+
><slot :decrease="decrease" :increase="increase" name="prefix"
|
|
26
|
+
/></template>
|
|
27
|
+
<input
|
|
28
|
+
:id="id"
|
|
29
|
+
ref="input"
|
|
30
|
+
:aria-describedby="ariaDescribedby"
|
|
31
|
+
:aria-valuemax="max"
|
|
32
|
+
:aria-valuemin="min"
|
|
33
|
+
:aria-valuenow="isNotNil(modelValue) ? modelValue : undefined"
|
|
34
|
+
:autocomplete="autocomplete"
|
|
35
|
+
:autofocus="autofocus"
|
|
36
|
+
:class="'bb-base-number-input__input'"
|
|
37
|
+
:disabled="disabled"
|
|
38
|
+
:inputmode="'decimal'"
|
|
39
|
+
:name="name"
|
|
40
|
+
:placeholder="placeholder"
|
|
41
|
+
:readonly="readonly"
|
|
42
|
+
:required="required"
|
|
43
|
+
role="spinbutton"
|
|
44
|
+
size="1"
|
|
45
|
+
:type="`text`"
|
|
46
|
+
v-bind="eventListeners"
|
|
47
|
+
@input.stop="onInput"
|
|
48
|
+
/>
|
|
49
|
+
<template #append
|
|
50
|
+
><slot :decrease="decrease" :increase="increase" name="append"
|
|
51
|
+
/></template>
|
|
52
|
+
<template #suffix
|
|
53
|
+
><slot :decrease="decrease" :increase="increase" name="suffix"
|
|
54
|
+
/></template>
|
|
55
|
+
</CommonInputInnerContainer>
|
|
56
|
+
<template #append-outer
|
|
57
|
+
><slot
|
|
58
|
+
:decrease="decrease"
|
|
59
|
+
:increase="increase"
|
|
60
|
+
name="append-outer"
|
|
61
|
+
></slot
|
|
62
|
+
></template>
|
|
63
|
+
</CommonInputOuterContainer>
|
|
64
|
+
</template>
|
|
65
|
+
|
|
66
|
+
<script setup lang="ts">
|
|
67
|
+
import { clamp } from '@/utilities/functions/clamp';
|
|
68
|
+
import { clampPrecision } from '@/utilities/functions/clampPrecision';
|
|
69
|
+
import { computed, ref, watchPostEffect } from 'vue';
|
|
70
|
+
import { isNil } from '@/utilities/functions/isNil';
|
|
71
|
+
import { isNotNil } from '@/utilities/functions/isNotNil';
|
|
72
|
+
import CommonInputInnerContainer from '../CommonInputInnerContainer/CommonInputInnerContainer.vue';
|
|
73
|
+
import CommonInputOuterContainer from '../CommonInputOuterContainer/CommonInputOuterContainer.vue';
|
|
74
|
+
import type {
|
|
75
|
+
BaseNumberInputProps,
|
|
76
|
+
BaseNumberInputEvents,
|
|
77
|
+
BaseNumberInputSlots,
|
|
78
|
+
} from './types';
|
|
79
|
+
|
|
80
|
+
const props = withDefaults(defineProps<BaseNumberInputProps>(), {
|
|
81
|
+
autocomplete: 'off',
|
|
82
|
+
maxPrecision: 8,
|
|
83
|
+
step: 1,
|
|
84
|
+
min: Number.MIN_SAFE_INTEGER,
|
|
85
|
+
max: Number.MAX_SAFE_INTEGER,
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
const emit = defineEmits<BaseNumberInputEvents>();
|
|
89
|
+
|
|
90
|
+
defineSlots<BaseNumberInputSlots>();
|
|
91
|
+
|
|
92
|
+
const classes = computed(() => {
|
|
93
|
+
return {
|
|
94
|
+
'bb-base-number-input': true,
|
|
95
|
+
'bb-base-number-input--disabled': props.disabled,
|
|
96
|
+
'bb-base-number-input--errors': props.hasErrors,
|
|
97
|
+
'bb-base-number-input--loading': props.loading,
|
|
98
|
+
'bb-base-number-input--readonly': props.readonly,
|
|
99
|
+
'bb-base-number-input--compact': props.compact,
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
const input = ref<HTMLInputElement | null>(null);
|
|
104
|
+
|
|
105
|
+
const nextStep = (value: number) => {
|
|
106
|
+
const base = Number(props.modelValue || 0);
|
|
107
|
+
return clamp(base + value, props.min, props.max);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const decrease = () => {
|
|
111
|
+
if (props.disabled || props.readonly) return;
|
|
112
|
+
const valueToEmit = nextStep(props.step * -1);
|
|
113
|
+
emit('decrease', valueToEmit);
|
|
114
|
+
emit('update:modelValue', valueToEmit);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const increase = () => {
|
|
118
|
+
if (props.disabled || props.readonly) return;
|
|
119
|
+
const valueToEmit = nextStep(props.step);
|
|
120
|
+
emit('increase', valueToEmit);
|
|
121
|
+
emit('update:modelValue', valueToEmit);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const onInput = (event: Event) => {
|
|
125
|
+
if (!input.value) return;
|
|
126
|
+
if (event.target instanceof HTMLInputElement) {
|
|
127
|
+
const value = event.target.value;
|
|
128
|
+
emit('input', event);
|
|
129
|
+
|
|
130
|
+
let nextInputValue = value;
|
|
131
|
+
nextInputValue = limitLength(nextInputValue);
|
|
132
|
+
nextInputValue = replaceCommaWithPeriod(nextInputValue);
|
|
133
|
+
nextInputValue = removeUnwantedSymbols(nextInputValue);
|
|
134
|
+
nextInputValue = defaultPad(nextInputValue);
|
|
135
|
+
if (isParsableString(nextInputValue)) {
|
|
136
|
+
nextInputValue = clampValue(nextInputValue);
|
|
137
|
+
}
|
|
138
|
+
let valueToEmit: null | number = null;
|
|
139
|
+
if (nextInputValue) {
|
|
140
|
+
const validString = makeValidNumberString(nextInputValue);
|
|
141
|
+
valueToEmit = clamp(Number(validString), props.min, props.max);
|
|
142
|
+
}
|
|
143
|
+
emit('update:modelValue', valueToEmit);
|
|
144
|
+
const clamped = clampPrecision(nextInputValue, props.maxPrecision);
|
|
145
|
+
input.value.value = clamped;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const onKeydown = (event: KeyboardEvent) => {
|
|
150
|
+
if (event.key === 'ArrowUp') {
|
|
151
|
+
event.preventDefault();
|
|
152
|
+
increase();
|
|
153
|
+
} else if (event.key === 'ArrowDown') {
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
decrease();
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const replaceCommaWithPeriod = (value: string): string => {
|
|
160
|
+
return value.replaceAll(',', '.');
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const removeUnwantedSymbols = (value: string): string => {
|
|
164
|
+
const noDashes = value[0] + value.slice(1).replaceAll('-', '');
|
|
165
|
+
const onlyOnePeriod = [...noDashes]
|
|
166
|
+
.reduce((acc: string[], curr: string) => {
|
|
167
|
+
if (curr === '.' && acc.includes('.')) return acc;
|
|
168
|
+
acc.push(curr);
|
|
169
|
+
return acc;
|
|
170
|
+
}, [])
|
|
171
|
+
.join('');
|
|
172
|
+
const onlyNumbers = onlyOnePeriod.replaceAll(/[^\d.-]/g, '');
|
|
173
|
+
return onlyNumbers;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const defaultPad = (value: string): string => {
|
|
177
|
+
if (value.startsWith('.') && value.length === 1) return `0.`;
|
|
178
|
+
if (value.startsWith('-.') && value.length === 2) return `-0.`;
|
|
179
|
+
return value;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const limitLength = (value: string): string => {
|
|
183
|
+
return value.slice(0, 20);
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const clampValue = (value: string): string => {
|
|
187
|
+
return clamp(Number(value), props.min, props.max).toString();
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
const isParsableString = (value: string): boolean => {
|
|
191
|
+
if (value.length === 0) return false;
|
|
192
|
+
if (value.endsWith('.')) return false;
|
|
193
|
+
if (value.endsWith('-')) return false;
|
|
194
|
+
if (value.endsWith('-0')) return false;
|
|
195
|
+
if (/\.\d*0+$/.test(value)) return false;
|
|
196
|
+
return true;
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
const makeValidNumberString = (value: string): string => {
|
|
200
|
+
let [first, second] = value.split('.');
|
|
201
|
+
first = first || '0';
|
|
202
|
+
if (!second) return first;
|
|
203
|
+
second = second?.slice(0, props.maxPrecision) || '0';
|
|
204
|
+
let unified = `${first}.${second}`;
|
|
205
|
+
return unified;
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* These events are just propagated
|
|
210
|
+
*/
|
|
211
|
+
const eventListeners = {
|
|
212
|
+
onBlur: (event: FocusEvent) => emit('blur', event),
|
|
213
|
+
onChange: (event: Event) => emit('change', event),
|
|
214
|
+
onClick: (event: MouseEvent) => emit('click', event),
|
|
215
|
+
onFocus: (event: FocusEvent) => emit('focus', event),
|
|
216
|
+
onKeydown: (event: KeyboardEvent) => {
|
|
217
|
+
onKeydown(event);
|
|
218
|
+
emit('keydown', event);
|
|
219
|
+
},
|
|
220
|
+
onKeyup: (event: KeyboardEvent) => emit('keyup', event),
|
|
221
|
+
onMousedown: (event: MouseEvent) => emit('mousedown', event),
|
|
222
|
+
onMouseup: (event: MouseEvent) => emit('mouseup', event),
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
const alignInputValue = (value: string | number | null) => {
|
|
226
|
+
if (isNil(input.value)) return;
|
|
227
|
+
|
|
228
|
+
const currentValue = input.value.value;
|
|
229
|
+
// This is triggered while the user is writing numbers like -0.75
|
|
230
|
+
if (
|
|
231
|
+
!isNil(value) &&
|
|
232
|
+
!isParsableString(currentValue) &&
|
|
233
|
+
currentValue.length > 0
|
|
234
|
+
) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
let nextValue = value;
|
|
239
|
+
if (isNil(nextValue)) {
|
|
240
|
+
nextValue = '';
|
|
241
|
+
}
|
|
242
|
+
input.value.value = nextValue?.toString() || '';
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
watchPostEffect(() => {
|
|
246
|
+
alignInputValue(props.modelValue);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
defineExpose({
|
|
250
|
+
increase,
|
|
251
|
+
decrease,
|
|
252
|
+
});
|
|
253
|
+
</script>
|
|
254
|
+
|
|
255
|
+
<style lang="postcss">
|
|
256
|
+
@import './index.css';
|
|
257
|
+
</style>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Types
|
|
261
|
+
|
|
262
|
+
```ts
|
|
263
|
+
import type { HTMLAttributes, InputHTMLAttributes } from 'vue';
|
|
264
|
+
import type { IconType } from '@/types/Icon';
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Props for the low-level number input with manual parsing, clamping, and increment/decrement helpers.
|
|
268
|
+
*/
|
|
269
|
+
export type BaseNumberInputProps = {
|
|
270
|
+
/**
|
|
271
|
+
* Name of the icon to render at the right hand side of the input.
|
|
272
|
+
*/
|
|
273
|
+
// eslint-disable-next-line vue/prop-name-casing
|
|
274
|
+
'append:icon'?: IconType;
|
|
275
|
+
/**
|
|
276
|
+
* Id(s) of descriptive elements announced by screen readers.
|
|
277
|
+
*/
|
|
278
|
+
ariaDescribedby?: InputHTMLAttributes['aria-describedby'];
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Browser autocomplete hint for the field.
|
|
282
|
+
* @defaultValue `'off'`
|
|
283
|
+
*/
|
|
284
|
+
autocomplete?: InputHTMLAttributes['autocomplete'];
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Focus the input automatically after mount.
|
|
288
|
+
*/
|
|
289
|
+
autofocus?: InputHTMLAttributes['autofocus'];
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Show a clear button whenever a value is present and the control is interactive.
|
|
293
|
+
*/
|
|
294
|
+
clearable?: boolean;
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Apply the compact density variant.
|
|
298
|
+
*/
|
|
299
|
+
compact?: boolean;
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Disable manual input and the exposed increase/decrease helpers.
|
|
303
|
+
*/
|
|
304
|
+
disabled?: boolean;
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Force the error state; also toggles `aria-invalid`.
|
|
308
|
+
*/
|
|
309
|
+
hasErrors?: boolean;
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Explicit id forwarded to the native input.
|
|
313
|
+
*/
|
|
314
|
+
id?: HTMLAttributes['id'];
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Display the loading state styles.
|
|
318
|
+
*/
|
|
319
|
+
loading?: boolean;
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Upper bound for clamping user input and helper increments.
|
|
323
|
+
* @defaultValue `Number.MAX_SAFE_INTEGER`
|
|
324
|
+
*/
|
|
325
|
+
max?: number;
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Maximum number of decimal digits retained after processing.
|
|
329
|
+
* @defaultValue `8`
|
|
330
|
+
*/
|
|
331
|
+
maxPrecision?: number;
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Lower bound for clamping user input and helper decrements.
|
|
335
|
+
* @defaultValue `Number.MIN_SAFE_INTEGER`
|
|
336
|
+
*/
|
|
337
|
+
min?: number;
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* v-model value. Accepts numbers, numeric strings, or null when empty.
|
|
341
|
+
*/
|
|
342
|
+
modelValue: number | string | null;
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Name attribute forwarded to the native input.
|
|
346
|
+
*/
|
|
347
|
+
name?: InputHTMLAttributes['name'];
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Placeholder text when no value is present.
|
|
351
|
+
*/
|
|
352
|
+
placeholder?: InputHTMLAttributes['placeholder'];
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Name of the icon to render at the left hand side of the input.
|
|
356
|
+
*/
|
|
357
|
+
// eslint-disable-next-line vue/prop-name-casing
|
|
358
|
+
'prepend:icon'?: IconType;
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Make the input read-only while keeping its value visible.
|
|
362
|
+
*/
|
|
363
|
+
readonly?: boolean;
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Mark the input as required for form validation.
|
|
367
|
+
*/
|
|
368
|
+
required?: boolean;
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Increment used by the `increase`/`decrease` helpers. Manual typing is never forced to this step.
|
|
372
|
+
* @defaultValue `1`
|
|
373
|
+
*/
|
|
374
|
+
step?: number;
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
export type BaseNumberInputEvents = {
|
|
378
|
+
/**
|
|
379
|
+
* Emitted when the native input loses focus.
|
|
380
|
+
* Forwards the original DOM `FocusEvent`.
|
|
381
|
+
*/
|
|
382
|
+
(e: 'blur', event: FocusEvent): void;
|
|
383
|
+
/**
|
|
384
|
+
* Emitted when the native input fires a change event.
|
|
385
|
+
* Forwards the original DOM `Event`.
|
|
386
|
+
*/
|
|
387
|
+
(e: 'change', event: Event): void;
|
|
388
|
+
/**
|
|
389
|
+
* Emitted when the input receives a click interaction.
|
|
390
|
+
* Forwards the original DOM `MouseEvent`.
|
|
391
|
+
*/
|
|
392
|
+
(e: 'click', event: MouseEvent): void;
|
|
393
|
+
/**
|
|
394
|
+
* Emitted by the `decrease` helper with the clamped value after decrementing by one `step`.
|
|
395
|
+
*/
|
|
396
|
+
(e: 'decrease', value: number): void;
|
|
397
|
+
/**
|
|
398
|
+
* Emitted when the native input gains focus.
|
|
399
|
+
* Forwards the original DOM `FocusEvent`.
|
|
400
|
+
*/
|
|
401
|
+
(e: 'focus', event: FocusEvent): void;
|
|
402
|
+
/**
|
|
403
|
+
* Emitted by the `increase` helper with the clamped value after incrementing by one `step`.
|
|
404
|
+
*/
|
|
405
|
+
(e: 'increase', value: number): void;
|
|
406
|
+
/**
|
|
407
|
+
* Emitted on native input events from the number input.
|
|
408
|
+
* Forwards the original DOM `Event`.
|
|
409
|
+
*/
|
|
410
|
+
(e: 'input', event: Event): void;
|
|
411
|
+
/**
|
|
412
|
+
* Emitted for keyboard interaction on the input.
|
|
413
|
+
* Forwards the original DOM `KeyboardEvent`.
|
|
414
|
+
*/
|
|
415
|
+
(e: 'keydown', event: KeyboardEvent): void;
|
|
416
|
+
/**
|
|
417
|
+
* Emitted when a key is released over the input.
|
|
418
|
+
* Forwards the original DOM `KeyboardEvent`.
|
|
419
|
+
*/
|
|
420
|
+
(e: 'keyup', event: KeyboardEvent): void;
|
|
421
|
+
/**
|
|
422
|
+
* Emitted when a pointing device button is pressed over the input.
|
|
423
|
+
* Forwards the original DOM `MouseEvent`.
|
|
424
|
+
*/
|
|
425
|
+
(e: 'mousedown', event: MouseEvent): void;
|
|
426
|
+
/**
|
|
427
|
+
* Emitted when a pointing device button is released over the input.
|
|
428
|
+
* Forwards the original DOM `MouseEvent`.
|
|
429
|
+
*/
|
|
430
|
+
(e: 'mouseup', event: MouseEvent): void;
|
|
431
|
+
/**
|
|
432
|
+
* Emitted on any value change with the parsed number or `null` when the field is empty.
|
|
433
|
+
*/
|
|
434
|
+
(e: 'update:modelValue', value: number | null): void;
|
|
435
|
+
};
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* Props exposed by the step control slots (`append`, `append-outer`, `prepend`, `prepend-outer`).
|
|
439
|
+
*/
|
|
440
|
+
export type BaseNumberInputStepSlotProps = {
|
|
441
|
+
/**
|
|
442
|
+
* Increments the value by one `step`.
|
|
443
|
+
*/
|
|
444
|
+
increase: () => void;
|
|
445
|
+
/**
|
|
446
|
+
* Decrements the value by one `step`.
|
|
447
|
+
*/
|
|
448
|
+
decrease: () => void;
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
export type BaseNumberInputSlots = {
|
|
452
|
+
/**
|
|
453
|
+
* Inline content rendered at the start of the input field area, before the typed number.
|
|
454
|
+
*/
|
|
455
|
+
prefix?: (props: object) => any;
|
|
456
|
+
/**
|
|
457
|
+
* Content rendered after the number input, at the end of the inner container.
|
|
458
|
+
* Typically used to place increment/decrement buttons next to the input.
|
|
459
|
+
*/
|
|
460
|
+
append?: (props: BaseNumberInputStepSlotProps) => any;
|
|
461
|
+
/**
|
|
462
|
+
* Content rendered after the entire input control, outside the input chrome.
|
|
463
|
+
*/
|
|
464
|
+
'append-outer'?: (props: BaseNumberInputStepSlotProps) => any;
|
|
465
|
+
/**
|
|
466
|
+
* Content rendered before the number input, at the start of the inner container.
|
|
467
|
+
*/
|
|
468
|
+
prepend?: (props: BaseNumberInputStepSlotProps) => any;
|
|
469
|
+
/**
|
|
470
|
+
* Content rendered before the entire input control, outside the input chrome.
|
|
471
|
+
*/
|
|
472
|
+
'prepend-outer'?: (props: BaseNumberInputStepSlotProps) => any;
|
|
473
|
+
/**
|
|
474
|
+
* Inline content rendered at the end of the input field area, after the typed number.
|
|
475
|
+
*/
|
|
476
|
+
suffix?: (props: object) => any;
|
|
477
|
+
};
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
## Styles
|
|
481
|
+
|
|
482
|
+
```css
|
|
483
|
+
.bb-base-number-input {
|
|
484
|
+
&--disabled {
|
|
485
|
+
}
|
|
486
|
+
&--errors {
|
|
487
|
+
}
|
|
488
|
+
&--loading {
|
|
489
|
+
}
|
|
490
|
+
&--readonly {
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
.bb-common-input-inner-container {
|
|
494
|
+
.bb-base-number-input__input {
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
&__prepend-icon,
|
|
498
|
+
&__append-icon {
|
|
499
|
+
}
|
|
500
|
+
.bb-spinner {
|
|
501
|
+
}
|
|
502
|
+
.bb-error-icon {
|
|
503
|
+
}
|
|
504
|
+
&__prefix,
|
|
505
|
+
&__suffix {
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
```
|