aios-core 4.1.0 → 4.2.0
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/.aios-core/.session/current-session.json +14 -0
- package/.aios-core/core/registry/registry-schema.json +166 -166
- package/.aios-core/core/registry/service-registry.json +6585 -6585
- package/.aios-core/data/entity-registry.yaml +208 -8
- package/.aios-core/data/registry-update-log.jsonl +165 -0
- package/.aios-core/development/scripts/approval-workflow.js +642 -642
- package/.aios-core/development/scripts/backup-manager.js +606 -606
- package/.aios-core/development/scripts/branch-manager.js +389 -389
- package/.aios-core/development/scripts/code-quality-improver.js +1311 -1311
- package/.aios-core/development/scripts/commit-message-generator.js +849 -849
- package/.aios-core/development/scripts/conflict-resolver.js +674 -674
- package/.aios-core/development/scripts/dependency-analyzer.js +637 -637
- package/.aios-core/development/scripts/diff-generator.js +351 -351
- package/.aios-core/development/scripts/elicitation-engine.js +384 -384
- package/.aios-core/development/scripts/elicitation-session-manager.js +299 -299
- package/.aios-core/development/scripts/git-wrapper.js +461 -461
- package/.aios-core/development/scripts/manifest-preview.js +244 -244
- package/.aios-core/development/scripts/metrics-tracker.js +775 -775
- package/.aios-core/development/scripts/modification-validator.js +554 -554
- package/.aios-core/development/scripts/pattern-learner.js +1224 -1224
- package/.aios-core/development/scripts/performance-analyzer.js +757 -757
- package/.aios-core/development/scripts/refactoring-suggester.js +1138 -1138
- package/.aios-core/development/scripts/rollback-handler.js +530 -530
- package/.aios-core/development/scripts/security-checker.js +358 -358
- package/.aios-core/development/scripts/template-engine.js +239 -239
- package/.aios-core/development/scripts/template-validator.js +278 -278
- package/.aios-core/development/scripts/test-generator.js +843 -843
- package/.aios-core/development/scripts/transaction-manager.js +589 -589
- package/.aios-core/development/scripts/usage-tracker.js +673 -673
- package/.aios-core/development/scripts/validate-filenames.js +226 -226
- package/.aios-core/development/scripts/version-tracker.js +526 -526
- package/.aios-core/development/scripts/yaml-validator.js +396 -396
- package/.aios-core/development/tasks/validate-next-story.md +99 -2
- package/.aios-core/development/templates/service-template/README.md.hbs +158 -158
- package/.aios-core/development/templates/service-template/__tests__/index.test.ts.hbs +237 -237
- package/.aios-core/development/templates/service-template/client.ts.hbs +403 -403
- package/.aios-core/development/templates/service-template/errors.ts.hbs +182 -182
- package/.aios-core/development/templates/service-template/index.ts.hbs +120 -120
- package/.aios-core/development/templates/service-template/package.json.hbs +87 -87
- package/.aios-core/development/templates/service-template/types.ts.hbs +145 -145
- package/.aios-core/development/templates/squad-template/LICENSE +21 -21
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -0
- package/.aios-core/docs/component-creation-guide.md +458 -0
- package/.aios-core/docs/session-update-pattern.md +307 -0
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -0
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -0
- package/.aios-core/docs/template-syntax.md +267 -0
- package/.aios-core/docs/troubleshooting-guide.md +625 -0
- package/.aios-core/infrastructure/templates/aios-sync.yaml.template +193 -193
- package/.aios-core/infrastructure/templates/coderabbit.yaml.template +279 -279
- package/.aios-core/infrastructure/templates/github-workflows/ci.yml.template +169 -169
- package/.aios-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -330
- package/.aios-core/infrastructure/templates/github-workflows/release.yml.template +196 -196
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -63
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -18
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -85
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -145
- package/.aios-core/infrastructure/tests/utilities-audit-results.json +501 -0
- package/.aios-core/install-manifest.yaml +101 -101
- package/.aios-core/local-config.yaml.template +70 -70
- package/.aios-core/manifests/agents.csv +29 -0
- package/.aios-core/manifests/schema/manifest-schema.json +190 -190
- package/.aios-core/manifests/tasks.csv +198 -0
- package/.aios-core/manifests/workers.csv +204 -0
- package/.aios-core/monitor/hooks/lib/__init__.py +1 -1
- package/.aios-core/monitor/hooks/lib/enrich.py +58 -58
- package/.aios-core/monitor/hooks/lib/send_event.py +47 -47
- package/.aios-core/monitor/hooks/notification.py +29 -29
- package/.aios-core/monitor/hooks/post_tool_use.py +45 -45
- package/.aios-core/monitor/hooks/pre_compact.py +29 -29
- package/.aios-core/monitor/hooks/pre_tool_use.py +40 -40
- package/.aios-core/monitor/hooks/stop.py +29 -29
- package/.aios-core/monitor/hooks/subagent_stop.py +29 -29
- package/.aios-core/monitor/hooks/user_prompt_submit.py +38 -38
- package/.aios-core/product/templates/adr.hbs +125 -125
- package/.aios-core/product/templates/component-react-tmpl.tsx +98 -98
- package/.aios-core/product/templates/dbdr.hbs +241 -241
- package/.aios-core/product/templates/engine/schemas/adr.schema.json +102 -102
- package/.aios-core/product/templates/engine/schemas/dbdr.schema.json +205 -205
- package/.aios-core/product/templates/engine/schemas/epic.schema.json +175 -175
- package/.aios-core/product/templates/engine/schemas/pmdr.schema.json +175 -175
- package/.aios-core/product/templates/engine/schemas/prd-v2.schema.json +300 -300
- package/.aios-core/product/templates/engine/schemas/prd.schema.json +152 -152
- package/.aios-core/product/templates/engine/schemas/story.schema.json +222 -222
- package/.aios-core/product/templates/engine/schemas/task.schema.json +154 -154
- package/.aios-core/product/templates/epic.hbs +212 -212
- package/.aios-core/product/templates/eslintrc-security.json +32 -32
- package/.aios-core/product/templates/github-actions-cd.yml +212 -212
- package/.aios-core/product/templates/github-actions-ci.yml +172 -172
- package/.aios-core/product/templates/pmdr.hbs +186 -186
- package/.aios-core/product/templates/prd-v2.0.hbs +216 -216
- package/.aios-core/product/templates/prd.hbs +201 -201
- package/.aios-core/product/templates/shock-report-tmpl.html +502 -502
- package/.aios-core/product/templates/story.hbs +263 -263
- package/.aios-core/product/templates/task.hbs +170 -170
- package/.aios-core/product/templates/tmpl-comment-on-examples.sql +158 -158
- package/.aios-core/product/templates/tmpl-migration-script.sql +91 -91
- package/.aios-core/product/templates/tmpl-rls-granular-policies.sql +104 -104
- package/.aios-core/product/templates/tmpl-rls-kiss-policy.sql +10 -10
- package/.aios-core/product/templates/tmpl-rls-roles.sql +135 -135
- package/.aios-core/product/templates/tmpl-rls-simple.sql +77 -77
- package/.aios-core/product/templates/tmpl-rls-tenant.sql +152 -152
- package/.aios-core/product/templates/tmpl-rollback-script.sql +77 -77
- package/.aios-core/product/templates/tmpl-seed-data.sql +140 -140
- package/.aios-core/product/templates/tmpl-smoke-test.sql +16 -16
- package/.aios-core/product/templates/tmpl-staging-copy-merge.sql +139 -139
- package/.aios-core/product/templates/tmpl-stored-proc.sql +140 -140
- package/.aios-core/product/templates/tmpl-trigger.sql +152 -152
- package/.aios-core/product/templates/tmpl-view-materialized.sql +133 -133
- package/.aios-core/product/templates/tmpl-view.sql +177 -177
- package/.aios-core/product/templates/token-exports-css-tmpl.css +240 -240
- package/.aios-core/quality/schemas/quality-metrics.schema.json +233 -233
- package/.aios-core/scripts/migrate-framework-docs.sh +300 -300
- package/.aios-core/scripts/pm.sh +0 -0
- package/.claude/hooks/enforce-architecture-first.py +196 -196
- package/.claude/hooks/mind-clone-governance.py +192 -192
- package/.claude/hooks/read-protection.py +151 -151
- package/.claude/hooks/slug-validation.py +176 -176
- package/.claude/hooks/sql-governance.py +182 -182
- package/.claude/hooks/write-path-validation.py +194 -194
- package/.claude/rules/agent-authority.md +105 -0
- package/.claude/rules/coderabbit-integration.md +93 -0
- package/.claude/rules/ids-principles.md +112 -0
- package/.claude/rules/story-lifecycle.md +139 -0
- package/.claude/rules/workflow-execution.md +150 -0
- package/LICENSE +48 -48
- package/bin/aios-minimal.js +0 -0
- package/bin/aios.js +0 -0
- package/package.json +1 -1
- package/packages/aios-install/bin/aios-install.js +0 -0
- package/packages/aios-install/bin/edmcp.js +0 -0
- package/packages/aios-pro-cli/bin/aios-pro.js +0 -0
- package/packages/installer/src/wizard/pro-setup.js +433 -49
- package/scripts/check-markdown-links.py +352 -352
- package/scripts/code-intel-health-check.js +343 -0
- package/scripts/dashboard-parallel-dev.sh +0 -0
- package/scripts/dashboard-parallel-phase3.sh +0 -0
- package/scripts/dashboard-parallel-phase4.sh +0 -0
- package/scripts/glue/README.md +355 -0
- package/scripts/glue/compose-agent-prompt.cjs +362 -0
- package/scripts/install-monitor-hooks.sh +0 -0
- package/.aios-core/lib/build.json +0 -1
|
@@ -1,125 +1,125 @@
|
|
|
1
|
-
---
|
|
2
|
-
template_id: adr
|
|
3
|
-
template_name: Architecture Decision Record
|
|
4
|
-
version: 1.0
|
|
5
|
-
variables:
|
|
6
|
-
- name: number
|
|
7
|
-
type: number
|
|
8
|
-
required: true
|
|
9
|
-
auto: next_adr_number
|
|
10
|
-
- name: title
|
|
11
|
-
type: string
|
|
12
|
-
required: true
|
|
13
|
-
prompt: "Title of the architectural decision:"
|
|
14
|
-
- name: status
|
|
15
|
-
type: choice
|
|
16
|
-
required: true
|
|
17
|
-
choices: [Proposed, Accepted, Deprecated, Superseded]
|
|
18
|
-
default: Proposed
|
|
19
|
-
- name: deciders
|
|
20
|
-
type: string
|
|
21
|
-
required: true
|
|
22
|
-
prompt: "Who participated in this decision? (comma-separated names):"
|
|
23
|
-
- name: context
|
|
24
|
-
type: text
|
|
25
|
-
required: true
|
|
26
|
-
prompt: "What is the context and problem that led to this decision?"
|
|
27
|
-
- name: decision
|
|
28
|
-
type: text
|
|
29
|
-
required: true
|
|
30
|
-
prompt: "What is the decision being made?"
|
|
31
|
-
- name: positiveConsequences
|
|
32
|
-
type: array
|
|
33
|
-
required: true
|
|
34
|
-
prompt: "What are the positive consequences? (comma-separated):"
|
|
35
|
-
- name: negativeConsequences
|
|
36
|
-
type: array
|
|
37
|
-
required: false
|
|
38
|
-
prompt: "What are the negative consequences/trade-offs? (comma-separated):"
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
# ADR {{padNumber number 3}}: {{title}}
|
|
42
|
-
|
|
43
|
-
**Status:** {{status}}
|
|
44
|
-
**Date:** {{formatDate now "YYYY-MM-DD"}}
|
|
45
|
-
**Deciders:** {{deciders}}
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Context
|
|
50
|
-
|
|
51
|
-
{{context}}
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Decision
|
|
56
|
-
|
|
57
|
-
{{decision}}
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## Consequences
|
|
62
|
-
|
|
63
|
-
### Positive
|
|
64
|
-
|
|
65
|
-
{{#each positiveConsequences}}
|
|
66
|
-
- ✅ {{this}}
|
|
67
|
-
{{/each}}
|
|
68
|
-
|
|
69
|
-
### Negative
|
|
70
|
-
|
|
71
|
-
{{#if negativeConsequences}}
|
|
72
|
-
{{#each negativeConsequences}}
|
|
73
|
-
- ⚠️ {{this}}
|
|
74
|
-
{{/each}}
|
|
75
|
-
{{else}}
|
|
76
|
-
_No significant negative consequences identified._
|
|
77
|
-
{{/if}}
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
{{#if alternatives}}
|
|
82
|
-
## Alternatives Considered
|
|
83
|
-
|
|
84
|
-
{{#each alternatives}}
|
|
85
|
-
### Option {{add @index 1}}: {{this.name}}
|
|
86
|
-
|
|
87
|
-
{{this.description}}
|
|
88
|
-
|
|
89
|
-
| Aspect | Details |
|
|
90
|
-
|--------|---------|
|
|
91
|
-
| **Pros** | {{this.pros}} |
|
|
92
|
-
| **Cons** | {{this.cons}} |
|
|
93
|
-
| **Why Not Chosen** | {{this.whyNot}} |
|
|
94
|
-
|
|
95
|
-
{{/each}}
|
|
96
|
-
{{/if}}
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## Related Decisions
|
|
101
|
-
|
|
102
|
-
{{#if relatedADRs}}
|
|
103
|
-
{{#each relatedADRs}}
|
|
104
|
-
- [ADR {{this.number}}](./adr-{{padNumber this.number 3}}.md): {{this.title}}
|
|
105
|
-
{{/each}}
|
|
106
|
-
{{else}}
|
|
107
|
-
_No related decisions._
|
|
108
|
-
{{/if}}
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## References
|
|
113
|
-
|
|
114
|
-
{{#if references}}
|
|
115
|
-
{{#each references}}
|
|
116
|
-
- {{this}}
|
|
117
|
-
{{/each}}
|
|
118
|
-
{{else}}
|
|
119
|
-
_No external references._
|
|
120
|
-
{{/if}}
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
**Generated by:** AIOS Template Engine v2.0
|
|
125
|
-
**Template Version:** adr-1.0
|
|
1
|
+
---
|
|
2
|
+
template_id: adr
|
|
3
|
+
template_name: Architecture Decision Record
|
|
4
|
+
version: 1.0
|
|
5
|
+
variables:
|
|
6
|
+
- name: number
|
|
7
|
+
type: number
|
|
8
|
+
required: true
|
|
9
|
+
auto: next_adr_number
|
|
10
|
+
- name: title
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
prompt: "Title of the architectural decision:"
|
|
14
|
+
- name: status
|
|
15
|
+
type: choice
|
|
16
|
+
required: true
|
|
17
|
+
choices: [Proposed, Accepted, Deprecated, Superseded]
|
|
18
|
+
default: Proposed
|
|
19
|
+
- name: deciders
|
|
20
|
+
type: string
|
|
21
|
+
required: true
|
|
22
|
+
prompt: "Who participated in this decision? (comma-separated names):"
|
|
23
|
+
- name: context
|
|
24
|
+
type: text
|
|
25
|
+
required: true
|
|
26
|
+
prompt: "What is the context and problem that led to this decision?"
|
|
27
|
+
- name: decision
|
|
28
|
+
type: text
|
|
29
|
+
required: true
|
|
30
|
+
prompt: "What is the decision being made?"
|
|
31
|
+
- name: positiveConsequences
|
|
32
|
+
type: array
|
|
33
|
+
required: true
|
|
34
|
+
prompt: "What are the positive consequences? (comma-separated):"
|
|
35
|
+
- name: negativeConsequences
|
|
36
|
+
type: array
|
|
37
|
+
required: false
|
|
38
|
+
prompt: "What are the negative consequences/trade-offs? (comma-separated):"
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
# ADR {{padNumber number 3}}: {{title}}
|
|
42
|
+
|
|
43
|
+
**Status:** {{status}}
|
|
44
|
+
**Date:** {{formatDate now "YYYY-MM-DD"}}
|
|
45
|
+
**Deciders:** {{deciders}}
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Context
|
|
50
|
+
|
|
51
|
+
{{context}}
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Decision
|
|
56
|
+
|
|
57
|
+
{{decision}}
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Consequences
|
|
62
|
+
|
|
63
|
+
### Positive
|
|
64
|
+
|
|
65
|
+
{{#each positiveConsequences}}
|
|
66
|
+
- ✅ {{this}}
|
|
67
|
+
{{/each}}
|
|
68
|
+
|
|
69
|
+
### Negative
|
|
70
|
+
|
|
71
|
+
{{#if negativeConsequences}}
|
|
72
|
+
{{#each negativeConsequences}}
|
|
73
|
+
- ⚠️ {{this}}
|
|
74
|
+
{{/each}}
|
|
75
|
+
{{else}}
|
|
76
|
+
_No significant negative consequences identified._
|
|
77
|
+
{{/if}}
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
{{#if alternatives}}
|
|
82
|
+
## Alternatives Considered
|
|
83
|
+
|
|
84
|
+
{{#each alternatives}}
|
|
85
|
+
### Option {{add @index 1}}: {{this.name}}
|
|
86
|
+
|
|
87
|
+
{{this.description}}
|
|
88
|
+
|
|
89
|
+
| Aspect | Details |
|
|
90
|
+
|--------|---------|
|
|
91
|
+
| **Pros** | {{this.pros}} |
|
|
92
|
+
| **Cons** | {{this.cons}} |
|
|
93
|
+
| **Why Not Chosen** | {{this.whyNot}} |
|
|
94
|
+
|
|
95
|
+
{{/each}}
|
|
96
|
+
{{/if}}
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Related Decisions
|
|
101
|
+
|
|
102
|
+
{{#if relatedADRs}}
|
|
103
|
+
{{#each relatedADRs}}
|
|
104
|
+
- [ADR {{this.number}}](./adr-{{padNumber this.number 3}}.md): {{this.title}}
|
|
105
|
+
{{/each}}
|
|
106
|
+
{{else}}
|
|
107
|
+
_No related decisions._
|
|
108
|
+
{{/if}}
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## References
|
|
113
|
+
|
|
114
|
+
{{#if references}}
|
|
115
|
+
{{#each references}}
|
|
116
|
+
- {{this}}
|
|
117
|
+
{{/each}}
|
|
118
|
+
{{else}}
|
|
119
|
+
_No external references._
|
|
120
|
+
{{/if}}
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
**Generated by:** AIOS Template Engine v2.0
|
|
125
|
+
**Template Version:** adr-1.0
|
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
// {{ComponentName}}.tsx
|
|
2
|
-
// Generated by Atlas (Design System Builder)
|
|
3
|
-
// Atomic level: {{atomic_level}}
|
|
4
|
-
// Utility-first Tailwind, zero hardcoded values
|
|
5
|
-
|
|
6
|
-
import * as React from 'react';
|
|
7
|
-
import { Slot } from '@radix-ui/react-slot';
|
|
8
|
-
import { cva, type VariantProps } from 'class-variance-authority';
|
|
9
|
-
import { cn } from '{{UtilityImportPath}}';
|
|
10
|
-
{{SpinnerImport}}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Variant catalogue generated from consolidated tokens.
|
|
14
|
-
* Extend with additional groups (state, density, alignment) as needed.
|
|
15
|
-
*/
|
|
16
|
-
export const {{componentName}}Variants = cva(
|
|
17
|
-
'{{baseClasses}}',
|
|
18
|
-
{
|
|
19
|
-
variants: {
|
|
20
|
-
variant: {
|
|
21
|
-
{{VariantDefinitions}}
|
|
22
|
-
},
|
|
23
|
-
size: {
|
|
24
|
-
{{SizeDefinitions}}
|
|
25
|
-
}{{AdditionalVariantGroups}}
|
|
26
|
-
},
|
|
27
|
-
compoundVariants: [
|
|
28
|
-
{{CompoundVariants}}
|
|
29
|
-
],
|
|
30
|
-
defaultVariants: {
|
|
31
|
-
variant: '{{DefaultVariant}}',
|
|
32
|
-
size: '{{DefaultSize}}'{{DefaultVariantOverrides}}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
export interface {{ComponentName}}Props
|
|
38
|
-
extends React.{{ElementAttributes}}<{{ElementTag}}>,
|
|
39
|
-
VariantProps<typeof {{componentName}}Variants> {
|
|
40
|
-
/** Render as child element instead of the default tag */
|
|
41
|
-
asChild?: boolean;
|
|
42
|
-
/** Display loading UI and disable interactions */
|
|
43
|
-
isLoading?: boolean;
|
|
44
|
-
/** Optional custom loading indicator */
|
|
45
|
-
loadingIcon?: React.ReactNode;
|
|
46
|
-
{{AdditionalProps}}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* {{ComponentDescription}}
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```tsx
|
|
54
|
-
* <{{ComponentName}} variant="{{DefaultVariant}}" size="{{DefaultSize}}">
|
|
55
|
-
* {{ExampleContent}}
|
|
56
|
-
* </{{ComponentName}}>
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
export const {{ComponentName}} = React.forwardRef<{{ElementTag}}, {{ComponentName}}Props>(
|
|
60
|
-
(
|
|
61
|
-
{
|
|
62
|
-
asChild = false,
|
|
63
|
-
className,
|
|
64
|
-
variant = '{{DefaultVariant}}',
|
|
65
|
-
size = '{{DefaultSize}}',
|
|
66
|
-
isLoading = false,
|
|
67
|
-
loadingIcon,
|
|
68
|
-
children,
|
|
69
|
-
...props
|
|
70
|
-
},
|
|
71
|
-
ref
|
|
72
|
-
) => {
|
|
73
|
-
const Comp = asChild ? Slot : '{{HtmlElement}}';
|
|
74
|
-
|
|
75
|
-
return (
|
|
76
|
-
<Comp
|
|
77
|
-
ref={ref}
|
|
78
|
-
className={cn(
|
|
79
|
-
{{componentName}}Variants({ variant, size }),
|
|
80
|
-
isLoading && 'pointer-events-none opacity-70',
|
|
81
|
-
className
|
|
82
|
-
)}
|
|
83
|
-
data-state={isLoading ? 'loading' : props['data-state']}
|
|
84
|
-
{...props}
|
|
85
|
-
>
|
|
86
|
-
{isLoading &&
|
|
87
|
-
(loadingIcon ?? (
|
|
88
|
-
<{{SpinnerComponent}} className="mr-2 h-4 w-4 animate-spin" aria-hidden="true" />
|
|
89
|
-
))}
|
|
90
|
-
<span className="inline-flex items-center gap-1">{{ChildWrapper}}</span>
|
|
91
|
-
</Comp>
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
{{ComponentName}}.displayName = '{{ComponentName}}';
|
|
97
|
-
|
|
98
|
-
export type {{ComponentName}}Variant = VariantProps<typeof {{componentName}}Variants>;
|
|
1
|
+
// {{ComponentName}}.tsx
|
|
2
|
+
// Generated by Atlas (Design System Builder)
|
|
3
|
+
// Atomic level: {{atomic_level}}
|
|
4
|
+
// Utility-first Tailwind, zero hardcoded values
|
|
5
|
+
|
|
6
|
+
import * as React from 'react';
|
|
7
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
8
|
+
import { cva, type VariantProps } from 'class-variance-authority';
|
|
9
|
+
import { cn } from '{{UtilityImportPath}}';
|
|
10
|
+
{{SpinnerImport}}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Variant catalogue generated from consolidated tokens.
|
|
14
|
+
* Extend with additional groups (state, density, alignment) as needed.
|
|
15
|
+
*/
|
|
16
|
+
export const {{componentName}}Variants = cva(
|
|
17
|
+
'{{baseClasses}}',
|
|
18
|
+
{
|
|
19
|
+
variants: {
|
|
20
|
+
variant: {
|
|
21
|
+
{{VariantDefinitions}}
|
|
22
|
+
},
|
|
23
|
+
size: {
|
|
24
|
+
{{SizeDefinitions}}
|
|
25
|
+
}{{AdditionalVariantGroups}}
|
|
26
|
+
},
|
|
27
|
+
compoundVariants: [
|
|
28
|
+
{{CompoundVariants}}
|
|
29
|
+
],
|
|
30
|
+
defaultVariants: {
|
|
31
|
+
variant: '{{DefaultVariant}}',
|
|
32
|
+
size: '{{DefaultSize}}'{{DefaultVariantOverrides}}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
export interface {{ComponentName}}Props
|
|
38
|
+
extends React.{{ElementAttributes}}<{{ElementTag}}>,
|
|
39
|
+
VariantProps<typeof {{componentName}}Variants> {
|
|
40
|
+
/** Render as child element instead of the default tag */
|
|
41
|
+
asChild?: boolean;
|
|
42
|
+
/** Display loading UI and disable interactions */
|
|
43
|
+
isLoading?: boolean;
|
|
44
|
+
/** Optional custom loading indicator */
|
|
45
|
+
loadingIcon?: React.ReactNode;
|
|
46
|
+
{{AdditionalProps}}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* {{ComponentDescription}}
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* <{{ComponentName}} variant="{{DefaultVariant}}" size="{{DefaultSize}}">
|
|
55
|
+
* {{ExampleContent}}
|
|
56
|
+
* </{{ComponentName}}>
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export const {{ComponentName}} = React.forwardRef<{{ElementTag}}, {{ComponentName}}Props>(
|
|
60
|
+
(
|
|
61
|
+
{
|
|
62
|
+
asChild = false,
|
|
63
|
+
className,
|
|
64
|
+
variant = '{{DefaultVariant}}',
|
|
65
|
+
size = '{{DefaultSize}}',
|
|
66
|
+
isLoading = false,
|
|
67
|
+
loadingIcon,
|
|
68
|
+
children,
|
|
69
|
+
...props
|
|
70
|
+
},
|
|
71
|
+
ref
|
|
72
|
+
) => {
|
|
73
|
+
const Comp = asChild ? Slot : '{{HtmlElement}}';
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<Comp
|
|
77
|
+
ref={ref}
|
|
78
|
+
className={cn(
|
|
79
|
+
{{componentName}}Variants({ variant, size }),
|
|
80
|
+
isLoading && 'pointer-events-none opacity-70',
|
|
81
|
+
className
|
|
82
|
+
)}
|
|
83
|
+
data-state={isLoading ? 'loading' : props['data-state']}
|
|
84
|
+
{...props}
|
|
85
|
+
>
|
|
86
|
+
{isLoading &&
|
|
87
|
+
(loadingIcon ?? (
|
|
88
|
+
<{{SpinnerComponent}} className="mr-2 h-4 w-4 animate-spin" aria-hidden="true" />
|
|
89
|
+
))}
|
|
90
|
+
<span className="inline-flex items-center gap-1">{{ChildWrapper}}</span>
|
|
91
|
+
</Comp>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
{{ComponentName}}.displayName = '{{ComponentName}}';
|
|
97
|
+
|
|
98
|
+
export type {{ComponentName}}Variant = VariantProps<typeof {{componentName}}Variants>;
|