From 3108ce54bc9a7f7438a75fd0d967c8cd05dd5b31 Mon Sep 17 00:00:00 2001 From: Vladimir Kharlampidi Date: Mon, 29 Aug 2022 17:21:56 +0300 Subject: [PATCH] feat(block-header/footer): support `inset` layout --- src/react/components/BlockFooter.jsx | 19 ++++++++++++++++++- src/react/components/BlockHeader.jsx | 19 ++++++++++++++++++- src/shared/classes/BlockFooterClasses.js | 8 +++++++- src/shared/classes/BlockHeaderClasses.js | 8 +++++++- src/shared/colors/BlockFooterColors.js | 5 ++++- src/shared/colors/BlockHeaderColors.js | 2 +- src/svelte/components/BlockFooter.svelte | 16 +++++++++++++++- src/svelte/components/BlockHeader.svelte | 16 +++++++++++++++- src/types/BlockHeader.d.ts | 21 +++++++++++++++++++++ src/vue/components/BlockFooter.vue | 14 +++++++++++++- src/vue/components/BlockHeader.vue | 16 +++++++++++++++- 11 files changed, 134 insertions(+), 10 deletions(-) diff --git a/src/react/components/BlockFooter.jsx b/src/react/components/BlockFooter.jsx index f6dca63e..312dc8ed 100644 --- a/src/react/components/BlockFooter.jsx +++ b/src/react/components/BlockFooter.jsx @@ -1,6 +1,7 @@ import React, { useRef, useImperativeHandle, forwardRef } from 'react'; import { BlockFooterClasses } from '../../shared/classes/BlockFooterClasses.js'; import { BlockFooterColors } from '../../shared/colors/BlockFooterColors.js'; +import { useTheme } from '../shared/use-theme.js'; import { useThemeClasses } from '../shared/use-theme-classes.js'; import { useDarkClasses } from '../shared/use-dark-classes.js'; @@ -13,6 +14,10 @@ const BlockFooter = forwardRef((props, ref) => { ios, material, + inset, + insetIos, + insetMaterial, + // Children children, @@ -26,6 +31,15 @@ const BlockFooter = forwardRef((props, ref) => { el: elRef.current, })); + const theme = useTheme(); + + const isInset = + typeof inset === 'undefined' + ? theme === 'ios' + ? insetIos + : insetMaterial + : inset; + const Component = component; const attrs = { @@ -37,7 +51,10 @@ const BlockFooter = forwardRef((props, ref) => { const colors = BlockFooterColors(colorsProp, dark); - const c = themeClasses(BlockFooterClasses(props, colors), className); + const c = themeClasses( + BlockFooterClasses({ ...props, inset: isInset }, colors), + className + ); return ( diff --git a/src/react/components/BlockHeader.jsx b/src/react/components/BlockHeader.jsx index 01e31ef5..153ecdc2 100644 --- a/src/react/components/BlockHeader.jsx +++ b/src/react/components/BlockHeader.jsx @@ -1,6 +1,7 @@ import React, { useRef, forwardRef, useImperativeHandle } from 'react'; import { BlockHeaderClasses } from '../../shared/classes/BlockHeaderClasses.js'; import { BlockHeaderColors } from '../../shared/colors/BlockHeaderColors.js'; +import { useTheme } from '../shared/use-theme.js'; import { useThemeClasses } from '../shared/use-theme-classes.js'; import { useDarkClasses } from '../shared/use-dark-classes.js'; @@ -13,6 +14,10 @@ const BlockHeader = forwardRef((props, ref) => { ios, material, + inset, + insetIos, + insetMaterial, + // Children children, @@ -32,12 +37,24 @@ const BlockHeader = forwardRef((props, ref) => { ...rest, }; + const theme = useTheme(); + + const isInset = + typeof inset === 'undefined' + ? theme === 'ios' + ? insetIos + : insetMaterial + : inset; + const themeClasses = useThemeClasses({ ios, material }); const dark = useDarkClasses(); const colors = BlockHeaderColors(colorsProp, dark); - const c = themeClasses(BlockHeaderClasses(props, colors), className); + const c = themeClasses( + BlockHeaderClasses({ ...props, inset: isInset }, colors), + className + ); return ( diff --git a/src/shared/classes/BlockFooterClasses.js b/src/shared/classes/BlockFooterClasses.js index 77636875..07e5ed9f 100644 --- a/src/shared/classes/BlockFooterClasses.js +++ b/src/shared/classes/BlockFooterClasses.js @@ -1,7 +1,13 @@ +import { cls } from '../cls.js'; + export const BlockFooterClasses = (props, colors) => { + const { inset } = props; return { base: { - common: `pl-4-safe pr-4-safe mb-8 flex items-center -mt-6 text-sm`, + common: cls( + `mb-8 flex items-center -mt-6 text-sm`, + inset ? 'pl-8-safe pr-8-safe' : 'pl-4-safe pr-4-safe' + ), ios: colors.textIos, material: colors.textMaterial, }, diff --git a/src/shared/classes/BlockHeaderClasses.js b/src/shared/classes/BlockHeaderClasses.js index 0ffd79ae..b9b1e471 100644 --- a/src/shared/classes/BlockHeaderClasses.js +++ b/src/shared/classes/BlockHeaderClasses.js @@ -1,7 +1,13 @@ +import { cls } from '../cls.js'; + export const BlockHeaderClasses = (props, colors) => { + const { inset } = props; return { base: { - common: `pl-4-safe pr-4-safe mt-8 flex items-center -mb-6 text-sm`, + common: cls( + `mt-8 flex items-center -mb-6 text-sm`, + inset ? 'pl-8-safe pr-8-safe' : 'pl-4-safe pr-4-safe' + ), ios: colors.textIos, material: colors.textMaterial, }, diff --git a/src/shared/colors/BlockFooterColors.js b/src/shared/colors/BlockFooterColors.js index edcd632d..96961316 100644 --- a/src/shared/colors/BlockFooterColors.js +++ b/src/shared/colors/BlockFooterColors.js @@ -2,7 +2,10 @@ import { cls } from '../cls.js'; export const BlockFooterColors = (colorsProp = {}, dark) => { return { - textIos: cls('text-black', dark('text-white')), + textIos: cls( + 'text-black text-opacity-75', + dark('dark:text-white dark:text-opacity-75') + ), textMaterial: cls( 'text-md-light-on-surface-variant', dark('dark:text-md-dark-on-surface-variant') diff --git a/src/shared/colors/BlockHeaderColors.js b/src/shared/colors/BlockHeaderColors.js index 8f919431..2d11bc4e 100644 --- a/src/shared/colors/BlockHeaderColors.js +++ b/src/shared/colors/BlockHeaderColors.js @@ -2,7 +2,7 @@ import { cls } from '../cls.js'; export const BlockHeaderColors = (colorsProp = {}, dark) => { return { - textIos: cls('text-black', dark('text-white')), + textIos: cls('text-black', dark('dark:text-white')), textMaterial: cls( 'text-md-light-on-surface-variant', dark('dark:text-md-dark-on-surface-variant') diff --git a/src/svelte/components/BlockFooter.svelte b/src/svelte/components/BlockFooter.svelte index 1cf1ff36..d9bdbaba 100644 --- a/src/svelte/components/BlockFooter.svelte +++ b/src/svelte/components/BlockFooter.svelte @@ -1,6 +1,7 @@