You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

0 lines
16 KiB

1 month ago
  1. {"ast":null,"code":"import { defineComponent, ref, reactive, computed, watch, openBlock, createElementBlock, unref, normalizeClass, createElementVNode, normalizeStyle, Fragment, renderList, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from 'vue';\nimport { useActiveElement, useResizeObserver } from '@vueuse/core';\nimport { segmentedProps, segmentedEmits } from './segmented.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useId } from '../../../hooks/use-id/index.mjs';\nimport { useFormSize, useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\nimport { useFormItem, useFormItemInputId } from '../../form/src/hooks/use-form-item.mjs';\nimport { isObject } from '@vue/shared';\nimport { debugWarn } from '../../../utils/error.mjs';\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '../../../constants/event.mjs';\nconst __default__ = defineComponent({\n name: \"ElSegmented\"\n});\nconst _sfc_main = /* @__PURE__ */defineComponent({\n ...__default__,\n props: segmentedProps,\n emits: segmentedEmits,\n setup(__props, {\n emit\n }) {\n const props = __props;\n const ns = useNamespace(\"segmented\");\n const segmentedId = useId();\n const segmentedSize = useFormSize();\n const _disabled = useFormDisabled();\n const {\n formItem\n } = useFormItem();\n const {\n inputId,\n isLabeledByFormItem\n } = useFormItemInputId(props, {\n formItemContext: formItem\n });\n const segmentedRef = ref(null);\n const activeElement = useActiveElement();\n const state = reactive({\n isInit: false,\n width: 0,\n height: 0,\n translateX: 0,\n translateY: 0,\n focusVisible: false\n });\n const handleChange = item => {\n const value = getValue(item);\n emit(UPDATE_MODEL_EVENT, value);\n emit(CHANGE_EVENT, value);\n };\n const getValue = item => {\n return isObject(item) ? item.value : item;\n };\n const getLabel = item => {\n return isObject(item) ? item.label : item;\n };\n const getDisabled = item => {\n return !!(_disabled.value || (isObject(item) ? item.disabled : false));\n };\n const getSelected = item => {\n return props.modelValue === getValue(item);\n };\n const getOption = value => {\n return props.options.find(item => getValue(item) === value);\n };\n const getItemCls = item => {\n return [ns.e(\"item\"), ns.is(\"selected\", getSelected(item)), ns.is(\"disabled\", getDisabled(item))];\n };\n const updateSelect = () => {\n if (!segmentedRef.value) return;\n const selectedItem = segmentedRef.value.querySelector(\".is-selected\");\n const selectedItemInput = segmentedRef.value.querySelector(\".is-selected input\");\n if (!selectedItem || !selectedItemInput) {\n state.width = 0;\n state.height = 0;\n state.translateX = 0;\n state.translateY = 0;\n state.focusVisible = false;\n return;\n }\n const rect = selectedItem.getBoundingClientRect();\n state.isInit = true;\n if (props.direction === \"vertical\") {\n state.height = rect.height;\n state.translateY = selectedItem.offsetTop;\n } else {\n state.width = rect.width;\n state.translateX = selectedItem.offsetLeft;\n }\n try {\n state.focusVisible = selectedItemInput.matches(\":focus-visible\");\n } catch (e) {}\n };\n const segmentedCls = computed(() => [ns.b(), ns.m(segmentedSize.value), ns.is(\"block\", props.block)]);\n const selectedStyle = computed(() => ({\n width: props.direction === \"vertical\" ? \"100%\" : `${state.width}px`,\n height: props.direction === \"vertical\" ? `${state.height}px` : \"100%\",\n transform: props.direction === \"vertical\" ? `translateY(${state.translateY}px)` : `translateX(${state.translateX}px)`,\n display: state.isInit ? \"block\" : \"none\"\n }));\n const