SelectorElementsDetail.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <template>
  2. <ui-tabs
  3. :model-value="activeTab"
  4. class="mt-2"
  5. fill
  6. @change="$emit('update:activeTab', $event)"
  7. >
  8. <ui-tab value="attributes"> Attributes </ui-tab>
  9. <ui-tab v-if="selectElements.length > 0" value="options"> Options </ui-tab>
  10. <ui-tab value="blocks"> Blocks </ui-tab>
  11. </ui-tabs>
  12. <ui-tab-panels
  13. :model-value="activeTab"
  14. class="overflow-y-auto scroll"
  15. style="max-height: calc(100vh - 17rem)"
  16. >
  17. <ui-tab-panel value="attributes">
  18. <selector-element-list
  19. :elements="selectedElements"
  20. @highlight="$emit('highlight', $event)"
  21. >
  22. <template #item="{ element }">
  23. <div
  24. v-for="(value, name) in element.attributes"
  25. :key="name"
  26. class="bg-box-transparent mb-1 rounded-lg py-2 px-3"
  27. >
  28. <p
  29. class="text-sm text-overflow leading-tight text-gray-600"
  30. title="Attribute name"
  31. >
  32. {{ name }}
  33. </p>
  34. <input
  35. :value="value"
  36. readonly
  37. title="Attribute value"
  38. class="bg-transparent w-full"
  39. />
  40. </div>
  41. </template>
  42. </selector-element-list>
  43. </ui-tab-panel>
  44. <ui-tab-panel value="options">
  45. <selector-element-list
  46. :elements="selectElements"
  47. element-name="Select element options"
  48. @highlight="
  49. $emit('highlight', {
  50. index: $event.element.index,
  51. highlight: $event.highlight,
  52. })
  53. "
  54. >
  55. <template #item="{ element }">
  56. <div
  57. v-for="option in element.options"
  58. :key="option.name"
  59. class="bg-box-transparent mb-1 rounded-lg py-2 px-3"
  60. >
  61. <p
  62. class="text-sm text-overflow leading-tight text-gray-600"
  63. title="Option name"
  64. >
  65. {{ option.name }}
  66. </p>
  67. <input
  68. :value="option.value"
  69. title="Option value"
  70. class="text-overflow focus:ring-0 w-full bg-transparent"
  71. readonly
  72. @click="$event.target.select()"
  73. />
  74. </div>
  75. </template>
  76. </selector-element-list>
  77. </ui-tab-panel>
  78. <ui-tab-panel value="blocks">
  79. <selector-blocks
  80. :elements="selectedElements"
  81. :selector="elSelector"
  82. @execute="$emit('execute', $event)"
  83. @update="$emit('update')"
  84. />
  85. </ui-tab-panel>
  86. </ui-tab-panels>
  87. </template>
  88. <script setup>
  89. import SelectorBlocks from './SelectorBlocks.vue';
  90. import SelectorElementList from './SelectorElementList.vue';
  91. defineProps({
  92. activeTab: {
  93. type: String,
  94. default: '',
  95. },
  96. selectElements: {
  97. type: Array,
  98. default: () => [],
  99. },
  100. selectedElements: {
  101. type: Array,
  102. default: () => [],
  103. },
  104. elSelector: {
  105. type: String,
  106. default: '',
  107. },
  108. });
  109. defineEmits(['update:activeTab', 'execute', 'highlight', 'update']);
  110. </script>