{"version":3,"file":"grid.vue2.mjs","sources":["../../../../../packages/components/grid/src/grid.vue"],"sourcesContent":["<script lang=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  h,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  shallowRef,\n  watch\n} from 'vue'\nimport { gridProps, type GridProps, type ResponsiveCols } from './grid'\nimport type { CSSProperties } from 'vue'\nimport { useConfig, useNamespace } from '@element-ultra/hooks'\nimport { gridInjectionKey } from './token'\nimport { debounce } from 'lodash'\n\nexport default defineComponent({\n  name: 'ElGrid',\n\n  props: gridProps,\n\n  emits: {\n    resize: (rect: DOMRectReadOnly) => true\n  },\n\n  setup(props, { attrs, slots, emit }) {\n    const ns = useNamespace('grid')\n\n    let containerWidth = shallowRef(0)\n\n    // 响应式列数\n    let responsiveCols = shallowRef<number>(1)\n\n    const isResponsiveCols = (v: any): v is ResponsiveCols => {\n      return Object.prototype.toString.call(v) === '[object Object]'\n    }\n\n    const point = computed(() => {\n      return getCurrentPoint(containerWidth.value)\n    })\n\n    provide(gridInjectionKey, {\n      point\n    })\n\n    const gridTemplateColumns = computed(() => {\n      const { cols } = props\n\n      if (isResponsiveCols(cols)) {\n        responsiveCols.value = getPointCols(point.value, cols)\n        return `repeat(${responsiveCols.value}, 1fr)`\n      }\n\n      if (typeof cols === 'number') {\n        return `repeat(${cols}, 1fr)`\n      }\n      if (typeof cols === 'string') {\n        return cols\n      }\n      return cols.join(' ')\n    })\n\n    const style = computed(() => {\n      const { rows } = props\n\n      const gridTemplateRows = typeof rows === 'string' ? rows : rows?.join(' ')\n      const result: CSSProperties = {\n        gridTemplateColumns: gridTemplateColumns.value,\n        gridTemplateRows,\n        gap: props.gap\n          .split(',')\n          .map(s => `${s}px`)\n          .join(' ')\n      }\n      return result\n    })\n\n    let gridRef: HTMLElement | null = null // shallowRef<>()\n\n    const [config] = useConfig()\n\n    /**\n     * 获取容器断点\n     * @param w 容器宽度\n     */\n    const getCurrentPoint = (w: number) => {\n      const { xs, s, m, l, xl } = config.breakpoint\n      if (w < xs) return 'xs'\n      if (w < s) return 's'\n      if (w < m) return 'm'\n      if (w < l) return 'l'\n      if (w < xl) return 'xl'\n      return 'xxl'\n    }\n\n    /**\n     * 获取断点对应的列\n     * @param point 当前所属的断点\n     * @param cols\n     */\n    const getPointCols = (\n      point: ReturnType<typeof getCurrentPoint>,\n      cols: ResponsiveCols\n    ) => {\n      let queue = ['xs', 's', 'm', 'l', 'xl', 'xxl']\n\n      let ret = cols[point]\n      let pointIndex = queue.indexOf(point)\n      while (ret === undefined && pointIndex <= 5) {\n        pointIndex++\n        ret = cols[queue[pointIndex]]\n      }\n      if (ret === undefined) {\n        ret = cols.cols\n      }\n\n      return ret\n    }\n\n    let observer: ResizeObserver | undefined = undefined\n\n    const observe = (cols: GridProps['cols']) => {\n      observer?.disconnect()\n      if (!gridRef || !isResponsiveCols(cols)) return\n\n      observer = new ResizeObserver(\n        debounce(\n          (entries: ResizeObserverEntry[]) => {\n            const [entry] = entries\n            if (!entry) return\n\n            const { width } = entry.contentRect\n            containerWidth.value = width\n            emit('resize', entry.contentRect)\n          },\n          0,\n          { leading: true }\n        )\n      )\n\n      observer.observe(gridRef)\n\n      return observer\n    }\n\n    watch(\n      () => props.cols,\n      cols => {\n        if (!isResponsiveCols(cols)) {\n          gridRef && observer?.unobserve(gridRef)\n          return observer?.disconnect()\n        }\n        observe(cols)\n      }\n    )\n\n    onMounted(() => {\n      observe(props.cols)\n    })\n    onBeforeUnmount(() => observer?.disconnect())\n\n    return () => {\n      const { tag } = props\n      return h(\n        tag,\n        {\n          ...attrs,\n          class: [ns.b()],\n          style: style.value,\n          ref: ref => (gridRef = ref as HTMLElement)\n        },\n        slots.default?.() || []\n      )\n    }\n  }\n})\n</script>\n"],"names":["point"],"mappings":"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"}