EditInteractionBase.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <template>
  2. <div>
  3. <slot name="prepend" />
  4. <ui-textarea
  5. :model-value="data.description"
  6. autoresize
  7. placeholder="Description"
  8. class="w-full mb-2"
  9. @change="updateData({ description: $event })"
  10. />
  11. <ui-input
  12. v-if="!hideSelector"
  13. :model-value="data.selector"
  14. placeholder="Element selector"
  15. class="mb-1 w-full"
  16. @change="updateData({ selector: $event })"
  17. />
  18. <template v-if="!hideSelector">
  19. <ui-checkbox
  20. v-if="!data.disableMultiple && !hideMultiple"
  21. class="mr-6"
  22. title="Select multiple elements"
  23. :model-value="data.multiple"
  24. @change="updateData({ multiple: $event })"
  25. >
  26. Multiple
  27. </ui-checkbox>
  28. <ui-checkbox
  29. :model-value="data.markEl"
  30. title="An element will not be selected if have been selected before"
  31. @change="updateData({ markEl: $event })"
  32. >
  33. Mark element
  34. </ui-checkbox>
  35. </template>
  36. <slot></slot>
  37. </div>
  38. </template>
  39. <script setup>
  40. const props = defineProps({
  41. data: {
  42. type: Object,
  43. default: () => ({}),
  44. },
  45. hideSelector: {
  46. type: Boolean,
  47. default: false,
  48. },
  49. hideMultiple: {
  50. type: Boolean,
  51. default: false,
  52. },
  53. });
  54. const emit = defineEmits(['update:data', 'change']);
  55. function updateData(value) {
  56. const payload = { ...props.data, ...value };
  57. emit('update:data', payload);
  58. emit('change', payload);
  59. }
  60. </script>