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,448 @@
|
|
|
1
|
+
# BaseButton
|
|
2
|
+
|
|
3
|
+
## Template & Script
|
|
4
|
+
|
|
5
|
+
```vue
|
|
6
|
+
<template>
|
|
7
|
+
<RouterComponent v-if="asRouting" :class="classes" v-bind="attributes"
|
|
8
|
+
><slot>{{ text }}</slot></RouterComponent
|
|
9
|
+
>
|
|
10
|
+
<component :is="'a'" v-else-if="asLink" :class="classes" v-bind="attributes"
|
|
11
|
+
><slot>{{ text }}</slot></component
|
|
12
|
+
>
|
|
13
|
+
<component :is="tag" v-else :class="classes" v-bind="attributes"
|
|
14
|
+
><slot>{{ text }}</slot></component
|
|
15
|
+
>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script setup lang="ts">
|
|
19
|
+
/**
|
|
20
|
+
* BaseButton Component
|
|
21
|
+
*
|
|
22
|
+
* A polymorphic button component that adapts its rendering based on props and framework context.
|
|
23
|
+
*
|
|
24
|
+
* Rendering Strategy (priority order):
|
|
25
|
+
* 1. RouterComponent: When `to` is provided or `href` with Inertia (without target)
|
|
26
|
+
* - Handles Vue Router links, Nuxt links, and Inertia links
|
|
27
|
+
* 2. Anchor (<a>): When `href` is provided (with target) or disabled router link
|
|
28
|
+
* - Regular HTML links, typically for external navigation
|
|
29
|
+
* 3. Native Element: Defaults to <button>, or custom element via `tag` prop
|
|
30
|
+
* - Standard buttons or custom interactive elements
|
|
31
|
+
*
|
|
32
|
+
* Framework Compatibility:
|
|
33
|
+
* - Vue 3 + Vue Router: Standard SPA routing
|
|
34
|
+
* - Nuxt.js: Uses NuxtLink for routing
|
|
35
|
+
* - Inertia.js: Uses Inertia Link for server-driven SPA navigation
|
|
36
|
+
*
|
|
37
|
+
* Note: Component resolution for RouterComponent happens at setup time (not computed)
|
|
38
|
+
* to maintain compatibility with Nuxt's component resolution system.
|
|
39
|
+
*/
|
|
40
|
+
import { computed, getCurrentInstance } from 'vue';
|
|
41
|
+
import RouterComponent from './RouterComponent.vue';
|
|
42
|
+
import { useFrameworkDetection } from '@/composables/useFrameworkDetection';
|
|
43
|
+
import { _config } from '@/composables/useBbConfig';
|
|
44
|
+
import type { BaseButtonProps, BaseButtonSlots } from './types';
|
|
45
|
+
|
|
46
|
+
const props = withDefaults(defineProps<BaseButtonProps>(), {
|
|
47
|
+
tag: 'button',
|
|
48
|
+
type: 'button',
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
defineSlots<BaseButtonSlots>();
|
|
52
|
+
|
|
53
|
+
const { isInertia } = useFrameworkDetection();
|
|
54
|
+
const instance = getCurrentInstance();
|
|
55
|
+
|
|
56
|
+
const inertiaPathname = computed(() => {
|
|
57
|
+
const url = instance?.proxy?.$page?.url;
|
|
58
|
+
if (!url) return undefined;
|
|
59
|
+
try {
|
|
60
|
+
return new URL(url, 'http://localhost').pathname;
|
|
61
|
+
} catch {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const isExactActive = computed(() => {
|
|
67
|
+
if (!isInertia || !props.href || !inertiaPathname.value) return false;
|
|
68
|
+
try {
|
|
69
|
+
return (
|
|
70
|
+
new URL(props.href, 'http://localhost').pathname === inertiaPathname.value
|
|
71
|
+
);
|
|
72
|
+
} catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const isActive = computed(() => {
|
|
78
|
+
if (!isInertia || !props.href || !inertiaPathname.value) return false;
|
|
79
|
+
try {
|
|
80
|
+
return inertiaPathname.value.startsWith(
|
|
81
|
+
new URL(props.href, 'http://localhost').pathname
|
|
82
|
+
);
|
|
83
|
+
} catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Determines if the component should render as a routing component (Inertia/Vue Router).
|
|
90
|
+
*
|
|
91
|
+
* Note: Inertia links with a `target` attribute fall back to regular anchors because
|
|
92
|
+
* Inertia cannot handle external links that open in new windows/tabs. This ensures
|
|
93
|
+
* external links (e.g., href="google.com" target="_blank") work as expected.
|
|
94
|
+
*/
|
|
95
|
+
const asRouting = computed(() => {
|
|
96
|
+
// Use Inertia routing only if no target (external links need regular anchors)
|
|
97
|
+
if (props.href && isInertia && !props.disabled && !props.target) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
if (props.to && !props.disabled) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
return false;
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Determines if the component should render as a regular anchor tag.
|
|
108
|
+
*
|
|
109
|
+
* This includes:
|
|
110
|
+
* - Links with `href` that don't qualify for Inertia routing (see asRouting)
|
|
111
|
+
* - Disabled router links (`to` with `disabled`), which fall back to anchors
|
|
112
|
+
* to maintain link semantics while preventing navigation
|
|
113
|
+
*/
|
|
114
|
+
const asLink = computed(() => {
|
|
115
|
+
if (props.href || (props.to && props.disabled)) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const resolvedActiveClass = computed(
|
|
122
|
+
() => props.activeClass ?? _config.linkActiveClass
|
|
123
|
+
);
|
|
124
|
+
const resolvedExactActiveClass = computed(
|
|
125
|
+
() => props.exactActiveClass ?? _config.linkExactActiveClass
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
const classes = computed(() => ({
|
|
129
|
+
'base-btn': true,
|
|
130
|
+
'base-btn--block': props.block,
|
|
131
|
+
'base-btn--disabled': props.disabled,
|
|
132
|
+
[resolvedActiveClass.value]: isActive.value,
|
|
133
|
+
[resolvedExactActiveClass.value]: isExactActive.value,
|
|
134
|
+
}));
|
|
135
|
+
|
|
136
|
+
type PossibleAttributes = {
|
|
137
|
+
activeClass: BaseButtonProps['activeClass'];
|
|
138
|
+
'aria-disabled': boolean;
|
|
139
|
+
ariaCurrentValue: BaseButtonProps['ariaCurrentValue'];
|
|
140
|
+
data: BaseButtonProps['data'];
|
|
141
|
+
disabled: boolean;
|
|
142
|
+
exactActiveClass: BaseButtonProps['exactActiveClass'];
|
|
143
|
+
headers: BaseButtonProps['headers'];
|
|
144
|
+
href: string | null;
|
|
145
|
+
method: BaseButtonProps['method'];
|
|
146
|
+
onBefore: BaseButtonProps['onBefore'];
|
|
147
|
+
onCancel: BaseButtonProps['onCancel'];
|
|
148
|
+
onCancelToken: BaseButtonProps['onCancelToken'];
|
|
149
|
+
onFinish: BaseButtonProps['onFinish'];
|
|
150
|
+
only: BaseButtonProps['only'];
|
|
151
|
+
onProgress: BaseButtonProps['onProgress'];
|
|
152
|
+
onStart: BaseButtonProps['onStart'];
|
|
153
|
+
onSuccess: BaseButtonProps['onSuccess'];
|
|
154
|
+
preserveScroll: BaseButtonProps['preserveScroll'];
|
|
155
|
+
preserveState: BaseButtonProps['preserveState'];
|
|
156
|
+
queryStringArrayFormat: BaseButtonProps['queryStringArrayFormat'];
|
|
157
|
+
replace: BaseButtonProps['replace'];
|
|
158
|
+
role: string;
|
|
159
|
+
target: string;
|
|
160
|
+
to: BaseButtonProps['to'];
|
|
161
|
+
type: string;
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Returns attributes for native button rendering
|
|
166
|
+
*/
|
|
167
|
+
const getNativeButtonAttributes = (): Partial<PossibleAttributes> => {
|
|
168
|
+
return {
|
|
169
|
+
disabled: props.disabled,
|
|
170
|
+
type: props.type,
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Returns attributes for anchor/Inertia link rendering
|
|
176
|
+
*/
|
|
177
|
+
const getAnchorAttributes = (): Partial<PossibleAttributes> => {
|
|
178
|
+
// When rendering as anchor, prevent navigation if disabled
|
|
179
|
+
// https://getbootstrap.com/docs/4.0/components/buttons/#disabled-state
|
|
180
|
+
if (props.disabled) {
|
|
181
|
+
return {
|
|
182
|
+
'aria-disabled': true,
|
|
183
|
+
role: 'link',
|
|
184
|
+
href: null,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Only attach href to active links
|
|
189
|
+
// https://www.scottohara.me/blog/2021/05/28/disabled-links.html
|
|
190
|
+
const attrs: Partial<PossibleAttributes> = {
|
|
191
|
+
href: props.href,
|
|
192
|
+
target: props.target,
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// Attach Inertia-specific props if in Inertia context
|
|
196
|
+
if (isInertia) {
|
|
197
|
+
attrs.data = props.data;
|
|
198
|
+
attrs.headers = props.headers;
|
|
199
|
+
attrs.method = props.method;
|
|
200
|
+
attrs.onBefore = props.onBefore;
|
|
201
|
+
attrs.onCancel = props.onCancel;
|
|
202
|
+
attrs.onCancelToken = props.onCancelToken;
|
|
203
|
+
attrs.onFinish = props.onFinish;
|
|
204
|
+
attrs.only = props.only;
|
|
205
|
+
attrs.onProgress = props.onProgress;
|
|
206
|
+
attrs.onStart = props.onStart;
|
|
207
|
+
attrs.onSuccess = props.onSuccess;
|
|
208
|
+
attrs.preserveScroll = props.preserveScroll;
|
|
209
|
+
attrs.preserveState = props.preserveState;
|
|
210
|
+
attrs.queryStringArrayFormat = props.queryStringArrayFormat;
|
|
211
|
+
attrs.replace = props.replace;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return attrs;
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Returns attributes for Vue Router link rendering
|
|
219
|
+
*/
|
|
220
|
+
const getRouterAttributes = (): Partial<PossibleAttributes> => {
|
|
221
|
+
return {
|
|
222
|
+
activeClass: resolvedActiveClass.value,
|
|
223
|
+
ariaCurrentValue: props.ariaCurrentValue,
|
|
224
|
+
exactActiveClass: resolvedExactActiveClass.value,
|
|
225
|
+
replace: props.replace,
|
|
226
|
+
target: props.target,
|
|
227
|
+
to: props.to,
|
|
228
|
+
};
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
const attributes = computed(() => {
|
|
232
|
+
if (!asRouting.value && !asLink.value) {
|
|
233
|
+
return getNativeButtonAttributes();
|
|
234
|
+
} else if (asLink.value || (asRouting.value && isInertia)) {
|
|
235
|
+
return getAnchorAttributes();
|
|
236
|
+
} else if (asRouting.value) {
|
|
237
|
+
return getRouterAttributes();
|
|
238
|
+
}
|
|
239
|
+
return {};
|
|
240
|
+
});
|
|
241
|
+
</script>
|
|
242
|
+
<style lang="postcss">
|
|
243
|
+
@import './index.css';
|
|
244
|
+
</style>
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Types
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
import type { RouteLocationRaw } from 'vue-router';
|
|
251
|
+
|
|
252
|
+
export type BaseButtonProps = {
|
|
253
|
+
/**
|
|
254
|
+
* CSS class applied when the component renders as a link and the target of the link is the current route or the url matches partially.
|
|
255
|
+
* Ported for Inertia compatibility.
|
|
256
|
+
* @defaultValue `'router-link-active'`
|
|
257
|
+
*/
|
|
258
|
+
activeClass?: string;
|
|
259
|
+
/**
|
|
260
|
+
* Value forwarded to the `aria-current` attribute when the component renders
|
|
261
|
+
* as a router link and the target route is an exact match.
|
|
262
|
+
*
|
|
263
|
+
* Use to communicate the current location to assistive technologies.
|
|
264
|
+
* @defaultValue `'page'`
|
|
265
|
+
*/
|
|
266
|
+
ariaCurrentValue?:
|
|
267
|
+
| 'page'
|
|
268
|
+
| 'step'
|
|
269
|
+
| 'location'
|
|
270
|
+
| 'date'
|
|
271
|
+
| 'time'
|
|
272
|
+
| 'true'
|
|
273
|
+
| 'false';
|
|
274
|
+
/**
|
|
275
|
+
* Makes the component take the full available width (block-level layout).
|
|
276
|
+
* Adds the `base-btn--block` modifier class.
|
|
277
|
+
*/
|
|
278
|
+
block?: boolean;
|
|
279
|
+
/**
|
|
280
|
+
* Request payload forwarded to Inertia when navigating via `href` in an
|
|
281
|
+
* Inertia-enabled app. Ignored when not using Inertia.
|
|
282
|
+
*/
|
|
283
|
+
data?: object;
|
|
284
|
+
/**
|
|
285
|
+
* Disables user interaction.
|
|
286
|
+
*
|
|
287
|
+
* - When rendering as a native button, sets the `disabled` attribute.
|
|
288
|
+
* - When rendering as a link (anchor/Inertia), removes `href`, adds
|
|
289
|
+
* `aria-disabled="true"`, and prevents navigation while keeping focusable
|
|
290
|
+
* semantics consistent.
|
|
291
|
+
*/
|
|
292
|
+
disabled?: boolean;
|
|
293
|
+
/**
|
|
294
|
+
* CSS class applied when the component renders as a link and the target of the link
|
|
295
|
+
* and the url matches exactly.
|
|
296
|
+
* Ported for Inertia compatibility.
|
|
297
|
+
* @defaultValue `'router-link-exact-active'`
|
|
298
|
+
*/
|
|
299
|
+
exactActiveClass?: string;
|
|
300
|
+
/**
|
|
301
|
+
* Additional HTTP headers forwarded to Inertia when navigating via `href`
|
|
302
|
+
* in an Inertia-enabled app.
|
|
303
|
+
*/
|
|
304
|
+
headers?: object;
|
|
305
|
+
/**
|
|
306
|
+
* Hyperlink reference used when rendering as an anchor (or as an Inertia
|
|
307
|
+
* link in Inertia-enabled apps). If provided and not disabled, the component
|
|
308
|
+
* renders as an anchor/Inertia link.
|
|
309
|
+
*/
|
|
310
|
+
href?: HTMLAnchorElement['href'];
|
|
311
|
+
/**
|
|
312
|
+
* HTTP method used for Inertia navigation when `href` is provided in an
|
|
313
|
+
* Inertia-enabled app. Ignored otherwise.
|
|
314
|
+
*/
|
|
315
|
+
method?: 'get' | 'post' | 'put' | 'patch' | 'delete';
|
|
316
|
+
/**
|
|
317
|
+
* Lifecycle hook invoked by Inertia right before the request is sent.
|
|
318
|
+
*/
|
|
319
|
+
onBefore?: () => void;
|
|
320
|
+
/**
|
|
321
|
+
* Lifecycle hook invoked by Inertia when a request is cancelled.
|
|
322
|
+
*/
|
|
323
|
+
onCancel?: () => void;
|
|
324
|
+
/**
|
|
325
|
+
* Receives the Inertia cancel token source when a request is initiated.
|
|
326
|
+
* Can be used to cancel the request.
|
|
327
|
+
*/
|
|
328
|
+
onCancelToken?: (cancelToken: import('axios').CancelTokenSource) => void;
|
|
329
|
+
/**
|
|
330
|
+
* Lifecycle hook invoked by Inertia after the request has finished
|
|
331
|
+
* (regardless of success or error).
|
|
332
|
+
*/
|
|
333
|
+
onFinish?: () => void;
|
|
334
|
+
/**
|
|
335
|
+
* Limits the properties that are preserved in Inertia partial reloads.
|
|
336
|
+
*/
|
|
337
|
+
only?: string[];
|
|
338
|
+
/**
|
|
339
|
+
* Progress callback invoked by Inertia with the upload/download percentage
|
|
340
|
+
* when available.
|
|
341
|
+
*/
|
|
342
|
+
onProgress?: (progress: { percentage: number | undefined }) => void;
|
|
343
|
+
/**
|
|
344
|
+
* Lifecycle hook invoked by Inertia when a request starts.
|
|
345
|
+
*/
|
|
346
|
+
onStart?: () => void;
|
|
347
|
+
/**
|
|
348
|
+
* Lifecycle hook invoked by Inertia when a request succeeds.
|
|
349
|
+
*/
|
|
350
|
+
onSuccess?: () => void;
|
|
351
|
+
/**
|
|
352
|
+
* Controls whether Inertia should preserve the current scroll position after
|
|
353
|
+
* navigation. Can be a boolean or a predicate receiving the visit props.
|
|
354
|
+
* @defaultValue `false`
|
|
355
|
+
*/
|
|
356
|
+
preserveScroll?: boolean | ((props: { [key: string]: unknown }) => boolean);
|
|
357
|
+
/**
|
|
358
|
+
* Controls whether Inertia should preserve the current state after navigation.
|
|
359
|
+
* Can be a boolean or a predicate receiving the visit props.
|
|
360
|
+
* @defaultValue `false`
|
|
361
|
+
*/
|
|
362
|
+
preserveState?:
|
|
363
|
+
| boolean
|
|
364
|
+
| ((props: { [key: string]: unknown }) => boolean)
|
|
365
|
+
| null;
|
|
366
|
+
/**
|
|
367
|
+
* Format to use when serializing array values into the query string for
|
|
368
|
+
* Inertia requests.
|
|
369
|
+
* @defaultValue `'brackets'`
|
|
370
|
+
*/
|
|
371
|
+
queryStringArrayFormat?: 'brackets' | 'indices';
|
|
372
|
+
/**
|
|
373
|
+
* Uses history replacement instead of push navigation.
|
|
374
|
+
*
|
|
375
|
+
* - With Vue Router (`to`), calls `router.replace`.
|
|
376
|
+
* - With Inertia (`href`), performs a replace visit.
|
|
377
|
+
*/
|
|
378
|
+
replace?: boolean;
|
|
379
|
+
/**
|
|
380
|
+
* Custom HTML tag used when rendering as a native element (neither router
|
|
381
|
+
* link nor anchor). Must correspond to a non-void HTML element.
|
|
382
|
+
* @defaultValue `'button'`
|
|
383
|
+
*/
|
|
384
|
+
tag?: string;
|
|
385
|
+
/**
|
|
386
|
+
* Target browsing context for anchor/Inertia links (e.g. `_self`, `_blank`).
|
|
387
|
+
* Ignored when rendering as a native button.
|
|
388
|
+
*/
|
|
389
|
+
target?: HTMLAnchorElement['target'];
|
|
390
|
+
/**
|
|
391
|
+
* Fallback text content rendered when no default slot is provided.
|
|
392
|
+
*/
|
|
393
|
+
text?: string;
|
|
394
|
+
/**
|
|
395
|
+
* Route location to navigate to. When provided (and not disabled), the
|
|
396
|
+
* component renders as a Vue Router link.
|
|
397
|
+
*/
|
|
398
|
+
to?: RouteLocationRaw;
|
|
399
|
+
/**
|
|
400
|
+
* Native `type` attribute used when rendering as a button (e.g. `button`,
|
|
401
|
+
* `submit`, `reset`).
|
|
402
|
+
*
|
|
403
|
+
* @defaultValue `'button'`
|
|
404
|
+
*/
|
|
405
|
+
type?: HTMLButtonElement['type'];
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
export type BaseButtonSlots = {
|
|
409
|
+
/**
|
|
410
|
+
* Primary content rendered inside the button element. Falls back to the `text` prop when empty.
|
|
411
|
+
*/
|
|
412
|
+
default?: (props: object) => any;
|
|
413
|
+
};
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## Styles
|
|
417
|
+
|
|
418
|
+
```css
|
|
419
|
+
.base-btn {
|
|
420
|
+
box-shadow: 0px 0px 0px 0px var(--bb-ring);
|
|
421
|
+
color: var(--bb-text);
|
|
422
|
+
cursor: pointer;
|
|
423
|
+
outline: 2px solid transparent;
|
|
424
|
+
outline-offset: 2px;
|
|
425
|
+
text-align: center;
|
|
426
|
+
transition-duration: 150ms;
|
|
427
|
+
transition-property:
|
|
428
|
+
color, background-color, border-color, text-decoration-color, box-shadow;
|
|
429
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
430
|
+
user-select: none;
|
|
431
|
+
&--block {
|
|
432
|
+
width: 100%;
|
|
433
|
+
}
|
|
434
|
+
&--disabled {
|
|
435
|
+
cursor: not-allowed;
|
|
436
|
+
pointer-events: none;
|
|
437
|
+
}
|
|
438
|
+
&:focus-visible {
|
|
439
|
+
box-shadow: 0px 0px 0px var(--bb-ring-size) var(--bb-ring);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
a.base-btn {
|
|
444
|
+
&:hover {
|
|
445
|
+
text-decoration: inherit;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
```
|