xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 3.99 kB
Source Map (JSON)
{"version":3,"file":"space.mjs","sources":["../../src/space/space.tsx"],"sourcesContent":["import { defineComponent, computed, CSSProperties, Fragment } from 'vue';\nimport props from './props';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { useChildSlots } from '../hooks/slot';\nimport isNumber from 'lodash/isNumber';\nimport isString from 'lodash/isString';\nimport isArray from 'lodash/isArray';\n\nexport default defineComponent({\n name: 'XSpace',\n\n props: { ...props },\n\n setup(props) {\n const COMPONENT_NAME = usePrefixClass('space');\n const renderTNodeJSX = useTNodeJSX();\n const getChildSlots = useChildSlots();\n\n const renderStyle = computed<CSSProperties>(() => {\n const sizeMap = { small: '8px', medium: '16px', large: '24px' };\n\n let renderGap = '';\n if (isArray(props.size)) {\n renderGap = props.size\n .map((s) => {\n if (isNumber(s)) return `${s}px`;\n if (isString(s)) return sizeMap[s] || s;\n return s;\n })\n .join(' ');\n } else if (isString(props.size)) {\n renderGap = sizeMap[props.size] || props.size;\n } else if (isNumber(props.size)) {\n renderGap = `${props.size}px`;\n }\n\n return {\n gap: renderGap,\n ...(props.breakLine ? { 'flex-wrap': 'wrap' } : {}),\n };\n });\n\n function renderChildren() {\n const children = getChildSlots();\n const separatorContent = renderTNodeJSX('separator');\n return children.map((child, index) => {\n // filter last child\n const showSeparator = index + 1 !== children.length && separatorContent;\n return (\n <Fragment>\n <div class={`${COMPONENT_NAME.value}-item`}>{child}</div>\n {showSeparator && <div class={`${COMPONENT_NAME.value}-item-separator`}>{separatorContent}</div>}\n </Fragment>\n );\n });\n }\n\n return () => {\n const spaceClassNames = [\n `${COMPONENT_NAME.value}`,\n {\n [`${COMPONENT_NAME.value}-align-${props.align}`]: props.align,\n [`${COMPONENT_NAME.value}-${props.direction}`]: props.direction,\n },\n ];\n\n return (\n <div class={spaceClassNames} style={renderStyle.value}>\n {renderChildren()}\n </div>\n );\n };\n },\n});\n"],"names":["name","props","small","medium","large","isArray","renderGap","gap","_createVNode","_Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,aAAA,eAAA,CAAA;AACEA,EAAAA,IAAAA,EAAAA,QAAAA;AAEAC,EAAAA,KAAAA,EAAAA,aAAAA,CAAAA,EAAAA,EAAAA,KAAAA,CAAAA;;AAGQ,IAAA,IAAA,cAAA,GAAA,cAAA,CAAA,OAAA,CAAA,CAAA;AACN,IAAA,IAAA,cAAA,GAAA,WAAA,EAAA,CAAA;AACA,IAAA,IAAA,aAAA,GAAA,aAAA,EAAA,CAAA;AAEM,IAAA,IAAA,WAAA,GAAA,QAAA,CAAA,YAAA;AACJ,MAAA,IAAA,OAAA,GAAA;AAAkBC,QAAAA,KAAAA,EAAAA,KAAAA;AAAcC,QAAAA,MAAAA,EAAAA,MAAAA;AAAgBC,QAAAA,KAAAA,EAAAA,MAAAA;;;AAG5C,MAAA,IAAAC,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,EAAA;;;;AAKS,UAAA,OAAA,CAAA,CAAA;AACT,SAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA;;;;AAKFC,QAAAA,SAAAA,GAAAA,EAAAA,CAAAA,MAAAA,CAAAA,MAAAA,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AACF,OAAA;AAEO,MAAA,OAAA,aAAA,CAAA;AACLC,QAAAA,GAAAA,EAAAA,SAAAA;;AACwB,QAAA,WAAA,EAAA,MAAA;;AAE5B,KAAA,CAAA,CAAA;;AAGE,MAAA,IAAA,QAAA,GAAA,aAAA,EAAA,CAAA;AACM,MAAA,IAAA,gBAAA,GAAA,cAAA,CAAA,WAAA,CAAA,CAAA;;;AAIJ,QAAA,OAAAC,WAAA,CAAAC,QAAA,EAAA,IAAA,EAAA,CAAAD,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AAEkC,SAAA,EAAA,CAAA,KAAA,CAAA,CAAA,EAAA,aAAA,IAAAA,WAAA,CAAA,KAAA,EAAA;AAC7B,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,iBAAA,CAAA;AAA+C,SAAA,EAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGtD,OAAA,CAAA,CAAA;AACF,KAAA;AAEA,IAAA,OAAA,YAAA;AAAa,MAAA,IAAA,IAAA,CAAA;;AAUT,MAAA,OAAAA,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,eAAA;AAAY,QAAA,OAAA,EAAA,WAAA,CAAA,KAAA;;;AAKlB,GAAA;AACF,CAAA,CAAA;;;;"}