diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a5fc376 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,19 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project +adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [1.0.1] - 2026-06-30 + +### Fixed + +- Resolved a circular dependency in language imports that could crash the admin app during language + initialization. +- Exposed the provider `languages` list through `I18nProvider` instead of importing the language + config directly in `UserDropdownMenu`. +- Updated language selection in `UserDropdownMenu` to use the provider-supplied `languages` + collection, preventing inconsistent state during rendering. diff --git a/apps/admin/package.json b/apps/admin/package.json index 12a2f1f..f99c8fd 100755 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -1,7 +1,7 @@ { "name": "@crux-kit/admin-app", "private": true, - "version": "1.0.0", + "version": "1.0.1", "type": "module", "scripts": { "dev": "vite", diff --git a/apps/admin/src/app/i18n/types.ts b/apps/admin/src/app/i18n/types.ts index a3438a6..5900e70 100755 --- a/apps/admin/src/app/i18n/types.ts +++ b/apps/admin/src/app/i18n/types.ts @@ -16,6 +16,7 @@ export interface Language { } export interface I18nProviderProps { + languages: Language[]; currenLanguage: Language; isRTL: () => boolean; changeLanguage: (lang: Language) => void; diff --git a/apps/admin/src/providers/I18nProvider.tsx b/apps/admin/src/providers/I18nProvider.tsx index 4c300b5..5c50411 100755 --- a/apps/admin/src/providers/I18nProvider.tsx +++ b/apps/admin/src/providers/I18nProvider.tsx @@ -32,6 +32,7 @@ const getInitialLanguage = () => { }; const initialProps: I18nProviderProps = { + languages: I18N_LANGUAGES, currenLanguage: getInitialLanguage(), changeLanguage: (_: Language) => {}, isRTL: () => false @@ -60,6 +61,7 @@ const I18nProvider = ({ children }: PropsWithChildren) => { return ( { - const selectedLang = I18N_LANGUAGES.find((lang) => lang.code === value); + const selectedLang = languages.find((lang) => lang.code === value); if (selectedLang) handleLanguage(selectedLang); }} > - {I18N_LANGUAGES.map((item) => ( + {languages.map((item) => ( =18" }, @@ -2539,6 +2552,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2648,6 +2662,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3069,6 +3084,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3749,6 +3765,7 @@ "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", "license": "MIT", + "peer": true, "dependencies": { "@dnd-kit/accessibility": "^3.1.1", "@dnd-kit/utilities": "^3.2.2", @@ -4659,6 +4676,7 @@ "integrity": "sha512-F0/Hrcfpy8WuxlQyAWJTEren/uxKhYonOGY4OyWmwRdeTvkh9mMSCxowZLjNkhwi/2ipqCgtXwwOk7tW0mWXkA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@babel/generator": "^7.26.2", "@babel/parser": "^7.26.2", @@ -4682,6 +4700,7 @@ "integrity": "sha512-dICbeEkgGRpjkm3CviOpvPfYMBZddaoW2w20pgNMm3CfvD2bixWOFn6FBRZRq5L+fHYe/O/xfSNGMCQBFy7Zlw==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@poppinss/hooks": "^7.3.0", "@poppinss/macroable": "^1.1.0", @@ -4714,6 +4733,7 @@ "integrity": "sha512-Krgrcee01BN1StlVwK5JQP6LL5t3DE3uFNbfFoDTfW7kQuHB0xh6yfaV0hrgcoiEjsqmm2OOsVWeju9aXK4vIA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@poppinss/macroable": "^1.1.0", "@types/chai": "^5.2.3", @@ -4831,6 +4851,7 @@ "integrity": "sha512-M2LUtHhKr4KgBfX73tDHNCD1IOmcXp9dvC+AinmRxsggIFnarsClcfjT/sXc3uNzjZW7Lk31LvcH76AxJHBmJQ==", "devOptional": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18.16.0" }, @@ -4859,6 +4880,7 @@ "integrity": "sha512-F5BWRY20V5D40EUXK+O4bd1IZ7pNpsz/ct2YJGjXa3NXwVJFjGCv8NYBxlUUlfLJyfXNXlLKi+iIjbaMq2UWIQ==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@japa/core": "^10.3.0", "@japa/errors-printer": "^4.1.3", @@ -7732,6 +7754,7 @@ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.5.tgz", "integrity": "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==", "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/Fuzzyma" @@ -7755,6 +7778,7 @@ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz", "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==", "license": "MIT", + "peer": true, "engines": { "node": ">= 14.18" }, @@ -7769,6 +7793,7 @@ "dev": true, "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.21" @@ -8292,6 +8317,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.100.11.tgz", "integrity": "sha512-J0f9s5x3LE1450nNNfYx+e/n0DMa0uOBdFJUy5r0RvmsXd4nB/n0rbHtHI1vYXhikNFan+wf51p6Tmp4c8ucrg==", "license": "MIT", + "peer": true, "dependencies": { "@tanstack/query-core": "5.100.11" }, @@ -8574,6 +8600,7 @@ "integrity": "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -8609,6 +8636,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz", "integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -8619,6 +8647,7 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -8720,6 +8749,7 @@ "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.33.0", "@typescript-eslint/types": "8.33.0", @@ -9109,6 +9139,7 @@ "resolved": "https://registry.npmjs.org/@vinejs/vine/-/vine-3.0.1.tgz", "integrity": "sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==", "license": "MIT", + "peer": true, "dependencies": { "@poppinss/macroable": "^1.0.4", "@types/validator": "^13.12.2", @@ -9360,6 +9391,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -9561,6 +9593,7 @@ "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.7.0.tgz", "integrity": "sha512-iZSrrBGvVlL+nt2B1NpqfDuBZ9jX61X9I2+XV0hlYXHtTwhwLTHDKGXjNXAgFBDLuvSYCB/rq2nPWVPRv2DrGA==", "license": "MIT", + "peer": true, "dependencies": { "@svgdotjs/svg.draggable.js": "^3.0.4", "@svgdotjs/svg.filter.js": "^3.0.8", @@ -9810,6 +9843,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -10586,6 +10620,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -10661,6 +10696,7 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.2.1.tgz", "integrity": "sha512-37RhSdxaG1suen6VDCza6rNrQfooyQh57HFVPwQGEq2QWliVLzPQZ8Oa017weOu+HZCnzI7N3Pf/wyoBKfEqrA==", "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -11121,6 +11157,7 @@ "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -11182,6 +11219,7 @@ "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -13892,6 +13930,7 @@ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" } @@ -14111,6 +14150,7 @@ "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.15.3.tgz", "integrity": "sha512-6+ZSYDs5zgH5CdGfEU2q2Lsa5PztVryL1ys7kAImTU25n2A9LAMj/yneVsQpd03MfwMLDQF+7kakJR9Z+cQxSw==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" @@ -14997,6 +15037,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", @@ -15566,6 +15607,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -15910,6 +15952,7 @@ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -16318,6 +16361,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16362,6 +16406,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -16383,6 +16428,7 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.76.0.tgz", "integrity": "sha512-eKtLGgFeSgkHqQD8J59AMZ9a4uD1D83iSIzt4YlTGD7liDen5rrjcUO1rVIGd9yC1gofryjtHbv+4ny4hkLWlw==", "license": "MIT", + "peer": true, "engines": { "node": ">=18.0.0" }, @@ -17728,7 +17774,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tailwindcss-animate": { "version": "1.0.7", @@ -17870,7 +17917,8 @@ "version": "7.9.3", "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-7.9.3.tgz", "integrity": "sha512-Mtm54U5YJ6Pyo/GaAx+JSHXTGEuxrg2AowVWCD9zy1eBolp5Ub7S1rTtsyQdxhPegfhLuR3VLiTKGw1tacv09g==", - "license": "GPL-2.0-or-later" + "license": "GPL-2.0-or-later", + "peer": true }, "node_modules/tinyrainbow": { "version": "3.1.0", @@ -18019,6 +18067,7 @@ "integrity": "sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "~0.28.0" }, @@ -18106,6 +18155,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -18173,6 +18223,7 @@ "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.32.1", "@typescript-eslint/types": "8.32.1", @@ -18606,6 +18657,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -19435,6 +19487,7 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "license": "ISC", + "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -19543,12 +19596,12 @@ }, "packages/design-system/keenicon": { "name": "@crux-kit/keenicon", - "version": "1.0.0", + "version": "1.0.1", "devDependencies": {} }, "packages/hooks": { "name": "@crux-kit/hooks", - "version": "1.0.0", + "version": "1.0.1", "dependencies": { "@crux-kit/types": "*" }, @@ -19556,7 +19609,7 @@ }, "packages/services/intl-date": { "name": "@crux-kit/intl-date", - "version": "1.0.0", + "version": "1.0.1", "dependencies": { "@crux-kit/types": "*" }, @@ -19564,7 +19617,7 @@ }, "packages/services/intl-name": { "name": "@crux-kit/intl-name", - "version": "1.0.0", + "version": "1.0.1", "dependencies": { "@crux-kit/types": "*" }, @@ -19572,17 +19625,17 @@ }, "packages/services/local-storage": { "name": "@crux-kit/local-storage", - "version": "1.0.0", + "version": "1.0.1", "devDependencies": {} }, "packages/types": { "name": "@crux-kit/types", - "version": "1.0.0", + "version": "1.0.1", "devDependencies": {} }, "packages/utils": { "name": "@crux-kit/utils", - "version": "1.0.0", + "version": "1.0.1", "dependencies": { "@crux-kit/types": "*" }, diff --git a/package.json b/package.json index 053e7df..9884394 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "crux", - "version": "1.0.0", + "version": "1.0.1", "private": true, "type": "module", "license": "UNLICENSED", diff --git a/packages/design-system/keenicon/package.json b/packages/design-system/keenicon/package.json index 1d075d9..78570be 100755 --- a/packages/design-system/keenicon/package.json +++ b/packages/design-system/keenicon/package.json @@ -1,6 +1,6 @@ { "name": "@crux-kit/keenicon", - "version": "1.0.0", + "version": "1.0.1", "type": "module", "types": "src/index.ts", "private": true, diff --git a/packages/hooks/package.json b/packages/hooks/package.json index 1b19cbc..7dba825 100644 --- a/packages/hooks/package.json +++ b/packages/hooks/package.json @@ -1,6 +1,6 @@ { "name": "@crux-kit/hooks", - "version": "1.0.0", + "version": "1.0.1", "type": "module", "types": "src/index.ts", "private": true, diff --git a/packages/services/intl-date/package.json b/packages/services/intl-date/package.json index 8e54edc..3778004 100755 --- a/packages/services/intl-date/package.json +++ b/packages/services/intl-date/package.json @@ -1,6 +1,6 @@ { "name": "@crux-kit/intl-date", - "version": "1.0.0", + "version": "1.0.1", "type": "module", "types": "src/index.ts", "private": true, diff --git a/packages/services/intl-name/package.json b/packages/services/intl-name/package.json index de86e36..9f95741 100755 --- a/packages/services/intl-name/package.json +++ b/packages/services/intl-name/package.json @@ -1,6 +1,6 @@ { "name": "@crux-kit/intl-name", - "version": "1.0.0", + "version": "1.0.1", "type": "module", "types": "src/index.ts", "private": true, diff --git a/packages/services/local-storage/package.json b/packages/services/local-storage/package.json index f8b9d3e..39f978e 100644 --- a/packages/services/local-storage/package.json +++ b/packages/services/local-storage/package.json @@ -1,6 +1,6 @@ { "name": "@crux-kit/local-storage", - "version": "1.0.0", + "version": "1.0.1", "type": "module", "types": "src/index.ts", "private": true, diff --git a/packages/types/package.json b/packages/types/package.json index 3c3828e..01666b0 100755 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@crux-kit/types", - "version": "1.0.0", + "version": "1.0.1", "type": "module", "types": "src/index.ts", "private": true, diff --git a/packages/utils/package.json b/packages/utils/package.json index da7660e..dd5894f 100755 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@crux-kit/utils", - "version": "1.0.0", + "version": "1.0.1", "type": "module", "types": "src/index.ts", "private": true,