@ng-cn/core 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -1
- package/.cursor/rules/cursor.mdc +0 -53
- package/.editorconfig +0 -17
- package/.postcssrc.json +0 -5
- package/.prettierrc +0 -27
- package/angular.json +0 -122
- package/auto/tailwind/resolve-margin-and-text.py +0 -30
- package/dist/schematics/component/index.d.ts +0 -8
- package/dist/schematics/component/index.js +0 -109
- package/dist/schematics/ng-add/index.d.ts +0 -7
- package/dist/schematics/ng-add/index.js +0 -51
- package/mcp.json +0 -336
- package/postcss.config.mjs +0 -6
- package/public/.!14865!favicon.ico +0 -0
- package/public/angular-shad-cn.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/robots.txt +0 -34
- package/public/site.webmanifest +0 -45
- package/tsconfig.app.json +0 -17
- package/tsconfig.json +0 -45
- package/tsconfig.spec.json +0 -15
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ng-cn/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.07",
|
|
4
4
|
"description": "Beautifully designed Angular components built with Tailwind CSS v4 - The official Angular port of shadcn/ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -25,6 +25,11 @@
|
|
|
25
25
|
"ng-add": {
|
|
26
26
|
"save": "dependencies"
|
|
27
27
|
},
|
|
28
|
+
"files": [
|
|
29
|
+
"schematics",
|
|
30
|
+
"README.md",
|
|
31
|
+
"LICENSE"
|
|
32
|
+
],
|
|
28
33
|
"scripts": {
|
|
29
34
|
"ng": "ng",
|
|
30
35
|
"start": "ng serve",
|
package/.cursor/rules/cursor.mdc
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
context: true
|
|
3
|
-
priority: high
|
|
4
|
-
scope: project
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
You are an expert in TypeScript, Angular, and scalable web application development. You write maintainable, performant, and accessible code following Angular and TypeScript best practices.
|
|
8
|
-
|
|
9
|
-
## TypeScript Best Practices
|
|
10
|
-
|
|
11
|
-
- Use strict type checking
|
|
12
|
-
- Prefer type inference when the type is obvious
|
|
13
|
-
- Avoid the `any` type; use `unknown` when type is uncertain
|
|
14
|
-
|
|
15
|
-
## Angular Best Practices
|
|
16
|
-
|
|
17
|
-
- Always use standalone components over NgModules
|
|
18
|
-
- Must NOT set `standalone: true` inside Angular decorators. It's the default.
|
|
19
|
-
- Use signals for state management
|
|
20
|
-
- Implement lazy loading for feature routes
|
|
21
|
-
- Do NOT use the `@HostBinding` and `@HostListener` decorators. Put host bindings inside the `host` object of the `@Component` or `@Directive` decorator instead
|
|
22
|
-
- Use `NgOptimizedImage` for all static images.
|
|
23
|
-
- `NgOptimizedImage` does not work for inline base64 images.
|
|
24
|
-
|
|
25
|
-
## Components
|
|
26
|
-
|
|
27
|
-
- Keep components small and focused on a single responsibility
|
|
28
|
-
- Use `input()` and `output()` functions instead of decorators
|
|
29
|
-
- Use `computed()` for derived state
|
|
30
|
-
- Set `changeDetection: ChangeDetectionStrategy.OnPush` in `@Component` decorator
|
|
31
|
-
- Prefer inline templates for small components
|
|
32
|
-
- Prefer Reactive forms instead of Template-driven ones
|
|
33
|
-
- Do NOT use `ngClass`, use `class` bindings instead
|
|
34
|
-
- Do NOT use `ngStyle`, use `style` bindings instead
|
|
35
|
-
|
|
36
|
-
## State Management
|
|
37
|
-
|
|
38
|
-
- Use signals for local component state
|
|
39
|
-
- Use `computed()` for derived state
|
|
40
|
-
- Keep state transformations pure and predictable
|
|
41
|
-
- Do NOT use `mutate` on signals, use `update` or `set` instead
|
|
42
|
-
|
|
43
|
-
## Templates
|
|
44
|
-
|
|
45
|
-
- Keep templates simple and avoid complex logic
|
|
46
|
-
- Use native control flow (`@if`, `@for`, `@switch`) instead of `*ngIf`, `*ngFor`, `*ngSwitch`
|
|
47
|
-
- Use the async pipe to handle observables
|
|
48
|
-
|
|
49
|
-
## Services
|
|
50
|
-
|
|
51
|
-
- Design services around a single responsibility
|
|
52
|
-
- Use the `providedIn: 'root'` option for singleton services
|
|
53
|
-
- Use the `inject()` function instead of constructor injection
|
package/.editorconfig
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Editor configuration, see https://editorconfig.org
|
|
2
|
-
root = true
|
|
3
|
-
|
|
4
|
-
[*]
|
|
5
|
-
charset = utf-8
|
|
6
|
-
indent_style = space
|
|
7
|
-
indent_size = 2
|
|
8
|
-
insert_final_newline = true
|
|
9
|
-
trim_trailing_whitespace = true
|
|
10
|
-
|
|
11
|
-
[*.ts]
|
|
12
|
-
quote_type = single
|
|
13
|
-
ij_typescript_use_double_quotes = false
|
|
14
|
-
|
|
15
|
-
[*.md]
|
|
16
|
-
max_line_length = off
|
|
17
|
-
trim_trailing_whitespace = false
|
package/.postcssrc.json
DELETED
package/.prettierrc
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"printWidth": 100,
|
|
3
|
-
"tabWidth": 2,
|
|
4
|
-
"useTabs": false,
|
|
5
|
-
"semi": true,
|
|
6
|
-
"singleQuote": true,
|
|
7
|
-
"trailingComma": "all",
|
|
8
|
-
"bracketSpacing": true,
|
|
9
|
-
"arrowParens": "always",
|
|
10
|
-
"endOfLine": "lf",
|
|
11
|
-
"htmlWhitespaceSensitivity": "ignore",
|
|
12
|
-
"bracketSameLine": false,
|
|
13
|
-
"overrides": [
|
|
14
|
-
{
|
|
15
|
-
"files": "*.html",
|
|
16
|
-
"options": {
|
|
17
|
-
"parser": "angular"
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"files": "*.component.html",
|
|
22
|
-
"options": {
|
|
23
|
-
"parser": "angular"
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
]
|
|
27
|
-
}
|
package/angular.json
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
|
3
|
-
"version": 1,
|
|
4
|
-
"newProjectRoot": "projects",
|
|
5
|
-
"projects": {
|
|
6
|
-
"shadcn-angular": {
|
|
7
|
-
"projectType": "application",
|
|
8
|
-
"schematics": {
|
|
9
|
-
"@schematics/angular:component": {
|
|
10
|
-
"prefix": "",
|
|
11
|
-
"style": "none",
|
|
12
|
-
"changeDetection": "OnPush",
|
|
13
|
-
"standalone": true,
|
|
14
|
-
"skipTests": true
|
|
15
|
-
},
|
|
16
|
-
"@schematics/angular:directive": {
|
|
17
|
-
"prefix": "",
|
|
18
|
-
"type": "directive"
|
|
19
|
-
},
|
|
20
|
-
"@schematics/angular:service": {
|
|
21
|
-
"type": "service"
|
|
22
|
-
},
|
|
23
|
-
"@schematics/angular:guard": {
|
|
24
|
-
"typeSeparator": "."
|
|
25
|
-
},
|
|
26
|
-
"@schematics/angular:interceptor": {
|
|
27
|
-
"typeSeparator": "."
|
|
28
|
-
},
|
|
29
|
-
"@schematics/angular:module": {
|
|
30
|
-
"typeSeparator": "."
|
|
31
|
-
},
|
|
32
|
-
"@schematics/angular:pipe": {
|
|
33
|
-
"typeSeparator": "."
|
|
34
|
-
},
|
|
35
|
-
"@schematics/angular:resolver": {
|
|
36
|
-
"typeSeparator": "."
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
"root": "",
|
|
40
|
-
"sourceRoot": "src",
|
|
41
|
-
"prefix": "",
|
|
42
|
-
"architect": {
|
|
43
|
-
"build": {
|
|
44
|
-
"builder": "@angular/build:application",
|
|
45
|
-
"options": {
|
|
46
|
-
"browser": "src/main.ts",
|
|
47
|
-
"tsConfig": "tsconfig.app.json",
|
|
48
|
-
"inlineStyleLanguage": "scss",
|
|
49
|
-
"assets": [
|
|
50
|
-
{
|
|
51
|
-
"glob": "**/*",
|
|
52
|
-
"input": "public"
|
|
53
|
-
}
|
|
54
|
-
],
|
|
55
|
-
"styles": [
|
|
56
|
-
"src/styles.scss"
|
|
57
|
-
],
|
|
58
|
-
"server": "src/main.server.ts",
|
|
59
|
-
"outputMode": "server",
|
|
60
|
-
"ssr": {
|
|
61
|
-
"entry": "src/server.ts"
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
"configurations": {
|
|
65
|
-
"production": {
|
|
66
|
-
"budgets": [
|
|
67
|
-
{
|
|
68
|
-
"type": "initial",
|
|
69
|
-
"maximumWarning": "500kB",
|
|
70
|
-
"maximumError": "1MB"
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"type": "anyComponentStyle",
|
|
74
|
-
"maximumWarning": "4kB",
|
|
75
|
-
"maximumError": "8kB"
|
|
76
|
-
}
|
|
77
|
-
],
|
|
78
|
-
"outputHashing": "all"
|
|
79
|
-
},
|
|
80
|
-
"development": {
|
|
81
|
-
"optimization": false,
|
|
82
|
-
"extractLicenses": false,
|
|
83
|
-
"sourceMap": true
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
"defaultConfiguration": "production"
|
|
87
|
-
},
|
|
88
|
-
"serve": {
|
|
89
|
-
"builder": "@angular/build:dev-server",
|
|
90
|
-
"configurations": {
|
|
91
|
-
"production": {
|
|
92
|
-
"buildTarget": "shadcn-angular:build:production"
|
|
93
|
-
},
|
|
94
|
-
"development": {
|
|
95
|
-
"buildTarget": "shadcn-angular:build:development"
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
"defaultConfiguration": "development"
|
|
99
|
-
},
|
|
100
|
-
"extract-i18n": {
|
|
101
|
-
"builder": "@angular/build:extract-i18n"
|
|
102
|
-
},
|
|
103
|
-
"test": {
|
|
104
|
-
"builder": "@angular/build:karma",
|
|
105
|
-
"options": {
|
|
106
|
-
"tsConfig": "tsconfig.spec.json",
|
|
107
|
-
"inlineStyleLanguage": "scss",
|
|
108
|
-
"assets": [
|
|
109
|
-
{
|
|
110
|
-
"glob": "**/*",
|
|
111
|
-
"input": "public"
|
|
112
|
-
}
|
|
113
|
-
],
|
|
114
|
-
"styles": [
|
|
115
|
-
"src/styles.scss"
|
|
116
|
-
]
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import re
|
|
3
|
-
|
|
4
|
-
def process_html_file(file_path):
|
|
5
|
-
with open(file_path, 'r', encoding='utf-8') as file:
|
|
6
|
-
content = file.read()
|
|
7
|
-
|
|
8
|
-
# Replace classes
|
|
9
|
-
new_content = re.sub(r'\bmr-', 'me-', content)
|
|
10
|
-
new_content = re.sub(r'\bml-', 'ms-', new_content)
|
|
11
|
-
new_content = re.sub(r'\btext-left\b', 'text-start', new_content)
|
|
12
|
-
new_content = re.sub(r'\btext-right\b', 'text-end', new_content)
|
|
13
|
-
|
|
14
|
-
if new_content != content:
|
|
15
|
-
with open(file_path, 'w', encoding='utf-8') as file:
|
|
16
|
-
file.write(new_content)
|
|
17
|
-
return True
|
|
18
|
-
return False
|
|
19
|
-
|
|
20
|
-
def traverse_and_process(directory):
|
|
21
|
-
for root, _, files in os.walk(directory):
|
|
22
|
-
for file in files:
|
|
23
|
-
if file.endswith('.html'):
|
|
24
|
-
file_path = os.path.join(root, file)
|
|
25
|
-
if process_html_file(file_path):
|
|
26
|
-
print(f"Changes made to: {file_path}")
|
|
27
|
-
|
|
28
|
-
if __name__ == "__main__":
|
|
29
|
-
src_directory = 'src'
|
|
30
|
-
traverse_and_process(src_directory)
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.component = component;
|
|
4
|
-
const core_1 = require("@angular-devkit/core");
|
|
5
|
-
const schematics_1 = require("@angular-devkit/schematics");
|
|
6
|
-
// Component registry - maps component names to their file structure
|
|
7
|
-
const COMPONENT_REGISTRY = {
|
|
8
|
-
button: {
|
|
9
|
-
files: ['button.component.ts', 'index.ts'],
|
|
10
|
-
dependencies: ['class-variance-authority', 'clsx', 'tailwind-merge', '@angular/cdk']
|
|
11
|
-
},
|
|
12
|
-
card: {
|
|
13
|
-
files: ['card.component.ts', 'card-header.component.ts', 'card-title.component.ts', 'card-description.component.ts', 'card-content.component.ts', 'card-footer.component.ts', 'index.ts'],
|
|
14
|
-
dependencies: ['clsx', 'tailwind-merge']
|
|
15
|
-
},
|
|
16
|
-
input: {
|
|
17
|
-
files: ['input.component.ts', 'index.ts'],
|
|
18
|
-
dependencies: ['clsx', 'tailwind-merge', '@angular/forms']
|
|
19
|
-
},
|
|
20
|
-
label: {
|
|
21
|
-
files: ['label.component.ts', 'index.ts'],
|
|
22
|
-
dependencies: ['class-variance-authority', 'clsx', 'tailwind-merge']
|
|
23
|
-
},
|
|
24
|
-
separator: {
|
|
25
|
-
files: ['separator.component.ts', 'index.ts'],
|
|
26
|
-
dependencies: ['clsx', 'tailwind-merge']
|
|
27
|
-
},
|
|
28
|
-
badge: {
|
|
29
|
-
files: ['badge.component.ts', 'index.ts'],
|
|
30
|
-
dependencies: ['class-variance-authority', 'clsx', 'tailwind-merge']
|
|
31
|
-
},
|
|
32
|
-
alert: {
|
|
33
|
-
files: ['alert.component.ts', 'alert-title.component.ts', 'alert-description.component.ts', 'index.ts'],
|
|
34
|
-
dependencies: ['class-variance-authority', 'clsx', 'tailwind-merge']
|
|
35
|
-
},
|
|
36
|
-
dialog: {
|
|
37
|
-
files: ['dialog.component.ts', 'dialog-content.component.ts', 'dialog-header.component.ts', 'dialog-footer.component.ts', 'dialog-title.component.ts', 'dialog-description.component.ts', 'index.ts'],
|
|
38
|
-
dependencies: ['@angular/cdk', 'clsx', 'tailwind-merge']
|
|
39
|
-
},
|
|
40
|
-
'data-table': {
|
|
41
|
-
files: [
|
|
42
|
-
'data-table.component.ts',
|
|
43
|
-
'data-table-content.component.ts',
|
|
44
|
-
'data-table-context.ts',
|
|
45
|
-
'data-table-pagination.component.ts',
|
|
46
|
-
'data-table-search.component.ts',
|
|
47
|
-
'data-table-toolbar.component.ts',
|
|
48
|
-
'data-table-view-options.component.ts',
|
|
49
|
-
'index.ts'
|
|
50
|
-
],
|
|
51
|
-
dependencies: ['clsx', 'tailwind-merge', 'lucide-angular']
|
|
52
|
-
},
|
|
53
|
-
// Add more components as needed
|
|
54
|
-
};
|
|
55
|
-
function component(options) {
|
|
56
|
-
return (tree, context) => {
|
|
57
|
-
const componentName = options.name.toLowerCase();
|
|
58
|
-
if (!COMPONENT_REGISTRY[componentName]) {
|
|
59
|
-
const availableComponents = Object.keys(COMPONENT_REGISTRY).join(', ');
|
|
60
|
-
throw new schematics_1.SchematicsException(`Component "${componentName}" not found. Available components: ${availableComponents}`);
|
|
61
|
-
}
|
|
62
|
-
const componentInfo = COMPONENT_REGISTRY[componentName];
|
|
63
|
-
const basePath = options.path || 'src/app/lib/components/ui';
|
|
64
|
-
const componentPath = (0, core_1.normalize)((0, core_1.join)((0, core_1.normalize)(basePath), (0, core_1.normalize)(componentName)));
|
|
65
|
-
context.logger.info(`📦 Installing ${componentName} component...`);
|
|
66
|
-
// Check if component directory already exists
|
|
67
|
-
if (tree.exists(componentPath)) {
|
|
68
|
-
context.logger.warn(`⚠️ Component directory ${componentPath} already exists. Skipping...`);
|
|
69
|
-
return tree;
|
|
70
|
-
}
|
|
71
|
-
// Create component directory
|
|
72
|
-
tree.create((0, core_1.join)(componentPath, '.gitkeep'), '');
|
|
73
|
-
// Copy component files from the source
|
|
74
|
-
const sourceBasePath = `src/app/lib/components/ui/${componentName}`;
|
|
75
|
-
for (const file of componentInfo.files) {
|
|
76
|
-
const sourcePath = (0, core_1.join)((0, core_1.normalize)(sourceBasePath), (0, core_1.normalize)(file));
|
|
77
|
-
const targetPath = (0, core_1.join)(componentPath, (0, core_1.normalize)(file));
|
|
78
|
-
if (tree.exists(sourcePath)) {
|
|
79
|
-
const content = tree.read(sourcePath);
|
|
80
|
-
if (content) {
|
|
81
|
-
tree.create(targetPath, content);
|
|
82
|
-
context.logger.info(` ✅ Created ${file}`);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
context.logger.warn(` ⚠️ Source file ${sourcePath} not found`);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Check dependencies
|
|
90
|
-
context.logger.info('');
|
|
91
|
-
context.logger.info('📚 Required dependencies:');
|
|
92
|
-
for (const dep of componentInfo.dependencies) {
|
|
93
|
-
context.logger.info(` - ${dep}`);
|
|
94
|
-
}
|
|
95
|
-
context.logger.info('');
|
|
96
|
-
context.logger.info(`✅ ${componentName} component installed successfully!`);
|
|
97
|
-
context.logger.info('');
|
|
98
|
-
context.logger.info('📖 Import the component:');
|
|
99
|
-
context.logger.info(` import { ${toPascalCase(componentName)} } from '@/ui/${componentName}';`);
|
|
100
|
-
context.logger.info('');
|
|
101
|
-
return tree;
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
function toPascalCase(str) {
|
|
105
|
-
return str
|
|
106
|
-
.split('-')
|
|
107
|
-
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
108
|
-
.join('');
|
|
109
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ngAdd = ngAdd;
|
|
4
|
-
const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
5
|
-
function ngAdd(options) {
|
|
6
|
-
return (tree, context) => {
|
|
7
|
-
context.logger.info('✨ Adding shadcn-angular to your project...');
|
|
8
|
-
// Add dependencies to package.json
|
|
9
|
-
const packageJsonPath = '/package.json';
|
|
10
|
-
if (tree.exists(packageJsonPath)) {
|
|
11
|
-
const packageJson = JSON.parse(tree.read(packageJsonPath).toString('utf-8'));
|
|
12
|
-
const requiredDependencies = {
|
|
13
|
-
'lucide-angular': '^0.562.0',
|
|
14
|
-
'class-variance-authority': '^0.7.1',
|
|
15
|
-
'clsx': '^2.1.1',
|
|
16
|
-
'tailwind-merge': '^3.4.0',
|
|
17
|
-
'@angular/cdk': '^21.0.5',
|
|
18
|
-
'tailwindcss': '^4.1.18',
|
|
19
|
-
'@tailwindcss/postcss': '^4.1.18'
|
|
20
|
-
};
|
|
21
|
-
// Check and add missing dependencies
|
|
22
|
-
let needsInstall = false;
|
|
23
|
-
for (const [pkg, version] of Object.entries(requiredDependencies)) {
|
|
24
|
-
if (!packageJson.dependencies?.[pkg]) {
|
|
25
|
-
packageJson.dependencies = packageJson.dependencies || {};
|
|
26
|
-
packageJson.dependencies[pkg] = version;
|
|
27
|
-
needsInstall = true;
|
|
28
|
-
context.logger.info(` 📦 Adding ${pkg}@${version}`);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (needsInstall) {
|
|
32
|
-
tree.overwrite(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
33
|
-
if (!options.skipInstall) {
|
|
34
|
-
context.addTask(new tasks_1.NodePackageInstallTask());
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
context.logger.info(' ✅ All dependencies already installed');
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
context.logger.info('');
|
|
42
|
-
context.logger.info('✅ shadcn-angular setup complete!');
|
|
43
|
-
context.logger.info('');
|
|
44
|
-
context.logger.info('📚 Next steps:');
|
|
45
|
-
context.logger.info(' 1. Ensure Tailwind CSS is configured in your project');
|
|
46
|
-
context.logger.info(' 2. Add CSS variables to your styles.scss (see docs)');
|
|
47
|
-
context.logger.info(' 3. Install components: ng generate shadcn-angular:component button');
|
|
48
|
-
context.logger.info('');
|
|
49
|
-
return tree;
|
|
50
|
-
};
|
|
51
|
-
}
|
package/mcp.json
DELETED
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "shadcn-angular",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "Angular port of shadcn/ui components — Tailwind 4+ compatible. Machine-readable manifest (no docs).",
|
|
5
|
-
"angularPeer": ">=21.0.0",
|
|
6
|
-
"tailwindPeer": ">=4.0.0",
|
|
7
|
-
"schematics": {
|
|
8
|
-
"ngAdd": {
|
|
9
|
-
"description": "Installs base styles, Tailwind config, and optional per-component selection."
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
"components": [
|
|
13
|
-
{ "name": "Accordion", "package": "@shadcn-angular/accordion", "selector": "Accordion", "selectorType": "element", "standalone": true },
|
|
14
|
-
{ "name": "AccordionItem", "package": "@shadcn-angular/accordion", "selector": "AccordionItem", "selectorType": "element", "standalone": true },
|
|
15
|
-
{ "name": "AccordionTrigger", "package": "@shadcn-angular/accordion", "selector": "AccordionTrigger", "selectorType": "element", "standalone": true },
|
|
16
|
-
{ "name": "AccordionContent", "package": "@shadcn-angular/accordion", "selector": "AccordionContent", "selectorType": "element", "standalone": true },
|
|
17
|
-
{ "name": "Alert", "package": "@shadcn-angular/alert", "selector": "Alert", "selectorType": "element", "standalone": true },
|
|
18
|
-
{ "name": "AlertTitle", "package": "@shadcn-angular/alert", "selector": "AlertTitle", "selectorType": "element", "standalone": true },
|
|
19
|
-
{ "name": "AlertDescription", "package": "@shadcn-angular/alert", "selector": "AlertDescription", "selectorType": "element", "standalone": true },
|
|
20
|
-
{ "name": "AlertDialog", "package": "@shadcn-angular/alert-dialog", "selector": "AlertDialog", "selectorType": "element", "standalone": true },
|
|
21
|
-
{ "name": "AlertDialogTrigger", "package": "@shadcn-angular/alert-dialog", "selector": "AlertDialogTrigger", "selectorType": "element", "standalone": true },
|
|
22
|
-
{ "name": "AlertDialogContent", "package": "@shadcn-angular/alert-dialog", "selector": "AlertDialogContent", "selectorType": "element", "standalone": true },
|
|
23
|
-
{ "name": "AlertDialogHeader", "package": "@shadcn-angular/alert-dialog", "selector": "AlertDialogHeader", "selectorType": "element", "standalone": true },
|
|
24
|
-
{ "name": "AlertDialogFooter", "package": "@shadcn-angular/alert-dialog", "selector": "AlertDialogFooter", "selectorType": "element", "standalone": true },
|
|
25
|
-
{ "name": "AlertDialogTitle", "package": "@shadcn-angular/alert-dialog", "selector": "AlertDialogTitle", "selectorType": "element", "standalone": true },
|
|
26
|
-
{ "name": "AlertDialogDescription", "package": "@shadcn-angular/alert-dialog", "selector": "AlertDialogDescription", "selectorType": "element", "standalone": true },
|
|
27
|
-
{ "name": "AlertDialogAction", "package": "@shadcn-angular/alert-dialog", "selector": "AlertDialogAction", "selectorType": "element", "standalone": true },
|
|
28
|
-
{ "name": "AlertDialogCancel", "package": "@shadcn-angular/alert-dialog", "selector": "AlertDialogCancel", "selectorType": "element", "standalone": true },
|
|
29
|
-
{ "name": "AspectRatio", "package": "@shadcn-angular/aspect-ratio", "selector": "AspectRatio", "selectorType": "element", "standalone": true },
|
|
30
|
-
{ "name": "Avatar", "package": "@shadcn-angular/avatar", "selector": "Avatar", "selectorType": "element", "standalone": true },
|
|
31
|
-
{ "name": "AvatarImage", "package": "@shadcn-angular/avatar", "selector": "AvatarImage", "selectorType": "element", "standalone": true },
|
|
32
|
-
{ "name": "AvatarFallback", "package": "@shadcn-angular/avatar", "selector": "AvatarFallback", "selectorType": "element", "standalone": true },
|
|
33
|
-
{ "name": "Badge", "package": "@shadcn-angular/badge", "selector": "Badge", "selectorType": "element", "standalone": true },
|
|
34
|
-
{ "name": "Breadcrumb", "package": "@shadcn-angular/breadcrumb", "selector": "Breadcrumb", "selectorType": "element", "standalone": true },
|
|
35
|
-
{ "name": "BreadcrumbList", "package": "@shadcn-angular/breadcrumb", "selector": "BreadcrumbList", "selectorType": "element", "standalone": true },
|
|
36
|
-
{ "name": "BreadcrumbItem", "package": "@shadcn-angular/breadcrumb", "selector": "BreadcrumbItem", "selectorType": "element", "standalone": true },
|
|
37
|
-
{ "name": "BreadcrumbLink", "package": "@shadcn-angular/breadcrumb", "selector": "BreadcrumbLink", "selectorType": "element", "standalone": true },
|
|
38
|
-
{ "name": "BreadcrumbPage", "package": "@shadcn-angular/breadcrumb", "selector": "BreadcrumbPage", "selectorType": "element", "standalone": true },
|
|
39
|
-
{ "name": "BreadcrumbSeparator", "package": "@shadcn-angular/breadcrumb", "selector": "BreadcrumbSeparator", "selectorType": "element", "standalone": true },
|
|
40
|
-
{ "name": "BreadcrumbEllipsis", "package": "@shadcn-angular/breadcrumb", "selector": "BreadcrumbEllipsis", "selectorType": "element", "standalone": true },
|
|
41
|
-
{ "name": "Button", "package": "@shadcn-angular/button", "selector": "Button", "selectorType": "element", "standalone": true },
|
|
42
|
-
{ "name": "Calendar", "package": "@shadcn-angular/calendar", "selector": "Calendar", "selectorType": "element", "standalone": true },
|
|
43
|
-
{ "name": "Card", "package": "@shadcn-angular/card", "selector": "Card", "selectorType": "element", "standalone": true },
|
|
44
|
-
{ "name": "CardHeader", "package": "@shadcn-angular/card", "selector": "CardHeader", "selectorType": "element", "standalone": true },
|
|
45
|
-
{ "name": "CardTitle", "package": "@shadcn-angular/card", "selector": "CardTitle", "selectorType": "element", "standalone": true },
|
|
46
|
-
{ "name": "CardDescription", "package": "@shadcn-angular/card", "selector": "CardDescription", "selectorType": "element", "standalone": true },
|
|
47
|
-
{ "name": "CardContent", "package": "@shadcn-angular/card", "selector": "CardContent", "selectorType": "element", "standalone": true },
|
|
48
|
-
{ "name": "CardFooter", "package": "@shadcn-angular/card", "selector": "CardFooter", "selectorType": "element", "standalone": true },
|
|
49
|
-
{ "name": "Carousel", "package": "@shadcn-angular/carousel", "selector": "Carousel", "selectorType": "element", "standalone": true },
|
|
50
|
-
{ "name": "CarouselContent", "package": "@shadcn-angular/carousel", "selector": "CarouselContent", "selectorType": "element", "standalone": true },
|
|
51
|
-
{ "name": "CarouselItem", "package": "@shadcn-angular/carousel", "selector": "CarouselItem", "selectorType": "element", "standalone": true },
|
|
52
|
-
{ "name": "CarouselPrevious", "package": "@shadcn-angular/carousel", "selector": "CarouselPrevious", "selectorType": "element", "standalone": true },
|
|
53
|
-
{ "name": "CarouselNext", "package": "@shadcn-angular/carousel", "selector": "CarouselNext", "selectorType": "element", "standalone": true },
|
|
54
|
-
{ "name": "Checkbox", "package": "@shadcn-angular/checkbox", "selector": "Checkbox", "selectorType": "element", "standalone": true },
|
|
55
|
-
{ "name": "Collapsible", "package": "@shadcn-angular/collapsible", "selector": "Collapsible", "selectorType": "element", "standalone": true },
|
|
56
|
-
{ "name": "CollapsibleTrigger", "package": "@shadcn-angular/collapsible", "selector": "CollapsibleTrigger", "selectorType": "element", "standalone": true },
|
|
57
|
-
{ "name": "CollapsibleContent", "package": "@shadcn-angular/collapsible", "selector": "CollapsibleContent", "selectorType": "element", "standalone": true },
|
|
58
|
-
{ "name": "Command", "package": "@shadcn-angular/command", "selector": "Command", "selectorType": "element", "standalone": true },
|
|
59
|
-
{ "name": "CommandInput", "package": "@shadcn-angular/command", "selector": "CommandInput", "selectorType": "element", "standalone": true },
|
|
60
|
-
{ "name": "CommandList", "package": "@shadcn-angular/command", "selector": "CommandList", "selectorType": "element", "standalone": true },
|
|
61
|
-
{ "name": "CommandEmpty", "package": "@shadcn-angular/command", "selector": "CommandEmpty", "selectorType": "element", "standalone": true },
|
|
62
|
-
{ "name": "CommandGroup", "package": "@shadcn-angular/command", "selector": "CommandGroup", "selectorType": "element", "standalone": true },
|
|
63
|
-
{ "name": "CommandItem", "package": "@shadcn-angular/command", "selector": "CommandItem", "selectorType": "element", "standalone": true },
|
|
64
|
-
{ "name": "CommandShortcut", "package": "@shadcn-angular/command", "selector": "CommandShortcut", "selectorType": "element", "standalone": true },
|
|
65
|
-
{ "name": "CommandSeparator", "package": "@shadcn-angular/command", "selector": "CommandSeparator", "selectorType": "element", "standalone": true },
|
|
66
|
-
{ "name": "ContextMenu", "package": "@shadcn-angular/context-menu", "selector": "ContextMenu", "selectorType": "element", "standalone": true },
|
|
67
|
-
{ "name": "ContextMenuTrigger", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuTrigger", "selectorType": "element", "standalone": true },
|
|
68
|
-
{ "name": "ContextMenuContent", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuContent", "selectorType": "element", "standalone": true },
|
|
69
|
-
{ "name": "ContextMenuItem", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuItem", "selectorType": "element", "standalone": true },
|
|
70
|
-
{ "name": "ContextMenuCheckboxItem", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuCheckboxItem", "selectorType": "element", "standalone": true },
|
|
71
|
-
{ "name": "ContextMenuRadioGroup", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuRadioGroup", "selectorType": "element", "standalone": true },
|
|
72
|
-
{ "name": "ContextMenuRadioItem", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuRadioItem", "selectorType": "element", "standalone": true },
|
|
73
|
-
{ "name": "ContextMenuLabel", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuLabel", "selectorType": "element", "standalone": true },
|
|
74
|
-
{ "name": "ContextMenuSeparator", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuSeparator", "selectorType": "element", "standalone": true },
|
|
75
|
-
{ "name": "ContextMenuShortcut", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuShortcut", "selectorType": "element", "standalone": true },
|
|
76
|
-
{ "name": "ContextMenuSub", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuSub", "selectorType": "element", "standalone": true },
|
|
77
|
-
{ "name": "ContextMenuSubTrigger", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuSubTrigger", "selectorType": "element", "standalone": true },
|
|
78
|
-
{ "name": "ContextMenuSubContent", "package": "@shadcn-angular/context-menu", "selector": "ContextMenuSubContent", "selectorType": "element", "standalone": true },
|
|
79
|
-
{ "name": "DatePicker", "package": "@shadcn-angular/date-picker", "selector": "DatePicker", "selectorType": "element", "standalone": true },
|
|
80
|
-
{ "name": "Dialog", "package": "@shadcn-angular/dialog", "selector": "Dialog", "selectorType": "element", "standalone": true },
|
|
81
|
-
{ "name": "DialogTrigger", "package": "@shadcn-angular/dialog", "selector": "DialogTrigger", "selectorType": "element", "standalone": true },
|
|
82
|
-
{ "name": "DialogContent", "package": "@shadcn-angular/dialog", "selector": "DialogContent", "selectorType": "element", "standalone": true },
|
|
83
|
-
{ "name": "DialogHeader", "package": "@shadcn-angular/dialog", "selector": "DialogHeader", "selectorType": "element", "standalone": true },
|
|
84
|
-
{ "name": "DialogFooter", "package": "@shadcn-angular/dialog", "selector": "DialogFooter", "selectorType": "element", "standalone": true },
|
|
85
|
-
{ "name": "DialogTitle", "package": "@shadcn-angular/dialog", "selector": "DialogTitle", "selectorType": "element", "standalone": true },
|
|
86
|
-
{ "name": "DialogDescription", "package": "@shadcn-angular/dialog", "selector": "DialogDescription", "selectorType": "element", "standalone": true },
|
|
87
|
-
{ "name": "DialogClose", "package": "@shadcn-angular/dialog", "selector": "DialogClose", "selectorType": "element", "standalone": true },
|
|
88
|
-
{ "name": "Drawer", "package": "@shadcn-angular/drawer", "selector": "Drawer", "selectorType": "element", "standalone": true },
|
|
89
|
-
{ "name": "DrawerTrigger", "package": "@shadcn-angular/drawer", "selector": "DrawerTrigger", "selectorType": "element", "standalone": true },
|
|
90
|
-
{ "name": "DrawerContent", "package": "@shadcn-angular/drawer", "selector": "DrawerContent", "selectorType": "element", "standalone": true },
|
|
91
|
-
{ "name": "DrawerHeader", "package": "@shadcn-angular/drawer", "selector": "DrawerHeader", "selectorType": "element", "standalone": true },
|
|
92
|
-
{ "name": "DrawerFooter", "package": "@shadcn-angular/drawer", "selector": "DrawerFooter", "selectorType": "element", "standalone": true },
|
|
93
|
-
{ "name": "DrawerTitle", "package": "@shadcn-angular/drawer", "selector": "DrawerTitle", "selectorType": "element", "standalone": true },
|
|
94
|
-
{ "name": "DrawerDescription", "package": "@shadcn-angular/drawer", "selector": "DrawerDescription", "selectorType": "element", "standalone": true },
|
|
95
|
-
{ "name": "DrawerClose", "package": "@shadcn-angular/drawer", "selector": "DrawerClose", "selectorType": "element", "standalone": true },
|
|
96
|
-
{ "name": "DropdownMenu", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenu", "selectorType": "element", "standalone": true },
|
|
97
|
-
{ "name": "DropdownMenuTrigger", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuTrigger", "selectorType": "element", "standalone": true },
|
|
98
|
-
{ "name": "DropdownMenuContent", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuContent", "selectorType": "element", "standalone": true },
|
|
99
|
-
{ "name": "DropdownMenuItem", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuItem", "selectorType": "element", "standalone": true },
|
|
100
|
-
{ "name": "DropdownMenuCheckboxItem", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuCheckboxItem", "selectorType": "element", "standalone": true },
|
|
101
|
-
{ "name": "DropdownMenuRadioGroup", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuRadioGroup", "selectorType": "element", "standalone": true },
|
|
102
|
-
{ "name": "DropdownMenuRadioItem", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuRadioItem", "selectorType": "element", "standalone": true },
|
|
103
|
-
{ "name": "DropdownMenuLabel", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuLabel", "selectorType": "element", "standalone": true },
|
|
104
|
-
{ "name": "DropdownMenuSeparator", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuSeparator", "selectorType": "element", "standalone": true },
|
|
105
|
-
{ "name": "DropdownMenuShortcut", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuShortcut", "selectorType": "element", "standalone": true },
|
|
106
|
-
{ "name": "DropdownMenuGroup", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuGroup", "selectorType": "element", "standalone": true },
|
|
107
|
-
{ "name": "DropdownMenuSub", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuSub", "selectorType": "element", "standalone": true },
|
|
108
|
-
{ "name": "DropdownMenuSubTrigger", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuSubTrigger", "selectorType": "element", "standalone": true },
|
|
109
|
-
{ "name": "DropdownMenuSubContent", "package": "@shadcn-angular/dropdown-menu", "selector": "DropdownMenuSubContent", "selectorType": "element", "standalone": true },
|
|
110
|
-
{ "name": "Form", "package": "@shadcn-angular/form", "selector": "Form", "selectorType": "element", "standalone": true },
|
|
111
|
-
{ "name": "FormField", "package": "@shadcn-angular/form", "selector": "FormField", "selectorType": "element", "standalone": true },
|
|
112
|
-
{ "name": "FormItem", "package": "@shadcn-angular/form", "selector": "FormItem", "selectorType": "element", "standalone": true },
|
|
113
|
-
{ "name": "FormLabel", "package": "@shadcn-angular/form", "selector": "FormLabel", "selectorType": "element", "standalone": true },
|
|
114
|
-
{ "name": "FormControl", "package": "@shadcn-angular/form", "selector": "FormControl", "selectorType": "element", "standalone": true },
|
|
115
|
-
{ "name": "FormDescription", "package": "@shadcn-angular/form", "selector": "FormDescription", "selectorType": "element", "standalone": true },
|
|
116
|
-
{ "name": "FormMessage", "package": "@shadcn-angular/form", "selector": "FormMessage", "selectorType": "element", "standalone": true },
|
|
117
|
-
{ "name": "HoverCard", "package": "@shadcn-angular/hover-card", "selector": "HoverCard", "selectorType": "element", "standalone": true },
|
|
118
|
-
{ "name": "HoverCardTrigger", "package": "@shadcn-angular/hover-card", "selector": "HoverCardTrigger", "selectorType": "element", "standalone": true },
|
|
119
|
-
{ "name": "HoverCardContent", "package": "@shadcn-angular/hover-card", "selector": "HoverCardContent", "selectorType": "element", "standalone": true },
|
|
120
|
-
{ "name": "Input", "package": "@shadcn-angular/input", "selector": "Input", "selectorType": "element", "standalone": true },
|
|
121
|
-
{ "name": "InputOTP", "package": "@shadcn-angular/input-otp", "selector": "InputOTP", "selectorType": "element", "standalone": true },
|
|
122
|
-
{ "name": "InputOTPGroup", "package": "@shadcn-angular/input-otp", "selector": "InputOTPGroup", "selectorType": "element", "standalone": true },
|
|
123
|
-
{ "name": "InputOTPSlot", "package": "@shadcn-angular/input-otp", "selector": "InputOTPSlot", "selectorType": "element", "standalone": true },
|
|
124
|
-
{ "name": "InputOTPSeparator", "package": "@shadcn-angular/input-otp", "selector": "InputOTPSeparator", "selectorType": "element", "standalone": true },
|
|
125
|
-
{ "name": "Label", "package": "@shadcn-angular/label", "selector": "Label", "selectorType": "element", "standalone": true },
|
|
126
|
-
{ "name": "Menubar", "package": "@shadcn-angular/menubar", "selector": "Menubar", "selectorType": "element", "standalone": true },
|
|
127
|
-
{ "name": "MenubarMenu", "package": "@shadcn-angular/menubar", "selector": "MenubarMenu", "selectorType": "element", "standalone": true },
|
|
128
|
-
{ "name": "MenubarTrigger", "package": "@shadcn-angular/menubar", "selector": "MenubarTrigger", "selectorType": "element", "standalone": true },
|
|
129
|
-
{ "name": "MenubarContent", "package": "@shadcn-angular/menubar", "selector": "MenubarContent", "selectorType": "element", "standalone": true },
|
|
130
|
-
{ "name": "MenubarItem", "package": "@shadcn-angular/menubar", "selector": "MenubarItem", "selectorType": "element", "standalone": true },
|
|
131
|
-
{ "name": "MenubarSeparator", "package": "@shadcn-angular/menubar", "selector": "MenubarSeparator", "selectorType": "element", "standalone": true },
|
|
132
|
-
{ "name": "MenubarLabel", "package": "@shadcn-angular/menubar", "selector": "MenubarLabel", "selectorType": "element", "standalone": true },
|
|
133
|
-
{ "name": "MenubarCheckboxItem", "package": "@shadcn-angular/menubar", "selector": "MenubarCheckboxItem", "selectorType": "element", "standalone": true },
|
|
134
|
-
{ "name": "MenubarRadioGroup", "package": "@shadcn-angular/menubar", "selector": "MenubarRadioGroup", "selectorType": "element", "standalone": true },
|
|
135
|
-
{ "name": "MenubarRadioItem", "package": "@shadcn-angular/menubar", "selector": "MenubarRadioItem", "selectorType": "element", "standalone": true },
|
|
136
|
-
{ "name": "MenubarSub", "package": "@shadcn-angular/menubar", "selector": "MenubarSub", "selectorType": "element", "standalone": true },
|
|
137
|
-
{ "name": "MenubarSubTrigger", "package": "@shadcn-angular/menubar", "selector": "MenubarSubTrigger", "selectorType": "element", "standalone": true },
|
|
138
|
-
{ "name": "MenubarSubContent", "package": "@shadcn-angular/menubar", "selector": "MenubarSubContent", "selectorType": "element", "standalone": true },
|
|
139
|
-
{ "name": "MenubarShortcut", "package": "@shadcn-angular/menubar", "selector": "MenubarShortcut", "selectorType": "element", "standalone": true },
|
|
140
|
-
{ "name": "NavigationMenu", "package": "@shadcn-angular/navigation-menu", "selector": "NavigationMenu", "selectorType": "element", "standalone": true },
|
|
141
|
-
{ "name": "NavigationMenuList", "package": "@shadcn-angular/navigation-menu", "selector": "NavigationMenuList", "selectorType": "element", "standalone": true },
|
|
142
|
-
{ "name": "NavigationMenuItem", "package": "@shadcn-angular/navigation-menu", "selector": "NavigationMenuItem", "selectorType": "element", "standalone": true },
|
|
143
|
-
{ "name": "NavigationMenuTrigger", "package": "@shadcn-angular/navigation-menu", "selector": "NavigationMenuTrigger", "selectorType": "element", "standalone": true },
|
|
144
|
-
{ "name": "NavigationMenuContent", "package": "@shadcn-angular/navigation-menu", "selector": "NavigationMenuContent", "selectorType": "element", "standalone": true },
|
|
145
|
-
{ "name": "NavigationMenuLink", "package": "@shadcn-angular/navigation-menu", "selector": "NavigationMenuLink", "selectorType": "element", "standalone": true },
|
|
146
|
-
{ "name": "NavigationMenuIndicator", "package": "@shadcn-angular/navigation-menu", "selector": "NavigationMenuIndicator", "selectorType": "element", "standalone": true },
|
|
147
|
-
{ "name": "NavigationMenuViewport", "package": "@shadcn-angular/navigation-menu", "selector": "NavigationMenuViewport", "selectorType": "element", "standalone": true },
|
|
148
|
-
{ "name": "Pagination", "package": "@shadcn-angular/pagination", "selector": "Pagination", "selectorType": "element", "standalone": true },
|
|
149
|
-
{ "name": "PaginationContent", "package": "@shadcn-angular/pagination", "selector": "PaginationContent", "selectorType": "element", "standalone": true },
|
|
150
|
-
{ "name": "PaginationItem", "package": "@shadcn-angular/pagination", "selector": "PaginationItem", "selectorType": "element", "standalone": true },
|
|
151
|
-
{ "name": "PaginationLink", "package": "@shadcn-angular/pagination", "selector": "PaginationLink", "selectorType": "element", "standalone": true },
|
|
152
|
-
{ "name": "PaginationPrevious", "package": "@shadcn-angular/pagination", "selector": "PaginationPrevious", "selectorType": "element", "standalone": true },
|
|
153
|
-
{ "name": "PaginationNext", "package": "@shadcn-angular/pagination", "selector": "PaginationNext", "selectorType": "element", "standalone": true },
|
|
154
|
-
{ "name": "PaginationEllipsis", "package": "@shadcn-angular/pagination", "selector": "PaginationEllipsis", "selectorType": "element", "standalone": true },
|
|
155
|
-
{ "name": "Popover", "package": "@shadcn-angular/popover", "selector": "Popover", "selectorType": "element", "standalone": true },
|
|
156
|
-
{ "name": "PopoverTrigger", "package": "@shadcn-angular/popover", "selector": "PopoverTrigger", "selectorType": "element", "standalone": true },
|
|
157
|
-
{ "name": "PopoverContent", "package": "@shadcn-angular/popover", "selector": "PopoverContent", "selectorType": "element", "standalone": true },
|
|
158
|
-
{ "name": "PopoverAnchor", "package": "@shadcn-angular/popover", "selector": "PopoverAnchor", "selectorType": "element", "standalone": true },
|
|
159
|
-
{ "name": "Progress", "package": "@shadcn-angular/progress", "selector": "Progress", "selectorType": "element", "standalone": true },
|
|
160
|
-
{ "name": "RadioGroup", "package": "@shadcn-angular/radio-group", "selector": "RadioGroup", "selectorType": "element", "standalone": true },
|
|
161
|
-
{ "name": "RadioGroupItem", "package": "@shadcn-angular/radio-group", "selector": "RadioGroupItem", "selectorType": "element", "standalone": true },
|
|
162
|
-
{ "name": "ResizablePanelGroup", "package": "@shadcn-angular/resizable", "selector": "ResizablePanelGroup", "selectorType": "element", "standalone": true },
|
|
163
|
-
{ "name": "ResizablePanel", "package": "@shadcn-angular/resizable", "selector": "ResizablePanel", "selectorType": "element", "standalone": true },
|
|
164
|
-
{ "name": "ResizableHandle", "package": "@shadcn-angular/resizable", "selector": "ResizableHandle", "selectorType": "element", "standalone": true },
|
|
165
|
-
{ "name": "ScrollArea", "package": "@shadcn-angular/scroll-area", "selector": "ScrollArea", "selectorType": "element", "standalone": true },
|
|
166
|
-
{ "name": "ScrollBar", "package": "@shadcn-angular/scroll-area", "selector": "ScrollBar", "selectorType": "element", "standalone": true },
|
|
167
|
-
{ "name": "Select", "package": "@shadcn-angular/select", "selector": "Select", "selectorType": "element", "standalone": true },
|
|
168
|
-
{ "name": "SelectTrigger", "package": "@shadcn-angular/select", "selector": "SelectTrigger", "selectorType": "element", "standalone": true },
|
|
169
|
-
{ "name": "SelectValue", "package": "@shadcn-angular/select", "selector": "SelectValue", "selectorType": "element", "standalone": true },
|
|
170
|
-
{ "name": "SelectContent", "package": "@shadcn-angular/select", "selector": "SelectContent", "selectorType": "element", "standalone": true },
|
|
171
|
-
{ "name": "SelectGroup", "package": "@shadcn-angular/select", "selector": "SelectGroup", "selectorType": "element", "standalone": true },
|
|
172
|
-
{ "name": "SelectItem", "package": "@shadcn-angular/select", "selector": "SelectItem", "selectorType": "element", "standalone": true },
|
|
173
|
-
{ "name": "SelectLabel", "package": "@shadcn-angular/select", "selector": "SelectLabel", "selectorType": "element", "standalone": true },
|
|
174
|
-
{ "name": "SelectSeparator", "package": "@shadcn-angular/select", "selector": "SelectSeparator", "selectorType": "element", "standalone": true },
|
|
175
|
-
{ "name": "Separator", "package": "@shadcn-angular/separator", "selector": "Separator", "selectorType": "element", "standalone": true },
|
|
176
|
-
{ "name": "Sheet", "package": "@shadcn-angular/sheet", "selector": "Sheet", "selectorType": "element", "standalone": true },
|
|
177
|
-
{ "name": "SheetTrigger", "package": "@shadcn-angular/sheet", "selector": "SheetTrigger", "selectorType": "element", "standalone": true },
|
|
178
|
-
{ "name": "SheetContent", "package": "@shadcn-angular/sheet", "selector": "SheetContent", "selectorType": "element", "standalone": true },
|
|
179
|
-
{ "name": "SheetHeader", "package": "@shadcn-angular/sheet", "selector": "SheetHeader", "selectorType": "element", "standalone": true },
|
|
180
|
-
{ "name": "SheetFooter", "package": "@shadcn-angular/sheet", "selector": "SheetFooter", "selectorType": "element", "standalone": true },
|
|
181
|
-
{ "name": "SheetTitle", "package": "@shadcn-angular/sheet", "selector": "SheetTitle", "selectorType": "element", "standalone": true },
|
|
182
|
-
{ "name": "SheetDescription", "package": "@shadcn-angular/sheet", "selector": "SheetDescription", "selectorType": "element", "standalone": true },
|
|
183
|
-
{ "name": "SheetClose", "package": "@shadcn-angular/sheet", "selector": "SheetClose", "selectorType": "element", "standalone": true },
|
|
184
|
-
{ "name": "Skeleton", "package": "@shadcn-angular/skeleton", "selector": "Skeleton", "selectorType": "element", "standalone": true },
|
|
185
|
-
{ "name": "Slider", "package": "@shadcn-angular/slider", "selector": "Slider", "selectorType": "element", "standalone": true },
|
|
186
|
-
{ "name": "Sonner", "package": "@shadcn-angular/sonner", "selector": "Sonner", "selectorType": "element", "standalone": true },
|
|
187
|
-
{ "name": "Switch", "package": "@shadcn-angular/switch", "selector": "Switch", "selectorType": "element", "standalone": true },
|
|
188
|
-
{ "name": "Table", "package": "@shadcn-angular/table", "selector": "Table", "selectorType": "element", "standalone": true },
|
|
189
|
-
{ "name": "TableHeader", "package": "@shadcn-angular/table", "selector": "TableHeader", "selectorType": "element", "standalone": true },
|
|
190
|
-
{ "name": "TableBody", "package": "@shadcn-angular/table", "selector": "TableBody", "selectorType": "element", "standalone": true },
|
|
191
|
-
{ "name": "TableFooter", "package": "@shadcn-angular/table", "selector": "TableFooter", "selectorType": "element", "standalone": true },
|
|
192
|
-
{ "name": "TableRow", "package": "@shadcn-angular/table", "selector": "TableRow", "selectorType": "element", "standalone": true },
|
|
193
|
-
{ "name": "TableHead", "package": "@shadcn-angular/table", "selector": "TableHead", "selectorType": "element", "standalone": true },
|
|
194
|
-
{ "name": "TableCell", "package": "@shadcn-angular/table", "selector": "TableCell", "selectorType": "element", "standalone": true },
|
|
195
|
-
{ "name": "TableCaption", "package": "@shadcn-angular/table", "selector": "TableCaption", "selectorType": "element", "standalone": true },
|
|
196
|
-
{ "name": "Tabs", "package": "@shadcn-angular/tabs", "selector": "Tabs", "selectorType": "element", "standalone": true },
|
|
197
|
-
{ "name": "TabsList", "package": "@shadcn-angular/tabs", "selector": "TabsList", "selectorType": "element", "standalone": true },
|
|
198
|
-
{ "name": "TabsTrigger", "package": "@shadcn-angular/tabs", "selector": "TabsTrigger", "selectorType": "element", "standalone": true },
|
|
199
|
-
{ "name": "TabsContent", "package": "@shadcn-angular/tabs", "selector": "TabsContent", "selectorType": "element", "standalone": true },
|
|
200
|
-
{ "name": "Textarea", "package": "@shadcn-angular/textarea", "selector": "Textarea", "selectorType": "element", "standalone": true },
|
|
201
|
-
{ "name": "Toast", "package": "@shadcn-angular/toast", "selector": "Toast", "selectorType": "element", "standalone": true },
|
|
202
|
-
{ "name": "ToastAction", "package": "@shadcn-angular/toast", "selector": "ToastAction", "selectorType": "element", "standalone": true },
|
|
203
|
-
{ "name": "ToastClose", "package": "@shadcn-angular/toast", "selector": "ToastClose", "selectorType": "element", "standalone": true },
|
|
204
|
-
{ "name": "ToastDescription", "package": "@shadcn-angular/toast", "selector": "ToastDescription", "selectorType": "element", "standalone": true },
|
|
205
|
-
{ "name": "ToastProvider", "package": "@shadcn-angular/toast", "selector": "ToastProvider", "selectorType": "element", "standalone": true },
|
|
206
|
-
{ "name": "ToastTitle", "package": "@shadcn-angular/toast", "selector": "ToastTitle", "selectorType": "element", "standalone": true },
|
|
207
|
-
{ "name": "ToastViewport", "package": "@shadcn-angular/toast", "selector": "ToastViewport", "selectorType": "element", "standalone": true },
|
|
208
|
-
{ "name": "Toaster", "package": "@shadcn-angular/toast", "selector": "Toaster", "selectorType": "element", "standalone": true },
|
|
209
|
-
{ "name": "Toggle", "package": "@shadcn-angular/toggle", "selector": "Toggle", "selectorType": "element", "standalone": true },
|
|
210
|
-
{ "name": "ToggleGroup", "package": "@shadcn-angular/toggle-group", "selector": "ToggleGroup", "selectorType": "element", "standalone": true },
|
|
211
|
-
{ "name": "ToggleGroupItem", "package": "@shadcn-angular/toggle-group", "selector": "ToggleGroupItem", "selectorType": "element", "standalone": true },
|
|
212
|
-
{ "name": "Tooltip", "package": "@shadcn-angular/tooltip", "selector": "Tooltip", "selectorType": "element", "standalone": true },
|
|
213
|
-
{ "name": "TooltipTrigger", "package": "@shadcn-angular/tooltip", "selector": "TooltipTrigger", "selectorType": "element", "standalone": true },
|
|
214
|
-
{ "name": "TooltipContent", "package": "@shadcn-angular/tooltip", "selector": "TooltipContent", "selectorType": "element", "standalone": true },
|
|
215
|
-
{ "name": "TooltipProvider", "package": "@shadcn-angular/tooltip", "selector": "TooltipProvider", "selectorType": "element", "standalone": true }
|
|
216
|
-
],
|
|
217
|
-
"compat": {
|
|
218
|
-
"tweakCn": true,
|
|
219
|
-
"naming": "exact-shadcn",
|
|
220
|
-
"notes": "Uses exact shadcn/ui naming conventions with element selectors only. All components use element selectors (e.g., <Button>, <Card>, <Input>). No attribute selectors. No custom prefixes. Components are standalone and tree-shakable."
|
|
221
|
-
},
|
|
222
|
-
"blocks": [
|
|
223
|
-
{
|
|
224
|
-
"name": "Sidebar",
|
|
225
|
-
"package": "@shadcn-angular/blocks",
|
|
226
|
-
"description": "Collapsible side navigation with icons and nested menus",
|
|
227
|
-
"components": ["Sheet", "Button", "Tooltip", "ScrollArea", "Separator"],
|
|
228
|
-
"variants": ["default", "floating", "inset"]
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
"name": "Navbar",
|
|
232
|
-
"package": "@shadcn-angular/blocks",
|
|
233
|
-
"description": "Top navigation bar with logo, links, and user menu",
|
|
234
|
-
"components": ["NavigationMenu", "Button", "DropdownMenu", "Avatar"],
|
|
235
|
-
"variants": ["default", "centered", "minimal"]
|
|
236
|
-
},
|
|
237
|
-
{
|
|
238
|
-
"name": "DashboardLayout",
|
|
239
|
-
"package": "@shadcn-angular/blocks",
|
|
240
|
-
"description": "Full admin dashboard shell with sidebar and header",
|
|
241
|
-
"components": ["Sidebar", "Navbar", "Card", "Breadcrumb"],
|
|
242
|
-
"variants": ["default", "compact"]
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
"name": "AuthForm",
|
|
246
|
-
"package": "@shadcn-angular/blocks",
|
|
247
|
-
"description": "Login, register, and forgot password forms",
|
|
248
|
-
"components": ["Card", "Form", "Input", "Button", "Label", "Checkbox"],
|
|
249
|
-
"variants": ["login", "register", "forgot-password", "reset-password"]
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
"name": "DataTable",
|
|
253
|
-
"package": "@shadcn-angular/blocks",
|
|
254
|
-
"description": "Advanced data table with sorting, filtering, and pagination",
|
|
255
|
-
"components": ["Table", "Button", "DropdownMenu", "Checkbox", "Input", "Select", "Pagination"],
|
|
256
|
-
"variants": ["default", "compact", "expandable"]
|
|
257
|
-
},
|
|
258
|
-
{
|
|
259
|
-
"name": "SettingsPage",
|
|
260
|
-
"package": "@shadcn-angular/blocks",
|
|
261
|
-
"description": "Settings form layout with tabs and sections",
|
|
262
|
-
"components": ["Card", "Form", "Tabs", "Switch", "Select", "Input", "Button"],
|
|
263
|
-
"variants": ["default", "sidebar-nav"]
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
"name": "ProfileCard",
|
|
267
|
-
"package": "@shadcn-angular/blocks",
|
|
268
|
-
"description": "User profile display with avatar and actions",
|
|
269
|
-
"components": ["Card", "Avatar", "Badge", "Button"],
|
|
270
|
-
"variants": ["default", "horizontal", "minimal"]
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
"name": "EmptyState",
|
|
274
|
-
"package": "@shadcn-angular/blocks",
|
|
275
|
-
"description": "No data placeholder with icon and action",
|
|
276
|
-
"components": ["Card", "Button"],
|
|
277
|
-
"variants": ["default", "simple", "illustration"]
|
|
278
|
-
},
|
|
279
|
-
{
|
|
280
|
-
"name": "ErrorPage",
|
|
281
|
-
"package": "@shadcn-angular/blocks",
|
|
282
|
-
"description": "Error pages for 404, 500, etc.",
|
|
283
|
-
"components": ["Card", "Button"],
|
|
284
|
-
"variants": ["404", "500", "maintenance", "offline"]
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"name": "CommandMenu",
|
|
288
|
-
"package": "@shadcn-angular/blocks",
|
|
289
|
-
"description": "Global command palette (⌘K style)",
|
|
290
|
-
"components": ["Command", "Dialog"],
|
|
291
|
-
"variants": ["default"]
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
"name": "FileUpload",
|
|
295
|
-
"package": "@shadcn-angular/blocks",
|
|
296
|
-
"description": "Drag and drop file upload zone",
|
|
297
|
-
"components": ["Card", "Button", "Progress"],
|
|
298
|
-
"variants": ["default", "minimal", "avatar"]
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
"name": "StatsCards",
|
|
302
|
-
"package": "@shadcn-angular/blocks",
|
|
303
|
-
"description": "Dashboard statistics cards grid",
|
|
304
|
-
"components": ["Card"],
|
|
305
|
-
"variants": ["default", "with-chart", "compact"]
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
"name": "NotificationCenter",
|
|
309
|
-
"package": "@shadcn-angular/blocks",
|
|
310
|
-
"description": "Notification dropdown panel",
|
|
311
|
-
"components": ["Popover", "ScrollArea", "Button", "Avatar"],
|
|
312
|
-
"variants": ["default", "grouped"]
|
|
313
|
-
},
|
|
314
|
-
{
|
|
315
|
-
"name": "SearchDialog",
|
|
316
|
-
"package": "@shadcn-angular/blocks",
|
|
317
|
-
"description": "Global search with recent and suggestions",
|
|
318
|
-
"components": ["Dialog", "Input", "ScrollArea"],
|
|
319
|
-
"variants": ["default", "with-filters"]
|
|
320
|
-
},
|
|
321
|
-
{
|
|
322
|
-
"name": "UserMenu",
|
|
323
|
-
"package": "@shadcn-angular/blocks",
|
|
324
|
-
"description": "User dropdown menu with profile and settings",
|
|
325
|
-
"components": ["DropdownMenu", "Avatar", "Button"],
|
|
326
|
-
"variants": ["default", "with-status"]
|
|
327
|
-
}
|
|
328
|
-
],
|
|
329
|
-
"theme": {
|
|
330
|
-
"default": "neutral",
|
|
331
|
-
"darkMode": true,
|
|
332
|
-
"cssVariables": true,
|
|
333
|
-
"colorFormat": "oklch",
|
|
334
|
-
"availableThemes": ["neutral", "zinc", "slate", "stone", "gray", "red", "rose", "orange", "green", "blue", "yellow", "violet"]
|
|
335
|
-
}
|
|
336
|
-
}
|
package/postcss.config.mjs
DELETED
|
File without changes
|
|
Binary file
|
package/public/favicon.ico
DELETED
|
Binary file
|
package/public/robots.txt
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# https://www.robotstxt.org/robotstxt.html
|
|
2
|
-
User-agent: *
|
|
3
|
-
Allow: /
|
|
4
|
-
|
|
5
|
-
# Sitemaps
|
|
6
|
-
Sitemap: https://shadcn-angular.dev/sitemap.xml
|
|
7
|
-
|
|
8
|
-
# Disallow admin and internal paths
|
|
9
|
-
Disallow: /api/
|
|
10
|
-
Disallow: /_/
|
|
11
|
-
Disallow: /admin/
|
|
12
|
-
|
|
13
|
-
# Allow all major search engines
|
|
14
|
-
User-agent: Googlebot
|
|
15
|
-
Allow: /
|
|
16
|
-
|
|
17
|
-
User-agent: Bingbot
|
|
18
|
-
Allow: /
|
|
19
|
-
|
|
20
|
-
User-agent: Slurp
|
|
21
|
-
Allow: /
|
|
22
|
-
|
|
23
|
-
User-agent: DuckDuckBot
|
|
24
|
-
Allow: /
|
|
25
|
-
|
|
26
|
-
User-agent: Baiduspider
|
|
27
|
-
Allow: /
|
|
28
|
-
|
|
29
|
-
User-agent: YandexBot
|
|
30
|
-
Allow: /
|
|
31
|
-
|
|
32
|
-
# Crawl-delay for less aggressive crawlers
|
|
33
|
-
User-agent: *
|
|
34
|
-
Crawl-delay: 1
|
package/public/site.webmanifest
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "shadcn-angular",
|
|
3
|
-
"short_name": "shadcn-ng",
|
|
4
|
-
"description": "Beautiful, accessible, and customizable UI components for Angular. Built with Tailwind CSS.",
|
|
5
|
-
"start_url": "/",
|
|
6
|
-
"display": "standalone",
|
|
7
|
-
"background_color": "#ffffff",
|
|
8
|
-
"theme_color": "#18181B",
|
|
9
|
-
"orientation": "portrait-primary",
|
|
10
|
-
"scope": "/",
|
|
11
|
-
"lang": "en",
|
|
12
|
-
"categories": ["developer tools", "productivity", "utilities"],
|
|
13
|
-
"icons": [
|
|
14
|
-
{
|
|
15
|
-
"src": "/android-chrome-192x192.png",
|
|
16
|
-
"sizes": "192x192",
|
|
17
|
-
"type": "image/png",
|
|
18
|
-
"purpose": "any maskable"
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"src": "/android-chrome-512x512.png",
|
|
22
|
-
"sizes": "512x512",
|
|
23
|
-
"type": "image/png",
|
|
24
|
-
"purpose": "any maskable"
|
|
25
|
-
}
|
|
26
|
-
],
|
|
27
|
-
"screenshots": [
|
|
28
|
-
{
|
|
29
|
-
"src": "/screenshots/home.png",
|
|
30
|
-
"sizes": "1280x720",
|
|
31
|
-
"type": "image/png",
|
|
32
|
-
"form_factor": "wide",
|
|
33
|
-
"label": "Home page showing component library overview"
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"src": "/screenshots/components.png",
|
|
37
|
-
"sizes": "1280x720",
|
|
38
|
-
"type": "image/png",
|
|
39
|
-
"form_factor": "wide",
|
|
40
|
-
"label": "Components documentation page"
|
|
41
|
-
}
|
|
42
|
-
],
|
|
43
|
-
"related_applications": [],
|
|
44
|
-
"prefer_related_applications": false
|
|
45
|
-
}
|
package/tsconfig.app.json
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
|
|
2
|
-
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
|
|
3
|
-
{
|
|
4
|
-
"extends": "./tsconfig.json",
|
|
5
|
-
"compilerOptions": {
|
|
6
|
-
"outDir": "./out-tsc/app",
|
|
7
|
-
"types": [
|
|
8
|
-
"node"
|
|
9
|
-
]
|
|
10
|
-
},
|
|
11
|
-
"include": [
|
|
12
|
-
"src/**/*.ts"
|
|
13
|
-
],
|
|
14
|
-
"exclude": [
|
|
15
|
-
"src/**/*.spec.ts"
|
|
16
|
-
]
|
|
17
|
-
}
|
package/tsconfig.json
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
|
|
2
|
-
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
|
|
3
|
-
{
|
|
4
|
-
"compileOnSave": false,
|
|
5
|
-
"compilerOptions": {
|
|
6
|
-
"strict": true,
|
|
7
|
-
"noImplicitOverride": true,
|
|
8
|
-
"noPropertyAccessFromIndexSignature": true,
|
|
9
|
-
"noImplicitReturns": true,
|
|
10
|
-
"noFallthroughCasesInSwitch": true,
|
|
11
|
-
"skipLibCheck": true,
|
|
12
|
-
"isolatedModules": true,
|
|
13
|
-
"experimentalDecorators": true,
|
|
14
|
-
"importHelpers": true,
|
|
15
|
-
"target": "ES2022",
|
|
16
|
-
"module": "preserve",
|
|
17
|
-
"baseUrl": ".",
|
|
18
|
-
"paths": {
|
|
19
|
-
"@/*": ["src/*"],
|
|
20
|
-
"@/lib/*": ["src/app/lib/*"],
|
|
21
|
-
"@/components/*": ["src/app/components/*"],
|
|
22
|
-
"@/ui/*": ["src/app/lib/components/ui/*"],
|
|
23
|
-
"@/utils/*": ["src/app/lib/utils/*"],
|
|
24
|
-
"@/services/*": ["src/app/services/*"],
|
|
25
|
-
"@/data/*": ["src/app/data/*"],
|
|
26
|
-
"@/pages/*": ["src/app/pages/*"]
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
"angularCompilerOptions": {
|
|
30
|
-
"enableI18nLegacyMessageIdFormat": false,
|
|
31
|
-
"strictInjectionParameters": true,
|
|
32
|
-
"strictInputAccessModifiers": true,
|
|
33
|
-
"typeCheckHostBindings": true,
|
|
34
|
-
"strictTemplates": true
|
|
35
|
-
},
|
|
36
|
-
"files": [],
|
|
37
|
-
"references": [
|
|
38
|
-
{
|
|
39
|
-
"path": "./tsconfig.app.json"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"path": "./tsconfig.spec.json"
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
}
|
package/tsconfig.spec.json
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
|
|
2
|
-
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
|
|
3
|
-
{
|
|
4
|
-
"extends": "./tsconfig.json",
|
|
5
|
-
"compilerOptions": {
|
|
6
|
-
"outDir": "./out-tsc/spec",
|
|
7
|
-
"types": [
|
|
8
|
-
"jasmine"
|
|
9
|
-
]
|
|
10
|
-
},
|
|
11
|
-
"include": [
|
|
12
|
-
"src/**/*.d.ts",
|
|
13
|
-
"src/**/*.spec.ts"
|
|
14
|
-
]
|
|
15
|
-
}
|