choo-taro-ui-vue3
Version:
Taro UI Rewritten in Vue 3.0
748 lines (721 loc) • 49 kB
JavaScript
import Taro from '@tarojs/taro';
import { defineComponent, toRefs, renderSlot, resolveComponent, mergeProps, withCtx, openBlock, createBlock, computed, createCommentVNode, createVNode, normalizeClass, normalizeStyle, toDisplayString, createTextVNode, reactive, watch, nextTick, toRef, Fragment, createElementBlock, ref, onMounted, onBeforeMount, renderList } from 'vue';
import { pxTransform, delayQuerySelector } from '../utils';
import { useIconStyle, useIconClasses } from '../composables';
const AtList = defineComponent({
name: "AtList",
props: {
hasBorder: { type: Boolean, default: true }
},
setup(props) {
return {
...toRefs(props)
};
}
});
// Binding optimization for webpack code-split
const _renderSlot$1 = renderSlot, _resolveComponent$3 = resolveComponent, _mergeProps$2 = mergeProps, _withCtx$3 = withCtx, _openBlock$3 = openBlock, _createBlock$3 = createBlock;
function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
const _component_taro_view = process.env.TARO_ENV === "h5" ? _resolveComponent$3("taro-view") : "view";
return (_openBlock$3(), _createBlock$3(_component_taro_view, _mergeProps$2(_ctx.$attrs, {
class: ['at-list', {
'at-list--no-border': !_ctx.hasBorder
}]
}), {
default: _withCtx$3(() => [
_renderSlot$1(_ctx.$slots, "default")
]),
_: 3 /* FORWARDED */
}, 16 /* FULL_PROPS */, ["class"]))
}
AtList.render = _sfc_render$3;
const AtListItem = defineComponent({
name: "AtListItem",
emits: ["click", "switch-change"],
props: {
note: String,
title: { type: String, default: "" },
thumb: String,
extraText: String,
extraThumb: String,
switchColor: { type: String, default: "#6190E8" },
disabled: Boolean,
isSwitch: Boolean,
switchChecked: Boolean,
hasBorder: Boolean,
iconInfo: Object,
arrow: {
type: String,
validator: (prop) => ["up", "down", "right"].includes(prop)
}
},
setup(props, { emit }) {
const rootClasses = computed(() => ["at-list__item", {
"at-list__item--thumb": props.thumb,
"at-list__item--multiple": props.note,
"at-list__item--disabled": props.disabled,
"at-list__item--no-border": !props.hasBorder
}]);
const { iconStyle } = useIconStyle(props.iconInfo, "", 24);
const { iconClasses } = useIconClasses(props.iconInfo, true);
const arrowClasses = computed(() => {
if (!props.arrow)
return {};
let arrow = "right";
if (["up", "down"].includes(props.arrow)) {
arrow = props.arrow;
}
return {
[`at-icon-chevron-${arrow}`]: Boolean(props.arrow)
};
});
function handleClick(e) {
if (!props.disabled) {
emit("click", e);
}
}
function handleSwitchClick(e) {
e.stopPropagation();
}
function handleSwitchChange(e) {
if (!props.disabled) {
emit("switch-change", e);
}
}
return {
...toRefs(props),
rootClasses,
iconStyle,
iconClasses,
arrowClasses,
handleClick,
handleSwitchClick,
handleSwitchChange
};
}
});
// Binding optimization for webpack code-split
const _createCommentVNode$2 = createCommentVNode, _resolveComponent$2 = resolveComponent, _createVNode$2 = createVNode, _withCtx$2 = withCtx, _openBlock$2 = openBlock, _createBlock$2 = createBlock, _normalizeClass$1 = normalizeClass, _normalizeStyle$2 = normalizeStyle, _toDisplayString$2 = toDisplayString, _createTextVNode$2 = createTextVNode, _mergeProps$1 = mergeProps;
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
const _component_taro_image = process.env.TARO_ENV === "h5" ? _resolveComponent$2("taro-image") : "image";
const _component_taro_view = process.env.TARO_ENV === "h5" ? _resolveComponent$2("taro-view") : "view";
const _component_taro_switch = process.env.TARO_ENV === "h5" ? _resolveComponent$2("taro-switch") : "switch";
return (_openBlock$2(), _createBlock$2(_component_taro_view, _mergeProps$1(_ctx.$attrs, {
class: _ctx.rootClasses,
onTap: _ctx.handleClick
}), {
default: _withCtx$2(() => [
_createVNode$2(_component_taro_view, { class: "at-list__item-container" }, {
default: _withCtx$2(() => [
_createCommentVNode$2(" thumb "),
(_ctx.thumb)
? (_openBlock$2(), _createBlock$2(_component_taro_view, {
key: 0,
class: "item-thumb at-list__item-thumb"
}, {
default: _withCtx$2(() => [
_createVNode$2(_component_taro_image, {
class: "item-thumb__info",
mode: "scaleToFill",
src: _ctx.thumb
}, null, 8 /* PROPS */, ["src"])
]),
_: 1 /* STABLE */
}))
: _createCommentVNode$2("v-if", true),
_createCommentVNode$2(" icon "),
(_ctx.iconInfo && _ctx.iconInfo.value)
? (_openBlock$2(), _createBlock$2(_component_taro_view, {
key: 1,
class: "item-icon at-list__item-icon"
}, {
default: _withCtx$2(() => [
_createVNode$2(_component_taro_view, {
class: _normalizeClass$1(_ctx.iconClasses),
style: _normalizeStyle$2(_ctx.iconStyle)
}, null, 8 /* PROPS */, ["class", "style"])
]),
_: 1 /* STABLE */
}))
: _createCommentVNode$2("v-if", true),
_createCommentVNode$2(" content "),
_createVNode$2(_component_taro_view, { class: "item-content at-list__item-content" }, {
default: _withCtx$2(() => [
_createVNode$2(_component_taro_view, { class: "item-content__info" }, {
default: _withCtx$2(() => [
_createVNode$2(_component_taro_view, { class: "item-content__info-title" }, {
default: _withCtx$2(() => [
_createTextVNode$2(_toDisplayString$2(_ctx.title), 1 /* TEXT */)
]),
_: 1 /* STABLE */
}),
(_ctx.note)
? (_openBlock$2(), _createBlock$2(_component_taro_view, {
key: 0,
class: "item-content__info-note"
}, {
default: _withCtx$2(() => [
_createTextVNode$2(_toDisplayString$2(_ctx.note), 1 /* TEXT */)
]),
_: 1 /* STABLE */
}))
: _createCommentVNode$2("v-if", true)
]),
_: 1 /* STABLE */
})
]),
_: 1 /* STABLE */
}),
_createCommentVNode$2(" extra items "),
_createVNode$2(_component_taro_view, { class: "item-extra at-list__item-extra" }, {
default: _withCtx$2(() => [
_createCommentVNode$2(" extra text "),
(_ctx.extraText)
? (_openBlock$2(), _createBlock$2(_component_taro_view, {
key: 0,
class: "item-extra__info"
}, {
default: _withCtx$2(() => [
_createTextVNode$2(_toDisplayString$2(_ctx.extraText), 1 /* TEXT */)
]),
_: 1 /* STABLE */
}))
: _createCommentVNode$2("v-if", true),
_createCommentVNode$2(" extra image "),
(_ctx.extraThumb && !_ctx.extraText)
? (_openBlock$2(), _createBlock$2(_component_taro_view, {
key: 1,
class: "item-extra__image"
}, {
default: _withCtx$2(() => [
_createVNode$2(_component_taro_image, {
class: "item-extra__image-info",
mode: "aspectFit",
src: _ctx.extraThumb
}, null, 8 /* PROPS */, ["src"])
]),
_: 1 /* STABLE */
}))
: _createCommentVNode$2("v-if", true),
_createCommentVNode$2(" extra switch "),
(_ctx.isSwitch && !_ctx.extraThumb && !_ctx.extraText)
? (_openBlock$2(), _createBlock$2(_component_taro_view, {
key: 2,
class: "item-extra__switch",
onTap: _cache[0] || (_cache[0] = e => _ctx.handleSwitchClick(e))
}, {
default: _withCtx$2(() => [
_createVNode$2(_component_taro_switch, {
color: _ctx.switchColor,
disabled: _ctx.disabled,
checked: _ctx.switchChecked,
onChange: _ctx.handleSwitchChange
}, null, 8 /* PROPS */, ["color", "disabled", "checked", "onChange"])
]),
_: 1 /* STABLE */
}))
: _createCommentVNode$2("v-if", true),
_createCommentVNode$2(" extra icon - arrow "),
(_ctx.arrow)
? (_openBlock$2(), _createBlock$2(_component_taro_view, {
key: 3,
class: "item-extra__icon"
}, {
default: _withCtx$2(() => [
_createVNode$2(_component_taro_view, {
class: _normalizeClass$1(['at-icon', 'item-extra__icon-arrow', _ctx.arrowClasses])
}, null, 8 /* PROPS */, ["class"])
]),
_: 1 /* STABLE */
}))
: _createCommentVNode$2("v-if", true)
]),
_: 1 /* STABLE */
})
]),
_: 1 /* STABLE */
})
]),
_: 1 /* STABLE */
}, 16 /* FULL_PROPS */, ["class", "onTap"]))
}
AtListItem.render = _sfc_render$2;
const error = "data:image/png;base64,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";
const success = "data:image/png;base64,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";
const loading = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAn1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8Kd3m4AAAANHRSTlMA6AN+QRH69xUI7Z7x2sWzcWYvphvj4MxiXVIiGAuH08K9ibepmI+Oc2tKHQ+helY5NykfkF5N9AAABmhJREFUeNrdnWlT4kAQhjt3CARIwg1yH3Lpqv3/f9tabsYJMUGCsM6b56NVVjGV6WP6pLvTijTb8bS2X29U581BaBEmLY9T1LrVpukSGhFn06n2W4SExvn4q2ecL6PxeSbrPwRBxN/iG0NSHyHs55kGB1KdVqTxBTjLnU6qo1csdx+ag8CIujXOxe+pf5QEIzPYNDo5OnlbITD2/WObM9AeHwiOYbDMEB/PgHRiwo3GaWpbKFkR6LvI4RTdF4Lk0JtyihXk/Xrnbe2kRKVHoLjjlImphwSKZXicxH4iVB4eNU6ywPHy01SME1nRTIJluOAEtgFpU/4xaHOC2YhgeRjbJble9Dplid0nXHSDEzQJGFNjyZyAGc1YUgVWXqfXqwH3dsy7XnVUf/iD1oQ/mUCfxKonvgn07ao0EnKCLPGkVxO6i6AZl8SeEDVLYuNPToLsd53cLhvZF35HSrwG/D55R5daeAathKkiLaNB0FiTsohJS/sUE9wo0QcmCxaEjcEC3BjkB/rsU0xg48L/GH2KSZ2wkWICm3VIi4kH/V4k0qccsyJsXm2OAc0zfnWEu9g+Fz20OWZL2Aw4pgYu77QoiRtMQ0eoYMC6lWxj8kjYVDThz0PHHt95LIvievBEpRq4LSGjLL6jJepWfPRP8umo7AgbV9iSJYGzFvXC6lc+n+eNYwICR7ywpgROj2MQOgTOcXBK4gNTJEwJgbPjGJBOmlx04QOvCZyNKIkgcEKOAc8yyEa0ZwJnWZKgIwVlUcBDjsHqMc2gXY5yCKJjOaqGiPoiBkHg7EtjSUQ/I3gJAVGjHGVcRJuySLswiV0CxxQ5HwJnxDHoySsSoVPwkg6iLv9jQOBEZdG/Rjkqm4mCshgSkXRvEDhmSeq3KCzLa1c48u2PASxaBPvodUXGPR6J46GexBLVHMKiRIRJRWTgSBOfBhNd1M+SqKwDzVfLg4i8D2h5irxaHrZDL4Vdww6oSPUroo57gkQaRB/7iSVdlDp2iEs6jQ3st6J046vYJR3yYTXHrh+QT90mQztbMvgwwA46ynBQiB10lAE6i2MgW2CTIdMasiFJBrG7yPo3mVYQhmRDgCQTPU3kEFcy9WYip3iTyVCXcR350/R0B7cOIlkwIKX9SHDIEo7ksdoEx2lRTQu2Ejhd5uSjmsR04dkKtYMhXQr4zKBh03RxpsuYkZSv5bITTHfrawHzWtwtqEh2Rkn5H8jOq6wifx8xApHVdmEAdl5lNsIMARstZWtSVufVjGDIbhYLOOaNQMhp3zs4aN0xeQ2VS/F3kMyVbHHNU8pjgiC36Vj3oWZ0nGkD70HN6DjTmK93gGZ0nB2VsAWa0SGHV2DP6Pjmpz7CSIkc8HL+4jmKh1O+HbljgIxBlEOQ8pUzQtL9+7FUUnG1FVbBlwwK07sAjsr8ktFtLxxjv5KiXDhMb8UxU0UDKpeON7Q8xY3JxQMne8wqp6sLjACtqzxEu8hQ1tBWd4h2sTG5T+oO0S44uHihqpgUHSXtyiHaSpX+Fx/ubdoqLmG5Zty6oeASlqsG4Osz5ZawXLmSYKSptoSl8JIIKSZKOcLXr+3oK7WEJblIBXmdzM9+y5xVuV0/XTZ0VGNlXHL90/FKjafCyrhbLOSq1H9/ZdxtVqRZyZVxLSqKQkvrrPoPdpAqtUYweUO50Ipb1RY76sffWXGbXrV51G8SECt+vVRcftrkotdL1XW0fZsl01f6BoUXBJ98ZXv8QLmovrL5RO64PaAc1F+irRs2J1gMKQuIteYn14sdI0etAyyadxecRHtMiQrQ6v8nm5N4hkU3xTI8TmI/0Z0I63xCbezSzXDHNT6hHtL96Hl8grN+o5vwtnb4BK9Hd8VacYpZ70A/5NCbcYqVRffmpcspnGin09Xou8jhFN0X+g/o2xqn0TbhlWK30ThNbavT3ZHqJY22DIYFTV+wFKcoqAzvpPAl7WN/Txex7x/bLMk1T/ensu1wJp3GJjBHlMvIDDaNvP/dVuj/o/d8zqXWjYxgYIZ716roesVy96E5CIyoW+Nc/J5Ov4O+Wzp8I5zlTqdf5BBM+QZMAwXaC4aGzz/CN5SpdPuznvCVTNaKLatwn1c+F8RfPatZwd7qVzt8IZ1qX6nk9xdcs1kVOjZPM1ebpppf4itWOGjOq42639Y8x7YdT2v79UZ13hyEFt2Fv6Loy9OZgJFyAAAAAElFTkSuQmCC";
var statusImg = {
error: error,
success: success,
loading: loading
};
const AtToast = defineComponent({
name: "AtToast",
emits: ["click", "close"],
inheritAttrs: false,
props: {
isOpened: Boolean,
hasMask: Boolean,
text: String,
icon: String,
image: String,
duration: { type: Number, default: 3e3 },
status: {
type: String,
default: "",
validator: (val) => ["", "error", "loading", "success"].includes(val)
}
},
setup(props, { emit }) {
const state = reactive({
_timer: null,
_isOpened: props.isOpened
});
if (props.isOpened) {
makeTimer(props.duration || 0);
}
const useImg = computed(() => props.image || statusImg[props.status] || null);
const useIcon = computed(() => Boolean(props.icon && !useImg.value));
const bodyClasses = computed(() => ({
"toast-body--text": !props.icon && !useImg.value,
"at-toast__body--custom-image": props.image,
[`at-toast__body--${props.status}`]: !!props.status
}));
const iconClasses = computed(() => ["at-icon", {
[`at-icon-${props.icon}`]: props.icon
}]);
watch(() => [
props.isOpened,
props.duration
], ([isOpened, duration]) => {
if (!isOpened) {
close();
return;
}
if (!state._isOpened) {
state._isOpened = true;
} else {
clearTimer();
}
makeTimer(duration || 0);
});
function clearTimer() {
if (state._timer) {
clearTimeout(state._timer);
state._timer = null;
}
}
function makeTimer(duration) {
state._timer = setTimeout(() => {
close();
}, +duration);
}
function close() {
if (state._isOpened) {
state._isOpened = false;
nextTick(handleClose);
clearTimer();
}
}
function handleClose(e) {
emit("close", e);
}
function handleClick(e) {
if (props.status === "loading")
return;
emit("click", e);
close();
}
return {
isOpened: toRef(state, "_isOpened"),
hasMask: toRef(props, "hasMask"),
text: toRef(props, "text"),
bodyClasses,
iconClasses,
useImg,
useIcon,
handleClick
};
}
});
// Binding optimization for webpack code-split
const _createCommentVNode$1 = createCommentVNode, _resolveComponent$1 = resolveComponent, _openBlock$1 = openBlock, _createBlock$1 = createBlock, _createVNode$1 = createVNode, _withCtx$1 = withCtx, _normalizeClass = normalizeClass, _Fragment$1 = Fragment, _createElementBlock$1 = createElementBlock, _toDisplayString$1 = toDisplayString, _createTextVNode$1 = createTextVNode, _normalizeStyle$1 = normalizeStyle;
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
const _component_taro_view = process.env.TARO_ENV === "h5" ? _resolveComponent$1("taro-view") : "view";
const _component_taro_image = process.env.TARO_ENV === "h5" ? _resolveComponent$1("taro-image") : "image";
const _component_taro_text = process.env.TARO_ENV === "h5" ? _resolveComponent$1("taro-text") : "text";
return (_ctx.isOpened)
? (_openBlock$1(), _createBlock$1(_component_taro_view, {
key: 0,
class: _normalizeClass(['at-toast', Boolean(_ctx.$attrs.class) && _ctx.$attrs.class])
}, {
default: _withCtx$1(() => [
_createCommentVNode$1(" mask layer "),
(_ctx.hasMask)
? (_openBlock$1(), _createBlock$1(_component_taro_view, {
key: 0,
class: "at-toast__overlay"
}))
: _createCommentVNode$1("v-if", true),
_createCommentVNode$1(" body "),
_createVNode$1(_component_taro_view, {
class: _normalizeClass(['toast-body', _ctx.bodyClasses]),
style: _normalizeStyle$1(Boolean(_ctx.$attrs.style) && _ctx.$attrs.style),
onTap: _ctx.handleClick
}, {
default: _withCtx$1(() => [
_createVNode$1(_component_taro_view, { class: "toast-body-content" }, {
default: _withCtx$1(() => [
_createCommentVNode$1(" use image "),
(_ctx.useImg)
? (_openBlock$1(), _createBlock$1(_component_taro_view, {
key: 0,
class: "toast-body-content__img"
}, {
default: _withCtx$1(() => [
_createVNode$1(_component_taro_image, {
class: "toast-body-content__img-item",
mode: "scaleToFill",
src: _ctx.useImg
}, null, 8 /* PROPS */, ["src"])
]),
_: 1 /* STABLE */
}))
: (_ctx.useIcon)
? (_openBlock$1(), _createElementBlock$1(_Fragment$1, { key: 1 }, [
_createCommentVNode$1(" use icon "),
_createVNode$1(_component_taro_view, { class: "toast-body-content__icon" }, {
default: _withCtx$1(() => [
_createVNode$1(_component_taro_text, {
class: _normalizeClass(_ctx.iconClasses)
}, null, 8 /* PROPS */, ["class"])
]),
_: 1 /* STABLE */
})
], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
: _createCommentVNode$1("v-if", true),
_createCommentVNode$1(" content text "),
(_ctx.text)
? (_openBlock$1(), _createBlock$1(_component_taro_view, {
key: 2,
class: "toast-body-content__info"
}, {
default: _withCtx$1(() => [
_createVNode$1(_component_taro_text, null, {
default: _withCtx$1(() => [
_createTextVNode$1(_toDisplayString$1(_ctx.text), 1 /* TEXT */)
]),
_: 1 /* STABLE */
})
]),
_: 1 /* STABLE */
}))
: _createCommentVNode$1("v-if", true)
]),
_: 1 /* STABLE */
})
]),
_: 1 /* STABLE */
}, 8 /* PROPS */, ["class", "style", "onTap"])
]),
_: 1 /* STABLE */
}, 8 /* PROPS */, ["class"]))
: _createCommentVNode$1("v-if", true)
}
AtToast.render = _sfc_render$1;
const AtIndexes = defineComponent({
name: "AtIndexes",
components: {
AtList,
AtListItem,
AtToast
},
emits: {
"click"(item) {
return !!(item && typeof item === "object");
},
"scroll-into-view"(fn) {
return !!(fn && typeof fn === "function");
}
},
props: {
animation: Boolean,
isVibrate: {
type: Boolean,
default: true
},
showToast: {
type: Boolean,
default: true
},
topKey: {
type: String,
default: "Top"
},
list: {
type: Array,
default: () => []
}
},
setup(props, { emit }) {
const menuHeight = ref(0);
const startTop = ref(0);
const itemHeight = ref(0);
const scrollItemHeights = ref([]);
const currentIndex = ref(0);
const timeoutTimer = ref(null);
const state = reactive({
scrollIntoView: "",
scrollTop: 0,
tipText: "",
showToast: false,
isWEB: Taro.getEnv() === Taro.ENV_TYPE.WEB
});
const toastStyle = computed(() => ({
minWidth: pxTransform(100)
}));
const genActiveIndexStyle = computed(() => (i) => {
return currentIndex.value === i ? {
color: "white",
backgroundColor: "rgba(97, 144, 232, 1)",
borderRadius: "40px"
} : {};
});
watch(() => props.list, (list, prevList) => {
if (list.length !== prevList.length) {
initData();
}
});
function handleClick(item) {
emit("click", item);
}
function handleTouchmove(e) {
e.stopPropagation();
e.preventDefault();
const pageY = e.touches[0].pageY;
const index = Math.floor((pageY - startTop.value) / itemHeight.value);
if (index >= 0 && index <= props.list.length && currentIndex.value !== index) {
currentIndex.value = index;
const key = index > 0 ? props.list[index - 1].key : "top";
const touchView = `at-indexes__list-${key}`;
jumpTarget(touchView, index);
}
}
function jumpTarget(scrollIntoView, idx) {
currentIndex.value = idx;
updateState({
scrollIntoView,
scrollTop: scrollItemHeights.value[idx],
tipText: idx === 0 ? props.topKey : props.list[idx - 1].key
});
}
function __jumpTarget(key) {
const index = props.list.findIndex((item) => item.key === key);
const targetView = `at-indexes__list-${key}`;
jumpTarget(targetView, index + 1);
}
function updateState(stateValue) {
const { scrollIntoView, tipText, scrollTop } = stateValue;
state.tipText = tipText;
state.scrollTop = scrollTop;
state.showToast = props.showToast;
state.scrollIntoView = scrollIntoView;
nextTick(() => {
clearTimeout(timeoutTimer.value);
timeoutTimer.value = setTimeout(() => {
state.tipText = "";
state.showToast = false;
}, 1e3);
});
if (props.isVibrate) {
Taro.vibrateShort();
}
}
async function initData() {
if (props.list.length > 0) {
await _getScrollListItemHeights(props.list).then((res) => {
scrollItemHeights.value = [...res];
});
delayQuerySelector(this, ".at-indexes__menu").then((rect) => {
const len = props.list.length;
menuHeight.value = rect[0].height;
startTop.value = rect[0].top;
itemHeight.value = Math.floor(menuHeight.value / (len + 1));
});
}
}
function _getHeight(selector, delay = 500) {
return new Promise((resolve) => {
delayQuerySelector(this, selector, delay).then((rect) => {
if (rect && rect[0]) {
resolve(rect[0].height);
}
});
});
}
function _getScrollListItemHeights(list) {
return new Promise((resolve) => {
if (list.length > 0) {
let rawHeights = [];
let itemHeights = [];
rawHeights.push(_getHeight(`#at-indexes__top`));
list.forEach((item) => {
rawHeights.push(_getHeight(`#at-indexes__list-${item.key}`));
});
Promise.all(rawHeights).then((res) => {
let height = 0;
itemHeights.push(height);
for (let i = 0; i < res.length; i++) {
height += res[i];
itemHeights.push(height);
}
resolve(itemHeights);
});
}
});
}
function handleScroll(e) {
if (e && e.detail) {
state.scrollIntoView = "";
for (let i = 0; i < scrollItemHeights.value.length - 1; i++) {
let h1 = Math.floor(scrollItemHeights.value[i]);
let h2 = Math.floor(scrollItemHeights.value[i + 1]);
if (e.detail.scrollTop >= h1 && e.detail.scrollTop < h2) {
currentIndex.value = i;
return;
}
}
}
}
onMounted(() => {
initData();
});
onBeforeMount(() => {
emit("scroll-into-view", __jumpTarget);
});
return {
...toRefs(props),
...toRefs(state),
toastStyle,
jumpTarget,
handleClick,
handleScroll,
handleTouchmove,
genActiveIndexStyle
};
}
});
// Binding optimization for webpack code-split
const _createCommentVNode = createCommentVNode, _toDisplayString = toDisplayString, _createTextVNode = createTextVNode, _resolveComponent = resolveComponent, _normalizeStyle = normalizeStyle, _withCtx = withCtx, _createVNode = createVNode, _renderList = renderList, _Fragment = Fragment, _openBlock = openBlock, _createElementBlock = createElementBlock, _createBlock = createBlock, _renderSlot = renderSlot, _mergeProps = mergeProps;
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_taro_view = process.env.TARO_ENV === "h5" ? _resolveComponent("taro-view") : "view";
const _component_at_list_item = _resolveComponent("at-list-item");
const _component_at_list = _resolveComponent("at-list");
const _component_taro_scroll_view = process.env.TARO_ENV === "h5" ? _resolveComponent("taro-scroll-view") : "scroll-view";
const _component_at_toast = _resolveComponent("at-toast");
return (_openBlock(), _createBlock(_component_taro_view, _mergeProps(_ctx.$attrs, { class: "at-indexes" }), {
default: _withCtx(() => [
_createCommentVNode(" menu"),
_createVNode(_component_taro_view, {
class: "at-indexes__menu",
onTouchmove: _ctx.handleTouchmove
}, {
default: _withCtx(() => [
_createCommentVNode(" top key "),
_createVNode(_component_taro_view, {
class: "at-indexes__menu-item",
style: _normalizeStyle(_ctx.genActiveIndexStyle(0)),
onTap: _cache[0] || (_cache[0] = $event => (_ctx.jumpTarget('at-indexes__top', 0)))
}, {
default: _withCtx(() => [
_createTextVNode(_toDisplayString(_ctx.topKey), 1 /* TEXT */)
]),
_: 1 /* STABLE */
}, 8 /* PROPS */, ["style"]),
_createCommentVNode(" menu letters "),
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.list, (dataList, i) => {
return (_openBlock(), _createBlock(_component_taro_view, {
key: `${dataList.key}-${i+1}`,
class: "at-indexes__menu-item",
style: _normalizeStyle(_ctx.genActiveIndexStyle(i+1)),
onTap: $event => (_ctx.jumpTarget(`at-indexes__list-${dataList.key}`, i + 1))
}, {
default: _withCtx(() => [
_createTextVNode(_toDisplayString(dataList.key), 1 /* TEXT */)
]),
_: 2 /* DYNAMIC */
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["style", "onTap"]))
}), 128 /* KEYED_FRAGMENT */))
]),
_: 1 /* STABLE */
}, 8 /* PROPS */, ["onTouchmove"]),
_createCommentVNode(" scroll view of indexes "),
_createVNode(_component_taro_scroll_view, {
class: "at-indexes__body",
"scroll-y": "",
"enable-back-to-top": "",
"scroll-top": _ctx.scrollTop,
"scroll-into-view": !_ctx.isWEB ? _ctx.scrollIntoView : '',
"scroll-with-animation": _ctx.animation,
onScroll: _ctx.handleScroll
}, {
default: _withCtx(() => [
_createCommentVNode(" default slot content "),
_createVNode(_component_taro_view, {
id: "at-indexes__top",
class: "at-indexes__content"
}, {
default: _withCtx(() => [
_renderSlot(_ctx.$slots, "default")
]),
_: 3 /* FORWARDED */
}),
_createCommentVNode(" indexes list "),
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.list, (dataList) => {
return (_openBlock(), _createBlock(_component_taro_view, {
key: dataList.key,
id: `at-indexes__list-${dataList.key}`,
class: "at-indexes__list"
}, {
default: _withCtx(() => [
_createCommentVNode(" list title "),
_createVNode(_component_taro_view, { class: "at-indexes__list-title" }, {
default: _withCtx(() => [
_createTextVNode(_toDisplayString(dataList.title), 1 /* TEXT */)
]),
_: 2 /* DYNAMIC */
}, 1024 /* DYNAMIC_SLOTS */),
_createCommentVNode(" list items "),
(dataList.items && dataList.items.length > 0)
? (_openBlock(), _createBlock(_component_at_list, { key: 0 }, {
default: _withCtx(() => [
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(dataList.items, (item, i) => {
return (_openBlock(), _createBlock(_component_at_list_item, {
key: `${item.name}-${i}`,
title: item.name,
onClick: $event => (_ctx.handleClick(item))
}, null, 8 /* PROPS */, ["title", "onClick"]))
}), 128 /* KEYED_FRAGMENT */))
]),
_: 2 /* DYNAMIC */
}, 1024 /* DYNAMIC_SLOTS */))
: _createCommentVNode("v-if", true)
]),
_: 2 /* DYNAMIC */
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["id"]))
}), 128 /* KEYED_FRAGMENT */))
]),
_: 3 /* FORWARDED */
}, 8 /* PROPS */, ["scroll-top", "scroll-into-view", "scroll-with-animation", "onScroll"]),
_createCommentVNode(" toast message "),
_createVNode(_component_at_toast, {
"is-opened": _ctx.showToast,
text: _ctx.tipText,
duration: 1000,
style: _normalizeStyle(_ctx.toastStyle)
}, null, 8 /* PROPS */, ["is-opened", "text", "style"])
]),
_: 3 /* FORWARDED */
}, 16 /* FULL_PROPS */))
}
AtIndexes.render = _sfc_render;
export default AtIndexes;