base-ui-vue 0.1.0 → 0.2.0
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/README.md +41 -1
- package/dist/button/Button.cjs +53 -12
- package/dist/button/Button.cjs.map +1 -1
- package/dist/button/Button.js +26 -15
- package/dist/button/Button.js.map +1 -1
- package/dist/button/ToolbarButton.cjs +367 -0
- package/dist/button/ToolbarButton.cjs.map +1 -0
- package/dist/button/ToolbarButton.js +320 -0
- package/dist/button/ToolbarButton.js.map +1 -0
- package/dist/button/ToolbarButtonDataAttributes.cjs +27 -0
- package/dist/button/ToolbarButtonDataAttributes.cjs.map +1 -0
- package/dist/button/ToolbarButtonDataAttributes.js +21 -0
- package/dist/button/ToolbarButtonDataAttributes.js.map +1 -0
- package/dist/checkbox/index.cjs +1173 -0
- package/dist/checkbox/index.cjs.map +1 -0
- package/dist/checkbox/index.js +1048 -0
- package/dist/checkbox/index.js.map +1 -0
- package/dist/checkbox-group/CheckboxGroup.cjs +629 -0
- package/dist/checkbox-group/CheckboxGroup.cjs.map +1 -0
- package/dist/checkbox-group/CheckboxGroup.js +540 -0
- package/dist/checkbox-group/CheckboxGroup.js.map +1 -0
- package/dist/checkbox-group/CheckboxGroupDataAttributes.cjs +18 -0
- package/dist/checkbox-group/CheckboxGroupDataAttributes.cjs.map +1 -0
- package/dist/checkbox-group/CheckboxGroupDataAttributes.js +12 -0
- package/dist/checkbox-group/CheckboxGroupDataAttributes.js.map +1 -0
- package/dist/composite/composite.cjs +167 -0
- package/dist/composite/composite.cjs.map +1 -1
- package/dist/composite/composite.js +96 -1
- package/dist/composite/composite.js.map +1 -1
- package/dist/composite/constants.cjs +12 -0
- package/dist/composite/constants.cjs.map +1 -0
- package/dist/composite/constants.js +6 -0
- package/dist/composite/constants.js.map +1 -0
- package/dist/control/FieldControl.cjs +18 -343
- package/dist/control/FieldControl.cjs.map +1 -1
- package/dist/control/FieldControl.js +14 -285
- package/dist/control/FieldControl.js.map +1 -1
- package/dist/control/SliderControl.cjs +636 -0
- package/dist/control/SliderControl.cjs.map +1 -0
- package/dist/control/SliderControl.js +553 -0
- package/dist/control/SliderControl.js.map +1 -0
- package/dist/control/SliderControlDataAttributes.cjs +47 -0
- package/dist/control/SliderControlDataAttributes.cjs.map +1 -0
- package/dist/control/SliderControlDataAttributes.js +41 -0
- package/dist/control/SliderControlDataAttributes.js.map +1 -0
- package/dist/csp-provider/CSPContext.cjs +32 -0
- package/dist/csp-provider/CSPContext.cjs.map +1 -0
- package/dist/csp-provider/CSPContext.js +21 -0
- package/dist/csp-provider/CSPContext.js.map +1 -0
- package/dist/csp-provider/CSPProvider.cjs +46 -0
- package/dist/csp-provider/CSPProvider.cjs.map +1 -0
- package/dist/csp-provider/CSPProvider.js +41 -0
- package/dist/csp-provider/CSPProvider.js.map +1 -0
- package/dist/description/FieldDescription.cjs +5 -5
- package/dist/description/FieldDescription.cjs.map +1 -1
- package/dist/description/FieldDescription.js +1 -1
- package/dist/direction-provider/DirectionProvider.cjs +2 -2
- package/dist/direction-provider/DirectionProvider.cjs.map +1 -1
- package/dist/direction-provider/DirectionProvider.js +1 -1
- package/dist/error/FieldError.cjs +10 -288
- package/dist/error/FieldError.cjs.map +1 -1
- package/dist/error/FieldError.js +4 -246
- package/dist/error/FieldError.js.map +1 -1
- package/dist/form/Form.cjs +5 -4
- package/dist/form/Form.cjs.map +1 -1
- package/dist/form/Form.js +5 -4
- package/dist/form/Form.js.map +1 -1
- package/dist/group/ToolbarGroup.cjs +92 -0
- package/dist/group/ToolbarGroup.cjs.map +1 -0
- package/dist/group/ToolbarGroup.js +87 -0
- package/dist/group/ToolbarGroup.js.map +1 -0
- package/dist/group/ToolbarGroupDataAttributes.cjs +23 -0
- package/dist/group/ToolbarGroupDataAttributes.cjs.map +1 -0
- package/dist/group/ToolbarGroupDataAttributes.js +17 -0
- package/dist/group/ToolbarGroupDataAttributes.js.map +1 -0
- package/dist/header/AccordionHeader.cjs +2 -2
- package/dist/header/AccordionHeader.js +1 -1
- package/dist/image/AvatarImage.cjs +4 -4
- package/dist/image/AvatarImage.cjs.map +1 -1
- package/dist/image/AvatarImage.js +1 -1
- package/dist/index.cjs +80 -10
- package/dist/index.d.cts +2751 -612
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +2751 -612
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index2.cjs +3651 -370
- package/dist/index2.cjs.map +1 -1
- package/dist/index2.js +3365 -270
- package/dist/index2.js.map +1 -1
- package/package.json +8 -4
- package/src/accordion/root/AccordionRoot.vue +2 -1
- package/src/checkbox/index.ts +23 -0
- package/src/checkbox/indicator/CheckboxIndicator.vue +102 -0
- package/src/checkbox/indicator/CheckboxIndicatorDataAttributes.ts +61 -0
- package/src/checkbox/root/CheckboxRoot.vue +632 -0
- package/src/checkbox/root/CheckboxRootContext.ts +22 -0
- package/src/checkbox/root/CheckboxRootDataAttributes.ts +54 -0
- package/src/checkbox/utils/useStateAttributesMapping.ts +30 -0
- package/src/checkbox-group/CheckboxGroup.vue +241 -0
- package/src/checkbox-group/CheckboxGroupContext.ts +39 -0
- package/src/checkbox-group/CheckboxGroupDataAttributes.ts +6 -0
- package/src/checkbox-group/index.ts +11 -0
- package/src/checkbox-group/useCheckboxGroupParent.ts +173 -0
- package/src/collapsible/panel/useCollapsiblePanel.ts +2 -1
- package/src/collapsible/root/useCollapsibleRoot.ts +3 -1
- package/src/composite/composite.ts +2 -0
- package/src/composite/item/CompositeItem.vue +7 -8
- package/src/composite/root/CompositeRoot.vue +12 -1
- package/src/csp-provider/CSPContext.ts +26 -0
- package/src/csp-provider/CSPProvider.vue +40 -0
- package/src/csp-provider/index.ts +5 -0
- package/src/field/item/FieldItem.vue +6 -1
- package/src/field/label/FieldLabel.vue +10 -51
- package/src/field/root/FieldRoot.vue +16 -3
- package/src/floating-ui-vue/types.ts +1 -4
- package/src/floating-ui-vue/utils/element.ts +12 -0
- package/src/floating-ui-vue/utils/shadowDom.ts +44 -0
- package/src/floating-ui-vue/utils.ts +3 -0
- package/src/form/Form.vue +5 -3
- package/src/index.ts +9 -0
- package/src/labelable-provider/LabelableContext.ts +2 -2
- package/src/labelable-provider/LabelableProvider.vue +21 -4
- package/src/labelable-provider/index.ts +2 -0
- package/src/labelable-provider/useAriaLabelledBy.ts +9 -9
- package/src/labelable-provider/useLabel.ts +115 -0
- package/src/labelable-provider/useLabelableId.ts +12 -10
- package/src/separator/Separator.vue +65 -0
- package/src/separator/SeparatorDataAttributes.ts +7 -0
- package/src/separator/index.ts +3 -0
- package/src/slider/control/SliderControl.vue +497 -0
- package/src/slider/control/SliderControlDataAttributes.ts +35 -0
- package/src/slider/index.ts +35 -0
- package/src/slider/indicator/SliderIndicator.vue +144 -0
- package/src/slider/indicator/SliderIndicatorDataAttributes.ts +35 -0
- package/src/slider/label/SliderLabel.vue +75 -0
- package/src/slider/root/SliderRoot.vue +557 -0
- package/src/slider/root/SliderRootContext.ts +126 -0
- package/src/slider/root/SliderRootDataAttributes.ts +35 -0
- package/src/slider/root/stateAttributesMapping.ts +13 -0
- package/src/slider/thumb/SliderThumb.vue +601 -0
- package/src/slider/thumb/SliderThumbDataAttributes.ts +39 -0
- package/src/slider/thumb/prehydrationScript.min.ts +5 -0
- package/src/slider/thumb/prehydrationScript.template.js +69 -0
- package/src/slider/track/SliderTrack.vue +48 -0
- package/src/slider/track/SliderTrackDataAttributes.ts +10 -0
- package/src/slider/utils/asc.ts +3 -0
- package/src/slider/utils/getMidpoint.ts +9 -0
- package/src/slider/utils/getPushedThumbValues.ts +68 -0
- package/src/slider/utils/getSliderValue.ts +25 -0
- package/src/slider/utils/replaceArrayItemAtIndex.ts +15 -0
- package/src/slider/utils/resolveThumbCollision.ts +177 -0
- package/src/slider/utils/roundValueToStep.ts +19 -0
- package/src/slider/utils/test-utils.ts +25 -0
- package/src/slider/utils/validateMinimumDistance.ts +20 -0
- package/src/slider/utils/valueArrayToPercentages.ts +10 -0
- package/src/slider/value/SliderValue.vue +90 -0
- package/src/slider/value/SliderValueDataAttributes.ts +35 -0
- package/src/switch/index.ts +14 -0
- package/src/switch/root/SwitchRoot.vue +448 -0
- package/src/switch/root/SwitchRootContext.ts +22 -0
- package/src/switch/root/SwitchRootDataAttributes.ts +46 -0
- package/src/switch/stateAttributesMapping.ts +23 -0
- package/src/switch/thumb/SwitchThumb.vue +59 -0
- package/src/switch/thumb/SwitchThumbDataAttributes.ts +46 -0
- package/src/toggle/Toggle.vue +211 -0
- package/src/toggle/ToggleDataAttributes.ts +6 -0
- package/src/toggle/index.ts +3 -0
- package/src/toggle-group/ToggleGroup.vue +224 -0
- package/src/toggle-group/ToggleGroupContext.ts +45 -0
- package/src/toggle-group/ToggleGroupDataAttributes.ts +15 -0
- package/src/toggle-group/index.ts +5 -0
- package/src/toolbar/button/ToolbarButton.vue +99 -0
- package/src/toolbar/button/ToolbarButtonDataAttributes.ts +15 -0
- package/src/toolbar/group/ToolbarGroup.vue +70 -0
- package/src/toolbar/group/ToolbarGroupContext.ts +23 -0
- package/src/toolbar/group/ToolbarGroupDataAttributes.ts +11 -0
- package/src/toolbar/index.ts +27 -0
- package/src/toolbar/input/ToolbarInput.vue +114 -0
- package/src/toolbar/input/ToolbarInputDataAttributes.ts +15 -0
- package/src/toolbar/link/ToolbarLink.vue +54 -0
- package/src/toolbar/link/ToolbarLinkDataAttributes.ts +7 -0
- package/src/toolbar/root/ToolbarRoot.vue +144 -0
- package/src/toolbar/root/ToolbarRootContext.ts +29 -0
- package/src/toolbar/root/ToolbarRootDataAttributes.ts +11 -0
- package/src/toolbar/separator/ToolbarSeparator.vue +41 -0
- package/src/toolbar/separator/ToolbarSeparatorDataAttributes.ts +7 -0
- package/src/use-button/useButton.ts +2 -1
- package/src/utils/areArraysEqual.ts +12 -0
- package/src/utils/clamp.ts +7 -0
- package/src/utils/createBaseUIEventDetails.ts +9 -0
- package/src/utils/formatNumber.ts +7 -0
- package/src/utils/owner.ts +5 -0
- package/src/utils/resolveAriaLabelledBy.ts +10 -0
- package/src/utils/useControllableState.ts +78 -14
- package/src/utils/useFocusableWhenDisabled.ts +6 -1
- package/src/utils/useMergedRefs.ts +26 -2
- package/src/utils/useRegisteredLabelId.ts +21 -0
- package/src/utils/valueToPercent.ts +7 -0
- package/src/utils/visuallyHidden.ts +24 -0
- package/dist/direction-provider/DirectionContext.cjs +0 -26
- package/dist/direction-provider/DirectionContext.cjs.map +0 -1
- package/dist/direction-provider/DirectionContext.js +0 -15
- package/dist/direction-provider/DirectionContext.js.map +0 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CSSProperties } from 'vue'
|
|
3
|
+
import type { BaseUIComponentProps } from '../../utils/types'
|
|
4
|
+
import type { SliderRootState } from '../root/SliderRoot.vue'
|
|
5
|
+
import { computed, onMounted, ref, useAttrs } from 'vue'
|
|
6
|
+
import { mergeProps } from '../../merge-props/mergeProps'
|
|
7
|
+
import { useRenderElement } from '../../utils/useRenderElement'
|
|
8
|
+
import { valueToPercent } from '../../utils/valueToPercent'
|
|
9
|
+
import { useSliderRootContext } from '../root/SliderRootContext'
|
|
10
|
+
import { sliderStateAttributesMapping } from '../root/stateAttributesMapping'
|
|
11
|
+
|
|
12
|
+
export interface SliderIndicatorState extends SliderRootState {}
|
|
13
|
+
export interface SliderIndicatorProps extends BaseUIComponentProps<SliderIndicatorState> {}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Visualizes the current value of the slider.
|
|
17
|
+
* Renders a `<div>` element.
|
|
18
|
+
*
|
|
19
|
+
* Documentation: [Base UI Vue Slider](https://baseui-vue.com/docs/components/slider)
|
|
20
|
+
*/
|
|
21
|
+
defineOptions({
|
|
22
|
+
name: 'SliderIndicator',
|
|
23
|
+
inheritAttrs: false,
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
const props = withDefaults(defineProps<SliderIndicatorProps>(), {
|
|
27
|
+
as: 'div',
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
function getInsetStyles(
|
|
31
|
+
vertical: boolean,
|
|
32
|
+
range: boolean,
|
|
33
|
+
start: number | undefined,
|
|
34
|
+
end: number | undefined,
|
|
35
|
+
renderBeforeHydration: boolean,
|
|
36
|
+
mounted: boolean,
|
|
37
|
+
): CSSProperties & Record<string, unknown> {
|
|
38
|
+
const visibility
|
|
39
|
+
= start === undefined || (range && end === undefined) ? 'hidden' : undefined
|
|
40
|
+
|
|
41
|
+
const startEdge = vertical ? 'bottom' : 'insetInlineStart'
|
|
42
|
+
const mainSide = vertical ? 'height' : 'width'
|
|
43
|
+
const crossSide = vertical ? 'width' : 'height'
|
|
44
|
+
|
|
45
|
+
const styles: CSSProperties & Record<string, unknown> = {
|
|
46
|
+
visibility: renderBeforeHydration && !mounted ? 'hidden' : visibility,
|
|
47
|
+
position: vertical ? 'absolute' : 'relative',
|
|
48
|
+
[crossSide]: 'inherit',
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
styles['--start-position'] = `${start ?? 0}%`
|
|
52
|
+
|
|
53
|
+
if (!range) {
|
|
54
|
+
styles[startEdge] = 0
|
|
55
|
+
styles[mainSide] = 'var(--start-position)'
|
|
56
|
+
return styles
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
styles['--relative-size'] = `${(end ?? 0) - (start ?? 0)}%`
|
|
60
|
+
styles[startEdge] = 'var(--start-position)'
|
|
61
|
+
styles[mainSide] = 'var(--relative-size)'
|
|
62
|
+
return styles
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function getCenteredStyles(
|
|
66
|
+
vertical: boolean,
|
|
67
|
+
range: boolean,
|
|
68
|
+
start: number,
|
|
69
|
+
end: number,
|
|
70
|
+
): CSSProperties {
|
|
71
|
+
const startEdge = vertical ? 'bottom' : 'insetInlineStart'
|
|
72
|
+
const mainSide = vertical ? 'height' : 'width'
|
|
73
|
+
const crossSide = vertical ? 'width' : 'height'
|
|
74
|
+
|
|
75
|
+
const styles: CSSProperties = {
|
|
76
|
+
position: vertical ? 'absolute' : 'relative',
|
|
77
|
+
[crossSide]: 'inherit',
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (!range) {
|
|
81
|
+
styles[startEdge] = 0
|
|
82
|
+
styles[mainSide] = `${start}%`
|
|
83
|
+
return styles
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
styles[startEdge] = `${start}%`
|
|
87
|
+
styles[mainSide] = `${end - start}%`
|
|
88
|
+
return styles
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const attrs = useAttrs()
|
|
92
|
+
const rootContext = useSliderRootContext()
|
|
93
|
+
const isMounted = ref(false)
|
|
94
|
+
onMounted(() => {
|
|
95
|
+
isMounted.value = true
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
const vertical = computed(() => rootContext.orientation.value === 'vertical')
|
|
99
|
+
const range = computed(() => rootContext.values.value.length > 1)
|
|
100
|
+
|
|
101
|
+
const style = computed(() => rootContext.inset.value
|
|
102
|
+
? getInsetStyles(
|
|
103
|
+
vertical.value,
|
|
104
|
+
range.value,
|
|
105
|
+
rootContext.indicatorPosition.value[0],
|
|
106
|
+
rootContext.indicatorPosition.value[1],
|
|
107
|
+
rootContext.renderBeforeHydration.value,
|
|
108
|
+
isMounted.value,
|
|
109
|
+
)
|
|
110
|
+
: getCenteredStyles(
|
|
111
|
+
vertical.value,
|
|
112
|
+
range.value,
|
|
113
|
+
valueToPercent(rootContext.values.value[0], rootContext.min.value, rootContext.max.value),
|
|
114
|
+
valueToPercent(
|
|
115
|
+
rootContext.values.value[rootContext.values.value.length - 1],
|
|
116
|
+
rootContext.min.value,
|
|
117
|
+
rootContext.max.value,
|
|
118
|
+
),
|
|
119
|
+
))
|
|
120
|
+
|
|
121
|
+
const indicatorProps = computed(() => mergeProps(
|
|
122
|
+
attrs as Record<string, unknown>,
|
|
123
|
+
{
|
|
124
|
+
'data-base-ui-slider-indicator': rootContext.renderBeforeHydration.value ? '' : undefined,
|
|
125
|
+
'style': style.value,
|
|
126
|
+
'suppressHydrationWarning': rootContext.renderBeforeHydration.value || undefined,
|
|
127
|
+
},
|
|
128
|
+
))
|
|
129
|
+
|
|
130
|
+
const { tag, mergedProps, renderless, ref: renderRef } = useRenderElement({
|
|
131
|
+
componentProps: props,
|
|
132
|
+
state: rootContext.state,
|
|
133
|
+
props: indicatorProps,
|
|
134
|
+
defaultTagName: 'div',
|
|
135
|
+
stateAttributesMapping: sliderStateAttributesMapping,
|
|
136
|
+
})
|
|
137
|
+
</script>
|
|
138
|
+
|
|
139
|
+
<template>
|
|
140
|
+
<slot v-if="renderless" :ref="renderRef" :props="mergedProps" :state="rootContext.state" />
|
|
141
|
+
<component :is="tag" v-else :ref="renderRef" v-bind="mergedProps">
|
|
142
|
+
<slot />
|
|
143
|
+
</component>
|
|
144
|
+
</template>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export enum SliderIndicatorDataAttributes {
|
|
2
|
+
/**
|
|
3
|
+
* Present while the user is dragging.
|
|
4
|
+
*/
|
|
5
|
+
dragging = 'data-dragging',
|
|
6
|
+
/**
|
|
7
|
+
* Indicates the orientation of the slider.
|
|
8
|
+
* @type {'horizontal' | 'vertical'}
|
|
9
|
+
*/
|
|
10
|
+
orientation = 'data-orientation',
|
|
11
|
+
/**
|
|
12
|
+
* Present when the slider is disabled.
|
|
13
|
+
*/
|
|
14
|
+
disabled = 'data-disabled',
|
|
15
|
+
/**
|
|
16
|
+
* Present when the slider is in valid state (when wrapped in Field.Root).
|
|
17
|
+
*/
|
|
18
|
+
valid = 'data-valid',
|
|
19
|
+
/**
|
|
20
|
+
* Present when the slider is in invalid state (when wrapped in Field.Root).
|
|
21
|
+
*/
|
|
22
|
+
invalid = 'data-invalid',
|
|
23
|
+
/**
|
|
24
|
+
* Present when the slider has been touched (when wrapped in Field.Root).
|
|
25
|
+
*/
|
|
26
|
+
touched = 'data-touched',
|
|
27
|
+
/**
|
|
28
|
+
* Present when the slider's value has changed (when wrapped in Field.Root).
|
|
29
|
+
*/
|
|
30
|
+
dirty = 'data-dirty',
|
|
31
|
+
/**
|
|
32
|
+
* Present when the slider is focused (when wrapped in Field.Root).
|
|
33
|
+
*/
|
|
34
|
+
focused = 'data-focused',
|
|
35
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { BaseUIComponentProps } from '../../utils/types'
|
|
3
|
+
import type { SliderRootState } from '../root/SliderRoot.vue'
|
|
4
|
+
import { isHTMLElement } from '@floating-ui/utils/dom'
|
|
5
|
+
import { computed, useAttrs } from 'vue'
|
|
6
|
+
import { focusElementWithVisible, useLabel } from '../../labelable-provider/useLabel'
|
|
7
|
+
import { mergeProps } from '../../merge-props/mergeProps'
|
|
8
|
+
import { ownerDocument } from '../../utils/owner'
|
|
9
|
+
import { useRenderElement } from '../../utils/useRenderElement'
|
|
10
|
+
import { useSliderRootContext } from '../root/SliderRootContext'
|
|
11
|
+
import { sliderStateAttributesMapping } from '../root/stateAttributesMapping'
|
|
12
|
+
|
|
13
|
+
export type SliderLabelState = SliderRootState
|
|
14
|
+
export interface SliderLabelProps extends BaseUIComponentProps<SliderLabelState> {}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* An accessible label that is automatically associated with the slider thumbs.
|
|
18
|
+
* Renders a `<div>` element.
|
|
19
|
+
*
|
|
20
|
+
* Documentation: [Base UI Vue Slider](https://baseui-vue.com/docs/components/slider)
|
|
21
|
+
*/
|
|
22
|
+
defineOptions({
|
|
23
|
+
name: 'SliderLabel',
|
|
24
|
+
inheritAttrs: false,
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
const props = withDefaults(defineProps<SliderLabelProps>(), {
|
|
28
|
+
as: 'div',
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
const attrs = useAttrs()
|
|
32
|
+
const rootContext = useSliderRootContext()
|
|
33
|
+
const label = useLabel({
|
|
34
|
+
id: computed(() => rootContext.rootLabelId.value),
|
|
35
|
+
fallbackControlId: computed(() => rootContext.controlRef.value?.id),
|
|
36
|
+
setLabelId: rootContext.setLabelId,
|
|
37
|
+
focusControl(_event, controlId) {
|
|
38
|
+
if (controlId) {
|
|
39
|
+
const controlElement = rootContext.controlRef.value
|
|
40
|
+
? ownerDocument(rootContext.controlRef.value)?.getElementById(controlId)
|
|
41
|
+
: null
|
|
42
|
+
if (isHTMLElement(controlElement)) {
|
|
43
|
+
focusElementWithVisible(controlElement)
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const fallbackInputs = rootContext.controlRef.value?.querySelectorAll('input[type="range"]')
|
|
49
|
+
const fallbackInput = fallbackInputs?.length === 1 ? fallbackInputs[0] : null
|
|
50
|
+
if (isHTMLElement(fallbackInput)) {
|
|
51
|
+
focusElementWithVisible(fallbackInput)
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
const labelProps = computed(() => mergeProps(
|
|
57
|
+
attrs as Record<string, unknown>,
|
|
58
|
+
label.props.value,
|
|
59
|
+
))
|
|
60
|
+
|
|
61
|
+
const { tag, mergedProps, renderless, ref: renderRef } = useRenderElement({
|
|
62
|
+
componentProps: props,
|
|
63
|
+
state: rootContext.state,
|
|
64
|
+
props: labelProps,
|
|
65
|
+
defaultTagName: 'div',
|
|
66
|
+
stateAttributesMapping: sliderStateAttributesMapping,
|
|
67
|
+
})
|
|
68
|
+
</script>
|
|
69
|
+
|
|
70
|
+
<template>
|
|
71
|
+
<slot v-if="renderless" :ref="renderRef" :props="mergedProps" :state="rootContext.state" />
|
|
72
|
+
<component :is="tag" v-else :ref="renderRef" v-bind="mergedProps">
|
|
73
|
+
<slot />
|
|
74
|
+
</component>
|
|
75
|
+
</template>
|