Skip to content

Commit

Permalink
feat(page): add page colors prop
Browse files Browse the repository at this point in the history
  • Loading branch information
nolimits4web committed Aug 10, 2022
1 parent 756a448 commit 1fbd280
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 9 deletions.
13 changes: 12 additions & 1 deletion src/react/components/Page.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import React, { useRef, forwardRef, useImperativeHandle } from 'react';
import { PageClasses } from '../../shared/classes/PageClasses.js';
import { cls } from '../../shared/cls.js';
import { useDarkClasses } from '../shared/use-dark-classes.js';
import { useThemeClasses } from '../shared/use-theme-classes.js';

const Page = forwardRef((props, ref) => {
const {
component = 'div',
className,
colors: colorsProp,

ios,
material,
Expand All @@ -33,7 +35,16 @@ const Page = forwardRef((props, ref) => {
const themeClasses = useThemeClasses({ ios, material });
const dark = useDarkClasses();

const c = themeClasses(PageClasses(props, className, dark), className);
const colors = {
bgIos: cls('bg-page-ios-light', dark('dark:bg-page-ios-dark')),
bgMaterial: cls(
'bg-page-material-light',
dark('dark:bg-page-material-dark')
),
...colorsProp,
};

const c = themeClasses(PageClasses(props, colors, className), className);

return (
<Component ref={elRef} className={c.base} {...attrs}>
Expand Down
9 changes: 3 additions & 6 deletions src/shared/classes/PageClasses.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
import { cls } from '../cls.js';
import { positionClass } from '../position-class.js';

export const PageClasses = (props, classes, darkClasses) => {
export const PageClasses = (props, colors, classes) => {
return {
base: {
common: cls(
'h-full w-full left-0 top-0 overflow-auto',
positionClass('absolute', classes)
),
ios: cls('bg-page-ios-light', darkClasses('dark:bg-page-ios-dark')),
material: cls(
'bg-page-material-light',
darkClasses('dark:bg-page-material-dark')
),
ios: colors.bgIos,
material: colors.bgMaterial,
},
};
};
14 changes: 13 additions & 1 deletion src/svelte/components/Page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,28 @@
let className = undefined;
export { className as class };
let colorsProp = undefined;
export { colorsProp as colors };
export let ios = undefined;
export let material = undefined;
export let component = 'div';
const dark = useDarkClasses();
$: colors = {
bgIos: cls('bg-page-ios-light', dark('dark:bg-page-ios-dark')),
bgMaterial: cls(
'bg-page-material-light',
dark('dark:bg-page-material-dark')
),
...colorsProp,
};
$: c = useThemeClasses(
{ ios, material },
PageClasses({}, className, dark),
PageClasses({}, className, colors),
className,
(v) => (c = v)
);
Expand Down
18 changes: 18 additions & 0 deletions src/types/Page.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,22 @@ interface Props {
* @default 'div'
*/
component?: string;

/**
* Object with Tailwind CSS colors classes
* */
colors?: {
/**
* Page bg color in iOS theme
*
* @default 'bg-page-ios-light dark:bg-page-ios-dark'
*/
bgIos?: string;
/**
* Page bg color in Material theme
*
* @default 'bg-page-material-light dark:bg-page-material-dark'
*/
bgMaterial?: string;
};
}
18 changes: 17 additions & 1 deletion src/vue/components/Page.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
</component>
</template>
<script>
import { computed } from 'vue';
import { PageClasses } from '../../shared/classes/PageClasses.js';
import { cls } from '../../shared/cls.js';
import { useDarkClasses } from '../shared/use-dark-classes.js';
import { useThemeClasses } from '../shared/use-theme-classes.js';
Expand All @@ -23,10 +25,24 @@
type: Boolean,
default: undefined,
},
colors: {
type: Object,
},
},
setup(props, ctx) {
const colors = computed(() => ({
bgIos: cls(
'bg-page-ios-light',
useDarkClasses('dark:bg-page-ios-dark')
),
bgMaterial: cls(
'bg-page-material-light',
useDarkClasses('dark:bg-page-material-dark')
),
...(props.colors || {}),
}));
const c = useThemeClasses(props, () =>
PageClasses(props, ctx.attrs.class, useDarkClasses)
PageClasses(props, ctx.attrs.class, colors)
);
return {
Expand Down

0 comments on commit 1fbd280

Please sign in to comment.