{"version":3,"file":"index-anchor.mjs","sources":["../../../../../../../packages/components/indexes/src/index-anchor.tsx"],"sourcesContent":["import {\n  type CSSProperties,\n  type ExtractPropTypes,\n  computed,\n  defineComponent,\n  reactive,\n  ref,\n} from 'vue'\n\nimport {\n  extend,\n  getRootScrollTop,\n  getScrollTop,\n  getZIndexStyle,\n  numericProp,\n} from '@xzx-design/utils'\nimport { useExpose, useNamespace, useParent, useRect } from '@xzx-design/hooks'\nimport { INDEX_BAR_KEY } from './indexes'\n\nexport const indexAnchorProps = {\n  index: numericProp,\n}\n\nexport type IndexAnchorProps = ExtractPropTypes<typeof indexAnchorProps>\n\nconst name = 'XzxIndexAnchor'\n\nexport default defineComponent({\n  name,\n  __name: name,\n  props: indexAnchorProps,\n  setup(props, { slots }) {\n    const { bem } = useNamespace('index-anchor')\n\n    const state = reactive({\n      top: 0,\n      left: null,\n      rect: { top: 0, height: 0 },\n      width: null,\n      active: false,\n    })\n\n    const root = ref<HTMLElement>()\n    const { parent } = useParent(INDEX_BAR_KEY)\n\n    if (!parent) {\n      if (process.env.NODE_ENV !== 'production') {\n        console.error(\n          '[XzxDesign] <IndexAnchor>  be a child component of <Indexes>.'\n        )\n      }\n      return\n    }\n\n    const isSticky = () => state.active && parent.props.sticky\n\n    // eslint-disable-next-line vue/return-in-computed-property\n    const anchorStyle = computed<CSSProperties | undefined>(() => {\n      const { zIndex, highlightColor } = parent.props\n\n      if (isSticky()) {\n        return extend(getZIndexStyle(zIndex), {\n          left: state.left ? `${state.left}px` : undefined,\n          width: state.width ? `${state.width}px` : undefined,\n          transform: state.top\n            ? `translate3d(0, ${state.top}px, 0)`\n            : undefined,\n          color: highlightColor,\n        })\n      }\n    })\n\n    const getRect = (\n      scrollParent: Window | Element,\n      scrollParentRect: { top: number }\n    ) => {\n      const rootRect = useRect(root)\n      state.rect.height = rootRect.height\n\n      if (scrollParent === window || scrollParent === document.body) {\n        state.rect.top = rootRect.top + getRootScrollTop()\n      } else {\n        state.rect.top =\n          rootRect.top + getScrollTop(scrollParent) - scrollParentRect.top\n      }\n\n      return state.rect\n    }\n\n    useExpose({\n      state,\n      getRect,\n    })\n\n    return () => {\n      const sticky = isSticky()\n\n      return (\n        <div\n          ref={root}\n          style={{ height: sticky ? `${state.rect.height}px` : undefined }}\n        >\n          <div style={anchorStyle.value} class={[bem({ sticky })]}>\n            {slots.default ? slots.default() : props.index}\n          </div>\n        </div>\n      )\n    }\n  },\n})\n"],"names":["indexAnchorProps","index","numericProp","name","defineComponent","__name","props","setup","slots","bem","useNamespace","state","reactive","top","left","rect","height","width","active","root","ref","parent","useParent","INDEX_BAR_KEY","process","env","NODE_ENV","console","error","isSticky","sticky","anchorStyle","computed","zIndex","highlightColor","extend","getZIndexStyle","undefined","transform","color","getRect","scrollParent","scrollParentRect","rootRect","useRect","window","document","body","getRootScrollTop","getScrollTop","useExpose","_createVNode","value","default"],"mappings":"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"}