{"_id":"@caominhhung1991/components","_rev":"18-ce16540afacf0d74ecb59bcdfd93d69f","name":"@caominhhung1991/components","dist-tags":{"latest":"0.1.19"},"versions":{"0.1.12":{"name":"@caominhhung1991/components","version":"0.1.12","author":{"name":"Cao Minh Hưng"},"license":"MIT","_id":"@caominhhung1991/components@0.1.12","maintainers":[{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"}],"dist":{"shasum":"9d1917bd066b30926c8228173c291630013f7a3f","tarball":"https://registry.npmjs.org/@caominhhung1991/components/-/components-0.1.12.tgz","fileCount":392,"integrity":"sha512-m1Nrdv6jCJQHKgkZtFXGO/d/m1ND3jNSLP3LVRsEY8RTNH2+LDvMS+4fIlNaNCMIpPtj+MuHUGVBfRFcRc5+gQ==","signatures":[{"sig":"MEUCIAjWH9F84qd4IQVHWhwMKPIkJ3iU7JpkMHQqPlp+0kpWAiEA+ku15MQcZhTIXR4T3czujOizLHs5mHTlbGXFojvjOQQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1710838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMpisACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqmNQ/+Nbo/SxL6WJP2OflNo3EwfEoWV4mieOJYNP+Cyk2ibIoLt0TD\r\nCGjBdmaTRQK66wye9e4DzjP/PfOrB1s+TVRKvoAqWqSUPOEAvnTlcbWbk0Nt\r\n/llLu3ldPb0GW3Jy5DQKAKVIgEaOQtui11OBXxhifInf4Iid/fm0XfMRNQp2\r\nGHedcQxUZjMEz+cJaZf7GZj0zVRjJ/mpKI49wdoG/3ONh3t54+KlCqzwybAh\r\nAI6QFOpxkncbeahZWRbHE+T5uqtERdF4AA4beHd9NRPRx9Slz08b22yCIlQg\r\nkk4NeNiNp6K8pWea+LpZNYEL5i1YjoXGmzEnD1WpG9XvHQ0kKobzdjcdCiOZ\r\nXF0vt2HxfymBFStcK+R8zKD5i9JyzHbRtY4e/ncgqN69kBE+jdTTtZnksKQz\r\ndn1PYflVL6GOqVfZUVZ2SufeJNU3IAuiVYJYqyUp6LMX0CleOJriH25XtT+P\r\nVOBQrXROX7Q7Sl52NjJi5YBM8VyjYJgytOUjvFcUFKgJQLtSExvV24jUHvJB\r\n5h3lJhbMZmtCWhNX4Fa3y2SHk4qFuJ4eqbnkLtVaRCCyjNdlVkdMcMHfQ36Q\r\nPMh0LyzCB8R3cXzs4XTkEsXyjRB04qZivo3yedc+kGcuf2q0KduVNmfQ3Ia3\r\n+kv3FL4DBpApoOJEq8BYruAP3/8fO0k/viQ=\r\n=alRa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/hung-components-tsdx.esm.js","engines":{"node":">=10"},"gitHead":"8ace708a40f6819b3d1f098d27f9190c243ff722","scripts":{"hung":"npm version patch && npm publish --access public","lint":"tsdx lint","size":"size-limit","test":"tsdx test --passWithNoTests","build":"tsdx build && rm -rf ../../lib/components && cp -R dist ../../lib/components","start":"tsdx watch","analyze":"size-limit --why","prepare":"tsdx build","storybook":"start-storybook -p 6006","build-storybook":"build-storybook"},"typings":"dist/index.d.ts","_npmUser":{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/hung-components-tsdx.cjs.production.min.js","limit":"10 KB"},{"path":"dist/hung-components-tsdx.esm.js","limit":"10 KB"}],"_npmVersion":"9.6.1","description":"node: v16.14.0","directories":{},"_nodeVersion":"16.14.0","dependencies":{"antd":"^4.16.13","uuid":"^9.0.0","xlsx":"^0.17.2","lodash":"^4.17.21","moment":"^2.29.1","history":"^5.0.1","firebase":"^9.1.1","lodash-es":"^4.17.21","react-intl":"^5.20.12","@types/uuid":"^9.0.0","react-redux":"^8.0.1","compressorjs":"^1.1.1","@emotion/react":"^11.4.1","@reduxjs/toolkit":"^1.8.1","react-router-dom":"6.0.0-beta.0","@ant-design/icons":"^4.7.0","react-highlight-words":"^0.17.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^7.0.2","react":"^17.0.2","tslib":"^2.3.1","react-is":"^17.0.2","react-dom":"^17.0.2","size-limit":"^5.0.5","typescript":"^4.4.3","@babel/core":"^7.15.5","@types/react":"^17.0.27","babel-loader":"^8.2.2","@types/lodash":"^4.14.175","@storybook/react":"^6.3.9","@types/react-dom":"^17.0.9","@storybook/addons":"^6.3.9","@storybook/addon-info":"^5.3.21","@storybook/addon-links":"^6.3.9","@storybook/addon-essentials":"^6.3.9","@size-limit/preset-small-lib":"^5.0.5","@types/react-highlight-words":"^0.16.3"},"peerDependencies":{"react":">=16"},"_npmOperationalInternal":{"tmp":"tmp/components_0.1.12_1681037484093_0.8791866723803017","host":"s3://npm-registry-packages"}},"0.1.14":{"name":"@caominhhung1991/components","version":"0.1.14","author":{"name":"Cao Minh Hưng"},"license":"MIT","_id":"@caominhhung1991/components@0.1.14","maintainers":[{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"}],"dist":{"shasum":"acf94f2ea8c2fbf01e0951aba618df1c4cacd752","tarball":"https://registry.npmjs.org/@caominhhung1991/components/-/components-0.1.14.tgz","fileCount":388,"integrity":"sha512-LZ1A8R5M30956h3wGKWkq6lTANkcyJjdYdvlZR/yXyUIGBCeE7Jk9/rfwf2tag2BoRlTMGp/HgPIVhGan8m55Q==","signatures":[{"sig":"MEUCIHcF31AbXlsvKzJjNwcI3nlkhrdp7DczlBvN75gzyHBGAiEA/Ds+eU2if56fxKQ8CqYXJxp4NVLxU0gNCeCzPDZqzRg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1566291},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/hung-components-tsdx.esm.js","engines":{"node":">=10"},"gitHead":"d26021602d56ee5e0a660fa61ac69cd256b92e62","scripts":{"hung":"npm version patch && npm publish --access public","lint":"tsdx lint","size":"size-limit","test":"tsdx test --passWithNoTests","build":"tsdx build && rm -rf ../../lib/components && cp -R dist ../../lib/components","start":"tsdx watch","analyze":"size-limit --why","prepare":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/hung-components-tsdx.cjs.production.min.js","limit":"10 KB"},{"path":"dist/hung-components-tsdx.esm.js","limit":"10 KB"}],"_npmVersion":"9.6.1","description":"node: v16.14.0","directories":{},"_nodeVersion":"16.14.0","dependencies":{"antd":"4.x","uuid":"^9.0.0","xlsx":"^0.17.2","lodash":"^4.17.21","moment":"^2.29.1","history":"^5.0.1","firebase":"^9.1.1","lodash-es":"^4.17.21","react-intl":"^5.20.12","typescript":"4.9.3","@types/uuid":"^9.0.0","react-redux":"^8.0.1","compressorjs":"^1.1.1","@emotion/react":"^11.4.1","@reduxjs/toolkit":"^1.8.1","react-router-dom":"6.0.2","@ant-design/icons":"^4.7.0","react-highlight-words":"^0.17.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^7.0.2","react":"^17.0.0","tslib":"^2.3.1","react-is":"^17.0.2","react-dom":"^17.0.0","size-limit":"^5.0.5","@babel/core":"^7.15.5","@types/react":"^18.0.0","babel-loader":"^8.2.2","@types/lodash":"^4.14.175","@types/react-dom":"^18.0.0","@types/react-color":"^3.0.1","@types/react-sticky":"^6.0.4","@types/react-window":"^1.8.2","@types/react-resizable":"^3.0.0","@size-limit/preset-small-lib":"^5.0.5","@types/react-highlight-words":"^0.16.4","@types/react-copy-to-clipboard":"^5.0.0"},"peerDependencies":{"react":">=16.9.0","react-dom":">=16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/components_0.1.14_1694781985662_0.9325001661047543","host":"s3://npm-registry-packages"}},"0.1.15":{"name":"@caominhhung1991/components","version":"0.1.15","author":{"name":"Cao Minh Hưng"},"license":"MIT","_id":"@caominhhung1991/components@0.1.15","maintainers":[{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"}],"dist":{"shasum":"00764cd85ed5acffecedf27ae46d8ecff256b15d","tarball":"https://registry.npmjs.org/@caominhhung1991/components/-/components-0.1.15.tgz","fileCount":388,"integrity":"sha512-JKKyY9jRGJUjHrpnDcig26O6+DgH8kuw/WzeficnSA86dm5DY3zID6E9eQFWaa5DeNXdL2sGHNs54iY2JJYjbg==","signatures":[{"sig":"MEQCIEzCLmpvj7NBtj3w9JAmtOr+ZT7ik+BBV6rR9R6gsv6pAiAJ/Ld/bz8iDoGscV+7J0epBLvKTJPOhGMezFSLFHqu7Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1566291},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/hung-components-tsdx.esm.js","engines":{"node":">=10"},"gitHead":"98c05df56c99302e1d14776155568e1b8c0824db","scripts":{"hung":"npm version patch && npm publish --access public","lint":"tsdx lint","size":"size-limit","test":"tsdx test --passWithNoTests","build":"tsdx build && rm -rf ../../lib/components && cp -R dist ../../lib/components","start":"tsdx watch","analyze":"size-limit --why","prepare":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/hung-components-tsdx.cjs.production.min.js","limit":"10 KB"},{"path":"dist/hung-components-tsdx.esm.js","limit":"10 KB"}],"_npmVersion":"9.6.1","description":"node: v16.14.0","directories":{},"_nodeVersion":"16.14.0","dependencies":{"antd":"4.x","uuid":"^9.0.0","xlsx":"^0.17.2","lodash":"^4.17.21","moment":"^2.29.1","history":"^5.0.1","firebase":"^9.1.1","lodash-es":"^4.17.21","react-intl":"^5.20.12","typescript":"4.9.3","@types/uuid":"^9.0.0","react-redux":"^8.0.1","compressorjs":"^1.1.1","@emotion/react":"^11.4.1","@reduxjs/toolkit":"^1.8.1","react-router-dom":"6.0.2","@ant-design/icons":"^4.7.0","react-highlight-words":"^0.17.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^7.0.2","react":"^17.0.0","tslib":"^2.3.1","react-is":"^17.0.2","react-dom":"^17.0.0","size-limit":"^5.0.5","@babel/core":"^7.15.5","@types/react":"^18.0.0","babel-loader":"^8.2.2","@types/lodash":"^4.14.175","@types/react-dom":"^18.0.0","@types/react-color":"^3.0.1","@types/react-sticky":"^6.0.4","@types/react-window":"^1.8.2","@types/react-resizable":"^3.0.0","@size-limit/preset-small-lib":"^5.0.5","@types/react-highlight-words":"^0.16.4","@types/react-copy-to-clipboard":"^5.0.0"},"peerDependencies":{"react":">=16.9.0","react-dom":">=16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/components_0.1.15_1694782707954_0.7823478136694557","host":"s3://npm-registry-packages"}},"0.1.17":{"name":"@caominhhung1991/components","version":"0.1.17","author":{"name":"Cao Minh Hưng"},"license":"MIT","_id":"@caominhhung1991/components@0.1.17","maintainers":[{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"}],"dist":{"shasum":"4734d58d4229ba6ea349b8ca3be0d32ec1db37f1","tarball":"https://registry.npmjs.org/@caominhhung1991/components/-/components-0.1.17.tgz","fileCount":354,"integrity":"sha512-Nj2qtYpZC5zliRsYyWUD2csjyvYEGV2smKtLHmxlDf6BSVeL5eSLiaMCSl9735xSKLHWdYvsg0fcaloJyO0s3g==","signatures":[{"sig":"MEUCIQDDQdoAS8Du2XVRagV60ng+d8j0oUMRxPtBY2ijPnlM3gIgH1H97SellbfuyyFT4ld6UMJY2IjF/cJWbLUPEb0cGZw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1294074},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/hung-components-tsdx.esm.js","engines":{"node":">=10"},"gitHead":"a4030e7c3dca03e7a898d5b0b5b13812b2813729","scripts":{"hung":"npm version patch && npm publish --access public","lint":"tsdx lint","size":"size-limit","test":"tsdx test --passWithNoTests","build":"tsdx build","start":"tsdx watch","analyze":"size-limit --why","prepare":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/hung-components-tsdx.cjs.production.min.js","limit":"10 KB"},{"path":"dist/hung-components-tsdx.esm.js","limit":"10 KB"}],"_npmVersion":"8.19.4","description":"node: v16.14.0 npm version patch && npm publish --access public","directories":{},"_nodeVersion":"16.20.2","dependencies":{"antd":"4.x","uuid":"^10.0.0","xlsx":"^0.17.2","lodash":"^4.17.21","moment":"^2.29.1","history":"^5.0.1","firebase":"^9.1.1","lodash-es":"^4.17.21","react-intl":"^5.20.12","typescript":"4.9.3","react-redux":"^8.0.1","compressorjs":"^1.1.1","@emotion/react":"^11.4.1","@reduxjs/toolkit":"^1.8.1","react-router-dom":"6.0.2","@ant-design/icons":"^4.7.0","react-highlight-words":"^0.17.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^7.0.2","react":"^17.0.0","tslib":"^2.3.1","react-is":"^17.0.2","react-dom":"^17.0.0","size-limit":"^5.0.5","@babel/core":"^7.15.5","@types/uuid":"^10.0.0","@types/react":"^18.0.0","babel-loader":"^8.2.2","@types/lodash":"^4.14.175","@types/react-dom":"^18.0.0","@types/react-color":"^3.0.1","@types/react-sticky":"^6.0.4","@types/react-window":"^1.8.2","@types/react-resizable":"^3.0.0","@size-limit/preset-small-lib":"^5.0.5","@types/react-highlight-words":"^0.16.4","@types/react-copy-to-clipboard":"^5.0.0"},"peerDependencies":{"react":">=16.9.0","react-dom":">=16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/components_0.1.17_1727974351836_0.3904468984377638","host":"s3://npm-registry-packages"}},"0.1.19":{"version":"0.1.19","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test --passWithNoTests","lint":"tsdx lint","lint:fix":"tsdx lint --fix","prepare":"tsdx build","size":"size-limit","analyze":"size-limit --why","hung":"npm version patch && npm publish --access public"},"peerDependencies":{"react":">=16.9.0","react-dom":">=16.9.0"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":true,"singleQuote":true,"trailingComma":"es5"},"name":"@caominhhung1991/components","author":{"name":"Cao Minh Hưng"},"module":"dist/hung-components-tsdx.esm.js","size-limit":[{"path":"dist/hung-components-tsdx.cjs.production.min.js","limit":"10 KB"},{"path":"dist/hung-components-tsdx.esm.js","limit":"10 KB"}],"devDependencies":{"@babel/core":"^7.15.5","@size-limit/preset-small-lib":"^5.0.5","@types/react":"^18.0.0","@types/react-color":"^3.0.1","@types/react-copy-to-clipboard":"^5.0.0","@types/react-dom":"^18.0.0","@types/react-highlight-words":"^0.16.4","@types/react-resizable":"^3.0.0","@types/react-sticky":"^6.0.4","@types/react-window":"^1.8.2","@types/uuid":"^10.0.0","babel-loader":"^8.2.2","husky":"^7.0.2","react":"^17.0.0","react-dom":"^17.0.0","react-is":"^17.0.2","size-limit":"^5.0.5","tsdx":"^0.14.1","tslib":"^2.3.1"},"dependencies":{"@ant-design/icons":"^4.7.0","@emotion/react":"^11.4.1","@reduxjs/toolkit":"^1.8.1","@types/lodash-es":"^4.17.12","antd":"4.x","compressorjs":"^1.1.1","firebase":"^9.1.1","history":"^5.0.1","lodash-es":"^4.17.21","moment":"^2.29.1","react-highlight-words":"^0.17.0","react-intl":"^5.20.12","react-redux":"^8.0.1","react-router-dom":"6.0.2","typescript":"4.9.3","uuid":"^10.0.0","xlsx":"^0.17.2"},"gitHead":"4e1cc295362c9b2ba51cd7f533d48829a1c41597","description":"🚀 **React Component Library** - Thư viện components và utilities cho phát triển React applications nhanh chóng và hiệu quả.","_id":"@caominhhung1991/components@0.1.19","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-LCgLQ3CZfLvzy4Y+RhEl54O4FJ22zaoIW1KRGtCAsSOQ2IcoOM6Dr25A2mI742Y5CY6hHhzthFD119XDszGFbQ==","shasum":"ab48c6234ad25cf0eba3d6947bdcdf8746723029","tarball":"https://registry.npmjs.org/@caominhhung1991/components/-/components-0.1.19.tgz","fileCount":366,"unpackedSize":1332271,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGX7H694YCAXDhQ/RJ8cwUmCmefKASuaLCOXoLappYvfAiEAzWrtnJBEjAmJxT9blFJ/qB6RB9AWXoDzoJecqJyZKC4="}]},"_npmUser":{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"},"directories":{},"maintainers":[{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/components_0.1.19_1749150642665_0.25154996383003025"},"_hasShrinkwrap":false}},"time":{"created":"2023-04-09T10:51:24.036Z","modified":"2025-06-05T19:10:43.039Z","0.1.0":"2021-10-05T08:00:58.178Z","0.1.1":"2021-10-05T08:08:04.381Z","0.1.2":"2021-10-16T01:43:54.415Z","0.1.4":"2021-10-29T09:34:40.834Z","0.1.5":"2021-10-30T05:50:16.413Z","0.1.7":"2021-11-16T06:14:47.840Z","0.1.8":"2021-11-30T16:44:48.318Z","0.1.9":"2022-06-18T05:57:00.231Z","0.1.10":"2023-01-21T15:07:20.373Z","0.1.11":"2023-02-20T10:57:04.023Z","0.1.12":"2023-04-09T10:51:24.436Z","0.1.14":"2023-09-15T12:46:25.911Z","0.1.15":"2023-09-15T12:58:28.309Z","0.1.17":"2024-10-03T16:52:32.115Z","0.1.19":"2025-06-05T19:10:42.864Z"},"author":{"name":"Cao Minh Hưng"},"license":"MIT","description":"🚀 **React Component Library** - Thư viện components và utilities cho phát triển React applications nhanh chóng và hiệu quả.","maintainers":[{"name":"caominhhung1991","email":"caominhhung1991@gmail.com"}],"readme":"# @caominhhung1991/components\n\n🚀 **React Component Library** - Thư viện components và utilities cho phát triển React applications nhanh chóng và hiệu quả.\n\n## 📦 Cài đặt\n\n```bash\nnpm install @caominhhung1991/components\n# hoặc\nyarn add @caominhhung1991/components\n```\n\n## 🏗️ Cấu trúc dự án\n\n```\n├── 📁 src/                    # Mã nguồn chính\n│   ├── 📁 components/         # React components\n│   ├── 📁 bussiness/          # Business logic modules\n│   ├── 📁 services/           # Service functions & utilities\n│   ├── 📁 interface/          # TypeScript interfaces & types\n│   ├── 📁 stores/             # Redux stores\n│   ├── 📁 utils/              # Utility functions & hooks\n│   ├── 📁 locales/            # Đa ngôn ngữ\n│   ├── 📁 providers/          # React context providers\n│   └── 📁 routes/             # Routing configuration\n├── 📁 example/                # Ví dụ sử dụng\n├── 📁 stories/                # Storybook stories\n├── 📁 test/                   # Test files\n├── 📁 dist/                   # Distribution build\n└── 📁 .github/                # GitHub workflows\n```\n\n## 🚀 Sử dụng nhanh\n\n### Import components\n\n```typescript\nimport { \n  Modal, \n  InputModal,\n  activeSwitch,\n  clickToActive \n} from '@caominhhung1991/components';\n```\n\n### Import services\n\n```typescript\nimport {\n  excelService,\n  stringUtils,\n  numberUtils,\n  timeUtils\n} from '@caominhhung1991/components';\n```\n\n### Import business logic\n\n```typescript\nimport {\n  PhieuBusiness,\n  MatHangBusiness\n} from '@caominhhung1991/components';\n```\n\n## 🎯 Tính năng chính\n\n### 🧩 Components\n- **Modal System** - Customizable modal components\n- **Input Controls** - Advanced input components với validation\n- **Print Components** - In ấn documents\n- **Interactive Elements** - Switches, buttons, quantity controls\n\n### 🔧 Services\n- **Excel Processing** - Đọc/ghi Excel files\n- **Data Handling** - Transform và validate data\n- **Form Utilities** - Form management helpers\n- **Time/Date Utils** - Comprehensive time handling\n- **Image Processing** - Image manipulation utilities\n\n### 🏢 Business Logic\n- **Document Management** (Phieu) - Quản lý phiếu chứng từ\n- **Product Management** (MatHang) - Quản lý mặt hàng\n- **Category System** (NhomMatHang) - Hệ thống phân loại\n- **Detail Processing** (PhieuChiTiet) - Xử lý chi tiết\n\n### 🗄️ State Management\n- **Redux Toolkit** - Modern Redux patterns\n- **Table State** - Advanced table management\n- **Form State** - Form state handling\n- **UI State** - User interface preferences\n\n## 🛠️ Development\n\n### Setup\n```bash\ngit clone <repository>\ncd components\nyarn install\n```\n\n### Development commands\n```bash\nyarn start          # Start development server\nyarn build          # Build for production\nyarn test           # Run tests\nyarn lint           # Lint code\nyarn storybook      # Start Storybook\n```\n\n### Publish\n```bash\nyarn hung           # Version bump & publish\n```\n\n## 📚 Documentation\n\nMỗi thư mục có README riêng với documentation chi tiết:\n\n- [`src/`](src/README.md) - Source code overview\n- [`src/components/`](src/components/README.md) - React components\n- [`src/services/`](src/services/README.md) - Service layer\n- [`src/bussiness/`](src/bussiness/README.md) - Business logic\n- [`src/interface/`](src/interface/README.md) - TypeScript types\n- [`src/stores/`](src/stores/README.md) - Redux stores\n- [`example/`](example/README.md) - Usage examples\n- [`stories/`](stories/README.md) - Storybook stories\n- [`test/`](test/README.md) - Testing guide\n\n## 🔨 Tech Stack\n\n- **React** 17+ với TypeScript\n- **Ant Design** - UI Framework\n- **Redux Toolkit** - State management\n- **TSDX** - Build tooling\n- **Jest** - Testing framework\n- **Storybook** - Component documentation\n\n## 📄 License\n\nMIT License - xem [LICENSE](LICENSE) file.\n\n## 👨‍💻 Tác giả\n\n**Cao Minh Hưng** - [@caominhhung1991](https://github.com/caominhhung1991)\n\n## 🤝 Đóng góp\n\nContributions, issues và feature requests đều được chào đón!\n\n## 📈 Version\n\nCurrent version: **0.1.17**\n\nXem [CHANGELOG](CHANGELOG.md) để biết thêm chi tiết về các phiên bản.\n","readmeFilename":"README.md"}