` wrapper
diff --git a/package-lock.json b/package-lock.json
index 9f93e08e..5fe8bcf3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -33,6 +33,7 @@
"@primeng/themes": "20.4.0",
"@storybook/addon-a11y": "10.1.8",
"@storybook/addon-docs": "10.1.8",
+ "@storybook/addon-themes": "^10.1.8",
"@storybook/angular": "10.1.8",
"@tabler/icons-webfont": "3.35.0",
"@types/jasmine": "5.1.13",
@@ -50,6 +51,7 @@
"karma-coverage": "2.2.1",
"karma-jasmine": "5.1.0",
"karma-jasmine-html-reporter": "2.1.0",
+ "ng-packagr": "20.3.2",
"prettier": "3.7.4",
"primeng": "20.4.0",
"rxjs": "7.8.2",
@@ -1121,13 +1123,13 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
},
@@ -6183,6 +6185,57 @@
"node": ">=12.11.0"
}
},
+ "node_modules/@rollup/plugin-json": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
+ "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
+ "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.52.3",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz",
@@ -6491,6 +6544,26 @@
"win32"
]
},
+ "node_modules/@rollup/wasm-node": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.60.2.tgz",
+ "integrity": "sha512-FOfZOg752WSyKNefpSM3WrhggSTSuKuwcSfF7tdWC9PBYYg7BLwBR267uShFAI1ZyA0gNkdqK16LL9mNOPsQ1Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -6656,6 +6729,23 @@
"storybook": "^10.1.8"
}
},
+ "node_modules/@storybook/addon-themes": {
+ "version": "10.1.8",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-10.1.8.tgz",
+ "integrity": "sha512-UqaajGe4F18Ne4Z5JUqq+OBS8CqgqvVja7J4ipRjvwP6Myh4/GZP7SXKcA17jrY7xWy4qnVdCSsEthviVMMLkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "storybook": "^10.1.8"
+ }
+ },
"node_modules/@storybook/angular": {
"version": "10.1.8",
"resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-10.1.8.tgz",
@@ -10073,6 +10163,13 @@
"node": ">= 12.0.0"
}
},
+ "node_modules/common-path-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/component-emitter": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-2.0.0.tgz",
@@ -11247,6 +11344,16 @@
"node": ">= 0.8"
}
},
+ "node_modules/dependency-graph": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz",
+ "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/dequal": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@@ -13109,6 +13216,23 @@
"node": ">= 0.6"
}
},
+ "node_modules/find-cache-directory": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-directory/-/find-cache-directory-6.0.0.tgz",
+ "integrity": "sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "common-path-prefix": "^3.0.0",
+ "pkg-dir": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/find-index": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
@@ -13132,6 +13256,19 @@
"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",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/flat": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
@@ -14622,6 +14759,16 @@
"node": "^18.17.0 || >=20.5.0"
}
},
+ "node_modules/injection-js": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.6.1.tgz",
+ "integrity": "sha512-dbR5bdhi7TWDoCye9cByZqeg/gAfamm8Vu3G1KZOTYkOif8WkuM8CD0oeDPtZYMzT5YH76JAFB7bkmyY9OJi2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ }
+ },
"node_modules/internal-slot": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
@@ -17629,6 +17776,56 @@
"node": ">= 10"
}
},
+ "node_modules/ng-packagr": {
+ "version": "20.3.2",
+ "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-20.3.2.tgz",
+ "integrity": "sha512-yW5ME0hqTz38r/th/7zVwX5oSIw1FviSA2PUlGZdVjghDme/KX6iiwmOBmlt9E9whNmwijEC6Gn3KKbrsBx8ig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.3.0",
+ "@rollup/plugin-json": "^6.1.0",
+ "@rollup/wasm-node": "^4.24.0",
+ "ajv": "^8.17.1",
+ "ansi-colors": "^4.1.3",
+ "browserslist": "^4.22.1",
+ "chokidar": "^4.0.1",
+ "commander": "^14.0.0",
+ "dependency-graph": "^1.0.0",
+ "esbuild": "^0.25.0",
+ "find-cache-directory": "^6.0.0",
+ "injection-js": "^2.4.0",
+ "jsonc-parser": "^3.3.1",
+ "less": "^4.2.0",
+ "ora": "^8.2.0",
+ "piscina": "^5.0.0",
+ "postcss": "^8.4.47",
+ "rollup-plugin-dts": "^6.2.0",
+ "rxjs": "^7.8.1",
+ "sass": "^1.81.0",
+ "tinyglobby": "^0.2.12"
+ },
+ "bin": {
+ "ng-packagr": "src/cli/main.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+ },
+ "optionalDependencies": {
+ "rollup": "^4.24.0"
+ },
+ "peerDependencies": {
+ "@angular/compiler-cli": "^20.0.0",
+ "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
+ "tslib": "^2.3.0",
+ "typescript": ">=5.8 <6.0"
+ },
+ "peerDependenciesMeta": {
+ "tailwindcss": {
+ "optional": true
+ }
+ }
+ },
"node_modules/no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
@@ -19083,6 +19280,22 @@
"node": ">=16.20.0"
}
},
+ "node_modules/pkg-dir": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz",
+ "integrity": "sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up-simple": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/polka": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/polka/-/polka-0.5.2.tgz",
@@ -20377,6 +20590,49 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/rollup-plugin-dts": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.4.1.tgz",
+ "integrity": "sha512-l//F3Zf7ID5GoOfLfD8kroBjQKEKpy1qfhtAdnpibFZMffPaylrg1CoDC2vGkPeTeyxUe4bVFCln2EFuL7IGGg==",
+ "dev": true,
+ "license": "LGPL-3.0-only",
+ "dependencies": {
+ "@jridgewell/remapping": "^2.3.5",
+ "@jridgewell/sourcemap-codec": "^1.5.5",
+ "convert-source-map": "^2.0.0",
+ "magic-string": "^0.30.21"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/Swatinem"
+ },
+ "optionalDependencies": {
+ "@babel/code-frame": "^7.29.0"
+ },
+ "peerDependencies": {
+ "rollup": "^3.29.4 || ^4",
+ "typescript": "^4.5 || ^5.0 || ^6.0"
+ }
+ },
+ "node_modules/rollup-plugin-dts/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/rollup-plugin-dts/node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
"node_modules/router": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
diff --git a/package.json b/package.json
index b4ef8b1f..8fa837c7 100644
--- a/package.json
+++ b/package.json
@@ -20,8 +20,9 @@
"format:check": "prettier --check \"**/*.{js,ts,d.ts}\"",
"build:check": "npm run format:check && npm run security:check",
"build:storybook": "ng run angular-ui-kit:build-storybook",
+ "build:lib": "ng build angular-ui-kit-lib",
"security:check": "npm audit --production --audit-level high",
- "copy:dist": "cpx 'src/prime-preset/**/*.{json,ts}' dist/ && cpx 'src-tokens/theme.preset.ts' dist/"
+ "copy:dist": "cpx 'src/lib/providers/prime-preset/**/*.{json,ts}' dist/ && cpx 'src-tokens/theme.preset.ts' dist/"
},
"repository": "github:cdek-it/angular-ui-kit",
"devDependencies": {
@@ -46,6 +47,7 @@
"@primeng/themes": "20.4.0",
"@storybook/addon-a11y": "10.1.8",
"@storybook/addon-docs": "10.1.8",
+ "@storybook/addon-themes": "^10.1.8",
"@storybook/angular": "10.1.8",
"@tabler/icons-webfont": "3.35.0",
"@types/jasmine": "5.1.13",
@@ -62,6 +64,8 @@
"karma-chrome-launcher": "3.2.0",
"karma-coverage": "2.2.1",
"karma-jasmine": "5.1.0",
+ "ng-packagr": "20.3.2",
+ "@primeuix/themes": "1.2.5",
"karma-jasmine-html-reporter": "2.1.0",
"prettier": "3.7.4",
"primeng": "20.4.0",
diff --git a/public/assets/images/avatar/avatar.png b/public/assets/images/avatar/avatar.png
new file mode 100644
index 00000000..7c0bd535
Binary files /dev/null and b/public/assets/images/avatar/avatar.png differ
diff --git a/public/assets/mascot.jpg b/public/assets/mascot.jpg
new file mode 100644
index 00000000..adb02e35
Binary files /dev/null and b/public/assets/mascot.jpg differ
diff --git a/scripts/prepare-theme.js b/scripts/prepare-theme.js
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/app.config.ts b/src/app/app.config.ts
index 6bdbf574..95ad618d 100644
--- a/src/app/app.config.ts
+++ b/src/app/app.config.ts
@@ -3,7 +3,7 @@ import { provideRouter } from '@angular/router';
import { routes } from './app.routes';
import { providePrimeNG } from 'primeng/config';
-import Preset from '../prime-preset/theme.preset';
+import Preset from '../lib/providers/prime-preset/theme.preset';
export const appConfig: ApplicationConfig = {
providers: [
diff --git a/src/app/provide-my-feature.ts b/src/app/provide-my-feature.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/assets/fonts/tt-fellows/TT_Fellows_DemiBold.woff2 b/src/assets/fonts/tt-fellows/TT_Fellows_DemiBold.woff2
new file mode 100644
index 00000000..ec670152
Binary files /dev/null and b/src/assets/fonts/tt-fellows/TT_Fellows_DemiBold.woff2 differ
diff --git a/src/assets/fonts/tt-fellows/TT_Fellows_Regular.woff2 b/src/assets/fonts/tt-fellows/TT_Fellows_Regular.woff2
new file mode 100644
index 00000000..c4c67360
Binary files /dev/null and b/src/assets/fonts/tt-fellows/TT_Fellows_Regular.woff2 differ
diff --git a/src/lib/components/avatar/avatar.component.ts b/src/lib/components/avatar/avatar.component.ts
new file mode 100644
index 00000000..6abed91d
--- /dev/null
+++ b/src/lib/components/avatar/avatar.component.ts
@@ -0,0 +1,51 @@
+import { Component, HostBinding, Input } from '@angular/core';
+import { Avatar } from 'primeng/avatar';
+import { AvatarGroup } from 'primeng/avatargroup';
+
+export type AvatarSize = 'normal' | 'large' | 'xlarge';
+export type AvatarShape = 'square' | 'circle';
+
+@Component({
+ selector: 'extra-avatar',
+ standalone: true,
+ imports: [Avatar],
+ template: `
+
+ `,
+})
+export class ExtraAvatarComponent {
+ @Input() label = '';
+ @Input() icon = '';
+ @Input() image = '';
+ @Input() size: AvatarSize = 'normal';
+ @Input() shape: AvatarShape = 'square';
+
+ @HostBinding('class') get hostClass(): string {
+ const classes = ['ui-avatar'];
+ if (this.size === 'large') classes.push('ui-avatar-lg');
+ if (this.size === 'xlarge') classes.push('ui-avatar-xl');
+ return classes.join(' ');
+ }
+
+ get primeSize(): 'normal' | 'large' | 'xlarge' | undefined {
+ return this.size === 'normal' ? undefined : this.size;
+ }
+}
+
+@Component({
+ selector: 'extra-avatar-group',
+ standalone: true,
+ imports: [AvatarGroup],
+ template: `
+
+
+
+ `,
+})
+export class ExtraAvatarGroupComponent { }
diff --git a/src/lib/components/avatar/ng-package.json b/src/lib/components/avatar/ng-package.json
new file mode 100644
index 00000000..3a74fd76
--- /dev/null
+++ b/src/lib/components/avatar/ng-package.json
@@ -0,0 +1,6 @@
+{
+ "$schema": "ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "public_api.ts"
+ }
+}
diff --git a/src/lib/components/avatar/public_api.ts b/src/lib/components/avatar/public_api.ts
new file mode 100644
index 00000000..a1ddb6ff
--- /dev/null
+++ b/src/lib/components/avatar/public_api.ts
@@ -0,0 +1 @@
+export * from './avatar.component';
diff --git a/src/lib/components/badge/badge.component.ts b/src/lib/components/badge/badge.component.ts
new file mode 100644
index 00000000..2f6925d6
--- /dev/null
+++ b/src/lib/components/badge/badge.component.ts
@@ -0,0 +1,37 @@
+import { Component, Input } from '@angular/core';
+import { Badge } from 'primeng/badge';
+
+export type BadgeSeverity = 'primary' | 'success' | 'info' | 'warning' | 'danger';
+export type BadgeSize = 'base' | 'large' | 'xlarge';
+
+type PrimeBadgeSeverity = ReturnType
;
+type PrimeBadgeSize = ReturnType;
+
+@Component({
+ selector: 'extra-badge',
+ standalone: true,
+ imports: [Badge],
+ template: `
+
+ `
+})
+export class ExtraBadgeComponent {
+ @Input() value: string | number = '';
+ @Input() severity: BadgeSeverity = 'primary';
+ @Input() size: BadgeSize = 'base';
+
+ get primeSeverity(): PrimeBadgeSeverity {
+ if (this.severity === 'primary') return null;
+ if (this.severity === 'warning') return 'warn';
+ return this.severity as Exclude;
+ }
+
+ get primeSize(): PrimeBadgeSize {
+ if (this.size === 'base') return null;
+ return this.size as PrimeBadgeSize;
+ }
+}
diff --git a/src/lib/components/badge/ng-package.json b/src/lib/components/badge/ng-package.json
new file mode 100644
index 00000000..ecdf8fea
--- /dev/null
+++ b/src/lib/components/badge/ng-package.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "public_api.ts"
+ }
+}
+
diff --git a/src/lib/components/badge/public_api.ts b/src/lib/components/badge/public_api.ts
new file mode 100644
index 00000000..5f6ed3fe
--- /dev/null
+++ b/src/lib/components/badge/public_api.ts
@@ -0,0 +1,3 @@
+export * from './badge.component';
+
+
diff --git a/src/lib/components/breadcrumb/breadcrumb.component.ts b/src/lib/components/breadcrumb/breadcrumb.component.ts
new file mode 100644
index 00000000..8b242e8e
--- /dev/null
+++ b/src/lib/components/breadcrumb/breadcrumb.component.ts
@@ -0,0 +1,19 @@
+import { Component, Input } from '@angular/core';
+import { Breadcrumb } from 'primeng/breadcrumb';
+import { MenuItem } from 'primeng/api';
+
+@Component({
+ selector: 'extra-breadcrumb',
+ standalone: true,
+ imports: [Breadcrumb],
+ template: `
+
+ `,
+})
+export class ExtraBreadcrumbComponent {
+ @Input() model: MenuItem[] = [];
+ @Input() home: MenuItem | undefined = undefined;
+}
diff --git a/src/lib/components/breadcrumb/ng-package.json b/src/lib/components/breadcrumb/ng-package.json
new file mode 100644
index 00000000..ecdf8fea
--- /dev/null
+++ b/src/lib/components/breadcrumb/ng-package.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "public_api.ts"
+ }
+}
+
diff --git a/src/lib/components/breadcrumb/public_api.ts b/src/lib/components/breadcrumb/public_api.ts
new file mode 100644
index 00000000..2def9761
--- /dev/null
+++ b/src/lib/components/breadcrumb/public_api.ts
@@ -0,0 +1,4 @@
+export * from './breadcrumb.component';
+
+
+
diff --git a/src/lib/components/button/button.component.ts b/src/lib/components/button/button.component.ts
new file mode 100644
index 00000000..47697892
--- /dev/null
+++ b/src/lib/components/button/button.component.ts
@@ -0,0 +1,78 @@
+import { Component, Input } from '@angular/core';
+import { Button, ButtonSeverity as PrimeButtonSeverity } from 'primeng/button';
+
+export type ButtonVariant = 'primary' | 'secondary' | 'outlined' | 'text' | 'link';
+export type ButtonSeverity = 'success' | 'warning' | 'danger' | 'info' | null;
+export type ButtonSize = 'small' | 'base' | 'large' | 'xlarge';
+export type ButtonIconPos = 'prefix' | 'postfix' | null;
+export type BadgeSeverity = 'success' | 'info' | 'warning' | 'danger' | 'secondary' | 'contrast' | null;
+type PrimeBadgeSeverity = Extract