@tecsinapse/react-core 1.11.1 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.12.0](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-core@1.11.1...@tecsinapse/react-core@1.12.0) (2021-12-21)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * extractNumbersFromString spacing GridItem ([65a88e6](https://github.com/tecsinapse/design-system/commit/65a88e660418d8a7903faa249e6e322b21d6791a))
12
+
13
+
14
+ ### Features
15
+
16
+ * add grid element based on flex layout ([732f6c4](https://github.com/tecsinapse/design-system/commit/732f6c455c270325cb71c487ae01f2eee1869e0f))
17
+
18
+
19
+
20
+
21
+
6
22
  ## [1.11.1](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-core@1.11.0...@tecsinapse/react-core@1.11.1) (2021-12-20)
7
23
 
8
24
 
@@ -0,0 +1,10 @@
1
+ import { ViewProps } from 'react-native';
2
+ import { SpacingType } from '@tecsinapse/react-core';
3
+ export interface IGrid extends ViewProps {
4
+ children: JSX.Element[];
5
+ layout?: number[][];
6
+ columns?: number;
7
+ spacing?: SpacingType;
8
+ }
9
+ declare const Grid: ({ children, columns, layout, style, spacing, ...rest }: IGrid) => JSX.Element;
10
+ export default Grid;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ var _Item = require("./Item");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
+
18
+ const Grid = ({
19
+ children,
20
+ columns = 12,
21
+ layout,
22
+ style,
23
+ spacing,
24
+ ...rest
25
+ }) => {
26
+ if (layout) {
27
+ const flatLayout = layout.flat();
28
+ return _react.default.createElement(_reactNative.View, _extends({
29
+ style: [style, {
30
+ display: 'flex',
31
+ flexDirection: 'row',
32
+ flexWrap: 'wrap'
33
+ }]
34
+ }, rest), _react.default.Children.map(children, (child, index) => _react.default.createElement(_Item.GridItem, {
35
+ columns: columns,
36
+ span: flatLayout[index],
37
+ spacing: spacing
38
+ }, child)));
39
+ }
40
+
41
+ return _react.default.createElement(_reactNative.View, _extends({
42
+ style: [style, {
43
+ display: 'flex',
44
+ flexDirection: 'row',
45
+ flexWrap: 'wrap'
46
+ }]
47
+ }, rest), _react.default.Children.map(children, child => {
48
+ return _react.default.cloneElement(child, { ...(child === null || child === void 0 ? void 0 : child.props),
49
+ columns,
50
+ spacing
51
+ });
52
+ }));
53
+ };
54
+
55
+ var _default = Grid;
56
+ exports.default = _default;
57
+ //# sourceMappingURL=Grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/molecules/Grid/Grid.tsx"],"names":["Grid","children","columns","layout","style","spacing","rest","flatLayout","flat","display","flexDirection","flexWrap","React","Children","map","child","index","cloneElement","props"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;AAmBA,MAAMA,IAAI,GAAG,CAAC;AACZC,EAAAA,QADY;AAEZC,EAAAA,OAAO,GAAG,EAFE;AAGZC,EAAAA,MAHY;AAIZC,EAAAA,KAJY;AAKZC,EAAAA,OALY;AAMZ,KAAGC;AANS,CAAD,KAOA;AACX,MAAIH,MAAJ,EAAY;AACV,UAAMI,UAAU,GAAGJ,MAAM,CAACK,IAAP,EAAnB;AACA,WACE,6BAAC,iBAAD;AACE,MAAA,KAAK,EAAE,CACLJ,KADK,EAEL;AACEK,QAAAA,OAAO,EAAE,MADX;AAEEC,QAAAA,aAAa,EAAE,KAFjB;AAGEC,QAAAA,QAAQ,EAAE;AAHZ,OAFK;AADT,OASML,IATN,GAWGM,eAAMC,QAAN,CAAeC,GAAf,CAAmBb,QAAnB,EAA6B,CAACc,KAAD,EAAQC,KAAR,KAC5B,6BAAC,cAAD;AACE,MAAA,OAAO,EAAEd,OADX;AAEE,MAAA,IAAI,EAAEK,UAAU,CAACS,KAAD,CAFlB;AAGE,MAAA,OAAO,EAAEX;AAHX,OAKGU,KALH,CADD,CAXH,CADF;AAuBD;;AAED,SACE,6BAAC,iBAAD;AACE,IAAA,KAAK,EAAE,CACLX,KADK,EAEL;AACEK,MAAAA,OAAO,EAAE,MADX;AAEEC,MAAAA,aAAa,EAAE,KAFjB;AAGEC,MAAAA,QAAQ,EAAE;AAHZ,KAFK;AADT,KASML,IATN,GAWGM,eAAMC,QAAN,CAAeC,GAAf,CAAmBb,QAAnB,EAA6Bc,KAAK,IAAI;AACrC,WAAOH,eAAMK,YAAN,CAAmBF,KAAnB,EAA0B,EAC/B,IAAGA,KAAH,aAAGA,KAAH,uBAAGA,KAAK,CAAEG,KAAV,CAD+B;AAE/BhB,MAAAA,OAF+B;AAG/BG,MAAAA;AAH+B,KAA1B,CAAP;AAKD,GANA,CAXH,CADF;AAqBD,CAxDD;;eA0DeL,I","sourcesContent":["import React from 'react';\nimport { View, ViewProps } from 'react-native';\nimport { GridItem } from './Item';\nimport { SpacingType } from '@tecsinapse/react-core';\n\nexport interface IGrid extends ViewProps {\n children: JSX.Element[];\n /** Layout should represent the multiplier of columns to fill the rows properly.\n * Example:\n * const layout = [\n * [6, 6], // Two elements on row\n * [4, 4, 4], // Three elements on row\n * [12], // One element on row\n * ];\n * */\n layout?: number[][];\n /** Number of grid columns to be considered (not the number of elements per row) */\n columns?: number;\n spacing?: SpacingType;\n}\n\nconst Grid = ({\n children,\n columns = 12,\n layout,\n style,\n spacing,\n ...rest\n}: IGrid) => {\n if (layout) {\n const flatLayout = layout.flat();\n return (\n <View\n style={[\n style,\n {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n ]}\n {...rest}\n >\n {React.Children.map(children, (child, index) => (\n <GridItem\n columns={columns}\n span={flatLayout[index]}\n spacing={spacing}\n >\n {child}\n </GridItem>\n ))}\n </View>\n );\n }\n\n return (\n <View\n style={[\n style,\n {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n ]}\n {...rest}\n >\n {React.Children.map(children, child => {\n return React.cloneElement(child, {\n ...child?.props,\n columns,\n spacing,\n });\n })}\n </View>\n );\n};\n\nexport default Grid;\n"],"file":"Grid.js"}
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { SpacingType } from '@tecsinapse/react-core';
3
+ declare type FlexPositioning = 'flex-start' | 'flex-end' | 'center';
4
+ declare type FlexAlignBase = FlexPositioning | 'stretch';
5
+ declare type FlexAlignType = FlexAlignBase | 'baseline';
6
+ declare type FlexSpacing = 'space-between' | 'space-around';
7
+ export interface IGridItem {
8
+ children: React.ReactElement;
9
+ span: number;
10
+ columns?: number;
11
+ loading?: boolean;
12
+ loadingComponent?: React.ReactElement;
13
+ alignContent?: FlexAlignBase | FlexSpacing;
14
+ alignItems?: FlexAlignType;
15
+ alignSelf?: 'auto' | FlexAlignType;
16
+ flex?: number;
17
+ flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
18
+ flexGrow?: number;
19
+ flexShrink?: number;
20
+ justifyContent?: FlexPositioning | FlexSpacing | 'space-evenly';
21
+ spacing?: SpacingType;
22
+ }
23
+ declare const GridItem: ({ children, span, columns, loadingComponent, loading, spacing: _spacing, ...rest }: IGridItem) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
24
+ export default GridItem;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactCore = require("@tecsinapse/react-core");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const GridItem = ({
15
+ children,
16
+ span,
17
+ columns = 12,
18
+ loadingComponent,
19
+ loading = false,
20
+ spacing: _spacing,
21
+ ...rest
22
+ }) => {
23
+ const {
24
+ spacing
25
+ } = (0, _reactCore.useTheme)();
26
+
27
+ if (!_react.default.Children.only(children)) {
28
+ throw new Error('The number of children in GridItem should be one');
29
+ }
30
+
31
+ if (loadingComponent && loading) {
32
+ return loadingComponent;
33
+ }
34
+
35
+ return _react.default.cloneElement(children, { ...(children === null || children === void 0 ? void 0 : children.props),
36
+ style: { ...(children === null || children === void 0 ? void 0 : children.props.style),
37
+ ...rest,
38
+ boxSizing: 'border-box',
39
+ flexBasis: `${100 / (columns / span)}%`,
40
+ padding: _spacing ? (0, _reactCore.extractNumbersFromString)(spacing[_spacing]) : undefined
41
+ }
42
+ });
43
+ };
44
+
45
+ var _default = GridItem;
46
+ exports.default = _default;
47
+ //# sourceMappingURL=Item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/molecules/Grid/Item/Item.tsx"],"names":["GridItem","children","span","columns","loadingComponent","loading","spacing","_spacing","rest","React","Children","only","Error","cloneElement","props","style","boxSizing","flexBasis","padding","undefined"],"mappings":";;;;;;;AAAA;;AACA;;;;AA6BA,MAAMA,QAAQ,GAAG,CAAC;AAChBC,EAAAA,QADgB;AAEhBC,EAAAA,IAFgB;AAGhBC,EAAAA,OAAO,GAAG,EAHM;AAIhBC,EAAAA,gBAJgB;AAKhBC,EAAAA,OAAO,GAAG,KALM;AAMhBC,EAAAA,OAAO,EAAEC,QANO;AAOhB,KAAGC;AAPa,CAAD,KAQA;AACf,QAAM;AAAEF,IAAAA;AAAF,MAAc,0BAApB;;AACA,MAAI,CAACG,eAAMC,QAAN,CAAeC,IAAf,CAAoBV,QAApB,CAAL,EAAoC;AAClC,UAAM,IAAIW,KAAJ,CAAU,kDAAV,CAAN;AACD;;AACD,MAAIR,gBAAgB,IAAIC,OAAxB,EAAiC;AAC/B,WAAOD,gBAAP;AACD;;AAED,SAAOK,eAAMI,YAAN,CAAmBZ,QAAnB,EAA6B,EAClC,IAAGA,QAAH,aAAGA,QAAH,uBAAGA,QAAQ,CAAEa,KAAb,CADkC;AAElCC,IAAAA,KAAK,EAAE,EACL,IAAGd,QAAH,aAAGA,QAAH,uBAAGA,QAAQ,CAAEa,KAAV,CAAgBC,KAAnB,CADK;AAEL,SAAGP,IAFE;AAGLQ,MAAAA,SAAS,EAAE,YAHN;AAILC,MAAAA,SAAS,EAAG,GAAE,OAAOd,OAAO,GAAGD,IAAjB,CAAuB,GAJhC;AAKLgB,MAAAA,OAAO,EAAEX,QAAQ,GACb,yCAAyBD,OAAO,CAACC,QAAD,CAAhC,CADa,GAEbY;AAPC;AAF2B,GAA7B,CAAP;AAYD,CA7BD;;eA+BenB,Q","sourcesContent":["import React from 'react';\nimport { extractNumbersFromString, SpacingType, useTheme } from '@tecsinapse/react-core';\n\ntype FlexPositioning = 'flex-start' | 'flex-end' | 'center';\ntype FlexAlignBase = FlexPositioning | 'stretch';\ntype FlexAlignType = FlexAlignBase | 'baseline';\ntype FlexSpacing = 'space-between' | 'space-around';\n\nexport interface IGridItem {\n children: React.ReactElement;\n /** Number of columns to fill */\n span: number;\n /** You don't have to give this property since is inherited from Grid */\n columns?: number;\n loading?: boolean;\n /** If your GridItem has a loading state, specify the component here (Skeleton) */\n loadingComponent?: React.ReactElement;\n /** Flex properties below */\n alignContent?: FlexAlignBase | FlexSpacing;\n alignItems?: FlexAlignType;\n alignSelf?: 'auto' | FlexAlignType;\n flex?: number;\n flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';\n flexGrow?: number;\n flexShrink?: number;\n justifyContent?: FlexPositioning | FlexSpacing | 'space-evenly';\n /** You don't have to give this property since is inherited from Grid */\n spacing?: SpacingType;\n}\n\nconst GridItem = ({\n children,\n span,\n columns = 12,\n loadingComponent,\n loading = false,\n spacing: _spacing,\n ...rest\n}: IGridItem) => {\n const { spacing } = useTheme();\n if (!React.Children.only(children)) {\n throw new Error('The number of children in GridItem should be one');\n }\n if (loadingComponent && loading) {\n return loadingComponent;\n }\n\n return React.cloneElement(children, {\n ...children?.props,\n style: {\n ...children?.props.style,\n ...rest,\n boxSizing: 'border-box',\n flexBasis: `${100 / (columns / span)}%`,\n padding: _spacing\n ? extractNumbersFromString(spacing[_spacing])\n : undefined,\n },\n });\n};\n\nexport default GridItem;\n"],"file":"Item.js"}
@@ -0,0 +1 @@
1
+ export { default as GridItem, IGridItem } from './Item';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "GridItem", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Item.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "IGridItem", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _Item.IGridItem;
16
+ }
17
+ });
18
+
19
+ var _Item = _interopRequireWildcard(require("./Item"));
20
+
21
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
+
23
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/molecules/Grid/Item/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA","sourcesContent":["export { default as GridItem, IGridItem } from './Item';\n"],"file":"index.js"}
@@ -0,0 +1,2 @@
1
+ export { GridItem, IGridItem } from './Item';
2
+ export { default as Grid, IGrid } from './Grid';
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "GridItem", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Item.GridItem;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "IGridItem", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _Item.IGridItem;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "Grid", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _Grid.default;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "IGrid", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _Grid.IGrid;
28
+ }
29
+ });
30
+
31
+ var _Item = require("./Item");
32
+
33
+ var _Grid = _interopRequireWildcard(require("./Grid"));
34
+
35
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
36
+
37
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/molecules/Grid/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA","sourcesContent":["export { GridItem, IGridItem } from './Item';\nexport { default as Grid, IGrid } from './Grid';\n"],"file":"index.js"}
package/dist/index.d.ts CHANGED
@@ -25,6 +25,7 @@ export { InputPasswordIcon } from './components/molecules/InputPassword';
25
25
  export { Snackbar, SnackbarProps } from './components/molecules/Snackbar';
26
26
  export { HintInputContainer, HintInputContainerProps, } from './components/molecules/HintInputContainer';
27
27
  export { TextArea, TextAreaProps, TextAreaInputBase, } from './components/molecules/TextArea';
28
+ export { GridItem, Grid, IGridItem, IGrid } from './components/molecules/Grid';
28
29
  export * from './styles/definitions';
29
30
  export * from './styles/light';
30
31
  export { default as ThemeProvider } from './styles/ThemeProvider';
package/dist/index.js CHANGED
@@ -84,6 +84,10 @@ var _exportNames = {
84
84
  TextArea: true,
85
85
  TextAreaProps: true,
86
86
  TextAreaInputBase: true,
87
+ GridItem: true,
88
+ Grid: true,
89
+ IGridItem: true,
90
+ IGrid: true,
87
91
  ThemeProvider: true
88
92
  };
89
93
  Object.defineProperty(exports, "Avatar", {
@@ -566,6 +570,30 @@ Object.defineProperty(exports, "TextAreaInputBase", {
566
570
  return _TextArea.TextAreaInputBase;
567
571
  }
568
572
  });
573
+ Object.defineProperty(exports, "GridItem", {
574
+ enumerable: true,
575
+ get: function () {
576
+ return _Grid.GridItem;
577
+ }
578
+ });
579
+ Object.defineProperty(exports, "Grid", {
580
+ enumerable: true,
581
+ get: function () {
582
+ return _Grid.Grid;
583
+ }
584
+ });
585
+ Object.defineProperty(exports, "IGridItem", {
586
+ enumerable: true,
587
+ get: function () {
588
+ return _Grid.IGridItem;
589
+ }
590
+ });
591
+ Object.defineProperty(exports, "IGrid", {
592
+ enumerable: true,
593
+ get: function () {
594
+ return _Grid.IGrid;
595
+ }
596
+ });
569
597
  Object.defineProperty(exports, "ThemeProvider", {
570
598
  enumerable: true,
571
599
  get: function () {
@@ -627,6 +655,8 @@ var _HintInputContainer = require("./components/molecules/HintInputContainer");
627
655
 
628
656
  var _TextArea = require("./components/molecules/TextArea");
629
657
 
658
+ var _Grid = require("./components/molecules/Grid");
659
+
630
660
  var _definitions = require("./styles/definitions");
631
661
 
632
662
  Object.keys(_definitions).forEach(function (key) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAUA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAOA;;AACA;;AAkBA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAMA;;AACA;;AAIA;;AAKA;;AACA;;AACA;;AAIA;;AAKA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export { Avatar, AvatarProps } from './components/atoms/Avatar';\nexport { Badge, BadgeProps } from './components/atoms/Badge';\nexport { BoxContent, BoxContentProps } from './components/atoms/BoxContent';\nexport {\n Button,\n ButtonProps,\n ButtonSizeType,\n ButtonStateProps,\n ButtonStateType,\n Error,\n Loading,\n Success,\n} from './components/atoms/Button';\nexport { Card, CardProps } from './components/atoms/Card';\nexport { Footer, FooterProps } from './components/atoms/Card/Footer';\nexport { Header, HeaderProps } from './components/atoms/Card/Header';\nexport { Checkbox, CheckboxProps } from './components/atoms/Checkbox';\nexport { Divider, DividerProps } from './components/atoms/Divider';\nexport {\n GroupButton,\n GroupButtonOption,\n GroupButtonOptionProps,\n GroupButtonProps,\n GroupButtonValue,\n} from './components/atoms/GroupButton';\nexport { Icon, IconProps } from './components/atoms/Icon';\nexport {\n Hint,\n InputContainer,\n InputContainerProps,\n InputElement,\n InputElementProps,\n InputVariantType,\n Masks,\n PressableInputContainer,\n PressableInputContainerProps,\n StyledBorderKeeper,\n useCurrencyMask,\n useInputFocus,\n useMask,\n disabledInputStyles,\n IMask,\n IMaskValue,\n} from './components/atoms/Input';\nexport { Paper, PaperProps } from './components/atoms/Paper';\nexport {\n PressableSurface,\n PressableSurfaceProps,\n} from './components/atoms/PressableSurface';\nexport { ProgressBar, ProgressBarProps } from './components/atoms/ProgressBar';\nexport { RadioButton, RadioButtonProps } from './components/atoms/RadioButton';\nexport { Switch, SwitchProps } from './components/atoms/Switch';\nexport { Tag, TagProps } from './components/atoms/Tag';\nexport { Text, TextProps } from './components/atoms/Text';\nexport {\n Calendar,\n CalendarProps,\n DateRange,\n SelectionType,\n} from './components/molecules/Calendar';\nexport { DatePicker, DatePickerProps } from './components/molecules/DatePicker';\nexport {\n DateTimePicker,\n DateTimePickerProps,\n} from './components/molecules/DateTimePicker';\nexport {\n DateTimeSelector,\n DateTimeSelectorMode,\n DateTimeSelectorProps,\n} from './components/molecules/DateTimeSelector';\nexport { InputPasswordIcon } from './components/molecules/InputPassword';\nexport { Snackbar, SnackbarProps } from './components/molecules/Snackbar';\nexport {\n HintInputContainer,\n HintInputContainerProps,\n} from './components/molecules/HintInputContainer';\nexport {\n TextArea,\n TextAreaProps,\n TextAreaInputBase,\n} from './components/molecules/TextArea';\nexport * from './styles/definitions';\nexport * from './styles/light';\nexport { default as ThemeProvider } from './styles/ThemeProvider';\nexport * from './types/defaults';\nexport * from './utils';\nexport * from './hooks';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAUA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAOA;;AACA;;AAkBA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAMA;;AACA;;AAIA;;AAKA;;AACA;;AACA;;AAIA;;AAKA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export { Avatar, AvatarProps } from './components/atoms/Avatar';\nexport { Badge, BadgeProps } from './components/atoms/Badge';\nexport { BoxContent, BoxContentProps } from './components/atoms/BoxContent';\nexport {\n Button,\n ButtonProps,\n ButtonSizeType,\n ButtonStateProps,\n ButtonStateType,\n Error,\n Loading,\n Success,\n} from './components/atoms/Button';\nexport { Card, CardProps } from './components/atoms/Card';\nexport { Footer, FooterProps } from './components/atoms/Card/Footer';\nexport { Header, HeaderProps } from './components/atoms/Card/Header';\nexport { Checkbox, CheckboxProps } from './components/atoms/Checkbox';\nexport { Divider, DividerProps } from './components/atoms/Divider';\nexport {\n GroupButton,\n GroupButtonOption,\n GroupButtonOptionProps,\n GroupButtonProps,\n GroupButtonValue,\n} from './components/atoms/GroupButton';\nexport { Icon, IconProps } from './components/atoms/Icon';\nexport {\n Hint,\n InputContainer,\n InputContainerProps,\n InputElement,\n InputElementProps,\n InputVariantType,\n Masks,\n PressableInputContainer,\n PressableInputContainerProps,\n StyledBorderKeeper,\n useCurrencyMask,\n useInputFocus,\n useMask,\n disabledInputStyles,\n IMask,\n IMaskValue,\n} from './components/atoms/Input';\nexport { Paper, PaperProps } from './components/atoms/Paper';\nexport {\n PressableSurface,\n PressableSurfaceProps,\n} from './components/atoms/PressableSurface';\nexport { ProgressBar, ProgressBarProps } from './components/atoms/ProgressBar';\nexport { RadioButton, RadioButtonProps } from './components/atoms/RadioButton';\nexport { Switch, SwitchProps } from './components/atoms/Switch';\nexport { Tag, TagProps } from './components/atoms/Tag';\nexport { Text, TextProps } from './components/atoms/Text';\nexport {\n Calendar,\n CalendarProps,\n DateRange,\n SelectionType,\n} from './components/molecules/Calendar';\nexport { DatePicker, DatePickerProps } from './components/molecules/DatePicker';\nexport {\n DateTimePicker,\n DateTimePickerProps,\n} from './components/molecules/DateTimePicker';\nexport {\n DateTimeSelector,\n DateTimeSelectorMode,\n DateTimeSelectorProps,\n} from './components/molecules/DateTimeSelector';\nexport { InputPasswordIcon } from './components/molecules/InputPassword';\nexport { Snackbar, SnackbarProps } from './components/molecules/Snackbar';\nexport {\n HintInputContainer,\n HintInputContainerProps,\n} from './components/molecules/HintInputContainer';\nexport {\n TextArea,\n TextAreaProps,\n TextAreaInputBase,\n} from './components/molecules/TextArea';\nexport { GridItem, Grid, IGridItem, IGrid } from './components/molecules/Grid';\nexport * from './styles/definitions';\nexport * from './styles/light';\nexport { default as ThemeProvider } from './styles/ThemeProvider';\nexport * from './types/defaults';\nexport * from './utils';\nexport * from './hooks';\n"],"file":"index.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tecsinapse/react-core",
3
3
  "description": "TecSinapse hybrid React components",
4
- "version": "1.11.1",
4
+ "version": "1.12.0",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -31,5 +31,5 @@
31
31
  "react-native": ">=0.64.0",
32
32
  "react-native-vector-icons": ">=8.1.0"
33
33
  },
34
- "gitHead": "4334fe0f86e0e31cfdbea1acd24c8a1fe64319f4"
34
+ "gitHead": "33520278e4683586a9a4338cc3e1aea57773bdfd"
35
35
  }
@@ -0,0 +1,132 @@
1
+ import React from 'react';
2
+ import { Story } from '@storybook/react';
3
+ import Grid, { IGrid } from './Grid';
4
+ import { GridItem } from './Item';
5
+ import { Text } from '@tecsinapse/react-core';
6
+ import { View } from 'react-native';
7
+ import styled from '@emotion/native';
8
+
9
+ export default {
10
+ title: 'Hybrid/Grid',
11
+ component: Grid,
12
+ subcomponents: { GridItem },
13
+ };
14
+
15
+ const Container = styled(View)`
16
+ background-color: orange;
17
+ padding: 2px;
18
+ border-width: 1px;
19
+ border-color: white;
20
+ border-style: solid;
21
+ border-radius: 8px;
22
+ `;
23
+
24
+ const TemplateGrid: Story<IGrid> = args => {
25
+ return (
26
+ <Grid {...args}>
27
+ <GridItem span={12}>
28
+ <Container>
29
+ <Text>Box</Text>
30
+ </Container>
31
+ </GridItem>
32
+
33
+ <GridItem span={6}>
34
+ <Container>
35
+ <Text>Box</Text>
36
+ </Container>
37
+ </GridItem>
38
+ <GridItem span={6}>
39
+ <Container>
40
+ <Text>Box</Text>
41
+ </Container>
42
+ </GridItem>
43
+
44
+ <GridItem span={4} flexShrink={1}>
45
+ <Container>
46
+ <Text>Box</Text>
47
+ </Container>
48
+ </GridItem>
49
+ <GridItem span={4} flexGrow={1}>
50
+ <Container>
51
+ <Text>Box</Text>
52
+ </Container>
53
+ </GridItem>
54
+ <GridItem span={4} flexShrink={1}>
55
+ <Container>
56
+ <Text>Box</Text>
57
+ </Container>
58
+ </GridItem>
59
+
60
+ <GridItem span={3}>
61
+ <Container>
62
+ <Text>Box</Text>
63
+ </Container>
64
+ </GridItem>
65
+ <GridItem span={3}>
66
+ <Container>
67
+ <Text>Box</Text>
68
+ </Container>
69
+ </GridItem>
70
+ <GridItem span={3}>
71
+ <Container>
72
+ <Text>Box</Text>
73
+ </Container>
74
+ </GridItem>
75
+ <GridItem span={3}>
76
+ <Container>
77
+ <Text>Box</Text>
78
+ </Container>
79
+ </GridItem>
80
+ </Grid>
81
+ );
82
+ };
83
+
84
+ export const WithGridItem = TemplateGrid.bind({});
85
+
86
+ WithGridItem.args = {
87
+ spacing: 'mili',
88
+ };
89
+
90
+ const TemplateLayout: Story<IGrid> = args => {
91
+ return (
92
+ <Grid {...args}>
93
+ <Container>
94
+ <Text>Box</Text>
95
+ </Container>
96
+ <Container>
97
+ <Text>Box</Text>
98
+ </Container>
99
+ <Container>
100
+ <Text>Box</Text>
101
+ </Container>
102
+ <Container>
103
+ <Text>Box</Text>
104
+ </Container>
105
+ <Container>
106
+ <Text>Box</Text>
107
+ </Container>
108
+ <Container>
109
+ <Text>Box</Text>
110
+ </Container>
111
+ <Container>
112
+ <Text>Box</Text>
113
+ </Container>
114
+ <Container>
115
+ <Text>Box</Text>
116
+ </Container>
117
+ <Container>
118
+ <Text>Box</Text>
119
+ </Container>
120
+ <Container>
121
+ <Text>Box</Text>
122
+ </Container>
123
+ </Grid>
124
+ );
125
+ };
126
+
127
+ export const WithLayout = TemplateLayout.bind({});
128
+
129
+ WithLayout.args = {
130
+ layout: [[12], [6, 6], [4, 4, 4], [3, 3, 3, 3]],
131
+ spacing: 'mili',
132
+ };
@@ -0,0 +1,80 @@
1
+ import React from 'react';
2
+ import { View, ViewProps } from 'react-native';
3
+ import { GridItem } from './Item';
4
+ import { SpacingType } from '@tecsinapse/react-core';
5
+
6
+ export interface IGrid extends ViewProps {
7
+ children: JSX.Element[];
8
+ /** Layout should represent the multiplier of columns to fill the rows properly.
9
+ * Example:
10
+ * const layout = [
11
+ * [6, 6], // Two elements on row
12
+ * [4, 4, 4], // Three elements on row
13
+ * [12], // One element on row
14
+ * ];
15
+ * */
16
+ layout?: number[][];
17
+ /** Number of grid columns to be considered (not the number of elements per row) */
18
+ columns?: number;
19
+ spacing?: SpacingType;
20
+ }
21
+
22
+ const Grid = ({
23
+ children,
24
+ columns = 12,
25
+ layout,
26
+ style,
27
+ spacing,
28
+ ...rest
29
+ }: IGrid) => {
30
+ if (layout) {
31
+ const flatLayout = layout.flat();
32
+ return (
33
+ <View
34
+ style={[
35
+ style,
36
+ {
37
+ display: 'flex',
38
+ flexDirection: 'row',
39
+ flexWrap: 'wrap',
40
+ },
41
+ ]}
42
+ {...rest}
43
+ >
44
+ {React.Children.map(children, (child, index) => (
45
+ <GridItem
46
+ columns={columns}
47
+ span={flatLayout[index]}
48
+ spacing={spacing}
49
+ >
50
+ {child}
51
+ </GridItem>
52
+ ))}
53
+ </View>
54
+ );
55
+ }
56
+
57
+ return (
58
+ <View
59
+ style={[
60
+ style,
61
+ {
62
+ display: 'flex',
63
+ flexDirection: 'row',
64
+ flexWrap: 'wrap',
65
+ },
66
+ ]}
67
+ {...rest}
68
+ >
69
+ {React.Children.map(children, child => {
70
+ return React.cloneElement(child, {
71
+ ...child?.props,
72
+ columns,
73
+ spacing,
74
+ });
75
+ })}
76
+ </View>
77
+ );
78
+ };
79
+
80
+ export default Grid;
@@ -0,0 +1,62 @@
1
+ import React from 'react';
2
+ import { extractNumbersFromString, SpacingType, useTheme } from '@tecsinapse/react-core';
3
+
4
+ type FlexPositioning = 'flex-start' | 'flex-end' | 'center';
5
+ type FlexAlignBase = FlexPositioning | 'stretch';
6
+ type FlexAlignType = FlexAlignBase | 'baseline';
7
+ type FlexSpacing = 'space-between' | 'space-around';
8
+
9
+ export interface IGridItem {
10
+ children: React.ReactElement;
11
+ /** Number of columns to fill */
12
+ span: number;
13
+ /** You don't have to give this property since is inherited from Grid */
14
+ columns?: number;
15
+ loading?: boolean;
16
+ /** If your GridItem has a loading state, specify the component here (Skeleton) */
17
+ loadingComponent?: React.ReactElement;
18
+ /** Flex properties below */
19
+ alignContent?: FlexAlignBase | FlexSpacing;
20
+ alignItems?: FlexAlignType;
21
+ alignSelf?: 'auto' | FlexAlignType;
22
+ flex?: number;
23
+ flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
24
+ flexGrow?: number;
25
+ flexShrink?: number;
26
+ justifyContent?: FlexPositioning | FlexSpacing | 'space-evenly';
27
+ /** You don't have to give this property since is inherited from Grid */
28
+ spacing?: SpacingType;
29
+ }
30
+
31
+ const GridItem = ({
32
+ children,
33
+ span,
34
+ columns = 12,
35
+ loadingComponent,
36
+ loading = false,
37
+ spacing: _spacing,
38
+ ...rest
39
+ }: IGridItem) => {
40
+ const { spacing } = useTheme();
41
+ if (!React.Children.only(children)) {
42
+ throw new Error('The number of children in GridItem should be one');
43
+ }
44
+ if (loadingComponent && loading) {
45
+ return loadingComponent;
46
+ }
47
+
48
+ return React.cloneElement(children, {
49
+ ...children?.props,
50
+ style: {
51
+ ...children?.props.style,
52
+ ...rest,
53
+ boxSizing: 'border-box',
54
+ flexBasis: `${100 / (columns / span)}%`,
55
+ padding: _spacing
56
+ ? extractNumbersFromString(spacing[_spacing])
57
+ : undefined,
58
+ },
59
+ });
60
+ };
61
+
62
+ export default GridItem;
@@ -0,0 +1 @@
1
+ export { default as GridItem, IGridItem } from './Item';
@@ -0,0 +1,2 @@
1
+ export { GridItem, IGridItem } from './Item';
2
+ export { default as Grid, IGrid } from './Grid';
package/src/index.ts CHANGED
@@ -79,6 +79,7 @@ export {
79
79
  TextAreaProps,
80
80
  TextAreaInputBase,
81
81
  } from './components/molecules/TextArea';
82
+ export { GridItem, Grid, IGridItem, IGrid } from './components/molecules/Grid';
82
83
  export * from './styles/definitions';
83
84
  export * from './styles/light';
84
85
  export { default as ThemeProvider } from './styles/ThemeProvider';