{"_id":"@akson/cortex-ui-library","_rev":"7-1a5678fc0a6231a1d16f7e187ced5bdd","name":"@akson/cortex-ui-library","dist-tags":{"latest":"1.5.2"},"versions":{"1.0.0":{"name":"@akson/cortex-ui-library","version":"1.0.0","keywords":["ui","components","forms","validation","react","typescript","libphonenumber","google-places","validator","file-upload","drag-drop","thumbnails","supabase","storage","otp","phone-input","address-input","accessibility"],"author":{"name":"Akson","email":"contact@akson.ch"},"license":"MIT","_id":"@akson/cortex-ui-library@1.0.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"homepage":"https://github.com/antoineschaller/cortex-packages/tree/main/packages/ui-library","bugs":{"url":"https://github.com/antoineschaller/cortex-packages/issues"},"dist":{"shasum":"f989f4774a8da112b98eac7e2c4ba80f0a651174","tarball":"https://registry.npmjs.org/@akson/cortex-ui-library/-/cortex-ui-library-1.0.0.tgz","fileCount":6,"integrity":"sha512-PSY6/9od9I4PRmTuPrnM1bADWDiSSRNPSIVp6ubAYp0D/EfvfN7OPdaHD8/9aJ+I3/iV06RnZtKGZSZ9KSEGgg==","signatures":[{"sig":"MEUCICJ2eL7au95/0/EQX3CjUh8yueU2rXOFMDsMnwJc//gWAiEA5DtRYPGgVY+clDe+cWY1G7qcIcg0oWBSUbQcyidEoEY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":780736},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components/*":{"types":"./dist/components/*.d.ts","import":"./dist/components/*.mjs","require":"./dist/components/*.js"}},"gitHead":"da3fa6cf9f9e1d6cb8af59c3d84d1b969a4428b7","scripts":{"dev":"tsup --watch","test":"jest","build":"tsup","clean":"rm -rf dist","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"repository":{"url":"git+https://github.com/antoineschaller/cortex-packages.git","type":"git","directory":"packages/ui-library"},"_npmVersion":"10.7.0","description":"UI components library with built-in validation using industry-standard libraries","directories":{},"_nodeVersion":"20.15.1","dependencies":{"input-otp":"^1.4.2","validator":"^13.11.0","libphonenumber-js":"^1.12.17","use-places-autocomplete":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.5.11","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@types/validator":"^13.11.8","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^29.7.0","@testing-library/jest-dom":"^6.2.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cortex-ui-library_1.0.0_1757785714820_0.23540854750392826","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated: no consumers. No longer maintained."},"1.2.0":{"name":"@akson/cortex-ui-library","version":"1.2.0","keywords":["ui","components","forms","validation","react","typescript","libphonenumber","google-places","validator","file-upload","drag-drop","thumbnails","supabase","storage","otp","phone-input","address-input","gender-selector","country-selector","countries","flags","radix-ui","accessibility"],"author":{"name":"Akson","email":"contact@akson.ch"},"license":"MIT","_id":"@akson/cortex-ui-library@1.2.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"homepage":"https://github.com/antoineschaller/cortex-packages/tree/main/packages/ui-library","bugs":{"url":"https://github.com/antoineschaller/cortex-packages/issues"},"dist":{"shasum":"dd11266a323559a0bd70f5fb53ce8a0fa7161b42","tarball":"https://registry.npmjs.org/@akson/cortex-ui-library/-/cortex-ui-library-1.2.0.tgz","fileCount":6,"integrity":"sha512-avVztsjIl3z/Na+2q0wyPdsfausC2873A1hMDOedyhKixurUDTs7SOhHr/z9u/BesfBIwMIgxwJ6mZ1TERfHug==","signatures":[{"sig":"MEUCIB+mMqJ84J9MSZN5dChOmwj0LfV9vaFmKz1dY6aSjdv6AiEA+jlw/adQHosY7UxA+rWCkngHq7e1ZapPA8IzeC6mpGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1012520},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components/*":{"types":"./dist/components/*.d.ts","import":"./dist/components/*.mjs","require":"./dist/components/*.js"}},"gitHead":"43345a5b0a334e689c9413407054589965cf276d","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","clean":"rm -rf dist","test:ui":"vitest --ui","storybook":"storybook dev -p 6006","test:watch":"vitest --watch","type-check":"tsc --noEmit","test:coverage":"vitest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"repository":{"url":"git+https://github.com/antoineschaller/cortex-packages.git","type":"git","directory":"packages/ui-library"},"_npmVersion":"10.7.0","description":"UI components library with built-in validation using industry-standard libraries","directories":{},"_nodeVersion":"20.15.1","dependencies":{"clsx":"^2.1.0","cmdk":"^1.1.1","input-otp":"^1.4.2","validator":"^13.11.0","lucide-react":"^0.460.0","countries-list":"^3.0.1","tailwind-merge":"^2.2.0","libphonenumber-js":"^1.12.17","country-flag-icons":"^1.5.13","@radix-ui/react-dialog":"^1.1.1","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.7","@radix-ui/react-tooltip":"^1.1.2","use-places-autocomplete":"^4.0.1","@radix-ui/react-checkbox":"^1.0.4","@radix-ui/react-progress":"^1.1.0","class-variance-authority":"^0.7.0","@radix-ui/react-alert-dialog":"^1.1.1","@radix-ui/react-dropdown-menu":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^25.0.1","vitest":"^2.1.8","jest-axe":"^9.0.0","storybook":"^8.4.7","@vitest/ui":"^2.1.8","typescript":"^5.0.0","@types/react":"^18.0.0","@storybook/test":"^8.4.7","@storybook/react":"^8.4.7","@types/react-dom":"^18.0.0","@types/validator":"^13.11.8","@storybook/blocks":"^8.4.7","@vitest/coverage-v8":"^2.1.8","@storybook/addon-a11y":"^8.4.7","@storybook/addon-docs":"^8.4.7","@storybook/react-vite":"^8.4.7","@storybook/addon-links":"^8.4.7","@storybook/manager-api":"^8.4.7","@testing-library/react":"^16.3.0","@storybook/addon-controls":"^8.4.7","@testing-library/jest-dom":"^6.2.0","@storybook/addon-essentials":"^8.4.7","@testing-library/user-event":"^14.5.2","@storybook/addon-interactions":"^8.4.7"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cortex-ui-library_1.2.0_1757878426165_0.9275096151037128","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated: no consumers. No longer maintained."},"1.4.0":{"name":"@akson/cortex-ui-library","version":"1.4.0","keywords":["ui","components","forms","validation","react","typescript","libphonenumber","google-places","validator","file-upload","drag-drop","thumbnails","supabase","storage","otp","phone-input","address-input","gender-selector","country-selector","countries","flags","radix-ui","accessibility","iban","measurements","size-selector","participation","invitation-card","video-upload","international-banking","body-measurements","clothing-sizes","event-management"],"author":{"name":"Akson","email":"contact@akson.ch"},"license":"MIT","_id":"@akson/cortex-ui-library@1.4.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"homepage":"https://github.com/antoineschaller/cortex-packages/tree/main/packages/ui-library","bugs":{"url":"https://github.com/antoineschaller/cortex-packages/issues"},"dist":{"shasum":"707fa7ddfac130e8574e0e57bfaf89f1f7f5cc43","tarball":"https://registry.npmjs.org/@akson/cortex-ui-library/-/cortex-ui-library-1.4.0.tgz","fileCount":6,"integrity":"sha512-7/FLoy5eYl5CpJ8WcLvosFBgFy37eHc596bDJFZ/tIdKoSdOiCwl+E62kRdqJTsx4WWiOxXCsRhm/G6r02uX2Q==","signatures":[{"sig":"MEYCIQD8vG+T6ggcj584fOCJM4WC0aM2cNvTjVsL6PqQEO6XXwIhAPcGHw9WXxfQjyc1ixsRVNyJz9ywt1HoRhy/MOJpfX0u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1599381},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components/*":{"types":"./dist/components/*.d.ts","import":"./dist/components/*.mjs","require":"./dist/components/*.js"}},"gitHead":"a18dd6ecebecf2ddfe4f4e49b443ba4ec43b3042","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","clean":"rm -rf dist","test:ui":"vitest --ui","storybook":"storybook dev -p 6006","test:watch":"vitest --watch","type-check":"tsc --noEmit","test:coverage":"vitest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"repository":{"url":"git+https://github.com/antoineschaller/cortex-packages.git","type":"git","directory":"packages/ui-library"},"_npmVersion":"10.7.0","description":"UI components library with built-in validation using industry-standard libraries","directories":{},"_nodeVersion":"20.15.1","dependencies":{"clsx":"^2.1.0","cmdk":"^1.1.1","ibantools":"^4.5.1","input-otp":"^1.4.2","validator":"^13.11.0","lucide-react":"^0.460.0","countries-list":"^3.0.1","tailwind-merge":"^2.2.0","libphonenumber-js":"^1.12.17","country-flag-icons":"^1.5.13","@radix-ui/react-dialog":"^1.1.1","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.7","@radix-ui/react-tooltip":"^1.1.2","use-places-autocomplete":"^4.0.1","@akson/cortex-ui-library":"file:","@radix-ui/react-checkbox":"^1.0.4","@radix-ui/react-progress":"^1.1.0","class-variance-authority":"^0.7.0","@radix-ui/react-alert-dialog":"^1.1.1","@radix-ui/react-dropdown-menu":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.11.2","tsup":"^8.0.0","jsdom":"^25.0.1","vitest":"^2.1.8","jest-axe":"^9.0.0","storybook":"^8.4.7","@vitest/ui":"^2.1.8","typescript":"^5.0.0","@types/react":"^18.0.0","@storybook/test":"^8.4.7","@storybook/react":"^8.4.7","@types/react-dom":"^18.0.0","@types/validator":"^13.11.8","@storybook/blocks":"^8.4.7","@vitest/coverage-v8":"^2.1.8","@storybook/addon-a11y":"^8.4.7","@storybook/addon-docs":"^8.4.7","@storybook/react-vite":"^8.4.7","@storybook/addon-links":"^8.4.7","@storybook/manager-api":"^8.4.7","@testing-library/react":"^16.3.0","@storybook/addon-controls":"^8.4.7","@testing-library/jest-dom":"^6.2.0","@storybook/addon-essentials":"^8.4.7","@testing-library/user-event":"^14.5.2","@storybook/addon-interactions":"^8.4.7"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cortex-ui-library_1.4.0_1757885259245_0.3395668727676291","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated: no consumers. No longer maintained."},"1.5.0":{"name":"@akson/cortex-ui-library","version":"1.5.0","keywords":["ui","components","forms","validation","react","typescript","libphonenumber","google-places","validator","file-upload","drag-drop","thumbnails","supabase","storage","otp","phone-input","address-input","gender-selector","country-selector","countries","flags","radix-ui","accessibility","iban","measurements","size-selector","participation","invitation-card","video-upload","international-banking","body-measurements","clothing-sizes","event-management"],"author":{"name":"Akson","email":"contact@akson.ch"},"license":"MIT","_id":"@akson/cortex-ui-library@1.5.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"homepage":"https://github.com/antoineschaller/cortex-packages/tree/main/packages/ui-library","bugs":{"url":"https://github.com/antoineschaller/cortex-packages/issues"},"dist":{"shasum":"b50e8c159099a69f0794ca010deb0856fe76621b","tarball":"https://registry.npmjs.org/@akson/cortex-ui-library/-/cortex-ui-library-1.5.0.tgz","fileCount":6,"integrity":"sha512-LtE72oiYFM2lk9D3IW87xe1hWSjz3M4S+tSyEV90FC6rsoimXe5NgRqURdpdNmZJD7+DpVLJGuHlOE4MOoFfOw==","signatures":[{"sig":"MEUCIQCXHsYfIoHawos4lRtlkJrETDOJV2r5szOHyHN1bRhCnQIgM9RWXOsfOxdycZ9mNi02u2G5NyZqKNly5k+1ErmZwO4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1599381},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components/*":{"types":"./dist/components/*.d.ts","import":"./dist/components/*.mjs","require":"./dist/components/*.js"}},"gitHead":"d8a6f714689e7d3fc238e2a429c3ae39fac9627c","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","clean":"rm -rf dist","test:ui":"vitest --ui","storybook":"storybook dev -p 6006","test:watch":"vitest --watch","type-check":"tsc --noEmit","test:coverage":"vitest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"repository":{"url":"git+https://github.com/antoineschaller/cortex-packages.git","type":"git","directory":"packages/ui-library"},"_npmVersion":"10.7.0","description":"UI components library with built-in validation using industry-standard libraries","directories":{},"_nodeVersion":"20.15.1","dependencies":{"clsx":"^2.1.0","cmdk":"^1.1.1","ibantools":"^4.5.1","input-otp":"^1.4.2","validator":"^13.11.0","lucide-react":"^0.460.0","countries-list":"^3.0.1","tailwind-merge":"^2.2.0","libphonenumber-js":"^1.12.17","country-flag-icons":"^1.5.13","@radix-ui/react-dialog":"^1.1.1","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.7","@radix-ui/react-tooltip":"^1.1.2","use-places-autocomplete":"^4.0.1","@akson/cortex-ui-library":"file:","@radix-ui/react-checkbox":"^1.0.4","@radix-ui/react-progress":"^1.1.0","class-variance-authority":"^0.7.0","@radix-ui/react-alert-dialog":"^1.1.1","@radix-ui/react-dropdown-menu":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.11.2","tsup":"^8.0.0","jsdom":"^25.0.1","vitest":"^2.1.8","jest-axe":"^9.0.0","storybook":"^8.4.7","@vitest/ui":"^2.1.8","typescript":"^5.0.0","@types/react":"^18.0.0","@storybook/test":"^8.4.7","@storybook/react":"^8.4.7","@types/react-dom":"^18.0.0","@types/validator":"^13.11.8","@storybook/blocks":"^8.4.7","@vitest/coverage-v8":"^2.1.8","@storybook/addon-a11y":"^8.4.7","@storybook/addon-docs":"^8.4.7","@storybook/react-vite":"^8.4.7","@storybook/addon-links":"^8.4.7","@storybook/manager-api":"^8.4.7","@testing-library/react":"^16.3.0","@storybook/addon-controls":"^8.4.7","@testing-library/jest-dom":"^6.2.0","@storybook/addon-essentials":"^8.4.7","@testing-library/user-event":"^14.5.2","@storybook/addon-interactions":"^8.4.7"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cortex-ui-library_1.5.0_1757916631789_0.6908419416320468","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated: no consumers. No longer maintained."},"1.5.1":{"name":"@akson/cortex-ui-library","version":"1.5.1","keywords":["ui","components","forms","validation","react","typescript","libphonenumber","google-places","validator","file-upload","drag-drop","thumbnails","supabase","storage","otp","phone-input","address-input","gender-selector","country-selector","countries","flags","radix-ui","accessibility","iban","measurements","size-selector","participation","invitation-card","video-upload","international-banking","body-measurements","clothing-sizes","event-management"],"author":{"name":"Akson","email":"contact@akson.ch"},"license":"MIT","_id":"@akson/cortex-ui-library@1.5.1","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"homepage":"https://github.com/antoineschaller/cortex-packages/tree/main/packages/ui-library","bugs":{"url":"https://github.com/antoineschaller/cortex-packages/issues"},"dist":{"shasum":"bf452b35edac6eaf6859e70f8aa9e0e2e3564b6d","tarball":"https://registry.npmjs.org/@akson/cortex-ui-library/-/cortex-ui-library-1.5.1.tgz","fileCount":6,"integrity":"sha512-LWNo4XVNhuKWQVb1ScM31DMJENTlpyRJns3/Ce4mlnvYYu/BOKLpgHoCtPSSJoxYRKYmgNK8EQGzPkTOmztYbQ==","signatures":[{"sig":"MEUCIQDIeBO9lBw2tYg1VYMC1CuJC+b2tJ8hs09tGT+2OkPR8wIgcP0HhX/zeMsL43Q3Oi4PxGZAr5//QMMIfH2f93TdBoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1599692},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components/*":{"types":"./dist/components/*.d.ts","import":"./dist/components/*.mjs","require":"./dist/components/*.js"}},"gitHead":"d8a6f714689e7d3fc238e2a429c3ae39fac9627c","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","clean":"rm -rf dist","test:ui":"vitest --ui","storybook":"storybook dev -p 6006","test:watch":"vitest --watch","type-check":"tsc --noEmit","test:coverage":"vitest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"repository":{"url":"git+https://github.com/antoineschaller/cortex-packages.git","type":"git","directory":"packages/ui-library"},"_npmVersion":"10.8.2","description":"UI components library with built-in validation using industry-standard libraries","directories":{},"_nodeVersion":"20.18.1","dependencies":{"clsx":"^2.1.0","cmdk":"^1.1.1","ibantools":"^4.5.1","input-otp":"^1.4.2","validator":"^13.11.0","lucide-react":"^0.460.0","countries-list":"^3.0.1","tailwind-merge":"^2.2.0","libphonenumber-js":"^1.12.17","country-flag-icons":"^1.5.13","@radix-ui/react-dialog":"^1.1.1","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.7","@radix-ui/react-tooltip":"^1.1.2","use-places-autocomplete":"^4.0.1","@radix-ui/react-checkbox":"^1.0.4","@radix-ui/react-progress":"^1.1.0","class-variance-authority":"^0.7.0","@radix-ui/react-alert-dialog":"^1.1.1","@radix-ui/react-dropdown-menu":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.11.2","tsup":"^8.0.0","jsdom":"^25.0.1","vitest":"^2.1.8","jest-axe":"^9.0.0","storybook":"^8.4.7","@vitest/ui":"^2.1.8","typescript":"^5.0.0","@types/react":"^18.0.0","@storybook/test":"^8.4.7","@storybook/react":"^8.4.7","@types/react-dom":"^18.0.0","@types/validator":"^13.11.8","@storybook/blocks":"^8.4.7","@vitest/coverage-v8":"^2.1.8","@storybook/addon-a11y":"^8.4.7","@storybook/addon-docs":"^8.4.7","@storybook/react-vite":"^8.4.7","@storybook/addon-links":"^8.4.7","@storybook/manager-api":"^8.4.7","@testing-library/react":"^16.3.0","@storybook/addon-controls":"^8.4.7","@testing-library/jest-dom":"^6.2.0","@storybook/addon-essentials":"^8.4.7","@testing-library/user-event":"^14.5.2","@storybook/addon-interactions":"^8.4.7"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cortex-ui-library_1.5.1_1757916674685_0.13869627468836843","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated: no consumers. No longer maintained."},"1.5.2":{"name":"@akson/cortex-ui-library","version":"1.5.2","keywords":["ui","components","forms","validation","react","typescript","libphonenumber","google-places","validator","file-upload","drag-drop","thumbnails","supabase","storage","otp","phone-input","address-input","gender-selector","country-selector","countries","flags","radix-ui","accessibility","iban","measurements","size-selector","participation","invitation-card","video-upload","international-banking","body-measurements","clothing-sizes","event-management"],"author":{"name":"Akson","email":"contact@akson.ch"},"license":"MIT","_id":"@akson/cortex-ui-library@1.5.2","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"homepage":"https://github.com/antoineschaller/cortex-packages/tree/main/packages/ui-library","bugs":{"url":"https://github.com/antoineschaller/cortex-packages/issues"},"dist":{"shasum":"e25fc9ec75ee754090f129bd300c7618b72005ed","tarball":"https://registry.npmjs.org/@akson/cortex-ui-library/-/cortex-ui-library-1.5.2.tgz","fileCount":6,"integrity":"sha512-7vB8o5XnVoQumsLYLiSUdEBUbTsWdjXCG4r7sTTh2RHms150cYv9qJtU1AnOQCsUdBJsP4DXyYnRmV5kOQDfVw==","signatures":[{"sig":"MEUCIQCBBsBIIeMhwTgzFkgP00pITY9Di31zsclAdClW7NINygIgdlBdDQSERmmCjFiasU4PKj9kDdlMO2ouQztV5bYpbdM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1599822},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components/*":{"types":"./dist/components/*.d.ts","import":"./dist/components/*.mjs","require":"./dist/components/*.js"}},"gitHead":"d03c106deefba175ffb3a52aa33cc39c8351f08e","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","clean":"rm -rf dist","test:ui":"vitest --ui","storybook":"storybook dev -p 6006","test:watch":"vitest --watch","type-check":"tsc --noEmit","test:coverage":"vitest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"repository":{"url":"git+https://github.com/antoineschaller/cortex-packages.git","type":"git","directory":"packages/ui-library"},"_npmVersion":"10.8.2","description":"UI components library with built-in validation using industry-standard libraries","directories":{},"_nodeVersion":"20.18.1","dependencies":{"clsx":"^2.1.0","cmdk":"^1.1.1","ibantools":"^4.5.1","input-otp":"^1.4.2","validator":"^13.11.0","lucide-react":"^0.460.0","countries-list":"^3.0.1","tailwind-merge":"^2.2.0","libphonenumber-js":"^1.12.17","country-flag-icons":"^1.5.13","@radix-ui/react-dialog":"^1.1.1","@radix-ui/react-select":"^2.0.0","@radix-ui/react-popover":"^1.0.7","use-places-autocomplete":"^4.0.1","@radix-ui/react-checkbox":"^1.0.4","@radix-ui/react-progress":"^1.1.0","class-variance-authority":"^0.7.0"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.11.2","tsup":"^8.0.0","jsdom":"^25.0.1","vitest":"^2.1.8","jest-axe":"^9.0.0","storybook":"^8.4.7","@vitest/ui":"^2.1.8","typescript":"^5.0.0","@types/react":"^18.0.0","@storybook/test":"^8.4.7","@storybook/react":"^8.4.7","@types/react-dom":"^18.0.0","@types/validator":"^13.11.8","@storybook/blocks":"^8.4.7","@vitest/coverage-v8":"^2.1.8","@storybook/addon-a11y":"^8.4.7","@storybook/addon-docs":"^8.4.7","@storybook/react-vite":"^8.4.7","@storybook/addon-links":"^8.4.7","@storybook/manager-api":"^8.4.7","@testing-library/react":"^16.3.0","@storybook/addon-controls":"^8.4.7","@testing-library/jest-dom":"^6.2.0","@storybook/addon-essentials":"^8.4.7","@testing-library/user-event":"^14.5.2","@storybook/addon-interactions":"^8.4.7"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cortex-ui-library_1.5.2_1757918418599_0.4248873510300588","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated: no consumers. No longer maintained."}},"time":{"created":"2025-09-13T17:48:34.733Z","modified":"2026-03-19T12:46:14.537Z","1.0.0":"2025-09-13T17:48:35.055Z","1.2.0":"2025-09-14T19:33:46.365Z","1.4.0":"2025-09-14T21:27:39.532Z","1.5.0":"2025-09-15T06:10:32.019Z","1.5.1":"2025-09-15T06:11:14.920Z","1.5.2":"2025-09-15T06:40:18.835Z"},"bugs":{"url":"https://github.com/antoineschaller/cortex-packages/issues"},"author":{"name":"Akson","email":"contact@akson.ch"},"license":"MIT","homepage":"https://github.com/antoineschaller/cortex-packages/tree/main/packages/ui-library","keywords":["ui","components","forms","validation","react","typescript","libphonenumber","google-places","validator","file-upload","drag-drop","thumbnails","supabase","storage","otp","phone-input","address-input","gender-selector","country-selector","countries","flags","radix-ui","accessibility","iban","measurements","size-selector","participation","invitation-card","video-upload","international-banking","body-measurements","clothing-sizes","event-management"],"repository":{"url":"git+https://github.com/antoineschaller/cortex-packages.git","type":"git","directory":"packages/ui-library"},"description":"UI components library with built-in validation using industry-standard libraries","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"readme":"# @akson/cortex-ui-library\n\nA comprehensive UI components library with best-in-class validation using industry-standard libraries. Perfect for form inputs with robust validation, internationalization, and excellent UX.\n\n## Features\n\n- 🎯 **Industry-Standard Validation**: Uses proven libraries (validator.js, libphonenumber-js)\n- 🌍 **International Support**: Full phone number and address validation for 100+ countries\n- 🚀 **Google Places Integration**: Smart address autocomplete with fallback manual entry\n- ♿ **Accessible**: Full ARIA support and keyboard navigation\n- 📱 **Mobile First**: Responsive design with touch-friendly interactions\n- 🎨 **Customizable**: Flexible styling with CSS classes and variants\n- 🧪 **Well Tested**: Comprehensive test coverage with Jest and Testing Library\n- ⚡ **Optimized UX**: Built-in debouncing, caching, and smart suggestions\n\n## Installation\n\n```bash\nnpm install @akson/cortex-ui-library\n# or\nyarn add @akson/cortex-ui-library\n# or\npnpm add @akson/cortex-ui-library\n```\n\n## Components\n\n### AddressInput\n\nA comprehensive address input component with Google Maps integration and manual entry fallback.\n\n```tsx\nimport { AddressInput } from '@akson/cortex-ui-library'\n\nfunction MyForm() {\n  const [address, setAddress] = useState({})\n\n  return (\n    <AddressInput\n      address={address}\n      onChange={setAddress}\n      required\n      label=\"Delivery Address\"\n      googleMapsApiKey=\"your-api-key\" // Optional\n      showCoordinates\n      validateOnChange\n    />\n  )\n}\n```\n\n**Props:**\n- `address`: Partial address data object\n- `onChange`: Callback when address changes\n- `errors`: Field-level error messages\n- `googleMapsApiKey`: Optional Google Maps API key for autocomplete\n- `required`: Mark as required field\n- `label`: Field label (default: \"Address\")\n- `description`: Helper description text\n- `showCoordinates`: Display coordinates when available\n- `validateOnChange`: Validate fields as user types\n- `disabled`: Disable all inputs\n- `className`: Custom CSS classes\n\n### PhoneInput\n\nInternational phone number input with country selection and format validation.\n\n```tsx\nimport { PhoneInput } from '@akson/cortex-ui-library'\n\nfunction MyForm() {\n  const [phone, setPhone] = useState('')\n  const [isValid, setIsValid] = useState(false)\n\n  return (\n    <PhoneInput\n      value={phone}\n      onChange={setPhone}\n      onValidChange={(valid, phoneData) => {\n        setIsValid(valid)\n        console.log('Phone data:', phoneData)\n      }}\n      defaultCountry=\"CH\"\n      autoFormat\n      showValidationIcon\n      required\n    />\n  )\n}\n```\n\n### OTPInput\n\nModern one-time password input with industry-standard accessibility and UX features.\n\n```tsx\nimport { OTPInput } from '@akson/cortex-ui-library'\n\nfunction MyForm() {\n  const [otp, setOtp] = useState('')\n\n  return (\n    <OTPInput\n      value={otp}\n      onChange={setOtp}\n      onComplete={(code) => {\n        console.log('OTP completed:', code)\n        // Auto-submit when complete\n      }}\n      length={6}\n      label=\"Verification Code\"\n      helperText=\"Enter the code sent to your phone\"\n      allowedCharacters=\"numeric\"\n      required\n    />\n  )\n}\n```\n\n### FileUploadField\n\nEnterprise-grade file upload component with Supabase integration support, drag & drop, thumbnails, and advanced validation.\n\n```tsx\nimport { FileUploadField, fileUploadPresets } from '@akson/cortex-ui-library'\nimport { useDocumentUpload } from '@akson/cortex-supabase'\n\nfunction MyUploadForm() {\n  // Supabase integration (optional)\n  const documentUpload = useDocumentUpload({\n    bucketName: 'documents',\n    pathPrefix: 'uploads'\n  })\n\n  return (\n    <FileUploadField\n      uploadHook={documentUpload} // Inject Supabase functionality\n      config={{\n        ...fileUploadPresets.documents, // Use preset configuration\n        maxFiles: 10,\n        showThumbnails: true,\n        variant: 'gallery'\n      }}\n      onUploadComplete={(results) => {\n        console.log('Files uploaded:', results)\n      }}\n    />\n  )\n}\n\n// Without Supabase - use direct upload handler\nfunction CustomUploadForm() {\n  const handleUpload = async (files: File[]) => {\n    // Your custom upload logic\n    return await uploadToMyBackend(files)\n  }\n\n  return (\n    <FileUploadField\n      onUpload={handleUpload}\n      config={fileUploadPresets.images}\n    />\n  )\n}\n```\n\n**PhoneInput Props:**\n- `value`: Current phone number string\n- `onChange`: Callback when phone number changes\n- `onValidChange`: Callback with validation status and parsed phone data\n- `defaultCountry`: Default country code (default: \"CH\")\n- `autoFormat`: Automatically format phone number\n- `showValidationIcon`: Show validation status icons\n- `validateOnChange`: Validate as user types\n- `placeholder`: Input placeholder\n- `required`: Mark as required field\n- `disabled`: Disable input and country selector\n\n**FileUploadField Props:**\n- `uploadHook`: Supabase upload hook (from @akson/cortex-supabase)\n- `batchUploadHook`: Batch upload hook for multiple files\n- `validationHook`: Validation hook with custom rules\n- `onUpload`: Direct upload handler (alternative to hooks)\n- `config`: Upload configuration object\n- `value`: Current files array\n- `onChange`: Callback when files change\n- `onUploadComplete`: Callback when upload completes\n- `onUploadError`: Callback when upload fails\n- `disabled`: Disable the upload area\n- `className`: Custom CSS classes\n\n**FileUpload Config Options:**\n- `accept`: Allowed file types (e.g., ['image/*', 'application/pdf'])\n- `maxSize`: Maximum file size in bytes\n- `maxFiles`: Maximum number of files\n- `multiple`: Allow multiple file selection\n- `variant`: 'default' | 'compact' | 'gallery' | 'minimal'\n- `showThumbnails`: Display file thumbnails\n- `dragDropEnabled`: Enable drag and drop\n- `autoUpload`: Automatically upload when files are added\n- `validationPosition`: 'top' | 'bottom' | 'inline'\n\n**Built-in Presets:**\n- `fileUploadPresets.images` - Image upload (10MB, thumbnails, gallery view)\n- `fileUploadPresets.documents` - Document upload (50MB, PDF/Office files)\n- `fileUploadPresets.media` - Media files (100MB, images/video/audio)\n- `fileUploadPresets.profilePicture` - Single image (5MB, compact view)\n- `fileUploadPresets.gallery` - Photo gallery (20MB, auto-upload)\n\n**OTPInput Props:**\n- `value`: Current OTP string\n- `onChange`: Callback when OTP changes\n- `onComplete`: Callback when OTP reaches specified length\n- `length`: Number of digits (default: 6)\n- `allowedCharacters`: 'numeric' or 'alphanumeric' (default: 'numeric')\n- `autoComplete`: Enable browser autocomplete='one-time-code' (default: true)\n- `pushPasswordManagerStrategy`: Auto-adjust for password managers (default: true)\n- `pasteTransformer`: Custom function to transform pasted values\n- `label`: Field label (default: \"Verification Code\")\n- `error`: Error message to display\n- `helperText`: Helper text to display\n- `required`: Mark as required field\n- `disabled`: Disable the input\n- `className`: Custom CSS classes\n\n## Validation Utilities\n\nThe library uses industry-standard validation libraries for maximum reliability:\n\n- **Email validation**: Uses `validator.js` - the most trusted email validation library\n- **Phone validation**: Uses `libphonenumber-js` - Google's libphonenumber in JavaScript\n- **Address validation**: Uses `use-places-autocomplete` for Google Places integration\n\n```tsx\nimport {\n  required,\n  minLength,\n  maxLength,\n  email,\n  parsePhoneNumber,\n  validatePhoneNumber,\n  validateAddress\n} from '@akson/cortex-ui-library'\n\n// Basic validation\nconst nameValidation = required('John Doe')\nconst emailValidation = email('user@example.com') // Uses validator.js\n\n// Phone validation with libphonenumber-js\nconst phoneData = parsePhoneNumber('+41761234567', 'CH')\nconst phoneValidation = validatePhoneNumber('+41761234567')\n\n// Address validation\nconst addressErrors = validateAddress({\n  streetLine1: '123 Main St',\n  city: 'Zurich',\n  // ... other fields\n}, true) // required = true\n```\n\n## Styling\n\nThe library provides flexible styling through CSS classes. All components use semantic class names:\n\n```tsx\nimport { cn, inputVariants } from '@akson/cortex-ui-library'\n\n// Combine classes conditionally\nconst inputClassName = cn(\n  'base-input',\n  hasError && 'error-state',\n  isDisabled && 'disabled'\n)\n\n// Use built-in style variants\nconst className = cn(\n  baseInputStyles,\n  hasError ? inputVariants.error : inputVariants.default\n)\n```\n\n### Built-in Style Variables\n\n```tsx\n// Input styles\nbaseInputStyles, inputVariants\n// Label styles\nlabelStyles\n// Error and helper text\nerrorStyles, helperTextStyles\n// Buttons\nbuttonStyles, buttonVariants\n// Card layout\ncardStyles, cardHeaderStyles, cardContentStyles\n```\n\n## TypeScript Support\n\nFull TypeScript support with comprehensive type definitions:\n\n```tsx\nimport type {\n  AddressData,\n  AddressInputProps,\n  PhoneData,\n  PhoneInputProps,\n  ValidationResult,\n  FieldErrors\n} from '@akson/cortex-ui-library'\n\n// Address data structure\nconst address: AddressData = {\n  streetLine1: '123 Main Street',\n  streetLine2: 'Apt 4B',\n  city: 'Zurich',\n  state: 'ZH',\n  postalCode: '8001',\n  country: 'Switzerland',\n  fullFormattedAddress: '123 Main Street, Apt 4B, 8001 Zurich, Switzerland',\n  placeId: 'ChIJ...',\n  coordinates: { lat: 47.3769, lng: 8.5417 }\n}\n\n// Phone data structure\nconst phoneData: PhoneData = {\n  countryCode: '+41',\n  nationalNumber: '761234567',\n  formattedNumber: '+41 76 123 45 67',\n  isValid: true\n}\n```\n\n## Supported Countries\n\n### Phone Numbers\n- Switzerland (CH) - +41\n- United States (US) - +1\n- Canada (CA) - +1\n- United Kingdom (GB) - +44\n- Germany (DE) - +49\n- France (FR) - +33\n- Italy (IT) - +39\n- Spain (ES) - +34\n- Austria (AT) - +43\n- Belgium (BE) - +32\n- Netherlands (NL) - +31\n\n### Address Autocomplete\nSupports Google Maps Places API for all countries with enhanced support for European countries.\n\n## Testing\n\nThe library includes comprehensive test utilities and mocks:\n\n```tsx\n// Jest setup is included\nimport '@testing-library/jest-dom'\n\n// Google Maps mocks are provided\n// No additional setup needed for testing\n```\n\nRun tests in your project:\n\n```bash\nnpm test\n# or with coverage\nnpm run test:coverage\n```\n\n## Examples\n\n### Complete Form Example\n\n```tsx\nimport React, { useState } from 'react'\nimport { AddressInput, PhoneInput, validateAddress } from '@akson/cortex-ui-library'\n\nfunction ContactForm() {\n  const [formData, setFormData] = useState({\n    address: {},\n    phone: ''\n  })\n  const [errors, setErrors] = useState({})\n\n  const handleSubmit = (e) => {\n    e.preventDefault()\n\n    // Validate address\n    const addressErrors = validateAddress(formData.address, true)\n\n    if (Object.keys(addressErrors).length > 0) {\n      setErrors({ address: addressErrors })\n      return\n    }\n\n    // Submit form\n    console.log('Form data:', formData)\n  }\n\n  return (\n    <form onSubmit={handleSubmit} className=\"space-y-6\">\n      <AddressInput\n        address={formData.address}\n        onChange={(address) => setFormData(prev => ({ ...prev, address }))}\n        errors={errors.address}\n        required\n        label=\"Your Address\"\n        googleMapsApiKey={process.env.GOOGLE_MAPS_API_KEY}\n      />\n\n      <PhoneInput\n        value={formData.phone}\n        onChange={(phone) => setFormData(prev => ({ ...prev, phone }))}\n        required\n        label=\"Phone Number\"\n        autoFormat\n        showValidationIcon\n      />\n\n      <button type=\"submit\">Submit</button>\n    </form>\n  )\n}\n```\n\n### Custom Styling Example\n\n```tsx\nimport { AddressInput, cn } from '@akson/cortex-ui-library'\n\nfunction StyledAddressInput() {\n  return (\n    <AddressInput\n      // ... props\n      className={cn(\n        // Custom card styling\n        'shadow-lg border-2 border-blue-200',\n        // Hover effects\n        'hover:border-blue-400 transition-colors'\n      )}\n    />\n  )\n}\n```\n\n## API Reference\n\n### AddressData Type\n\n```tsx\ninterface AddressData {\n  streetLine1: string\n  streetLine2?: string\n  city: string\n  state: string\n  postalCode: string\n  country: string\n  fullFormattedAddress?: string\n  placeId?: string\n  coordinates?: { lat: number; lng: number }\n}\n```\n\n### PhoneData Type\n\n```tsx\ninterface PhoneData {\n  countryCode: string\n  nationalNumber: string\n  formattedNumber: string\n  isValid: boolean\n}\n```\n\n### ValidationResult Type\n\n```tsx\ninterface ValidationResult {\n  isValid: boolean\n  error?: string\n}\n```\n\n## Contributing\n\nWe welcome contributions! Please see our contributing guidelines and feel free to submit issues and pull requests.\n\n## License\n\nMIT License - see LICENSE file for details.","readmeFilename":"README.md"}