cl15-products-pack 0.0.0-stage → 0.0.2

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/README.md CHANGED
@@ -1,3 +1,34 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
1
+ # CL15 Products Pack
2
+ Este es el paquete de productos de React
3
+
4
+ ## Example:
5
+ ```tsx
6
+ <ProductCard
7
+ key={product.id}
8
+ product = {product}
9
+ className="bg-dark text-white"
10
+ initialValues = {{
11
+ count: 6,
12
+ maxCount: 10
13
+ }}
14
+ >
15
+ {
16
+ ({reset,isMaxCountReached,increaseBy,count, maxCount})=>(
17
+ <>
18
+ <ProductImage className="custom-image" style={{ boxShadow: '10px 10px 10px rgba(0,0,0,0.2)'}}/>
19
+ <ProductTitle className="text-bold"/>
20
+ <ProductButtons className="custom-buttons"/>
21
+ <button onClick={reset}>Reset</button>
22
+ <button onClick={()=>increaseBy(-2)}> -2 </button>
23
+ {/* Si no se llega al isMaxCount mostrar, ocultar */}
24
+ {/* <button onClick={()=>increaseBy(2)} style={{display:`${isMaxCountReached?'none':'inline'}`}}> +2 </button> */}
25
+ {
26
+ (!isMaxCountReached && <button onClick={()=> increaseBy(+2)}>+2</button>)
27
+ }
28
+ <span>{count} - {maxCount}</span>
29
+
30
+ </>
31
+ )
32
+ }
33
+ </ProductCard>
34
+ ```
@@ -0,0 +1,128 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+
6
+ const useProduct = ({ onChange, product, value = 0, initialValues }) => {
7
+ const [counter, setCounter] = react.useState((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
8
+ const isMounted = react.useRef(false);
9
+ const increaseBy = (value) => {
10
+ let newValue = Math.max(counter + value, 0);
11
+ if (initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount)
12
+ newValue = Math.min(initialValues.maxCount, newValue);
13
+ setCounter(newValue);
14
+ onChange && onChange({ count: newValue, product });
15
+ };
16
+ const reset = () => {
17
+ setCounter((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
18
+ };
19
+ react.useEffect(() => {
20
+ if (!isMounted.current)
21
+ return;
22
+ setCounter((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
23
+ }, [value]);
24
+ react.useEffect(() => {
25
+ isMounted.current = true;
26
+ }, []);
27
+ return {
28
+ counter,
29
+ isMaxCountReached: !!(initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) && initialValues.maxCount === counter,
30
+ maxCount: initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount,
31
+ increaseBy,
32
+ reset
33
+ };
34
+ };
35
+
36
+ function styleInject(css, ref) {
37
+ if ( ref === void 0 ) ref = {};
38
+ var insertAt = ref.insertAt;
39
+
40
+ if (typeof document === 'undefined') { return; }
41
+
42
+ var head = document.head || document.getElementsByTagName('head')[0];
43
+ var style = document.createElement('style');
44
+ style.type = 'text/css';
45
+
46
+ if (insertAt === 'top') {
47
+ if (head.firstChild) {
48
+ head.insertBefore(style, head.firstChild);
49
+ } else {
50
+ head.appendChild(style);
51
+ }
52
+ } else {
53
+ head.appendChild(style);
54
+ }
55
+
56
+ if (style.styleSheet) {
57
+ style.styleSheet.cssText = css;
58
+ } else {
59
+ style.appendChild(document.createTextNode(css));
60
+ }
61
+ }
62
+
63
+ var css_248z = "\r\n\r\n.styles-module_productCard__oaIVo {\r\n background-color: white;\r\n border-radius: 15px;\r\n color: black;\r\n padding-bottom: 5px;\r\n width: 250px;\r\n margin-right: 5px;\r\n margin-top: 5px;\r\n}\r\n\r\n.styles-module_productImg__vPsTp {\r\n border-radius: 15px 15px 0px 0px;\r\n width: 100%;\r\n}\r\n\r\n.styles-module_productDescription__Ariub {\r\n margin: 10px;\r\n}\r\n\r\n.styles-module_buttonsContainer__ghCDF {\r\n margin: 10px;\r\n display: flex;\r\n flex-direction: row;\r\n}\r\n\r\n.styles-module_buttonMinus__BTgTf {\r\n cursor: pointer;\r\n background-color: transparent;\r\n border: 1px solid black;\r\n border-radius: 5px 0px 0px 5px;\r\n font-size: 20px;\r\n width: 30px;\r\n}\r\n\r\n.styles-module_buttonMinus__BTgTf:hover {\r\n background-color: rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.styles-module_countLabel__S6HZ- {\r\n border-bottom: 1px solid black;\r\n border-top: 1px solid black;\r\n font-size: 16px;\r\n height: 25px;\r\n padding-top: 5px;\r\n text-align: center;\r\n width: 30px;\r\n}\r\n\r\n.styles-module_buttonAdd__s8wd6 {\r\n cursor: pointer;\r\n background-color: transparent;\r\n border: 1px solid black;\r\n border-radius: 0px 5px 5px 0px;\r\n font-size: 20px;\r\n width: 30px;\r\n}\r\n\r\n.styles-module_buttonAdd__s8wd6:hover {\r\n background-color: rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.styles-module_disabled__k5aZm {\r\n border-color: grey !important;\r\n border-left:1px solid white !important;\r\n color: gray !important;\r\n}";
64
+ var styles = {"productCard":"styles-module_productCard__oaIVo","productImg":"styles-module_productImg__vPsTp","productDescription":"styles-module_productDescription__Ariub","buttonsContainer":"styles-module_buttonsContainer__ghCDF","buttonMinus":"styles-module_buttonMinus__BTgTf","countLabel":"styles-module_countLabel__S6HZ-","buttonAdd":"styles-module_buttonAdd__s8wd6","disabled":"styles-module_disabled__k5aZm"};
65
+ styleInject(css_248z);
66
+
67
+ const ProductContext = react.createContext({});
68
+ const { Provider } = ProductContext;
69
+ const ProductCard$1 = ({ children, product, className, style, onChange, value, initialValues }) => {
70
+ const { counter, increaseBy, maxCount, isMaxCountReached, reset } = useProduct({ onChange, product, value, initialValues });
71
+ return (jsxRuntime.jsx(Provider, { value: {
72
+ counter,
73
+ increaseBy,
74
+ maxCount,
75
+ product
76
+ }, children: jsxRuntime.jsx("div", { className: `${styles.productCard} ${className}`, style: style, children: children({
77
+ count: counter,
78
+ isMaxCountReached,
79
+ maxCount: initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount,
80
+ product,
81
+ increaseBy,
82
+ reset
83
+ }) }) }));
84
+ };
85
+
86
+ const ProductButtons = ({ className, style }) => {
87
+ //TODO: maxCount
88
+ const { increaseBy, counter, maxCount } = react.useContext(ProductContext);
89
+ //TODO: isMaxReached = useCallback, dependencias [counter, maxCount]
90
+ // TRUE si el count === maxCount
91
+ // False si no lo es
92
+ const isMaxReached = react.useCallback(() => !!maxCount && counter === maxCount, [counter, maxCount]);
93
+ return (jsxRuntime.jsxs("div", { className: `${styles.buttonsContainer} ${className}`, style: style, children: [jsxRuntime.jsx("button", { className: styles.buttonMinus, onClick: () => increaseBy(-1), children: " - " }), jsxRuntime.jsx("div", { className: styles.countLabel, children: counter }), jsxRuntime.jsx("button", { className: `${styles.buttonAdd} ${isMaxReached() && styles.disabled}`, onClick: () => increaseBy(1), children: " + " })] }));
94
+ };
95
+
96
+ var noImage = "data:image/jpeg;base64,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";
97
+
98
+ const ProductImage = ({ img = '', className, style }) => {
99
+ const { product } = react.useContext(ProductContext);
100
+ let imgToShow;
101
+ if (img) {
102
+ imgToShow = img;
103
+ }
104
+ else if (product.img) {
105
+ imgToShow = product.img;
106
+ }
107
+ else {
108
+ imgToShow = noImage;
109
+ }
110
+ return (jsxRuntime.jsx("img", { className: `${styles.productImg} ${className}`, src: imgToShow, alt: "Product ", style: style }));
111
+ };
112
+
113
+ const ProductTitle = ({ title, className, style }) => {
114
+ const { product } = react.useContext(ProductContext);
115
+ return (jsxRuntime.jsx("span", { className: `${styles.productDescription} ${className}`, style: style, children: title ? title : product.title }));
116
+ };
117
+
118
+ const ProductCard = Object.assign(ProductCard$1, {
119
+ Title: ProductTitle,
120
+ Image: ProductImage,
121
+ Buttons: ProductButtons
122
+ });
123
+
124
+ exports.ProductButtons = ProductButtons;
125
+ exports.ProductCard = ProductCard;
126
+ exports.ProductImage = ProductImage;
127
+ exports.ProductTitle = ProductTitle;
128
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/hooks/useProduct.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/ProductCard.tsx","../src/components/ProductButtons.tsx","../src/assets/no-image.jpg","../src/components/ProductImage.tsx","../src/components/ProductTitle.tsx","../src/components/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\r\nimport { onChangeArgs, Product, InitialValues } from '../interfaces/interfaces';\r\n\r\ninterface useProductArgs {\r\n product:Product;\r\n onChange?: (args:onChangeArgs)=>void;\r\n value?:number;\r\n initialValues?: InitialValues\r\n}\r\n\r\nexport const useProduct = ({onChange, product, value = 0, initialValues}:useProductArgs) => {\r\n\r\n const [counter, setCounter] = useState<number>(initialValues?.count || value)\r\n\r\n const isMounted = useRef(false);\r\n\r\n const increaseBy = (value:number) => {\r\n\r\n let newValue = Math.max(counter+value,0)\r\n \r\n if(initialValues?.maxCount)\r\n newValue = Math.min(initialValues.maxCount, newValue)\r\n \r\n setCounter(newValue); \r\n onChange && onChange({count:newValue,product});\r\n }\r\n\r\n const reset = () =>{\r\n setCounter(initialValues?.count || value)\r\n }\r\n\r\n useEffect(()=>{\r\n if(!isMounted.current) return;\r\n\r\n setCounter(initialValues?.count || value);\r\n },[value])\r\n\r\n useEffect(()=>{\r\n isMounted.current = true;\r\n },[])\r\n \r\n return {\r\n counter,\r\n isMaxCountReached:!!initialValues?.count && initialValues.maxCount === counter,\r\n maxCount: initialValues?.maxCount,\r\n \r\n increaseBy,\r\n reset\r\n }\r\n}\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","\r\nimport { createContext, JSX, ReactElement } from 'react';\r\n\r\nimport { useProduct } from '../hooks/useProduct';\r\nimport { InitialValues, onChangeArgs, Product, ProductCardHandlers, ProductContextProps } from '../interfaces/interfaces';\r\n\r\nimport styles from '../styles/styles.module.css'\r\n\r\nexport const ProductContext = createContext({} as ProductContextProps)\r\nconst { Provider } = ProductContext;\r\n\r\nexport interface Props {\r\n product: Product;\r\n // children?: ReactElement | ReactElement[];\r\n children: (args: ProductCardHandlers)=>JSX.Element;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n onChange?:(args:onChangeArgs)=>void;\r\n value?: number;\r\n initialValues?: InitialValues\r\n}\r\n\r\n\r\nexport const ProductCard = ({children,product, className, style, onChange, value, initialValues}:Props) => {\r\n\r\n const {counter, increaseBy, maxCount, isMaxCountReached, reset} \r\n = useProduct({onChange, product, value, initialValues});\r\n\r\n return (\r\n <Provider value={{\r\n counter,\r\n increaseBy,\r\n maxCount,\r\n product\r\n }}>\r\n <div \r\n className={`${styles.productCard} ${className}`}\r\n style={style}\r\n >\r\n { \r\n children({\r\n count:counter,\r\n isMaxCountReached,\r\n maxCount: initialValues?.maxCount,\r\n product,\r\n increaseBy,\r\n reset\r\n }) \r\n }\r\n \r\n </div>\r\n </Provider>\r\n )\r\n}\r\n","import { useCallback, useContext } from 'react';\r\nimport { ProductContext } from './ProductCard';\r\n\r\nimport styles from '../styles/styles.module.css'\r\n\r\nexport interface Props {\r\n className?:string;\r\n style?:React.CSSProperties;\r\n}\r\n\r\nexport const ProductButtons = ({className, style}:Props)=>{\r\n\r\n //TODO: maxCount\r\n const {increaseBy, counter, maxCount} = useContext(ProductContext);\r\n\r\n //TODO: isMaxReached = useCallback, dependencias [counter, maxCount]\r\n // TRUE si el count === maxCount\r\n // False si no lo es\r\n\r\n const isMaxReached = useCallback(\r\n ()=> !!maxCount && counter===maxCount,\r\n [counter,maxCount])\r\n\r\n return (\r\n <div \r\n className={ `${styles.buttonsContainer} ${className}` }\r\n style={style}\r\n >\r\n <button \r\n className={styles.buttonMinus}\r\n onClick={()=>increaseBy(-1)}> - </button>\r\n\r\n <div className={styles.countLabel}>{counter}</div>\r\n <button \r\n className={`${styles.buttonAdd} ${isMaxReached() && styles.disabled }`}\r\n onClick={()=>increaseBy(+1)}> + </button>\r\n </div>\r\n )\r\n}","export default \"data:image/jpeg;base64,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\"","import { useContext } from 'react';\r\nimport { ProductContext } from \"./ProductCard\";\r\n\r\nimport styles from '../styles/styles.module.css'\r\nimport noImage from '../assets/no-image.jpg'\r\n\r\nexport interface Props {\r\n img?:string,\r\n className?: string;\r\n style?:React.CSSProperties;\r\n}\r\n\r\nexport const ProductImage = ({img='',className, style}:Props)=>{\r\n\r\n const { product } = useContext(ProductContext);\r\n\r\n let imgToShow: string;\r\n\r\n if(img){\r\n imgToShow = img;\r\n } else if( product.img){\r\n imgToShow = product.img\r\n } else {\r\n imgToShow = noImage;\r\n }\r\n\r\n return (\r\n <img \r\n className={`${styles.productImg} ${className}`} \r\n src={ imgToShow } \r\n alt=\"Product \"\r\n style={style}\r\n />\r\n )\r\n}\r\n","import React, { useContext } from 'react'\r\nimport { ProductContext } from './ProductCard'\r\n\r\nimport styles from '../styles/styles.module.css'\r\n\r\nexport interface Props {\r\n className?:string;\r\n title?:string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const ProductTitle = ({title,className, style}:Props)=>{\r\n\r\n const { product } = useContext(ProductContext)\r\n \r\n return (\r\n <span \r\n className={`${styles.productDescription} ${className}`}\r\n style={style}\r\n >\r\n {title?title:product.title}\r\n </span>\r\n )\r\n}\r\n","import { ProductCard as ProductCardHOC } from './ProductCard';\r\nimport { ProductCardHOCProps } from '../interfaces/interfaces';\r\n\r\nimport { ProductButtons } from './ProductButtons';\r\nimport { ProductImage } from './ProductImage';\r\nimport { ProductTitle } from './ProductTitle';\r\n\r\nexport { ProductButtons } from './ProductButtons';\r\nexport { ProductImage } from './ProductImage';\r\nexport { ProductTitle } from './ProductTitle';\r\n\r\n\r\nexport const ProductCard:ProductCardHOCProps = Object.assign(ProductCardHOC,{\r\n Title: ProductTitle,\r\n Image: ProductImage,\r\n Buttons: ProductButtons\r\n})\r\n\r\nexport default ProductCard;\r\n"],"names":["useState","useRef","useEffect","createContext","ProductCard","_jsx","useContext","useCallback","_jsxs","ProductCardHOC"],"mappings":"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","x_google_ignoreList":[1]}
@@ -0,0 +1,123 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useState, useRef, useEffect, createContext, useContext, useCallback } from 'react';
3
+
4
+ const useProduct = ({ onChange, product, value = 0, initialValues }) => {
5
+ const [counter, setCounter] = useState((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
6
+ const isMounted = useRef(false);
7
+ const increaseBy = (value) => {
8
+ let newValue = Math.max(counter + value, 0);
9
+ if (initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount)
10
+ newValue = Math.min(initialValues.maxCount, newValue);
11
+ setCounter(newValue);
12
+ onChange && onChange({ count: newValue, product });
13
+ };
14
+ const reset = () => {
15
+ setCounter((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
16
+ };
17
+ useEffect(() => {
18
+ if (!isMounted.current)
19
+ return;
20
+ setCounter((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
21
+ }, [value]);
22
+ useEffect(() => {
23
+ isMounted.current = true;
24
+ }, []);
25
+ return {
26
+ counter,
27
+ isMaxCountReached: !!(initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) && initialValues.maxCount === counter,
28
+ maxCount: initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount,
29
+ increaseBy,
30
+ reset
31
+ };
32
+ };
33
+
34
+ function styleInject(css, ref) {
35
+ if ( ref === void 0 ) ref = {};
36
+ var insertAt = ref.insertAt;
37
+
38
+ if (typeof document === 'undefined') { return; }
39
+
40
+ var head = document.head || document.getElementsByTagName('head')[0];
41
+ var style = document.createElement('style');
42
+ style.type = 'text/css';
43
+
44
+ if (insertAt === 'top') {
45
+ if (head.firstChild) {
46
+ head.insertBefore(style, head.firstChild);
47
+ } else {
48
+ head.appendChild(style);
49
+ }
50
+ } else {
51
+ head.appendChild(style);
52
+ }
53
+
54
+ if (style.styleSheet) {
55
+ style.styleSheet.cssText = css;
56
+ } else {
57
+ style.appendChild(document.createTextNode(css));
58
+ }
59
+ }
60
+
61
+ var css_248z = "\r\n\r\n.styles-module_productCard__oaIVo {\r\n background-color: white;\r\n border-radius: 15px;\r\n color: black;\r\n padding-bottom: 5px;\r\n width: 250px;\r\n margin-right: 5px;\r\n margin-top: 5px;\r\n}\r\n\r\n.styles-module_productImg__vPsTp {\r\n border-radius: 15px 15px 0px 0px;\r\n width: 100%;\r\n}\r\n\r\n.styles-module_productDescription__Ariub {\r\n margin: 10px;\r\n}\r\n\r\n.styles-module_buttonsContainer__ghCDF {\r\n margin: 10px;\r\n display: flex;\r\n flex-direction: row;\r\n}\r\n\r\n.styles-module_buttonMinus__BTgTf {\r\n cursor: pointer;\r\n background-color: transparent;\r\n border: 1px solid black;\r\n border-radius: 5px 0px 0px 5px;\r\n font-size: 20px;\r\n width: 30px;\r\n}\r\n\r\n.styles-module_buttonMinus__BTgTf:hover {\r\n background-color: rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.styles-module_countLabel__S6HZ- {\r\n border-bottom: 1px solid black;\r\n border-top: 1px solid black;\r\n font-size: 16px;\r\n height: 25px;\r\n padding-top: 5px;\r\n text-align: center;\r\n width: 30px;\r\n}\r\n\r\n.styles-module_buttonAdd__s8wd6 {\r\n cursor: pointer;\r\n background-color: transparent;\r\n border: 1px solid black;\r\n border-radius: 0px 5px 5px 0px;\r\n font-size: 20px;\r\n width: 30px;\r\n}\r\n\r\n.styles-module_buttonAdd__s8wd6:hover {\r\n background-color: rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.styles-module_disabled__k5aZm {\r\n border-color: grey !important;\r\n border-left:1px solid white !important;\r\n color: gray !important;\r\n}";
62
+ var styles = {"productCard":"styles-module_productCard__oaIVo","productImg":"styles-module_productImg__vPsTp","productDescription":"styles-module_productDescription__Ariub","buttonsContainer":"styles-module_buttonsContainer__ghCDF","buttonMinus":"styles-module_buttonMinus__BTgTf","countLabel":"styles-module_countLabel__S6HZ-","buttonAdd":"styles-module_buttonAdd__s8wd6","disabled":"styles-module_disabled__k5aZm"};
63
+ styleInject(css_248z);
64
+
65
+ const ProductContext = createContext({});
66
+ const { Provider } = ProductContext;
67
+ const ProductCard$1 = ({ children, product, className, style, onChange, value, initialValues }) => {
68
+ const { counter, increaseBy, maxCount, isMaxCountReached, reset } = useProduct({ onChange, product, value, initialValues });
69
+ return (jsx(Provider, { value: {
70
+ counter,
71
+ increaseBy,
72
+ maxCount,
73
+ product
74
+ }, children: jsx("div", { className: `${styles.productCard} ${className}`, style: style, children: children({
75
+ count: counter,
76
+ isMaxCountReached,
77
+ maxCount: initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount,
78
+ product,
79
+ increaseBy,
80
+ reset
81
+ }) }) }));
82
+ };
83
+
84
+ const ProductButtons = ({ className, style }) => {
85
+ //TODO: maxCount
86
+ const { increaseBy, counter, maxCount } = useContext(ProductContext);
87
+ //TODO: isMaxReached = useCallback, dependencias [counter, maxCount]
88
+ // TRUE si el count === maxCount
89
+ // False si no lo es
90
+ const isMaxReached = useCallback(() => !!maxCount && counter === maxCount, [counter, maxCount]);
91
+ return (jsxs("div", { className: `${styles.buttonsContainer} ${className}`, style: style, children: [jsx("button", { className: styles.buttonMinus, onClick: () => increaseBy(-1), children: " - " }), jsx("div", { className: styles.countLabel, children: counter }), jsx("button", { className: `${styles.buttonAdd} ${isMaxReached() && styles.disabled}`, onClick: () => increaseBy(1), children: " + " })] }));
92
+ };
93
+
94
+ var noImage = "data:image/jpeg;base64,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";
95
+
96
+ const ProductImage = ({ img = '', className, style }) => {
97
+ const { product } = useContext(ProductContext);
98
+ let imgToShow;
99
+ if (img) {
100
+ imgToShow = img;
101
+ }
102
+ else if (product.img) {
103
+ imgToShow = product.img;
104
+ }
105
+ else {
106
+ imgToShow = noImage;
107
+ }
108
+ return (jsx("img", { className: `${styles.productImg} ${className}`, src: imgToShow, alt: "Product ", style: style }));
109
+ };
110
+
111
+ const ProductTitle = ({ title, className, style }) => {
112
+ const { product } = useContext(ProductContext);
113
+ return (jsx("span", { className: `${styles.productDescription} ${className}`, style: style, children: title ? title : product.title }));
114
+ };
115
+
116
+ const ProductCard = Object.assign(ProductCard$1, {
117
+ Title: ProductTitle,
118
+ Image: ProductImage,
119
+ Buttons: ProductButtons
120
+ });
121
+
122
+ export { ProductButtons, ProductCard, ProductImage, ProductTitle };
123
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/hooks/useProduct.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/ProductCard.tsx","../src/components/ProductButtons.tsx","../src/assets/no-image.jpg","../src/components/ProductImage.tsx","../src/components/ProductTitle.tsx","../src/components/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\r\nimport { onChangeArgs, Product, InitialValues } from '../interfaces/interfaces';\r\n\r\ninterface useProductArgs {\r\n product:Product;\r\n onChange?: (args:onChangeArgs)=>void;\r\n value?:number;\r\n initialValues?: InitialValues\r\n}\r\n\r\nexport const useProduct = ({onChange, product, value = 0, initialValues}:useProductArgs) => {\r\n\r\n const [counter, setCounter] = useState<number>(initialValues?.count || value)\r\n\r\n const isMounted = useRef(false);\r\n\r\n const increaseBy = (value:number) => {\r\n\r\n let newValue = Math.max(counter+value,0)\r\n \r\n if(initialValues?.maxCount)\r\n newValue = Math.min(initialValues.maxCount, newValue)\r\n \r\n setCounter(newValue); \r\n onChange && onChange({count:newValue,product});\r\n }\r\n\r\n const reset = () =>{\r\n setCounter(initialValues?.count || value)\r\n }\r\n\r\n useEffect(()=>{\r\n if(!isMounted.current) return;\r\n\r\n setCounter(initialValues?.count || value);\r\n },[value])\r\n\r\n useEffect(()=>{\r\n isMounted.current = true;\r\n },[])\r\n \r\n return {\r\n counter,\r\n isMaxCountReached:!!initialValues?.count && initialValues.maxCount === counter,\r\n maxCount: initialValues?.maxCount,\r\n \r\n increaseBy,\r\n reset\r\n }\r\n}\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","\r\nimport { createContext, JSX, ReactElement } from 'react';\r\n\r\nimport { useProduct } from '../hooks/useProduct';\r\nimport { InitialValues, onChangeArgs, Product, ProductCardHandlers, ProductContextProps } from '../interfaces/interfaces';\r\n\r\nimport styles from '../styles/styles.module.css'\r\n\r\nexport const ProductContext = createContext({} as ProductContextProps)\r\nconst { Provider } = ProductContext;\r\n\r\nexport interface Props {\r\n product: Product;\r\n // children?: ReactElement | ReactElement[];\r\n children: (args: ProductCardHandlers)=>JSX.Element;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n onChange?:(args:onChangeArgs)=>void;\r\n value?: number;\r\n initialValues?: InitialValues\r\n}\r\n\r\n\r\nexport const ProductCard = ({children,product, className, style, onChange, value, initialValues}:Props) => {\r\n\r\n const {counter, increaseBy, maxCount, isMaxCountReached, reset} \r\n = useProduct({onChange, product, value, initialValues});\r\n\r\n return (\r\n <Provider value={{\r\n counter,\r\n increaseBy,\r\n maxCount,\r\n product\r\n }}>\r\n <div \r\n className={`${styles.productCard} ${className}`}\r\n style={style}\r\n >\r\n { \r\n children({\r\n count:counter,\r\n isMaxCountReached,\r\n maxCount: initialValues?.maxCount,\r\n product,\r\n increaseBy,\r\n reset\r\n }) \r\n }\r\n \r\n </div>\r\n </Provider>\r\n )\r\n}\r\n","import { useCallback, useContext } from 'react';\r\nimport { ProductContext } from './ProductCard';\r\n\r\nimport styles from '../styles/styles.module.css'\r\n\r\nexport interface Props {\r\n className?:string;\r\n style?:React.CSSProperties;\r\n}\r\n\r\nexport const ProductButtons = ({className, style}:Props)=>{\r\n\r\n //TODO: maxCount\r\n const {increaseBy, counter, maxCount} = useContext(ProductContext);\r\n\r\n //TODO: isMaxReached = useCallback, dependencias [counter, maxCount]\r\n // TRUE si el count === maxCount\r\n // False si no lo es\r\n\r\n const isMaxReached = useCallback(\r\n ()=> !!maxCount && counter===maxCount,\r\n [counter,maxCount])\r\n\r\n return (\r\n <div \r\n className={ `${styles.buttonsContainer} ${className}` }\r\n style={style}\r\n >\r\n <button \r\n className={styles.buttonMinus}\r\n onClick={()=>increaseBy(-1)}> - </button>\r\n\r\n <div className={styles.countLabel}>{counter}</div>\r\n <button \r\n className={`${styles.buttonAdd} ${isMaxReached() && styles.disabled }`}\r\n onClick={()=>increaseBy(+1)}> + </button>\r\n </div>\r\n )\r\n}","export default \"data:image/jpeg;base64,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\"","import { useContext } from 'react';\r\nimport { ProductContext } from \"./ProductCard\";\r\n\r\nimport styles from '../styles/styles.module.css'\r\nimport noImage from '../assets/no-image.jpg'\r\n\r\nexport interface Props {\r\n img?:string,\r\n className?: string;\r\n style?:React.CSSProperties;\r\n}\r\n\r\nexport const ProductImage = ({img='',className, style}:Props)=>{\r\n\r\n const { product } = useContext(ProductContext);\r\n\r\n let imgToShow: string;\r\n\r\n if(img){\r\n imgToShow = img;\r\n } else if( product.img){\r\n imgToShow = product.img\r\n } else {\r\n imgToShow = noImage;\r\n }\r\n\r\n return (\r\n <img \r\n className={`${styles.productImg} ${className}`} \r\n src={ imgToShow } \r\n alt=\"Product \"\r\n style={style}\r\n />\r\n )\r\n}\r\n","import React, { useContext } from 'react'\r\nimport { ProductContext } from './ProductCard'\r\n\r\nimport styles from '../styles/styles.module.css'\r\n\r\nexport interface Props {\r\n className?:string;\r\n title?:string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const ProductTitle = ({title,className, style}:Props)=>{\r\n\r\n const { product } = useContext(ProductContext)\r\n \r\n return (\r\n <span \r\n className={`${styles.productDescription} ${className}`}\r\n style={style}\r\n >\r\n {title?title:product.title}\r\n </span>\r\n )\r\n}\r\n","import { ProductCard as ProductCardHOC } from './ProductCard';\r\nimport { ProductCardHOCProps } from '../interfaces/interfaces';\r\n\r\nimport { ProductButtons } from './ProductButtons';\r\nimport { ProductImage } from './ProductImage';\r\nimport { ProductTitle } from './ProductTitle';\r\n\r\nexport { ProductButtons } from './ProductButtons';\r\nexport { ProductImage } from './ProductImage';\r\nexport { ProductTitle } from './ProductTitle';\r\n\r\n\r\nexport const ProductCard:ProductCardHOCProps = Object.assign(ProductCardHOC,{\r\n Title: ProductTitle,\r\n Image: ProductImage,\r\n Buttons: ProductButtons\r\n})\r\n\r\nexport default ProductCard;\r\n"],"names":["ProductCard","_jsx","_jsxs","ProductCardHOC"],"mappings":"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","x_google_ignoreList":[1]}
@@ -0,0 +1,5 @@
1
+ export interface Props {
2
+ className?: string;
3
+ style?: React.CSSProperties;
4
+ }
5
+ export declare const ProductButtons: ({ className, style }: Props) => import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { JSX } from 'react';
2
+ import { InitialValues, onChangeArgs, Product, ProductCardHandlers, ProductContextProps } from '../interfaces/interfaces';
3
+ export declare const ProductContext: import("react").Context<ProductContextProps>;
4
+ export interface Props {
5
+ product: Product;
6
+ children: (args: ProductCardHandlers) => JSX.Element;
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ onChange?: (args: onChangeArgs) => void;
10
+ value?: number;
11
+ initialValues?: InitialValues;
12
+ }
13
+ export declare const ProductCard: ({ children, product, className, style, onChange, value, initialValues }: Props) => JSX.Element;
@@ -0,0 +1,6 @@
1
+ export interface Props {
2
+ img?: string;
3
+ className?: string;
4
+ style?: React.CSSProperties;
5
+ }
6
+ export declare const ProductImage: ({ img, className, style }: Props) => import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export interface Props {
3
+ className?: string;
4
+ title?: string;
5
+ style?: React.CSSProperties;
6
+ }
7
+ export declare const ProductTitle: ({ title, className, style }: Props) => React.JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { ProductCardHOCProps } from '../interfaces/interfaces';
2
+ export { ProductButtons } from './ProductButtons';
3
+ export { ProductImage } from './ProductImage';
4
+ export { ProductTitle } from './ProductTitle';
5
+ export declare const ProductCard: ProductCardHOCProps;
6
+ export default ProductCard;
@@ -0,0 +1,15 @@
1
+ import { onChangeArgs, Product, InitialValues } from '../interfaces/interfaces';
2
+ interface useProductArgs {
3
+ product: Product;
4
+ onChange?: (args: onChangeArgs) => void;
5
+ value?: number;
6
+ initialValues?: InitialValues;
7
+ }
8
+ export declare const useProduct: ({ onChange, product, value, initialValues }: useProductArgs) => {
9
+ counter: number;
10
+ isMaxCountReached: boolean;
11
+ maxCount: number | undefined;
12
+ increaseBy: (value: number) => void;
13
+ reset: () => void;
14
+ };
15
+ export {};
@@ -0,0 +1 @@
1
+ export * from './components';
@@ -0,0 +1,40 @@
1
+ import { Props as ProductButtonsProps } from '../components/ProductButtons';
2
+ import { Props as ProductCardProps } from '../components/ProductCard';
3
+ import { Props as ProductImageProps } from '../components/ProductImage';
4
+ import { Props as ProductTitleProps } from '../components/ProductTitle';
5
+ export interface Product {
6
+ id: string;
7
+ img?: string;
8
+ title: string;
9
+ }
10
+ export interface ProductContextProps {
11
+ counter: number;
12
+ maxCount?: number;
13
+ product: Product;
14
+ increaseBy: (value: number) => void;
15
+ }
16
+ export interface ProductCardHOCProps {
17
+ ({ children, product }: ProductCardProps): React.JSX.Element;
18
+ Buttons: (Props: ProductButtonsProps) => React.JSX.Element;
19
+ Image: (Props: ProductImageProps) => React.JSX.Element;
20
+ Title: (Props: ProductTitleProps) => React.JSX.Element;
21
+ }
22
+ export interface onChangeArgs {
23
+ product: Product;
24
+ count: number;
25
+ }
26
+ export interface ProductInCart extends Product {
27
+ count: number;
28
+ }
29
+ export interface InitialValues {
30
+ count?: number;
31
+ maxCount?: number;
32
+ }
33
+ export interface ProductCardHandlers {
34
+ count: number;
35
+ isMaxCountReached: boolean;
36
+ maxCount?: number;
37
+ product: Product;
38
+ increaseBy: (value: number) => void;
39
+ reset: () => void;
40
+ }
package/package.json CHANGED
@@ -1,6 +1,43 @@
1
1
  {
2
2
  "name": "cl15-products-pack",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.0.2",
4
+ "description": "Mi librería de componentes React!!!",
5
+ "main": "dist/index.cjs.js",
6
+ "module": "dist/index.esm.js",
7
+ "types": "dist/types/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "test": "vitest run",
13
+ "test:watch": "vitest watch",
14
+ "build": "npm run test && rollup -c rollup.config.mjs"
15
+ },
16
+ "peerDependencies": {
17
+ "react": ">=17.0.0",
18
+ "react-dom": ">=17.0.0"
19
+ },
20
+ "keywords": [
21
+ "cl15"
22
+ ],
23
+ "author": "cl15",
24
+ "license": "MIT",
25
+ "type": "commonjs",
26
+ "devDependencies": {
27
+ "@rollup/plugin-commonjs": "^29.0.3",
28
+ "@rollup/plugin-node-resolve": "^16.0.3",
29
+ "@rollup/plugin-typescript": "^12.3.1",
30
+ "@rollup/plugin-url": "^8.0.2",
31
+ "@types/react": "^19.3.0",
32
+ "@types/react-dom": "^19.3.0",
33
+ "jsdom": "^29.1.1",
34
+ "react": "^19.3.1",
35
+ "react-dom": "^19.3.1",
36
+ "rollup": "^4.67.5",
37
+ "rollup-plugin-peer-deps-external": "^2.2.4",
38
+ "rollup-plugin-postcss": "^4.0.2",
39
+ "tslib": "^2.9.1",
40
+ "typescript": "^5.9.3",
41
+ "vitest": "^5.1.0"
42
+ }
43
+ }