554919de创建于 2024年4月22日历史提交
import { defineComponent, toRefs, withModifiers } from 'vue';
import { flexibleOverlayProps, FlexibleOverlayProps } from './flexible-overlay-types';
import { useOverlay } from './use-flexible-overlay';
import { useNamespace } from '../../../shared/hooks/use-namespace';
import './flexible-overlay.scss';

export const FlexibleOverlay = defineComponent({
  name: 'DFlexibleOverlay',
  inheritAttrs: false,
  props: flexibleOverlayProps,
  emits: ['update:modelValue', 'positionChange'],
  setup(props: FlexibleOverlayProps, { slots, attrs, emit, expose }) {
    const ns = useNamespace('flexible-overlay');
    const { clickEventBubble } = toRefs(props);
    const { arrowRef, overlayRef, styles, updatePosition } = useOverlay(props, emit);
    expose({ updatePosition });

    return () =>
      props.modelValue && (
        <div
          ref={overlayRef}
          class={ns.b()}
          style={styles.value}
          {...attrs}
          onClick={withModifiers(() => ({}), [clickEventBubble.value ? '' : 'stop'])}
          onPointerup={withModifiers(() => ({}), ['stop'])}>
          {slots.default?.()}
          {props.showArrow && <div ref={arrowRef} class={ns.e('arrow')}></div>}
        </div>
      );
  },
});