101 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Vue
		
	
	
import type { CSSProperties } from 'vue';
 | 
						|
import type { VueNode } from '../../_util/type';
 | 
						|
import useMergeProps from '../hooks/useMergeProps';
 | 
						|
import { useInjectPanel } from '../PanelContext';
 | 
						|
 | 
						|
const HIDDEN_STYLE: CSSProperties = {
 | 
						|
  visibility: 'hidden',
 | 
						|
};
 | 
						|
 | 
						|
export type HeaderProps = {
 | 
						|
  prefixCls: string;
 | 
						|
 | 
						|
  // Icons
 | 
						|
  prevIcon?: VueNode;
 | 
						|
  nextIcon?: VueNode;
 | 
						|
  superPrevIcon?: VueNode;
 | 
						|
  superNextIcon?: VueNode;
 | 
						|
 | 
						|
  /** Last one step */
 | 
						|
  onPrev?: () => void;
 | 
						|
  /** Next one step */
 | 
						|
  onNext?: () => void;
 | 
						|
  /** Last multiple steps */
 | 
						|
  onSuperPrev?: () => void;
 | 
						|
  /** Next multiple steps */
 | 
						|
  onSuperNext?: () => void;
 | 
						|
 | 
						|
  children?: VueNode;
 | 
						|
};
 | 
						|
 | 
						|
function Header(_props: HeaderProps, { slots }) {
 | 
						|
  const props = useMergeProps(_props);
 | 
						|
  const {
 | 
						|
    prefixCls,
 | 
						|
    prevIcon = '\u2039',
 | 
						|
    nextIcon = '\u203A',
 | 
						|
    superPrevIcon = '\u00AB',
 | 
						|
    superNextIcon = '\u00BB',
 | 
						|
    onSuperPrev,
 | 
						|
    onSuperNext,
 | 
						|
    onPrev,
 | 
						|
    onNext,
 | 
						|
  } = props;
 | 
						|
  const { hideNextBtn, hidePrevBtn } = useInjectPanel();
 | 
						|
 | 
						|
  return (
 | 
						|
    <div class={prefixCls}>
 | 
						|
      {onSuperPrev && (
 | 
						|
        <button
 | 
						|
          type="button"
 | 
						|
          onClick={onSuperPrev}
 | 
						|
          tabindex={-1}
 | 
						|
          class={`${prefixCls}-super-prev-btn`}
 | 
						|
          style={hidePrevBtn.value ? HIDDEN_STYLE : {}}
 | 
						|
        >
 | 
						|
          {superPrevIcon}
 | 
						|
        </button>
 | 
						|
      )}
 | 
						|
      {onPrev && (
 | 
						|
        <button
 | 
						|
          type="button"
 | 
						|
          onClick={onPrev}
 | 
						|
          tabindex={-1}
 | 
						|
          class={`${prefixCls}-prev-btn`}
 | 
						|
          style={hidePrevBtn.value ? HIDDEN_STYLE : {}}
 | 
						|
        >
 | 
						|
          {prevIcon}
 | 
						|
        </button>
 | 
						|
      )}
 | 
						|
      <div class={`${prefixCls}-view`}>{slots.default?.()}</div>
 | 
						|
      {onNext && (
 | 
						|
        <button
 | 
						|
          type="button"
 | 
						|
          onClick={onNext}
 | 
						|
          tabindex={-1}
 | 
						|
          class={`${prefixCls}-next-btn`}
 | 
						|
          style={hideNextBtn.value ? HIDDEN_STYLE : {}}
 | 
						|
        >
 | 
						|
          {nextIcon}
 | 
						|
        </button>
 | 
						|
      )}
 | 
						|
      {onSuperNext && (
 | 
						|
        <button
 | 
						|
          type="button"
 | 
						|
          onClick={onSuperNext}
 | 
						|
          tabindex={-1}
 | 
						|
          class={`${prefixCls}-super-next-btn`}
 | 
						|
          style={hideNextBtn.value ? HIDDEN_STYLE : {}}
 | 
						|
        >
 | 
						|
          {superNextIcon}
 | 
						|
        </button>
 | 
						|
      )}
 | 
						|
    </div>
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
Header.displayName = 'Header';
 | 
						|
Header.inheritAttrs = false;
 | 
						|
 | 
						|
export default Header;
 |