{"_id":"@abpjs/saas","_rev":"11-5f1f132ba002e539eb1faef1b3293285","name":"@abpjs/saas","dist-tags":{"latest":"4.0.0"},"versions":{"0.7.2":{"name":"@abpjs/saas","version":"0.7.2","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@0.7.2","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"104e807c065f1ead2d611b46fcfa3a3df78b298d","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-0.7.2.tgz","fileCount":7,"integrity":"sha512-B0t7+VHNY5SaCeu7J8lgPl+D2fYi8cmYRylXdPIROvpXJNuM1x7G3Q9/ERPlECZp8fwWc/WDYWH7atUEGCqAjw==","signatures":[{"sig":"MEUCIBvApmYaHhyMhbRhvwwTrXvYSQxZQi7r0spTDJDOmJMLAiEAnDSmQ0dr83OOUhjVNjdxmAcawW4uEaGPyYAe3BHC3T4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132548},"main":"dist/index.js","_from":"file:abpjs-saas-0.7.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\8662af9eb7572d0baab8c7dc76dafcae\\abpjs-saas-0.7.2.tgz","_integrity":"sha512-B0t7+VHNY5SaCeu7J8lgPl+D2fYi8cmYRylXdPIROvpXJNuM1x7G3Q9/ERPlECZp8fwWc/WDYWH7atUEGCqAjw==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"1.1.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"1.1.0","@abpjs/feature-management":"1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"0.7.2","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_0.7.2_1769863455370_0.6499828592421721","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@abpjs/saas","version":"2.0.0","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@2.0.0","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"69522d05be398e9005b56044eaa5876345a1a341","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-2.0.0.tgz","fileCount":7,"integrity":"sha512-Jk4rqQXm9UE8andrMFUUmkL7v2sGs7FsTzDuymkN9ZZpnMn8VF/ELjlxw8H/Hp4ljJP/Klesx+D0lfi3SRssCA==","signatures":[{"sig":"MEYCIQCT2aIiMgbnn7MA91bUp2eyzc5n0JgcnMk6aItggRldawIhAP7FaNk5Am8YnpxXNGC4qq1WbUTO0CO+A/CQBs9tEt5N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152470},"main":"dist/index.js","_from":"file:abpjs-saas-2.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\82bdbc2d07795a0d23cb575e7fe192f5\\abpjs-saas-2.0.0.tgz","_integrity":"sha512-Jk4rqQXm9UE8andrMFUUmkL7v2sGs7FsTzDuymkN9ZZpnMn8VF/ELjlxw8H/Hp4ljJP/Klesx+D0lfi3SRssCA==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"2.0.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"2.0.0","@abpjs/feature-management":"2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"2.0.0","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_2.0.0_1769923531613_0.34642161163188323","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@abpjs/saas","version":"2.1.1","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@2.1.1","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"db619575654fa705e144437398bb40eeac9271d0","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-2.1.1.tgz","fileCount":7,"integrity":"sha512-ODVfv/2wCxf7C0r1peIZts97MFJQ+ORE5T+Dr2nhmbvxcq1E7kBJWJZvLWMCz3JkB5vVhMUctFbfzZvnD1DgqQ==","signatures":[{"sig":"MEUCIEuXyu2KPZOc9St4zxudi0CXnnNo+kgftYwJn3igJtlPAiEAxB6T+7XywcQrPU01xs6AsBN/VFgUhkVCH71osVI/YHQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152470},"main":"dist/index.js","_from":"file:abpjs-saas-2.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\52568757d763fde9e1b0495fa859458c\\abpjs-saas-2.1.1.tgz","_integrity":"sha512-ODVfv/2wCxf7C0r1peIZts97MFJQ+ORE5T+Dr2nhmbvxcq1E7kBJWJZvLWMCz3JkB5vVhMUctFbfzZvnD1DgqQ==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"2.1.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"2.1.0","@abpjs/feature-management":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"2.1.1","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_2.1.1_1769971366367_0.8278468650377837","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@abpjs/saas","version":"2.2.0","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@2.2.0","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"c8389a08747d88767834dede284df73c4d4b30ed","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-2.2.0.tgz","fileCount":7,"integrity":"sha512-9TYoTbjenqSYBZqHWUohl+Za9dpAkhOwxdpE2Ho4wIxMiyy68UDlsk2ri+r9qhjJULZ1YYIUtzf8aUGmpmi3dw==","signatures":[{"sig":"MEYCIQD5o0l3Jfk+e27oQb2o9hL20+QQiq/6ezhXTUoH1Sma9AIhAJklwThAy1BBcWiEcOscuVxfuH1zu1uPX5ciIfkFUHcJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156630},"main":"dist/index.js","_from":"file:abpjs-saas-2.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\12858b64ac808a481be725f7db13b208\\abpjs-saas-2.2.0.tgz","_integrity":"sha512-9TYoTbjenqSYBZqHWUohl+Za9dpAkhOwxdpE2Ho4wIxMiyy68UDlsk2ri+r9qhjJULZ1YYIUtzf8aUGmpmi3dw==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"2.2.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"2.2.0","@abpjs/feature-management":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"2.2.0","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_2.2.0_1769979253981_0.5984885513462268","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@abpjs/saas","version":"2.4.0","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@2.4.0","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"4d30ee8dca7f9692569046dfbab349fc205e9faf","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-2.4.0.tgz","fileCount":7,"integrity":"sha512-600ZAJu4/bAgDnJAuMZww0tAYpw2brtRDNV6nwYpLE9wHmT8qGzGTRap9wP1eTcSUAzdxbljKqt15/l+iuuv6w==","signatures":[{"sig":"MEUCIDi0Cd1vujd3dEVm9QyiiL284bPHesB8rbOxSH/UhxBXAiEA56iNR8oB9gU0eXAV/hboCcnT4CX6b0LBPe9HgMogfsE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161135},"main":"dist/index.js","_from":"file:abpjs-saas-2.4.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\bc9eed68bee640ec2da6a4a2a852bd48\\abpjs-saas-2.4.0.tgz","_integrity":"sha512-600ZAJu4/bAgDnJAuMZww0tAYpw2brtRDNV6nwYpLE9wHmT8qGzGTRap9wP1eTcSUAzdxbljKqt15/l+iuuv6w==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"2.4.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"2.4.0","@abpjs/feature-management":"2.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"2.4.0","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_2.4.0_1769988564112_0.8789201390695371","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@abpjs/saas","version":"2.7.0","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@2.7.0","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"6292ae8caa29a75aa18bfab2925118e334e3a1ea","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-2.7.0.tgz","fileCount":7,"integrity":"sha512-vjF1ZBlI/OEX391//RVnndKVc1xNIZ21/NqUIlhqMK0756X6g+Vdf399K2RpFqM3TgZZ5brkp3PRLJVEZDtrFg==","signatures":[{"sig":"MEQCIDwTDvum0wIvbpXCGbqNAIcVAUdl9i619QGoLQijaIfXAiBYEVeGQovkvnRoqcR1zqC6CnRX6bORkkba++Zcfeg0IQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162963},"main":"dist/index.js","_from":"file:abpjs-saas-2.7.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\b2a4e6e3628f83378392ff5d8a8a1c1f\\abpjs-saas-2.7.0.tgz","_integrity":"sha512-vjF1ZBlI/OEX391//RVnndKVc1xNIZ21/NqUIlhqMK0756X6g+Vdf399K2RpFqM3TgZZ5brkp3PRLJVEZDtrFg==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"2.7.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"2.7.0","@abpjs/feature-management":"2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"2.7.0","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_2.7.0_1770357362286_0.13601912527075588","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"@abpjs/saas","version":"2.9.0","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@2.9.0","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"45a8c062d1cfcf92b02df021c63666a905f41384","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-2.9.0.tgz","fileCount":7,"integrity":"sha512-3G1+ODa0WKeOOpb6UDB2YURe+nsV6V78EyifOuW/lkP+38VA0j5n2PaofqzkDXyfrsmx96T1fxHm0mvoQf+CBQ==","signatures":[{"sig":"MEQCIEJEvGX50gaaS2SOyPr5a9W8c5/lwt8y6MMNbj6vrqAoAiBLuIXRns0xOku6B1t2zOS2b1M67abiEGgh3WXC6L1mcw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162963},"main":"dist/index.js","_from":"file:abpjs-saas-2.9.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\b539eadd0a396b0e963af688f5896dbe\\abpjs-saas-2.9.0.tgz","_integrity":"sha512-3G1+ODa0WKeOOpb6UDB2YURe+nsV6V78EyifOuW/lkP+38VA0j5n2PaofqzkDXyfrsmx96T1fxHm0mvoQf+CBQ==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"2.9.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"2.9.0","@abpjs/feature-management":"2.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"2.9.0","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_2.9.0_1770371567080_0.9695026671237512","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@abpjs/saas","version":"3.0.0","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@3.0.0","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"2ab111a44ef03e04e0e1e4e07c86e31ecb9682a6","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-3.0.0.tgz","fileCount":7,"integrity":"sha512-KGpKDepTcx0kJifGYR6fvKGBs7noRWIilO/0P58loygdbwYElpqnnVoai6AH3q0ai5f3Mmu4RBdCYP1UDFJV8Q==","signatures":[{"sig":"MEUCIQD22i2VDu/dk+8XjjfhNVAv1biB62B0MbVXCpDBFdxNcAIgMXVivXEMM8d5zcBRoJL1hb2IFlBUpVXrKna3njj005E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208138},"main":"dist/index.js","_from":"file:abpjs-saas-3.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\93018d50938efabc1110a1f9039eb12a\\abpjs-saas-3.0.0.tgz","_integrity":"sha512-KGpKDepTcx0kJifGYR6fvKGBs7noRWIilO/0P58loygdbwYElpqnnVoai6AH3q0ai5f3Mmu4RBdCYP1UDFJV8Q==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"3.0.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"3.0.0","@abpjs/feature-management":"3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"3.0.0","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_3.0.0_1770414862120_0.8478791542830368","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@abpjs/saas","version":"3.1.0","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@3.1.0","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"a8d312f3e5c5f777d551f00ec72befe5ab5503ae","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-3.1.0.tgz","fileCount":7,"integrity":"sha512-iF0Yf3XFdZKFYCUKML3p526kr0NhUUW1EXt4OO+Gagg+X0hnKVifN5Q/OTi5sZNAGmlkfPRwe0zWDGoMX/u5cg==","signatures":[{"sig":"MEUCIQDQJHQNBgkWtgEcl4YTaDrjbuE8xjxRJAYQzR7LFPrBJQIgNkJkOSkGWBYYY3zdZ7r2dJDWXg1AzX1b7nOMUs2TtC8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208138},"main":"dist/index.js","_from":"file:abpjs-saas-3.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\388d419d1d96f13a4653c2bad2d692b8\\abpjs-saas-3.1.0.tgz","_integrity":"sha512-iF0Yf3XFdZKFYCUKML3p526kr0NhUUW1EXt4OO+Gagg+X0hnKVifN5Q/OTi5sZNAGmlkfPRwe0zWDGoMX/u5cg==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"3.1.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"3.1.0","@abpjs/feature-management":"3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"3.1.0","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_3.1.0_1770430511159_0.10354613435497506","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@abpjs/saas","version":"3.2.0","keywords":["abp","react","framework","saas","tenant","edition"],"author":{"name":"tekthar.com"},"license":"LGPL-3.0","_id":"@abpjs/saas@3.2.0","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"dist":{"shasum":"0c8a2c9dd5330999ccf56e91a02973f1c356f7f3","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-3.2.0.tgz","fileCount":7,"integrity":"sha512-KyIWUkHbB2Ju/08+VwJuEtaVU3o+Ekoq4qU1ovehcgHRmgHpD2uT8OzuSDQV3DjELHdpkPll4VUTsDr5WAj0Fg==","signatures":[{"sig":"MEUCIFDXqDyW1cM8c9xCz+JpWZCQc7Rv7daKpii2uEVnAZaXAiEAkfE3MnU3yqhh9swoFgloMGgEoO/YuKHmkcyKJ4lC9nM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239056},"main":"dist/index.js","_from":"file:abpjs-saas-3.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","lint:fix":"eslint src --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\""},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\cf30e7631ca42a774b3c2ce1acded9a4\\abpjs-saas-3.2.0.tgz","_integrity":"sha512-KyIWUkHbB2Ju/08+VwJuEtaVU3o+Ekoq4qU1ovehcgHRmgHpD2uT8OzuSDQV3DjELHdpkPll4VUTsDr5WAj0Fg==","repository":{"url":"git+https://github.com/abpjs/abp-react.git","type":"git","directory":"packages/saas"},"_npmVersion":"10.9.2","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@abpjs/core":"3.2.0","@emotion/react":"^11.11.0","@chakra-ui/react":"^3.2.0","@abpjs/theme-shared":"3.2.0","@abpjs/feature-management":"3.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.0.0","vitest":"^1.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react-dom":"^18.2.0","typescript":"^5.0.0","tailwindcss":"^3.4.0","@types/react":"^18.2.0","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.0","react-router-dom":"^6.20.0","@volo/abp.ng.saas":"3.1.0","@vitest/coverage-v8":"^1.0.0","eslint-plugin-react":"^7.0.0","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.1.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.0.0","@testing-library/user-event":"^14.6.1","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas_3.2.0_1770464603791_0.07931077694712663","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@abpjs/saas","version":"4.0.0","description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"keywords":["abp","react","framework","saas","tenant","edition"],"dependencies":{"@chakra-ui/react":"^3.2.0","@emotion/react":"^11.11.0","@abpjs/core":"4.0.0","@abpjs/feature-management":"4.0.0","@abpjs/theme-shared":"4.0.0"},"devDependencies":{"@volo/abp.ng.saas":"3.1.0","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^14.0.0","@testing-library/user-event":"^14.6.1","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","autoprefixer":"^10.4.16","eslint":"^8.0.0","eslint-config-prettier":"^9.1.2","eslint-plugin-react":"^7.0.0","eslint-plugin-react-hooks":"^4.0.0","jsdom":"^24.0.0","postcss":"^8.4.32","prettier":"^3.7.4","react":"^18.2.0","react-dom":"^18.2.0","react-router-dom":"^6.20.0","tailwindcss":"^3.4.0","tsup":"^8.0.0","typescript":"^5.0.0","vitest":"^1.0.0","@vitest/coverage-v8":"^1.0.0"},"author":{"name":"tekthar.com"},"license":"LGPL-3.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/abpjs/abp-react.git","directory":"packages/saas"},"homepage":"https://docs.abpjs.io/docs/packages/saas/overview","bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0","react-router-dom":">=6.0.0"},"scripts":{"build":"tsup","dev":"tsup src/index.ts --format cjs,esm --watch","lint":"eslint src","lint:fix":"eslint src --fix","format":"prettier --write \"src/**/*.{ts,tsx,json,md}\"","format:check":"prettier --check \"src/**/*.{ts,tsx,json,md}\"","type-check":"tsc --noEmit","test":"vitest run","test:watch":"vitest"},"_id":"@abpjs/saas@4.0.0","_integrity":"sha512-ipmi67CVhbWm0gtBH+3WAenKA6QSaMwdPQh60F5WXTTAe0VtTiGs9VZUgfpgYmhiq77oVwZ8X9oQ1NKf5t32fw==","_resolved":"C:\\Users\\DELL\\AppData\\Local\\Temp\\9517b40407007b9ffb9977b77801fe90\\abpjs-saas-4.0.0.tgz","_from":"file:abpjs-saas-4.0.0.tgz","_nodeVersion":"22.17.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-ipmi67CVhbWm0gtBH+3WAenKA6QSaMwdPQh60F5WXTTAe0VtTiGs9VZUgfpgYmhiq77oVwZ8X9oQ1NKf5t32fw==","shasum":"aac832698df1a79a1abf2c6e653c0ba35dd7619f","tarball":"https://registry.npmjs.org/@abpjs/saas/-/saas-4.0.0.tgz","fileCount":7,"unpackedSize":240506,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIF75YEdOIdmBdNbRabiNiQZpxWHQdYlZkpZ+yvCGO4k1AiEAlULMbf4RuNzpUBzd4V8e3uP4Ed6XOawAMgEch2rqACw="}]},"_npmUser":{"name":"aitani","email":"aitani@tekthar.com"},"directories":{},"maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/saas_4.0.0_1770568047526_0.7266561727525329"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-31T12:44:15.310Z","modified":"2026-02-08T16:27:27.827Z","0.7.2":"2026-01-31T12:44:15.524Z","2.0.0":"2026-02-01T05:25:31.735Z","2.1.1":"2026-02-01T18:42:46.514Z","2.2.0":"2026-02-01T20:54:14.114Z","2.4.0":"2026-02-01T23:29:24.265Z","2.7.0":"2026-02-06T05:56:02.432Z","2.9.0":"2026-02-06T09:52:47.218Z","3.0.0":"2026-02-06T21:54:22.291Z","3.1.0":"2026-02-07T02:15:11.294Z","3.2.0":"2026-02-07T11:43:23.945Z","4.0.0":"2026-02-08T16:27:27.667Z"},"bugs":{"url":"https://github.com/abpjs/abp-react/issues"},"author":{"name":"tekthar.com"},"license":"LGPL-3.0","homepage":"https://docs.abpjs.io/docs/packages/saas/overview","keywords":["abp","react","framework","saas","tenant","edition"],"repository":{"type":"git","url":"git+https://github.com/abpjs/abp-react.git","directory":"packages/saas"},"description":"ABP Framework SaaS components for React - translated from @volo/abp.ng.saas","maintainers":[{"name":"aitani","email":"aitani@tekthar.com"}],"readme":"# @abpjs/saas\r\n\r\n> SaaS tenant and edition management UI components for ABP Framework in React\r\n\r\n[![npm version](https://img.shields.io/npm/v/@abpjs/saas.svg)](https://www.npmjs.com/package/@abpjs/saas)\r\n[![License: LGPL-3.0](https://img.shields.io/badge/License-LGPL--3.0-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)\r\n\r\n## Overview\r\n\r\n`@abpjs/saas` provides SaaS (Software as a Service) management components for ABP-based React applications. It includes tenant management, edition management, and subscription features for multi-tenant applications.\r\n\r\nThis package is a React translation of the original `@volo/abp.ng.saas` Angular package.\r\n\r\n## Features\r\n\r\n- **Tenant Management** - Create, read, update, and delete tenants\r\n- **Edition Management** - Create, read, update, and delete editions\r\n- **Feature Management** - Configure features per tenant/edition\r\n- **Connection Strings** - Manage tenant database connection strings\r\n- **Tenant Activation** - Enable/disable tenants\r\n- **Pagination** - Built-in pagination for all list views\r\n- **Search & Filter** - Filter tenants and editions by name\r\n- **Chakra UI** - Beautiful, accessible components\r\n- **TypeScript** - Full type safety with comprehensive definitions\r\n\r\n## Installation\r\n\r\n```bash\r\n# Using npm\r\nnpm install @abpjs/saas\r\n\r\n# Using yarn\r\nyarn add @abpjs/saas\r\n\r\n# Using pnpm\r\npnpm add @abpjs/saas\r\n```\r\n\r\n### Required Dependencies\r\n\r\nThis package requires the following peer dependencies:\r\n\r\n```bash\r\nnpm install @abpjs/core @abpjs/theme-shared @abpjs/feature-management @chakra-ui/react @emotion/react react-router-dom\r\n```\r\n\r\n## Quick Start\r\n\r\n### Using Pre-built Components\r\n\r\n```tsx\r\nimport { TenantsComponent, EditionsComponent } from '@abpjs/saas';\r\nimport { Tabs, TabList, TabPanels, Tab, TabPanel } from '@chakra-ui/react';\r\n\r\nfunction SaaSManagement() {\r\n  return (\r\n    <Tabs>\r\n      <TabList>\r\n        <Tab>Tenants</Tab>\r\n        <Tab>Editions</Tab>\r\n      </TabList>\r\n\r\n      <TabPanels>\r\n        <TabPanel>\r\n          <TenantsComponent\r\n            onTenantCreated={(tenant) => console.log('Tenant created:', tenant)}\r\n            onTenantDeleted={(id) => console.log('Tenant deleted:', id)}\r\n          />\r\n        </TabPanel>\r\n        <TabPanel>\r\n          <EditionsComponent\r\n            onEditionCreated={(edition) => console.log('Edition created:', edition)}\r\n            onEditionDeleted={(id) => console.log('Edition deleted:', id)}\r\n          />\r\n        </TabPanel>\r\n      </TabPanels>\r\n    </Tabs>\r\n  );\r\n}\r\n```\r\n\r\n### Using Hooks for Custom UI\r\n\r\n```tsx\r\nimport { useTenants, useEditions } from '@abpjs/saas';\r\nimport { useEffect } from 'react';\r\n\r\nfunction CustomSaaSView() {\r\n  const { tenants, fetchTenants } = useTenants();\r\n  const { editions, fetchEditions } = useEditions();\r\n\r\n  useEffect(() => {\r\n    fetchTenants();\r\n    fetchEditions();\r\n  }, [fetchTenants, fetchEditions]);\r\n\r\n  return (\r\n    <div>\r\n      <h2>Tenants: {tenants.length}</h2>\r\n      <h2>Editions: {editions.length}</h2>\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n## Components\r\n\r\n### TenantsComponent\r\n\r\nComplete tenant management component with table, search, and modals.\r\n\r\n```tsx\r\nimport { TenantsComponent } from '@abpjs/saas';\r\n\r\n<TenantsComponent\r\n  onTenantCreated={(tenant) => console.log('Created:', tenant)}\r\n  onTenantUpdated={(tenant) => console.log('Updated:', tenant)}\r\n  onTenantDeleted={(id) => console.log('Deleted:', id)}\r\n/>\r\n```\r\n\r\n**Props:**\r\n\r\n| Prop | Type | Required | Description |\r\n|------|------|----------|-------------|\r\n| `onTenantCreated` | `(tenant: Tenant) => void` | No | Callback when tenant is created |\r\n| `onTenantUpdated` | `(tenant: Tenant) => void` | No | Callback when tenant is updated |\r\n| `onTenantDeleted` | `(id: string) => void` | No | Callback when tenant is deleted |\r\n\r\n**Features:**\r\n- Tenant table with actions menu\r\n- Search/filter by tenant name\r\n- Pagination controls\r\n- Create/Edit modal with tabs for tenant info and connection strings\r\n- Edition assignment\r\n- Tenant activation/deactivation\r\n- Feature management integration\r\n- Delete confirmation dialog\r\n\r\n### EditionsComponent\r\n\r\nComplete edition management component.\r\n\r\n```tsx\r\nimport { EditionsComponent } from '@abpjs/saas';\r\n\r\n<EditionsComponent\r\n  onEditionCreated={(edition) => console.log('Created:', edition)}\r\n  onEditionUpdated={(edition) => console.log('Updated:', edition)}\r\n  onEditionDeleted={(id) => console.log('Deleted:', id)}\r\n/>\r\n```\r\n\r\n**Props:**\r\n\r\n| Prop | Type | Required | Description |\r\n|------|------|----------|-------------|\r\n| `onEditionCreated` | `(edition: Edition) => void` | No | Callback when edition is created |\r\n| `onEditionUpdated` | `(edition: Edition) => void` | No | Callback when edition is updated |\r\n| `onEditionDeleted` | `(id: string) => void` | No | Callback when edition is deleted |\r\n\r\n**Features:**\r\n- Edition table with actions menu\r\n- Search/filter by edition name\r\n- Create/Edit modal\r\n- Feature management integration\r\n- Delete confirmation dialog\r\n\r\n## Hooks\r\n\r\n### useTenants\r\n\r\nHook for managing tenants with full CRUD and pagination support.\r\n\r\n```tsx\r\nimport { useTenants } from '@abpjs/saas';\r\n\r\nconst {\r\n  tenants,            // Array of tenants\r\n  totalCount,         // Total tenant count\r\n  selectedTenant,     // Currently selected tenant\r\n  isLoading,          // Loading state\r\n  error,              // Error message\r\n  pageQuery,          // Current pagination/filter params\r\n  fetchTenants,       // Fetch tenants with optional params\r\n  getTenantById,      // Get single tenant\r\n  createTenant,       // Create new tenant\r\n  updateTenant,       // Update existing tenant\r\n  deleteTenant,       // Delete tenant\r\n  setSelectedTenant,  // Set the selected tenant\r\n  setPageQuery,       // Update pagination params\r\n  reset,              // Reset all state\r\n} = useTenants();\r\n```\r\n\r\n### useEditions\r\n\r\nHook for managing editions with full CRUD support.\r\n\r\n```tsx\r\nimport { useEditions } from '@abpjs/saas';\r\n\r\nconst {\r\n  editions,           // Array of editions\r\n  totalCount,         // Total edition count\r\n  selectedEdition,    // Currently selected edition\r\n  isLoading,          // Loading state\r\n  error,              // Error message\r\n  fetchEditions,      // Fetch all editions\r\n  getEditionById,     // Get single edition\r\n  createEdition,      // Create new edition\r\n  updateEdition,      // Update existing edition\r\n  deleteEdition,      // Delete edition\r\n  setSelectedEdition, // Set the selected edition\r\n  reset,              // Reset all state\r\n} = useEditions();\r\n```\r\n\r\n## Services\r\n\r\n### SaaSService\r\n\r\nService class for SaaS API operations.\r\n\r\n```tsx\r\nimport { SaaSService } from '@abpjs/saas';\r\nimport { useRestService } from '@abpjs/core';\r\n\r\nfunction MyComponent() {\r\n  const restService = useRestService();\r\n  const service = new SaaSService(restService);\r\n\r\n  // Tenant operations\r\n  await service.getTenants({ maxResultCount: 10, skipCount: 0 });\r\n  await service.getTenantById(tenantId);\r\n  await service.createTenant(tenantData);\r\n  await service.updateTenant(tenantId, tenantData);\r\n  await service.deleteTenant(tenantId);\r\n  await service.getDefaultConnectionString(tenantId);\r\n  await service.updateDefaultConnectionString(tenantId, connectionString);\r\n\r\n  // Edition operations\r\n  await service.getEditions();\r\n  await service.getEditionById(editionId);\r\n  await service.createEdition(editionData);\r\n  await service.updateEdition(editionId, editionData);\r\n  await service.deleteEdition(editionId);\r\n}\r\n```\r\n\r\n## Data Models\r\n\r\n### Tenant\r\n\r\n```typescript\r\ninterface Tenant {\r\n  id: string;\r\n  name: string;\r\n  editionId: string;\r\n  editionName: string;\r\n  concurrencyStamp: string;\r\n  isActive: boolean;\r\n  activationState: TenantActivationState;\r\n  activationEndDate: string;\r\n}\r\n\r\nenum TenantActivationState {\r\n  Active = 0,\r\n  ActiveWithLimitedTime = 1,\r\n  Passive = 2,\r\n}\r\n```\r\n\r\n### Edition\r\n\r\n```typescript\r\ninterface Edition {\r\n  id: string;\r\n  displayName: string;\r\n}\r\n\r\ninterface EditionCreateDto {\r\n  displayName: string;\r\n}\r\n\r\ninterface EditionUpdateDto {\r\n  displayName: string;\r\n}\r\n```\r\n\r\n### Tenant Connection String\r\n\r\n```typescript\r\ninterface TenantConnectionString {\r\n  name: string;\r\n  value: string;\r\n}\r\n```\r\n\r\n## Constants\r\n\r\n### SAAS_ROUTES\r\n\r\nDefault route configuration for the SaaS module:\r\n\r\n```tsx\r\nimport { SAAS_ROUTES } from '@abpjs/saas';\r\n\r\n// Use in your router configuration\r\nconst routes = [\r\n  ...SAAS_ROUTES.routes,\r\n  // your other routes\r\n];\r\n```\r\n\r\n## Router Setup Example\r\n\r\n```tsx\r\nimport { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';\r\nimport { TenantsComponent, EditionsComponent } from '@abpjs/saas';\r\n\r\nfunction App() {\r\n  return (\r\n    <BrowserRouter>\r\n      <Routes>\r\n        <Route path=\"/saas\">\r\n          <Route index element={<Navigate to=\"tenants\" replace />} />\r\n          <Route path=\"tenants\" element={<TenantsComponent />} />\r\n          <Route path=\"editions\" element={<EditionsComponent />} />\r\n        </Route>\r\n      </Routes>\r\n    </BrowserRouter>\r\n  );\r\n}\r\n```\r\n\r\n## ABP Permissions\r\n\r\nThis package respects ABP's SaaS permissions:\r\n\r\n| Permission | Description |\r\n|------------|-------------|\r\n| `Saas.Tenants` | View tenants |\r\n| `Saas.Tenants.Create` | Create tenants |\r\n| `Saas.Tenants.Update` | Update tenants |\r\n| `Saas.Tenants.Delete` | Delete tenants |\r\n| `Saas.Tenants.ManageFeatures` | Manage tenant features |\r\n| `Saas.Tenants.ManageConnectionStrings` | Manage connection strings |\r\n| `Saas.Editions` | View editions |\r\n| `Saas.Editions.Create` | Create editions |\r\n| `Saas.Editions.Update` | Update editions |\r\n| `Saas.Editions.Delete` | Delete editions |\r\n| `Saas.Editions.ManageFeatures` | Manage edition features |\r\n\r\n## Related Packages\r\n\r\n- [@abpjs/core](https://www.npmjs.com/package/@abpjs/core) - Core infrastructure (required)\r\n- [@abpjs/theme-shared](https://www.npmjs.com/package/@abpjs/theme-shared) - Shared UI components (required)\r\n- [@abpjs/feature-management](https://www.npmjs.com/package/@abpjs/feature-management) - Feature management (required)\r\n- [@abpjs/tenant-management](https://www.npmjs.com/package/@abpjs/tenant-management) - Basic tenant management\r\n- [@abpjs/identity-pro](https://www.npmjs.com/package/@abpjs/identity-pro) - Identity Pro features\r\n- [@abpjs/audit-logging](https://www.npmjs.com/package/@abpjs/audit-logging) - Audit logging\r\n\r\n## Contributing\r\n\r\nThis package is part of the [ABP React](https://github.com/abpjs/abp-react) monorepo. Contributions are welcome!\r\n\r\n## License\r\n\r\nLGPL-3.0 - See [LICENSE](https://github.com/abpjs/abp-react/blob/main/LICENSE) for details.\r\n\r\n---\r\n\r\n**[View Full Documentation](https://docs.abpjs.io/docs/packages/saas/overview)** | **[Report Issues](https://github.com/abpjs/abp-react/issues)** | **[View Source](https://github.com/abpjs/abp-react/tree/main/packages/saas)**\r\n","readmeFilename":"README.md"}