temp-arrow.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <template>
  2. <v-arrow
  3. :config="{
  4. ...data,
  5. zIndex: undefined,
  6. pointerLength: data.pointerLength,
  7. pointerWidth: data.pointerLength,
  8. hitStrokeWidth: 20,
  9. closed: true,
  10. points: flatPositions(data.points),
  11. ...eConfig,
  12. opacity: addMode ? 0.3 : data.opacity,
  13. }"
  14. ref="shape"
  15. />
  16. </template>
  17. <script lang="ts" setup>
  18. import { ArrowData, defaultStyle, PointerPosition } from "./index.ts";
  19. import { DC } from "@/deconstruction.js";
  20. import { computed, ref, watchEffect } from "vue";
  21. import { flatPositions } from "@/utils/shared.ts";
  22. import { Arrow } from "konva/lib/shapes/Arrow";
  23. const props = defineProps<{ data: ArrowData; addMode?: boolean }>();
  24. const shape = ref<DC<Arrow>>();
  25. const eConfig = computed(() => {
  26. const position =
  27. "pointerPosition" in props.data
  28. ? props.data.pointerPosition!
  29. : defaultStyle.pointerPosition;
  30. const eStart = [PointerPosition.all, PointerPosition.start].includes(position);
  31. const eEnd = [PointerPosition.all, PointerPosition.end].includes(position);
  32. return {
  33. pointerAtBeginning: eStart,
  34. pointerAtEnding: eEnd,
  35. };
  36. });
  37. defineExpose({
  38. get shape() {
  39. return shape.value;
  40. },
  41. });
  42. </script>