@crownpeak/dqm-react-component-dev-mcp 1.2.2 → 1.3.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/data/.glfrc.json +1 -1
- package/data/CHANGELOG.md +50 -0
- package/data/LICENSE +1 -1
- package/data/docs/AI-FEATURES.md +62 -5
- package/data/docs/API-REFERENCE.md +6 -6
- package/data/docs/EXAMPLES.md +5 -5
- package/data/docs/TROUBLESHOOTING.md +4 -4
- package/data/package.json +4 -3
- package/data/scripts/npm-set-version.mjs +41 -0
- package/data/website/LICENSE +22 -0
- package/data/website/README.md +95 -0
- package/data/website/RELEASE-NOTES.md +42 -0
- package/data/website/components.template.json +30 -0
- package/data/website/eslint.config.mjs +16 -0
- package/data/website/next.config.ts +25 -0
- package/data/website/package.json +58 -0
- package/data/website/postcss.config.mjs +7 -0
- package/data/website/public/.nojekyll +0 -0
- package/data/website/public/dqm-react-component/mockServiceWorker.js +349 -0
- package/data/website/public/mockServiceWorker.js +349 -0
- package/data/website/public/robots.txt +7 -0
- package/data/website/public/site.webmanifest +1 -0
- package/data/website/public/sitemap.xml +9 -0
- package/data/website/tsconfig.json +41 -0
- package/package.json +2 -2
package/data/.glfrc.json
CHANGED
package/data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,56 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.3.0] - 2026-01-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **GPT-5.2 Support**: Default AI model upgraded from `gpt-4.1-mini` to `gpt-5.2`
|
|
12
|
+
- 1M token context window enables larger translation batches and fewer API calls
|
|
13
|
+
- New `reasoning_effort` parameter (`low`/`medium`/`high`) for GPT-5 models
|
|
14
|
+
- Automatic API adaptation for GPT-5 vs GPT-4 differences:
|
|
15
|
+
- Token parameter: `max_completion_tokens` (GPT-5) vs `max_tokens` (GPT-4)
|
|
16
|
+
- Structured output: `json_schema` (GPT-5) vs `json_object` (GPT-4)
|
|
17
|
+
- System role: `developer` (GPT-5) vs `system` (GPT-4)
|
|
18
|
+
- 50,000 token context budget (vs 12,000 for GPT-4o)
|
|
19
|
+
- **Model Capabilities Module**: New `src/utils/modelCapabilities.ts` for centralized model detection
|
|
20
|
+
- `isGPT5Model()`, `isReasoningModel()` utility functions
|
|
21
|
+
- `getModelCapabilities()` returns full capability info per model
|
|
22
|
+
- `buildTokenParams()`, `buildReasoningParams()`, `getSystemRole()` helpers
|
|
23
|
+
- **Reasoning Effort UI**: New setting in AI Settings dialog (only visible for GPT-5 models)
|
|
24
|
+
- Persisted to `localStorage` as `dqm_reasoning_effort`
|
|
25
|
+
- Full i18n support (EN/DE/ES)
|
|
26
|
+
- **MCP Server Feature**: Added MCP Server section to website features
|
|
27
|
+
- New feature card with link to documentation
|
|
28
|
+
- Translations for all 3 languages
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
- **AI Settings Dialog**: GPT-5.2 now shown with "NEW" badge in model selector
|
|
32
|
+
- **AI Summary Card**: Improved layout with column flex direction for better readability
|
|
33
|
+
- **Website Hero Badge**: Updated from version number to "GPT-5.2 Powered AI"
|
|
34
|
+
- **Website MSW Provider**: Refactored to `useMSW()` hook for better lifecycle control
|
|
35
|
+
- MSW now starts only when sidebar opens
|
|
36
|
+
- MSW resets completely when sidebar closes
|
|
37
|
+
- **Footer Links**: Updated Crownpeak DQM Platform URL to German FirstSpirit product page
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
- **Translation Feature Descriptions**: Updated to reflect GPT-5.2 capabilities
|
|
41
|
+
- **Website Feature Cards**: Added MCP Server feature with external documentation link
|
|
42
|
+
- **Accessibility**: Added `aria-label` to MCP Server feature link
|
|
43
|
+
|
|
44
|
+
## [1.2.4] - 2026-01-08
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
- **Marketing Website**: New Next.js marketing/documentation website deployed to GitHub Pages
|
|
48
|
+
- Hero section with animated feature highlights
|
|
49
|
+
- Interactive demo section with live sidebar preview
|
|
50
|
+
- Integration section with code examples and copy functionality
|
|
51
|
+
- Multi-language support (English, German, Spanish) using react-i18next
|
|
52
|
+
- Framer Motion animations throughout
|
|
53
|
+
- Built with Tailwind CSS and shadcn/ui components
|
|
54
|
+
- WCAG AA accessibility compliant (proper aria-labels, 4.5:1+ contrast ratios)
|
|
55
|
+
- Static export for GitHub Pages hosting
|
|
56
|
+
- **AI Agent Documentation**: Added comprehensive Website section to `.github/copilot-instructions.md`
|
|
57
|
+
|
|
8
58
|
## [1.2.2] - 2026-01-08
|
|
9
59
|
|
|
10
60
|
### Fixed
|
package/data/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2025 Crownpeak Technology GmbH
|
|
3
|
+
Copyright (c) 2025-2026 Crownpeak Technology GmbH
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/data/docs/AI-FEATURES.md
CHANGED
|
@@ -69,10 +69,46 @@ flowchart TD
|
|
|
69
69
|
### OpenAI Backend
|
|
70
70
|
|
|
71
71
|
**Models Supported**:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
|
|
73
|
+
| Model | Context Window | Recommended For |
|
|
74
|
+
|-------|----------------|-----------------|
|
|
75
|
+
| `gpt-5.2` | 1M tokens | 🌟 Default – Best performance & quality |
|
|
76
|
+
| `gpt-4.1-mini` | 1M tokens | Cost-effective alternative |
|
|
77
|
+
| `gpt-4.1` | 1M tokens | High quality GPT-4 |
|
|
78
|
+
| `gpt-4o-mini` | 128K tokens | Fast & cheap (legacy) |
|
|
79
|
+
| `gpt-4o` | 128K tokens | Higher quality (legacy) |
|
|
80
|
+
|
|
81
|
+
> **🚀 GPT-5.2** is the new default model with 1M token context window, enabling much larger translation batches and better quality.
|
|
82
|
+
|
|
83
|
+
#### GPT-5 vs GPT-4 Differences
|
|
84
|
+
|
|
85
|
+
The component automatically adapts to API differences between GPT-5 and GPT-4 models:
|
|
86
|
+
|
|
87
|
+
| Feature | GPT-5.x | GPT-4.x |
|
|
88
|
+
|---------|---------|---------|
|
|
89
|
+
| Token Parameter | `max_completion_tokens` | `max_tokens` |
|
|
90
|
+
| Structured Output | `json_schema` | `json_object` |
|
|
91
|
+
| System Role | `developer` | `system` |
|
|
92
|
+
| Reasoning Effort | ✅ Supported | ❌ Not available |
|
|
93
|
+
| Context Budget | 50,000 tokens | 12,000 tokens |
|
|
94
|
+
|
|
95
|
+
#### Reasoning Effort (GPT-5 Only)
|
|
96
|
+
|
|
97
|
+
GPT-5 models support a **Reasoning Effort** parameter that controls how deeply the model analyzes translations:
|
|
98
|
+
|
|
99
|
+
| Level | Description | Best For |
|
|
100
|
+
|-------|-------------|----------|
|
|
101
|
+
| `low` | Fast, straightforward translations | Simple content, high volume |
|
|
102
|
+
| `medium` | Balanced analysis (default) | Most use cases |
|
|
103
|
+
| `high` | Deep reasoning, highest accuracy | Technical content, quality-critical |
|
|
104
|
+
|
|
105
|
+
Configure via the **AI Settings** dialog or localStorage:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
localStorage.setItem('dqm_reasoning_effort', 'medium'); // 'low' | 'medium' | 'high'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
> **Note:** Reasoning Effort is only visible in the UI when a GPT-5 model is selected.
|
|
76
112
|
|
|
77
113
|
**Setup**:
|
|
78
114
|
|
|
@@ -284,6 +320,8 @@ graph TD
|
|
|
284
320
|
- **Tiny**: 20+ checkpoints → Top 5 most critical only
|
|
285
321
|
- **Fail**: > 50 checkpoints → Skip summary (too large)
|
|
286
322
|
|
|
323
|
+
> **💡 GPT-5 Advantage**: With GPT-5.2's 1M token context window, the component uses a 50,000 token context budget (vs 12,000 for GPT-4o), enabling larger batches and fewer API calls.
|
|
324
|
+
|
|
287
325
|
**Prompt Template**:
|
|
288
326
|
|
|
289
327
|
```typescript
|
|
@@ -397,7 +435,8 @@ The AI features store configuration in `localStorage`:
|
|
|
397
435
|
| `dqm_translate_results_mode` | `'fast' \| 'full'` | `'fast'` | Translation mode |
|
|
398
436
|
| `dqm_ai_summary_enabled` | `'true' \| 'false'` | `'true'` | Summary toggle |
|
|
399
437
|
| `dqm_openai_apiKey` | `string` | `null` | OpenAI API key |
|
|
400
|
-
| `dqm_openai_model` | `string` | `'gpt-
|
|
438
|
+
| `dqm_openai_model` | `string` | `'gpt-5.2'` | OpenAI model name |
|
|
439
|
+
| `dqm_reasoning_effort` | `'low' \| 'medium' \| 'high'` | `'medium'` | GPT-5 reasoning depth |
|
|
401
440
|
| `dqm_openai_baseUrl` | `string` | `'https://api.openai.com/v1'` | OpenAI base URL |
|
|
402
441
|
|
|
403
442
|
**Access Pattern**:
|
|
@@ -439,6 +478,24 @@ setLocalStorageItem('dqm_openai_apiKey', 'sk-...');
|
|
|
439
478
|
|
|
440
479
|
### Cost Estimation (OpenAI)
|
|
441
480
|
|
|
481
|
+
#### GPT-5.2 (Default)
|
|
482
|
+
|
|
483
|
+
Based on `gpt-5.2` pricing (~$0.10/1M input tokens, ~$0.40/1M output tokens):
|
|
484
|
+
|
|
485
|
+
| Operation | Average Tokens | Cost per Call |
|
|
486
|
+
|-----------|----------------|---------------|
|
|
487
|
+
| Translate 1 checkpoint | ~200 input, ~100 output | ~$0.00006 |
|
|
488
|
+
| Translate 50 checkpoints | ~10k input, ~5k output | ~$0.003 |
|
|
489
|
+
| Summary (5 issues) | ~500 input, ~200 output | ~$0.00013 |
|
|
490
|
+
| Summary (20 issues) | ~2k input, ~500 output | ~$0.0004 |
|
|
491
|
+
|
|
492
|
+
**Monthly costs** (assuming 1000 analyses/month with 20 checkpoints each):
|
|
493
|
+
- Translation only: ~$3.00/month
|
|
494
|
+
- Summary only: ~$0.40/month
|
|
495
|
+
- Both: ~$3.40/month
|
|
496
|
+
|
|
497
|
+
#### GPT-4o-mini (Legacy)
|
|
498
|
+
|
|
442
499
|
Based on `gpt-4o-mini` pricing (~$0.15/1M input tokens, ~$0.60/1M output tokens):
|
|
443
500
|
|
|
444
501
|
| Operation | Average Tokens | Cost per Call |
|
|
@@ -334,7 +334,7 @@ function MyComponent() {
|
|
|
334
334
|
const engine = useAIEngine({
|
|
335
335
|
enabled: true,
|
|
336
336
|
openAiApiKey: 'sk-...',
|
|
337
|
-
openAiModel: 'gpt-
|
|
337
|
+
openAiModel: 'gpt-5.2', // Optional, default: 'gpt-5.2'
|
|
338
338
|
openAiBaseUrl: 'https://api.openai.com/v1', // Optional
|
|
339
339
|
});
|
|
340
340
|
}
|
|
@@ -346,7 +346,7 @@ function MyComponent() {
|
|
|
346
346
|
|----------|------|----------|-------------|
|
|
347
347
|
| `enabled` | `boolean` | ✅ | Whether AI features are enabled |
|
|
348
348
|
| `openAiApiKey` | `string` | ❌ | OpenAI API key |
|
|
349
|
-
| `openAiModel` | `string` | ❌ | OpenAI model name (default: 'gpt-
|
|
349
|
+
| `openAiModel` | `string` | ❌ | OpenAI model name (default: 'gpt-5.2') |
|
|
350
350
|
| `openAiBaseUrl` | `string` | ❌ | OpenAI base URL (default: 'https://api.openai.com/v1') |
|
|
351
351
|
|
|
352
352
|
##### Returns (UseAIEngineReturn)
|
|
@@ -386,7 +386,7 @@ function MyComponent() {
|
|
|
386
386
|
cacheManager,
|
|
387
387
|
originalData: analysisData,
|
|
388
388
|
targetLang: 'de',
|
|
389
|
-
modelId: 'gpt-
|
|
389
|
+
modelId: 'gpt-5.2',
|
|
390
390
|
enabled: true,
|
|
391
391
|
mode: 'fast',
|
|
392
392
|
computeBudgetMs: 15000,
|
|
@@ -466,7 +466,7 @@ function MyComponent() {
|
|
|
466
466
|
engine,
|
|
467
467
|
originalData: analysisData,
|
|
468
468
|
targetLang: 'de',
|
|
469
|
-
modelId: 'gpt-
|
|
469
|
+
modelId: 'gpt-5.2',
|
|
470
470
|
enabled: true,
|
|
471
471
|
cache: cacheManager.cache,
|
|
472
472
|
});
|
|
@@ -988,7 +988,7 @@ The DQM component uses localStorage for persisting user preferences and authenti
|
|
|
988
988
|
| Key | Type | Description |
|
|
989
989
|
|-----|------|-------------|
|
|
990
990
|
| `dqm_openai_apiKey` | `string` | OpenAI API key for translation/summary |
|
|
991
|
-
| `dqm_openai_model` | `string` | OpenAI model (default: 'gpt-
|
|
991
|
+
| `dqm_openai_model` | `string` | OpenAI model (default: 'gpt-5.2') |
|
|
992
992
|
| `dqm_target_language` | `string` | Target language for translation (ISO 639-1) |
|
|
993
993
|
| `dqm_translate_results_enabled` | `'true' \| 'false'` | Translation feature enabled |
|
|
994
994
|
| `dqm_ai_summary_enabled` | `'true' \| 'false'` | AI summary feature enabled |
|
|
@@ -1007,7 +1007,7 @@ The DQM component uses localStorage for persisting user preferences and authenti
|
|
|
1007
1007
|
```typescript
|
|
1008
1008
|
// Set OpenAI configuration before loading DQM
|
|
1009
1009
|
localStorage.setItem('dqm_openai_apiKey', 'sk-...');
|
|
1010
|
-
localStorage.setItem('dqm_openai_model', 'gpt-
|
|
1010
|
+
localStorage.setItem('dqm_openai_model', 'gpt-5.2');
|
|
1011
1011
|
localStorage.setItem('dqm_target_language', 'de');
|
|
1012
1012
|
localStorage.setItem('dqm_translate_results_enabled', 'true');
|
|
1013
1013
|
```
|
package/data/docs/EXAMPLES.md
CHANGED
|
@@ -419,11 +419,11 @@ export default App;
|
|
|
419
419
|
```
|
|
420
420
|
|
|
421
421
|
**Key Features:**
|
|
422
|
-
- **Backend:** OpenAI (gpt-
|
|
422
|
+
- **Backend:** OpenAI (gpt-5.2, gpt-4o, gpt-4.1)
|
|
423
423
|
- **Performance:** ~2-5s for 50 checkpoints (batch processing with 3 concurrent requests)
|
|
424
424
|
- **Caching:** Automatic IndexedDB + In-Memory caching (FNV-1a hash-based)
|
|
425
425
|
- **Mode:** `fast` (15s timeout, fails gracefully) or `full` (120s timeout, complete translation)
|
|
426
|
-
- **Cost:** ~$0.001-0.003 per checkpoint (gpt-
|
|
426
|
+
- **Cost:** ~$0.001-0.003 per checkpoint (gpt-5.2)
|
|
427
427
|
|
|
428
428
|
### Example 7: AI Summary Generation
|
|
429
429
|
|
|
@@ -462,7 +462,7 @@ export default App;
|
|
|
462
462
|
```
|
|
463
463
|
|
|
464
464
|
**Key Features:**
|
|
465
|
-
- **Backend:** OpenAI (gpt-
|
|
465
|
+
- **Backend:** OpenAI (gpt-5.2, gpt-4o, gpt-4.1)
|
|
466
466
|
- **Performance:** ~3-8s for 50 checkpoints
|
|
467
467
|
- **Chunking:** Automatic chunking based on token count (single/chunk/tiny strategies)
|
|
468
468
|
- **Caching:** Persistent IndexedDB cache (reuses summaries across sessions)
|
|
@@ -525,7 +525,7 @@ export default App;
|
|
|
525
525
|
**Performance Tips:**
|
|
526
526
|
- Use `mode: 'fast'` for translation if you prioritize speed over completeness
|
|
527
527
|
- Enable caching to avoid re-translation on subsequent analyses
|
|
528
|
-
- Use gpt-
|
|
528
|
+
- Use gpt-5.2 for optimal balance of speed, cost, and quality
|
|
529
529
|
|
|
530
530
|
### Example 9: AI Settings UI (Advanced)
|
|
531
531
|
|
|
@@ -608,7 +608,7 @@ export default App;
|
|
|
608
608
|
**UI Features:**
|
|
609
609
|
- **Settings Dialog:** Click gear icon in sidebar header to open AI settings
|
|
610
610
|
- **Real-time Toggle:** Enable/disable translation and summary without reloading
|
|
611
|
-
- **Model Selection:** Choose between OpenAI models (gpt-
|
|
611
|
+
- **Model Selection:** Choose between OpenAI models (gpt-5.2, gpt-4o, gpt-4.1)
|
|
612
612
|
- **Language Selection:** Change target language on the fly
|
|
613
613
|
- **Persistent Settings:** All settings saved to localStorage
|
|
614
614
|
|
|
@@ -122,7 +122,7 @@ config={{
|
|
|
122
122
|
translation: {
|
|
123
123
|
enabled: true, // MUST be true
|
|
124
124
|
apiKey: 'sk-...', // Valid OpenAI API key
|
|
125
|
-
model: 'gpt-
|
|
125
|
+
model: 'gpt-5.2', // Correct model name
|
|
126
126
|
targetLanguage: 'de', // ISO 639-1 code
|
|
127
127
|
mode: 'fast',
|
|
128
128
|
},
|
|
@@ -144,14 +144,14 @@ console.log('OpenAI API Key Set:', !!localStorage.getItem('dqm_openai_apiKey'));
|
|
|
144
144
|
**A:** Try these optimizations:
|
|
145
145
|
|
|
146
146
|
1. **Switch to Fast Mode**: `mode: 'fast'` (15s timeout vs 120s for `'full'`)
|
|
147
|
-
2. **Use a faster model**: `gpt-
|
|
147
|
+
2. **Use a faster model**: `gpt-5.2` is optimized for speed and cost-efficiency
|
|
148
148
|
|
|
149
149
|
```typescript
|
|
150
150
|
// Optimize for speed
|
|
151
151
|
translation: {
|
|
152
152
|
enabled: true,
|
|
153
153
|
apiKey: 'sk-...',
|
|
154
|
-
model: 'gpt-
|
|
154
|
+
model: 'gpt-5.2', // Fast + cheap
|
|
155
155
|
targetLanguage: 'de',
|
|
156
156
|
mode: 'fast', // 15s timeout
|
|
157
157
|
}
|
|
@@ -164,7 +164,7 @@ translation: {
|
|
|
164
164
|
**A:** Check these:
|
|
165
165
|
|
|
166
166
|
1. **OpenAI API Key**: Summary requires valid OpenAI key
|
|
167
|
-
2. **Model**: Ensure model supports JSON mode (`gpt-
|
|
167
|
+
2. **Model**: Ensure model supports JSON mode (`gpt-5.2`, `gpt-4o`, `gpt-4.1`)
|
|
168
168
|
3. **Timeout**: Increase timeout if analysis has many checkpoints
|
|
169
169
|
|
|
170
170
|
```typescript
|
package/data/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crownpeak/dqm-react-component",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A React component for Crownpeak Digital Quality Management (DQM) integration",
|
|
6
6
|
"type": "module",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"test:e2e:debug": "playwright test --debug",
|
|
85
85
|
"wiki:build": "./scripts/wiki-build.sh",
|
|
86
86
|
"wiki:deploy": "./scripts/wiki-deploy.sh",
|
|
87
|
-
"setVersion": "npm
|
|
87
|
+
"setVersion": "node ./scripts/npm-set-version.mjs",
|
|
88
88
|
"licenses:generate": "generate-license-file --config .glfrc.json",
|
|
89
89
|
"licenses:check": "license-checker --onlyAllow 'MIT;ISC;Apache-2.0;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0;CC-BY-3.0;CC-BY-4.0;Python-2.0;BlueOak-1.0.0;Zlib;WTFPL' --production",
|
|
90
90
|
"licenses:check:all": "npm run licenses:check && npm run licenses:check --prefix mcp-server",
|
|
@@ -92,7 +92,8 @@
|
|
|
92
92
|
"prepare": "husky"
|
|
93
93
|
},
|
|
94
94
|
"workspaces": [
|
|
95
|
-
"mcp-server"
|
|
95
|
+
"mcp-server",
|
|
96
|
+
"website"
|
|
96
97
|
],
|
|
97
98
|
"peerDependencies": {
|
|
98
99
|
"@mui/icons-material": ">=5.0.0",
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
import { dirname, join } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
|
|
7
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const rootDir = join(__dirname, '..');
|
|
9
|
+
|
|
10
|
+
// Get version from command line argument
|
|
11
|
+
const newVersion = process.argv[2];
|
|
12
|
+
|
|
13
|
+
if (!newVersion) {
|
|
14
|
+
console.error('Usage: npm run setVersion <version>');
|
|
15
|
+
console.error('Example: npm run setVersion 1.2.3');
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Validate version format
|
|
20
|
+
const versionRegex = /^\d+\.\d+\.\d+(-[\w.]+)?$/;
|
|
21
|
+
if (!versionRegex.test(newVersion)) {
|
|
22
|
+
console.error(`Invalid version format: ${newVersion}`);
|
|
23
|
+
console.error('Expected format: x.y.z or x.y.z-prerelease');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Main execution
|
|
28
|
+
console.log(`Setting version to ${newVersion} in all packages...\n`);
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
// Update root package.json
|
|
32
|
+
execSync(`npm version ${newVersion} --no-git-tag-version`, { cwd: rootDir, stdio: 'inherit' });
|
|
33
|
+
|
|
34
|
+
// Update all workspace packages
|
|
35
|
+
execSync(`npm version ${newVersion} --workspaces --no-git-tag-version`, { cwd: rootDir, stdio: 'inherit' });
|
|
36
|
+
|
|
37
|
+
console.log('\nVersion update complete!');
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.error(`Failed to update version: ${error.message}`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Crownpeak Technology GmbH
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Crownpeak DQM React Component - Demo Website
|
|
2
|
+
|
|
3
|
+
Eine interaktive Demo-Website für das [@crownpeak/dqm-react-component](https://www.npmjs.com/package/@crownpeak/dqm-react-component) Paket.
|
|
4
|
+
|
|
5
|
+
## 🚀 Features
|
|
6
|
+
|
|
7
|
+
- **Interaktive Demo** - Erleben Sie das DQM React Component mit Mock-Daten
|
|
8
|
+
- **Mehrsprachig** - Verfügbar in Deutsch, Englisch und Spanisch
|
|
9
|
+
- **Statischer Export** - Läuft ohne Server, nur HTML/CSS/JS
|
|
10
|
+
- **GitHub Pages Ready** - Automatisches Deployment via GitHub Actions
|
|
11
|
+
|
|
12
|
+
## 🛠️ Entwicklung
|
|
13
|
+
|
|
14
|
+
### Voraussetzungen
|
|
15
|
+
|
|
16
|
+
- Node.js 20+
|
|
17
|
+
- Yarn 1.22+
|
|
18
|
+
|
|
19
|
+
### Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
yarn install
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Entwicklungsserver starten
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
yarn dev
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Die Website ist dann unter [http://localhost:3000](http://localhost:3000) erreichbar.
|
|
32
|
+
|
|
33
|
+
### Produktions-Build
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
yarn build
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Der statische Export wird im `out/`-Ordner erstellt.
|
|
40
|
+
|
|
41
|
+
## 📦 Deployment
|
|
42
|
+
|
|
43
|
+
### GitHub Pages (automatisch)
|
|
44
|
+
|
|
45
|
+
1. Repository auf GitHub erstellen
|
|
46
|
+
2. Code pushen
|
|
47
|
+
3. In den Repository-Einstellungen:
|
|
48
|
+
- **Settings** → **Pages** → **Source**: "GitHub Actions"
|
|
49
|
+
|
|
50
|
+
Der Workflow in `.github/workflows/deploy.yml` übernimmt den Rest.
|
|
51
|
+
|
|
52
|
+
### Manuelles Deployment
|
|
53
|
+
|
|
54
|
+
Der `out/`-Ordner kann auf jedem statischen Hosting-Service deployed werden:
|
|
55
|
+
|
|
56
|
+
- Netlify
|
|
57
|
+
- Vercel
|
|
58
|
+
- AWS S3
|
|
59
|
+
- Cloudflare Pages
|
|
60
|
+
- etc.
|
|
61
|
+
|
|
62
|
+
## 🔧 Konfiguration
|
|
63
|
+
|
|
64
|
+
### Base Path (für Subdirectory-Deployment)
|
|
65
|
+
|
|
66
|
+
Falls die Website nicht im Root einer Domain gehostet wird, setze die Umgebungsvariable:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
NEXT_PUBLIC_BASE_PATH=/mein-pfad yarn build
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 📁 Projektstruktur
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
├── src/
|
|
76
|
+
│ ├── app/ # Next.js App Router
|
|
77
|
+
│ ├── components/ # React Komponenten
|
|
78
|
+
│ ├── i18n/ # Internationalisierung
|
|
79
|
+
│ ├── lib/ # Utility-Funktionen
|
|
80
|
+
│ ├── locales/ # Übersetzungen (de, en, es)
|
|
81
|
+
│ ├── mocks/ # MSW Mock-Handler
|
|
82
|
+
│ └── store/ # Redux Store
|
|
83
|
+
├── public/ # Statische Assets
|
|
84
|
+
└── out/ # Build-Output (nach `yarn build`)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 📄 Lizenz
|
|
88
|
+
|
|
89
|
+
© 2024 Crownpeak Technology GmbH. Alle Rechte vorbehalten.
|
|
90
|
+
|
|
91
|
+
## 🔗 Links
|
|
92
|
+
|
|
93
|
+
- [DQM React Component auf npm](https://www.npmjs.com/package/@crownpeak/dqm-react-component)
|
|
94
|
+
- [GitHub Repository](https://github.com/Crownpeak/dqm-react-component)
|
|
95
|
+
- [Crownpeak Website](https://www.crownpeak.com)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Crownpeak DQM Website - Release Notes
|
|
2
|
+
|
|
3
|
+
## v1.2.4 - 2026-01-08
|
|
4
|
+
|
|
5
|
+
### 🚀 Initial Release
|
|
6
|
+
|
|
7
|
+
The Crownpeak DQM React Component now has an official marketing and documentation website, hosted on GitHub Pages.
|
|
8
|
+
|
|
9
|
+
#### ✨ Features
|
|
10
|
+
|
|
11
|
+
- **Hero Section**: Animated landing page with feature highlights and call-to-action
|
|
12
|
+
- **Features Section**: Grid layout showcasing component capabilities
|
|
13
|
+
- **Demo Section**: Interactive sidebar demonstration with live preview
|
|
14
|
+
- **Integration Section**: Code examples with syntax highlighting and one-click copy
|
|
15
|
+
- **Footer**: Links to documentation, GitHub repository, and NPM package
|
|
16
|
+
|
|
17
|
+
#### 🌍 Internationalization
|
|
18
|
+
|
|
19
|
+
- Multi-language support: English (default), German, Spanish
|
|
20
|
+
- Language switcher in navigation
|
|
21
|
+
- Browser language auto-detection
|
|
22
|
+
- URL parameter override (`?lang=de`)
|
|
23
|
+
|
|
24
|
+
#### ♿ Accessibility (WCAG AA)
|
|
25
|
+
|
|
26
|
+
- Proper `aria-label` attributes on all icon-only interactive elements
|
|
27
|
+
- Color contrast ratio of 6.5:1+ on dark backgrounds
|
|
28
|
+
- Semantic HTML structure
|
|
29
|
+
- Keyboard navigation support
|
|
30
|
+
|
|
31
|
+
#### 🛠 Tech Stack
|
|
32
|
+
|
|
33
|
+
- **Framework**: Next.js 14 with App Router
|
|
34
|
+
- **Styling**: Tailwind CSS
|
|
35
|
+
- **Components**: shadcn/ui
|
|
36
|
+
- **Animations**: Framer Motion
|
|
37
|
+
- **i18n**: react-i18next
|
|
38
|
+
- **Deployment**: Static export to GitHub Pages
|
|
39
|
+
|
|
40
|
+
#### 📦 Deployment
|
|
41
|
+
|
|
42
|
+
Automatic deployment via GitHub Actions on push to `main` branch. Manual trigger also available via workflow dispatch.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"style": "default",
|
|
4
|
+
"rsc": true,
|
|
5
|
+
"tsx": true,
|
|
6
|
+
"tailwind": {
|
|
7
|
+
"config": "",
|
|
8
|
+
"css": "src/app/globals.css",
|
|
9
|
+
"baseColor": "slate",
|
|
10
|
+
"cssVariables": true,
|
|
11
|
+
"prefix": ""
|
|
12
|
+
},
|
|
13
|
+
"aliases": {
|
|
14
|
+
"components": "@/components",
|
|
15
|
+
"utils": "@/lib/utils",
|
|
16
|
+
"ui": "@/components/ui",
|
|
17
|
+
"hooks": "@/hooks",
|
|
18
|
+
"lib": "@/lib"
|
|
19
|
+
},
|
|
20
|
+
"iconLibrary": "lucide",
|
|
21
|
+
"registries": {
|
|
22
|
+
"@aceternity": "https://ui.aceternity.com/registry/{name}.json",
|
|
23
|
+
"@shadcnblocks": {
|
|
24
|
+
"url": "https://www.shadcnblocks.com/r/{name}",
|
|
25
|
+
"headers": {
|
|
26
|
+
"Authorization": "Bearer YOUR_API_KEY_HERE"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineConfig, globalIgnores } from "eslint/config";
|
|
2
|
+
import nextVitals from "eslint-config-next/core-web-vitals";
|
|
3
|
+
import nextTs from "eslint-config-next/typescript";
|
|
4
|
+
|
|
5
|
+
const eslintConfig = defineConfig([
|
|
6
|
+
...nextVitals,
|
|
7
|
+
...nextTs,
|
|
8
|
+
globalIgnores([
|
|
9
|
+
".next/**",
|
|
10
|
+
"out/**",
|
|
11
|
+
"build/**",
|
|
12
|
+
"next-env.d.ts",
|
|
13
|
+
]),
|
|
14
|
+
]);
|
|
15
|
+
|
|
16
|
+
export default eslintConfig;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { NextConfig } from "next";
|
|
2
|
+
|
|
3
|
+
const isProd = process.env.NODE_ENV === 'production';
|
|
4
|
+
|
|
5
|
+
const nextConfig: NextConfig = {
|
|
6
|
+
// Static export for GitHub Pages
|
|
7
|
+
output: 'export',
|
|
8
|
+
|
|
9
|
+
// Base path for GitHub Pages (repository name)
|
|
10
|
+
// Wird automatisch von GitHub Actions gesetzt, oder manuell konfiguriert
|
|
11
|
+
basePath: isProd ? process.env.NEXT_PUBLIC_BASE_PATH || '' : '',
|
|
12
|
+
|
|
13
|
+
// Asset prefix for proper asset loading on GitHub Pages
|
|
14
|
+
assetPrefix: isProd ? process.env.NEXT_PUBLIC_BASE_PATH || '' : '',
|
|
15
|
+
|
|
16
|
+
// Disable image optimization for static export
|
|
17
|
+
images: {
|
|
18
|
+
unoptimized: true,
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
// Trailing slash for better compatibility with static hosting
|
|
22
|
+
trailingSlash: true,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export default nextConfig;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@crownpeak/dqm-react-component-website",
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "next dev",
|
|
7
|
+
"build": "next build",
|
|
8
|
+
"start": "next start",
|
|
9
|
+
"lint": "eslint"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@crownpeak/dqm-react-component": "^1.2.2",
|
|
13
|
+
"@emotion/react": "^11.14.0",
|
|
14
|
+
"@emotion/styled": "^11.14.1",
|
|
15
|
+
"@mui/icons-material": "^7.3.7",
|
|
16
|
+
"@mui/material": "^7.3.7",
|
|
17
|
+
"@radix-ui/react-accordion": "^1.2.12",
|
|
18
|
+
"@radix-ui/react-avatar": "^1.1.11",
|
|
19
|
+
"@radix-ui/react-progress": "^1.1.8",
|
|
20
|
+
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
21
|
+
"@radix-ui/react-separator": "^1.1.8",
|
|
22
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
23
|
+
"@radix-ui/react-tabs": "^1.1.13",
|
|
24
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
25
|
+
"@reduxjs/toolkit": "^2.11.2",
|
|
26
|
+
"class-variance-authority": "^0.7.1",
|
|
27
|
+
"clsx": "^2.1.1",
|
|
28
|
+
"framer-motion": "^12.24.10",
|
|
29
|
+
"i18next": "^25.7.4",
|
|
30
|
+
"i18next-browser-languagedetector": "^8.2.0",
|
|
31
|
+
"lucide-react": "^0.562.0",
|
|
32
|
+
"next": "16.1.1",
|
|
33
|
+
"react": "19.2.3",
|
|
34
|
+
"react-dom": "19.2.3",
|
|
35
|
+
"react-i18next": "^16.5.1",
|
|
36
|
+
"react-redux": "^9.2.0",
|
|
37
|
+
"tailwind-merge": "^3.4.0",
|
|
38
|
+
"vanilla-cookieconsent": "^3.1.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@tailwindcss/postcss": "^4",
|
|
42
|
+
"@types/node": "^20",
|
|
43
|
+
"@types/react": "^19",
|
|
44
|
+
"@types/react-dom": "^19",
|
|
45
|
+
"eslint": "^9",
|
|
46
|
+
"eslint-config-next": "16.1.1",
|
|
47
|
+
"husky": "^9.1.7",
|
|
48
|
+
"msw": "^2.12.7",
|
|
49
|
+
"tailwindcss": "^4",
|
|
50
|
+
"typescript": "^5"
|
|
51
|
+
},
|
|
52
|
+
"packageManager": "yarn@1.22.22",
|
|
53
|
+
"msw": {
|
|
54
|
+
"workerDirectory": [
|
|
55
|
+
"public"
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
File without changes
|