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,405 @@
|
|
|
1
|
+
# BaseRadio
|
|
2
|
+
|
|
3
|
+
## Template & Script
|
|
4
|
+
|
|
5
|
+
```vue
|
|
6
|
+
<template>
|
|
7
|
+
<span v-bind="containerAttributes">
|
|
8
|
+
<input v-bind="inputAttributes" class="sr-only" />
|
|
9
|
+
<span aria-hidden="true" class="bb-base-radio-container">
|
|
10
|
+
<slot name="icon" v-bind="slotAttributes">
|
|
11
|
+
<span v-bind="iconAttributes"></span>
|
|
12
|
+
</slot>
|
|
13
|
+
</span>
|
|
14
|
+
</span>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script setup lang="ts">
|
|
18
|
+
import { computed, ref } from 'vue';
|
|
19
|
+
import { isCssColor } from '@/utilities/functions/isCssColor';
|
|
20
|
+
import { when } from '@/utilities/functions/when';
|
|
21
|
+
import type {
|
|
22
|
+
BaseRadioProps,
|
|
23
|
+
BaseRadioEvents,
|
|
24
|
+
BaseRadioSlots,
|
|
25
|
+
BaseRadioIconSlotProps,
|
|
26
|
+
} from './types';
|
|
27
|
+
|
|
28
|
+
const props = defineProps<BaseRadioProps>();
|
|
29
|
+
|
|
30
|
+
const emit = defineEmits<BaseRadioEvents>();
|
|
31
|
+
|
|
32
|
+
defineSlots<BaseRadioSlots>();
|
|
33
|
+
|
|
34
|
+
const checked = computed(() => {
|
|
35
|
+
if (props.checked) return true;
|
|
36
|
+
return JSON.stringify(props.modelValue) === JSON.stringify(props.value);
|
|
37
|
+
});
|
|
38
|
+
const hasFocus = ref(false);
|
|
39
|
+
const hasFocusVisible = ref(false);
|
|
40
|
+
|
|
41
|
+
const containerAttributes = computed(() => {
|
|
42
|
+
const attributes: Record<string, any> = {
|
|
43
|
+
class: {
|
|
44
|
+
'bb-base-radio': true,
|
|
45
|
+
'bb-base-radio--disabled': props.disabled,
|
|
46
|
+
'bb-base-radio--errors': props.hasErrors,
|
|
47
|
+
'bb-base-radio--readonly': props.readonly,
|
|
48
|
+
[`bb-base-radio--${props.color}`]:
|
|
49
|
+
props.color && !isCssColor(props.color),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
if (props.color && isCssColor(props.color)) {
|
|
53
|
+
attributes['style'] = `--color: ${props.color}`;
|
|
54
|
+
}
|
|
55
|
+
return attributes;
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* This is used to keep the value compatible to common html expected values.
|
|
60
|
+
* Convert to string everything that's not but do not double encode strings
|
|
61
|
+
*/
|
|
62
|
+
const makeInputValue = when(
|
|
63
|
+
(item: unknown) => typeof item !== 'string',
|
|
64
|
+
JSON.stringify
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const inputAttributes = computed(() => {
|
|
68
|
+
const value = makeInputValue(props.value);
|
|
69
|
+
|
|
70
|
+
const onBlur = (event: FocusEvent): void => {
|
|
71
|
+
hasFocus.value = false;
|
|
72
|
+
hasFocusVisible.value = false;
|
|
73
|
+
emit('blur', event);
|
|
74
|
+
};
|
|
75
|
+
const onChange = (event: Event): void => {
|
|
76
|
+
emit('change', event);
|
|
77
|
+
emit('update:modelValue', props.value);
|
|
78
|
+
};
|
|
79
|
+
const onFocus = (event: FocusEvent): void => {
|
|
80
|
+
hasFocus.value = true;
|
|
81
|
+
if (event.target instanceof HTMLInputElement) {
|
|
82
|
+
hasFocusVisible.value = event.target.matches(':focus-visible');
|
|
83
|
+
}
|
|
84
|
+
emit('focus', event);
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const eventListeners = {
|
|
88
|
+
onBlur,
|
|
89
|
+
onChange,
|
|
90
|
+
onClick: (event: MouseEvent) => emit('click', event),
|
|
91
|
+
onFocus,
|
|
92
|
+
onInput: (event: Event) => emit('input', event),
|
|
93
|
+
onKeydown: (event: KeyboardEvent) => emit('keydown', event),
|
|
94
|
+
onMousedown: (event: MouseEvent) => emit('mousedown', event),
|
|
95
|
+
onMouseup: (event: MouseEvent) => emit('mouseup', event),
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
'aria-describedby': props.ariaDescribedby,
|
|
100
|
+
autofocus: props.autofocus,
|
|
101
|
+
checked: checked.value,
|
|
102
|
+
// There is no such thing as readonly radio so we disable and style it with css
|
|
103
|
+
disabled: props.disabled || props.readonly,
|
|
104
|
+
id: props.id,
|
|
105
|
+
name: props.name,
|
|
106
|
+
required: props.required,
|
|
107
|
+
tabindex: props.disabled ? -1 : undefined,
|
|
108
|
+
type: 'radio',
|
|
109
|
+
value: value,
|
|
110
|
+
...eventListeners,
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
const slotAttributes = computed<BaseRadioIconSlotProps>(() => ({
|
|
115
|
+
checked: checked.value,
|
|
116
|
+
disabled: props.disabled,
|
|
117
|
+
focused: hasFocus.value,
|
|
118
|
+
focusVisible: hasFocusVisible.value,
|
|
119
|
+
hasErrors: props.hasErrors,
|
|
120
|
+
id: props.id,
|
|
121
|
+
name: props.name,
|
|
122
|
+
parsedValue: inputAttributes.value.value,
|
|
123
|
+
readonly: props.readonly,
|
|
124
|
+
value: props.value,
|
|
125
|
+
}));
|
|
126
|
+
|
|
127
|
+
const iconAttributes = computed(() => {
|
|
128
|
+
let style: { [key: string]: string } = {};
|
|
129
|
+
if (props.color && isCssColor(props.color)) {
|
|
130
|
+
style.color = props.color;
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
class: 'bb-base-radio-container__icon',
|
|
134
|
+
style,
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
</script>
|
|
138
|
+
|
|
139
|
+
<style lang="postcss">
|
|
140
|
+
@import './index.css';
|
|
141
|
+
</style>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Types
|
|
145
|
+
|
|
146
|
+
```ts
|
|
147
|
+
import type { InputHTMLAttributes, HTMLAttributes } from 'vue';
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Props for the base radio control that exposes a stylable icon slot while keeping native semantics.
|
|
151
|
+
*/
|
|
152
|
+
export type BaseRadioProps = {
|
|
153
|
+
/**
|
|
154
|
+
* Id(s) of descriptive elements associated with the radio.
|
|
155
|
+
*/
|
|
156
|
+
ariaDescribedby?: InputHTMLAttributes['aria-describedby'];
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Focus the control automatically after mount.
|
|
160
|
+
*/
|
|
161
|
+
autofocus?: InputHTMLAttributes['autofocus'];
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Force the radio into a checked state regardless of `modelValue`.
|
|
165
|
+
*/
|
|
166
|
+
checked?: InputHTMLAttributes['checked'];
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Name of the theme color to apply or any valid CSS color string.
|
|
170
|
+
*/
|
|
171
|
+
color?: string;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Disable the radio. When combined with `readonly`, the control is also disabled to mimic native behaviour.
|
|
175
|
+
*/
|
|
176
|
+
disabled?: boolean;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Apply the error styling class.
|
|
180
|
+
*/
|
|
181
|
+
hasErrors?: boolean;
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Explicit id for the underlying input element.
|
|
185
|
+
*/
|
|
186
|
+
id?: HTMLAttributes['id'];
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Current v-model value used to determine checked state.
|
|
190
|
+
*/
|
|
191
|
+
modelValue?: any;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Shared group name for the radio input (required to join options).
|
|
195
|
+
*/
|
|
196
|
+
name: InputHTMLAttributes['name'];
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Treat the radio as read-only. Implemented by disabling the input while preserving styling hooks.
|
|
200
|
+
*/
|
|
201
|
+
readonly?: boolean;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Mark the radio as required within its group.
|
|
205
|
+
*/
|
|
206
|
+
required?: boolean;
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Value emitted when the radio becomes checked. Accepts any serializable value.
|
|
210
|
+
*/
|
|
211
|
+
value: any;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
export type BaseRadioEvents = {
|
|
215
|
+
/**
|
|
216
|
+
* Emitted when the native input loses focus.
|
|
217
|
+
* Forwards the original DOM `FocusEvent`.
|
|
218
|
+
*/
|
|
219
|
+
(e: 'blur', event: FocusEvent): void;
|
|
220
|
+
/**
|
|
221
|
+
* Emitted when the radio selection changes.
|
|
222
|
+
* Forwards the original DOM `Event`.
|
|
223
|
+
*/
|
|
224
|
+
(e: 'change', event: Event): void;
|
|
225
|
+
/**
|
|
226
|
+
* Emitted when the input receives a click interaction.
|
|
227
|
+
* Forwards the original DOM `MouseEvent`.
|
|
228
|
+
*/
|
|
229
|
+
(e: 'click', event: MouseEvent): void;
|
|
230
|
+
/**
|
|
231
|
+
* Emitted when the native input gains focus.
|
|
232
|
+
* Forwards the original DOM `FocusEvent`.
|
|
233
|
+
*/
|
|
234
|
+
(e: 'focus', event: FocusEvent): void;
|
|
235
|
+
/**
|
|
236
|
+
* Emitted on native input events from the radio input.
|
|
237
|
+
* Forwards the original DOM `Event`.
|
|
238
|
+
*/
|
|
239
|
+
(e: 'input', event: Event): void;
|
|
240
|
+
/**
|
|
241
|
+
* Emitted for keyboard interaction on the input.
|
|
242
|
+
* Forwards the original DOM `KeyboardEvent`.
|
|
243
|
+
*/
|
|
244
|
+
(e: 'keydown', event: KeyboardEvent): void;
|
|
245
|
+
/**
|
|
246
|
+
* Emitted when a pointing device button is pressed over the input.
|
|
247
|
+
* Forwards the original DOM `MouseEvent`.
|
|
248
|
+
*/
|
|
249
|
+
(e: 'mousedown', event: MouseEvent): void;
|
|
250
|
+
/**
|
|
251
|
+
* Emitted when a pointing device button is released over the input.
|
|
252
|
+
* Forwards the original DOM `MouseEvent`.
|
|
253
|
+
*/
|
|
254
|
+
(e: 'mouseup', event: MouseEvent): void;
|
|
255
|
+
/**
|
|
256
|
+
* Emitted when the radio becomes selected, carrying the radio's `value` prop.
|
|
257
|
+
*/
|
|
258
|
+
(e: 'update:modelValue', value: any): void;
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Props exposed by the `icon` slot for custom radio visuals.
|
|
263
|
+
*
|
|
264
|
+
* These values are normalized at runtime so consumers receive stable types
|
|
265
|
+
* (not optional/undefined booleans).
|
|
266
|
+
*/
|
|
267
|
+
export type BaseRadioIconSlotProps = {
|
|
268
|
+
/**
|
|
269
|
+
* Whether the radio is currently selected.
|
|
270
|
+
*/
|
|
271
|
+
checked: boolean;
|
|
272
|
+
/**
|
|
273
|
+
* Whether the radio is disabled.
|
|
274
|
+
* Mirrors `props.disabled`.
|
|
275
|
+
*/
|
|
276
|
+
disabled: Exclude<BaseRadioProps['disabled'], undefined>;
|
|
277
|
+
/**
|
|
278
|
+
* Whether the native input currently has focus.
|
|
279
|
+
*/
|
|
280
|
+
focused: boolean;
|
|
281
|
+
/**
|
|
282
|
+
* Whether focus is keyboard-visible (`:focus-visible`).
|
|
283
|
+
*/
|
|
284
|
+
focusVisible: boolean;
|
|
285
|
+
/**
|
|
286
|
+
* Whether the radio is in an error state.
|
|
287
|
+
* Mirrors `props.hasErrors`.
|
|
288
|
+
*/
|
|
289
|
+
hasErrors: Exclude<BaseRadioProps['hasErrors'], undefined>;
|
|
290
|
+
/**
|
|
291
|
+
* The `id` attribute of the underlying input.
|
|
292
|
+
* Mirrors `props.id`.
|
|
293
|
+
*/
|
|
294
|
+
id: BaseRadioProps['id'];
|
|
295
|
+
/**
|
|
296
|
+
* The `name` attribute of the underlying input.
|
|
297
|
+
* Mirrors `props.name`.
|
|
298
|
+
*/
|
|
299
|
+
name: BaseRadioProps['name'];
|
|
300
|
+
/**
|
|
301
|
+
* The radio value serialized to a string for form submission.
|
|
302
|
+
*/
|
|
303
|
+
parsedValue: string;
|
|
304
|
+
/**
|
|
305
|
+
* Whether the radio is read-only.
|
|
306
|
+
* Mirrors `props.readonly`.
|
|
307
|
+
*/
|
|
308
|
+
readonly: BaseRadioProps['readonly'];
|
|
309
|
+
/**
|
|
310
|
+
* The effective value of this radio option (the `value` prop).
|
|
311
|
+
*/
|
|
312
|
+
value: any;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
export type BaseRadioSlots = {
|
|
316
|
+
/**
|
|
317
|
+
* Replaces the default radio dot visual rendered inside the radio container.
|
|
318
|
+
* @param checked - Whether the radio is currently selected.
|
|
319
|
+
* @param disabled - Whether the radio is disabled.
|
|
320
|
+
* @param focused - Whether the radio input currently has focus.
|
|
321
|
+
* @param focusVisible - Whether focus is keyboard-visible (`:focus-visible`).
|
|
322
|
+
* @param hasErrors - Whether the radio is in an error state.
|
|
323
|
+
* @param id - The `id` attribute of the underlying input.
|
|
324
|
+
* @param name - The `name` attribute of the underlying input.
|
|
325
|
+
* @param parsedValue - The radio value serialized to a string for form submission.
|
|
326
|
+
* @param readonly - Whether the radio is read-only.
|
|
327
|
+
* @param value - The current effective value of this radio option.
|
|
328
|
+
*/
|
|
329
|
+
icon?: (props: BaseRadioIconSlotProps) => any;
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* @deprecated Use `BaseRadioIconSlotProps`.
|
|
334
|
+
*/
|
|
335
|
+
export type SlotAttributes = BaseRadioIconSlotProps;
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Styles
|
|
339
|
+
|
|
340
|
+
```css
|
|
341
|
+
/* base radio */
|
|
342
|
+
.bb-base-radio {
|
|
343
|
+
--color: var(--bb-primary);
|
|
344
|
+
display: inline-flex;
|
|
345
|
+
|
|
346
|
+
&:has(:focus-visible) {
|
|
347
|
+
.bb-base-radio-container__icon {
|
|
348
|
+
/* Replacing Tailwind's `ring` utility */
|
|
349
|
+
box-shadow: 0px 0px 0px var(--bb-ring-size) var(--bb-ring);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
input[type='radio'] {
|
|
354
|
+
&:checked + .bb-base-radio-container .bb-base-radio-container__icon {
|
|
355
|
+
&::after {
|
|
356
|
+
height: calc(100% - 2px - var(--bb-radio-space));
|
|
357
|
+
width: calc(100% - 2px - var(--bb-radio-space));
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
&.bb-base-radio--disabled {
|
|
363
|
+
.bb-base-radio-container__icon {
|
|
364
|
+
background-color: var(--bb-panel-disabled);
|
|
365
|
+
--color: color-mix(in srgb, var(--bb-panel), var(--bb-text) 40%);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
&--errors {
|
|
369
|
+
}
|
|
370
|
+
&--readonly {
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.bb-base-radio-container {
|
|
374
|
+
display: inline-flex;
|
|
375
|
+
user-select: none;
|
|
376
|
+
|
|
377
|
+
&__icon {
|
|
378
|
+
background-color: var(--bb-panel);
|
|
379
|
+
border: 1px solid var(--bb-border);
|
|
380
|
+
border-radius: 999px;
|
|
381
|
+
box-shadow: 0 0 0 3px transparent;
|
|
382
|
+
box-shadow: 0px 0px 0px 0px var(--bb-ring);
|
|
383
|
+
cursor: pointer;
|
|
384
|
+
display: inline-block;
|
|
385
|
+
height: var(--bb-checkbox-w);
|
|
386
|
+
position: relative;
|
|
387
|
+
transition: all 0.2s ease;
|
|
388
|
+
width: var(--bb-checkbox-w);
|
|
389
|
+
|
|
390
|
+
&::after {
|
|
391
|
+
background-color: var(--color);
|
|
392
|
+
border-radius: 999px;
|
|
393
|
+
content: '';
|
|
394
|
+
height: 0;
|
|
395
|
+
left: 50%;
|
|
396
|
+
position: absolute;
|
|
397
|
+
top: 50%;
|
|
398
|
+
transform: translate(-50%, -50%);
|
|
399
|
+
transition: all 0.2s ease;
|
|
400
|
+
width: 0;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
```
|