From 26372a623eb8efd9f95209cedbb23bf07704853e Mon Sep 17 00:00:00 2001 From: Mohammad Javed <31125009+immohammadjaved@users.noreply.github.com> Date: Thu, 23 Oct 2025 19:21:53 +0530 Subject: [PATCH] Revert "feat: improve overall repository state, improve DX" --- .husky/pre-commit | 1 - .prettierignore | 6 - .prettierrc | 9 - eslint.config.js | 35 - lint-staged.config.js | 7 - package-lock.json | 2476 +---------------- package.json | 17 +- projects/cli/schematics/add/index.ts | 27 +- .../schematics/add/rules/add-registry-item.ts | 133 +- projects/cli/schematics/add/rules/index.ts | 2 +- projects/cli/schematics/add/schema.ts | 2 +- .../init/constants/styles.constants.ts | 16 +- projects/cli/schematics/init/index.ts | 27 +- projects/cli/schematics/init/rules/index.ts | 2 +- .../init/rules/install-dependencies.ts | 13 +- .../init/rules/setup-import-aliases.ts | 45 +- .../schematics/init/rules/setup-tailwind.ts | 40 +- .../init/rules/validate-base-color.ts | 14 +- .../schematics/init/rules/validate-project.ts | 18 +- projects/cli/schematics/init/schema.ts | 2 +- projects/cli/src/lib/cli.spec.ts | 5 +- projects/cli/src/lib/cli.ts | 12 +- projects/docs/src/app/app.config.server.ts | 4 +- projects/docs/src/app/app.config.ts | 19 +- projects/docs/src/app/app.html | 2 +- projects/docs/src/app/app.routes.server.ts | 4 +- projects/docs/src/app/app.routes.ts | 8 +- projects/docs/src/app/app.spec.ts | 2 +- projects/docs/src/app/app.ts | 2 +- projects/docs/src/app/pages/docs/cli/cli.html | 148 +- .../docs/src/app/pages/docs/cli/cli.spec.ts | 5 +- projects/docs/src/app/pages/docs/cli/cli.ts | 6 +- .../components-json/components-json.spec.ts | 5 +- .../docs/components-json/components-json.ts | 6 +- .../docs/components/accordion/accordion.ts | 10 +- .../accordion/accordion.variants.ts | 70 +- .../components/alert-dialog/alert-dialog.ts | 11 +- .../alert-dialog/alert-dialog.variants.ts | 193 +- .../pages/docs/components/alert/alert.spec.ts | 5 +- .../app/pages/docs/components/alert/alert.ts | 6 +- .../docs/components/alert/alert.variants.ts | 33 +- .../pages/docs/components/avatar/avatar.ts | 7 +- .../docs/components/avatar/avatar.variants.ts | 35 +- .../app/pages/docs/components/badge/badge.ts | 7 +- .../docs/components/badge/badge.variants.ts | 39 +- .../docs/components/breadcrumb/breadcrumb.ts | 9 +- .../breadcrumb/breadcrumb.variants.ts | 138 +- .../docs/components/button/button.spec.ts | 5 +- .../pages/docs/components/button/button.ts | 6 +- .../docs/components/button/button.variants.ts | 71 +- .../app/pages/docs/components/card/card.ts | 7 +- .../docs/components/card/card.variants.ts | 64 +- .../docs/components/checkbox/checkbox.ts | 6 +- .../components/checkbox/checkbox.variants.ts | 213 +- .../docs/components/components.routes.ts | 238 +- .../pages/docs/components/dialog/dialog.ts | 7 +- .../docs/components/dialog/dialog.variants.ts | 95 +- .../components/dropdown-menu/dropdown-menu.ts | 14 +- .../dropdown-menu/dropdown-menu.variants.ts | 189 +- .../app/pages/docs/components/input/input.ts | 6 +- .../docs/components/input/input.variants.ts | 122 +- .../app/pages/docs/components/label/label.ts | 8 +- .../docs/components/label/label.variants.ts | 78 +- .../pages/docs/components/popover/popover.ts | 7 +- .../components/popover/popover.variants.ts | 40 +- .../docs/components/progress/progress.ts | 8 +- .../components/progress/progress.variants.ts | 40 +- .../components/radio-group/radio-group.ts | 9 +- .../radio-group/radio-group.variants.ts | 75 +- .../docs/components/separator/separator.ts | 10 +- .../separator/separator.variants.ts | 27 +- .../app/pages/docs/components/sheet/sheet.ts | 6 +- .../docs/components/sheet/sheet.variants.ts | 333 +-- .../docs/components/skeleton/skeleton.ts | 6 +- .../components/skeleton/skeleton.variants.ts | 34 +- .../pages/docs/components/switch/switch.ts | 6 +- .../docs/components/switch/switch.variants.ts | 79 +- .../app/pages/docs/components/table/table.ts | 6 +- .../docs/components/table/table.variants.ts | 186 +- .../app/pages/docs/components/tabs/tabs.ts | 8 +- .../docs/components/tabs/tabs.variants.ts | 71 +- .../docs/components/textarea/textarea.ts | 6 +- .../components/textarea/textarea.variants.ts | 135 +- .../components/toggle-group/toggle-group.ts | 10 +- .../toggle-group/toggle-group.variants.ts | 79 +- .../pages/docs/components/toggle/toggle.ts | 6 +- .../docs/components/toggle/toggle.variants.ts | 59 +- .../pages/docs/components/tooltip/tooltip.ts | 7 +- .../components/tooltip/tooltip.variants.ts | 36 +- .../app/pages/docs/dark-mode/dark-mode.html | 355 +-- .../pages/docs/dark-mode/dark-mode.spec.ts | 5 +- .../src/app/pages/docs/dark-mode/dark-mode.ts | 6 +- projects/docs/src/app/pages/docs/docs.html | 4 +- .../docs/src/app/pages/docs/docs.routes.ts | 73 +- projects/docs/src/app/pages/docs/docs.spec.ts | 5 +- projects/docs/src/app/pages/docs/docs.ts | 27 +- .../pages/docs/installation/installation.html | 378 ++- .../docs/installation/installation.spec.ts | 5 +- .../pages/docs/installation/installation.ts | 10 +- .../pages/docs/introduction/introduction.html | 521 ++-- .../docs/introduction/introduction.spec.ts | 5 +- .../pages/docs/introduction/introduction.ts | 56 +- .../src/app/pages/docs/theming/theming.html | 275 +- .../app/pages/docs/theming/theming.spec.ts | 5 +- .../src/app/pages/docs/theming/theming.ts | 24 +- .../docs/src/app/pages/landing/landing.html | 261 +- .../src/app/pages/landing/landing.spec.ts | 5 +- .../docs/src/app/pages/landing/landing.ts | 104 +- projects/docs/src/app/pages/pages.routes.ts | 24 +- .../components/code-block/code-block.ts | 30 +- .../component-preview/component-preview.html | 401 ++- .../component-preview.spec.ts | 5 +- .../component-preview/component-preview.ts | 39 +- .../app/shared/components/footer/footer.html | 38 +- .../shared/components/footer/footer.spec.ts | 5 +- .../app/shared/components/footer/footer.ts | 6 +- .../app/shared/components/header/header.html | 89 +- .../shared/components/header/header.spec.ts | 5 +- .../app/shared/components/header/header.ts | 21 +- .../components/quick-links/quick-links.html | 47 +- .../quick-links/quick-links.spec.ts | 5 +- .../components/quick-links/quick-links.ts | 75 +- .../shared/components/sidebar/sidebar.html | 123 +- .../shared/components/sidebar/sidebar.spec.ts | 5 +- .../app/shared/components/sidebar/sidebar.ts | 24 +- .../src/app/shared/components/tab/tab.html | 4 +- .../src/app/shared/components/tab/tab.spec.ts | 5 +- .../docs/src/app/shared/components/tab/tab.ts | 2 +- .../src/app/shared/components/tabs/tabs.html | 36 +- .../app/shared/components/tabs/tabs.spec.ts | 5 +- .../src/app/shared/components/tabs/tabs.ts | 11 +- .../src/app/shared/pipes/safe-html-pipe.ts | 5 +- .../shared/services/docs-helper.service.ts | 28 +- .../services/highlight-theme.service.ts | 22 +- .../templates/component-docs.template.ts | 35 +- projects/docs/src/index.html | 320 +-- projects/docs/src/main.ts | 3 +- projects/ui/src/directives/accordion.ts | 133 +- projects/ui/src/directives/alert-dialog.ts | 263 +- projects/ui/src/directives/alert.ts | 100 +- projects/ui/src/directives/avatar.ts | 78 +- projects/ui/src/directives/badge.ts | 57 +- projects/ui/src/directives/breadcrumb.ts | 155 +- projects/ui/src/directives/button.ts | 81 +- projects/ui/src/directives/card.ts | 165 +- projects/ui/src/directives/checkbox.ts | 80 +- projects/ui/src/directives/dialog.ts | 191 +- projects/ui/src/directives/dropdown-menu.ts | 191 +- projects/ui/src/directives/form-field.ts | 89 +- projects/ui/src/directives/input.ts | 31 +- projects/ui/src/directives/label.ts | 31 +- projects/ui/src/directives/popover.ts | 95 +- projects/ui/src/directives/progress.ts | 62 +- projects/ui/src/directives/radio-group.ts | 113 +- projects/ui/src/directives/separator.ts | 37 +- projects/ui/src/directives/sheet.ts | 241 +- projects/ui/src/directives/skeleton.ts | 26 +- projects/ui/src/directives/switch.ts | 61 +- projects/ui/src/directives/table.ts | 146 +- projects/ui/src/directives/tabs.ts | 131 +- projects/ui/src/directives/textarea.ts | 28 +- projects/ui/src/directives/toggle-group.ts | 217 +- projects/ui/src/directives/toggle.ts | 92 +- projects/ui/src/directives/tooltip.ts | 113 +- projects/ui/src/public-api.ts | 2 +- tsconfig.json | 14 +- 166 files changed, 4343 insertions(+), 8323 deletions(-) delete mode 100644 .husky/pre-commit delete mode 100644 .prettierignore delete mode 100644 .prettierrc delete mode 100644 eslint.config.js delete mode 100644 lint-staged.config.js diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index f318141..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -npx lint-staged --concurrent false --relative diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 113709c..0000000 --- a/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -# Add files here to ignore them from prettier formatting -/dist -/coverage -/.nx/cache -/.nx/workspace-data -.angular diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index ef12155..0000000 --- a/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "singleQuote": true, - "semi": true, - "bracketSpacing": true, - "printWidth": 120, - "bracketSameLine": true, - "htmlWhitespaceSensitivity": "ignore", - "plugins": ["prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-tailwindcss"] -} diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index d94ba09..0000000 --- a/eslint.config.js +++ /dev/null @@ -1,35 +0,0 @@ -// @ts-check -const eslint = require("@eslint/js"); -const tseslint = require("typescript-eslint"); -const angular = require("angular-eslint"); -const eslintPluginPrettierRecommended = require("eslint-plugin-prettier/recommended"); - -module.exports = tseslint.config( - { - files: ["projects/**/*.ts"], - extends: [ - eslint.configs.recommended, - ...tseslint.configs.recommended, - ...tseslint.configs.stylistic, - ...angular.configs.tsRecommended, - eslintPluginPrettierRecommended, - ], - processor: angular.processInlineTemplates, - rules: { - "@angular-eslint/directive-selector": "off", - "@angular-eslint/component-selector": "off", - "@angular-eslint/no-input-rename": "off", - }, - }, - { - files: ["**/*.html"], - extends: [ - ...angular.configs.templateRecommended, - ...angular.configs.templateAccessibility, - eslintPluginPrettierRecommended, - ], - rules: { - "prettier/prettier": ["error", { parser: "angular" }], - }, - }, -); diff --git a/lint-staged.config.js b/lint-staged.config.js deleted file mode 100644 index 9ea0664..0000000 --- a/lint-staged.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - "src/**/*.{js,ts,jsx,tsx}": [ - (files) => `npx eslint --fix ${files.join(" ")} --concurrency auto`, - ], - "src/**/*.{html,css,scss,js,ts,jsx,tsx,json}": (files) => - `npx prettier --write ${files.join(" ")}`, -}; diff --git a/package-lock.json b/package-lock.json index ccbcc34..5529199 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,10 +40,7 @@ "@types/express": "^5.0.1", "@types/jasmine": "~5.1.0", "@types/node": "^20.17.19", - "angular-eslint": "20.4.0", "copyfiles": "^2.4.1", - "eslint": "^9.37.0", - "eslint-plugin-prettier": "^5.5.4", "jasmine-core": "~5.7.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", @@ -51,13 +48,8 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^20.1.0", - "prettier": "^3.6.2", - "prettier-plugin-organize-attributes": "^1.0.0", - "prettier-plugin-organize-imports": "^4.3.0", - "prettier-plugin-tailwindcss": "^0.7.1", "tw-animate-css": "^1.3.8", - "typescript": "~5.8.2", - "typescript-eslint": "8.46.0" + "typescript": "~5.8.2" } }, "node_modules/@algolia/client-abtesting": { @@ -341,111 +333,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-eslint/builder": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-20.4.0.tgz", - "integrity": "sha512-65mekrXZOurc2K6Ft7/aISiW9vsGcSTKvBxQVXarySBh1jzEvYKnG3tmiYP/ApTh6GPKrDo/XgbW85T67s9UXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": ">= 0.2000.0 < 0.2100.0", - "@angular-devkit/core": ">= 20.0.0 < 21.0.0" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-20.4.0.tgz", - "integrity": "sha512-u3I/yABCm+lda/AdnLKJnjdQp1i4BACgEKY9D6eKIgijcRtlvUc6Jq+43e1oPZLj+3DdrlABNcB8HsA/+RzikA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular-eslint/eslint-plugin": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-20.4.0.tgz", - "integrity": "sha512-gSQO18QLHt46UFjDcxkGhuFMKl4sPdFDnCZRZDpZC+4OZQ64f+xazPOveSoK1o4ttjSulfyXslE+I9bESmR5Mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "20.4.0", - "@angular-eslint/utils": "20.4.0", - "ts-api-utils": "^2.1.0" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-20.4.0.tgz", - "integrity": "sha512-AWXtpWfivSE3PIwTPkuACPww5qu8dn3p1nuGuk2M/3LoHJFAMVvH6y2toTqGSUSTKALSdYzGhxbRPyDy6aEzDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "20.4.0", - "@angular-eslint/utils": "20.4.0", - "aria-query": "5.3.2", - "axobject-query": "4.1.0" - }, - "peerDependencies": { - "@angular-eslint/template-parser": "20.4.0", - "@typescript-eslint/types": "^7.11.0 || ^8.0.0", - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/schematics": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-20.4.0.tgz", - "integrity": "sha512-VIJ1RW4wq4sMf6jVaKiUR0H28Oro7eb9SKVSL7ztef8qGR8BMFKpyJM9W5DZ1Q6RXYpC0E8Q4rKEiTe3K3KsBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": ">= 20.0.0 < 21.0.0", - "@angular-devkit/schematics": ">= 20.0.0 < 21.0.0", - "@angular-eslint/eslint-plugin": "20.4.0", - "@angular-eslint/eslint-plugin-template": "20.4.0", - "ignore": "7.0.5", - "semver": "7.7.2", - "strip-json-comments": "3.1.1" - } - }, - "node_modules/@angular-eslint/template-parser": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-20.4.0.tgz", - "integrity": "sha512-5Vyo/VJ1DrIsAkudFpZj1f7CpCLYuiTzTQksHTiZE18iYsLKRkEC7y9S6+TiHrdD96rhNxL28Pz9FDU4lIBjkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "20.4.0", - "eslint-scope": "^8.0.2" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/utils": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-20.4.0.tgz", - "integrity": "sha512-SkR4fdPc+40W/53JmF6Nz6EIXIxvoRzhOdUiHoBKr/6fWONQwm7Vq55vk11AdK/oKTDUQCJ84HExQw6mzFljtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "20.4.0" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, "node_modules/@angular/build": { "version": "20.1.3", "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.1.3.tgz", @@ -1619,171 +1506,6 @@ "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", - "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.16.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", - "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/js": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", - "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", - "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.16.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@floating-ui/core": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", @@ -1809,58 +1531,6 @@ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", "license": "MIT" }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@inquirer/ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.0.tgz", @@ -2984,44 +2654,6 @@ "tslib": "^2.3.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@npmcli/agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", @@ -3654,19 +3286,6 @@ "node": ">=14" } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, "node_modules/@rollup/plugin-json": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", @@ -4577,13 +4196,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -4638,856 +4250,53 @@ "@types/send": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz", - "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==", + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", + "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.0", - "@typescript-eslint/type-utils": "8.46.0", - "@typescript-eslint/utils": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "vite": "^6.0.0 || ^7.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/project-service": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", - "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.0", - "@typescript-eslint/types": "^8.46.0", - "debug": "^4.3.4" - }, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true, + "license": "ISC", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", - "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", - "dev": true, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 0.6" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", - "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz", - "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", - "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.46.0", - "@typescript-eslint/tsconfig-utils": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz", - "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", - "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.0.tgz", - "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/project-service": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", - "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.0", - "@typescript-eslint/types": "^8.46.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", - "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", - "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz", - "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", - "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.46.0", - "@typescript-eslint/tsconfig-utils": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", - "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.1.tgz", - "integrity": "sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.1", - "@typescript-eslint/types": "^8.46.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.1.tgz", - "integrity": "sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.1.tgz", - "integrity": "sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz", - "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.0", - "@typescript-eslint/utils": "8.46.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/project-service": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", - "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.0", - "@typescript-eslint/types": "^8.46.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", - "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", - "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz", - "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", - "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.46.0", - "@typescript-eslint/tsconfig-utils": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz", - "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", - "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.1.tgz", - "integrity": "sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.1.tgz", - "integrity": "sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.46.1", - "@typescript-eslint/tsconfig-utils": "8.46.1", - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.1.tgz", - "integrity": "sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.1", - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/typescript-estree": "8.46.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.1.tgz", - "integrity": "sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.1", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", - "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "peerDependencies": { - "vite": "^6.0.0 || ^7.0.0" - } - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", "engines": { @@ -5547,34 +4356,11 @@ "@algolia/monitoring": "1.32.0", "@algolia/recommend": "5.32.0", "@algolia/requester-browser-xhr": "5.32.0", - "@algolia/requester-fetch": "5.32.0", - "@algolia/requester-node-http": "5.32.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/angular-eslint": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-20.4.0.tgz", - "integrity": "sha512-kKMiFJF3LRcKEYQaHBPbMw5xH2UY8JWD9fVyEnOwOe18r7MGlY002JqbCYz4NsmSx3lGmQXnUH+Hibx4iQ0JkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": ">= 20.0.0 < 21.0.0", - "@angular-devkit/schematics": ">= 20.0.0 < 21.0.0", - "@angular-eslint/builder": "20.4.0", - "@angular-eslint/eslint-plugin": "20.4.0", - "@angular-eslint/eslint-plugin-template": "20.4.0", - "@angular-eslint/schematics": "20.4.0", - "@angular-eslint/template-parser": "20.4.0", - "@typescript-eslint/types": "^8.0.0", - "@typescript-eslint/utils": "^8.0.0" + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*", - "typescript-eslint": "^8.0.0" + "engines": { + "node": ">= 14.0.0" } }, "node_modules/ansi-colors": { @@ -5656,33 +4442,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5994,16 +4753,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001727", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", @@ -6618,13 +5367,6 @@ } } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -7073,264 +5815,6 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", - "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.1", - "@eslint/core": "^0.16.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.38.0", - "@eslint/plugin-kit": "^0.4.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", - "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.7" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/esquery": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", @@ -7343,19 +5827,6 @@ "node": ">=0.10" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -7372,16 +5843,6 @@ "dev": true, "license": "MIT" }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -7500,30 +5961,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -7531,13 +5968,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-uri": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", @@ -7555,16 +5985,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fdir": { "version": "6.4.6", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", @@ -7580,19 +6000,6 @@ } } }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -7640,23 +6047,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/find-up-simple": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", @@ -7664,24 +6054,10 @@ "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flatted": { @@ -7918,19 +6294,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -7949,13 +6312,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8162,16 +6518,6 @@ "node": ">=0.10.0" } }, - "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/ignore-walk": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", @@ -8222,23 +6568,6 @@ "dev": true, "license": "MIT" }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -8600,19 +6929,6 @@ "dev": true, "license": "MIT" }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", @@ -8633,13 +6949,6 @@ "node": ">=6" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, "node_modules/json-parse-even-better-errors": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", @@ -8657,13 +6966,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -9144,16 +7446,6 @@ "node": ">=10" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, "node_modules/less": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/less/-/less-4.4.0.tgz", @@ -9232,20 +7524,6 @@ "node": ">=0.10.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/lightningcss": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", @@ -9545,22 +7823,6 @@ "@lmdb/lmdb-win32-x64": "3.4.1" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -9568,13 +7830,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/log-symbols": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", @@ -9797,22 +8052,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -9827,6 +8073,7 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=8.6" }, @@ -10146,13 +8393,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, "node_modules/needle": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", @@ -10619,24 +8859,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/ora": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", @@ -10669,38 +8891,6 @@ "license": "MIT", "optional": true }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-map": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", @@ -10753,19 +8943,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -10852,16 +9029,6 @@ "node": ">= 0.8" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -10989,191 +9156,43 @@ }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/prettier-plugin-organize-attributes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-attributes/-/prettier-plugin-organize-attributes-1.0.0.tgz", - "integrity": "sha512-+NmameaLxbCcylEXsKPmawtzla5EE6ECqvGkpfQz4KM847fXDifB1gFnPQEpoADAq6IXg+cMI8Z0ISJEXa6fhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "prettier": "^3.0.0" - } - }, - "node_modules/prettier-plugin-organize-imports": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.3.0.tgz", - "integrity": "sha512-FxFz0qFhyBsGdIsb697f/EkvHzi5SZOhWAjxcx2dLt+Q532bAlhswcXGYB1yzjZ69kW8UoadFBw7TyNwlq96Iw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "prettier": ">=2.0", - "typescript": ">=2.9", - "vue-tsc": "^2.1.0 || 3" - }, - "peerDependenciesMeta": { - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/prettier-plugin-tailwindcss": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.7.1.tgz", - "integrity": "sha512-Bzv1LZcuiR1Sk02iJTS1QzlFNp/o5l2p3xkopwOrbPmtMeh3fK9rVW5M3neBQzHq+kGKj/4LGQMTNcTH4NGPtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.19" - }, - "peerDependencies": { - "@ianvs/prettier-plugin-sort-imports": "*", - "@prettier/plugin-hermes": "*", - "@prettier/plugin-oxc": "*", - "@prettier/plugin-pug": "*", - "@shopify/prettier-plugin-liquid": "*", - "@trivago/prettier-plugin-sort-imports": "*", - "@zackad/prettier-plugin-twig": "*", - "prettier": "^3.0", - "prettier-plugin-astro": "*", - "prettier-plugin-css-order": "*", - "prettier-plugin-jsdoc": "*", - "prettier-plugin-marko": "*", - "prettier-plugin-multiline-arrays": "*", - "prettier-plugin-organize-attributes": "*", - "prettier-plugin-organize-imports": "*", - "prettier-plugin-sort-imports": "*", - "prettier-plugin-svelte": "*" - }, - "peerDependenciesMeta": { - "@ianvs/prettier-plugin-sort-imports": { - "optional": true - }, - "@prettier/plugin-hermes": { - "optional": true - }, - "@prettier/plugin-oxc": { - "optional": true - }, - "@prettier/plugin-pug": { - "optional": true - }, - "@shopify/prettier-plugin-liquid": { - "optional": true - }, - "@trivago/prettier-plugin-sort-imports": { - "optional": true - }, - "@zackad/prettier-plugin-twig": { - "optional": true - }, - "prettier-plugin-astro": { - "optional": true - }, - "prettier-plugin-css-order": { - "optional": true - }, - "prettier-plugin-jsdoc": { - "optional": true - }, - "prettier-plugin-marko": { - "optional": true - }, - "prettier-plugin-multiline-arrays": { - "optional": true - }, - "prettier-plugin-organize-attributes": { - "optional": true - }, - "prettier-plugin-organize-imports": { - "optional": true + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, - "prettier-plugin-sort-imports": { - "optional": true + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" }, - "prettier-plugin-svelte": { - "optional": true + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, "node_modules/proc-log": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", @@ -11258,27 +9277,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -11385,16 +9383,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/restore-cursor": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", @@ -11422,17 +9410,6 @@ "node": ">= 4" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -11536,30 +9513,6 @@ "node": ">= 18" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -12281,19 +10234,6 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12320,22 +10260,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, "node_modules/tailwind-merge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.0.2.tgz", @@ -12578,19 +10502,6 @@ "node": ">=0.6" } }, - "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -12622,19 +10533,6 @@ "url": "https://github.com/sponsors/Wombosvideo" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -12675,211 +10573,6 @@ "node": ">=14.17" } }, - "node_modules/typescript-eslint": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.0.tgz", - "integrity": "sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.46.0", - "@typescript-eslint/parser": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.0", - "@typescript-eslint/utils": "8.46.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/project-service": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", - "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.0", - "@typescript-eslint/types": "^8.46.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", - "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", - "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz", - "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", - "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.46.0", - "@typescript-eslint/tsconfig-utils": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz", - "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", - "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/typescript-eslint/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/ua-parser-js": { "version": "0.7.40", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz", @@ -13203,16 +10896,6 @@ "node": ">= 8" } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -13481,19 +11164,6 @@ "node": "^20.19.0 || ^22.12.0 || >=23" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/yoctocolors-cjs": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", diff --git a/package.json b/package.json index 0eb4a71..eab97aa 100644 --- a/package.json +++ b/package.json @@ -4,15 +4,12 @@ "scripts": { "ng": "ng", "start": "ng serve", - "build": "npm run build:ui && npm run build:docs", + "build": "ng build", "build:docs": "ng build docs --configuration production", "build:ui": "ng build ui --configuration production", "watch": "ng build --watch --configuration development", "test": "ng test", - "serve:ssr:docs": "node dist/docs/server/server.mjs", - "lint": "ng lint", - "prepare": "husky", - "format": "prettier --write \"projects/**/*.{ts,html}\"" + "serve:ssr:docs": "node dist/docs/server/server.mjs" }, "prettier": { "overrides": [ @@ -58,10 +55,7 @@ "@types/express": "^5.0.1", "@types/jasmine": "~5.1.0", "@types/node": "^20.17.19", - "angular-eslint": "20.4.0", "copyfiles": "^2.4.1", - "eslint": "^9.37.0", - "eslint-plugin-prettier": "^5.5.4", "jasmine-core": "~5.7.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", @@ -69,12 +63,7 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^20.1.0", - "prettier": "^3.6.2", - "prettier-plugin-organize-attributes": "^1.0.0", - "prettier-plugin-organize-imports": "^4.3.0", - "prettier-plugin-tailwindcss": "^0.7.1", "tw-animate-css": "^1.3.8", - "typescript": "~5.8.2", - "typescript-eslint": "8.46.0" + "typescript": "~5.8.2" } } diff --git a/projects/cli/schematics/add/index.ts b/projects/cli/schematics/add/index.ts index 7d64213..d6796b4 100644 --- a/projects/cli/schematics/add/index.ts +++ b/projects/cli/schematics/add/index.ts @@ -5,46 +5,41 @@ import { addRegistryItem, getAllRegistryItems } from './rules'; export function add(options: AddRegistryItemSchema): Rule { return chain([ async (tree, context) => { + if (options.all) { // Add all components context.logger.info('📦 Adding all available SlateUI directives...'); return tree; } - + if (!options.itemName) { // Interactive prompt to select component context.logger.info('📋 Available SlateUI directives:'); - + try { const allItems = await getAllRegistryItems(); if (allItems && allItems.length > 0) { allItems.forEach((item, index) => { - context.logger.info( - ` ${index + 1}. ${item.name} - ${item.description || 'No description'}`, - ); + context.logger.info(` ${index + 1}. ${item.name} - ${item.description || 'No description'}`); }); - + context.logger.info('\n💡 Usage:'); - context.logger.info( - ' ng g cli:add # Add specific directive', - ); - context.logger.info( - ' ng g cli:add --all # Add all directives', - ); + context.logger.info(' ng g cli:add # Add specific directive'); + context.logger.info(' ng g cli:add --all # Add all directives'); } else { context.logger.error('❌ No directives found in registry.json'); } } catch (error) { context.logger.error(`❌ Error reading registry: ${error}`); } - + return tree; } return tree; }, addRegistryItem({ itemName: options.itemName, - all: options.all, - }), + all: options.all + }) ]); -} +} \ No newline at end of file diff --git a/projects/cli/schematics/add/rules/add-registry-item.ts b/projects/cli/schematics/add/rules/add-registry-item.ts index 280011a..348a449 100644 --- a/projects/cli/schematics/add/rules/add-registry-item.ts +++ b/projects/cli/schematics/add/rules/add-registry-item.ts @@ -3,10 +3,8 @@ import * as https from 'https'; import * as path from 'path'; // Constants -const SLATEUI_BASE_URL = - 'https://api.github.com/repos/angularcafe/slateui/contents/projects/ui/src'; -const SLATEUI_REGISTRY_URL = - 'https://api.github.com/repos/angularcafe/slateui/contents/registry.json'; +const SLATEUI_BASE_URL = 'https://api.github.com/repos/angularcafe/slateui/contents/projects/ui/src'; +const SLATEUI_REGISTRY_URL = 'https://api.github.com/repos/angularcafe/slateui/contents/registry.json'; const USER_AGENT = '@slateui/cli'; /** @@ -53,26 +51,24 @@ export function addRegistryItem(options: AddRegistryItemOptions): Rule { context.logger.error('No items found in registry.json'); return tree; } - + for (const item of allItems) { await addSingleItem(tree, context, item); } - + context.logger.info('✅ All directives added successfully!'); return tree; } - + if (!itemName) { context.logger.error('Item name is required when not using --all flag'); return tree; } - + const registryItem = await getRegistryItem(itemName); if (!registryItem) { - context.logger.error( - `Registry item "${itemName}" not found in registry.json`, - ); + context.logger.error(`Registry item "${itemName}" not found in registry.json`); return tree; } @@ -90,20 +86,18 @@ export function addRegistryItem(options: AddRegistryItemOptions): Rule { // Build the GitHub URL using the file path from registry const githubUrl = `${SLATEUI_BASE_URL}/${file.path}`; - + // First get the file metadata to extract download_url const fileInfo = await fetchFileInfo(githubUrl); if (!fileInfo || !fileInfo.download_url) { context.logger.error(`Failed to get file info for ${itemName}`); return tree; } - + const fileContent = await fetchRawFile(fileInfo.download_url); if (tree.exists(targetPath)) { - context.logger.warn( - `File already exists: ${targetPath}. Overwriting...`, - ); + context.logger.warn(`File already exists: ${targetPath}. Overwriting...`); tree.overwrite(targetPath, fileContent); } else { tree.create(targetPath, fileContent); @@ -124,18 +118,13 @@ async function fetchFileInfo(url: string): Promise { return new Promise((resolve, reject) => { const options = { headers: { - 'User-Agent': USER_AGENT, - }, + 'User-Agent': USER_AGENT + } }; - + https .get(url, options, (res) => { - if ( - res.statusCode && - res.statusCode >= 300 && - res.statusCode < 400 && - res.headers.location - ) { + if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) { // Handle redirects return resolve(fetchFileInfo(res.headers.location)); } @@ -164,18 +153,13 @@ async function fetchRawFile(url: string): Promise { return new Promise((resolve, reject) => { const options = { headers: { - 'User-Agent': USER_AGENT, - }, + 'User-Agent': USER_AGENT + } }; - + https .get(url, options, (res) => { - if ( - res.statusCode && - res.statusCode >= 300 && - res.statusCode < 400 && - res.headers.location - ) { + if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) { // Handle redirects return resolve(fetchRawFile(res.headers.location)); } @@ -203,24 +187,20 @@ async function fetchRawFile(url: string): Promise { async function getRegistryItem(itemName: string): Promise { try { const registry = await fetchRegistryFromGitHub(); - + if (!registry || !registry.items) { throw new Error('Invalid registry format from GitHub'); } - - const item = registry.items.find( - (item: RegistryItem) => item.name === itemName, - ); + + const item = registry.items.find((item: RegistryItem) => item.name === itemName); return item || null; + } catch (error) { throw new Error(`Failed to fetch registry from GitHub: ${error}`); } } -function resolveTargetPathFromType( - file: RegistryFile, - registryItem: RegistryItem, -): string { +function resolveTargetPathFromType(file: RegistryFile, registryItem: RegistryItem): string { const typeFolder = mapTypeToFolder(registryItem.type); const filename = path.basename(file.path || `${registryItem.name}.ts`); return path.join('ui', typeFolder, filename); @@ -237,27 +217,28 @@ function mapTypeToFolder(itemType: string): string { } } + + export async function getAllRegistryItems(): Promise { try { const registry = await fetchRegistryFromGitHub(); - + if (!registry || !registry.items) { throw new Error('Invalid registry format from GitHub'); } - + return registry.items; + } catch (error) { throw new Error(`Failed to fetch registry from GitHub: ${error}`); } } -async function addSingleItem( - tree: Tree, - context: SchematicContext, - registryItem: RegistryItem, -): Promise { +async function addSingleItem(tree: Tree, context: SchematicContext, registryItem: RegistryItem): Promise { try { const itemName = registryItem.name; + + // Only single-file generation is needed; iterate through defined files anyway for (const file of registryItem.files) { @@ -270,59 +251,48 @@ async function addSingleItem( tree.create(path.join(dirPath, '.gitkeep'), ''); tree.delete(path.join(dirPath, '.gitkeep')); } - + // Build the GitHub URL using the file path from registry const githubUrl = `${SLATEUI_BASE_URL}/${file.path}`; - + // First get the file metadata to extract download_url const fileInfo = await fetchFileInfo(githubUrl); if (!fileInfo || !fileInfo.download_url) { context.logger.error(`Failed to get file info for ${itemName}`); return; } - + const fileContent = await fetchRawFile(fileInfo.download_url); if (tree.exists(targetPath)) { - context.logger.warn( - `File already exists: ${targetPath}. Overwriting...`, - ); + context.logger.warn(`File already exists: ${targetPath}. Overwriting...`); tree.overwrite(targetPath, fileContent); } else { tree.create(targetPath, fileContent); } } - } catch (error) { - context.logger.error(`❌ Error adding ${registryItem.name}: ${error}`); - } + } catch (error) { + context.logger.error(`❌ Error adding ${registryItem.name}: ${error}`); + } } async function fetchRegistryFromGitHub(): Promise<{ items: RegistryItem[] }> { return new Promise((resolve, reject) => { const options = { headers: { - 'User-Agent': USER_AGENT, - }, + 'User-Agent': USER_AGENT + } }; - + https .get(SLATEUI_REGISTRY_URL, options, (res) => { - if ( - res.statusCode && - res.statusCode >= 300 && - res.statusCode < 400 && - res.headers.location - ) { + if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) { // Handle redirects return resolve(fetchRegistryFromGitHub()); } if (res.statusCode && res.statusCode >= 400) { - reject( - new Error( - `HTTP ${res.statusCode} when fetching registry from GitHub`, - ), - ); + reject(new Error(`HTTP ${res.statusCode} when fetching registry from GitHub`)); return; } @@ -333,22 +303,15 @@ async function fetchRegistryFromGitHub(): Promise<{ items: RegistryItem[] }> { const parsed = JSON.parse(data); // The GitHub API returns content as base64 encoded if (parsed.content && parsed.encoding === 'base64') { - const decodedContent = Buffer.from( - parsed.content, - 'base64', - ).toString('utf-8'); + const decodedContent = Buffer.from(parsed.content, 'base64').toString('utf-8'); const registry = JSON.parse(decodedContent); - + // Validate registry structure if (!registry.items || !Array.isArray(registry.items)) { - reject( - new Error( - 'Invalid registry structure: missing or invalid items array', - ), - ); + reject(new Error('Invalid registry structure: missing or invalid items array')); return; } - + resolve(registry); } else { reject(new Error('Invalid registry content format from GitHub')); @@ -360,4 +323,4 @@ async function fetchRegistryFromGitHub(): Promise<{ items: RegistryItem[] }> { }) .on('error', (err) => reject(err)); }); -} +} \ No newline at end of file diff --git a/projects/cli/schematics/add/rules/index.ts b/projects/cli/schematics/add/rules/index.ts index 0fb0330..3a58bbf 100644 --- a/projects/cli/schematics/add/rules/index.ts +++ b/projects/cli/schematics/add/rules/index.ts @@ -1 +1 @@ -export * from './add-registry-item'; +export * from './add-registry-item'; \ No newline at end of file diff --git a/projects/cli/schematics/add/schema.ts b/projects/cli/schematics/add/schema.ts index a1f528d..d23301c 100644 --- a/projects/cli/schematics/add/schema.ts +++ b/projects/cli/schematics/add/schema.ts @@ -1,4 +1,4 @@ export interface AddRegistryItemSchema { itemName?: string; all?: boolean; -} +} \ No newline at end of file diff --git a/projects/cli/schematics/init/constants/styles.constants.ts b/projects/cli/schematics/init/constants/styles.constants.ts index 7a5c097..465f958 100644 --- a/projects/cli/schematics/init/constants/styles.constants.ts +++ b/projects/cli/schematics/init/constants/styles.constants.ts @@ -1,5 +1,5 @@ export const styles = { - neutral: ` + neutral: ` @import 'tailwindcss'; @import 'tw-animate-css'; @@ -84,8 +84,8 @@ export const styles = { @apply bg-background text-foreground; } }`, - - slate: ` + + slate: ` @import 'tailwindcss'; @import 'tw-animate-css'; @@ -171,7 +171,7 @@ export const styles = { } }`, - zinc: ` + zinc: ` @import 'tailwindcss'; @import 'tw-animate-css'; @@ -257,7 +257,7 @@ export const styles = { } }`, - stone: ` + stone: ` @import 'tailwindcss'; @import 'tw-animate-css'; @@ -343,7 +343,7 @@ export const styles = { } }`, - gray: ` + gray: ` @import 'tailwindcss'; @import 'tw-animate-css'; @@ -427,5 +427,5 @@ export const styles = { body { @apply bg-background text-foreground; } -}`, -}; +}` +}; \ No newline at end of file diff --git a/projects/cli/schematics/init/index.ts b/projects/cli/schematics/init/index.ts index 0db80d9..e161ee4 100644 --- a/projects/cli/schematics/init/index.ts +++ b/projects/cli/schematics/init/index.ts @@ -1,39 +1,28 @@ -import { - Rule, - SchematicContext, - Tree, - chain, -} from '@angular-devkit/schematics'; +import { Rule, SchematicContext, Tree, chain } from '@angular-devkit/schematics'; import { Schema } from './schema'; -import { - validateProject, - validateBaseColor, - installDependencies, - setupTailwind, - setupImportAliases, -} from './rules'; +import { validateProject, validateBaseColor, installDependencies, setupTailwind, setupImportAliases } from './rules'; export function init(options: Schema): Rule { return chain([ (tree: Tree, context: SchematicContext) => { const baseColor = options.baseColor || 'neutral'; const project = options.project; - + // Log the user selections context.logger.info('SlateUI Initialization Started'); context.logger.info(`Project: ${project || '(default)'}`); context.logger.info(`Base Color: ${baseColor}`); - + return tree; }, validateProject({ project: options.project }), validateBaseColor({ baseColor: options.baseColor || 'neutral' }), installDependencies(), - setupTailwind({ - project: options.project, + setupTailwind({ + project: options.project, baseColor: options.baseColor || 'neutral', - confirmOverwrite: options.confirmOverwrite, + confirmOverwrite: options.confirmOverwrite }), setupImportAliases(), ]); -} +} \ No newline at end of file diff --git a/projects/cli/schematics/init/rules/index.ts b/projects/cli/schematics/init/rules/index.ts index c5f1dec..597ccbc 100644 --- a/projects/cli/schematics/init/rules/index.ts +++ b/projects/cli/schematics/init/rules/index.ts @@ -2,4 +2,4 @@ export * from './validate-project'; export * from './validate-base-color'; export * from './install-dependencies'; export * from './setup-tailwind'; -export * from './setup-import-aliases'; +export * from './setup-import-aliases'; \ No newline at end of file diff --git a/projects/cli/schematics/init/rules/install-dependencies.ts b/projects/cli/schematics/init/rules/install-dependencies.ts index 4ab7254..6bc7bcf 100644 --- a/projects/cli/schematics/init/rules/install-dependencies.ts +++ b/projects/cli/schematics/init/rules/install-dependencies.ts @@ -3,13 +3,10 @@ import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks'; export function installDependencies(): Rule { return async (tree: Tree, context: SchematicContext) => { - context.addTask( - new NodePackageInstallTask({ - packageName: - '@angular/cdk @floating-ui/dom ng-primitives tailwind-variants tailwind-merge tw-animate-css tailwindcss @tailwindcss/postcss postcss', - }), - ); - + context.addTask(new NodePackageInstallTask({ + packageName: '@angular/cdk @floating-ui/dom ng-primitives tailwind-variants tailwind-merge tw-animate-css tailwindcss @tailwindcss/postcss postcss' + })); + return tree; }; -} +} \ No newline at end of file diff --git a/projects/cli/schematics/init/rules/setup-import-aliases.ts b/projects/cli/schematics/init/rules/setup-import-aliases.ts index 23e214d..1ee6c69 100644 --- a/projects/cli/schematics/init/rules/setup-import-aliases.ts +++ b/projects/cli/schematics/init/rules/setup-import-aliases.ts @@ -4,70 +4,62 @@ export function setupImportAliases(): Rule { return (tree: Tree, context: SchematicContext) => { try { const tsConfigPath = 'tsconfig.json'; - + if (!tree.exists(tsConfigPath)) { - context.logger.warn( - 'tsconfig.json not found, skipping import alias setup', - ); + context.logger.warn('tsconfig.json not found, skipping import alias setup'); return tree; } const tsConfigContent = tree.read(tsConfigPath)?.toString() || ''; - + // Check if the import alias already exists if (tsConfigContent.includes('@workspace/ui/*')) { - context.logger.info( - 'Import alias @workspace/ui/* already exists, skipping', - ); + context.logger.info('Import alias @workspace/ui/* already exists, skipping'); return tree; } // Find the paths section and add our alias let updatedContent = tsConfigContent; - + // Check if paths section exists if (tsConfigContent.includes('"paths"')) { // Find the paths section and add our alias const pathsRegex = /("paths"\s*:\s*\{)([^}]*)(\})/; const match = tsConfigContent.match(pathsRegex); - + if (match) { const beforePaths = match[1]; const pathsContent = match[2]; const afterPaths = match[3]; - + // Add our alias to the existing paths - const newPathsContent = - pathsContent.trim() + - (pathsContent.trim().endsWith(',') ? '' : ',') + + const newPathsContent = pathsContent.trim() + + (pathsContent.trim().endsWith(',') ? '' : ',') + '\n "@workspace/ui/*": ["./ui/*"]'; - + updatedContent = tsConfigContent.replace( pathsRegex, - beforePaths + newPathsContent + afterPaths, + beforePaths + newPathsContent + afterPaths ); } } else { // If no paths section exists, add it to compilerOptions const compilerOptionsRegex = /("compilerOptions"\s*:\s*\{)([^}]*)(\})/; const match = tsConfigContent.match(compilerOptionsRegex); - + if (match) { const beforeCompilerOptions = match[1]; const compilerOptionsContent = match[2]; const afterCompilerOptions = match[3]; - + // Add paths section to compilerOptions - const newCompilerOptionsContent = - compilerOptionsContent.trim() + - (compilerOptionsContent.trim().endsWith(',') ? '' : ',') + + const newCompilerOptionsContent = compilerOptionsContent.trim() + + (compilerOptionsContent.trim().endsWith(',') ? '' : ',') + '\n "paths": {\n "@workspace/ui/*": ["./ui/*"]\n }'; - + updatedContent = tsConfigContent.replace( compilerOptionsRegex, - beforeCompilerOptions + - newCompilerOptionsContent + - afterCompilerOptions, + beforeCompilerOptions + newCompilerOptionsContent + afterCompilerOptions ); } } @@ -79,10 +71,11 @@ export function setupImportAliases(): Rule { } else { context.logger.info('No changes needed for import aliases'); } + } catch (error) { context.logger.warn(`Failed to setup import aliases: ${error}`); } return tree; }; -} +} \ No newline at end of file diff --git a/projects/cli/schematics/init/rules/setup-tailwind.ts b/projects/cli/schematics/init/rules/setup-tailwind.ts index 941a65b..bfd4638 100644 --- a/projects/cli/schematics/init/rules/setup-tailwind.ts +++ b/projects/cli/schematics/init/rules/setup-tailwind.ts @@ -11,49 +11,47 @@ export interface SetupTailwindOptions { export function setupTailwind(options: SetupTailwindOptions): Rule { return async (tree: Tree, context: SchematicContext) => { let { project, baseColor, confirmOverwrite } = options; - + // If no project specified, get the default application project if (!project || project.trim() === '') { const workspace = await getWorkspace(tree); const allProjects = Array.from(workspace.projects.entries()); - const applicationProjects = allProjects.filter( - ([_, project]) => project.extensions.projectType === 'application', + const applicationProjects = allProjects.filter(([_, project]) => + project.extensions.projectType === 'application' ); const applicationProjectNames = applicationProjects.map(([name]) => name); - + if (applicationProjectNames.length === 0) { context.logger.error('No application projects found in workspace'); return tree; } project = applicationProjectNames[0]; } - + // Get the project configuration const workspace = await getWorkspace(tree); const selectedProject = workspace.projects.get(project); - + if (!selectedProject) { context.logger.error(`Project "${project}" not found`); return tree; } - + // Get the source root and determine the styles.css path const sourceRoot = selectedProject.sourceRoot || 'src'; const stylesPath = `${sourceRoot}/styles.css`; - + // Get the theme styles for the selected base color const themeStyles = styles[baseColor]; - + if (!themeStyles) { - context.logger.error( - `Theme styles not found for base color: ${baseColor}`, - ); + context.logger.error(`Theme styles not found for base color: ${baseColor}`); return tree; } - + // Check if styles.css exists and has content const fileExists = tree.exists(stylesPath); - + if (fileExists) { // File exists - check if user wants to overwrite if (confirmOverwrite === 'y' || confirmOverwrite === 'Y') { @@ -70,21 +68,21 @@ export function setupTailwind(options: SetupTailwindOptions): Rule { tree.create(stylesPath, themeStyles); context.logger.info(`Theme added to ${stylesPath}`); } - + // Create .postcssrc.json file in workspace root const postcssConfigPath = '.postcssrc.json'; const postcssConfig = { - plugins: { - '@tailwindcss/postcss': {}, - }, + "plugins": { + "@tailwindcss/postcss": {} + } }; - + if (tree.exists(postcssConfigPath)) { context.logger.info(`.postcssrc.json config already exists`); } else { tree.create(postcssConfigPath, JSON.stringify(postcssConfig, null, 2)); } - + return tree; }; -} +} \ No newline at end of file diff --git a/projects/cli/schematics/init/rules/validate-base-color.ts b/projects/cli/schematics/init/rules/validate-base-color.ts index 664271d..fb10fb7 100644 --- a/projects/cli/schematics/init/rules/validate-base-color.ts +++ b/projects/cli/schematics/init/rules/validate-base-color.ts @@ -6,24 +6,18 @@ export interface BaseColorValidationOptions { baseColor: BaseColor; } -const VALID_BASE_COLORS: BaseColor[] = [ - 'neutral', - 'slate', - 'zinc', - 'stone', - 'gray', -]; +const VALID_BASE_COLORS: BaseColor[] = ['neutral', 'slate', 'zinc', 'stone', 'gray']; export function validateBaseColor(options: BaseColorValidationOptions): Rule { return async (tree: Tree, context: SchematicContext) => { const { baseColor } = options; - + // Validate base color is valid if (!VALID_BASE_COLORS.includes(baseColor)) { context.logger.error(`Invalid base color: "${baseColor}"`); throw new Error(`Invalid base color: "${baseColor}"`); } - + return tree; }; -} +} \ No newline at end of file diff --git a/projects/cli/schematics/init/rules/validate-project.ts b/projects/cli/schematics/init/rules/validate-project.ts index d6d3cb8..27c015e 100644 --- a/projects/cli/schematics/init/rules/validate-project.ts +++ b/projects/cli/schematics/init/rules/validate-project.ts @@ -8,15 +8,15 @@ export interface ProjectValidationOptions { export function validateProject(options: ProjectValidationOptions): Rule { return async (tree: Tree, context: SchematicContext) => { let { project } = options; - + // Get workspace configuration and filter only application projects const workspace = await getWorkspace(tree); const allProjects = Array.from(workspace.projects.entries()); - const applicationProjects = allProjects.filter( - ([_, project]) => project.extensions.projectType === 'application', + const applicationProjects = allProjects.filter(([_, project]) => + project.extensions.projectType === 'application' ); const applicationProjectNames = applicationProjects.map(([name]) => name); - + // If no project specified, use the first available application project as default if (!project || project.trim() === '') { if (applicationProjectNames.length === 0) { @@ -26,21 +26,21 @@ export function validateProject(options: ProjectValidationOptions): Rule { project = applicationProjectNames[0]; context.logger.info(`Using default project: ${project}`); } - + // Validate project exists if (!workspace.projects.has(project)) { context.logger.error(`Project "${project}" not found in workspace`); throw new Error(`Project "${project}" not found in workspace`); } - + const selectedProject = workspace.projects.get(project)!; - + // Validate project is an application if (selectedProject.extensions.projectType !== 'application') { context.logger.error(`Project "${project}" is not an application`); throw new Error(`Project "${project}" is not an application`); } - + return tree; }; -} +} \ No newline at end of file diff --git a/projects/cli/schematics/init/schema.ts b/projects/cli/schematics/init/schema.ts index 0b227c1..bb9d06b 100644 --- a/projects/cli/schematics/init/schema.ts +++ b/projects/cli/schematics/init/schema.ts @@ -2,4 +2,4 @@ export interface Schema { baseColor: 'neutral' | 'slate' | 'zinc' | 'stone' | 'gray'; project?: string; confirmOverwrite?: string; -} +} \ No newline at end of file diff --git a/projects/cli/src/lib/cli.spec.ts b/projects/cli/src/lib/cli.spec.ts index 534efe0..7a0ed96 100644 --- a/projects/cli/src/lib/cli.spec.ts +++ b/projects/cli/src/lib/cli.spec.ts @@ -8,8 +8,9 @@ describe('Cli', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [Cli], - }).compileComponents(); + imports: [Cli] + }) + .compileComponents(); fixture = TestBed.createComponent(Cli); component = fixture.componentInstance; diff --git a/projects/cli/src/lib/cli.ts b/projects/cli/src/lib/cli.ts index 07012c3..d9fe191 100644 --- a/projects/cli/src/lib/cli.ts +++ b/projects/cli/src/lib/cli.ts @@ -3,7 +3,13 @@ import { Component } from '@angular/core'; @Component({ selector: 'lib-cli', imports: [], - template: `

cli works!

`, - styles: ``, + template: ` +

+ cli works! +

+ `, + styles: `` }) -export class Cli {} +export class Cli { + +} diff --git a/projects/docs/src/app/app.config.server.ts b/projects/docs/src/app/app.config.server.ts index 608887d..41031f1 100644 --- a/projects/docs/src/app/app.config.server.ts +++ b/projects/docs/src/app/app.config.server.ts @@ -4,7 +4,9 @@ import { appConfig } from './app.config'; import { serverRoutes } from './app.routes.server'; const serverConfig: ApplicationConfig = { - providers: [provideServerRendering(withRoutes(serverRoutes))], + providers: [ + provideServerRendering(withRoutes(serverRoutes)) + ] }; export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/projects/docs/src/app/app.config.ts b/projects/docs/src/app/app.config.ts index 58030b6..ec5f6af 100644 --- a/projects/docs/src/app/app.config.ts +++ b/projects/docs/src/app/app.config.ts @@ -1,22 +1,15 @@ -import { - ApplicationConfig, - provideBrowserGlobalErrorListeners, - provideZonelessChangeDetection, -} from '@angular/core'; +import { ApplicationConfig, provideBrowserGlobalErrorListeners, provideZonelessChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { provideSlateUiTheme } from '@slateui/theme'; import { routes } from './app.routes'; -import { - provideClientHydration, - withEventReplay, -} from '@angular/platform-browser'; +import { provideClientHydration, withEventReplay } from '@angular/platform-browser'; import { provideHighlightOptions } from 'ngx-highlightjs'; export const appConfig: ApplicationConfig = { providers: [ provideBrowserGlobalErrorListeners(), provideZonelessChangeDetection(), - provideRouter(routes), + provideRouter(routes), provideClientHydration(withEventReplay()), provideSlateUiTheme({ strategy: 'class', @@ -29,10 +22,10 @@ export const appConfig: ApplicationConfig = { html: () => import('highlight.js/lib/languages/xml'), bash: () => import('highlight.js/lib/languages/bash'), css: () => import('highlight.js/lib/languages/css'), - json: () => import('highlight.js/lib/languages/json'), + json: () => import('highlight.js/lib/languages/json') }, // Theme configuration for light/dark mode - themePath: 'assets/styles/highlight-themes/github.css', + themePath: 'assets/styles/highlight-themes/github.css' }), - ], + ] }; diff --git a/projects/docs/src/app/app.html b/projects/docs/src/app/app.html index 67e7bd4..12b5d24 100644 --- a/projects/docs/src/app/app.html +++ b/projects/docs/src/app/app.html @@ -1 +1 @@ - + \ No newline at end of file diff --git a/projects/docs/src/app/app.routes.server.ts b/projects/docs/src/app/app.routes.server.ts index 28c14c5..ffd37b1 100644 --- a/projects/docs/src/app/app.routes.server.ts +++ b/projects/docs/src/app/app.routes.server.ts @@ -3,6 +3,6 @@ import { RenderMode, ServerRoute } from '@angular/ssr'; export const serverRoutes: ServerRoute[] = [ { path: '**', - renderMode: RenderMode.Prerender, - }, + renderMode: RenderMode.Prerender + } ]; diff --git a/projects/docs/src/app/app.routes.ts b/projects/docs/src/app/app.routes.ts index e569b17..b36d320 100644 --- a/projects/docs/src/app/app.routes.ts +++ b/projects/docs/src/app/app.routes.ts @@ -1,8 +1,8 @@ import { Routes } from '@angular/router'; export const routes: Routes = [ - { - path: '', - loadChildren: () => import('./pages/pages.routes').then((m) => m.routes), - }, + { + path: '', + loadChildren: () => import('./pages/pages.routes').then(m => m.routes) + } ]; diff --git a/projects/docs/src/app/app.spec.ts b/projects/docs/src/app/app.spec.ts index a9128d1..e95ea3d 100644 --- a/projects/docs/src/app/app.spec.ts +++ b/projects/docs/src/app/app.spec.ts @@ -6,7 +6,7 @@ describe('App', () => { beforeEach(async () => { await TestBed.configureTestingModule({ imports: [App], - providers: [provideZonelessChangeDetection()], + providers: [provideZonelessChangeDetection()] }).compileComponents(); }); diff --git a/projects/docs/src/app/app.ts b/projects/docs/src/app/app.ts index 5512462..f173f8a 100644 --- a/projects/docs/src/app/app.ts +++ b/projects/docs/src/app/app.ts @@ -5,7 +5,7 @@ import { HighlightThemeService } from './shared/services/highlight-theme.service @Component({ selector: 'app-root', imports: [RouterOutlet], - templateUrl: './app.html', + templateUrl: './app.html' }) export class App { // Inject the service to ensure it's initialized diff --git a/projects/docs/src/app/pages/docs/cli/cli.html b/projects/docs/src/app/pages/docs/cli/cli.html index 48293c6..e2b1991 100644 --- a/projects/docs/src/app/pages/docs/cli/cli.html +++ b/projects/docs/src/app/pages/docs/cli/cli.html @@ -1,86 +1,84 @@
-
-

CLI

-

- Use the SlateUI CLI to add components to your Angular project. -

-
- - -
-

Installation

-

- Install the SlateUI CLI as a dev dependency in your project: -

- - +

CLI

+

+ Use the SlateUI CLI to add components to your Angular project. +

-
- - -
-

init

-
-

- Use the init command to initialize - configuration and dependencies for a new project. -

-

- The init command installs dependencies, - adds the cn util and configures CSS - variables for the project. -

-
- - -
+ +
+

Installation

+
+

+ Install the SlateUI CLI as a dev dependency in your project: +

+ + +
-
- -
-

add

-
-

- Use the add command to add components - and dependencies to your project. -

+ +
+

init

+
+

+ Use the init command to initialize configuration and dependencies for a new project. +

+

+ The init command installs dependencies, adds the cn util and configures CSS variables for the project. +

+ +
+ + +
+
+
-
- - - - - - -
+ +
+

add

+
+

+ Use the add command to add components and dependencies to your project. +

+ +
+ + + + + + +
+
-
- -
-

Next Steps

-
-

- After successfully adding components with the CLI: -

-
    -
  • Review the generated component files in your project
  • -
  • Check the updated Tailwind CSS configuration
  • -
  • Import and use the components in your Angular components
  • -
  • Customize the styling using the provided CSS variables
  • -
  • Explore the component variants and props
  • -
+ +
+

Next Steps

+
+

+ After successfully adding components with the CLI: +

+
    +
  • Review the generated component files in your project
  • +
  • Check the updated Tailwind CSS configuration
  • +
  • Import and use the components in your Angular components
  • +
  • Customize the styling using the provided CSS variables
  • +
  • Explore the component variants and props
  • +
+
-
diff --git a/projects/docs/src/app/pages/docs/cli/cli.spec.ts b/projects/docs/src/app/pages/docs/cli/cli.spec.ts index 534efe0..7a0ed96 100644 --- a/projects/docs/src/app/pages/docs/cli/cli.spec.ts +++ b/projects/docs/src/app/pages/docs/cli/cli.spec.ts @@ -8,8 +8,9 @@ describe('Cli', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [Cli], - }).compileComponents(); + imports: [Cli] + }) + .compileComponents(); fixture = TestBed.createComponent(Cli); component = fixture.componentInstance; diff --git a/projects/docs/src/app/pages/docs/cli/cli.ts b/projects/docs/src/app/pages/docs/cli/cli.ts index 14ccd53..c482846 100644 --- a/projects/docs/src/app/pages/docs/cli/cli.ts +++ b/projects/docs/src/app/pages/docs/cli/cli.ts @@ -5,6 +5,8 @@ import { CodeBlock } from '../../../shared/components/code-block/code-block'; selector: 'docs-cli', standalone: true, imports: [CodeBlock], - templateUrl: './cli.html', + templateUrl: './cli.html' }) -export class Cli {} +export class Cli { + +} diff --git a/projects/docs/src/app/pages/docs/components-json/components-json.spec.ts b/projects/docs/src/app/pages/docs/components-json/components-json.spec.ts index b52d196..ad70505 100644 --- a/projects/docs/src/app/pages/docs/components-json/components-json.spec.ts +++ b/projects/docs/src/app/pages/docs/components-json/components-json.spec.ts @@ -8,8 +8,9 @@ describe('ComponentsJson', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ComponentsJson], - }).compileComponents(); + imports: [ComponentsJson] + }) + .compileComponents(); fixture = TestBed.createComponent(ComponentsJson); component = fixture.componentInstance; diff --git a/projects/docs/src/app/pages/docs/components-json/components-json.ts b/projects/docs/src/app/pages/docs/components-json/components-json.ts index 4b9f4c4..783d0c1 100644 --- a/projects/docs/src/app/pages/docs/components-json/components-json.ts +++ b/projects/docs/src/app/pages/docs/components-json/components-json.ts @@ -4,6 +4,8 @@ import { Component } from '@angular/core'; selector: 'docs-components-json', standalone: true, imports: [], - templateUrl: './components-json.html', + templateUrl: './components-json.html' }) -export class ComponentsJson {} +export class ComponentsJson { + +} diff --git a/projects/docs/src/app/pages/docs/components/accordion/accordion.ts b/projects/docs/src/app/pages/docs/components/accordion/accordion.ts index b23d2c8..9576962 100644 --- a/projects/docs/src/app/pages/docs/components/accordion/accordion.ts +++ b/projects/docs/src/app/pages/docs/components/accordion/accordion.ts @@ -6,14 +6,14 @@ import { accordionVariants, accordionMeta } from './accordion.variants'; selector: 'docs-accordion', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Accordion { accordionMeta = accordionMeta; accordionVariants = accordionVariants; } + diff --git a/projects/docs/src/app/pages/docs/components/accordion/accordion.variants.ts b/projects/docs/src/app/pages/docs/components/accordion/accordion.variants.ts index e3963cf..35860fb 100644 --- a/projects/docs/src/app/pages/docs/components/accordion/accordion.variants.ts +++ b/projects/docs/src/app/pages/docs/components/accordion/accordion.variants.ts @@ -1,14 +1,6 @@ import { Component } from '@angular/core'; -import { - UiAccordion, - UiAccordionContent, - UiAccordionItem, - UiAccordionTrigger, -} from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { UiAccordion, UiAccordionContent, UiAccordionItem, UiAccordionTrigger } from 'ui'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; import { lucideChevronDown } from '@ng-icons/lucide'; @@ -31,23 +23,16 @@ import { lucideChevronDown } from '@ng-icons/lucide';
- Yes. It's unstyled by default, giving you freedom over the look and - feel. + Yes. It's unstyled by default, giving you freedom over the look and feel.
`, providers: [provideIcons({ lucideChevronDown })], - imports: [ - UiAccordion, - UiAccordionItem, - UiAccordionTrigger, - UiAccordionContent, - NgIcon, - ], + imports: [UiAccordion, UiAccordionItem, UiAccordionTrigger, UiAccordionContent, NgIcon], host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + class: 'w-2/3 space-y-6 mx-auto' + } }) export class AccordionDefaultExample { onValueChange(value: any) { @@ -61,40 +46,20 @@ export const accordionMeta: IComponentMeta = { installation: { package: 'accordion', import: `import { UiAccordion, UiAccordionItem, UiAccordionTrigger, UiAccordionContent } from '@workspace/ui/directives/accordion';`, - usage: `
Header
Content
`, + usage: `
Header
Content
` }, api: { props: [ - { - name: 'uiAccordionType', - type: '"single" | "multiple"', - description: 'Accordion behavior type.', - }, - { - name: 'uiAccordionCollapsible', - type: 'boolean', - description: 'Allow closing the active item.', - }, - { - name: 'uiAccordionValue', - type: 'string', - description: 'Accordion value (for controlled state).', - }, - { - name: 'uiAccordionDisabled', - type: 'boolean', - description: 'Whether the accordion is disabled.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, + { name: 'uiAccordionType', type: '"single" | "multiple"', description: 'Accordion behavior type.' }, + { name: 'uiAccordionCollapsible', type: 'boolean', description: 'Allow closing the active item.' }, + { name: 'uiAccordionValue', type: 'string', description: 'Accordion value (for controlled state).' }, + { name: 'uiAccordionDisabled', type: 'boolean', description: 'Whether the accordion is disabled.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } ], outputs: [ - { - name: 'uiAccordionValueChange', - type: 'EventEmitter', - description: 'Emitted when the accordion value changes.', - }, - ], - }, + { name: 'uiAccordionValueChange', type: 'EventEmitter', description: 'Emitted when the accordion value changes.' } + ] + } }; export const accordionVariants: IVariant[] = [ @@ -133,6 +98,7 @@ import { lucideChevronDown } from '@ng-icons/lucide'; imports: [UiAccordion, UiAccordionItem, UiAccordionTrigger, UiAccordionContent, NgIcon] }) export class AccordionDefaultExample {}`, - component: AccordionDefaultExample, - }, + component: AccordionDefaultExample + } ]; + diff --git a/projects/docs/src/app/pages/docs/components/alert-dialog/alert-dialog.ts b/projects/docs/src/app/pages/docs/components/alert-dialog/alert-dialog.ts index dc063da..c116549 100644 --- a/projects/docs/src/app/pages/docs/components/alert-dialog/alert-dialog.ts +++ b/projects/docs/src/app/pages/docs/components/alert-dialog/alert-dialog.ts @@ -1,17 +1,16 @@ import { Component } from '@angular/core'; import { ComponentPreview } from '@components/component-preview/component-preview'; -import { alertDialogVariants, alertDialogMeta } from './alert-dialog.variants'; +import { alertDialogVariants, alertDialogMeta } from './alert-dialog.variants' @Component({ selector: 'docs-alert-dialog', imports: [ComponentPreview], template: ` - + - `, + ` }) export class AlertDialog { alertDialogMeta = alertDialogMeta; diff --git a/projects/docs/src/app/pages/docs/components/alert-dialog/alert-dialog.variants.ts b/projects/docs/src/app/pages/docs/components/alert-dialog/alert-dialog.variants.ts index 7cc2f37..80213a3 100644 --- a/projects/docs/src/app/pages/docs/components/alert-dialog/alert-dialog.variants.ts +++ b/projects/docs/src/app/pages/docs/components/alert-dialog/alert-dialog.variants.ts @@ -1,165 +1,99 @@ import { Component } from '@angular/core'; -import { - UiAlertDialog, - UiAlertDialogDescription, - UiAlertDialogFooter, - UiAlertDialogHeader, - UiAlertDialogOverlay, - UiAlertDialogTitle, - UiAlertDialogTrigger, - UiAlertDialogCancel, - UiAlertDialogAction, -} from 'ui'; +import { UiAlertDialog, UiAlertDialogDescription, UiAlertDialogFooter, UiAlertDialogHeader, UiAlertDialogOverlay, UiAlertDialogTitle, UiAlertDialogTrigger, UiAlertDialogCancel, UiAlertDialogAction } from 'ui'; import { UiButton } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; import { lucideTriangleAlert } from '@ng-icons/lucide'; @Component({ selector: 'alert-dialog-default-example', template: ` - + - - - - Are you absolutely sure? - - This action cannot be undone. This will permanently delete your - account and remove your data from our servers. - - - - - - - - - - - - + + + + Are you absolutely sure? + + This action cannot be undone. This will permanently delete your account + and remove your data from our servers. + + + + + + + + + + + + `, - imports: [ - UiAlertDialog, - UiAlertDialogHeader, - UiAlertDialogTitle, - UiAlertDialogDescription, - UiAlertDialogFooter, - UiAlertDialogTrigger, - UiAlertDialogOverlay, - UiAlertDialogCancel, - UiAlertDialogAction, - UiButton, - ], + imports: [UiAlertDialog, UiAlertDialogHeader, UiAlertDialogTitle, UiAlertDialogDescription, UiAlertDialogFooter, UiAlertDialogTrigger, UiAlertDialogOverlay, UiAlertDialogCancel, UiAlertDialogAction, UiButton] }) export class AlertDialogDefaultExample {} @Component({ selector: 'alert-dialog-destructive-example', template: ` - + - - - -
- - - - Delete Account -
- - This action cannot be undone. This will permanently delete your - account and remove your data from our servers. - -
- - - - - - - - -
-
+ + + +
+ + + + Delete Account +
+ + This action cannot be undone. This will permanently delete your account + and remove your data from our servers. + +
+ + + + + + + + +
+
`, providers: [provideIcons({ lucideTriangleAlert })], - imports: [ - UiAlertDialog, - UiAlertDialogHeader, - UiAlertDialogTitle, - UiAlertDialogDescription, - UiAlertDialogFooter, - UiAlertDialogTrigger, - UiAlertDialogOverlay, - UiAlertDialogCancel, - UiAlertDialogAction, - UiButton, - NgIcon, - ], + imports: [UiAlertDialog, UiAlertDialogHeader, UiAlertDialogTitle, UiAlertDialogDescription, UiAlertDialogFooter, UiAlertDialogTrigger, UiAlertDialogOverlay, UiAlertDialogCancel, UiAlertDialogAction, UiButton, NgIcon] }) export class AlertDialogDestructiveExample {} export const alertDialogMeta: IComponentMeta = { title: 'Alert Dialog', - description: - 'A modal dialog that interrupts the user with important content and expects a response.', + description: 'A modal dialog that interrupts the user with important content and expects a response.', installation: { package: 'alert-dialog', import: `import { UiAlertDialog, UiAlertDialogTrigger, UiAlertDialogHeader, UiAlertDialogTitle, UiAlertDialogDescription, UiAlertDialogFooter, UiAlertDialogOverlay, UiAlertDialogCancel, UiAlertDialogAction } from '@workspace/ui/alert-dialog';`, - usage: `
...
`, + usage: `
...
` }, api: { props: [ - { - name: 'uiAlertDialogTrigger', - type: 'TemplateRef', - description: 'Template ref for alert dialog content.', - }, - { - name: 'uiAlertDialogModal', - type: 'boolean', - description: 'Whether the alert dialog is modal.', - }, - { - name: 'uiAlertDialogCancel', - type: 'Directive', - description: 'Cancel button directive for the alert dialog.', - }, - { - name: 'uiAlertDialogAction', - type: 'Directive', - description: 'Action button directive for the alert dialog.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, - ], - }, + { name: 'uiAlertDialogTrigger', type: 'TemplateRef', description: 'Template ref for alert dialog content.' }, + { name: 'uiAlertDialogModal', type: 'boolean', description: 'Whether the alert dialog is modal.' }, + { name: 'uiAlertDialogCancel', type: 'Directive', description: 'Cancel button directive for the alert dialog.' }, + { name: 'uiAlertDialogAction', type: 'Directive', description: 'Action button directive for the alert dialog.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } + ] + } }; export const alertDialogVariants: IVariant[] = [ { title: 'Default', - description: - 'Basic alert dialog with header, description, and action buttons.', + description: 'Basic alert dialog with header, description, and action buttons.', code: `import { UiAlertDialog, UiAlertDialogTrigger, UiAlertDialogHeader, UiAlertDialogTitle, UiAlertDialogDescription, UiAlertDialogFooter, UiAlertDialogOverlay, UiAlertDialogCancel, UiAlertDialogAction } from '@workspace/ui/alert-dialog'; import { UiButton } from '@workspace/ui/button'; @@ -192,12 +126,11 @@ import { UiButton } from '@workspace/ui/button'; imports: [UiAlertDialog, UiAlertDialogHeader, UiAlertDialogTitle, UiAlertDialogDescription, UiAlertDialogFooter, UiAlertDialogTrigger, UiAlertDialogOverlay, UiAlertDialogCancel, UiAlertDialogAction, UiButton] }) export class AlertDialogDefaultExample {}`, - component: AlertDialogDefaultExample, + component: AlertDialogDefaultExample }, { title: 'Destructive', - description: - 'Alert dialog with destructive action styling and warning icon.', + description: 'Alert dialog with destructive action styling and warning icon.', code: `import { UiAlertDialog, UiAlertDialogTrigger, UiAlertDialogHeader, UiAlertDialogTitle, UiAlertDialogDescription, UiAlertDialogFooter, UiAlertDialogOverlay, UiAlertDialogCancel, UiAlertDialogAction } from '@workspace/ui/alert-dialog'; import { UiButton } from '@workspace/ui/button'; import { NgIcon, provideIcons } from '@ng-icons/core'; @@ -238,6 +171,6 @@ import { lucideTriangle } from '@ng-icons/lucide'; imports: [UiAlertDialog, UiAlertDialogHeader, UiAlertDialogTitle, UiAlertDialogDescription, UiAlertDialogFooter, UiAlertDialogTrigger, UiAlertDialogOverlay, UiAlertDialogCancel, UiAlertDialogAction, UiButton, NgIcon] }) export class AlertDialogDestructiveExample {}`, - component: AlertDialogDestructiveExample, - }, + component: AlertDialogDestructiveExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/alert/alert.spec.ts b/projects/docs/src/app/pages/docs/components/alert/alert.spec.ts index 3e62f76..a714d98 100644 --- a/projects/docs/src/app/pages/docs/components/alert/alert.spec.ts +++ b/projects/docs/src/app/pages/docs/components/alert/alert.spec.ts @@ -8,8 +8,9 @@ describe('Alert', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [Alert], - }).compileComponents(); + imports: [Alert] + }) + .compileComponents(); fixture = TestBed.createComponent(Alert); component = fixture.componentInstance; diff --git a/projects/docs/src/app/pages/docs/components/alert/alert.ts b/projects/docs/src/app/pages/docs/components/alert/alert.ts index 37dc334..eb5a960 100644 --- a/projects/docs/src/app/pages/docs/components/alert/alert.ts +++ b/projects/docs/src/app/pages/docs/components/alert/alert.ts @@ -6,9 +6,11 @@ import { alertVariants, alertMeta } from './alert.variants'; selector: 'docs-alert', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Alert { alertMeta = alertMeta; diff --git a/projects/docs/src/app/pages/docs/components/alert/alert.variants.ts b/projects/docs/src/app/pages/docs/components/alert/alert.variants.ts index fcfac86..d81fc0c 100644 --- a/projects/docs/src/app/pages/docs/components/alert/alert.variants.ts +++ b/projects/docs/src/app/pages/docs/components/alert/alert.variants.ts @@ -1,9 +1,6 @@ import { Component } from '@angular/core'; import { UiAlert, UiAlertDescription, UiAlertTitle } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; import { lucideCircleAlert } from '@ng-icons/lucide'; @@ -18,7 +15,7 @@ import { lucideCircleAlert } from '@ng-icons/lucide'; `, - imports: [UiAlert, UiAlertTitle, UiAlertDescription], + imports: [UiAlert, UiAlertTitle, UiAlertDescription] }) export class AlertDefaultExample {} @@ -32,7 +29,7 @@ export class AlertDefaultExample {} `, - imports: [UiAlert, UiAlertTitle, UiAlertDescription], + imports: [UiAlert, UiAlertTitle, UiAlertDescription] }) export class AlertDestructiveExample {} @@ -48,7 +45,7 @@ export class AlertDestructiveExample {} `, providers: [provideIcons({ lucideCircleAlert })], - imports: [UiAlert, UiAlertTitle, UiAlertDescription, NgIcon], + imports: [UiAlert, UiAlertTitle, UiAlertDescription, NgIcon] }) export class AlertWithIconExample {} @@ -61,7 +58,7 @@ export const alertMeta: IComponentMeta = { usage: ` Alert Title Alert description -`, +` }, api: { props: [ @@ -69,15 +66,15 @@ export const alertMeta: IComponentMeta = { name: 'variant', type: '"default" | "destructive"', default: '"default"', - description: 'The visual variant of the alert.', + description: 'The visual variant of the alert.' }, { name: 'class', type: 'string', - description: 'Additional CSS classes to apply to the alert.', - }, - ], - }, + description: 'Additional CSS classes to apply to the alert.' + } + ] + } }; export const alertVariants: IVariant[] = [ @@ -99,7 +96,7 @@ export const alertVariants: IVariant[] = [ imports: [UiAlert, UiAlertTitle, UiAlertDescription] }) export class AlertDefaultExample {}`, - component: AlertDefaultExample, + component: AlertDefaultExample }, { title: 'Destructive', @@ -119,7 +116,7 @@ export class AlertDefaultExample {}`, imports: [UiAlert, UiAlertTitle, UiAlertDescription] }) export class AlertDestructiveExample {}`, - component: AlertDestructiveExample, + component: AlertDestructiveExample }, { title: 'With Icon', @@ -143,6 +140,6 @@ import { lucideCircleAlert } from '@ng-icons/lucide'; imports: [UiAlert, UiAlertTitle, UiAlertDescription, NgIcon] }) export class AlertWithIconExample {}`, - component: AlertWithIconExample, - }, -]; + component: AlertWithIconExample + } +]; \ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/components/avatar/avatar.ts b/projects/docs/src/app/pages/docs/components/avatar/avatar.ts index 4760158..ab06dba 100644 --- a/projects/docs/src/app/pages/docs/components/avatar/avatar.ts +++ b/projects/docs/src/app/pages/docs/components/avatar/avatar.ts @@ -6,11 +6,14 @@ import { avatarVariants, avatarMeta } from './avatar.variants'; selector: 'docs-avatar', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Avatar { avatarMeta = avatarMeta; avatarVariants = avatarVariants; } + diff --git a/projects/docs/src/app/pages/docs/components/avatar/avatar.variants.ts b/projects/docs/src/app/pages/docs/components/avatar/avatar.variants.ts index f84d7ad..a3c210d 100644 --- a/projects/docs/src/app/pages/docs/components/avatar/avatar.variants.ts +++ b/projects/docs/src/app/pages/docs/components/avatar/avatar.variants.ts @@ -1,9 +1,6 @@ import { Component } from '@angular/core'; import { UiAvatar, UiAvatarFallback, UiAvatarImage } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; @Component({ selector: 'avatar-default-example', @@ -13,7 +10,7 @@ import { AB `, - imports: [UiAvatar, UiAvatarImage, UiAvatarFallback], + imports: [UiAvatar, UiAvatarImage, UiAvatarFallback] }) export class AvatarDefaultExample {} @@ -25,7 +22,7 @@ export class AvatarDefaultExample {} AB `, - imports: [UiAvatar, UiAvatarImage, UiAvatarFallback], + imports: [UiAvatar, UiAvatarImage, UiAvatarFallback] }) export class AvatarFallbackDelayExample {} @@ -38,23 +35,14 @@ export const avatarMeta: IComponentMeta = { usage: ` AB -`, +` }, api: { props: [ - { - name: 'class', - type: 'string', - description: 'Additional CSS classes for the avatar container.', - }, - { - name: 'delay', - type: 'number', - default: '0', - description: 'Delay in ms before showing fallback.', - }, - ], - }, + { name: 'class', type: 'string', description: 'Additional CSS classes for the avatar container.' }, + { name: 'delay', type: 'number', default: '0', description: 'Delay in ms before showing fallback.' } + ] + } }; export const avatarVariants: IVariant[] = [ @@ -74,7 +62,7 @@ export const avatarVariants: IVariant[] = [ imports: [UiAvatar, UiAvatarImage, UiAvatarFallback] }) export class AvatarDefaultExample {}`, - component: AvatarDefaultExample, + component: AvatarDefaultExample }, { title: 'Fallback delay', @@ -92,6 +80,7 @@ export class AvatarDefaultExample {}`, imports: [UiAvatar, UiAvatarImage, UiAvatarFallback] }) export class AvatarFallbackDelayExample {}`, - component: AvatarFallbackDelayExample, - }, + component: AvatarFallbackDelayExample + } ]; + diff --git a/projects/docs/src/app/pages/docs/components/badge/badge.ts b/projects/docs/src/app/pages/docs/components/badge/badge.ts index 95d70af..38f075b 100644 --- a/projects/docs/src/app/pages/docs/components/badge/badge.ts +++ b/projects/docs/src/app/pages/docs/components/badge/badge.ts @@ -6,11 +6,14 @@ import { badgeVariants, badgeMeta } from './badge.variants'; selector: 'docs-badge', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Badge { badgeMeta = badgeMeta; badgeVariants = badgeVariants; } + diff --git a/projects/docs/src/app/pages/docs/components/badge/badge.variants.ts b/projects/docs/src/app/pages/docs/components/badge/badge.variants.ts index e306123..51b4658 100644 --- a/projects/docs/src/app/pages/docs/components/badge/badge.variants.ts +++ b/projects/docs/src/app/pages/docs/components/badge/badge.variants.ts @@ -1,35 +1,32 @@ import { Component } from '@angular/core'; import { UiBadge } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; @Component({ selector: 'badge-default-example', template: `Default`, - imports: [UiBadge], + imports: [UiBadge] }) export class BadgeDefaultExample {} @Component({ selector: 'badge-secondary-example', template: `Secondary`, - imports: [UiBadge], + imports: [UiBadge] }) export class BadgeSecondaryExample {} @Component({ selector: 'badge-destructive-example', template: `Destructive`, - imports: [UiBadge], + imports: [UiBadge] }) export class BadgeDestructiveExample {} @Component({ selector: 'badge-outline-example', template: `Outline`, - imports: [UiBadge], + imports: [UiBadge] }) export class BadgeOutlineExample {} @@ -39,19 +36,14 @@ export const badgeMeta: IComponentMeta = { installation: { package: 'badge', import: `import { UiBadge } from '@workspace/ui/badge';`, - usage: `Badge`, + usage: `Badge` }, api: { props: [ - { - name: 'variant', - type: '"default" | "secondary" | "destructive" | "outline"', - default: '"default"', - description: 'Visual variant of the badge.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, - ], - }, + { name: 'variant', type: '"default" | "secondary" | "destructive" | "outline"', default: '"default"', description: 'Visual variant of the badge.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } + ] + } }; export const badgeVariants: IVariant[] = [ @@ -65,7 +57,7 @@ export const badgeVariants: IVariant[] = [ imports: [UiBadge] }) export class BadgeDefaultExample {}`, - component: BadgeDefaultExample, + component: BadgeDefaultExample }, { title: 'Secondary', @@ -77,7 +69,7 @@ export class BadgeDefaultExample {}`, imports: [UiBadge] }) export class BadgeSecondaryExample {}`, - component: BadgeSecondaryExample, + component: BadgeSecondaryExample }, { title: 'Destructive', @@ -89,7 +81,7 @@ export class BadgeSecondaryExample {}`, imports: [UiBadge] }) export class BadgeDestructiveExample {}`, - component: BadgeDestructiveExample, + component: BadgeDestructiveExample }, { title: 'Outline', @@ -101,6 +93,7 @@ export class BadgeDestructiveExample {}`, imports: [UiBadge] }) export class BadgeOutlineExample {}`, - component: BadgeOutlineExample, - }, + component: BadgeOutlineExample + } ]; + diff --git a/projects/docs/src/app/pages/docs/components/breadcrumb/breadcrumb.ts b/projects/docs/src/app/pages/docs/components/breadcrumb/breadcrumb.ts index e691c9f..502421b 100644 --- a/projects/docs/src/app/pages/docs/components/breadcrumb/breadcrumb.ts +++ b/projects/docs/src/app/pages/docs/components/breadcrumb/breadcrumb.ts @@ -7,12 +7,11 @@ import { breadcrumbVariants, breadcrumbMeta } from './breadcrumb.variants'; standalone: true, imports: [ComponentPreview], template: ` - + - `, + ` }) export class Breadcrumb { breadcrumbMeta = breadcrumbMeta; diff --git a/projects/docs/src/app/pages/docs/components/breadcrumb/breadcrumb.variants.ts b/projects/docs/src/app/pages/docs/components/breadcrumb/breadcrumb.variants.ts index 2cdc747..2afca21 100644 --- a/projects/docs/src/app/pages/docs/components/breadcrumb/breadcrumb.variants.ts +++ b/projects/docs/src/app/pages/docs/components/breadcrumb/breadcrumb.variants.ts @@ -1,28 +1,8 @@ import { Component } from '@angular/core'; -import { - UiBreadcrumb, - UiBreadcrumbItem, - UiBreadcrumbLink, - UiBreadcrumbPage, - UiBreadcrumbSeparator, - UiBreadcrumbList, - UiDropdownMenu, - UiDropdownMenuTrigger, - UiDropdownMenuItem, - UiBreadcrumbEllipsis, -} from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { UiBreadcrumb, UiBreadcrumbItem, UiBreadcrumbLink, UiBreadcrumbPage, UiBreadcrumbSeparator, UiBreadcrumbList, UiDropdownMenu, UiDropdownMenuTrigger, UiDropdownMenuItem, UiBreadcrumbEllipsis } from 'ui'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; -import { - lucideChevronRight, - lucideHouse, - lucideFileText, - lucideSettings, - lucideEllipsis, -} from '@ng-icons/lucide'; +import { lucideChevronRight, lucideHouse, lucideFileText, lucideSettings, lucideEllipsis } from '@ng-icons/lucide'; // Breadcrumb example components for dynamic rendering @Component({ @@ -49,16 +29,8 @@ import { `, - imports: [ - UiBreadcrumb, - UiBreadcrumbList, - UiBreadcrumbItem, - UiBreadcrumbLink, - UiBreadcrumbPage, - UiBreadcrumbSeparator, - NgIcon, - ], - providers: [provideIcons({ lucideChevronRight })], + imports: [UiBreadcrumb, UiBreadcrumbList, UiBreadcrumbItem, UiBreadcrumbLink, UiBreadcrumbPage, UiBreadcrumbSeparator, NgIcon], + providers: [provideIcons({ lucideChevronRight })] }) export class BreadcrumbDefaultExample {} @@ -95,23 +67,8 @@ export class BreadcrumbDefaultExample {} `, - imports: [ - UiBreadcrumb, - UiBreadcrumbList, - UiBreadcrumbItem, - UiBreadcrumbLink, - UiBreadcrumbPage, - UiBreadcrumbSeparator, - NgIcon, - ], - providers: [ - provideIcons({ - lucideChevronRight, - lucideHouse, - lucideFileText, - lucideSettings, - }), - ], + imports: [UiBreadcrumb, UiBreadcrumbList, UiBreadcrumbItem, UiBreadcrumbLink, UiBreadcrumbPage, UiBreadcrumbSeparator, NgIcon], + providers: [provideIcons({ lucideChevronRight, lucideHouse, lucideFileText, lucideSettings })] }) export class BreadcrumbWithIconsExample {} @@ -152,28 +109,15 @@ export class BreadcrumbWithIconsExample {} `, - imports: [ - UiBreadcrumb, - UiBreadcrumbList, - UiBreadcrumbItem, - UiBreadcrumbLink, - UiBreadcrumbPage, - UiBreadcrumbSeparator, - UiBreadcrumbEllipsis, - NgIcon, - UiDropdownMenu, - UiDropdownMenuTrigger, - UiDropdownMenuItem, - ], - providers: [provideIcons({ lucideChevronRight, lucideEllipsis })], + imports: [UiBreadcrumb, UiBreadcrumbList, UiBreadcrumbItem, UiBreadcrumbLink, UiBreadcrumbPage, UiBreadcrumbSeparator, UiBreadcrumbEllipsis, NgIcon, UiDropdownMenu, UiDropdownMenuTrigger, UiDropdownMenuItem], + providers: [provideIcons({ lucideChevronRight, lucideEllipsis })] }) export class BreadcrumbCollapsedExample {} export const breadcrumbVariants: IVariant[] = [ { title: 'Default', - description: - 'A basic breadcrumb navigation showing the current page hierarchy.', + description: 'A basic breadcrumb navigation showing the current page hierarchy.', code: `import { UiBreadcrumb, UiBreadcrumbList, @@ -212,7 +156,7 @@ import { lucideChevronRight } from '@ng-icons/lucide'; providers: [provideIcons({ lucideChevronRight })] }) export class BreadcrumbDefaultExample {}`, - component: BreadcrumbDefaultExample, + component: BreadcrumbDefaultExample }, { title: 'With Icons', @@ -264,12 +208,11 @@ import { lucideChevronRight, lucideHouse, lucideFileText, lucideSettings } from providers: [provideIcons({ lucideChevronRight, lucideHouse, lucideFileText, lucideSettings })] }) export class BreadcrumbWithIconsExample {}`, - component: BreadcrumbWithIconsExample, + component: BreadcrumbWithIconsExample }, { title: 'Collapsed', - description: - 'Breadcrumb with collapsed items shown in a dropdown menu for better space management.', + description: 'Breadcrumb with collapsed items shown in a dropdown menu for better space management.', code: `import { UiBreadcrumb, UiBreadcrumbList, @@ -323,14 +266,13 @@ import { lucideChevronRight, lucideEllipsis } from '@ng-icons/lucide'; providers: [provideIcons({ lucideChevronRight, lucideEllipsis })] }) export class BreadcrumbCollapsedExample {}`, - component: BreadcrumbCollapsedExample, - }, + component: BreadcrumbCollapsedExample + } ]; export const breadcrumbMeta: IComponentMeta = { title: 'Breadcrumb', - description: - 'A navigation component that shows the current page location within a hierarchy.', + description: 'A navigation component that shows the current page location within a hierarchy.', installation: { package: 'breadcrumb', import: `import { UiBreadcrumb, UiBreadcrumbList, UiBreadcrumbItem, UiBreadcrumbLink, UiBreadcrumbPage, UiBreadcrumbSeparator, UiBreadcrumbEllipsis } from '@workspace/ui/directives/breadcrumb'; @@ -347,45 +289,17 @@ import { UiDropdownMenu, UiDropdownMenuTrigger, UiDropdownMenuItem } from '@work Current -`, +` }, api: { props: [ - { - name: 'uiBreadcrumb', - description: 'Main breadcrumb navigation container', - type: 'Directive', - }, - { - name: 'uiBreadcrumbList', - description: 'Breadcrumb list wrapper (ol/ul)', - type: 'Directive', - }, - { - name: 'uiBreadcrumbItem', - description: 'Individual breadcrumb item', - type: 'Directive', - }, - { - name: 'uiBreadcrumbLink', - description: 'Clickable breadcrumb link', - type: 'Directive', - }, - { - name: 'uiBreadcrumbPage', - description: 'Current page indicator (non-clickable)', - type: 'Directive', - }, - { - name: 'uiBreadcrumbSeparator', - description: 'Separator between breadcrumb items', - type: 'Directive', - }, - { - name: 'uiBreadcrumbEllipsis', - description: 'Collapsed items indicator', - type: 'Directive', - }, - ], - }, + { name: 'uiBreadcrumb', description: 'Main breadcrumb navigation container', type: 'Directive' }, + { name: 'uiBreadcrumbList', description: 'Breadcrumb list wrapper (ol/ul)', type: 'Directive' }, + { name: 'uiBreadcrumbItem', description: 'Individual breadcrumb item', type: 'Directive' }, + { name: 'uiBreadcrumbLink', description: 'Clickable breadcrumb link', type: 'Directive' }, + { name: 'uiBreadcrumbPage', description: 'Current page indicator (non-clickable)', type: 'Directive' }, + { name: 'uiBreadcrumbSeparator', description: 'Separator between breadcrumb items', type: 'Directive' }, + { name: 'uiBreadcrumbEllipsis', description: 'Collapsed items indicator', type: 'Directive' } + ] + } }; diff --git a/projects/docs/src/app/pages/docs/components/button/button.spec.ts b/projects/docs/src/app/pages/docs/components/button/button.spec.ts index a5c3528..411f8f2 100644 --- a/projects/docs/src/app/pages/docs/components/button/button.spec.ts +++ b/projects/docs/src/app/pages/docs/components/button/button.spec.ts @@ -8,8 +8,9 @@ describe('Button', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [Button], - }).compileComponents(); + imports: [Button] + }) + .compileComponents(); fixture = TestBed.createComponent(Button); component = fixture.componentInstance; diff --git a/projects/docs/src/app/pages/docs/components/button/button.ts b/projects/docs/src/app/pages/docs/components/button/button.ts index 037e51b..35e67a0 100644 --- a/projects/docs/src/app/pages/docs/components/button/button.ts +++ b/projects/docs/src/app/pages/docs/components/button/button.ts @@ -6,9 +6,11 @@ import { buttonVariants, buttonMeta } from './button.variants'; selector: 'docs-button', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Button { buttonMeta = buttonMeta; diff --git a/projects/docs/src/app/pages/docs/components/button/button.variants.ts b/projects/docs/src/app/pages/docs/components/button/button.variants.ts index 0017c7a..551caf8 100644 --- a/projects/docs/src/app/pages/docs/components/button/button.variants.ts +++ b/projects/docs/src/app/pages/docs/components/button/button.variants.ts @@ -1,56 +1,49 @@ import { Component } from '@angular/core'; import { UiButton } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; -import { - lucideDownload, - lucideLoaderCircle, - lucideUpload, -} from '@ng-icons/lucide'; +import { lucideDownload, lucideLoaderCircle, lucideUpload } from '@ng-icons/lucide'; // Button example components for dynamic rendering @Component({ selector: 'button-default-example', template: ``, - imports: [UiButton], + imports: [UiButton] }) export class ButtonDefaultExample {} @Component({ selector: 'button-outline-example', template: ``, - imports: [UiButton], + imports: [UiButton] }) export class ButtonOutlineExample {} @Component({ selector: 'button-destructive-example', template: ``, - imports: [UiButton], + imports: [UiButton] }) export class ButtonDestructiveExample {} @Component({ selector: 'button-secondary-example', template: ``, - imports: [UiButton], + imports: [UiButton] }) export class ButtonSecondaryExample {} @Component({ selector: 'button-ghost-example', template: ``, - imports: [UiButton], + imports: [UiButton] }) export class ButtonGhostExample {} @Component({ selector: 'button-link-example', template: ``, - imports: [UiButton], + imports: [UiButton] }) export class ButtonLinkExample {} @@ -63,7 +56,7 @@ export class ButtonLinkExample {}
`, - imports: [UiButton], + imports: [UiButton] }) export class ButtonSizesExample {} @@ -81,7 +74,7 @@ export class ButtonSizesExample {} `, imports: [UiButton, NgIcon], - providers: [provideIcons({ lucideDownload, lucideUpload })], + providers: [provideIcons({ lucideDownload, lucideUpload })] }) export class ButtonWithIconExample {} @@ -91,11 +84,7 @@ export class ButtonWithIconExample {} providers: [provideIcons({ lucideLoaderCircle })], template: ` `, @@ -108,7 +97,7 @@ export const buttonMeta: IComponentMeta = { installation: { package: 'button', import: `import { UiButton } from '@workspace/ui/directives/button';`, - usage: ``, + usage: `` }, api: { props: [ @@ -116,27 +105,27 @@ export const buttonMeta: IComponentMeta = { name: 'variant', type: '"default" | "destructive" | "outline" | "secondary" | "ghost" | "link"', default: '"default"', - description: 'The visual variant of the button.', + description: 'The visual variant of the button.' }, { name: 'size', type: '"default" | "sm" | "lg" | "icon"', default: '"default"', - description: 'The size of the button.', + description: 'The size of the button.' }, { name: 'disabled', type: 'boolean', default: 'false', - description: 'Whether the button is disabled.', + description: 'Whether the button is disabled.' }, { name: 'class', type: 'string', - description: 'Additional CSS classes to apply to the button.', - }, - ], - }, + description: 'Additional CSS classes to apply to the button.' + } + ] + } }; export const buttonVariants: IVariant[] = [ @@ -151,7 +140,7 @@ export const buttonVariants: IVariant[] = [ imports: [UiButton] }) export class ButtonDefaultExample {}`, - component: ButtonDefaultExample, + component: ButtonDefaultExample }, { title: 'Outline', @@ -164,7 +153,7 @@ export class ButtonDefaultExample {}`, imports: [UiButton] }) export class ButtonOutlineExample {}`, - component: ButtonOutlineExample, + component: ButtonOutlineExample }, { title: 'Destructive', @@ -177,7 +166,7 @@ export class ButtonOutlineExample {}`, imports: [UiButton] }) export class ButtonDestructiveExample {}`, - component: ButtonDestructiveExample, + component: ButtonDestructiveExample }, { title: 'Secondary', @@ -190,7 +179,7 @@ export class ButtonDestructiveExample {}`, imports: [UiButton] }) export class ButtonSecondaryExample {}`, - component: ButtonSecondaryExample, + component: ButtonSecondaryExample }, { title: 'Ghost', @@ -203,7 +192,7 @@ export class ButtonSecondaryExample {}`, imports: [UiButton] }) export class ButtonGhostExample {}`, - component: ButtonGhostExample, + component: ButtonGhostExample }, { title: 'Link', @@ -216,7 +205,7 @@ export class ButtonGhostExample {}`, imports: [UiButton] }) export class ButtonLinkExample {}`, - component: ButtonLinkExample, + component: ButtonLinkExample }, { title: 'Sizes', @@ -235,7 +224,7 @@ export class ButtonLinkExample {}`, imports: [UiButton] }) export class ButtonSizesExample {}`, - component: ButtonSizesExample, + component: ButtonSizesExample }, { title: 'With Icon', @@ -261,7 +250,7 @@ import { lucideDownload, lucideUpload } from '@ng-icons/lucide'; providers: [provideIcons({ lucideDownload, lucideUpload })] }) export class ButtonWithIconExample {}`, - component: ButtonWithIconExample, + component: ButtonWithIconExample }, { title: 'Loading State', @@ -282,6 +271,6 @@ import { lucideLoaderCircle } from '@ng-icons/lucide'; \` }) export class ButtonLoadingExample {}`, - component: ButtonLoadingExample, - }, -]; + component: ButtonLoadingExample + } +]; \ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/components/card/card.ts b/projects/docs/src/app/pages/docs/components/card/card.ts index 0928b82..f8367bd 100644 --- a/projects/docs/src/app/pages/docs/components/card/card.ts +++ b/projects/docs/src/app/pages/docs/components/card/card.ts @@ -6,11 +6,14 @@ import { cardVariants, cardMeta } from './card.variants'; selector: 'docs-card', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Card { cardMeta = cardMeta; cardVariants = cardVariants; } + diff --git a/projects/docs/src/app/pages/docs/components/card/card.variants.ts b/projects/docs/src/app/pages/docs/components/card/card.variants.ts index 09c3338..28a3037 100644 --- a/projects/docs/src/app/pages/docs/components/card/card.variants.ts +++ b/projects/docs/src/app/pages/docs/components/card/card.variants.ts @@ -1,20 +1,8 @@ import { Component } from '@angular/core'; -import { - UiCard, - UiCardAction, - UiCardContent, - UiCardDescription, - UiCardFooter, - UiCardHeader, - UiCardTitle, - UiFormField, -} from 'ui'; +import { UiCard, UiCardAction, UiCardContent, UiCardDescription, UiCardFooter, UiCardHeader, UiCardTitle, UiFormField } from 'ui'; import { UiButton } from 'ui'; import { UiInput, UiLabel } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; @Component({ selector: 'card-default-example', @@ -34,17 +22,12 @@ import {
- +
@@ -54,29 +37,19 @@ import { - + `, - imports: [ - UiCard, - UiCardHeader, - UiCardTitle, - UiCardDescription, - UiCardAction, - UiCardContent, - UiCardFooter, - UiLabel, - UiInput, - UiButton, - UiFormField, - ], + imports: [UiCard, UiCardHeader, UiCardTitle, UiCardDescription, UiCardAction, UiCardContent, UiCardFooter, UiLabel, UiInput, UiButton, UiFormField], host: { - class: 'w-2/3 mx-auto', - }, + class: 'w-2/3 mx-auto' + } }) export class CardDefaultExample {} @@ -94,17 +67,13 @@ export const cardMeta: IComponentMeta = {
Content
Footer
-
`, +` }, api: { props: [ - { - name: 'class', - type: 'string', - description: 'Additional CSS classes for card container.', - }, - ], - }, + { name: 'class', type: 'string', description: 'Additional CSS classes for card container.' } + ] + } }; export const cardVariants: IVariant[] = [ @@ -166,6 +135,7 @@ import { UiFormField } from '@workspace/ui/form-field'; } }) export class CardDefaultExample {}`, - component: CardDefaultExample, - }, + component: CardDefaultExample + } ]; + diff --git a/projects/docs/src/app/pages/docs/components/checkbox/checkbox.ts b/projects/docs/src/app/pages/docs/components/checkbox/checkbox.ts index 32a411e..38f712d 100644 --- a/projects/docs/src/app/pages/docs/components/checkbox/checkbox.ts +++ b/projects/docs/src/app/pages/docs/components/checkbox/checkbox.ts @@ -7,9 +7,11 @@ import { checkboxVariants, checkboxMeta } from './checkbox.variants'; standalone: true, imports: [ComponentPreview], template: ` - + - `, + ` }) export class Checkbox { checkboxMeta = checkboxMeta; diff --git a/projects/docs/src/app/pages/docs/components/checkbox/checkbox.variants.ts b/projects/docs/src/app/pages/docs/components/checkbox/checkbox.variants.ts index 76d3c96..b01c3a6 100644 --- a/projects/docs/src/app/pages/docs/components/checkbox/checkbox.variants.ts +++ b/projects/docs/src/app/pages/docs/components/checkbox/checkbox.variants.ts @@ -1,8 +1,5 @@ import { Component, signal } from '@angular/core'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { UiCheckbox, UiLabel, UiButton, UiFormField, UiDescription } from 'ui'; // Default checkbox example @@ -10,72 +7,70 @@ import { UiCheckbox, UiLabel, UiButton, UiFormField, UiDescription } from 'ui'; selector: 'checkbox-default-example', template: `
-
- - -
-
- -
- -

- By clicking this checkbox, you agree to the terms and conditions. -

+
+ +
-
-
- - -
-
-
- -
-

Enable notifications

-

- You can enable or disable notifications at any time. -

-
+
+ +
+ +

+ By clicking this checkbox, you agree to the terms and conditions. +

+
+
+
+ + +
+
+
+ +
+

+ Enable notifications +

+

+ You can enable or disable notifications at any time. +

+
+
-
`, standalone: true, imports: [UiCheckbox, UiLabel, UiFormField, UiDescription], host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class CheckboxDefaultExample { - termsChecked = signal(false); - termsWithDescChecked = signal(true); - disabledChecked = signal(false); - notificationsChecked = signal(true); - termsCheckedChange(event: boolean) { - console.log('termsCheckedChange', event); - } + termsChecked = signal(false); + termsWithDescChecked = signal(true); + disabledChecked = signal(false); + notificationsChecked = signal(true); + termsCheckedChange(event: boolean) { + console.log('termsCheckedChange', event); + } } // Checkbox with label example @Component({ - selector: 'checkbox-with-label-example', - template: ` -
- - + selector: 'checkbox-with-label-example', + template: ` +
+ +
- `, - standalone: true, - imports: [UiCheckbox, UiLabel, UiFormField], -}) -export class CheckboxWithLabelExample { - checked = signal(true); -} + `, + standalone: true, + imports: [UiCheckbox, UiLabel, UiFormField] + }) + export class CheckboxWithLabelExample { + checked = signal(true); + } // Checkbox with description example @Component({ @@ -94,7 +89,7 @@ export class CheckboxWithLabelExample {
`, standalone: true, - imports: [UiCheckbox, UiLabel, UiFormField, UiDescription], + imports: [UiCheckbox, UiLabel, UiFormField, UiDescription] }) export class CheckboxWithDescriptionExample { checked = signal(true); @@ -114,8 +109,8 @@ export class CheckboxWithDescriptionExample { standalone: true, imports: [UiCheckbox, UiLabel, UiFormField], host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class CheckboxDisabledExample { checked = signal(false); @@ -126,25 +121,23 @@ export class CheckboxDisabledExample { selector: 'checkbox-custom-styling-example', template: `
-
- +
+
-

Enable notifications

-

- You can enable or disable notifications at any time. -

+

+ Enable notifications +

+

+ You can enable or disable notifications at any time. +

+
-
`, standalone: true, - imports: [UiCheckbox, UiFormField, UiDescription, UiLabel], + imports: [UiCheckbox, UiFormField, UiDescription, UiLabel] }) export class CheckboxCustomStylingExample { checked = signal(true); @@ -162,7 +155,7 @@ export class CheckboxCustomStylingExample { Select the items you want to display in the sidebar.

- +
@@ -170,35 +163,35 @@ export class CheckboxCustomStylingExample {
- +
- +
- +
- +
- +
@@ -206,16 +199,15 @@ export class CheckboxCustomStylingExample {
- - - + @if (selectedItems.length > 0) {
Selected: {{ selectedItems.join(', ') }} @@ -227,8 +219,8 @@ export class CheckboxCustomStylingExample { standalone: true, imports: [UiCheckbox, UiLabel, UiButton, UiFormField], host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class CheckboxFormExample { recents = signal(true); @@ -245,10 +237,12 @@ export class CheckboxFormExample { { key: 'applications', checked: this.applications }, { key: 'desktop', checked: this.desktop }, { key: 'downloads', checked: this.downloads }, - { key: 'documents', checked: this.documents }, + { key: 'documents', checked: this.documents } ]; - - return items.filter((item) => item.checked()).map((item) => item.key); + + return items + .filter(item => item.checked()) + .map(item => item.key); } submitForm(): void { @@ -259,11 +253,10 @@ export class CheckboxFormExample { export const checkboxMeta: IComponentMeta = { title: 'Checkbox', - description: - 'A control that allows the user to toggle between checked and not checked.', + description: 'A control that allows the user to toggle between checked and not checked.', installation: { import: `import { UiCheckbox } from '@workspace/ui/checkbox';`, - usage: ``, + usage: `` }, api: { props: [ @@ -272,50 +265,50 @@ export const checkboxMeta: IComponentMeta = { type: 'boolean', default: 'false', description: 'Whether the checkbox is checked.', - required: false, + required: false }, { name: 'indeterminate', type: 'boolean', default: 'false', description: 'Whether the checkbox is in an indeterminate state.', - required: false, + required: false }, { name: 'required', type: 'boolean', default: 'false', description: 'Whether the checkbox is required.', - required: false, + required: false }, { name: 'disabled', type: 'boolean', default: 'false', description: 'Whether the checkbox is disabled.', - required: false, + required: false }, { name: 'class', type: 'string', default: '""', description: 'Additional CSS classes to apply to the checkbox.', - required: false, - }, + required: false + } ], outputs: [ { name: 'checkedChange', type: 'boolean', - description: 'Emitted when the checked state changes.', + description: 'Emitted when the checked state changes.' }, { name: 'indeterminateChange', type: 'boolean', - description: 'Emitted when the indeterminate state changes.', - }, - ], - }, + description: 'Emitted when the indeterminate state changes.' + } + ] + } }; export const checkboxVariants: IVariant[] = [ @@ -377,7 +370,7 @@ export class CheckboxDefaultExample { console.log('termsCheckedChange', event); } }`, - component: CheckboxDefaultExample, + component: CheckboxDefaultExample }, { title: 'With Label', @@ -399,7 +392,7 @@ import { UiCheckbox, UiLabel, UiFormField } from '@workspace/ui/checkbox'; export class CheckboxWithLabelExample { checked = signal(true); }`, - component: CheckboxWithLabelExample, + component: CheckboxWithLabelExample }, { title: 'With Description', @@ -428,7 +421,7 @@ import { UiCheckbox, UiLabel, UiFormField, UiDescription } from '@workspace/ui/c export class CheckboxWithDescriptionExample { checked = signal(true); }`, - component: CheckboxWithDescriptionExample, + component: CheckboxWithDescriptionExample }, { title: 'Disabled', @@ -455,7 +448,7 @@ import { UiCheckbox, UiLabel, UiFormField } from '@workspace/ui/checkbox'; export class CheckboxDisabledExample { checked = signal(false); }`, - component: CheckboxDisabledExample, + component: CheckboxDisabledExample }, { title: 'Custom Styling', @@ -488,7 +481,7 @@ import { UiCheckbox, UiFormField, UiDescription, UiLabel } from '@workspace/ui/c export class CheckboxCustomStylingExample { checked = signal(true); }`, - component: CheckboxCustomStylingExample, + component: CheckboxCustomStylingExample }, { title: 'Form with Multiple Checkboxes', @@ -602,6 +595,6 @@ export class CheckboxFormExample { // In a real app, you would submit this data } }`, - component: CheckboxFormExample, - }, + component: CheckboxFormExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/components.routes.ts b/projects/docs/src/app/pages/docs/components/components.routes.ts index cae1445..bbd99c0 100644 --- a/projects/docs/src/app/pages/docs/components/components.routes.ts +++ b/projects/docs/src/app/pages/docs/components/components.routes.ts @@ -1,129 +1,119 @@ import { Routes } from '@angular/router'; export const routes: Routes = [ - { - path: '', - children: [ - { - path: 'alert', - loadComponent: () => import('./alert/alert').then((m) => m.Alert), - }, - { - path: 'button', - loadComponent: () => import('./button/button').then((m) => m.Button), - }, - { - path: 'avatar', - loadComponent: () => import('./avatar/avatar').then((m) => m.Avatar), - }, - { - path: 'badge', - loadComponent: () => import('./badge/badge').then((m) => m.Badge), - }, - { - path: 'breadcrumb', - loadComponent: () => - import('./breadcrumb/breadcrumb').then((m) => m.Breadcrumb), - }, - { - path: 'card', - loadComponent: () => import('./card/card').then((m) => m.Card), - }, - { - path: 'checkbox', - loadComponent: () => - import('./checkbox/checkbox').then((m) => m.Checkbox), - }, - { - path: 'accordion', - loadComponent: () => - import('./accordion/accordion').then((m) => m.Accordion), - }, - { - path: 'dialog', - loadComponent: () => import('./dialog/dialog').then((m) => m.Dialog), - }, - { - path: 'sheet', - loadComponent: () => import('./sheet/sheet').then((m) => m.Sheet), - }, - { - path: 'alert-dialog', - loadComponent: () => - import('./alert-dialog/alert-dialog').then((m) => m.AlertDialog), - }, - { - path: 'tooltip', - loadComponent: () => import('./tooltip/tooltip').then((m) => m.Tooltip), - }, - { - path: 'popover', - loadComponent: () => import('./popover/popover').then((m) => m.Popover), - }, - { - path: 'separator', - loadComponent: () => - import('./separator/separator').then((m) => m.Separator), - }, - { - path: 'tabs', - loadComponent: () => import('./tabs/tabs').then((m) => m.Tabs), - }, - { - path: 'progress', - loadComponent: () => - import('./progress/progress').then((m) => m.Progress), - }, - { - path: 'label', - loadComponent: () => import('./label/label').then((m) => m.Label), - }, - { - path: 'input', - loadComponent: () => import('./input/input').then((m) => m.Input), - }, - { - path: 'textarea', - loadComponent: () => - import('./textarea/textarea').then((m) => m.Textarea), - }, - { - path: 'table', - loadComponent: () => import('./table/table').then((m) => m.Table), - }, - { - path: 'dropdown-menu', - loadComponent: () => - import('./dropdown-menu/dropdown-menu').then((m) => m.DropdownMenu), - }, - { - path: 'toggle', - loadComponent: () => import('./toggle/toggle').then((m) => m.Toggle), - }, - { - path: 'toggle-group', - loadComponent: () => - import('./toggle-group/toggle-group').then((m) => m.ToggleGroup), - }, - { - path: 'skeleton', - loadComponent: () => - import('./skeleton/skeleton').then((m) => m.Skeleton), - }, - { - path: 'switch', - loadComponent: () => import('./switch/switch').then((m) => m.Switch), - }, - { - path: 'radio-group', - loadComponent: () => - import('./radio-group/radio-group').then((m) => m.RadioGroup), - }, - { + { path: '', - redirectTo: 'alert', - pathMatch: 'full', - }, - ], - }, + children: [ + { + path: 'alert', + loadComponent: () => import('./alert/alert').then(m => m.Alert) + }, + { + path: 'button', + loadComponent: () => import('./button/button').then(m => m.Button) + }, + { + path: 'avatar', + loadComponent: () => import('./avatar/avatar').then(m => m.Avatar) + }, + { + path: 'badge', + loadComponent: () => import('./badge/badge').then(m => m.Badge) + }, + { + path: 'breadcrumb', + loadComponent: () => import('./breadcrumb/breadcrumb').then(m => m.Breadcrumb) + }, + { + path: 'card', + loadComponent: () => import('./card/card').then(m => m.Card) + }, + { + path: 'checkbox', + loadComponent: () => import('./checkbox/checkbox').then(m => m.Checkbox) + }, + { + path: 'accordion', + loadComponent: () => import('./accordion/accordion').then(m => m.Accordion) + }, + { + path: 'dialog', + loadComponent: () => import('./dialog/dialog').then(m => m.Dialog) + }, + { + path: 'sheet', + loadComponent: () => import('./sheet/sheet').then(m => m.Sheet) + }, + { + path: 'alert-dialog', + loadComponent: () => import('./alert-dialog/alert-dialog').then(m => m.AlertDialog) + }, + { + path: 'tooltip', + loadComponent: () => import('./tooltip/tooltip').then(m => m.Tooltip) + }, + { + path: 'popover', + loadComponent: () => import('./popover/popover').then(m => m.Popover) + }, + { + path: 'separator', + loadComponent: () => import('./separator/separator').then(m => m.Separator) + }, + { + path: 'tabs', + loadComponent: () => import('./tabs/tabs').then(m => m.Tabs) + }, + { + path: 'progress', + loadComponent: () => import('./progress/progress').then(m => m.Progress) + }, + { + path: 'label', + loadComponent: () => import('./label/label').then(m => m.Label) + }, + { + path: 'input', + loadComponent: () => import('./input/input').then(m => m.Input) + }, + { + path: 'textarea', + loadComponent: () => import('./textarea/textarea').then(m => m.Textarea) + }, + { + path: 'table', + loadComponent: () => import('./table/table').then(m => m.Table) + }, + { + path: 'dropdown-menu', + loadComponent: () => import('./dropdown-menu/dropdown-menu').then(m => m.DropdownMenu) + }, + { + path: 'toggle', + loadComponent: () => import('./toggle/toggle').then(m => m.Toggle) + }, + { + path: 'toggle-group', + loadComponent: () => import('./toggle-group/toggle-group').then(m => m.ToggleGroup) + }, + { + path: 'skeleton', + loadComponent: () => import('./skeleton/skeleton').then(m => m.Skeleton) + }, + { + path: 'switch', + loadComponent: () => import('./switch/switch').then(m => m.Switch) + }, + { + path: 'radio-group', + loadComponent: () => import('./radio-group/radio-group').then(m => m.RadioGroup) + }, + { + path: '', + redirectTo: 'alert', + pathMatch: 'full' + } + ] + } + ]; diff --git a/projects/docs/src/app/pages/docs/components/dialog/dialog.ts b/projects/docs/src/app/pages/docs/components/dialog/dialog.ts index 5ddfbd9..d0f204f 100644 --- a/projects/docs/src/app/pages/docs/components/dialog/dialog.ts +++ b/projects/docs/src/app/pages/docs/components/dialog/dialog.ts @@ -6,11 +6,14 @@ import { dialogVariants, dialogMeta } from './dialog.variants'; selector: 'docs-dialog', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Dialog { dialogMeta = dialogMeta; dialogVariants = dialogVariants; } + diff --git a/projects/docs/src/app/pages/docs/components/dialog/dialog.variants.ts b/projects/docs/src/app/pages/docs/components/dialog/dialog.variants.ts index 4d90856..50b9ed6 100644 --- a/projects/docs/src/app/pages/docs/components/dialog/dialog.variants.ts +++ b/projects/docs/src/app/pages/docs/components/dialog/dialog.variants.ts @@ -1,90 +1,56 @@ import { Component } from '@angular/core'; -import { - UiDialog, - UiDialogDescription, - UiDialogFooter, - UiDialogHeader, - UiDialogOverlay, - UiDialogTitle, - UiDialogTrigger, -} from 'ui'; +import { UiDialog, UiDialogDescription, UiDialogFooter, UiDialogHeader, UiDialogOverlay, UiDialogTitle, UiDialogTrigger } from 'ui'; import { UiButton } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; import { lucideX } from '@ng-icons/lucide'; @Component({ selector: 'dialog-default-example', template: ` - + -
-
-
-

Publish this article?

- -
-

- Are you sure you want to publish this article? This action is - irreversible. -

+
+
+
+

Publish this article?

+ + +
+

+ Are you sure you want to publish this article? This action is + irreversible. +

-
- - -
+
+ + +
+
-
`, providers: [provideIcons({ lucideX })], - imports: [ - UiDialog, - UiDialogHeader, - UiDialogTitle, - UiDialogDescription, - UiDialogFooter, - UiDialogTrigger, - UiDialogOverlay, - UiButton, - NgIcon, - ], + imports: [UiDialog, UiDialogHeader, UiDialogTitle, UiDialogDescription, UiDialogFooter, UiDialogTrigger, UiDialogOverlay, UiButton, NgIcon] }) export class DialogDefaultExample {} export const dialogMeta: IComponentMeta = { title: 'Dialog', - description: - 'A window overlaid on either the primary window or another dialog window.', + description: 'A window overlaid on either the primary window or another dialog window.', installation: { package: 'dialog', import: `import { UiDialog, UiDialogTrigger, UiDialogHeader, UiDialogTitle, UiDialogDescription, UiDialogFooter, UiDialogOverlay } from '@workspace/ui/directives/dialog';`, - usage: `
...
`, + usage: `
...
` }, api: { props: [ - { - name: 'uiDialogTrigger', - type: 'TemplateRef', - description: 'Template ref for dialog content.', - }, - { - name: 'uiDialogModal', - type: 'boolean', - description: 'Whether the dialog is modal.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, - ], - }, + { name: 'uiDialogTrigger', type: 'TemplateRef', description: 'Template ref for dialog content.' }, + { name: 'uiDialogModal', type: 'boolean', description: 'Whether the dialog is modal.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } + ] + } }; export const dialogVariants: IVariant[] = [ @@ -116,6 +82,7 @@ import { UiButton } from '@workspace/ui/directives/button'; imports: [UiDialog, UiDialogHeader, UiDialogTitle, UiDialogDescription, UiDialogFooter, UiDialogTrigger, UiDialogOverlay, UiButton] }) export class DialogDefaultExample {}`, - component: DialogDefaultExample, - }, + component: DialogDefaultExample + } ]; + diff --git a/projects/docs/src/app/pages/docs/components/dropdown-menu/dropdown-menu.ts b/projects/docs/src/app/pages/docs/components/dropdown-menu/dropdown-menu.ts index 595c2a5..c152511 100644 --- a/projects/docs/src/app/pages/docs/components/dropdown-menu/dropdown-menu.ts +++ b/projects/docs/src/app/pages/docs/components/dropdown-menu/dropdown-menu.ts @@ -1,20 +1,16 @@ import { Component } from '@angular/core'; import { ComponentPreview } from '@components/component-preview/component-preview'; -import { - dropdownMenuVariants, - dropdownMenuMeta, -} from './dropdown-menu.variants'; +import { dropdownMenuVariants, dropdownMenuMeta } from './dropdown-menu.variants'; @Component({ selector: 'docs-dropdown-menu', imports: [ComponentPreview], template: ` - + - `, + ` }) export class DropdownMenu { dropdownMenuMeta = dropdownMenuMeta; diff --git a/projects/docs/src/app/pages/docs/components/dropdown-menu/dropdown-menu.variants.ts b/projects/docs/src/app/pages/docs/components/dropdown-menu/dropdown-menu.variants.ts index 9605f0d..149022d 100644 --- a/projects/docs/src/app/pages/docs/components/dropdown-menu/dropdown-menu.variants.ts +++ b/projects/docs/src/app/pages/docs/components/dropdown-menu/dropdown-menu.variants.ts @@ -1,24 +1,21 @@ import { Component } from '@angular/core'; -import { - UiDropdownMenu, - UiDropdownMenuTrigger, - UiDropdownMenuItem, - UiDropdownMenuShortcut, - UiDropdownMenuSeparator, +import { + UiDropdownMenu, + UiDropdownMenuTrigger, + UiDropdownMenuItem, + UiDropdownMenuShortcut, + UiDropdownMenuSeparator, UiDropdownMenuLabel, UiDropdownSubmenuTrigger, - UiButton, + UiButton } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; -import { - lucideChevronRight, +import { + lucideChevronRight, lucideSettings, lucideUser, - lucideLogOut, + lucideLogOut } from '@ng-icons/lucide'; // Basic dropdown menu example @@ -48,15 +45,8 @@ import {
`, - imports: [ - UiButton, - UiDropdownMenu, - UiDropdownMenuTrigger, - UiDropdownMenuItem, - UiDropdownMenuSeparator, - NgIcon, - ], - providers: [provideIcons({ lucideUser, lucideSettings, lucideLogOut })], + imports: [UiButton, UiDropdownMenu, UiDropdownMenuTrigger, UiDropdownMenuItem, UiDropdownMenuSeparator, NgIcon], + providers: [provideIcons({ lucideUser, lucideSettings, lucideLogOut })] }) export class DropdownMenuBasicExample {} @@ -82,13 +72,7 @@ export class DropdownMenuBasicExample {}
`, - imports: [ - UiButton, - UiDropdownMenu, - UiDropdownMenuTrigger, - UiDropdownMenuItem, - UiDropdownMenuShortcut, - ], + imports: [UiButton, UiDropdownMenu, UiDropdownMenuTrigger, UiDropdownMenuItem, UiDropdownMenuShortcut] }) export class DropdownMenuShortcutsExample {} @@ -112,14 +96,7 @@ export class DropdownMenuShortcutsExample {}
`, - imports: [ - UiButton, - UiDropdownMenu, - UiDropdownMenuTrigger, - UiDropdownMenuItem, - UiDropdownMenuLabel, - UiDropdownMenuSeparator, - ], + imports: [UiButton, UiDropdownMenu, UiDropdownMenuTrigger, UiDropdownMenuItem, UiDropdownMenuLabel, UiDropdownMenuSeparator] }) export class DropdownMenuLabelsExample {} @@ -128,74 +105,43 @@ export class DropdownMenuLabelsExample {} selector: 'dropdown-menu-submenu-example', template: `
- - -
-
My Account
-
- - - - -
- - - + +
+
My Account
+
+ + + + +
+ + + +
+
- -
- -
-
- -
- - -
- -
-
+ + +
+ + +
+ +
+
`, - imports: [ - UiButton, - UiDropdownMenu, - UiDropdownMenuTrigger, - UiDropdownMenuItem, - UiDropdownMenuShortcut, - UiDropdownSubmenuTrigger, - UiDropdownMenuSeparator, - UiDropdownMenuLabel, - NgIcon, - ], - providers: [provideIcons({ lucideChevronRight })], + imports: [UiButton, UiDropdownMenu, UiDropdownMenuTrigger, UiDropdownMenuItem, UiDropdownMenuShortcut, UiDropdownSubmenuTrigger, UiDropdownMenuSeparator, UiDropdownMenuLabel, NgIcon], + providers: [provideIcons({ lucideChevronRight })] }) export class DropdownMenuSubmenuExample {} export const dropdownMenuMeta: IComponentMeta = { title: 'Dropdown Menu', - description: - 'A dropdown menu component that displays a list of actions or options in a floating panel.', + description: 'A dropdown menu component that displays a list of actions or options in a floating panel.', installation: { package: 'dropdown-menu', import: `import { @@ -213,74 +159,72 @@ import { UiButton } from '@workspace/ui/directives/button';`,
-`, +` }, api: { props: [ { name: 'class', type: 'string', - description: - 'Additional CSS classes to apply to the dropdown menu components.', + description: 'Additional CSS classes to apply to the dropdown menu components.' }, { name: 'disabled', type: 'boolean', - description: - 'Whether the dropdown menu item is disabled (for UiDropdownMenuItem).', + description: 'Whether the dropdown menu item is disabled (for UiDropdownMenuItem).' }, { name: 'uiDropdownMenuTrigger', type: 'string', - description: 'Reference to the dropdown menu to trigger.', + description: 'Reference to the dropdown menu to trigger.' }, { name: 'uiDropdownMenuTriggerDisabled', type: 'boolean', - description: 'Whether the trigger is disabled.', + description: 'Whether the trigger is disabled.' }, { name: 'uiDropdownMenuTriggerPlacement', type: '"top" | "bottom" | "left" | "right"', - description: 'Preferred placement of the dropdown menu.', + description: 'Preferred placement of the dropdown menu.' }, { name: 'uiDropdownMenuTriggerOffset', type: 'number', - description: 'Offset distance from the trigger.', + description: 'Offset distance from the trigger.' }, { name: 'uiDropdownMenuTriggerFlip', type: 'boolean', - description: 'Whether to flip the menu when it overflows.', + description: 'Whether to flip the menu when it overflows.' }, { name: 'uiDropdownSubmenuTrigger', type: 'string', - description: 'Reference to the submenu to trigger.', + description: 'Reference to the submenu to trigger.' }, { name: 'uiDropdownSubmenuTriggerDisabled', type: 'boolean', - description: 'Whether the submenu trigger is disabled.', + description: 'Whether the submenu trigger is disabled.' }, { name: 'uiDropdownSubmenuTriggerPlacement', type: '"top" | "bottom" | "left" | "right"', - description: 'Preferred placement of the submenu.', + description: 'Preferred placement of the submenu.' }, { name: 'uiDropdownSubmenuTriggerOffset', type: 'number', - description: 'Offset distance from the submenu trigger.', + description: 'Offset distance from the submenu trigger.' }, { name: 'uiDropdownSubmenuTriggerFlip', type: 'boolean', - description: 'Whether to flip the submenu when it overflows.', - }, - ], - }, + description: 'Whether to flip the submenu when it overflows.' + } + ] + } }; export const dropdownMenuVariants: IVariant[] = [ @@ -327,7 +271,7 @@ import { lucideUser, lucideSettings, lucideLogOut } from '@ng-icons/lucide'; providers: [provideIcons({ lucideUser, lucideSettings, lucideLogOut })] }) export class DropdownMenuBasicExample {}`, - component: DropdownMenuBasicExample, + component: DropdownMenuBasicExample }, { title: 'With Shortcuts', @@ -364,12 +308,11 @@ import { UiButton } from '@workspace/ui/directives/button'; imports: [UiButton, UiDropdownMenu, UiDropdownMenuTrigger, UiDropdownMenuItem, UiDropdownMenuShortcut] }) export class DropdownMenuShortcutsExample {}`, - component: DropdownMenuShortcutsExample, + component: DropdownMenuShortcutsExample }, { title: 'With Labels', - description: - 'Dropdown menu with grouped items using labels and separators.', + description: 'Dropdown menu with grouped items using labels and separators.', code: `import { UiDropdownMenu, UiDropdownMenuTrigger, @@ -401,7 +344,7 @@ import { UiButton } from '@workspace/ui/directives/button'; imports: [UiButton, UiDropdownMenu, UiDropdownMenuTrigger, UiDropdownMenuItem, UiDropdownMenuLabel, UiDropdownMenuSeparator] }) export class DropdownMenuLabelsExample {}`, - component: DropdownMenuLabelsExample, + component: DropdownMenuLabelsExample }, { title: 'With Submenu', @@ -456,6 +399,6 @@ import { lucideChevronRight } from '@ng-icons/lucide'; providers: [provideIcons({ lucideChevronRight })] }) export class DropdownMenuSubmenuExample {}`, - component: DropdownMenuSubmenuExample, - }, + component: DropdownMenuSubmenuExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/input/input.ts b/projects/docs/src/app/pages/docs/components/input/input.ts index 46f6764..5bc52bb 100644 --- a/projects/docs/src/app/pages/docs/components/input/input.ts +++ b/projects/docs/src/app/pages/docs/components/input/input.ts @@ -6,9 +6,11 @@ import { inputVariants, inputMeta } from './input.variants'; selector: 'docs-input', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Input { inputMeta = inputMeta; diff --git a/projects/docs/src/app/pages/docs/components/input/input.variants.ts b/projects/docs/src/app/pages/docs/components/input/input.variants.ts index 8a69dd9..711810d 100644 --- a/projects/docs/src/app/pages/docs/components/input/input.variants.ts +++ b/projects/docs/src/app/pages/docs/components/input/input.variants.ts @@ -1,26 +1,17 @@ import { Component } from '@angular/core'; import { UiDescription, UiFormField, UiInput, UiButton, UiLabel } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { FormsModule } from '@angular/forms'; @Component({ selector: 'input-default-example', template: ` - + `, imports: [UiInput, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', + 'class': 'w-2/3 space-y-6 mx-auto' }, }) export class InputDefaultExample { @@ -38,7 +29,7 @@ export class InputDefaultExample { imports: [UiInput, UiLabel, UiFormField], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', + 'class': 'w-2/3 space-y-6 mx-auto' }, }) export class InputFileExample {} @@ -46,18 +37,12 @@ export class InputFileExample {} @Component({ selector: 'input-disabled-example', template: ` - + `, imports: [UiInput, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', + 'class': 'w-2/3 space-y-6 mx-auto' }, }) export class InputDisabledExample { @@ -69,20 +54,14 @@ export class InputDisabledExample { template: `
- +
`, imports: [UiInput, UiLabel, UiFormField, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class InputWithLabelExample { email = ''; @@ -92,20 +71,17 @@ export class InputWithLabelExample { selector: 'input-with-button-example', template: `
- - + +
`, imports: [UiInput, UiButton, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class InputWithButtonExample { subscribeEmail = ''; @@ -117,29 +93,16 @@ export class InputWithButtonExample {
- +

This is your public display name.

`, - imports: [ - UiInput, - UiLabel, - UiButton, - FormsModule, - UiFormField, - UiDescription, - ], + imports: [UiInput, UiLabel, UiButton, FormsModule, UiFormField, UiDescription], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', + 'class': 'w-2/3 space-y-6 mx-auto' }, }) export class InputFormExample { @@ -156,33 +119,17 @@ export const inputMeta: IComponentMeta = { installation: { package: 'input', import: `import { UiInput } from '@workspace/ui/directives/input';`, - usage: ``, + usage: `` }, api: { props: [ - { - name: 'uiInput', - type: 'Directive', - description: 'Input directive for styling and functionality.', - }, - { - name: 'type', - type: 'string', - description: 'HTML input type (text, email, password, etc.).', - }, - { - name: 'placeholder', - type: 'string', - description: 'Placeholder text for the input.', - }, - { - name: 'disabled', - type: 'boolean', - description: 'Whether the input is disabled.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, - ], - }, + { name: 'uiInput', type: 'Directive', description: 'Input directive for styling and functionality.' }, + { name: 'type', type: 'string', description: 'HTML input type (text, email, password, etc.).' }, + { name: 'placeholder', type: 'string', description: 'Placeholder text for the input.' }, + { name: 'disabled', type: 'boolean', description: 'Whether the input is disabled.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } + ] + } }; export const inputVariants: IVariant[] = [ @@ -203,7 +150,7 @@ import { FormsModule } from '@angular/forms'; export class InputDefaultExample { email = ''; }`, - component: InputDefaultExample, + component: InputDefaultExample }, { title: 'File', @@ -224,7 +171,7 @@ import { UiFormField } from '@workspace/ui/directives/form-field'; standalone: true }) export class InputFileExample {}`, - component: InputFileExample, + component: InputFileExample }, { title: 'Disabled', @@ -243,7 +190,7 @@ import { FormsModule } from '@angular/forms'; export class InputDisabledExample { disabledEmail = 'disabled@example.com'; }`, - component: InputDisabledExample, + component: InputDisabledExample }, { title: 'With Label', @@ -267,7 +214,7 @@ import { FormsModule } from '@angular/forms'; export class InputWithLabelExample { email = ''; }`, - component: InputWithLabelExample, + component: InputWithLabelExample }, { title: 'With Button', @@ -292,12 +239,11 @@ import { FormsModule } from '@angular/forms'; export class InputWithButtonExample { subscribeEmail = ''; }`, - component: InputWithButtonExample, + component: InputWithButtonExample }, { title: 'Form', - description: - 'Simple form with input field using ngModel and form field directives.', + description: 'Simple form with input field using ngModel and form field directives.', code: `import { UiInput } from '@workspace/ui/directives/input'; import { UiButton } from '@workspace/ui/directives/button'; import { UiFormField, UiDescription, UiLabel } from '@workspace/ui/directives/form-field'; @@ -325,6 +271,6 @@ export class InputFormExample { console.log('Form submitted:', { username: this.username }); } }`, - component: InputFormExample, - }, + component: InputFormExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/label/label.ts b/projects/docs/src/app/pages/docs/components/label/label.ts index b8587b2..b4193d5 100644 --- a/projects/docs/src/app/pages/docs/components/label/label.ts +++ b/projects/docs/src/app/pages/docs/components/label/label.ts @@ -7,11 +7,13 @@ import { labelVariants, labelMeta } from './label.variants'; standalone: true, imports: [ComponentPreview], template: ` - + - `, + ` }) export class Label { labelMeta = labelMeta; labelVariants = labelVariants; -} +} \ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/components/label/label.variants.ts b/projects/docs/src/app/pages/docs/components/label/label.variants.ts index 5bbfa53..7233ab2 100644 --- a/projects/docs/src/app/pages/docs/components/label/label.variants.ts +++ b/projects/docs/src/app/pages/docs/components/label/label.variants.ts @@ -1,9 +1,6 @@ import { Component } from '@angular/core'; import { UiLabel, UiInput, UiFormField, UiDescription } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { FormsModule } from '@angular/forms'; // Label example components for dynamic rendering @@ -12,19 +9,14 @@ import { FormsModule } from '@angular/forms'; template: `
- +
`, imports: [UiLabel, UiInput, UiFormField, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class LabelDefaultExample { email = ''; @@ -36,19 +28,14 @@ export class LabelDefaultExample {

Enter your username to sign in to your account.

- +
`, imports: [UiLabel, UiInput, UiFormField, UiDescription, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class LabelWithDescriptionExample { username = ''; @@ -62,19 +49,14 @@ export class LabelWithDescriptionExample { Password * - + `, imports: [UiLabel, UiInput, UiFormField, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class LabelRequiredExample { password = ''; @@ -85,20 +67,14 @@ export class LabelRequiredExample { template: `
- +
`, imports: [UiLabel, UiInput, UiFormField, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class LabelDisabledExample { disabledValue = 'Disabled value'; @@ -106,28 +82,26 @@ export class LabelDisabledExample { export const labelMeta: IComponentMeta = { title: 'Label', - description: - 'Renders a label associated with a form control or other component.', + description: 'Renders a label associated with a form control or other component.', installation: { package: 'label', import: `import { UiLabel } from '@workspace/ui/directives/label';`, - usage: ``, + usage: `` }, api: { props: [ { name: 'uiLabel', type: 'Directive', - description: - 'The label directive that provides proper styling and accessibility.', + description: 'The label directive that provides proper styling and accessibility.' }, { name: 'class', type: 'string', - description: 'Additional CSS classes to apply to the label.', - }, - ], - }, + description: 'Additional CSS classes to apply to the label.' + } + ] + } }; export const labelVariants: IVariant[] = [ @@ -153,7 +127,7 @@ import { FormsModule } from '@angular/forms'; export class LabelDefaultExample { email = ''; }`, - component: LabelDefaultExample, + component: LabelDefaultExample }, { title: 'With Description', @@ -178,7 +152,7 @@ import { FormsModule } from '@angular/forms'; export class LabelWithDescriptionExample { username = ''; }`, - component: LabelWithDescriptionExample, + component: LabelWithDescriptionExample }, { title: 'Required', @@ -205,7 +179,7 @@ import { FormsModule } from '@angular/forms'; export class LabelRequiredExample { password = ''; }`, - component: LabelRequiredExample, + component: LabelRequiredExample }, { title: 'Disabled', @@ -229,6 +203,6 @@ import { FormsModule } from '@angular/forms'; export class LabelDisabledExample { disabledValue = 'Disabled value'; }`, - component: LabelDisabledExample, - }, -]; + component: LabelDisabledExample + } +]; \ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/components/popover/popover.ts b/projects/docs/src/app/pages/docs/components/popover/popover.ts index a13c3b4..1dfdf1b 100644 --- a/projects/docs/src/app/pages/docs/components/popover/popover.ts +++ b/projects/docs/src/app/pages/docs/components/popover/popover.ts @@ -6,11 +6,14 @@ import { popoverVariants, popoverMeta } from './popover.variants'; selector: 'docs-popover', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Popover { popoverMeta = popoverMeta; popoverVariants = popoverVariants; } + diff --git a/projects/docs/src/app/pages/docs/components/popover/popover.variants.ts b/projects/docs/src/app/pages/docs/components/popover/popover.variants.ts index c257820..d1beb85 100644 --- a/projects/docs/src/app/pages/docs/components/popover/popover.variants.ts +++ b/projects/docs/src/app/pages/docs/components/popover/popover.variants.ts @@ -1,25 +1,18 @@ import { Component, TemplateRef } from '@angular/core'; import { UiPopover, UiPopoverTrigger, UiButton } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; @Component({ selector: 'popover-default-example', template: ` - +
-
- This is a popover content block with arbitrary content. -
+
This is a popover content block with arbitrary content.
`, - imports: [UiPopover, UiPopoverTrigger, UiButton], + imports: [UiPopover, UiPopoverTrigger, UiButton] }) export class PopoverDefaultExample {} @@ -29,23 +22,15 @@ export const popoverMeta: IComponentMeta = { installation: { package: 'popover', import: `import { UiPopover, UiPopoverTrigger } from '@workspace/ui/directives/popover';`, - usage: `
Content
`, + usage: `
Content
` }, api: { props: [ - { - name: 'uiPopoverTrigger', - type: 'TemplateRef', - description: 'Template ref for popover content.', - }, - { - name: 'uiPopoverTriggerPlacement', - type: 'Placement', - description: 'Popover placement.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, - ], - }, + { name: 'uiPopoverTrigger', type: 'TemplateRef', description: 'Template ref for popover content.' }, + { name: 'uiPopoverTriggerPlacement', type: 'Placement', description: 'Popover placement.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } + ] + } }; export const popoverVariants: IVariant[] = [ @@ -68,6 +53,7 @@ import { UiButton } from '@workspace/ui/directives/button'; imports: [UiPopover, UiPopoverTrigger, UiButton] }) export class PopoverDefaultExample {}`, - component: PopoverDefaultExample, - }, + component: PopoverDefaultExample + } ]; + diff --git a/projects/docs/src/app/pages/docs/components/progress/progress.ts b/projects/docs/src/app/pages/docs/components/progress/progress.ts index 6411d62..0b3b8b7 100644 --- a/projects/docs/src/app/pages/docs/components/progress/progress.ts +++ b/projects/docs/src/app/pages/docs/components/progress/progress.ts @@ -7,11 +7,13 @@ import { progressVariants, progressMeta } from './progress.variants'; standalone: true, imports: [ComponentPreview], template: ` - + - `, + ` }) export class Progress { progressMeta = progressMeta; progressVariants = progressVariants; -} +} \ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/components/progress/progress.variants.ts b/projects/docs/src/app/pages/docs/components/progress/progress.variants.ts index 3184016..3b35dfc 100644 --- a/projects/docs/src/app/pages/docs/components/progress/progress.variants.ts +++ b/projects/docs/src/app/pages/docs/components/progress/progress.variants.ts @@ -1,9 +1,6 @@ import { Component, signal } from '@angular/core'; import { UiProgress, UiProgressIndicator } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; // Progress example components for dynamic rendering @Component({ @@ -15,62 +12,61 @@ import { `, imports: [UiProgress, UiProgressIndicator], host: { - class: 'w-full', - }, + class: 'w-full' + } }) export class ProgressDefaultExample { readonly value = signal(33); } + export const progressMeta: IComponentMeta = { title: 'Progress', - description: - 'Displays an indicator showing the completion progress of a task.', + description: 'Displays an indicator showing the completion progress of a task.', installation: { package: 'progress', import: `import { UiProgress, UiProgressIndicator } from '@workspace/ui/directives/progress';`, usage: `
-
`, +` }, api: { props: [ { name: 'uiProgress', type: 'Directive', - description: 'The main progress container directive.', + description: 'The main progress container directive.' }, { name: 'uiProgressIndicator', type: 'Directive', - description: - 'The progress bar indicator that shows the current progress.', + description: 'The progress bar indicator that shows the current progress.' }, { name: 'uiProgressValue', type: 'number', - description: 'The current progress value.', + description: 'The current progress value.' }, { name: 'uiProgressMin', type: 'number', default: '0', - description: 'The minimum progress value.', + description: 'The minimum progress value.' }, { name: 'uiProgressMax', type: 'number', default: '100', - description: 'The maximum progress value.', + description: 'The maximum progress value.' }, { name: 'class', type: 'string', - description: 'Additional CSS classes to apply to the element.', - }, - ], - }, + description: 'Additional CSS classes to apply to the element.' + } + ] + } }; export const progressVariants: IVariant[] = [ @@ -91,6 +87,6 @@ export const progressVariants: IVariant[] = [ export class ProgressDefaultExample { readonly value = signal(33); }`, - component: ProgressDefaultExample, - }, -]; + component: ProgressDefaultExample + } +]; \ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/components/radio-group/radio-group.ts b/projects/docs/src/app/pages/docs/components/radio-group/radio-group.ts index 08d64ec..b6cc8f7 100644 --- a/projects/docs/src/app/pages/docs/components/radio-group/radio-group.ts +++ b/projects/docs/src/app/pages/docs/components/radio-group/radio-group.ts @@ -7,12 +7,11 @@ import { radioGroupVariants, radioGroupMeta } from './radio-group.variants'; standalone: true, imports: [ComponentPreview], template: ` - + - `, + ` }) export class RadioGroup { radioGroupMeta = radioGroupMeta; diff --git a/projects/docs/src/app/pages/docs/components/radio-group/radio-group.variants.ts b/projects/docs/src/app/pages/docs/components/radio-group/radio-group.variants.ts index 6b01cd8..d85b371 100644 --- a/projects/docs/src/app/pages/docs/components/radio-group/radio-group.variants.ts +++ b/projects/docs/src/app/pages/docs/components/radio-group/radio-group.variants.ts @@ -1,15 +1,6 @@ import { Component, model } from '@angular/core'; -import { - UiRadioGroup, - UiRadioItem, - UiRadio, - UiRadioIndicator, - UiLabel, -} from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel } from 'ui'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; // Radio Group example components for dynamic rendering @Component({ @@ -36,7 +27,7 @@ import { `, - imports: [UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel], + imports: [UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel] }) export class RadioGroupDefaultExample { selectedValue = model('comfortable'); @@ -60,7 +51,7 @@ export class RadioGroupDefaultExample { `, - imports: [UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel], + imports: [UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel] }) export class RadioGroupDisabledExample { selectedValue = model('option1'); @@ -90,7 +81,7 @@ export class RadioGroupDisabledExample { `, - imports: [UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel], + imports: [UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel] }) export class RadioGroupHorizontalExample { selectedValue = model('yes'); @@ -101,9 +92,7 @@ export class RadioGroupHorizontalExample { template: `
- +
@@ -115,9 +104,7 @@ export class RadioGroupHorizontalExample {
- +
@@ -127,19 +114,16 @@ export class RadioGroupHorizontalExample {
- `, - imports: [UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel], + imports: [UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel] }) export class RadioGroupFormExample { notificationType = model('all'); - + onSubmit() { console.log('Selected:', this.notificationType()); } @@ -147,8 +131,7 @@ export class RadioGroupFormExample { export const radioGroupMeta: IComponentMeta = { title: 'Radio Group', - description: - 'A set of checkable buttons—known as radio buttons—where no more than one of the buttons can be checked at a time.', + description: 'A set of checkable buttons—known as radio buttons—where no more than one of the buttons can be checked at a time.', installation: { package: 'radio-group', import: `import { UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel } from '@workspace/ui/directives/radio-group';`, @@ -165,7 +148,7 @@ export const radioGroupMeta: IComponentMeta = {
-`, +` }, api: { props: [ @@ -173,34 +156,34 @@ export const radioGroupMeta: IComponentMeta = { name: 'defaultValue', type: 'string', default: 'undefined', - description: 'The value of the selected radio button.', + description: 'The value of the selected radio button.' }, { name: 'disabled', type: 'boolean', default: 'false', - description: 'Whether the radio group is disabled.', + description: 'Whether the radio group is disabled.' }, { name: 'orientation', type: '"vertical" | "horizontal"', default: '"vertical"', - description: 'The orientation of the radio group.', + description: 'The orientation of the radio group.' }, { name: 'class', type: 'string', - description: 'Additional CSS classes to apply to the radio group.', - }, + description: 'Additional CSS classes to apply to the radio group.' + } ], outputs: [ { name: 'defaultValueChange', type: 'string', - description: 'Emitted when the selected value changes.', - }, - ], - }, + description: 'Emitted when the selected value changes.' + } + ] + } }; export const radioGroupVariants: IVariant[] = [ @@ -239,12 +222,11 @@ import { UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel } from '@ export class RadioGroupDefaultExample { selectedValue = model('comfortable'); }`, - component: RadioGroupDefaultExample, + component: RadioGroupDefaultExample }, { title: 'Disabled', - description: - 'A disabled radio group where all options are non-interactive.', + description: 'A disabled radio group where all options are non-interactive.', code: `import { Component, model } from '@angular/core'; import { UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel } from '@workspace/ui/directives/radio-group'; @@ -271,7 +253,7 @@ import { UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel } from '@ export class RadioGroupDisabledExample { selectedValue = model('option1'); }`, - component: RadioGroupDisabledExample, + component: RadioGroupDisabledExample }, { title: 'Horizontal', @@ -308,12 +290,11 @@ import { UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel } from '@ export class RadioGroupHorizontalExample { selectedValue = model('yes'); }`, - component: RadioGroupHorizontalExample, + component: RadioGroupHorizontalExample }, { title: 'Form', - description: - 'A radio group used in a form context with proper form integration.', + description: 'A radio group used in a form context with proper form integration.', code: `import { Component, model } from '@angular/core'; import { UiRadioGroup, UiRadioItem, UiRadio, UiRadioIndicator, UiLabel } from '@workspace/ui/directives/radio-group'; @@ -358,6 +339,6 @@ export class RadioGroupFormExample { console.log('Selected:', this.notificationType()); } }`, - component: RadioGroupFormExample, - }, + component: RadioGroupFormExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/separator/separator.ts b/projects/docs/src/app/pages/docs/components/separator/separator.ts index d93ebf5..c79b6d5 100644 --- a/projects/docs/src/app/pages/docs/components/separator/separator.ts +++ b/projects/docs/src/app/pages/docs/components/separator/separator.ts @@ -6,14 +6,14 @@ import { separatorVariants, separatorMeta } from './separator.variants'; selector: 'docs-separator', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Separator { separatorMeta = separatorMeta; separatorVariants = separatorVariants; } + diff --git a/projects/docs/src/app/pages/docs/components/separator/separator.variants.ts b/projects/docs/src/app/pages/docs/components/separator/separator.variants.ts index 160c89b..9309c63 100644 --- a/projects/docs/src/app/pages/docs/components/separator/separator.variants.ts +++ b/projects/docs/src/app/pages/docs/components/separator/separator.variants.ts @@ -1,9 +1,6 @@ import { Component } from '@angular/core'; import { UiSeparator } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; @Component({ selector: 'separator-default-example', @@ -14,7 +11,7 @@ import {
Section 2
`, - imports: [UiSeparator], + imports: [UiSeparator] }) export class SeparatorDefaultExample {} @@ -24,19 +21,14 @@ export const separatorMeta: IComponentMeta = { installation: { package: 'separator', import: `import { UiSeparator } from '@workspace/ui/directives/separator';`, - usage: `
`, + usage: `
` }, api: { props: [ - { - name: 'uiSeparatorOrientation', - type: '"horizontal" | "vertical"', - default: '"horizontal"', - description: 'Orientation of the separator.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, - ], - }, + { name: 'uiSeparatorOrientation', type: '"horizontal" | "vertical"', default: '"horizontal"', description: 'Orientation of the separator.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } + ] + } }; export const separatorVariants: IVariant[] = [ @@ -57,6 +49,7 @@ export const separatorVariants: IVariant[] = [ imports: [UiSeparator] }) export class SeparatorDefaultExample {}`, - component: SeparatorDefaultExample, - }, + component: SeparatorDefaultExample + } ]; + diff --git a/projects/docs/src/app/pages/docs/components/sheet/sheet.ts b/projects/docs/src/app/pages/docs/components/sheet/sheet.ts index f0da19f..48e4a88 100644 --- a/projects/docs/src/app/pages/docs/components/sheet/sheet.ts +++ b/projects/docs/src/app/pages/docs/components/sheet/sheet.ts @@ -6,9 +6,11 @@ import { sheetVariants, sheetMeta } from './sheet.variants'; selector: 'docs-sheet', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Sheet { sheetMeta = sheetMeta; diff --git a/projects/docs/src/app/pages/docs/components/sheet/sheet.variants.ts b/projects/docs/src/app/pages/docs/components/sheet/sheet.variants.ts index 9b3d617..9fe451a 100644 --- a/projects/docs/src/app/pages/docs/components/sheet/sheet.variants.ts +++ b/projects/docs/src/app/pages/docs/components/sheet/sheet.variants.ts @@ -1,20 +1,9 @@ import { Component } from '@angular/core'; -import { - UiSheet, - UiSheetDescription, - UiSheetFooter, - UiSheetHeader, - UiSheetOverlay, - UiSheetTitle, - UiSheetTrigger, -} from 'ui'; +import { UiSheet, UiSheetDescription, UiSheetFooter, UiSheetHeader, UiSheetOverlay, UiSheetTitle, UiSheetTrigger } from 'ui'; import { UiButton } from 'ui'; import { UiInput } from 'ui'; import { UiLabel } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; import { lucideX } from '@ng-icons/lucide'; @@ -23,55 +12,35 @@ import { lucideX } from '@ng-icons/lucide'; template: ` -
-
-
-

Edit profile

-

- Make changes to your profile here. Click save when you're done. -

- -
-
-
- - -
-
- - +
+
+
+

Edit profile

+

Make changes to your profile here. Click save when you're done.

+ +
+
+
+ + +
+
+ + +
+
+
+ + +
-
-
- - -
-
`, providers: [provideIcons({ lucideX })], - imports: [ - UiSheet, - UiSheetHeader, - UiSheetTitle, - UiSheetDescription, - UiSheetFooter, - UiSheetTrigger, - UiSheetOverlay, - UiButton, - UiInput, - UiLabel, - NgIcon, - ], + imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton, UiInput, UiLabel, NgIcon] }) export class SheetDefaultExample {} @@ -80,34 +49,23 @@ export class SheetDefaultExample {} template: ` -
-
-
-

Right Side Sheet

-

- This sheet slides in from the right side of the screen. -

-
-
-

Content goes here...

-
-
- -
+
+
+
+

Right Side Sheet

+

This sheet slides in from the right side of the screen.

+
+
+

Content goes here...

+
+
+ +
+
-
`, - imports: [ - UiSheet, - UiSheetHeader, - UiSheetTitle, - UiSheetDescription, - UiSheetFooter, - UiSheetTrigger, - UiSheetOverlay, - UiButton, - ], + imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton] }) export class SheetSideRightExample {} @@ -116,34 +74,23 @@ export class SheetSideRightExample {} template: ` -
-
-
-

Left Side Sheet

-

- This sheet slides in from the left side of the screen. -

-
-
-

Content goes here...

-
-
- -
+
+
+
+

Left Side Sheet

+

This sheet slides in from the left side of the screen.

+
+
+

Content goes here...

+
+
+ +
+
-
`, - imports: [ - UiSheet, - UiSheetHeader, - UiSheetTitle, - UiSheetDescription, - UiSheetFooter, - UiSheetTrigger, - UiSheetOverlay, - UiButton, - ], + imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton] }) export class SheetSideLeftExample {} @@ -152,34 +99,23 @@ export class SheetSideLeftExample {} template: ` -
-
-
-

Top Side Sheet

-

- This sheet slides in from the top of the screen. -

-
-
-

Content goes here...

-
-
- -
+
+
+
+

Top Side Sheet

+

This sheet slides in from the top of the screen.

+
+
+

Content goes here...

+
+
+ +
+
-
`, - imports: [ - UiSheet, - UiSheetHeader, - UiSheetTitle, - UiSheetDescription, - UiSheetFooter, - UiSheetTrigger, - UiSheetOverlay, - UiButton, - ], + imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton] }) export class SheetSideTopExample {} @@ -188,113 +124,73 @@ export class SheetSideTopExample {} template: ` -
-
-
-

Bottom Side Sheet

-

- This sheet slides in from the bottom of the screen. -

-
-
-

Content goes here...

-
-
- -
+
+
+
+

Bottom Side Sheet

+

This sheet slides in from the bottom of the screen.

+
+
+

Content goes here...

+
+
+ +
+
-
`, - imports: [ - UiSheet, - UiSheetHeader, - UiSheetTitle, - UiSheetDescription, - UiSheetFooter, - UiSheetTrigger, - UiSheetOverlay, - UiButton, - ], + imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton] }) export class SheetSideBottomExample {} @Component({ selector: 'sheet-size-example', template: ` - + -
-
-
-

Custom Size Sheet

-

- You can adjust the size of the sheet using CSS classes. -

-
-
-

- This sheet has custom width classes applied. -

-
-
- -
+
+
+
+

Custom Size Sheet

+

You can adjust the size of the sheet using CSS classes.

+
+
+

This sheet has custom width classes applied.

+
+
+ +
+
-
`, - imports: [ - UiSheet, - UiSheetHeader, - UiSheetTitle, - UiSheetDescription, - UiSheetFooter, - UiSheetTrigger, - UiSheetOverlay, - UiButton, - ], + imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton] }) export class SheetSizeExample {} export const sheetMeta: IComponentMeta = { title: 'Sheet', - description: - 'Extends the Dialog component to display content that complements the main content of the screen.', + description: 'Extends the Dialog component to display content that complements the main content of the screen.', installation: { package: 'sheet', import: `import { UiSheet, UiSheetTrigger, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetOverlay } from '@workspace/ui/directives/sheet';`, - usage: `
...
`, + usage: `
...
` }, api: { props: [ - { - name: 'uiSheetTrigger', - type: 'TemplateRef', - description: 'Template ref for sheet content.', - }, - { - name: 'uiSheetModal', - type: 'boolean', - description: 'Whether the sheet is modal.', - }, - { - name: 'side', - type: "'right' | 'left' | 'top' | 'bottom'", - description: 'The edge of the screen where the sheet will appear.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, - ], - }, + { name: 'uiSheetTrigger', type: 'TemplateRef', description: 'Template ref for sheet content.' }, + { name: 'uiSheetModal', type: 'boolean', description: 'Whether the sheet is modal.' }, + { name: 'side', type: "'right' | 'left' | 'top' | 'bottom'", description: 'The edge of the screen where the sheet will appear.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } + ] + } }; export const sheetVariants: IVariant[] = [ { title: 'Default', - description: - 'Basic sheet with header, content, and footer. Slides in from the right by default.', + description: 'Basic sheet with header, content, and footer. Slides in from the right by default.', code: `import { UiSheet, UiSheetTrigger, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetOverlay } from '@workspace/ui/directives/sheet'; import { UiButton } from '@workspace/ui/directives/button'; import { UiInput } from '@workspace/ui/directives/input'; @@ -332,12 +228,11 @@ import { UiLabel } from '@workspace/ui/directives/label'; imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton, UiInput, UiLabel] }) export class SheetDefaultExample {}`, - component: SheetDefaultExample, + component: SheetDefaultExample }, { title: 'Side', - description: - 'Use the side property to indicate the edge of the screen where the component will appear.', + description: 'Use the side property to indicate the edge of the screen where the component will appear.', code: `// Right side (default)
...
@@ -349,7 +244,7 @@ export class SheetDefaultExample {}`, // Bottom side
...
`, - component: SheetSideRightExample, + component: SheetSideRightExample }, { title: 'Left Side', @@ -381,7 +276,7 @@ import { UiButton } from '@workspace/ui/directives/button'; imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton] }) export class SheetSideLeftExample {}`, - component: SheetSideLeftExample, + component: SheetSideLeftExample }, { title: 'Top Side', @@ -413,7 +308,7 @@ import { UiButton } from '@workspace/ui/directives/button'; imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton] }) export class SheetSideTopExample {}`, - component: SheetSideTopExample, + component: SheetSideTopExample }, { title: 'Bottom Side', @@ -445,7 +340,7 @@ import { UiButton } from '@workspace/ui/directives/button'; imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton] }) export class SheetSideBottomExample {}`, - component: SheetSideBottomExample, + component: SheetSideBottomExample }, { title: 'Size', @@ -477,6 +372,6 @@ import { UiButton } from '@workspace/ui/directives/button'; imports: [UiSheet, UiSheetHeader, UiSheetTitle, UiSheetDescription, UiSheetFooter, UiSheetTrigger, UiSheetOverlay, UiButton] }) export class SheetSizeExample {}`, - component: SheetSizeExample, - }, + component: SheetSizeExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/skeleton/skeleton.ts b/projects/docs/src/app/pages/docs/components/skeleton/skeleton.ts index 56c30fb..3458597 100644 --- a/projects/docs/src/app/pages/docs/components/skeleton/skeleton.ts +++ b/projects/docs/src/app/pages/docs/components/skeleton/skeleton.ts @@ -6,9 +6,11 @@ import { skeletonVariants, skeletonMeta } from './skeleton.variants'; selector: 'docs-skeleton', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Skeleton { skeletonMeta = skeletonMeta; diff --git a/projects/docs/src/app/pages/docs/components/skeleton/skeleton.variants.ts b/projects/docs/src/app/pages/docs/components/skeleton/skeleton.variants.ts index d32b196..e2a06b8 100644 --- a/projects/docs/src/app/pages/docs/components/skeleton/skeleton.variants.ts +++ b/projects/docs/src/app/pages/docs/components/skeleton/skeleton.variants.ts @@ -1,9 +1,6 @@ import { Component } from '@angular/core'; import { UiSkeleton } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; @Component({ selector: 'skeleton-default-example', @@ -16,7 +13,7 @@ import {
`, - imports: [UiSkeleton], + imports: [UiSkeleton] }) export class SkeletonDefaultExample {} @@ -31,7 +28,7 @@ export class SkeletonDefaultExample {}
`, - imports: [UiSkeleton], + imports: [UiSkeleton] }) export class SkeletonCardExample {} @@ -62,7 +59,7 @@ export class SkeletonCardExample {}
`, - imports: [UiSkeleton], + imports: [UiSkeleton] }) export class SkeletonListExample {} @@ -72,17 +69,13 @@ export const skeletonMeta: IComponentMeta = { installation: { package: 'skeleton', import: `import { UiSkeleton } from '@workspace/ui/directives/skeleton';`, - usage: `
`, + usage: `
` }, api: { props: [ - { - name: 'class', - type: 'string', - description: 'Additional CSS classes to apply to the skeleton element.', - }, - ], - }, + { name: 'class', type: 'string', description: 'Additional CSS classes to apply to the skeleton element.' } + ] + } }; export const skeletonVariants: IVariant[] = [ @@ -105,12 +98,11 @@ export const skeletonVariants: IVariant[] = [ imports: [UiSkeleton] }) export class SkeletonDefaultExample {}`, - component: SkeletonDefaultExample, + component: SkeletonDefaultExample }, { title: 'Card', - description: - 'A skeleton for card layouts with image and text placeholders.', + description: 'A skeleton for card layouts with image and text placeholders.', code: `import { UiSkeleton } from '@workspace/ui/directives/skeleton'; @Component({ @@ -127,7 +119,7 @@ export class SkeletonDefaultExample {}`, imports: [UiSkeleton] }) export class SkeletonCardExample {}`, - component: SkeletonCardExample, + component: SkeletonCardExample }, { title: 'List', @@ -164,6 +156,6 @@ export class SkeletonCardExample {}`, imports: [UiSkeleton] }) export class SkeletonListExample {}`, - component: SkeletonListExample, - }, + component: SkeletonListExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/switch/switch.ts b/projects/docs/src/app/pages/docs/components/switch/switch.ts index b3bb0d5..5f137d6 100644 --- a/projects/docs/src/app/pages/docs/components/switch/switch.ts +++ b/projects/docs/src/app/pages/docs/components/switch/switch.ts @@ -6,9 +6,11 @@ import { switchVariants, switchMeta } from './switch.variants'; selector: 'docs-switch', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Switch { switchMeta = switchMeta; diff --git a/projects/docs/src/app/pages/docs/components/switch/switch.variants.ts b/projects/docs/src/app/pages/docs/components/switch/switch.variants.ts index cefe372..6890e4b 100644 --- a/projects/docs/src/app/pages/docs/components/switch/switch.variants.ts +++ b/projects/docs/src/app/pages/docs/components/switch/switch.variants.ts @@ -1,38 +1,35 @@ import { Component, model } from '@angular/core'; import { UiFormField, UiLabel, UiSwitch, UiSwitchThumb } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; // Switch example components for dynamic rendering @Component({ selector: 'switch-default-example', template: `
- - + +
`, - imports: [UiSwitch, UiSwitchThumb, UiFormField, UiLabel], + imports: [UiSwitch, UiSwitchThumb, UiFormField, UiLabel] }) export class SwitchDefaultExample { - checked = model(false); + checked = model(false); } @Component({ selector: 'switch-disabled-example', template: `
- - + +
`, - imports: [UiSwitch, UiSwitchThumb, UiFormField, UiLabel], + imports: [UiSwitch, UiSwitchThumb, UiFormField, UiLabel] }) export class SwitchDisabledExample { checked = model(false); @@ -45,10 +42,12 @@ export class SwitchDisabledExample { - +
`, - imports: [UiSwitch, UiSwitchThumb, UiFormField, UiLabel], + imports: [UiSwitch, UiSwitchThumb, UiFormField, UiLabel] }) export class SwitchCheckedExample { checked = model(true); @@ -61,9 +60,7 @@ export class SwitchCheckedExample {

Email Notifications

-
+

@@ -74,9 +71,7 @@ export class SwitchCheckedExample {

-
+

@@ -87,11 +82,11 @@ export class SwitchCheckedExample {

+
-
`, - imports: [UiSwitch, UiSwitchThumb, UiFormField, UiLabel], + imports: [UiSwitch, UiSwitchThumb, UiFormField, UiLabel] }) export class SwitchFormExample { marketingEmails = model(false); @@ -101,8 +96,7 @@ export class SwitchFormExample { // Component metadata for documentation export const switchMeta: IComponentMeta = { title: 'Switch', - description: - 'A control that allows the user to toggle between checked and not checked.', + description: 'A control that allows the user to toggle between checked and not checked.', installation: { package: `switch';`, import: `import { UiSwitch, UiSwitchThumb } from '@workspace/ui/directives/switch'; @@ -113,7 +107,7 @@ import { UiLabel } from '@workspace/ui/directives/label';`, -
`, +
` }, api: { props: [ @@ -121,28 +115,28 @@ import { UiLabel } from '@workspace/ui/directives/label';`, name: 'checked', type: 'boolean', default: 'false', - description: 'Whether the switch is checked.', + description: 'Whether the switch is checked.' }, { name: 'disabled', type: 'boolean', default: 'false', - description: 'Whether the switch is disabled.', + description: 'Whether the switch is disabled.' }, { name: 'class', type: 'string', - description: 'Additional CSS classes to apply to the switch.', - }, + description: 'Additional CSS classes to apply to the switch.' + } ], outputs: [ { name: 'checkedChange', type: 'boolean', - description: 'Emitted when the checked state changes.', - }, - ], - }, + description: 'Emitted when the checked state changes.' + } + ] + } }; export const switchVariants: IVariant[] = [ @@ -169,7 +163,7 @@ import { UiLabel } from '@workspace/ui/directives/label'; export class SwitchDefaultExample { checked = model(false); }`, - component: SwitchDefaultExample, + component: SwitchDefaultExample }, { title: 'Disabled', @@ -194,7 +188,7 @@ import { UiLabel } from '@workspace/ui/directives/label'; export class SwitchDisabledExample { checked = model(false); }`, - component: SwitchDisabledExample, + component: SwitchDisabledExample }, { title: 'Checked', @@ -221,12 +215,11 @@ import { UiLabel } from '@workspace/ui/directives/label'; export class SwitchCheckedExample { checked = model(true); }`, - component: SwitchCheckedExample, + component: SwitchCheckedExample }, { title: 'Form', - description: - 'A switch used in a form context with labels and descriptions.', + description: 'A switch used in a form context with labels and descriptions.', code: `import { Component, model } from '@angular/core'; import { UiSwitch, UiSwitchThumb } from '@workspace/ui/directives/switch'; import { UiFormField } from '@workspace/ui/directives/form-field'; @@ -271,6 +264,6 @@ export class SwitchFormExample { marketingEmails = model(false); securityEmails = model(true); }`, - component: SwitchFormExample, - }, + component: SwitchFormExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/table/table.ts b/projects/docs/src/app/pages/docs/components/table/table.ts index 5288cee..fce6052 100644 --- a/projects/docs/src/app/pages/docs/components/table/table.ts +++ b/projects/docs/src/app/pages/docs/components/table/table.ts @@ -7,9 +7,11 @@ import { tableVariants, tableMeta } from './table.variants'; standalone: true, imports: [ComponentPreview], template: ` - + - `, + ` }) export class Table { tableMeta = tableMeta; diff --git a/projects/docs/src/app/pages/docs/components/table/table.variants.ts b/projects/docs/src/app/pages/docs/components/table/table.variants.ts index 6d19c36..cb4a053 100644 --- a/projects/docs/src/app/pages/docs/components/table/table.variants.ts +++ b/projects/docs/src/app/pages/docs/components/table/table.variants.ts @@ -1,28 +1,16 @@ -import { Component } from "@angular/core"; -import { - UiTable, - UiTableHeader, - UiTableBody, - UiTableFooter, - UiTableRow, - UiTableHead, - UiTableCell, - UiTableCaption, -} from "ui"; -import { UiBadge, UiButton } from "ui"; -import { - IVariant, - IComponentMeta, -} from "@components/component-preview/component-preview"; -import { NgIcon, provideIcons } from "@ng-icons/core"; -import { lucideArrowUpDown, lucideX } from "@ng-icons/lucide"; +import { Component } from '@angular/core'; +import { UiTable, UiTableHeader, UiTableBody, UiTableFooter, UiTableRow, UiTableHead, UiTableCell, UiTableCaption } from 'ui'; +import { UiBadge, UiButton } from 'ui'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; +import { NgIcon, provideIcons } from '@ng-icons/core'; +import { lucideArrowUpDown, lucideX } from '@ng-icons/lucide'; // Basic table example @Component({ - selector: "table-basic-example", + selector: 'table-basic-example', standalone: true, host: { - class: "w-full", + class: 'w-full' }, template: `
@@ -49,23 +37,16 @@ import { lucideArrowUpDown, lucideX } from "@ng-icons/lucide";
`, - imports: [ - UiTable, - UiTableHeader, - UiTableBody, - UiTableRow, - UiTableHead, - UiTableCell, - ], + imports: [UiTable, UiTableHeader, UiTableBody, UiTableRow, UiTableHead, UiTableCell], }) export class TableBasicExample {} // Table with footer example @Component({ - selector: "table-with-footer-example", + selector: 'table-with-footer-example', standalone: true, host: { - class: "w-full", + class: 'w-full' }, template: `
@@ -94,40 +75,28 @@ export class TableBasicExample {} - - Total - + Total $2,073
`, - imports: [ - UiTable, - UiTableHeader, - UiTableBody, - UiTableFooter, - UiTableRow, - UiTableHead, - UiTableCell, - ], + imports: [UiTable, UiTableHeader, UiTableBody, UiTableFooter, UiTableRow, UiTableHead, UiTableCell] }) export class TableWithFooterExample {} // Table with caption example @Component({ - selector: "table-with-caption-example", + selector: 'table-with-caption-example', standalone: true, host: { - class: "w-full", + class: 'w-full' }, template: `
- + @@ -153,24 +122,16 @@ export class TableWithFooterExample {}
- A list of your recent invoices. - A list of your recent invoices.
Invoice
`, - imports: [ - UiTable, - UiTableHeader, - UiTableBody, - UiTableRow, - UiTableHead, - UiTableCell, - UiTableCaption, - ], + imports: [UiTable, UiTableHeader, UiTableBody, UiTableRow, UiTableHead, UiTableCell, UiTableCaption] }) export class TableWithCaptionExample {} // Table with actions example @Component({ - selector: "table-with-actions-example", + selector: 'table-with-actions-example', standalone: true, host: { - class: "w-full", + class: 'w-full' }, template: `
@@ -226,26 +187,16 @@ export class TableWithCaptionExample {}
`, - imports: [ - UiTable, - UiTableHeader, - UiTableBody, - UiTableRow, - UiTableHead, - UiTableCell, - NgIcon, - UiButton, - ], - providers: [provideIcons({ lucideX })], + imports: [UiTable, UiTableHeader, UiTableBody, UiTableRow, UiTableHead, UiTableCell, NgIcon, UiBadge, UiButton], + providers: [provideIcons({ lucideX })] }) export class TableWithActionsExample {} export const tableMeta: IComponentMeta = { - title: "Table", - description: - "A responsive table component for displaying tabular data with proper styling and accessibility.", + title: 'Table', + description: 'A responsive table component for displaying tabular data with proper styling and accessibility.', installation: { - package: "table", + package: 'table', import: `import { UiTable, UiTableHeader, UiTableBody, UiTableFooter, UiTableRow, UiTableHead, UiTableCell, UiTableCaption } from '@workspace/ui/directives/table';`, usage: `
@@ -263,63 +214,63 @@ export const tableMeta: IComponentMeta = { -
`, +` }, api: { props: [ { - name: "uiTable", - type: "Directive", - description: "Main table container directive with responsive styling.", + name: 'uiTable', + type: 'Directive', + description: 'Main table container directive with responsive styling.' }, { - name: "uiTableHeader", - type: "Directive", - description: "Table header section with border styling.", + name: 'uiTableHeader', + type: 'Directive', + description: 'Table header section with border styling.' }, { - name: "uiTableBody", - type: "Directive", - description: "Table body section with proper row border handling.", + name: 'uiTableBody', + type: 'Directive', + description: 'Table body section with proper row border handling.' }, { - name: "uiTableFooter", - type: "Directive", - description: "Table footer section with muted background and border.", + name: 'uiTableFooter', + type: 'Directive', + description: 'Table footer section with muted background and border.' }, { - name: "uiTableRow", - type: "Directive", - description: "Table row with hover effects and selection states.", + name: 'uiTableRow', + type: 'Directive', + description: 'Table row with hover effects and selection states.' }, { - name: "uiTableHead", - type: "Directive", - description: "Header cell with proper alignment and checkbox support.", + name: 'uiTableHead', + type: 'Directive', + description: 'Header cell with proper alignment and checkbox support.' }, { - name: "uiTableCell", - type: "Directive", - description: "Data cell with padding and checkbox alignment.", + name: 'uiTableCell', + type: 'Directive', + description: 'Data cell with padding and checkbox alignment.' }, { - name: "uiTableCaption", - type: "Directive", - description: "Table caption with muted text styling.", + name: 'uiTableCaption', + type: 'Directive', + description: 'Table caption with muted text styling.' }, { - name: "class", - type: "string", - description: "Additional CSS classes to apply to the table elements.", - }, - ], - }, + name: 'class', + type: 'string', + description: 'Additional CSS classes to apply to the table elements.' + } + ] + } }; export const tableVariants: IVariant[] = [ { - title: "Basic Table", - description: "A simple table with basic data display.", + title: 'Basic Table', + description: 'A simple table with basic data display.', code: `import { UiTable, UiTableHeader, UiTableBody, UiTableRow, UiTableHead, UiTableCell } from '@workspace/ui/directives/table'; @Component({ @@ -353,11 +304,11 @@ export const tableVariants: IVariant[] = [ imports: [UiTable, UiTableHeader, UiTableBody, UiTableRow, UiTableHead, UiTableCell] }) export class TableBasicExample {}`, - component: TableBasicExample, + component: TableBasicExample }, { - title: "Table with Footer", - description: "A table with a footer section for totals or summaries.", + title: 'Table with Footer', + description: 'A table with a footer section for totals or summaries.', code: `import { UiTable, UiTableHeader, UiTableBody, UiTableFooter, UiTableRow, UiTableHead, UiTableCell } from '@workspace/ui/directives/table'; @Component({ @@ -394,11 +345,11 @@ export class TableBasicExample {}`, imports: [UiTable, UiTableHeader, UiTableBody, UiTableFooter, UiTableRow, UiTableHead, UiTableCell] }) export class TableWithFooterExample {}`, - component: TableWithFooterExample, + component: TableWithFooterExample }, { - title: "Table with Caption", - description: "A table with a descriptive caption.", + title: 'Table with Caption', + description: 'A table with a descriptive caption.', code: `import { UiTable, UiTableHeader, UiTableBody, UiTableRow, UiTableHead, UiTableCell, UiTableCaption } from '@workspace/ui/directives/table'; @Component({ @@ -430,12 +381,11 @@ export class TableWithFooterExample {}`, imports: [UiTable, UiTableHeader, UiTableBody, UiTableRow, UiTableHead, UiTableCell, UiTableCaption] }) export class TableWithCaptionExample {}`, - component: TableWithCaptionExample, + component: TableWithCaptionExample }, { - title: "Table with Actions", - description: - "A table with user avatars, status badges, and action buttons.", + title: 'Table with Actions', + description: 'A table with user avatars, status badges, and action buttons.', code: `import { UiTable, UiTableHeader, UiTableBody, UiTableRow, UiTableHead, UiTableCell } from '@workspace/ui/directives/table'; import { UiBadge } from '@workspace/ui/directives/badge'; import { UiButton } from '@workspace/ui/directives/button'; @@ -484,6 +434,6 @@ import { lucideX } from '@ng-icons/lucide'; providers: [provideIcons({ lucideX })] }) export class TableWithActionsExample {}`, - component: TableWithActionsExample, - }, + component: TableWithActionsExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/tabs/tabs.ts b/projects/docs/src/app/pages/docs/components/tabs/tabs.ts index e60da6c..0cf4ec3 100644 --- a/projects/docs/src/app/pages/docs/components/tabs/tabs.ts +++ b/projects/docs/src/app/pages/docs/components/tabs/tabs.ts @@ -7,11 +7,13 @@ import { tabsVariants, tabsMeta } from './tabs.variants'; standalone: true, imports: [ComponentPreview], template: ` - + - `, + ` }) export class Tabs { tabsMeta = tabsMeta; tabsVariants = tabsVariants; -} +} \ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/components/tabs/tabs.variants.ts b/projects/docs/src/app/pages/docs/components/tabs/tabs.variants.ts index 3fe00d0..23004d4 100644 --- a/projects/docs/src/app/pages/docs/components/tabs/tabs.variants.ts +++ b/projects/docs/src/app/pages/docs/components/tabs/tabs.variants.ts @@ -2,10 +2,7 @@ import { Component } from '@angular/core'; import { UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent } from 'ui'; import { NgIcon, provideIcons } from '@ng-icons/core'; import { lucideUser, lucideLock } from '@ng-icons/lucide'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; // Tabs example components for dynamic rendering @Component({ @@ -24,7 +21,7 @@ import { `, - imports: [UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent], + imports: [UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent] }) export class TabsDefaultExample {} @@ -51,7 +48,7 @@ export class TabsDefaultExample {} `, imports: [UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent, NgIcon], - providers: [provideIcons({ lucideUser, lucideLock })], + providers: [provideIcons({ lucideUser, lucideLock })] }) export class TabsWithIconsExample {} @@ -62,9 +59,7 @@ export class TabsWithIconsExample {}
- +
Make changes to your account here.
@@ -77,7 +72,7 @@ export class TabsWithIconsExample {}
`, - imports: [UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent], + imports: [UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent] }) export class TabsVerticalExample {} @@ -87,16 +82,8 @@ export class TabsVerticalExample {}
- - + +
Make changes to your account here.
@@ -109,14 +96,13 @@ export class TabsVerticalExample {}
`, - imports: [UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent], + imports: [UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent] }) export class TabsDisabledExample {} export const tabsMeta: IComponentMeta = { title: 'Tabs', - description: - 'A set of layered sections of content—known as tab panels—that are displayed one at a time.', + description: 'A set of layered sections of content—known as tab panels—that are displayed one at a time.', installation: { package: 'tabs', import: `import { UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent } from '@workspace/ui/directives';`, @@ -126,65 +112,64 @@ export const tabsMeta: IComponentMeta = {
Content
-`, +` }, api: { props: [ { name: 'uiTabs', type: 'Directive', - description: 'The main tabs container directive.', + description: 'The main tabs container directive.' }, { name: 'uiTabsList', type: 'Directive', - description: 'The container for tab triggers.', + description: 'The container for tab triggers.' }, { name: 'uiTabsTrigger', type: 'Directive', - description: 'The clickable tab button.', + description: 'The clickable tab button.' }, { name: 'uiTabsContent', type: 'Directive', - description: 'The content panel for each tab.', + description: 'The content panel for each tab.' }, { name: 'uiTabsValue', type: 'string', - description: 'The value of the currently selected tab.', + description: 'The value of the currently selected tab.' }, { name: 'uiTabsOrientation', type: '"horizontal" | "vertical"', default: '"horizontal"', - description: 'The orientation of the tabs.', + description: 'The orientation of the tabs.' }, { name: 'uiTabsTriggerValue', type: 'string', - description: 'The value associated with this tab trigger.', + description: 'The value associated with this tab trigger.' }, { name: 'uiTabsTriggerDisabled', type: 'boolean', default: 'false', - description: 'Whether the tab trigger is disabled.', + description: 'Whether the tab trigger is disabled.' }, { name: 'uiTabsContentValue', type: 'string', - description: - 'The value that matches this content panel to its trigger.', + description: 'The value that matches this content panel to its trigger.' }, { name: 'class', type: 'string', - description: 'Additional CSS classes to apply to the element.', - }, - ], - }, + description: 'Additional CSS classes to apply to the element.' + } + ] + } }; export const tabsVariants: IVariant[] = [ @@ -212,7 +197,7 @@ export const tabsVariants: IVariant[] = [ imports: [UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent] }) export class TabsDefaultExample {}`, - component: TabsDefaultExample, + component: TabsDefaultExample }, { title: 'With Icons', @@ -247,7 +232,7 @@ import { lucideUser, lucideLock } from '@ng-icons/lucide'; providers: [provideIcons({ lucideUser, lucideLock })] }) export class TabsWithIconsExample {}`, - component: TabsWithIconsExample, + component: TabsWithIconsExample }, { title: 'Disabled', @@ -277,6 +262,6 @@ export class TabsWithIconsExample {}`, imports: [UiTabs, UiTabsList, UiTabsTrigger, UiTabsContent] }) export class TabsDisabledExample {}`, - component: TabsDisabledExample, - }, -]; + component: TabsDisabledExample + } +]; \ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/components/textarea/textarea.ts b/projects/docs/src/app/pages/docs/components/textarea/textarea.ts index 0a19ccb..5e2c59a 100644 --- a/projects/docs/src/app/pages/docs/components/textarea/textarea.ts +++ b/projects/docs/src/app/pages/docs/components/textarea/textarea.ts @@ -7,9 +7,11 @@ import { textareaVariants, textareaMeta } from './textarea.variants'; standalone: true, imports: [ComponentPreview], template: ` - + - `, + ` }) export class Textarea { textareaMeta = textareaMeta; diff --git a/projects/docs/src/app/pages/docs/components/textarea/textarea.variants.ts b/projects/docs/src/app/pages/docs/components/textarea/textarea.variants.ts index 7e0b5f7..2c0ca68 100644 --- a/projects/docs/src/app/pages/docs/components/textarea/textarea.variants.ts +++ b/projects/docs/src/app/pages/docs/components/textarea/textarea.variants.ts @@ -1,24 +1,17 @@ import { Component } from '@angular/core'; import { UiDescription, UiFormField, UiTextarea, UiButton, UiLabel } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { FormsModule } from '@angular/forms'; @Component({ selector: 'textarea-default-example', template: ` - + `, imports: [UiTextarea, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', + 'class': 'w-2/3 space-y-6 mx-auto' }, }) export class TextareaDefaultExample { @@ -28,17 +21,12 @@ export class TextareaDefaultExample { @Component({ selector: 'textarea-disabled-example', template: ` - + `, imports: [UiTextarea, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', + 'class': 'w-2/3 space-y-6 mx-auto' }, }) export class TextareaDisabledExample { @@ -50,19 +38,14 @@ export class TextareaDisabledExample { template: `
- +
`, imports: [UiTextarea, UiLabel, UiFormField, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class TextareaWithLabelExample { message = ''; @@ -73,12 +56,7 @@ export class TextareaWithLabelExample { template: `
- +

Your message will be copied to the support team.

@@ -87,8 +65,8 @@ export class TextareaWithLabelExample { imports: [UiTextarea, UiLabel, UiFormField, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class TextareaWithTextExample { message = ''; @@ -98,19 +76,15 @@ export class TextareaWithTextExample { selector: 'textarea-with-button-example', template: `
- +
`, imports: [UiTextarea, UiButton, FormsModule], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', - }, + 'class': 'w-2/3 space-y-6 mx-auto' + } }) export class TextareaWithButtonExample { message = ''; @@ -122,29 +96,18 @@ export class TextareaWithButtonExample {
- -

Tell us a little bit about yourself

+ +

+ Tell us a little bit about yourself +

`, - imports: [ - UiTextarea, - UiLabel, - UiButton, - FormsModule, - UiFormField, - UiDescription, - ], + imports: [UiTextarea, UiLabel, UiButton, FormsModule, UiFormField, UiDescription], standalone: true, host: { - class: 'w-2/3 space-y-6 mx-auto', + 'class': 'w-2/3 space-y-6 mx-auto' }, }) export class TextareaFormExample { @@ -157,43 +120,22 @@ export class TextareaFormExample { export const textareaMeta: IComponentMeta = { title: 'Textarea', - description: - 'A form textarea component for multi-line text input with various states and configurations.', + description: 'A form textarea component for multi-line text input with various states and configurations.', installation: { package: 'textarea', import: `import { UiTextarea } from '@workspace/ui/directives/textarea';`, - usage: ``, + usage: `` }, api: { props: [ - { - name: 'uiTextarea', - type: 'Directive', - description: 'Textarea directive for styling and functionality.', - }, - { - name: 'placeholder', - type: 'string', - description: 'Placeholder text for the textarea.', - }, - { - name: 'disabled', - type: 'boolean', - description: 'Whether the textarea is disabled.', - }, - { - name: 'rows', - type: 'number', - description: 'Number of visible text lines.', - }, - { - name: 'cols', - type: 'number', - description: 'Number of visible text columns.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, - ], - }, + { name: 'uiTextarea', type: 'Directive', description: 'Textarea directive for styling and functionality.' }, + { name: 'placeholder', type: 'string', description: 'Placeholder text for the textarea.' }, + { name: 'disabled', type: 'boolean', description: 'Whether the textarea is disabled.' }, + { name: 'rows', type: 'number', description: 'Number of visible text lines.' }, + { name: 'cols', type: 'number', description: 'Number of visible text columns.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } + ] + } }; export const textareaVariants: IVariant[] = [ @@ -214,7 +156,7 @@ import { FormsModule } from '@angular/forms'; export class TextareaDefaultExample { message = ''; }`, - component: TextareaDefaultExample, + component: TextareaDefaultExample }, { title: 'Disabled', @@ -233,7 +175,7 @@ import { FormsModule } from '@angular/forms'; export class TextareaDisabledExample { disabledMessage = 'This textarea is disabled'; }`, - component: TextareaDisabledExample, + component: TextareaDisabledExample }, { title: 'With Label', @@ -257,7 +199,7 @@ import { FormsModule } from '@angular/forms'; export class TextareaWithLabelExample { message = ''; }`, - component: TextareaWithLabelExample, + component: TextareaWithLabelExample }, { title: 'With Text', @@ -284,7 +226,7 @@ import { FormsModule } from '@angular/forms'; export class TextareaWithTextExample { message = ''; }`, - component: TextareaWithTextExample, + component: TextareaWithTextExample }, { title: 'With Button', @@ -307,12 +249,11 @@ import { FormsModule } from '@angular/forms'; export class TextareaWithButtonExample { message = ''; }`, - component: TextareaWithButtonExample, + component: TextareaWithButtonExample }, { title: 'Form', - description: - 'Complete form with textarea using ngModel and form field directives.', + description: 'Complete form with textarea using ngModel and form field directives.', code: `import { UiTextarea } from '@workspace/ui/directives/textarea'; import { UiButton } from '@workspace/ui/directives/button'; import { UiFormField, UiDescription, UiLabel } from '@workspace/ui/directives/form-field'; @@ -347,6 +288,6 @@ export class TextareaFormExample { console.log('Form submitted:', { bio: this.bio }); } }`, - component: TextareaFormExample, - }, + component: TextareaFormExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/toggle-group/toggle-group.ts b/projects/docs/src/app/pages/docs/components/toggle-group/toggle-group.ts index 83bf76d..e2d1246 100644 --- a/projects/docs/src/app/pages/docs/components/toggle-group/toggle-group.ts +++ b/projects/docs/src/app/pages/docs/components/toggle-group/toggle-group.ts @@ -6,14 +6,14 @@ import { toggleGroupVariants, toggleGroupMeta } from './toggle-group.variants'; selector: 'docs-toggle-group', imports: [ComponentPreview], template: ` - + - `, + ` }) export class ToggleGroup { toggleGroupMeta = toggleGroupMeta; toggleGroupVariants = toggleGroupVariants; } + diff --git a/projects/docs/src/app/pages/docs/components/toggle-group/toggle-group.variants.ts b/projects/docs/src/app/pages/docs/components/toggle-group/toggle-group.variants.ts index 73b450c..965c059 100644 --- a/projects/docs/src/app/pages/docs/components/toggle-group/toggle-group.variants.ts +++ b/projects/docs/src/app/pages/docs/components/toggle-group/toggle-group.variants.ts @@ -1,18 +1,8 @@ import { Component, effect, model } from '@angular/core'; import { UiToggleGroup, UiToggleGroupItem } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; -import { - lucideBold, - lucideItalic, - lucideUnderline, - lucideAlignLeft, - lucideAlignCenter, - lucideAlignRight, -} from '@ng-icons/lucide'; +import { lucideBold, lucideItalic, lucideUnderline, lucideAlignLeft, lucideAlignCenter, lucideAlignRight } from '@ng-icons/lucide'; // Toggle Group example components for dynamic rendering @Component({ @@ -31,7 +21,7 @@ import {
`, imports: [UiToggleGroup, UiToggleGroupItem, NgIcon], - providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })], + providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupDefaultExample {} @@ -51,7 +41,7 @@ export class ToggleGroupDefaultExample {} `, imports: [UiToggleGroup, UiToggleGroupItem, NgIcon], - providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })], + providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupOutlineExample {} @@ -71,7 +61,7 @@ export class ToggleGroupOutlineExample {} `, imports: [UiToggleGroup, UiToggleGroupItem, NgIcon], - providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })], + providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupSingleExample {} @@ -91,7 +81,7 @@ export class ToggleGroupSingleExample {} `, imports: [UiToggleGroup, UiToggleGroupItem, NgIcon], - providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })], + providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupSmallExample {} @@ -111,7 +101,7 @@ export class ToggleGroupSmallExample {} `, imports: [UiToggleGroup, UiToggleGroupItem, NgIcon], - providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })], + providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupLargeExample {} @@ -131,7 +121,7 @@ export class ToggleGroupLargeExample {} `, imports: [UiToggleGroup, UiToggleGroupItem, NgIcon], - providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })], + providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupDisabledExample {} @@ -154,9 +144,7 @@ export class ToggleGroupDisabledExample {} `, imports: [UiToggleGroup, UiToggleGroupItem, NgIcon], - providers: [ - provideIcons({ lucideAlignLeft, lucideAlignCenter, lucideAlignRight }), - ], + providers: [provideIcons({ lucideAlignLeft, lucideAlignCenter, lucideAlignRight })] }) export class ToggleGroupTextExample {} @@ -170,7 +158,7 @@ export const toggleGroupMeta: IComponentMeta = { -`, +` }, api: { props: [ @@ -178,60 +166,56 @@ export const toggleGroupMeta: IComponentMeta = { name: 'variant', type: '"default" | "outline"', default: '"default"', - description: - 'The visual variant of the toggle group. Applied to both the group container and all items.', + description: 'The visual variant of the toggle group. Applied to both the group container and all items.' }, { name: 'size', type: '"default" | "sm" | "lg"', default: '"default"', - description: - 'The size of the toggle group. Applied to both the group container and all items.', + description: 'The size of the toggle group. Applied to both the group container and all items.' }, { name: 'type', type: '"single" | "multiple"', default: '"single"', - description: 'Whether to allow single or multiple selections.', + description: 'Whether to allow single or multiple selections.' }, { name: 'disabled', type: 'boolean', default: 'false', - description: 'Whether the toggle group is disabled.', + description: 'Whether the toggle group is disabled.' }, { name: 'groupValue', type: 'string | string[]', - description: 'The current value(s) of the toggle group.', + description: 'The current value(s) of the toggle group.' }, { name: 'value', type: 'string', - description: - 'The value of the toggle group item. Items inherit variant and size from parent.', + description: 'The value of the toggle group item. Items inherit variant and size from parent.' }, { name: 'disabled', type: 'boolean', default: 'false', - description: 'Whether the toggle group item is disabled.', + description: 'Whether the toggle group item is disabled.' }, { name: 'class', type: 'string', - description: - 'Additional CSS classes to apply to the toggle group or item.', - }, + description: 'Additional CSS classes to apply to the toggle group or item.' + } ], outputs: [ { name: 'groupValueChange', type: 'EventEmitter', - description: 'Event emitted when the toggle group value changes.', - }, - ], - }, + description: 'Event emitted when the toggle group value changes.' + } + ] + } }; export const toggleGroupVariants: IVariant[] = [ @@ -261,7 +245,7 @@ import { lucideBold, lucideItalic, lucideUnderline } from '@ng-icons/lucide'; providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupDefaultExample {}`, - component: ToggleGroupDefaultExample, + component: ToggleGroupDefaultExample }, { title: 'Outline', @@ -289,7 +273,7 @@ import { lucideBold, lucideItalic, lucideUnderline } from '@ng-icons/lucide'; providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupOutlineExample {}`, - component: ToggleGroupOutlineExample, + component: ToggleGroupOutlineExample }, { title: 'Single Selection', @@ -317,7 +301,7 @@ import { lucideBold, lucideItalic, lucideUnderline } from '@ng-icons/lucide'; providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupSingleExample {}`, - component: ToggleGroupSingleExample, + component: ToggleGroupSingleExample }, { title: 'Small Size', @@ -345,7 +329,7 @@ import { lucideBold, lucideItalic, lucideUnderline } from '@ng-icons/lucide'; providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupSmallExample {}`, - component: ToggleGroupSmallExample, + component: ToggleGroupSmallExample }, { title: 'Large Size', @@ -373,7 +357,7 @@ import { lucideBold, lucideItalic, lucideUnderline } from '@ng-icons/lucide'; providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupLargeExample {}`, - component: ToggleGroupLargeExample, + component: ToggleGroupLargeExample }, { title: 'Disabled', @@ -401,7 +385,7 @@ import { lucideBold, lucideItalic, lucideUnderline } from '@ng-icons/lucide'; providers: [provideIcons({ lucideBold, lucideItalic, lucideUnderline })] }) export class ToggleGroupDisabledExample {}`, - component: ToggleGroupDisabledExample, + component: ToggleGroupDisabledExample }, { title: 'With Text', @@ -432,6 +416,7 @@ import { lucideAlignLeft, lucideAlignCenter, lucideAlignRight } from '@ng-icons/ providers: [provideIcons({ lucideAlignLeft, lucideAlignCenter, lucideAlignRight })] }) export class ToggleGroupTextExample {}`, - component: ToggleGroupTextExample, - }, + component: ToggleGroupTextExample + } ]; + diff --git a/projects/docs/src/app/pages/docs/components/toggle/toggle.ts b/projects/docs/src/app/pages/docs/components/toggle/toggle.ts index fa17d80..31afcb9 100644 --- a/projects/docs/src/app/pages/docs/components/toggle/toggle.ts +++ b/projects/docs/src/app/pages/docs/components/toggle/toggle.ts @@ -6,9 +6,11 @@ import { toggleVariants, toggleMeta } from './toggle.variants'; selector: 'docs-toggle', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Toggle { toggleMeta = toggleMeta; diff --git a/projects/docs/src/app/pages/docs/components/toggle/toggle.variants.ts b/projects/docs/src/app/pages/docs/components/toggle/toggle.variants.ts index b4c49f1..bc399eb 100644 --- a/projects/docs/src/app/pages/docs/components/toggle/toggle.variants.ts +++ b/projects/docs/src/app/pages/docs/components/toggle/toggle.variants.ts @@ -1,23 +1,22 @@ import { Component, model } from '@angular/core'; import { UiToggle } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; import { NgIcon, provideIcons } from '@ng-icons/core'; import { lucideBold, lucideItalic, lucideUnderline } from '@ng-icons/lucide'; // Toggle example components for dynamic rendering @Component({ selector: 'toggle-default-example', - template: ` `, imports: [UiToggle, NgIcon], providers: [provideIcons({ lucideBold })], + }) export class ToggleDefaultExample { - selected = model(false); + selected = model(false); } @Component({ @@ -27,9 +26,10 @@ export class ToggleDefaultExample { `, imports: [UiToggle, NgIcon], providers: [provideIcons({ lucideItalic })], + }) export class ToggleOutlineExample { - selected = model(false); + selected = model(false); } @Component({ @@ -40,9 +40,10 @@ export class ToggleOutlineExample { `, imports: [UiToggle, NgIcon], providers: [provideIcons({ lucideItalic })], + }) export class ToggleWithTextExample { - selected = model(false); + selected = model(false); } @Component({ @@ -62,11 +63,12 @@ export class ToggleWithTextExample { `, imports: [UiToggle, NgIcon], providers: [provideIcons({ lucideBold })], + }) export class ToggleSizesExample { - selectedSm = model(false); - selectedDefault = model(false); - selectedLg = model(false); + selectedSm = model(false); + selectedDefault = model(false); + selectedLg = model(false); } @Component({ @@ -76,18 +78,21 @@ export class ToggleSizesExample { `, imports: [UiToggle, NgIcon], providers: [provideIcons({ lucideUnderline })], + }) export class ToggleDisabledExample { - selected = model(false); + selected = model(false); } + + export const toggleMeta: IComponentMeta = { title: 'Toggle', description: 'A two-state button that can be either on or off.', installation: { package: 'toggle', import: `import { UiToggle } from '@workspace/ui/directives/toggle';`, - usage: ``, + usage: `` }, api: { props: [ @@ -95,33 +100,33 @@ export const toggleMeta: IComponentMeta = { name: 'variant', type: '"default" | "outline"', default: '"default"', - description: 'The visual variant of the toggle.', + description: 'The visual variant of the toggle.' }, { name: 'size', type: '"default" | "sm" | "lg"', default: '"default"', - description: 'The size of the toggle.', + description: 'The size of the toggle.' }, { name: 'disabled', type: 'boolean', default: 'false', - description: 'Whether the toggle is disabled.', + description: 'Whether the toggle is disabled.' }, { name: 'uiToggleSelected', type: 'boolean', default: 'false', - description: 'Two-way binding for the toggle state.', + description: 'Two-way binding for the toggle state.' }, { name: 'class', type: 'string', - description: 'Additional CSS classes to apply to the toggle.', - }, - ], - }, + description: 'Additional CSS classes to apply to the toggle.' + } + ] + } }; export const toggleVariants: IVariant[] = [ @@ -144,7 +149,7 @@ import { lucideBold } from '@ng-icons/lucide'; export class ToggleDefaultExample { selected = model(false); }`, - component: ToggleDefaultExample, + component: ToggleDefaultExample }, { title: 'Outline', @@ -165,7 +170,7 @@ import { lucideItalic } from '@ng-icons/lucide'; export class ToggleOutlineExample { selected = model(false); }`, - component: ToggleOutlineExample, + component: ToggleOutlineExample }, { title: 'With Text', @@ -187,7 +192,7 @@ import { lucideItalic } from '@ng-icons/lucide'; export class ToggleWithTextExample { selected = model(false); }`, - component: ToggleWithTextExample, + component: ToggleWithTextExample }, { title: 'Sizes', @@ -220,7 +225,7 @@ export class ToggleSizesExample { selectedDefault = model(false); selectedLg = model(false); }`, - component: ToggleSizesExample, + component: ToggleSizesExample }, { title: 'Disabled', @@ -241,6 +246,6 @@ import { lucideUnderline } from '@ng-icons/lucide'; export class ToggleDisabledExample { selected = model(false); }`, - component: ToggleDisabledExample, - }, + component: ToggleDisabledExample + } ]; diff --git a/projects/docs/src/app/pages/docs/components/tooltip/tooltip.ts b/projects/docs/src/app/pages/docs/components/tooltip/tooltip.ts index 3ee428f..5c5ee0c 100644 --- a/projects/docs/src/app/pages/docs/components/tooltip/tooltip.ts +++ b/projects/docs/src/app/pages/docs/components/tooltip/tooltip.ts @@ -6,11 +6,14 @@ import { tooltipVariants, tooltipMeta } from './tooltip.variants'; selector: 'docs-tooltip', imports: [ComponentPreview], template: ` - + - `, + ` }) export class Tooltip { tooltipMeta = tooltipMeta; tooltipVariants = tooltipVariants; } + diff --git a/projects/docs/src/app/pages/docs/components/tooltip/tooltip.variants.ts b/projects/docs/src/app/pages/docs/components/tooltip/tooltip.variants.ts index 33f9254..cf0d1aa 100644 --- a/projects/docs/src/app/pages/docs/components/tooltip/tooltip.variants.ts +++ b/projects/docs/src/app/pages/docs/components/tooltip/tooltip.variants.ts @@ -1,22 +1,17 @@ import { Component, TemplateRef } from '@angular/core'; import { UiTooltip, UiTooltipTrigger, UiButton, UiTooltipArrow } from 'ui'; -import { - IVariant, - IComponentMeta, -} from '@components/component-preview/component-preview'; +import { IVariant, IComponentMeta } from '@components/component-preview/component-preview'; @Component({ selector: 'tooltip-default-example', template: ` - +
Add to library
`, - imports: [UiTooltip, UiTooltipTrigger, UiTooltipArrow, UiButton], + imports: [UiTooltip, UiTooltipTrigger, UiTooltipArrow, UiButton] }) export class TooltipDefaultExample {} @@ -26,23 +21,15 @@ export const tooltipMeta: IComponentMeta = { installation: { package: 'tooltip', import: `import { UiTooltip, UiTooltipTrigger } from '@workspace/ui/directives/tooltip';`, - usage: `
Add to library
`, + usage: `
Add to library
` }, api: { props: [ - { - name: 'uiTooltipTrigger', - type: 'TemplateRef', - description: 'Template ref for tooltip content.', - }, - { - name: 'uiTooltipTriggerPlacement', - type: 'Placement', - description: 'Tooltip placement.', - }, - { name: 'class', type: 'string', description: 'Additional CSS classes.' }, - ], - }, + { name: 'uiTooltipTrigger', type: 'TemplateRef', description: 'Template ref for tooltip content.' }, + { name: 'uiTooltipTriggerPlacement', type: 'Placement', description: 'Tooltip placement.' }, + { name: 'class', type: 'string', description: 'Additional CSS classes.' } + ] + } }; export const tooltipVariants: IVariant[] = [ @@ -63,6 +50,7 @@ import { UiButton } from '@workspace/ui/directives/button'; imports: [UiTooltip, UiTooltipTrigger, UiButton] }) export class TooltipDefaultExample {}`, - component: TooltipDefaultExample, - }, + component: TooltipDefaultExample + } ]; + diff --git a/projects/docs/src/app/pages/docs/dark-mode/dark-mode.html b/projects/docs/src/app/pages/docs/dark-mode/dark-mode.html index d61ca21..17f623f 100644 --- a/projects/docs/src/app/pages/docs/dark-mode/dark-mode.html +++ b/projects/docs/src/app/pages/docs/dark-mode/dark-mode.html @@ -1,229 +1,168 @@
-
-

Dark Mode

-

- SlateUI provides built-in dark mode support through the - @slateui/theme package. This package - offers automatic dark mode detection, theme switching, and persistent - theme preferences. -

-
- - -
-

- Package Information -

-

- The dark mode functionality is provided by the - @slateui/theme package: -

-
-
-
-

@slateui/theme

-

- Theme management and dark mode support for SlateUI +

Dark Mode

+

+ SlateUI provides built-in dark mode support through the @slateui/theme package. + This package offers automatic dark mode detection, theme switching, and persistent theme preferences. +

+
+ + +
+

Package Information

+
+

+ The dark mode functionality is provided by the @slateui/theme package:

-
- +
+
+
+

@slateui/theme

+

Theme management and dark mode support for SlateUI

+
+ +
+
-
-
- -
-

Basic Setup

-
-

- Configure the theme service in your Angular application by importing - provideSlateUiTheme from - @slateui/theme and adding it to - your app providers. -

+ +
+

Basic Setup

+
+

+ Configure the theme service in your Angular application by importing provideSlateUiTheme + from @slateui/theme and adding it to your app providers. +

+
-
- -
-

- Theme Strategies -

-
-

- SlateUI supports multiple theme strategies: -

- -
-

Class Strategy (Recommended)

-

- Uses CSS classes to control theme switching. This gives you full - control over when and how themes change. -

-
+ +
+

Theme Strategies

+
+

+ SlateUI supports multiple theme strategies: +

+ +
+

Class Strategy (Recommended)

+

+ Uses CSS classes to control theme switching. This gives you full control over when and how themes change. +

+
-
-

Media Strategy

-

- Automatically follows the system preference without user control. -

-
+
+

Media Strategy

+

+ Automatically follows the system preference without user control. +

+
+
-
- -
-

Basic Usage

-
-

- Inject the ThemeService in your - components to control theme switching. Use methods like - setTheme(), - isDark(), and - isLight() to manage themes. -

+ +
+

Basic Usage

+
+

+ Inject the ThemeService in your components to control theme switching. + Use methods like setTheme(), isDark(), + and isLight() to manage themes. +

+
-
- -
-

- Available Methods -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
- Method - - Description -
- setTheme(theme) - - Set theme to 'light', 'dark', or 'system' -
- getTheme() - - Get current theme setting -
- isDark() - - Check if dark mode is active -
- isLight() - - Check if light mode is active -
-
+ +
+

Available Methods

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
setTheme(theme)Set theme to 'light', 'dark', or 'system'
getTheme()Get current theme setting
isDark()Check if dark mode is active
isLight()Check if light mode is active
+
+
-
- -
-

CSS Variables

-
-

- SlateUI automatically manages CSS custom properties for theming. The - system provides variables for: -

-
    -
  • Background and foreground colors
  • -
  • Primary, secondary, and accent colors
  • -
  • Muted and destructive colors
  • -
  • Border, input, and ring colors
  • -
+ +
+

CSS Variables

+
+

+ SlateUI automatically manages CSS custom properties for theming. The system provides variables for: +

+
    +
  • Background and foreground colors
  • +
  • Primary, secondary, and accent colors
  • +
  • Muted and destructive colors
  • +
  • Border, input, and ring colors
  • +
+
-
- -
-

- Tailwind CSS Integration -

-
-

- Use theme-aware colors in your Tailwind classes like - bg-background, - text-foreground, - text-primary, etc. -

+ +
+

Tailwind CSS Integration

+
+

+ Use theme-aware colors in your Tailwind classes like bg-background, + text-foreground, text-primary, etc. +

+
-
- - diff --git a/projects/docs/src/app/pages/docs/dark-mode/dark-mode.spec.ts b/projects/docs/src/app/pages/docs/dark-mode/dark-mode.spec.ts index 13a8846..c0cc242 100644 --- a/projects/docs/src/app/pages/docs/dark-mode/dark-mode.spec.ts +++ b/projects/docs/src/app/pages/docs/dark-mode/dark-mode.spec.ts @@ -8,8 +8,9 @@ describe('DarkMode', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [DarkMode], - }).compileComponents(); + imports: [DarkMode] + }) + .compileComponents(); fixture = TestBed.createComponent(DarkMode); component = fixture.componentInstance; diff --git a/projects/docs/src/app/pages/docs/dark-mode/dark-mode.ts b/projects/docs/src/app/pages/docs/dark-mode/dark-mode.ts index e73b7df..c9b7652 100644 --- a/projects/docs/src/app/pages/docs/dark-mode/dark-mode.ts +++ b/projects/docs/src/app/pages/docs/dark-mode/dark-mode.ts @@ -4,6 +4,8 @@ import { Component } from '@angular/core'; selector: 'docs-dark-mode', standalone: true, imports: [], - templateUrl: './dark-mode.html', + templateUrl: './dark-mode.html' }) -export class DarkMode {} +export class DarkMode { + +} diff --git a/projects/docs/src/app/pages/docs/docs.html b/projects/docs/src/app/pages/docs/docs.html index 86dd923..e183896 100644 --- a/projects/docs/src/app/pages/docs/docs.html +++ b/projects/docs/src/app/pages/docs/docs.html @@ -10,7 +10,7 @@
- +
@@ -20,4 +20,4 @@ -
+
\ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/docs.routes.ts b/projects/docs/src/app/pages/docs/docs.routes.ts index 59a66a0..92612f8 100644 --- a/projects/docs/src/app/pages/docs/docs.routes.ts +++ b/projects/docs/src/app/pages/docs/docs.routes.ts @@ -2,43 +2,40 @@ import { Routes } from '@angular/router'; import { Docs } from './docs'; export const routes: Routes = [ - { - path: '', - component: Docs, - children: [ - { - path: 'introduction', - loadComponent: () => - import('./introduction/introduction').then((m) => m.Introduction), - }, - { - path: 'installation', - loadComponent: () => - import('./installation/installation').then((m) => m.Installation), - }, - { - path: 'theming', - loadComponent: () => import('./theming/theming').then((m) => m.Theming), - }, - { - path: 'dark-mode', - loadComponent: () => - import('./dark-mode/dark-mode').then((m) => m.DarkMode), - }, - { - path: 'cli', - loadComponent: () => import('./cli/cli').then((m) => m.Cli), - }, - { - path: 'components', - loadChildren: () => - import('./components/components.routes').then((m) => m.routes), - }, - { + { path: '', - redirectTo: 'introduction', - pathMatch: 'full', - }, - ], - }, + component: Docs, + children: [ + { + path: 'introduction', + loadComponent: () => import('./introduction/introduction').then(m => m.Introduction) + }, + { + path: 'installation', + loadComponent: () => import('./installation/installation').then(m => m.Installation) + }, + { + path: 'theming', + loadComponent: () => import('./theming/theming').then(m => m.Theming) + }, + { + path: 'dark-mode', + loadComponent: () => import('./dark-mode/dark-mode').then(m => m.DarkMode) + }, + { + path: 'cli', + loadComponent: () => import('./cli/cli').then(m => m.Cli) + }, + { + path: 'components', + loadChildren: () => import('./components/components.routes').then(m => m.routes) + }, + { + path: '', + redirectTo: 'introduction', + pathMatch: 'full' + } + ] + } + ]; diff --git a/projects/docs/src/app/pages/docs/docs.spec.ts b/projects/docs/src/app/pages/docs/docs.spec.ts index b8d5649..005a7dc 100644 --- a/projects/docs/src/app/pages/docs/docs.spec.ts +++ b/projects/docs/src/app/pages/docs/docs.spec.ts @@ -8,8 +8,9 @@ describe('Docs', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [Docs], - }).compileComponents(); + imports: [Docs] + }) + .compileComponents(); fixture = TestBed.createComponent(Docs); component = fixture.componentInstance; diff --git a/projects/docs/src/app/pages/docs/docs.ts b/projects/docs/src/app/pages/docs/docs.ts index 82493b0..094aa42 100644 --- a/projects/docs/src/app/pages/docs/docs.ts +++ b/projects/docs/src/app/pages/docs/docs.ts @@ -1,19 +1,12 @@ -import { - Component, - effect, - inject, - PLATFORM_ID, - signal, - computed, -} from '@angular/core'; +import { Component, effect, inject, PLATFORM_ID, signal, computed } from '@angular/core'; import { NavigationEnd, Router, RouterOutlet } from '@angular/router'; import { filter } from 'rxjs'; import { isPlatformBrowser } from '@angular/common'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { Sidebar } from '@components/sidebar/sidebar'; -import { Header } from '@components/header/header'; +import { Sidebar } from "@components/sidebar/sidebar"; +import { Header } from "@components/header/header"; import { QuickLinks } from '@components/quick-links/quick-links'; -import { Footer } from '@components/footer/footer'; +import { Footer } from "@components/footer/footer"; // Angular 20 standalone component with modern features @Component({ @@ -23,16 +16,16 @@ import { Footer } from '@components/footer/footer'; templateUrl: './docs.html', host: { class: 'block min-h-screen', - }, + } }) export class Docs { // Injected dependencies using Angular 20 inject function private readonly router = inject(Router); private readonly platform = inject(PLATFORM_ID); - + // Signal-based state management readonly menuOpen = signal(false); - + // Computed values using Angular 20 computed signals readonly currentYear = computed(() => new Date().getFullYear()); readonly isBrowser = computed(() => isPlatformBrowser(this.platform)); @@ -41,8 +34,8 @@ export class Docs { // Navigation listener with automatic cleanup this.router.events .pipe( - filter((event) => event instanceof NavigationEnd), - takeUntilDestroyed(), + filter(event => event instanceof NavigationEnd), + takeUntilDestroyed() ) .subscribe(() => this.menuOpen.set(false)); @@ -63,7 +56,7 @@ export class Docs { // Enhanced menu toggle with proper accessibility toggleMenu(): void { - this.menuOpen.update((open) => !open); + this.menuOpen.update(open => !open); } // Close menu programmatically diff --git a/projects/docs/src/app/pages/docs/installation/installation.html b/projects/docs/src/app/pages/docs/installation/installation.html index 027e518..d47f35a 100644 --- a/projects/docs/src/app/pages/docs/installation/installation.html +++ b/projects/docs/src/app/pages/docs/installation/installation.html @@ -1,211 +1,193 @@
-
-

Installation

-

- Get started with SlateUI in your Angular project. Follow these steps to - install and configure the library using our CLI tool. -

-
- - - -
-

- Installation Steps -

- - -
-
- -
- 1 -
+
+

Installation

+

+ Get started with SlateUI in your Angular project. Follow these steps to install and configure the library + using our CLI tool. +

+
- -
-

Install SlateUI CLI

-

- Install the SlateUI CLI as a development dependency: -

- - -
-
+ + +
+

Installation Steps

+ + +
+
+ +
+ 1 +
+ + +
+

Install SlateUI CLI

+

+ Install the SlateUI CLI as a development dependency: +

+ + +
+
+ + +
+
- -
-
+ +
+
+ +
+ 2 +
+ + +
+

Initialize SlateUI

+

+ Run the initialization command to set up SlateUI in your project: +

+ + +

+ This command will automatically install required dependencies and configure your + project. +

+
+
+ + +
+
- -
-
- -
- 2 + +
+
+ +
+ 3 +
+ + +
+

Add components

+

+ You can now start adding components to your project. +

+ + +
+
+
- - -
-

Initialize SlateUI

-

- Run the initialization command to set up SlateUI in your - project: -

- - -

- This command will automatically install required dependencies - and configure your project. -

+ + + +
+

Manual Installation

+
+

+ If you prefer to install SlateUI manually without the CLI, you can follow these steps: +

+ + +
+
+ +
+ 1 +
+ + +
+

Install Core Dependencies

+

+ Add the following dependencies to your project: +

+
+ + +
+
+
+ + +
+
+ + +
+
+ +
+ 2 +
+ + +
+

Setup Tailwind CSS

+

+ Follow the + official Tailwind CSS Angular framework guide. +

+
+
+ + +
+
+ + +
+
+ +
+ 3 +
+ + +
+

Add CSS Variables

+

+ Add CSS variables to your styles.css: +

+ + +
+
+
+
-
- - -
-
+ + - -
-
- -
- 3 -
+ - -
-

Add components

-

- You can now start adding components to your project. -

- - -
-
-
-
-
- - -
-

- Manual Installation -

-
-

- If you prefer to install SlateUI manually without the CLI, you can - follow these steps: -

- - -
-
- -
- 1 -
- - -
-

Install Core Dependencies

-

- Add the following dependencies to your project: -

-
- - -
-
-
- -
-
- - -
-
- -
- 2 -
- - -
-

Setup Tailwind CSS

-

- Follow the - official Tailwind CSS Angular framework guide. -

-
-
- -
-
- - -
-
- -
- 3 -
- - -
-

Add CSS Variables

-

- Add CSS variables to your - styles.css: -

- - -
-
-
-
-
-
-
- - -
-

Next Steps

-
-

- Now that you have SlateUI installed: -

-
    -
  • Explore the available components in the Components section
  • -
  • Configure your theme and dark mode preferences
  • -
  • Use the CLI to add specific components to your project
  • -
  • Customize the design system to match your brand
  • -
+ +
+

Next Steps

+
+

+ Now that you have SlateUI installed: +

+
    +
  • Explore the available components in the Components section
  • +
  • Configure your theme and dark mode preferences
  • +
  • Use the CLI to add specific components to your project
  • +
  • Customize the design system to match your brand
  • +
+
-
-
+
\ No newline at end of file diff --git a/projects/docs/src/app/pages/docs/installation/installation.spec.ts b/projects/docs/src/app/pages/docs/installation/installation.spec.ts index e8cbe54..a06409d 100644 --- a/projects/docs/src/app/pages/docs/installation/installation.spec.ts +++ b/projects/docs/src/app/pages/docs/installation/installation.spec.ts @@ -8,8 +8,9 @@ describe('Installation', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [Installation], - }).compileComponents(); + imports: [Installation] + }) + .compileComponents(); fixture = TestBed.createComponent(Installation); component = fixture.componentInstance; diff --git a/projects/docs/src/app/pages/docs/installation/installation.ts b/projects/docs/src/app/pages/docs/installation/installation.ts index cee9085..880335b 100644 --- a/projects/docs/src/app/pages/docs/installation/installation.ts +++ b/projects/docs/src/app/pages/docs/installation/installation.ts @@ -2,13 +2,13 @@ import { Component } from '@angular/core'; import { CodeBlock } from '../../../shared/components/code-block/code-block'; import { Tabs } from '@components/tabs/tabs'; import { Tab } from '@components/tab/tab'; -import { UiButton } from 'ui'; +import { UiButton } from "ui"; @Component({ selector: 'docs-installation', standalone: true, imports: [CodeBlock, Tabs, Tab], - templateUrl: './installation.html', + templateUrl: './installation.html' }) export class Installation { // CLI Installation Commands @@ -17,10 +17,8 @@ export class Installation { readonly cliAddComponentCommand = 'ng g @slateui/cli:add button'; // Manual Installation Commands - readonly manualDependenciesCommand = - 'npm install @angular/cdk @floating-ui/dom ng-primitives tailwind-variants tailwind-merge tw-animate-css'; - readonly manualTailwindCommand = - 'npm install tailwindcss @tailwindcss/postcss'; + readonly manualDependenciesCommand = 'npm install @angular/cdk @floating-ui/dom ng-primitives tailwind-variants tailwind-merge tw-animate-css'; + readonly manualTailwindCommand = 'npm install tailwindcss @tailwindcss/postcss'; // CSS Variables readonly cssVariables = `@import 'tailwindcss'; diff --git a/projects/docs/src/app/pages/docs/introduction/introduction.html b/projects/docs/src/app/pages/docs/introduction/introduction.html index 0e30db7..4505c0f 100644 --- a/projects/docs/src/app/pages/docs/introduction/introduction.html +++ b/projects/docs/src/app/pages/docs/introduction/introduction.html @@ -1,336 +1,231 @@
-
-

Introduction

-

- SlateUI is a modern, open-source UI library built for Angular. Powered by - directive-based components, Tailwind CSS 4, and Signals, it helps you - build fast, accessible, and scalable UIs with complete flexibility and - full control over your markup. -

-
- -
-

Key Features

- -
-
-
-
- -
-

Modern Angular

-
-

- Built with the latest Angular features including Signals, Reactive - Forms, and modern component architecture. +

+

Introduction

+

+ SlateUI is a modern, open-source UI library built for Angular. Powered by directive-based components, + Tailwind CSS 4, and Signals, it helps you build fast, accessible, and scalable UIs with complete + flexibility and + full control over your markup.

-
+
-
-
-
- -
-

Tailwind CSS

-
-

- Fully styled with Tailwind CSS 4, featuring built-in dark mode and - complete theme customization. -

-
+ +
+

Key Features

-
-
-
- -
-

Accessible

-
-

- Keyboard navigation and screen reader support built-in, following - WAI-ARIA best practices. -

-
+
+
+
+
+ +
+

Modern Angular

+
+

+ Built with the latest Angular features including Signals, Reactive Forms, and modern component + architecture. +

+
-
-
-
- -
-

CLI Integration

-
-

- Easy integration via CLI with - @slateui/cli for rapid component - installation. -

-
+
+
+
+ +
+

Tailwind CSS

+
+

+ Fully styled with Tailwind CSS 4, featuring built-in dark mode and complete theme customization. +

+
-
-
-
- -
-

Live Previews

-
-

- Interactive documentation with live code examples to speed up your - development workflow. -

-
+
+
+
+ +
+

Accessible

+
+

+ Keyboard navigation and screen reader support built-in, following WAI-ARIA best practices. +

+
+ +
+
+
+ +
+

CLI Integration

+
+

+ Easy integration via CLI with @slateui/cli for rapid component + installation. +

+
+ +
+
+
+ +
+

Live Previews

+
+

+ Interactive documentation with live code examples to speed up your development workflow. +

+
-
-
-
- -
-

Responsive

+
+
+
+ +
+

Responsive

+
+

+ Mobile-first design approach ensuring perfect rendering across all device sizes and orientations. +

+
-

- Mobile-first design approach ensuring perfect rendering across all - device sizes and orientations. -

-
-
- -