|
|
@@ -8,23 +8,51 @@ type OLColProps = React.ComponentProps<typeof Col> & {
|
|
|
|
|
|
function OLCol(props: OLColProps) {
|
|
|
const { bs3Props, ...rest } = props
|
|
|
- const sizes = new Set(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])
|
|
|
|
|
|
const getBs3Sizes = (obj: typeof rest) => {
|
|
|
- return Object.entries(obj).reduce(
|
|
|
+ const bs5ToBs3SizeMap = {
|
|
|
+ xs: undefined,
|
|
|
+ sm: undefined,
|
|
|
+ md: 'sm',
|
|
|
+ lg: 'md',
|
|
|
+ xl: 'lg',
|
|
|
+ xxl: undefined,
|
|
|
+ } as const
|
|
|
+
|
|
|
+ const isBs5ToBs3SizeMapKey = (
|
|
|
+ key: string
|
|
|
+ ): key is keyof typeof bs5ToBs3SizeMap => {
|
|
|
+ return key in bs5ToBs3SizeMap
|
|
|
+ }
|
|
|
+
|
|
|
+ const sizes = Object.entries(obj).reduce(
|
|
|
(prev, [key, value]) => {
|
|
|
- if (sizes.has(key)) {
|
|
|
- if (typeof value === 'object') {
|
|
|
- prev[key] = value.span
|
|
|
- prev[`${key}Offset`] = value.offset
|
|
|
- } else {
|
|
|
- prev[key] = value
|
|
|
+ if (isBs5ToBs3SizeMapKey(key)) {
|
|
|
+ const bs3Size = bs5ToBs3SizeMap[key]
|
|
|
+
|
|
|
+ if (bs3Size) {
|
|
|
+ if (typeof value === 'object') {
|
|
|
+ prev[bs3Size] = value.span
|
|
|
+ prev[`${bs3Size}Offset`] = value.offset
|
|
|
+ } else {
|
|
|
+ prev[bs3Size] = value
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
return prev
|
|
|
},
|
|
|
{} as Record<string, (typeof rest)['xs']>
|
|
|
)
|
|
|
+
|
|
|
+ // Add a default sizing for `col-xs-12` if no sizing is available
|
|
|
+ if (
|
|
|
+ !Object.keys(sizes).some(key => ['xs', 'sm', 'md', 'lg'].includes(key))
|
|
|
+ ) {
|
|
|
+ sizes.xs = 12
|
|
|
+ }
|
|
|
+
|
|
|
+ return sizes
|
|
|
}
|
|
|
|
|
|
const bs3ColProps: React.ComponentProps<typeof BS3Col> = {
|