mirror of
https://github.com/billsonnn/nitro-react.git
synced 2024-11-23 14:40:50 +01:00
Add layout components
This commit is contained in:
parent
a9d97efc98
commit
c1f73bebd0
@ -42,6 +42,14 @@ $utilities: map-merge(
|
|||||||
property: overflow,
|
property: overflow,
|
||||||
values: auto hidden visible scroll,
|
values: auto hidden visible scroll,
|
||||||
),
|
),
|
||||||
|
"overflow-x": (
|
||||||
|
property: overflow-x,
|
||||||
|
values: auto hidden visible scroll,
|
||||||
|
),
|
||||||
|
"overflow-y": (
|
||||||
|
property: overflow-y,
|
||||||
|
values: auto hidden visible scroll,
|
||||||
|
),
|
||||||
// scss-docs-end utils-overflow
|
// scss-docs-end utils-overflow
|
||||||
// scss-docs-start utils-display
|
// scss-docs-start utils-display
|
||||||
"display": (
|
"display": (
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
$grid-options: (
|
|
||||||
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
|
|
||||||
);
|
|
||||||
|
|
||||||
.grid-items {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-content: flex-start;
|
|
||||||
width: 100%;
|
|
||||||
margin-top: -3px;
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
@each $option in $grid-options {
|
|
||||||
&.grid-#{$option} {
|
|
||||||
.grid-item {
|
|
||||||
width: calc(1 / #{$option} * 100% - (1 - 1 / #{$option}) * 3px);
|
|
||||||
|
|
||||||
&:nth-child(#{$option}n) {
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.row-grid {
|
|
||||||
margin: 0 !important;
|
|
||||||
|
|
||||||
.col {
|
|
||||||
padding: 0 !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@each $option in $grid-options {
|
|
||||||
.row-grid {
|
|
||||||
&.row-cols-#{$option} {
|
|
||||||
.col:nth-child(#{$option}n) {
|
|
||||||
padding-left: 10px !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,7 +7,6 @@
|
|||||||
@import '../node_modules/animate.css/animate.min.css';
|
@import '../node_modules/animate.css/animate.min.css';
|
||||||
@import './scrollbars';
|
@import './scrollbars';
|
||||||
@import './slider';
|
@import './slider';
|
||||||
@import './grid';
|
|
||||||
@import './icons';
|
@import './icons';
|
||||||
@import './utils';
|
@import './utils';
|
||||||
|
|
||||||
|
@ -1,15 +1,41 @@
|
|||||||
::-webkit-scrollbar {
|
::-webkit-scrollbar {
|
||||||
width: 0.5rem;
|
width: 0.5rem;
|
||||||
|
|
||||||
|
&:horizontal {
|
||||||
height: 0.5rem;
|
height: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:horizontal) {
|
||||||
|
width: 0.5rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::-webkit-scrollbar-track {
|
::-webkit-scrollbar-track {
|
||||||
background-clip: padding-box;
|
|
||||||
|
&:horizontal {
|
||||||
|
border-bottom: 0.25rem solid rgba($black, .1);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:horizontal) {
|
||||||
border-right: 0.25rem solid rgba($black, .1);
|
border-right: 0.25rem solid rgba($black, .1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb {
|
::-webkit-scrollbar-thumb {
|
||||||
background-clip: padding-box;
|
|
||||||
|
&:horizontal {
|
||||||
|
border-bottom: 0.25rem solid rgba($primary, .4);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-bottom: 0.25rem solid rgba($primary, .8);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
border-bottom: 0.25rem solid $secondary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:horizontal) {
|
||||||
border-right: 0.25rem solid rgba($primary, .4);
|
border-right: 0.25rem solid rgba($primary, .4);
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
@ -19,4 +45,9 @@
|
|||||||
&:active {
|
&:active {
|
||||||
border-right: 0.25rem solid $secondary;
|
border-right: 0.25rem solid $secondary;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-corner {
|
||||||
|
background: rgba($black, .1);
|
||||||
}
|
}
|
||||||
|
@ -36,12 +36,13 @@ $nitro-card-tabs-height: 33px;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.nitro-card {
|
.nitro-card {
|
||||||
width: 100%;
|
max-width: 75%;
|
||||||
height: 100%;
|
max-height: calc(100% - 20px);
|
||||||
|
margin: 10px auto 10px;
|
||||||
|
|
||||||
&.rounded {
|
// &.rounded {
|
||||||
border-radius: 0 !important;
|
// border-radius: 0 !important;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ export const NitroCardContentView: FC<NitroCardContentViewProps> = props =>
|
|||||||
const { simple = false } = useNitroCardContext();
|
const { simple = false } = useNitroCardContext();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={ `container-fluid bg-light content-area d-flex flex-column overflow-hidden ${ (simple ? 'simple' : '') } ${ className || '' }` } { ...rest }>
|
<div className={ `container-fluid bg-light content-area d-flex flex-column overflow-auto ${ (simple ? 'simple' : '') } ${ className || '' }` } { ...rest }>
|
||||||
{ children }
|
{ children }
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -1,71 +1,6 @@
|
|||||||
.nitro-card-grid {
|
.nitro-grid {
|
||||||
width: 100%;
|
--nitro-grid-column-min-width: 45px;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(var(--nitro-grid-column-min-width, 45px), 1fr));
|
||||||
.row-cols-3 {
|
|
||||||
|
|
||||||
.col {
|
|
||||||
padding-right: 0.25rem;
|
|
||||||
|
|
||||||
&:nth-child(3n+3) {
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.row-cols-4 {
|
|
||||||
|
|
||||||
.col {
|
|
||||||
padding-right: 0.25rem;
|
|
||||||
|
|
||||||
&:nth-child(4n+4) {
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.row-cols-5 {
|
|
||||||
|
|
||||||
.col {
|
|
||||||
padding-right: 0.25rem;
|
|
||||||
|
|
||||||
&:nth-child(5n+5) {
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.row-cols-6 {
|
|
||||||
|
|
||||||
.col {
|
|
||||||
padding-right: 0.25rem;
|
|
||||||
|
|
||||||
&:nth-child(6n+6) {
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.row-cols-7 {
|
|
||||||
|
|
||||||
.col {
|
|
||||||
padding-right: 0.25rem;
|
|
||||||
|
|
||||||
&:nth-child(7n+7) {
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.row-cols-8 {
|
|
||||||
|
|
||||||
.col {
|
|
||||||
padding-right: 0.25rem;
|
|
||||||
|
|
||||||
&:nth-child(8n+8) {
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@import './item/NitroCardGridItemView.scss';
|
@import './item/NitroCardGridItemView.scss';
|
||||||
|
@ -7,7 +7,7 @@ export const NitroCardGridView: FC<NitroCardGridViewProps> = props =>
|
|||||||
|
|
||||||
const getClassName = useMemo(() =>
|
const getClassName = useMemo(() =>
|
||||||
{
|
{
|
||||||
let newClassName = `grid gap-${ gap } overflow-auto`;
|
let newClassName = `grid gap-${ gap } nitro-grid overflow-auto`;
|
||||||
|
|
||||||
if(className && className.length) newClassName += ' ' + className;
|
if(className && className.length) newClassName += ' ' + className;
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ export const NitroCardGridView: FC<NitroCardGridViewProps> = props =>
|
|||||||
{
|
{
|
||||||
const newStyle = { ...style };
|
const newStyle = { ...style };
|
||||||
|
|
||||||
newStyle['--bs-columns'] = columns.toString();
|
//newStyle['--bs-columns'] = columns.toString();
|
||||||
|
|
||||||
return newStyle;
|
return newStyle;
|
||||||
}, [ style, columns ]);
|
}, [ style, columns ]);
|
||||||
|
1
src/layout/common/NitroLayoutColumns.type.ts
Normal file
1
src/layout/common/NitroLayoutColumns.type.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export type NitroLayoutColumns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
|
1
src/layout/common/NitroLayoutOverflow.type.ts
Normal file
1
src/layout/common/NitroLayoutOverflow.type.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export type NitroLayoutOverflow = 'hidden' | 'auto';
|
1
src/layout/common/NitroLayoutPosition.type.ts
Normal file
1
src/layout/common/NitroLayoutPosition.type.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export type NitroLayoutPosition = 'static' | 'relative' | 'fixed' | 'absolute' | 'sticky';
|
1
src/layout/common/NitroLayoutSpacing.type.ts
Normal file
1
src/layout/common/NitroLayoutSpacing.type.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export type NitroLayoutSpacing = 1 | 2 | 3 | 4 | 5;
|
4
src/layout/common/index.ts
Normal file
4
src/layout/common/index.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export * from './NitroLayoutColumns.type';
|
||||||
|
export * from './NitroLayoutOverflow.type';
|
||||||
|
export * from './NitroLayoutPosition.type';
|
||||||
|
export * from './NitroLayoutSpacing.type';
|
28
src/layout/flex-column/NitroLayoutFlexColumn.tsx
Normal file
28
src/layout/flex-column/NitroLayoutFlexColumn.tsx
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { FC, useMemo } from 'react';
|
||||||
|
import { NitroLayoutFlexColumnProps } from './NitroLayoutFlexColumn.types';
|
||||||
|
|
||||||
|
export const NitroLayoutFlexColumn: FC<NitroLayoutFlexColumnProps> = props =>
|
||||||
|
{
|
||||||
|
const { className = '', overflow = null, position = null, gap = null, children = null, ...rest } = props;
|
||||||
|
|
||||||
|
const getClassName = useMemo(() =>
|
||||||
|
{
|
||||||
|
let newClassName = 'd-flex flex-column';
|
||||||
|
|
||||||
|
if(overflow && overflow.length) newClassName += ` overflow-${ overflow }`;
|
||||||
|
|
||||||
|
if(position && position.length) newClassName += ` position-${ position }`;
|
||||||
|
|
||||||
|
if(gap && gap >= 1) newClassName += ` gap-${ gap }`;
|
||||||
|
|
||||||
|
if(className && className.length) newClassName += ` ${ className }`;
|
||||||
|
|
||||||
|
return newClassName;
|
||||||
|
}, [ className, overflow, position, gap ]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={ getClassName } { ...rest }>
|
||||||
|
{ children }
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
9
src/layout/flex-column/NitroLayoutFlexColumn.types.ts
Normal file
9
src/layout/flex-column/NitroLayoutFlexColumn.types.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { DetailsHTMLAttributes } from 'react';
|
||||||
|
import { NitroLayoutOverflow, NitroLayoutPosition, NitroLayoutSpacing } from '../common';
|
||||||
|
|
||||||
|
export interface NitroLayoutFlexColumnProps extends DetailsHTMLAttributes<HTMLDivElement>
|
||||||
|
{
|
||||||
|
overflow?: NitroLayoutOverflow;
|
||||||
|
position?: NitroLayoutPosition;
|
||||||
|
gap?: NitroLayoutSpacing;
|
||||||
|
}
|
24
src/layout/grid/NitroLayoutGrid.tsx
Normal file
24
src/layout/grid/NitroLayoutGrid.tsx
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { FC, useMemo } from 'react';
|
||||||
|
import { NitroLayoutGridProps } from './NitroLayoutGrid.types';
|
||||||
|
|
||||||
|
export const NitroLayoutGrid: FC<NitroLayoutGridProps> = props =>
|
||||||
|
{
|
||||||
|
const { className = '', gap = 3, children = null, ...rest } = props;
|
||||||
|
|
||||||
|
const getClassName = useMemo(() =>
|
||||||
|
{
|
||||||
|
let newClassName = 'grid h-100';
|
||||||
|
|
||||||
|
if(gap >= 1) newClassName += ` gap-${ gap }`;
|
||||||
|
|
||||||
|
if(className && className.length) newClassName += ' ' + className;
|
||||||
|
|
||||||
|
return newClassName;
|
||||||
|
}, [ className, gap ]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={ getClassName } { ...rest }>
|
||||||
|
{ children }
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
7
src/layout/grid/NitroLayoutGrid.types.ts
Normal file
7
src/layout/grid/NitroLayoutGrid.types.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import { DetailsHTMLAttributes } from 'react';
|
||||||
|
import { NitroLayoutSpacing } from '../common';
|
||||||
|
|
||||||
|
export interface NitroLayoutGridProps extends DetailsHTMLAttributes<HTMLDivElement>
|
||||||
|
{
|
||||||
|
gap?: NitroLayoutSpacing;
|
||||||
|
}
|
19
src/layout/grid/column/NitroLayoutGridColumn.tsx
Normal file
19
src/layout/grid/column/NitroLayoutGridColumn.tsx
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { FC, useMemo } from 'react';
|
||||||
|
import { NitroLayoutFlexColumn } from '../../flex-column/NitroLayoutFlexColumn';
|
||||||
|
import { NitroLayoutGridColumnProps } from './NitroLayoutGridColumn.types';
|
||||||
|
|
||||||
|
export const NitroLayoutGridColumn: FC<NitroLayoutGridColumnProps> = props =>
|
||||||
|
{
|
||||||
|
const { className = '', size = 12, gap = 3, ...rest } = props;
|
||||||
|
|
||||||
|
const getClassName = useMemo(() =>
|
||||||
|
{
|
||||||
|
let newClassName = `g-col-${ size }`;
|
||||||
|
|
||||||
|
if(className && className.length) newClassName += ' ' + className;
|
||||||
|
|
||||||
|
return newClassName;
|
||||||
|
}, [ className, size ]);
|
||||||
|
|
||||||
|
return <NitroLayoutFlexColumn className={ getClassName } gap={ gap } overflow="auto" { ...rest } />
|
||||||
|
}
|
8
src/layout/grid/column/NitroLayoutGridColumn.types.ts
Normal file
8
src/layout/grid/column/NitroLayoutGridColumn.types.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { NitroLayoutColumns, NitroLayoutSpacing } from '../../common';
|
||||||
|
import { NitroLayoutFlexColumnProps } from '../../flex-column/NitroLayoutFlexColumn.types';
|
||||||
|
|
||||||
|
export interface NitroLayoutGridColumnProps extends NitroLayoutFlexColumnProps
|
||||||
|
{
|
||||||
|
size?: NitroLayoutColumns;
|
||||||
|
gap?: NitroLayoutSpacing;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user