PopupTitle.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <script setup lang="ts">
  2. import IconButton from '../basic/IconButton.vue';
  3. import FlexRow from '../layout/FlexRow.vue';
  4. import { selectStyleType } from '../theme/ThemeTools';
  5. import { useTheme } from '../theme/ThemeDefine';
  6. import Text from '../basic/Text.vue';
  7. defineProps({
  8. top: {
  9. type: Boolean,
  10. default: false,
  11. },
  12. relative: {
  13. type: Boolean,
  14. default: false,
  15. },
  16. title: {
  17. type: String,
  18. default: '',
  19. },
  20. closeable: {
  21. type: Boolean,
  22. default: false,
  23. },
  24. closeIcon: {
  25. type: [String,Boolean],
  26. default: 'close',
  27. },
  28. closeIconSize: {
  29. type: Number,
  30. default: 36,
  31. },
  32. closeIconPosition: {
  33. type: String,
  34. default: 'right',
  35. },
  36. })
  37. const emit = defineEmits([ 'close' ])
  38. const theme = useTheme();
  39. defineOptions({
  40. options: {
  41. styleIsolation: "shared",
  42. virtualHost: true,
  43. }
  44. })
  45. </script>
  46. <template>
  47. <FlexRow
  48. pointerEvents="none"
  49. innerClass="nana-popup-title"
  50. :innerStyle="{
  51. position: relative ? 'relative' : 'absolute',
  52. display: (closeable === true && closeIcon !== false) ? 'flex' : 'none',
  53. top: top ? 0 : undefined,
  54. bottom: top ? undefined : 0,
  55. alignItems: 'center',
  56. justifyContent: 'space-between',
  57. flexDirection: selectStyleType(closeIconPosition, 'right', { left: 'row-reverse', right: 'row' }),
  58. }"
  59. >
  60. <IconButton
  61. v-if="closeable === true && closeIcon"
  62. :size="closeIconSize || theme.resolveThemeSize('PopupCloseIconSize', 25)"
  63. :innerStyle="{ pointerEvents: 'auto' }"
  64. />
  65. <Text :text="title" />
  66. <IconButton
  67. v-if="closeable === true && closeIcon"
  68. :icon="(closeIcon as string) || theme.resolveThemeSize('PopupCloseIconName', 'close')!"
  69. :size="closeIconSize || theme.resolveThemeSize('PopupCloseIconSize', 25)"
  70. :color="theme.resolveThemeSize('PopupCloseIconColor', 'text.content')"
  71. :innerStyle="{ pointerEvents: 'auto' }"
  72. @click="emit('close')"
  73. />
  74. </FlexRow>
  75. </template>
  76. <style>
  77. .nana-popup-title {
  78. z-index: 110;
  79. left: 0;
  80. right: 0;
  81. align-items: center;
  82. padding: 20rpx 20rpx;
  83. }
  84. </style>