{"version":3,"file":"useResponsiveFormLayout.mjs","sources":["../../../../../../package/formily/form-layout/src/useResponsiveFormLayout.ts"],"sourcesContent":["import { isArr, isValid } from \"@formily/shared\";\nimport { onMounted, ref, getCurrentInstance } from \"vue\";\nimport type { ComponentInternalInstance } from \"vue\";\n\ninterface IProps {\n  breakpoints?: number[];\n  layout?: \"vertical\" | \"horizontal\" | \"inline\" | (\"vertical\" | \"horizontal\" | \"inline\")[];\n  labelCol?: number | number[];\n  wrapperCol?: number | number[];\n  labelAlign?: \"right\" | \"left\" | (\"right\" | \"left\")[];\n  wrapperAlign?: \"right\" | \"left\" | (\"right\" | \"left\")[];\n  [props: string]: any;\n}\n\ninterface ICalcBreakpointIndex {\n  (originalBreakpoints: number[], width: number): number;\n}\n\ninterface ICalculateProps {\n  (target: Element, props: IProps): IProps;\n}\n\nconst calcBreakpointIndex: ICalcBreakpointIndex = (breakpoints, width) => {\n  for (let i = 0; i < breakpoints.length; i++) {\n    if (width <= breakpoints[i]) {\n      return i;\n    }\n  }\n  return -1;\n};\n\nconst calcFactor = <T>(value: T | T[], breakpointIndex: number): T => {\n  if (Array.isArray(value)) {\n    if (breakpointIndex === -1) return value[0];\n    return value[breakpointIndex] ?? value[value.length - 1];\n  } else {\n    return value;\n  }\n};\n\nconst factor = <T>(value: T | T[], breakpointIndex: number): T =>\n  isValid(value) ? calcFactor(value as any, breakpointIndex) : value;\n\nconst calculateProps: ICalculateProps = (target, props) => {\n  const { clientWidth } = target;\n  const { breakpoints, layout, labelAlign, wrapperAlign, labelCol, wrapperCol, ...otherProps } =\n    props;\n  const breakpointIndex = calcBreakpointIndex(breakpoints as number[], clientWidth);\n\n  return {\n    layout: factor(layout, breakpointIndex),\n    labelAlign: factor(labelAlign, breakpointIndex),\n    wrapperAlign: factor(wrapperAlign, breakpointIndex),\n    labelCol: factor(labelCol, breakpointIndex),\n    wrapperCol: factor(wrapperCol, breakpointIndex),\n    ...otherProps\n  };\n};\n\nconst useRefs = (): Record<string, unknown> => {\n  const vm: ComponentInternalInstance | null = getCurrentInstance();\n  return vm?.refs || {};\n};\n\nexport const useResponsiveFormLayout = (props: any) => {\n  const { breakpoints } = props;\n  if (!isArr(breakpoints)) {\n    return {\n      props: ref(props)\n    };\n  }\n  const layoutProps = ref<IProps>({});\n\n  const updateUI = (target: HTMLElement) => {\n    layoutProps.value = calculateProps(target, props);\n  };\n\n  onMounted(() => {\n    const { root } = useRefs();\n    const observer = () => {\n      updateUI(root as HTMLElement);\n    };\n    const resizeObserver = new ResizeObserver(observer);\n    if (root) {\n      resizeObserver.observe(root as Element);\n    }\n\n    updateUI(root as HTMLElement);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  });\n\n  return {\n    props: layoutProps\n  };\n};\n"],"names":[],"mappings":"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"}