手机底部Tab and 右侧悬浮按钮 settings pages swap their icon text inputs for the shared FaIconPicker (with a new IconValue preview component that renders FA/sprite/custom SVG values in lists and previews). footer.php tabbar/floating/sub-item icons and the VIP float render through aksrt_icon_markup so every stored format displays; GlobalControllerPart1 and the VIP helper drop the FA-only regex gate and sanitize icon values through aksrt_sanitize_icon_value. The picker popover tabs now wrap instead of overflowing, and FA grid previews use style-only classes.
49 lines
1.1 KiB
Vue
49 lines
1.1 KiB
Vue
<template>
|
|
<!-- FA class value -->
|
|
<i v-if="isFaValue(value)" :class="faClass" aria-hidden="true"></i>
|
|
<!-- Built-in sprite value -->
|
|
<span
|
|
v-else-if="isZibsvgValue(value)"
|
|
class="aksrt-icon-value__svg"
|
|
v-html="zibsvgMarkup(value)"
|
|
></span>
|
|
<!-- Inline custom SVG value -->
|
|
<span
|
|
v-else-if="isCustomSvgValue(value)"
|
|
class="aksrt-icon-value__svg"
|
|
v-html="cleanSvg(value.slice(10))"
|
|
></span>
|
|
</template>
|
|
|
|
<script setup>
|
|
/**
|
|
* IconValue — renders any icon-picker value ("fa fas fa-x", "zibsvg-key",
|
|
* "customsvg-<svg>") as inline preview markup.
|
|
*/
|
|
import { computed } from 'vue'
|
|
import { cleanSvg, isFaValue, isZibsvgValue, isCustomSvgValue, zibsvgMarkup } from '@/utils/icons.js'
|
|
|
|
const props = defineProps({
|
|
value: { type: String, default: '' },
|
|
})
|
|
|
|
const faClass = computed(() => {
|
|
const raw = String(props.value || '').trim()
|
|
if (raw.startsWith('fa-')) return `fa fas ${raw}`
|
|
return raw
|
|
})
|
|
</script>
|
|
|
|
<style scoped>
|
|
.aksrt-icon-value__svg {
|
|
display: inline-flex;
|
|
}
|
|
|
|
.aksrt-icon-value__svg :deep(svg),
|
|
.aksrt-icon-value__svg svg {
|
|
width: 1em;
|
|
height: 1em;
|
|
fill: currentColor;
|
|
}
|
|
</style>
|