hongluan-ui
Version:
Hongluan Component Library for Vue 3
1 lines • 5.05 kB
Source Map (JSON)
{"version":3,"file":"option.mjs","sources":["../../../../../../packages/components/select/src/option.vue"],"sourcesContent":["<template>\n <li v-if=\"divider\" class=\"menu-divider\"></li>\n <li\n v-else\n v-show=\"visible\"\n :id=\"id\"\n role=\"option\"\n :aria-disabled=\"isDisabled || undefined\"\n :aria-selected=\"itemSelected\"\n :class=\"{\n [namespace]: true,\n 'select-dropdown-item': true,\n 'is-selected': itemSelected,\n 'is-disabled': isDisabled,\n 'hover': hover\n }\"\n @mouseenter=\"hoverItem\"\n @click.stop=\"selectOptionClick\"\n >\n <slot>\n <div>{{ currentLabel }}</div>\n <hl-icon v-if=\"itemSelected\">\n <system-checked />\n </hl-icon>\n </slot>\n </li>\n</template>\n\n<script lang=\"ts\">\nimport {\n toRefs,\n defineComponent,\n getCurrentInstance,\n onBeforeUnmount,\n reactive,\n nextTick,\n} from 'vue'\nimport { useId, useNamespace } from '@hongluan-ui/hooks'\nimport HlIcon from '@hongluan-ui/components/icon'\nimport { SystemChecked } from '@hongluan-ui/components/system-icon'\nimport { useOption } from './useOption'\nimport type { SelectOptionProxy } from './token'\n\nexport default defineComponent({\n name: 'Option',\n components: {\n HlIcon,\n SystemChecked,\n },\n componentName: 'Option',\n\n props: {\n /**\n * @description value of option\n */\n value: {\n type: [String, Number, Boolean, Object],\n },\n /**\n * @description label of option, same as `value` if omitted\n */\n label: [String, Number],\n created: Boolean,\n /**\n * @description whether option is disabled\n */\n disabled: Boolean,\n divider: Boolean,\n },\n\n setup(props) {\n const { namespace } = useNamespace('option')\n const id = useId()\n\n const states = reactive({\n index: -1,\n groupDisabled: false,\n visible: true,\n hitState: false,\n hover: false,\n })\n\n const {\n currentLabel,\n itemSelected,\n isDisabled,\n select,\n hoverItem,\n } = useOption(props, states)\n\n const {\n visible,\n hover,\n } = toRefs(states)\n\n const vm = getCurrentInstance().proxy\n select.onOptionCreate(vm as unknown as SelectOptionProxy)\n\n onBeforeUnmount(() => {\n const key = (vm as unknown as SelectOptionProxy).value\n const { selected } = select\n let selectedOptions = select.props.multiple ? selected : [selected]\n const doesSelected = selectedOptions.some(item => {\n return item.value === (vm as unknown as SelectOptionProxy).value\n })\n // if option is not selected, remove it from cache\n nextTick(() => {\n if (select.cachedOptions.get(key) === vm && !doesSelected) {\n select.cachedOptions.delete(key)\n }\n })\n\n select.onOptionDestroy(key, vm as unknown as SelectOptionProxy)\n })\n\n function selectOptionClick() {\n if (props.disabled !== true && states.groupDisabled !== true) {\n select.handleOptionSelect(vm)\n }\n }\n\n return {\n id,\n namespace,\n currentLabel,\n itemSelected,\n isDisabled,\n select,\n hoverItem,\n visible,\n hover,\n selectOptionClick,\n states,\n }\n },\n})\n\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_withModifiers","_renderSlot","_createElementVNode","_createBlock","_createVNode"],"mappings":";;;;;;;;;;AA2CA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA;AACF,EACA,eAAe;AAAA,EAEf,OAAO;AAAA,IAIL,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,QAAQ,SAAS,MAAM;AAAA;AACxC,IAIA,OAAO,CAAC,QAAQ,MAAM;AAAA,IACtB,SAAS;AAAA,IAIT,UAAU;AAAA,IACV,SAAS;AAAA;AACX,EAEA,MAAM,OAAO;AACX,UAAM,EAAE,cAAc,aAAa,QAAQ;AAC3C,UAAM,KAAK;AAEX,UAAM,SAAS,SAAS;AAAA,MACtB,OAAO;AAAA,MACP,eAAe;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,KACR;AAED,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,UAAU,OAAO,MAAM;AAE3B,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,OAAO,MAAM;AAEjB,UAAM,KAAK,qBAAqB;AAChC,WAAO,eAAe,EAAkC;AAExD,oBAAgB,MAAM;AACpB,YAAM,MAAO,GAAoC;AACjD,YAAM,EAAE,aAAa;AACrB,UAAI,kBAAkB,OAAO,MAAM,WAAW,WAAW,CAAC,QAAQ;AAClE,YAAM,eAAe,gBAAgB,KAAK,UAAQ;AAChD,eAAO,KAAK,UAAW,GAAoC;AAAA,OAC5D;AAED,eAAS,MAAM;AACb,YAAI,OAAO,cAAc,IAAI,GAAG,MAAM,MAAM,CAAC,cAAc;AACzD,iBAAO,cAAc,OAAO,GAAG;AAAA;AACjC,OACD;AAED,aAAO,gBAAgB,KAAK,EAAkC;AAAA,KAC/D;AAED,iCAA6B;AAC3B,UAAI,MAAM,aAAa,QAAQ,OAAO,kBAAkB,MAAM;AAC5D,eAAO,mBAAmB,EAAE;AAAA;AAC9B;AAGF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;;SAtIW,6BAAVA,mBAA6C;AAAA;IAA1B,OAAM;AAAA,qCACzBA,mBAuBK;AAAA;IApBF,IAAI;AAAA,IACL,MAAK;AAAA,IACJ,iBAAe,mBAAc;AAAA,IAC7B,iBAAe;AAAA,IACf,OAAKC;AAAA,OAAW,iBAAS;AAAA;qBAAkE;AAAA,qBAAmC;AAAA,eAA2B;AAAA;IAOzJ,cAAY;AAAA,IACZ,SAAKC,cAAO,wBAAiB;AAAA;IAE9BC,WAKO,4BALP,MAKO;AAAA,MAJLC,mBAA6B,6BAArB,iBAAY;AAAA,MACL,kCAAfC,YAEU;AAAA,yBADR,MAAkB;AAAA,UAAlBC,YAAkB;AAAA;;;;;YAlBd,YAAO;AAAA;;;;;;"}