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,238 @@
|
|
|
1
|
+
# BbIcon
|
|
2
|
+
|
|
3
|
+
## Template & Script
|
|
4
|
+
|
|
5
|
+
```vue
|
|
6
|
+
<template>
|
|
7
|
+
<svg v-bind="iconAttributes" data-allow-mismatch v-html="content"></svg>
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<script setup lang="ts">
|
|
11
|
+
import {
|
|
12
|
+
computed,
|
|
13
|
+
inject,
|
|
14
|
+
ref,
|
|
15
|
+
getCurrentInstance,
|
|
16
|
+
onServerPrefetch,
|
|
17
|
+
onBeforeMount,
|
|
18
|
+
watch,
|
|
19
|
+
} from 'vue';
|
|
20
|
+
import { isCssColor } from '@/utilities/functions/isCssColor';
|
|
21
|
+
import { get } from '@/utilities/functions/get';
|
|
22
|
+
import { useLogger } from '@/composables/useLogger';
|
|
23
|
+
import type { BbIconProps, Size } from './types';
|
|
24
|
+
export type { BbIconProps, Size };
|
|
25
|
+
|
|
26
|
+
const props = withDefaults(defineProps<BbIconProps>(), {
|
|
27
|
+
size: 'md',
|
|
28
|
+
});
|
|
29
|
+
const logger = useLogger();
|
|
30
|
+
let icons = ref<Record<string, () => Promise<string>>>();
|
|
31
|
+
const icon = ref<string | null>(null);
|
|
32
|
+
const content = computed(() => {
|
|
33
|
+
if (icon.value) {
|
|
34
|
+
return icon.value.replace(/<\/?svg[^>]*>/g, '');
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// @ts-expect-error possibily undef
|
|
40
|
+
const isNuxt = !!get(getCurrentInstance(), ['proxy', '$nuxt']);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Loads the icon registry based on the current environment (Nuxt or Vue).
|
|
44
|
+
* In Nuxt, uses the injected $icons from the Nuxt context.
|
|
45
|
+
* In Vue, uses the injected 'icons' provider.
|
|
46
|
+
* Only loads icons once to prevent redundant operations.
|
|
47
|
+
* Throws an error if icons cannot be loaded in the current environment.
|
|
48
|
+
*/
|
|
49
|
+
const loadIcons = () => {
|
|
50
|
+
if (isNuxt) {
|
|
51
|
+
// @ts-expect-error possibily undef
|
|
52
|
+
icons.value = get(getCurrentInstance(), ['proxy', '$nuxt', '$icons']);
|
|
53
|
+
if (!icons.value) {
|
|
54
|
+
logger.throw(
|
|
55
|
+
'Failed to load Nuxt icons. Make sure the icon provider is properly configured.'
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
icons.value = inject('icons');
|
|
62
|
+
if (!icons.value) {
|
|
63
|
+
logger.throw(
|
|
64
|
+
'Failed to inject icons. Make sure the icon provider is properly configured in the Vue app.'
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Retrieves and loads the SVG content for the specified icon type.
|
|
71
|
+
* Throws an error if icons haven't been loaded or if the icon type doesn't exist.
|
|
72
|
+
*/
|
|
73
|
+
const getIcon = async () => {
|
|
74
|
+
if (!icons.value) {
|
|
75
|
+
logger.throw('Icons have not been loaded');
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const iconLoader = icons.value![props.type];
|
|
79
|
+
if (!iconLoader) {
|
|
80
|
+
logger.throw(`Icon "${props.type}" does not exist.`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
icon.value = await iconLoader();
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
onServerPrefetch(async () => {
|
|
87
|
+
loadIcons();
|
|
88
|
+
await getIcon();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
onBeforeMount(async () => {
|
|
92
|
+
if (!icons.value) {
|
|
93
|
+
loadIcons();
|
|
94
|
+
}
|
|
95
|
+
if (!icon.value) {
|
|
96
|
+
await getIcon();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
watch(() => props.type, getIcon);
|
|
101
|
+
|
|
102
|
+
const sizeMap: Size = {
|
|
103
|
+
xs: 12,
|
|
104
|
+
sm: 16,
|
|
105
|
+
md: 24,
|
|
106
|
+
lg: 28,
|
|
107
|
+
xl: 36,
|
|
108
|
+
xxl: 40,
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Computes the width of the icon in pixels based on the size prop.
|
|
113
|
+
* Supports predefined size keys, numeric values, or custom pixel strings.
|
|
114
|
+
*/
|
|
115
|
+
const iconWidth = computed(() => {
|
|
116
|
+
if (typeof props.size === 'number') {
|
|
117
|
+
return `${props.size}px`;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (typeof props.size === 'string') {
|
|
121
|
+
const mappedSize = sizeMap[props.size as keyof Size];
|
|
122
|
+
if (mappedSize !== undefined) {
|
|
123
|
+
return `${mappedSize}px`;
|
|
124
|
+
}
|
|
125
|
+
const parsed = parseInt(props.size, 10);
|
|
126
|
+
if (isNaN(parsed)) {
|
|
127
|
+
logger.throw(`Invalid size: "${props.size}"`);
|
|
128
|
+
}
|
|
129
|
+
return `${parsed}px`;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return '24px';
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Computes the attributes object for the icon span element.
|
|
137
|
+
* Includes CSS classes, inline styles, and accessibility attributes.
|
|
138
|
+
*/
|
|
139
|
+
const iconAttributes = computed(() => {
|
|
140
|
+
const classes: Record<string, boolean> = {
|
|
141
|
+
'bb-icon': true,
|
|
142
|
+
};
|
|
143
|
+
const style: Record<string, string> = {
|
|
144
|
+
'--bb-icon-dimensions-w': iconWidth.value,
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
if (props.color) {
|
|
148
|
+
if (isCssColor(props.color)) {
|
|
149
|
+
style.color = props.color;
|
|
150
|
+
} else {
|
|
151
|
+
classes[`bb-icon--${props.color}`] = true;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const inheritedAttributes: Record<string, any> = {};
|
|
156
|
+
if (icon.value) {
|
|
157
|
+
const attrString = icon.value.split('>')[0].substring(5); // all attributes in the opening svg tag
|
|
158
|
+
const attrRegex = /([\w-]+)="([^"]*)"/g;
|
|
159
|
+
let match;
|
|
160
|
+
while ((match = attrRegex.exec(attrString)) !== null) {
|
|
161
|
+
inheritedAttributes[match[1]] = match[2];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const base: Record<string, any> = {
|
|
166
|
+
viewBox: '0 0 1 1',
|
|
167
|
+
...inheritedAttributes,
|
|
168
|
+
class: classes,
|
|
169
|
+
style,
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// Determine if the icon should be accessible to screen readers
|
|
173
|
+
const hasAccessibleLabel = props.label;
|
|
174
|
+
|
|
175
|
+
if (hasAccessibleLabel) {
|
|
176
|
+
// Icon has a meaningful label - make it accessible
|
|
177
|
+
base['role'] = 'img';
|
|
178
|
+
base['aria-label'] = props.label.trim();
|
|
179
|
+
// Add title as fallback for older screen readers and tooltip behavior
|
|
180
|
+
base['title'] = props.label.trim();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Icons should never be focusable or keyboard navigable since they're not interactive
|
|
184
|
+
base['focusable'] = 'false';
|
|
185
|
+
|
|
186
|
+
return base;
|
|
187
|
+
});
|
|
188
|
+
</script>
|
|
189
|
+
|
|
190
|
+
<style lang="postcss">
|
|
191
|
+
@import './index.css';
|
|
192
|
+
</style>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Types
|
|
196
|
+
|
|
197
|
+
```ts
|
|
198
|
+
import type { Size as S } from '@/types/CommonProps';
|
|
199
|
+
import type { IconType } from '@/types/Icon';
|
|
200
|
+
|
|
201
|
+
export type Size = {
|
|
202
|
+
xs: number;
|
|
203
|
+
sm: number;
|
|
204
|
+
md: number;
|
|
205
|
+
lg: number;
|
|
206
|
+
xl: number;
|
|
207
|
+
xxl: number;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export interface BbIconProps extends S<Size> {
|
|
211
|
+
/**
|
|
212
|
+
* Define a color for the component.
|
|
213
|
+
*
|
|
214
|
+
* Either a custom color or a coded color in common HEX, RGB, etc... format.
|
|
215
|
+
*/
|
|
216
|
+
color?: string;
|
|
217
|
+
/**
|
|
218
|
+
* Label of the icon for accessibility.
|
|
219
|
+
*/
|
|
220
|
+
label?: string;
|
|
221
|
+
/**
|
|
222
|
+
* Name of the icon to use.
|
|
223
|
+
*
|
|
224
|
+
* @defaultValue `'md'`
|
|
225
|
+
*/
|
|
226
|
+
type: IconType;
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## Styles
|
|
231
|
+
|
|
232
|
+
```css
|
|
233
|
+
.bb-icon {
|
|
234
|
+
--size: var(--bb-icon-dimensions-w);
|
|
235
|
+
width: var(--size);
|
|
236
|
+
pointer-events: none;
|
|
237
|
+
}
|
|
238
|
+
```
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# BbIntersection
|
|
2
|
+
|
|
3
|
+
## Template & Script
|
|
4
|
+
|
|
5
|
+
```vue
|
|
6
|
+
<template>
|
|
7
|
+
<component :is="tag" ref="infinitescrolltrigger" class="bb-intersection">
|
|
8
|
+
<slot :hidden="hidden" :percentage="percentage" :shown="shown"></slot>
|
|
9
|
+
</component>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script setup lang="ts">
|
|
13
|
+
import { throttle } from '@/utilities/functions/throttle';
|
|
14
|
+
import { onBeforeUnmount, onMounted, ref } from 'vue';
|
|
15
|
+
import type {
|
|
16
|
+
BbIntersectionProps,
|
|
17
|
+
BbIntersectionEvents,
|
|
18
|
+
BbIntersectionSlots,
|
|
19
|
+
} from './types';
|
|
20
|
+
export type { BbIntersectionProps, BbIntersectionEvents, BbIntersectionSlots };
|
|
21
|
+
|
|
22
|
+
const props = withDefaults(defineProps<BbIntersectionProps>(), {
|
|
23
|
+
debounceTime: 0,
|
|
24
|
+
options: () => ({
|
|
25
|
+
root: null,
|
|
26
|
+
threshold: [0, 0.2, 0.4, 0.6, 0.8, 1],
|
|
27
|
+
}),
|
|
28
|
+
tag: 'div',
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const emit = defineEmits<BbIntersectionEvents>();
|
|
32
|
+
|
|
33
|
+
defineSlots<BbIntersectionSlots>();
|
|
34
|
+
|
|
35
|
+
const observer = ref<IntersectionObserver | null>(null);
|
|
36
|
+
const infinitescrolltrigger = ref<Element | null>(null);
|
|
37
|
+
const shown = ref(false);
|
|
38
|
+
const hidden = ref(true);
|
|
39
|
+
const percentage = ref(0);
|
|
40
|
+
|
|
41
|
+
onMounted(() => {
|
|
42
|
+
observer.value = new IntersectionObserver((entries) => {
|
|
43
|
+
handleIntersect(entries[0]);
|
|
44
|
+
}, props.options);
|
|
45
|
+
if (infinitescrolltrigger.value) {
|
|
46
|
+
observer.value.observe(infinitescrolltrigger.value);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
onBeforeUnmount(() => {
|
|
50
|
+
if (observer.value) observer.value.disconnect();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const handleIntersect = throttle((entry: IntersectionObserverEntry) => {
|
|
54
|
+
if (entry.isIntersecting) {
|
|
55
|
+
percentage.value = Math.trunc(entry.intersectionRatio * 100);
|
|
56
|
+
if (entry.intersectionRatio === 1) {
|
|
57
|
+
shown.value = true;
|
|
58
|
+
hidden.value = false;
|
|
59
|
+
emit('shown');
|
|
60
|
+
} else {
|
|
61
|
+
shown.value = false;
|
|
62
|
+
hidden.value = false;
|
|
63
|
+
emitIntersected(Math.trunc(entry.intersectionRatio * 100));
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
shown.value = false;
|
|
67
|
+
hidden.value = true;
|
|
68
|
+
emit('hidden');
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const emitIntersected = throttle((percentage: number) => {
|
|
73
|
+
emit('intersected', percentage);
|
|
74
|
+
}, props.debounceTime);
|
|
75
|
+
</script>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Types
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
import type { NonVoidElementTag } from '@/types/CommonProps';
|
|
82
|
+
|
|
83
|
+
export type BbIntersectionProps = {
|
|
84
|
+
/**
|
|
85
|
+
* Time to wait before emitting intersection value.
|
|
86
|
+
*
|
|
87
|
+
* @defaultValue `0`
|
|
88
|
+
*/
|
|
89
|
+
debounceTime?: number;
|
|
90
|
+
/**
|
|
91
|
+
* Options used to configure the IntersectionObserver.
|
|
92
|
+
*/
|
|
93
|
+
options?: IntersectionObserverInit; // eslint-disable-line no-undef
|
|
94
|
+
} & NonVoidElementTag;
|
|
95
|
+
|
|
96
|
+
export type BbIntersectionEvents = {
|
|
97
|
+
/** Emitted when the element becomes fully visible in the viewport. */
|
|
98
|
+
(e: 'shown'): void;
|
|
99
|
+
/** Emitted when the element leaves the viewport entirely. */
|
|
100
|
+
(e: 'hidden'): void;
|
|
101
|
+
/** Emitted when the intersection ratio changes. Payload is the ratio as a percentage (0–100). */
|
|
102
|
+
(e: 'intersected', value: number): void;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/** Props exposed by the `default` slot. */
|
|
106
|
+
export type BbIntersectionDefaultSlotProps = {
|
|
107
|
+
/** Whether the component is currently fully out of the viewport. */
|
|
108
|
+
hidden: boolean;
|
|
109
|
+
/** The current intersection ratio as a percentage (0–100). */
|
|
110
|
+
percentage: number;
|
|
111
|
+
/** Whether the component is currently at least partially visible. */
|
|
112
|
+
shown: boolean;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export type BbIntersectionSlots = {
|
|
116
|
+
/**
|
|
117
|
+
* Content rendered inside the observed element. Receives live intersection state.
|
|
118
|
+
*/
|
|
119
|
+
default?: (props: BbIntersectionDefaultSlotProps) => any;
|
|
120
|
+
};
|
|
121
|
+
```
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
# BbNumberInput
|
|
2
|
+
|
|
3
|
+
## Template & Script
|
|
4
|
+
|
|
5
|
+
```vue
|
|
6
|
+
<template>
|
|
7
|
+
<BaseInputContainer
|
|
8
|
+
:id="id"
|
|
9
|
+
class="bb-number-input"
|
|
10
|
+
:compact="compact"
|
|
11
|
+
:direction="direction"
|
|
12
|
+
:errors="errors"
|
|
13
|
+
:has-errors="hasErrors"
|
|
14
|
+
:hide-label="hideLabel"
|
|
15
|
+
:hint="hint"
|
|
16
|
+
:label="label"
|
|
17
|
+
:label-position="labelPosition"
|
|
18
|
+
:model-value="modelValue"
|
|
19
|
+
:name="name"
|
|
20
|
+
:reverse="reverse"
|
|
21
|
+
:show-hint="showHint"
|
|
22
|
+
>
|
|
23
|
+
<template #label="data"><slot name="label" v-bind="data"></slot></template>
|
|
24
|
+
<template #input="{ id, hasErrors, ariaDescribedby }">
|
|
25
|
+
<BaseNumberInput
|
|
26
|
+
:id="id"
|
|
27
|
+
ref="bni"
|
|
28
|
+
:append:icon="props['append:icon']"
|
|
29
|
+
:aria-describedby="ariaDescribedby"
|
|
30
|
+
:autocomplete="autocomplete"
|
|
31
|
+
:autofocus="autofocus"
|
|
32
|
+
:clearable="clearable"
|
|
33
|
+
:compact="compact"
|
|
34
|
+
:disabled="disabled"
|
|
35
|
+
:has-errors="hasErrors"
|
|
36
|
+
:loading="loading"
|
|
37
|
+
:max="max"
|
|
38
|
+
:max-precision="maxPrecision"
|
|
39
|
+
:min="min"
|
|
40
|
+
:model-value="modelValue"
|
|
41
|
+
:name="name"
|
|
42
|
+
:placeholder="placeholder"
|
|
43
|
+
:prepend:icon="props['prepend:icon']"
|
|
44
|
+
:readonly="readonly"
|
|
45
|
+
:required="required"
|
|
46
|
+
:step="step"
|
|
47
|
+
v-bind="eventListeners"
|
|
48
|
+
>
|
|
49
|
+
<template #append-outer="data"
|
|
50
|
+
><slot name="append-outer" v-bind="data"
|
|
51
|
+
/></template>
|
|
52
|
+
<template #append="data"><slot name="append" v-bind="data" /></template>
|
|
53
|
+
<template #prefix="data"><slot name="prefix" v-bind="data" /></template>
|
|
54
|
+
<template #prepend="data"
|
|
55
|
+
><slot name="prepend" v-bind="data"
|
|
56
|
+
/></template>
|
|
57
|
+
<template #suffix="data"><slot name="suffix" v-bind="data" /></template>
|
|
58
|
+
<template #prepend-outer="data"
|
|
59
|
+
><slot name="prepend-outer" v-bind="data"
|
|
60
|
+
/></template>
|
|
61
|
+
</BaseNumberInput>
|
|
62
|
+
</template>
|
|
63
|
+
</BaseInputContainer>
|
|
64
|
+
</template>
|
|
65
|
+
|
|
66
|
+
<script setup lang="ts">
|
|
67
|
+
import BaseInputContainer from '../BaseInputContainer/BaseInputContainer.vue';
|
|
68
|
+
import BaseNumberInput from '../BaseNumberInput/BaseNumberInput.vue';
|
|
69
|
+
import type { BaseNumberInputEvents } from '../BaseNumberInput/types';
|
|
70
|
+
import { computed, ref } from 'vue';
|
|
71
|
+
import type {
|
|
72
|
+
BbNumberInputProps,
|
|
73
|
+
BbNumberInputEvents,
|
|
74
|
+
BbNumberInputSlots,
|
|
75
|
+
} from './types';
|
|
76
|
+
export type { BbNumberInputProps, BbNumberInputEvents, BbNumberInputSlots };
|
|
77
|
+
|
|
78
|
+
const props = withDefaults(defineProps<BbNumberInputProps>(), {});
|
|
79
|
+
|
|
80
|
+
const emit = defineEmits<BaseNumberInputEvents>();
|
|
81
|
+
|
|
82
|
+
defineSlots<BbNumberInputSlots>();
|
|
83
|
+
|
|
84
|
+
const bni = ref();
|
|
85
|
+
|
|
86
|
+
const active = ref(false);
|
|
87
|
+
const showHint = computed(() => props.persistentHint || active.value);
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* These events are just propagated
|
|
91
|
+
*/
|
|
92
|
+
const eventListeners = {
|
|
93
|
+
onBlur: (event: FocusEvent) => {
|
|
94
|
+
active.value = false;
|
|
95
|
+
emit('blur', event);
|
|
96
|
+
},
|
|
97
|
+
onChange: (event: Event) => emit('change', event),
|
|
98
|
+
onClick: (event: MouseEvent) => emit('click', event),
|
|
99
|
+
onDecrease: (event: number) => emit('decrease', event),
|
|
100
|
+
onFocus: (event: FocusEvent) => {
|
|
101
|
+
active.value = true;
|
|
102
|
+
emit('focus', event);
|
|
103
|
+
},
|
|
104
|
+
onIncrease: (event: number) => emit('increase', event),
|
|
105
|
+
onInput: (event: Event) => emit('input', event),
|
|
106
|
+
onKeydown: (event: KeyboardEvent) => emit('keydown', event),
|
|
107
|
+
onMousedown: (event: MouseEvent) => emit('mousedown', event),
|
|
108
|
+
onMouseup: (event: MouseEvent) => emit('mouseup', event),
|
|
109
|
+
'onUpdate:modelValue': (value: number | null) =>
|
|
110
|
+
emit('update:modelValue', value),
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const decrease = () => {
|
|
114
|
+
bni.value?.decrease();
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const increase = () => {
|
|
118
|
+
bni.value?.increase();
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
defineExpose({
|
|
122
|
+
increase,
|
|
123
|
+
decrease,
|
|
124
|
+
});
|
|
125
|
+
</script>
|
|
126
|
+
|
|
127
|
+
<style lang="postcss">
|
|
128
|
+
@import './index.css';
|
|
129
|
+
</style>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Types
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
import type { HTMLAttributes, InputHTMLAttributes } from 'vue';
|
|
136
|
+
import type { IconType } from '@/types/Icon';
|
|
137
|
+
import type {
|
|
138
|
+
BaseNumberInputEvents,
|
|
139
|
+
BaseNumberInputSlots,
|
|
140
|
+
} from '../BaseNumberInput/types';
|
|
141
|
+
|
|
142
|
+
export type BbNumberInputProps = {
|
|
143
|
+
/**
|
|
144
|
+
* Name of the icon to be added at the end of the input.
|
|
145
|
+
*/
|
|
146
|
+
// eslint-disable-next-line vue/prop-name-casing
|
|
147
|
+
'append:icon'?: IconType;
|
|
148
|
+
/**
|
|
149
|
+
* Guides the browser as to the type of information expected in the field.
|
|
150
|
+
*/
|
|
151
|
+
autocomplete?: InputHTMLAttributes['autocomplete'];
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Sets autofocus on page load.
|
|
155
|
+
*/
|
|
156
|
+
autofocus?: InputHTMLAttributes['autofocus'];
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Displays a clear button when the input has a value and is being interacted with.
|
|
160
|
+
*/
|
|
161
|
+
clearable?: boolean;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Sets the component in a compact state.
|
|
165
|
+
*/
|
|
166
|
+
compact?: boolean;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Direction of the layout of the component. Can either be a predefined value or a pattern separated by a space like `xx xxxxx`.
|
|
170
|
+
*/
|
|
171
|
+
direction?: 'horizontal' | 'vertical' | 'auto' | string;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Disables the component.
|
|
175
|
+
*/
|
|
176
|
+
disabled?: boolean;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Can be a string or an array of string containing the messages to display.
|
|
180
|
+
*/
|
|
181
|
+
errors?: string | string[];
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Define if the component should be in an error state.
|
|
185
|
+
* It usually attaches a CSS class for styling purposes.
|
|
186
|
+
*/
|
|
187
|
+
hasErrors?: boolean;
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Visually hides the label of the input while maintaining accessibility.
|
|
191
|
+
*/
|
|
192
|
+
hideLabel?: boolean;
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Text box to be displayed near the input, usually to indicate instructions.
|
|
196
|
+
*/
|
|
197
|
+
hint?: string;
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* The identifier of the component.
|
|
201
|
+
*/
|
|
202
|
+
id?: HTMLAttributes['id'];
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Text content of the label of the element.
|
|
206
|
+
*/
|
|
207
|
+
label: string;
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Sets the text alignment of the label.
|
|
211
|
+
*/
|
|
212
|
+
labelPosition?: 'left' | 'center' | 'right';
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Sets the component in a loading state, usually triggering some visual styles.
|
|
216
|
+
*/
|
|
217
|
+
loading?: boolean;
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Maximum value cap.
|
|
221
|
+
*/
|
|
222
|
+
max?: number;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Maximum precision of the number.
|
|
226
|
+
*/
|
|
227
|
+
maxPrecision?: number;
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Minimum value cap.
|
|
231
|
+
*/
|
|
232
|
+
min?: number;
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Used by v-model.
|
|
236
|
+
*/
|
|
237
|
+
modelValue: number | string | null;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Defines the name of the input.
|
|
241
|
+
*/
|
|
242
|
+
name?: InputHTMLAttributes['name'];
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Keeps the hint displayed.
|
|
246
|
+
*/
|
|
247
|
+
persistentHint?: boolean;
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* String displayed when there's no data.
|
|
251
|
+
*/
|
|
252
|
+
placeholder?: InputHTMLAttributes['placeholder'];
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Name of the icon to be added at the start of the input.
|
|
256
|
+
*/
|
|
257
|
+
// eslint-disable-next-line vue/prop-name-casing
|
|
258
|
+
'prepend:icon'?: IconType;
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Sets the input in a readonly state.
|
|
262
|
+
*/
|
|
263
|
+
readonly?: boolean;
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Sets the input as required.
|
|
267
|
+
*/
|
|
268
|
+
required?: boolean;
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Reverses the layout. Applicable in every direction the order of the label and the input is swapped.
|
|
272
|
+
*/
|
|
273
|
+
reverse?: boolean;
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Incremental unit used in the exposed `increase` and `decrease` functions.
|
|
277
|
+
* It is NOT applied to manual input as a step of 5 would prevent the user from inserting a value like `115` because of rounding down.
|
|
278
|
+
*/
|
|
279
|
+
step?: number;
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
/** Re-export for consumers importing events type from BbNumberInput. */
|
|
283
|
+
export type { BaseNumberInputEvents as BbNumberInputEvents };
|
|
284
|
+
|
|
285
|
+
/** Props exposed by the `label` slot. */
|
|
286
|
+
export type BbNumberInputLabelSlotProps = {
|
|
287
|
+
/** The `label` prop value. */
|
|
288
|
+
text: string;
|
|
289
|
+
/** Whether the input is in an error state. */
|
|
290
|
+
hasErrors: boolean;
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
export type BbNumberInputSlots = BaseNumberInputSlots & {
|
|
294
|
+
/**
|
|
295
|
+
* Replaces the default label text rendered above the number input.
|
|
296
|
+
*/
|
|
297
|
+
label?: (props: BbNumberInputLabelSlotProps) => any;
|
|
298
|
+
};
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## Styles
|
|
302
|
+
|
|
303
|
+
```css
|
|
304
|
+
.bb-number-input {
|
|
305
|
+
&.bb-base-input-outer-container--errors {
|
|
306
|
+
}
|
|
307
|
+
&.bb-base-input-outer-container--hint {
|
|
308
|
+
}
|
|
309
|
+
.bb-base-input-container {
|
|
310
|
+
&--vertical {
|
|
311
|
+
}
|
|
312
|
+
&--horizontal {
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
&__label {
|
|
316
|
+
&--left {
|
|
317
|
+
}
|
|
318
|
+
&--center {
|
|
319
|
+
}
|
|
320
|
+
&--right {
|
|
321
|
+
}
|
|
322
|
+
&--hidden {
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
&__input {
|
|
326
|
+
&--left {
|
|
327
|
+
}
|
|
328
|
+
&--center {
|
|
329
|
+
}
|
|
330
|
+
&--right {
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.bb-base-number-input {
|
|
334
|
+
display: inline-flex;
|
|
335
|
+
&--disabled {
|
|
336
|
+
}
|
|
337
|
+
&--errors {
|
|
338
|
+
}
|
|
339
|
+
&--loading {
|
|
340
|
+
}
|
|
341
|
+
&--readonly {
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.bb-common-input-inner-container {
|
|
345
|
+
> input {
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
&__prepend-icon,
|
|
349
|
+
&__append-icon {
|
|
350
|
+
}
|
|
351
|
+
.bb-spinner {
|
|
352
|
+
}
|
|
353
|
+
.bb-error-icon {
|
|
354
|
+
}
|
|
355
|
+
&__prefix,
|
|
356
|
+
&__suffix {
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
&__hint-container {
|
|
363
|
+
.bb-base-input-container__hint {
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
&__errors {
|
|
367
|
+
}
|
|
368
|
+
&__error {
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
```
|