dg-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,28 @@
1
- # Temporary Holding Version
1
+ # Do Products pack
2
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.
3
+ Este es el paquete de productos de React
4
+
5
+ ## Example:
6
+
7
+ ```tsx
8
+ <ProductCard
9
+ key={products[0].id}
10
+ product={products[0]}
11
+ className='bg-dark'
12
+ initialValues={{
13
+ count: 4,
14
+ maxCount: 10,
15
+ }}
16
+ >
17
+ { ({ reset, increaseBy, count }) => (<>
18
+ <ProductImage className='custom-image' />
19
+ <ProductTitle className='text-white' />
20
+ <ProductButtons className='custom-buttons' />
21
+
22
+ <button onClick={reset}>Reset</button>
23
+ <button onClick={() => increaseBy(-2)}>-2</button>
24
+ <button onClick={() => increaseBy(2)}>+2</button>
25
+ <span>{count}</span>
26
+ </>) }
27
+ </ProductCard>
28
+ ```
@@ -0,0 +1,113 @@
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
+ const newValue = Math.max(counter + value, 0);
11
+ if ((initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount) && newValue > initialValues.maxCount)
12
+ return;
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
+ }, [initialValues, value]);
24
+ react.useEffect(() => {
25
+ isMounted.current = true;
26
+ }, []);
27
+ return {
28
+ counter,
29
+ increaseBy,
30
+ maxCount: (initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount) || 0,
31
+ isMaxCountReached: (initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount) ? counter === initialValues.maxCount : false,
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 = "\n\n.styles-module_productCard__oaIVo {\n background-color: white;\n border-radius: 15px;\n color: black;\n padding-bottom: 5px;\n width: 250px;\n margin-right: 5px;\n margin-top: 5px;\n}\n\n.styles-module_productImg__vPsTp {\n border-radius: 15px 15px 0px 0px;\n width: 100%;\n}\n\n.styles-module_productDescription__Ariub {\n margin: 10px;\n}\n\n.styles-module_buttonsContainer__ghCDF {\n margin: 10px;\n display: flex;\n flex-direction: row;\n}\n\n.styles-module_buttonMinus__BTgTf {\n cursor: pointer;\n background-color: #424242;;\n border: 1px solid black;\n border-radius: 5px 0px 0px 5px;\n font-size: 20px;\n width: 30px;\n}\n\n.styles-module_buttonMinus__BTgTf:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.styles-module_countLabel__S6HZ- {\n border-bottom: 1px solid black;\n border-top: 1px solid black;\n font-size: 16px;\n height: 25px;\n padding-top: 5px;\n text-align: center;\n width: 30px;\n}\n\n.styles-module_buttonAdd__s8wd6 {\n cursor: pointer;\n background-color: #424242;;\n border: 1px solid black;\n border-radius: 0px 5px 5px 0px;\n font-size: 20px;\n width: 30px;\n}\n\n.styles-module_buttonAdd__s8wd6:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.styles-module_disabled__k5aZm {\n border-color: #757575 !important;\n border-left: 1px solid #fff;\n color: #757575 !important;\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 = ({ product, children, className, style, onChange, value, initialValues }) => {
70
+ const { counter, increaseBy, maxCount, isMaxCountReached, reset } = useProduct({ onChange, product, value, initialValues });
71
+ return (jsxRuntime.jsx(Provider, { value: {
72
+ product,
73
+ counter,
74
+ increaseBy,
75
+ maxCount,
76
+ }, children: jsxRuntime.jsx("div", { className: `${styles.productCard} ${className}`, style: style, children: 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 }) => {
87
+ const { counter, increaseBy, maxCount } = react.useContext(ProductContext);
88
+ const isMaxCountReached = react.useCallback(() => {
89
+ return maxCount > 0 && counter >= maxCount;
90
+ }, [counter, maxCount]);
91
+ return jsxRuntime.jsxs("div", { className: `${styles.buttonsContainer} ${className}`, 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} ${isMaxCountReached() ? styles.disabled : ''}`, onClick: () => increaseBy(1), children: "+" })] });
92
+ };
93
+
94
+ var noImage = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wgALCAHQAdABAREA/8QAGwABAAIDAQEAAAAAAAAAAAAAAAEGAwQFBwL/2gAIAQEAAAABvUAAAAAAAAAEwAAAAAAAAATAAAAAAAAABMAAAAAAAAAEwAAAAAAAAATAAAAAAAAABMAAAAAAAAAEwAAAAAAAAATAAAAAAAAABMAAAAAAAAAEwAAAAAAAAATAAAAAAAAABMAAAADXr2ndQAAAEwAAAA1a7ze/yrF0gAAAJgAAAGnXNGw9uebXrmAAABMAAADRrmrYuxIotv2wAAATAAADnVzFY+sBxuZbAAAATAAAOXXFk6YBFCvWQAAAJgAAciuZrH0QAauzIAAATAAEcau7fb3AAAH3nAABMAB88Wvb9i2/Ot8AACdP0OAAAmABr0jqWLZRQ76AABPn3oMAABMACKFeMxFDvocfR3+uAE+fegwAAEwAFe+LIRQ76Krr9fj7VpAE+fegwAAEwAGOiX36RQ76YKVfEUS7ZgCfPvQYAACYABVtzuood9NKs3Mpdo3Bi53WJ8+9BgAAJgAGtTL4ih30ihW/f0KjfJMNK+ezZE+fegwAAEwABT+31Yod9GjUceW3bpgpVi7FPz2r68+9BgAAJgADQrF2ih31Enz9DWpdm66Krht9B9BgAAJgABR7Vu0O+86m2CxSGrS7T1QrfN1PQoAACYAAcjkW2h2irXDga9uzmnTbZ0gOFWfRIAACYAARXLH51s3TZcWtWzp6NOt/QAT596DAAATAAAjz2+ZxqU/ocy4bwBPn3oMAABMAACKHfQfNc7O4AJ8+9BgAAJgAARQ76AABPn3oMAABMAAB55IAADJfgAATAAASAAAQAABMAAAAAAAAAEwAAAAAAAAATAA4PV1uZ92Li6vW42Tr8Xf1sXa0m5xd7R+rJxfnt8LvVyxVvJu8/ubAAmABTc+184rPV+npaP1udfhOxpa8bPQjWzdKrYuhWr3TLTzNj4xWDKAJgAVfDu6+O21bq9Gp/fQzcp0I58dDNr583Sq04I6ehlxavW3Oj9gCYAGln+NT76OjvNGdjl9DWx9TnTv8rfn6zaM7ui3tHBly6PSzgCYAAAAAAAAAJgAAAAAAAAAmAAAAAAAAACYAAAAAAAAAJgAAAAAAAAAmAAAAAAAAACYAAAAAAAAAJgAAAAAAAAAmAAAAAAAAACYAAAAAAAAAJgAAAAAAAAAmAAAAAAAAACYAAAAAAAAAJgAAAAAAAAAmAAAAAAAAAD//xAAvEAACAgECBAUEAQQDAAAAAAADBAECAAUUEBESEyAxNEBQMDM1RBUhIzKQJEFw/9oACAEBAAEFAv8AWqUwwwbU7TizZKMfKlYECDale2UEZmwdMpXHwQE6Ju6t8kZoQMNqRL4JczEh00dMiIiMeD3ltPN2mPkDNhBhtQKTAqmPgdOEPPLwti7DKxu+D40zoQ4Z8xcCmY+B08QvoaiHrBphukvxZnwhwzpjYFExsCiEP0pjnBaWWZHfuD+INqAhYZwx8CgYuBSCH6pVhGt5fDeUG1EQ8K0ZiQ6cUmDootO5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5Bm5BlTCvPvpmIg2pDphTmYsHTSXwKwgcK1kl9gzmwZzYM5sGc2DObBnNgzmwZzYM5sGc2DObBnNgzmwZzYM5sGc2DObBnNgzmwZwfOp/envIgXKViwdMvbBLiBHCfJX1ftP2vezHOCVssyIkFFxnyV9X4S6iEc/wArOB1EJJ+p+177VA866WbwT5K+r8GoNzayyFzx/Fh5MoXBGntzFvp/te+vSCDrNlmazFq8J8lfV8TX7YVRd9niyPsMiv3BfS/a9/qYeV9MN1C4T5K+r4txzU06eTnHUZ5uKxyV8BCVFQOoCMTwfte/OLvBWLK7PCfJX1fGY5wSllWFmqMVxlqi9RDs0x5RxISoqMM3ZIVUoKpv+D9r4DUQ9s6Bu6vk+Svq/AytVmhVTAncG5CVMeVlqrU4lLQIznu0VNLs5asWq4lIMTe7fH9r4BwPeXRN2mcnyV9Xw5/148o8JjUAMxiNFTTgEcPPHEe3ibsgytotH7XwLoeyyobvLz5K+rxpuq9bEvciuo8/Gc9F6EIRoyicLx4XEMUbstas82PgdQD3F9NN0G/6V9W25C9aDI0YSghha0+w8Wduvgi0NTiwxRelrFaMopVevjcR7mD+98FXTbVZnypaaXCEjRQgoAfBpCpcrYqpVnaMcGWar0mStHVVqtX6P7Xwc+QqdwohUCPwHXGxVhYi1haleo/7rR1lqrU+l+18HPkr6vxTEWg2mT1rr0Xp9P8Aa+DnyV9X7T9r4SaXHfqLnUXOoudRc6i51FzqLnUXOoudRc6i51FzqLnUXOoudRc6i51FzqLnUXAjvc//AKWZ+wWzE7a6jEmB/IHLemoEqXHW7r3lxukKswzSH2b3jUSjudioAw44SFHdxZh0w2ZeaHgzwUCLV2cdautY54ACHHCQq738s63StHG78Kt3l9p267ETzhp6wT5bUbQ1M8o35y2E/fvOsWWpDbswC17h9q3SSagE/Ugl+O0n/DU/v5qn3iOr9nSYnpTNQDL7NGMfjpSU9It+UJ+Ye9Fp/oNJzVf89R9In6QagxG1L0iHosp+Z1GOpxJmIUt1WsW/bB2plKhO7p+mWigiykcuq/bFqVaCFfui9rP5rUAdoqP4/TC0pmoEoVjNU+9CC2VrWkJCoVnlCepap6dVgMKpz16kaYrqzrAbK6fE7HTC0HbUiUITUo/4ijAYVUaKdvUvSIeiyn5lz8k0sWrDw4FbUydINs5t0L81dPsLtnqKGtW+2Ay8Arat6+12o9wUVTDCCgKE08BLCSAG2HVGxbgFQYLnVGxkjrYc6YDmFcYIKiExI05eJiIrBEAEsJEArWrW9Z0wHMIBggwanoIdRDyFRwwRUZDYZUZ7GVGe+CUGEpNPBeQpBDY69GI/jF8EKoR/7cP/xAA5EAABAgIFCQcEAQQDAAAAAAABAAIDERIhMVGhECAiM0FhcXKREzAyUIKxwUBCUoFiBCOQ0UNwkv/aAAgBAQAGPwL/ABqziOAUoIo7ygXvJabZnzbTd+lKEKAv2rRBdvKnFNI3CxTaJNdYhPxNqPmem6u4KUPQGK0QT/IqcQ0zdsUgJDIZeJtYUj4X1eY6TpuuCk3QbuU2tq/Iqb9M4ZxAstCa/bt8ulOk64KQ0G3BTAk28qbtN2/uKYtZ7IwjY6zj5ZKdN1wUp0W3BTlRbeVOVN157qRsRAtaak194n5TJum7cpF0h+IUzoN3qYFJ1570GIyZHk9akzTOCk51X4hTfoN32qVJtO9xrWtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1WtZ1UmxGk8fr5kyClCFM37FJxJ/iFOJoDFaDa7zkDRW4lavFavFavFavFavFavFavFavFavFavFavFavFavFavFavFavFavFavFavFavFMvDvrnvAmQFpEuOwKcU0RdtWg2W/Mhcw+l9fz9dI2IgWtNSa8bc2FzDOk3TO5aodVJ2gd/e+v5+vbGGyop0E8RmwuYZpgsOiPFvVJxos914nqkDSZ7IQXmo+Hd3nr+fr3MNhW9hQcLDmQuYZj33BNabLTmOaNlYTH3ju/X8+QNijbUUYZtb7ZkLmGZF5UN4OYdwkoXLml7zIBUJFp2TzfX8+QOZfYg48HZkLmGZIqW1pmCrn7W5L37GqV5mTml7zILd9rU1zxUcEIcY8HZnr+fIaYsf7qR8TKssLmGbI1OFhVbTzBS7V/VVNMvyKkK3G05lN5qVfpaqcSuJ7IhwmCqbK4fshDinQ2G7L6/nyFw+4VhCfhdUcsLmGWWZYM2k/peq/00Km+uJ7ZhiQho7RcqD64fsg5pmCvX8+RGXhdWE122w5IXMMl7zYF2hcaV6oR//WfSd+herybAqTq4ntnGJBHFqlazaED/AD+fIqQtZWuzNj/fJC5gqIriXXK9xtJXZ0aU7Z7VThaTLrlI6TLlSYZjMm63YL1+TjYFO15tPcdpC8e0XpnMPIw6kOzBnvyBwtFaq/biqLOt+WnD0X4FbWuGxSOi+7JM1uNgX5PKvebT3Xr+fJWMnKkZKgwVZsnivYVXZscEQ8UjsK/J5VVbjae79fz5LC5hnyImFOC4UbjsUm27Tf3nr+fJYXMPpfX8+SyLXAheKJirYmKtiYq2JirYmKtiYq2JirYmKtiYq2JirYmKtiYq2JirYmKtiYq2JirYmKtiYq2JirYmKZJp8X/ZhhkCgE6I2uQmEYj5CR2Ij+nhTxQZ/UQ6ORoYBWNqpOgVcFMCRFoRayG10rgpR4Ml2ls7N6pMg6PBFjm0XowobWm5TiQKuEl2rbk+mBVKxMDAK712hH6VJkEUeCc0tlEAnxU3wQ0bwgRBBadssnYSFGaDJCjaVMWLs2AGVs8lCTezpSRJsCIgQpjqhDjw6M00tArO1TECrgmmI2i7aPpnMFp/0osF1rW1cFF/aifpQuGSHwTgIgJlYFEOypPc8yCY2HMy3KCDaP8AShcqf6k3mCicE/ifZReAULgUziFC4IxWzpFeoKHkPMUALSAnUv8AiXaO+4zTn3BGL/NUv4KK5xkBJNc6LpWCtQ+Kazs3VCSa+ykJ/TDj8LtG+F6i/tPa9wbO9MoGlK7JD4LwYqi0AC4KIHtDhJCrQKbzJk4jQQK5lOcLKygSZCYT2tiNcTcnbyU8PcGzAtTAxwdK5M4hMBiNEhXMpzSZw69i9QUPIeYqF6U8QmuLX3KAwbGprPyKoaPZ2yUeFcJhRYcVwFK9NbArFW2dah8yhgxIc6I2qbSCN303b10+KLH2FUGTlbWpyLTuKpAEnfkBfOq45S9k5m8oU51XKg4TbvX3j9r+21F7qUzcVY48SgAJAKlIg7lSAJO9FrhMFff1UobZKg+ctyDG2DJ2+lT4oRXTpDfkDnzmLimufSq35DEZSmd6nIt4FUmibrygHzquX39VQZOW/wDy4//EACwQAQACAQIEBQQDAQEBAAAAAAEAETEhQVFhcfAQIIGR8UBQobEwweHRkHD/2gAIAQEAAT8h/wDNXosu76S9qvWiLdo2ev3a4GPqX0l/zg1/xHKu5xe8qPT1GmA7BtxJqV2x9zC/bmXYc/MWG0zg95We2UAhBgDw0CuFStuOu33HTPUNl/8AtnvEbFs6JKz1f+kAAAAbHlxmc+Uyuv7dcr1nL1PcfeZg3LP9lUHOw9v4NLt7+0sxu9D7ZcDsOZe6tOo1LvqVi7Dj+IGC0UkRKrT/AFKGKq+0LouXy8rD3mYTySVo8zP2lT6k/wCUIm8uoAACgwfZlEUAbsvPR/7S4C2MMq+yNpXlbNj/AB9KUhCEIQhCEIQhCEIQnJOR9eVCDKy89go1UXGD2lWnLzA2j6pjhgQ6Ec2dwTuCdwTuCdwTuCdwTuCdwTuCdwTuCdwTuCdwTuCdwTuCdwTuCcABPzHL9bqhCCHxVhx6Eq+Umv8AiVA16l9fHJ0+lsZIYScv1oMFopI4VW3+pgDN+TJ089nVxej3mvtSCub0e/8AIZIYScv11CNfY7TIO/XyZOnmtQy0EbuEA3LDWsYWrxsjGtZa16pYy0k7uH8ZkhhJy/XYkWmDl2rzio2Fnjk6eW3M7Zken0YAFBR4IIiWO0wnF6O05Sb/ABGSGEnL9fVLT3ss1wfFk6eWzGMwZHbHkEpsKMZzTy8SAprAXq+QyQwk5fryfyPQ7TQEBo5bw5eGTp5bA2oJTHoa5hGzA9J4AptE7GFW28pG8AAMGh5K+B+YSuwuh3mVVd03cGe0j/p8TJDCTl+waSb/APaVKbnpt4ZOnmt+uA5gsMapOE3CdCxZ0SftiPyOqA23WDENXQbf7CAQmDvmBk0CO8SbE9+uPYnDtYgiCNjwhkhhJy/YKNP2crir/G8MnTyWpkL4X5N78XldN03KA0Kum0gqhPbp8UAiWO0fU2faxFiz83TC0aoTeGEnL9hqoqFZjp92ZOnjaplfOWOFLXqxAolO3/cGyx0815ddjKg5R0R7ciaVEy/oeb3kP9ktK3ejzIB2EMOX7DpV/U3lmnChy6eFtCKGn7GNgvWbbrEVAyiLGzc3f9Rou/C6QYf8h18mdz68XtvRhtLEo3Q5H8B3Gsu3mCgc/wBkcv2FBKdRhY0i/pMnSZV+nWIRKuu0hIuu5eNrTuHZUX1uy3hBV+X08P24H/k3F+D/AJNm/ET+EyQwk5fseTpNnRtwhqgPdfLhMYcktGq/Y2lbfPngbr8E/wCSmfkv+IyQwk5fseTp/BZ2ZMjvFUBZWM7n1/4xkhhJy/Y8nT6WxkhhJy/Y3DHiD2GfOR89Hz0fPR89Hz0fPR89Hz0fPR89Hz0fPR89Hz0fPR89Hz0fPR89BAlotnOb/ZLeMt4st4st4st4st4st4st4st4st4st4st4st4st4st4st4st4st4st4st4st4s14//ErCOLd6j0RckYHtgPIRAUHEtNbKyhSengnyXNJXGHKsidjqg4stojpAVS8BGX2VpUisd5WzRGC9MMwFWlWukqTHOobju0dkmiDVHVHgaqxqhLQDdZeO5WxDa0AxG3oLWXfhg/Ba6aL3xCE9SzMAktFjMNUvxeDoVNTeoDjQtYlmHK0HZiqwqvSPKqDAIKixHLIjsY+m5LtFtNdq7YnY8p+THcc4YJ3fOXgJgDrBU8hcslAhpe8T1oddF3sR8iAY/BT8+O48J+C/Z4FZ9nM7hynfuE73nM1Eu3TXwz8B/fh2DhHw4iEb1HubRByN+U69csC7036f9nMNx6hCkWisHLSqEb9J+d/UTTJ2EghiNA/Tfi4TF5K2d4FIzf6wdkolquCJ0UurW4Ynd84am71cMjeIF2CQesxRdpyH/kLbsf1YY0iFCQdTvW5QSwXLtpBKmAO95hex56RFhUwxcpdBvKJixd7RnTUKEghQEaTfTwj8B/fh2DhPyv2muxPRpnHvMCVfrcoXOt0IaW2GU6xN4QOpKZAmiqyP/uq3E/KfqCSiwReIY27Vp9MqcJvggRXwszeYZLiS8Z0oYGcLuvDVnmjQ8dCz06k0vviqpiEqqE2KOBKYovKtrOM3tCX55GJltABtGyazerggLwu6hs84YmxQ4ErdQyuqzcoXqqWv7dvgtGo3wTD5arRp4aflo0Jq4jQGjwowWWOiJ75zpEDJDC3U0f6stU5nf0hrSW9V/wDrj//aAAgBAQAAABB//wD/AP8A/wD/AP8A3/8A/wD/AP8A/wD/APf/AP8A/wD/AP8A/wD9/wD/AP8A/wD/AP8A/wB//wD/AP8A/wD/AP8A3/8A/wD/AP8A/wD/APf/AP8A/wD/AP8A/wD9/wD/AP8A/wD/AP8A/wB//wD/AP8A/wD/AP8A3/8A/wD/AP8A/wD/APf/AP8A/wD/AP8A/wD9/wD/AP8A/wD/AP8A/wB//wD/APx//wD/AN//AP8A/t//AP8A9/8A/wD+t/8A/wD9/wD/APh+/wD/AP8Af/8A+D9//wD/AN//AP1/1/8A/wD3/wD3/wD7/wD/AP3/AP8AAAAD/wD/AH/4/wD/APx//wDf/HP/AP8AX/8A9/586P8A1/8A/f8Azzj/APX/AP8Af/XPZ/1//wDf/wDz/wD3X/8A9/8A7Nz+1/8A/f8A9zs7Vf8A/wB//cv/AHN//wDf/wDw/v4f/wD3/wD1j5/H/wD9/wD98u/1/wD/AH//AM/H/X//AN//APPz/wBf/wD3/wD9/wD/ANf/AP3/AP5//wD7/wD/AH//AMAAAf8A/wDf/wD/AP8A/wD/AP8A9/8A/wD/AP8A/wD/AP3/ALsF7qF7/wB/4vYk4cz/AN/1nEvY8T/3/k3xB71v/f8A/wD/AP8A/wD/AP8Af/8A/wD/AP8A/wD/AN//AP8A/wD/AP8A/wD3/wD/AP8A/wD/AP8A/f8A/wD/AP8A/wD/AP8Af/8A/wD/AP8A/wD/AN//AP8A/wD/AP8A/wD3/wD/AP8A/wD/AP8A/f8A/wD/AP8A/wD/AP8Af/8A/wD/AP8A/wD/AN//AP8A/wD/AP8A/wD3/wD/AP8A/wD/AP8A/f8A/wD/AP8A/wD/AP8Af/8A/wD/AP8A/wD/AN//AP8A/wD/AP8A/wD/AP/EACoQAQABAgMGBwEBAQAAAAAAAAERACExQVFAYXGBofAQMFCRsdHxIMHh/9oACAEBAAE/EH1p9afWn1p9afWn1p9afWn1p9advuEw+21u27mEd+BiavYtoxfAwOtGyi6EOhwjG1G732p2vTCZ9l9qhzW2McMqOUK+s4qp0AvIhxcXpQMcLEDLB0edY8OJsF3M+NqdpZAWSXnllzqDZbQZDjgcvek51Xscyx61ayrwIeWLzo2kRDByPCEaJbsYnM+KKDBvNjM97c9qdnESBh1jI51Osa0KWb8nKoeDXDxJbvKpnRwwYDuzc6MsEAQHA/lSq2UyFmOTJyoFUnCMjZ++e0uy24/NEO9wKiHfMZG/F7RSgtEt84Z0t6F4bXd9poAAAAwAsf3HSFlGa/xZ96tlHcy+w+NpdimrQzniDvwHWpwwKWJN7i1rJ0KSbsTVsFvHIO7AeUVxJGY2SlEA60mV7f7RKgjHKSY2h2BCJACVWAqaQLS2u/6TSKh0Eqcc2r5veK43YveKtIuXI4GB5oZSgkkaMNzjRlgABABgG0PnX4hKQBxqEcNpUB+XKporQBOGC7zmrRkvZKN2TnTnAUUH44CvyFfka/I1+Rr8jX5GvyNfka/I1+Rr8jX5GvyNfka/I1+Rr8jX5GvyNfkaNouB1eVGxPmXukLgDe1MJhSsf68qESxaxyDHrUK63slOGBzok2m9x55cqmMN4WateCFujq13furv/fXf++u/99d/767/AN9d/wC+u/8AfXf++u/99d/767/313/vrv8A313/AL67/wB9d/767/313/vonO970RruUYjEa6h2J8uVfbc3D/tP7mA4sgKvB97aG/Lqq0FIX7pX8erfFdk1o2Pqiuk16p2J8srySMxslOgE1pMr2qDYPDRzOTJ/HVviuya0fwoCqAXVyogWoZgebHlNHS2c/FSEVBMW8GHOKEQRkcEfL6orpNeqdifM3MbZrFyZOdSmHY/R8Pv/AB1b4rsmtH8LVXJRqS0OrWfElItQ03tdlduisjFiHAabykSOkr7xo9Hy+qK6TXqnYnzDjl+6nPlRJI8dBZOCfNDYHczEt49W+K7JrR4uLibxi3WiYqFzEXff/aAAAgAsG7wBsBFEiOJU+UVNFf2YcqkzFvil/K6orpNeqdifNtrHMaSzzPisXbmeaf8AG3M8erfFdk1o8RPmRjgjTyBIt8SfD/Dyzz5EvzQlJIh33/3+QImlWe41d1TAghojdkwd1Z+PVFdJr1TsT5p9GIOTde9Aot74Y9mPKkIKESRMzw6t8V2TWjxO6WDUSGmiHb0T2b6UjBebjqalRlnUXJMTeddBTCHt6JVGHBAaB/B8/drIDNpsEEuInPeqgIouT8A1Z0dD2X/ffx6orpNeqdifOw2k24Awc7NX/Eu4uZ7W5eHVviuya0fwMW+hJdx1KkcuxvITDpW5BF6p0sY33G7TVrCUhehobv4w1UByQZta2AGSyNVrQ7AnEDu13qBK0PIKFta833Go3+9QKC5u7rr8KNsCRUibq6orpNeqdifOv54JjDLmSVqUIyVu5Me9YWrq3xXZNaPBEKaSQS8v4u4jWP1X+fxGFMC5ApIjY4TyDXVo6A+Iab2r4mWBCiRNKVQwzd3zX4UhqW0Xkz1G72qAii8grpNeqdifP0SB5C3Dgz0q7cfL58yHnXVviuya0VBgDGw+A+aWGZDBWUaVGZg5bw5cfegICiRGRP6VzFZ3AG7VpqzRdjofLROB9UHZLn/Uu9wPf/U9qCXS5mrQd2dIHIydEJXVOxPnzsh4xi5XtflVtIY3Bh7kntXXviuya0+xXGA7IM6blDKDrubqZYvHl67jSMKiYSXFP/HWr4Tu2++8uGFIhVkwTQZP8KWvYG5/hq0LBDIToaBrXJaR/wAG/PyIbcI2N40+VMQQEjkxrqnzT+Xz0QAIRzKG1E4tgyQ6TVy73xT/AIBVJAYWpcjY4BzXN0K30VuYXuPGKj7wwu/Vvwq5EILYaJmdlWondNt958MfC30TC3WrpvUGWdgDAbtBVowWH+B8+T1RXSa9U7E7D1b4rdQBm5xoxd4rzS5v82gQyHDdN1DxXxYFynVuq2l2aFdNfHGn0SMq2P8AAVbuC6X3DQ3eV1RXSa9U7E7D1b4rsmtGH9Hf+DyDeUbRt2ngQubmhZRRUuf4aHl9UV0mvVOxOw9W+K7ZrQOjUOjUOjUOjUOjUOjUOjUOjUOjUOjUOjUOjUOjUOjUOjUOjUOjUOjUOjQcJxK6TXqnYnYTJGKJUMxkiRMxNlWeeeeeeeeeeeeeeeeeeen7llAAKq8KWU6uxOxQYI51+hX6FfoV+hX6FfoV+hX6FfoV+hX6FfoV+hX6FfoV+hX6FfoV+hX6FKsU8XY31p86dlmp2Z8ppIQshiglxynpV4+Q3wI5UozaBAAZvVxAQrBqggUKKQEJuCqZOHg+3MwszFoaViKQIOM0MkS2YXBHSkYBcQDEt6xJSUGTiDZoAhAVEkkvkRdpLIzc15z/AJUSaQmwjDZuJpUTkSjUyyaFRbE9QlvS8gFccCo02bPCk3TMu6hE7wrgmEO+h7iNIgTHzUNyW4vvJQ6kQLBubjMWq9rREEuWNBhILIkw3njTQOYcDaSxmpSewNi3i+hR3AgZiSNGSwAFZXghyI96Lg5tJqDbGUoWZiosiNABNXa4EuDJbgTR4xJxtwVZcKhjLVYAm0Ub5SEI5l6hDNwWK1uHlvlNFaKgXNJRziKd+GM5lc4rpT9346F3shq1q+mPirVddZOVIFJBiUhFIORQZ+ac2nhqb8uFBG7FKQABi0X8B+iKaMQdi0QIsf7eGPXlXZdHgh2jWnfNdWuZS6qUbC0t2WCKxOzGuy66yruuugmkO1VQq6iyjjkve3tU3t2Obi6sUb6XROsQdYoAyReomL7qm2y+KgfimOBgYAb0vZDCGJBG81fJjfovjQEMETQVyC8g5PlvlNX9lfUZWeZSlnBL+9AkqEDO2n43FhARu51AftmErQc2ggHEKig65pcmQMPHlNWHAggKwCYsjEnrTOwlTJwdt66caUYkEplNBFlnEG6pvYNDMkNPvvXAI4tCYs65g5YEFQOct5UtzKK2A1BVInW9PpDNQFSCdbUG8tty8+ahJmZcOVHIjxAEL8cKx+7Guy66cK7rr8K0MkX7fJTuE1mjI64rzZqdlgg0JeqU0Y1Wa/BMzULlzuQonuVugOTmQdcKG1MZAcUFxtHgEbNgqGGNNSsgzZvPLfLduENWIwjTfSMYEygJgjk0yu7V5Lvg0pouZsi6wie1KVeb+ahY8NBbCRM3s0EAGXhcuiwIWbEa1IgSE2hyWGoMmLuyGrrvr2OCHCSakKY++BaUMAEEWIwijEG1Z0Cj7FBwDQKdW8qMtYhKXyM3s1CAo0gQORrmcUOUk0KHN3MNO7ycYk3w1ZSiXTdm7z8LqAMcVIbRpvq4t3bKUkkeGivAImb2anCChcJm5FYVHKYkIrLBFS8HImHgjWYnh/BkVEQVf0pGjX5Gl7whcSst7eW+tPrT60+tPrT60+tPrT60+tPrT60+tPrT61//2Q==";
95
+
96
+ const ProductImage = ({ className }) => {
97
+ const { product } = react.useContext(ProductContext);
98
+ const { img, title } = product;
99
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { children: "Imagen:" }), jsxRuntime.jsx("img", { className: `${styles.productImg} ${className}`, src: img ? img : noImage, alt: title })] }));
100
+ };
101
+
102
+ const ProductTitle = ({ className }) => {
103
+ const { product } = react.useContext(ProductContext);
104
+ const { title } = product;
105
+ return jsxRuntime.jsx("span", { className: `${styles.productDescription} ${className}`, children: title });
106
+ };
107
+
108
+ exports.ProductButtons = ProductButtons;
109
+ exports.ProductCard = ProductCard;
110
+ exports.ProductContext = ProductContext;
111
+ exports.ProductImage = ProductImage;
112
+ exports.ProductTitle = ProductTitle;
113
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/hooks/useProduct.tsx","../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"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { onChangeArgs, Product, InitialValues } from '../interfaces/interfaces';\n\ninterface useProductArgs {\n product: Product;\n onChange?: (args: onChangeArgs) => void;\n value?: number;\n initialValues?: InitialValues;\n}\n\nexport const useProduct = ({ onChange, product, value = 0, initialValues }: useProductArgs) => {\n const [ counter, setCounter ] = useState<number>(initialValues?.count || value)\n const isMounted = useRef(false);\n\n const increaseBy = (value: number) => {\n const newValue = Math.max( counter + value, 0 );\n if (initialValues?.maxCount && newValue > initialValues.maxCount ) return;\n setCounter(newValue)\n onChange && onChange({ count: newValue, product });\n }\n\n const reset = () => {\n setCounter(initialValues?.count || value);\n }\n\n useEffect(() => {\n if (!isMounted.current) return;\n setCounter(initialValues?.count || value);\n }, [initialValues, value]);\n\n useEffect(() => {\n isMounted.current = true;\n }, []);\n\n return {\n counter,\n increaseBy,\n maxCount: initialValues?.maxCount || 0,\n isMaxCountReached: initialValues?.maxCount ? counter === initialValues.maxCount : false,\n reset\n }\n}\n\nexport const useGetProducts = () => {\n const products: Product[] = [\n { id: '1', title: 'Coffee Mug', img: './coffee-mug.png' },\n { id: '2', title: 'Coffee Mug Meme', img: './coffee-mug2.png' },\n ]\n return {\n products\n };\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","import React, { createContext, ReactElement } from 'react';\nimport { useProduct } from '../hooks/useProduct'\nimport styles from '../styles/styles.module.css'\nimport { InitialValues, onChangeArgs, Product, ProductCardHandlers, ProductContextProps } from '../interfaces/interfaces';\n\nexport const ProductContext = createContext({} as ProductContextProps)\nconst { Provider } = ProductContext\n\nexport interface Props {\n product: Product;\n children?: (args: ProductCardHandlers) => React.JSX.Element;\n // children?: ReactElement[]\n className?: string\n style?: any;\n onChange?: (args: onChangeArgs) => void;\n value?: number;\n initialValues?: InitialValues\n}\n\nexport const ProductCard = ({ product, children, className, style, onChange, value, initialValues }: Props) => {\n\n const { counter, increaseBy, maxCount, isMaxCountReached, reset } = useProduct({ onChange, product, value, initialValues })\n\n return (\n <Provider value={{\n product,\n counter,\n increaseBy,\n maxCount,\n }}>\n <div className={`${styles.productCard} ${className}`} style={style} >\n {children && children({\n count: counter,\n isMaxCountReached,\n maxCount: initialValues?.maxCount,\n product,\n increaseBy,\n reset\n })}\n </div>\n </Provider>\n )\n}\n","import { useCallback, useContext } from \"react\";\nimport { ProductContext } from \"./ProductCard\";\nimport styles from '../styles/styles.module.css'\n\ninterface Props {\n className?: string;\n}\n\nexport const ProductButtons = ({ className }: Props) => {\n const { counter, increaseBy, maxCount } = useContext(ProductContext)\n\n const isMaxCountReached = useCallback(() => {\n return maxCount > 0 && counter >= maxCount;\n }, [counter, maxCount]);\n\n return <div className={`${styles.buttonsContainer} ${className}`}>\n <button className={styles.buttonMinus} onClick={() => increaseBy(-1)}>-</button>\n <div className={styles.countLabel}>{counter}</div>\n <button className={`${styles.buttonAdd} ${isMaxCountReached() ? styles.disabled : ''}`} onClick={() => increaseBy(1)}>+</button>\n </div>;\n}","export default \"data:image/jpeg;base64,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\"","import { useContext } from 'react';\nimport { ProductContext } from './ProductCard';\nimport styles from '../styles/styles.module.css'\nimport noImage from '../assets/no-image.jpg'\n\ninterface Props {\n className?: string\n}\n\nexport const ProductImage = ({ className }: Props) => {\n const { product } = useContext(ProductContext)\n const { img, title } = product\n return (\n <>\n <span>Imagen:</span>\n <img className={`${styles.productImg} ${className}`} src={img ? img : noImage} alt={title} />\n </>\n );\n}","import { useContext } from \"react\";\nimport { ProductContext } from \"./ProductCard\";\nimport styles from '../styles/styles.module.css'\n\ninterface Props {\n className?: string\n}\n\nexport const ProductTitle = ({ className }: Props) => {\n const { product } = useContext(ProductContext)\n const { title } = product\n return <span className={`${styles.productDescription} ${className}`}>{title}</span>;\n}"],"names":["useState","useRef","useEffect","createContext","_jsx","useContext","useCallback","_jsxs","_Fragment"],"mappings":"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","x_google_ignoreList":[1]}
@@ -0,0 +1,107 @@
1
+ import { jsx, jsxs, Fragment } 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
+ const newValue = Math.max(counter + value, 0);
9
+ if ((initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount) && newValue > initialValues.maxCount)
10
+ return;
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
+ }, [initialValues, value]);
22
+ useEffect(() => {
23
+ isMounted.current = true;
24
+ }, []);
25
+ return {
26
+ counter,
27
+ increaseBy,
28
+ maxCount: (initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount) || 0,
29
+ isMaxCountReached: (initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount) ? counter === initialValues.maxCount : false,
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 = "\n\n.styles-module_productCard__oaIVo {\n background-color: white;\n border-radius: 15px;\n color: black;\n padding-bottom: 5px;\n width: 250px;\n margin-right: 5px;\n margin-top: 5px;\n}\n\n.styles-module_productImg__vPsTp {\n border-radius: 15px 15px 0px 0px;\n width: 100%;\n}\n\n.styles-module_productDescription__Ariub {\n margin: 10px;\n}\n\n.styles-module_buttonsContainer__ghCDF {\n margin: 10px;\n display: flex;\n flex-direction: row;\n}\n\n.styles-module_buttonMinus__BTgTf {\n cursor: pointer;\n background-color: #424242;;\n border: 1px solid black;\n border-radius: 5px 0px 0px 5px;\n font-size: 20px;\n width: 30px;\n}\n\n.styles-module_buttonMinus__BTgTf:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.styles-module_countLabel__S6HZ- {\n border-bottom: 1px solid black;\n border-top: 1px solid black;\n font-size: 16px;\n height: 25px;\n padding-top: 5px;\n text-align: center;\n width: 30px;\n}\n\n.styles-module_buttonAdd__s8wd6 {\n cursor: pointer;\n background-color: #424242;;\n border: 1px solid black;\n border-radius: 0px 5px 5px 0px;\n font-size: 20px;\n width: 30px;\n}\n\n.styles-module_buttonAdd__s8wd6:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.styles-module_disabled__k5aZm {\n border-color: #757575 !important;\n border-left: 1px solid #fff;\n color: #757575 !important;\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 = ({ product, children, className, style, onChange, value, initialValues }) => {
68
+ const { counter, increaseBy, maxCount, isMaxCountReached, reset } = useProduct({ onChange, product, value, initialValues });
69
+ return (jsx(Provider, { value: {
70
+ product,
71
+ counter,
72
+ increaseBy,
73
+ maxCount,
74
+ }, children: jsx("div", { className: `${styles.productCard} ${className}`, style: style, children: 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 }) => {
85
+ const { counter, increaseBy, maxCount } = useContext(ProductContext);
86
+ const isMaxCountReached = useCallback(() => {
87
+ return maxCount > 0 && counter >= maxCount;
88
+ }, [counter, maxCount]);
89
+ return jsxs("div", { className: `${styles.buttonsContainer} ${className}`, children: [jsx("button", { className: styles.buttonMinus, onClick: () => increaseBy(-1), children: "-" }), jsx("div", { className: styles.countLabel, children: counter }), jsx("button", { className: `${styles.buttonAdd} ${isMaxCountReached() ? styles.disabled : ''}`, onClick: () => increaseBy(1), children: "+" })] });
90
+ };
91
+
92
+ var noImage = "data:image/jpeg;base64,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";
93
+
94
+ const ProductImage = ({ className }) => {
95
+ const { product } = useContext(ProductContext);
96
+ const { img, title } = product;
97
+ return (jsxs(Fragment, { children: [jsx("span", { children: "Imagen:" }), jsx("img", { className: `${styles.productImg} ${className}`, src: img ? img : noImage, alt: title })] }));
98
+ };
99
+
100
+ const ProductTitle = ({ className }) => {
101
+ const { product } = useContext(ProductContext);
102
+ const { title } = product;
103
+ return jsx("span", { className: `${styles.productDescription} ${className}`, children: title });
104
+ };
105
+
106
+ export { ProductButtons, ProductCard, ProductContext, ProductImage, ProductTitle };
107
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/hooks/useProduct.tsx","../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"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { onChangeArgs, Product, InitialValues } from '../interfaces/interfaces';\n\ninterface useProductArgs {\n product: Product;\n onChange?: (args: onChangeArgs) => void;\n value?: number;\n initialValues?: InitialValues;\n}\n\nexport const useProduct = ({ onChange, product, value = 0, initialValues }: useProductArgs) => {\n const [ counter, setCounter ] = useState<number>(initialValues?.count || value)\n const isMounted = useRef(false);\n\n const increaseBy = (value: number) => {\n const newValue = Math.max( counter + value, 0 );\n if (initialValues?.maxCount && newValue > initialValues.maxCount ) return;\n setCounter(newValue)\n onChange && onChange({ count: newValue, product });\n }\n\n const reset = () => {\n setCounter(initialValues?.count || value);\n }\n\n useEffect(() => {\n if (!isMounted.current) return;\n setCounter(initialValues?.count || value);\n }, [initialValues, value]);\n\n useEffect(() => {\n isMounted.current = true;\n }, []);\n\n return {\n counter,\n increaseBy,\n maxCount: initialValues?.maxCount || 0,\n isMaxCountReached: initialValues?.maxCount ? counter === initialValues.maxCount : false,\n reset\n }\n}\n\nexport const useGetProducts = () => {\n const products: Product[] = [\n { id: '1', title: 'Coffee Mug', img: './coffee-mug.png' },\n { id: '2', title: 'Coffee Mug Meme', img: './coffee-mug2.png' },\n ]\n return {\n products\n };\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","import React, { createContext, ReactElement } from 'react';\nimport { useProduct } from '../hooks/useProduct'\nimport styles from '../styles/styles.module.css'\nimport { InitialValues, onChangeArgs, Product, ProductCardHandlers, ProductContextProps } from '../interfaces/interfaces';\n\nexport const ProductContext = createContext({} as ProductContextProps)\nconst { Provider } = ProductContext\n\nexport interface Props {\n product: Product;\n children?: (args: ProductCardHandlers) => React.JSX.Element;\n // children?: ReactElement[]\n className?: string\n style?: any;\n onChange?: (args: onChangeArgs) => void;\n value?: number;\n initialValues?: InitialValues\n}\n\nexport const ProductCard = ({ product, children, className, style, onChange, value, initialValues }: Props) => {\n\n const { counter, increaseBy, maxCount, isMaxCountReached, reset } = useProduct({ onChange, product, value, initialValues })\n\n return (\n <Provider value={{\n product,\n counter,\n increaseBy,\n maxCount,\n }}>\n <div className={`${styles.productCard} ${className}`} style={style} >\n {children && children({\n count: counter,\n isMaxCountReached,\n maxCount: initialValues?.maxCount,\n product,\n increaseBy,\n reset\n })}\n </div>\n </Provider>\n )\n}\n","import { useCallback, useContext } from \"react\";\nimport { ProductContext } from \"./ProductCard\";\nimport styles from '../styles/styles.module.css'\n\ninterface Props {\n className?: string;\n}\n\nexport const ProductButtons = ({ className }: Props) => {\n const { counter, increaseBy, maxCount } = useContext(ProductContext)\n\n const isMaxCountReached = useCallback(() => {\n return maxCount > 0 && counter >= maxCount;\n }, [counter, maxCount]);\n\n return <div className={`${styles.buttonsContainer} ${className}`}>\n <button className={styles.buttonMinus} onClick={() => increaseBy(-1)}>-</button>\n <div className={styles.countLabel}>{counter}</div>\n <button className={`${styles.buttonAdd} ${isMaxCountReached() ? styles.disabled : ''}`} onClick={() => increaseBy(1)}>+</button>\n </div>;\n}","export default \"data:image/jpeg;base64,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\"","import { useContext } from 'react';\nimport { ProductContext } from './ProductCard';\nimport styles from '../styles/styles.module.css'\nimport noImage from '../assets/no-image.jpg'\n\ninterface Props {\n className?: string\n}\n\nexport const ProductImage = ({ className }: Props) => {\n const { product } = useContext(ProductContext)\n const { img, title } = product\n return (\n <>\n <span>Imagen:</span>\n <img className={`${styles.productImg} ${className}`} src={img ? img : noImage} alt={title} />\n </>\n );\n}","import { useContext } from \"react\";\nimport { ProductContext } from \"./ProductCard\";\nimport styles from '../styles/styles.module.css'\n\ninterface Props {\n className?: string\n}\n\nexport const ProductTitle = ({ className }: Props) => {\n const { product } = useContext(ProductContext)\n const { title } = product\n return <span className={`${styles.productDescription} ${className}`}>{title}</span>;\n}"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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","x_google_ignoreList":[1]}
@@ -0,0 +1,5 @@
1
+ interface Props {
2
+ className?: string;
3
+ }
4
+ export declare const ProductButtons: ({ className }: Props) => import("react").JSX.Element;
5
+ export {};
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { InitialValues, onChangeArgs, Product, ProductCardHandlers, ProductContextProps } from '../interfaces/interfaces';
3
+ export declare const ProductContext: React.Context<ProductContextProps>;
4
+ export interface Props {
5
+ product: Product;
6
+ children?: (args: ProductCardHandlers) => React.JSX.Element;
7
+ className?: string;
8
+ style?: any;
9
+ onChange?: (args: onChangeArgs) => void;
10
+ value?: number;
11
+ initialValues?: InitialValues;
12
+ }
13
+ export declare const ProductCard: ({ product, children, className, style, onChange, value, initialValues }: Props) => React.JSX.Element;
@@ -0,0 +1,5 @@
1
+ interface Props {
2
+ className?: string;
3
+ }
4
+ export declare const ProductImage: ({ className }: Props) => import("react").JSX.Element;
5
+ export {};
@@ -0,0 +1,5 @@
1
+ interface Props {
2
+ className?: string;
3
+ }
4
+ export declare const ProductTitle: ({ className }: Props) => import("react").JSX.Element;
5
+ export {};
@@ -0,0 +1,4 @@
1
+ export { ProductCard, ProductContext } from './ProductCard';
2
+ export { ProductButtons } from './ProductButtons';
3
+ export { ProductImage } from './ProductImage';
4
+ export { ProductTitle } from './ProductTitle';
@@ -0,0 +1,18 @@
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
+ increaseBy: (value: number) => void;
11
+ maxCount: number;
12
+ isMaxCountReached: boolean;
13
+ reset: () => void;
14
+ };
15
+ export declare const useGetProducts: () => {
16
+ products: Product[];
17
+ };
18
+ export {};
@@ -0,0 +1 @@
1
+ export * from './components';
@@ -0,0 +1,35 @@
1
+ import { ReactElement } from "react";
2
+ export interface Product {
3
+ id: string;
4
+ title: string;
5
+ img?: string;
6
+ }
7
+ export interface Props {
8
+ product: Product;
9
+ children?: ReactElement[];
10
+ }
11
+ export interface ProductContextProps {
12
+ product: Product;
13
+ counter: number;
14
+ increaseBy: (number: number) => void;
15
+ maxCount: number;
16
+ }
17
+ export interface onChangeArgs {
18
+ product: Product;
19
+ count: number;
20
+ }
21
+ export interface ProductInCart extends Product {
22
+ count: number;
23
+ }
24
+ export interface InitialValues {
25
+ count?: number;
26
+ maxCount?: number;
27
+ }
28
+ export interface ProductCardHandlers {
29
+ count: number;
30
+ isMaxCountReached: boolean;
31
+ maxCount?: number;
32
+ product: Product;
33
+ increaseBy: (number: number) => void;
34
+ reset: () => void;
35
+ }
package/package.json CHANGED
@@ -1,6 +1,40 @@
1
1
  {
2
2
  "name": "dg-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
+ "author": "",
22
+ "license": "ISC",
23
+ "devDependencies": {
24
+ "@rollup/plugin-commonjs": "^29.0.3",
25
+ "@rollup/plugin-node-resolve": "^16.0.3",
26
+ "@rollup/plugin-typescript": "^12.3.1",
27
+ "@rollup/plugin-url": "^8.0.2",
28
+ "@types/react": "^19.3.0",
29
+ "@types/react-dom": "^19.3.0",
30
+ "jsdom": "^31.0.0",
31
+ "react": "^19.3.1",
32
+ "react-dom": "^19.3.1",
33
+ "rollup": "^4.67.5",
34
+ "rollup-plugin-peer-deps-external": "^2.2.4",
35
+ "rollup-plugin-postcss": "^4.0.2",
36
+ "tslib": "^2.9.1",
37
+ "typescript": "~5.9.3",
38
+ "vitest": "^5.1.0"
39
+ }
40
+ }