ma-agents 3.18.0-beta.2 → 3.18.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/README.md +2 -2
- package/bin/cli.js +29 -32
- package/docs/architecture.md +2 -2
- package/lib/bmad-cache/cache-manifest.json +0 -12
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad.js +33 -34
- package/package.json +1 -1
- package/scripts/build-bmad-cache.js +18 -9
- package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +0 -56
- package/lib/bmad-cache/gds/.markdownlint-cli2.yaml +0 -35
- package/lib/bmad-cache/gds/.nvmrc +0 -1
- package/lib/bmad-cache/gds/.prettierignore +0 -9
- package/lib/bmad-cache/gds/CNAME +0 -1
- package/lib/bmad-cache/gds/LICENSE +0 -26
- package/lib/bmad-cache/gds/README.md +0 -134
- package/lib/bmad-cache/gds/_git_preserved/HEAD +0 -1
- package/lib/bmad-cache/gds/_git_preserved/config +0 -13
- package/lib/bmad-cache/gds/_git_preserved/description +0 -1
- package/lib/bmad-cache/gds/_git_preserved/hooks/applypatch-msg.sample +0 -15
- package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +0 -74
- package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +0 -168
- package/lib/bmad-cache/gds/_git_preserved/hooks/post-update.sample +0 -8
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-applypatch.sample +0 -14
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-commit.sample +0 -49
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-merge-commit.sample +0 -13
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-push.sample +0 -53
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-rebase.sample +0 -169
- package/lib/bmad-cache/gds/_git_preserved/hooks/pre-receive.sample +0 -24
- package/lib/bmad-cache/gds/_git_preserved/hooks/prepare-commit-msg.sample +0 -42
- package/lib/bmad-cache/gds/_git_preserved/hooks/push-to-checkout.sample +0 -78
- package/lib/bmad-cache/gds/_git_preserved/hooks/sendemail-validate.sample +0 -77
- package/lib/bmad-cache/gds/_git_preserved/hooks/update.sample +0 -128
- package/lib/bmad-cache/gds/_git_preserved/index +0 -0
- package/lib/bmad-cache/gds/_git_preserved/info/exclude +0 -6
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.pack +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/packed-refs +0 -2
- package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +0 -1
- package/lib/bmad-cache/gds/_git_preserved/shallow +0 -1
- package/lib/bmad-cache/gds/eslint.config.mjs +0 -141
- package/lib/bmad-cache/gds/package.json +0 -91
- package/lib/bmad-cache/gds/prettier.config.mjs +0 -32
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-architect/customize.toml +0 -57
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +0 -59
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +0 -129
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/gametest/qa-index.csv +0 -18
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +0 -55
- package/lib/bmad-cache/gds/src/agents/gds-agent-tech-writer/customize.toml +0 -65
- package/lib/bmad-cache/gds/src/module-help.csv +0 -30
- package/lib/bmad-cache/gds/src/module.yaml +0 -113
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/game-brain-methods.csv +0 -26
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +0 -116
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/research/gds-domain-research/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-narrative/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/game-types.csv +0 -25
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/genre-complexity.csv +0 -26
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/validation-report-template.html +0 -190
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/customize.toml +0 -99
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/scripts/render-validation-html.py +0 -290
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/assets/validation-report-template.html +0 -190
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/customize.toml +0 -84
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/assets/validation-report-template.html +0 -319
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/customize.toml +0 -101
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-check-implementation-readiness/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-create-epics-and-stories/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/architecture-patterns.yaml +0 -508
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/decision-catalog.yaml +0 -428
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/engine-mcps.yaml +0 -392
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/pattern-categories.csv +0 -13
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-generate-project-context/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-code-review/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-correct-course/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-create-story/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-dev-story/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-investigate/customize.toml +0 -62
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-retrospective/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/sprint-status-template.yaml +0 -55
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-status/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-e2e-scaffold/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-performance-test/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-playtest-plan/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-automate/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-design/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-framework/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-review/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/documentation-requirements.csv +0 -12
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/templates/project-scan-report-schema.json +0 -160
- package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev/customize.toml +0 -41
- package/lib/bmad-cache/gds/tools/build-docs.mjs +0 -450
- package/lib/bmad-cache/gds/website/astro.config.mjs +0 -142
- package/lib/bmad-cache/gds/website/public/favicon.ico +0 -0
- package/lib/bmad-cache/gds/website/public/img/bmad-dark.png +0 -0
- package/lib/bmad-cache/gds/website/public/img/bmad-light.png +0 -0
- package/lib/bmad-cache/gds/website/src/components/Banner.astro +0 -71
- package/lib/bmad-cache/gds/website/src/components/Header.astro +0 -94
- package/lib/bmad-cache/gds/website/src/components/MobileMenuFooter.astro +0 -33
- package/lib/bmad-cache/gds/website/src/content/config.ts +0 -6
- package/lib/bmad-cache/gds/website/src/content/docs +0 -1
- package/lib/bmad-cache/gds/website/src/lib/site-url.mjs +0 -25
- package/lib/bmad-cache/gds/website/src/rehype-base-paths.js +0 -88
- package/lib/bmad-cache/gds/website/src/rehype-markdown-links.js +0 -117
- package/lib/bmad-cache/gds/website/src/styles/custom.css +0 -503
- package/lib/bmad-cache/wds/.claude-plugin/marketplace.json +0 -35
- package/lib/bmad-cache/wds/.markdownlint-cli2.yaml +0 -38
- package/lib/bmad-cache/wds/.nvmrc +0 -1
- package/lib/bmad-cache/wds/.prettierignore +0 -9
- package/lib/bmad-cache/wds/LICENSE +0 -27
- package/lib/bmad-cache/wds/README.md +0 -139
- package/lib/bmad-cache/wds/_git_preserved/HEAD +0 -1
- package/lib/bmad-cache/wds/_git_preserved/config +0 -13
- package/lib/bmad-cache/wds/_git_preserved/description +0 -1
- package/lib/bmad-cache/wds/_git_preserved/hooks/applypatch-msg.sample +0 -15
- package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +0 -74
- package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +0 -168
- package/lib/bmad-cache/wds/_git_preserved/hooks/post-update.sample +0 -8
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-applypatch.sample +0 -14
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-commit.sample +0 -49
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-merge-commit.sample +0 -13
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-push.sample +0 -53
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-rebase.sample +0 -169
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-receive.sample +0 -24
- package/lib/bmad-cache/wds/_git_preserved/hooks/prepare-commit-msg.sample +0 -42
- package/lib/bmad-cache/wds/_git_preserved/hooks/push-to-checkout.sample +0 -78
- package/lib/bmad-cache/wds/_git_preserved/hooks/sendemail-validate.sample +0 -77
- package/lib/bmad-cache/wds/_git_preserved/hooks/update.sample +0 -128
- package/lib/bmad-cache/wds/_git_preserved/index +0 -0
- package/lib/bmad-cache/wds/_git_preserved/info/exclude +0 -6
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.idx +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.pack +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.rev +0 -0
- package/lib/bmad-cache/wds/_git_preserved/packed-refs +0 -2
- package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +0 -1
- package/lib/bmad-cache/wds/_git_preserved/refs/tags/v0.4.3 +0 -1
- package/lib/bmad-cache/wds/_git_preserved/shallow +0 -1
- package/lib/bmad-cache/wds/eslint.config.mjs +0 -152
- package/lib/bmad-cache/wds/package.json +0 -82
- package/lib/bmad-cache/wds/prettier.config.mjs +0 -32
- package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/customize.toml +0 -80
- package/lib/bmad-cache/wds/src/agents/wds-agent-mimir-builder/customize.toml +0 -52
- package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/customize.toml +0 -70
- package/lib/bmad-cache/wds/src/module-help.csv +0 -19
- package/lib/bmad-cache/wds/src/module.yaml +0 -173
- package/lib/bmad-cache/wds/src/scripts/README.md +0 -155
- package/lib/bmad-cache/wds/src/scripts/wds-add-object.js +0 -202
- package/lib/bmad-cache/wds/src/scripts/wds-add-spacing.js +0 -158
- package/lib/bmad-cache/wds/src/scripts/wds-init-page.js +0 -229
- package/lib/bmad-cache/wds/src/scripts/wds-init-scenario.js +0 -120
- package/lib/bmad-cache/wds/src/scripts/wds-nav.js +0 -201
- package/lib/bmad-cache/wds/src/scripts/wds-validate.js +0 -301
- package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-1-project-brief/templates/platform-requirements.template.yaml +0 -69
- package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-7-design-system/templates/catalog.template.html +0 -363
- package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/templates/platform-requirements.template.yaml +0 -69
- package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/workflow.xml +0 -450
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/design-delivery.template.yaml +0 -104
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/test-scenario.template.yaml +0 -192
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/workflow-specify.xml +0 -387
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.css +0 -164
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.html +0 -18
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.js +0 -430
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/demo-data-template.json +0 -63
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/page-template.html +0 -465
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/work-file-template.yaml +0 -264
- package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/templates/catalog.template.html +0 -363
package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/page-template.html
DELETED
|
@@ -1,465 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="se">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>[Page-Number] [Page Name] - [Project Name]</title>
|
|
7
|
-
|
|
8
|
-
<!-- Tailwind CSS via CDN -->
|
|
9
|
-
<script src="https://cdn.tailwindcss.com"></script>
|
|
10
|
-
|
|
11
|
-
<!-- Tailwind Config (Design Tokens) -->
|
|
12
|
-
<script>
|
|
13
|
-
tailwind.config = {
|
|
14
|
-
theme: {
|
|
15
|
-
extend: {
|
|
16
|
-
colors: {
|
|
17
|
-
'[project-name]': {
|
|
18
|
-
50: '#eff6ff',
|
|
19
|
-
100: '#dbeafe',
|
|
20
|
-
500: '#2563eb',
|
|
21
|
-
600: '#1d4ed8',
|
|
22
|
-
700: '#1e40af',
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
fontFamily: {
|
|
26
|
-
sans: ['Inter', 'system-ui', 'sans-serif'],
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
</script>
|
|
32
|
-
|
|
33
|
-
<!-- Google Fonts -->
|
|
34
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
35
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
36
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
37
|
-
|
|
38
|
-
<!-- Dev Mode Styles (feedback/testing tool) -->
|
|
39
|
-
<link rel="stylesheet" href="components/dev-mode.css">
|
|
40
|
-
|
|
41
|
-
<!-- Custom Styles (minimal - only what Tailwind can't do) -->
|
|
42
|
-
<style>
|
|
43
|
-
/* Custom styles that can't be done with Tailwind */
|
|
44
|
-
/* Example: Complex animations, special overlays, etc. */
|
|
45
|
-
</style>
|
|
46
|
-
</head>
|
|
47
|
-
<body class="min-h-screen bg-gray-50 font-sans">
|
|
48
|
-
<!-- ========================================================================
|
|
49
|
-
DEV MODE TOGGLE (for easy feedback - copy Object IDs)
|
|
50
|
-
======================================================================== -->
|
|
51
|
-
<button id="dev-mode-toggle" class="dev-mode-toggle" title="Toggle Dev Mode (Ctrl+E)">
|
|
52
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
53
|
-
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path>
|
|
54
|
-
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path>
|
|
55
|
-
</svg>
|
|
56
|
-
<span>Dev Mode: OFF</span>
|
|
57
|
-
</button>
|
|
58
|
-
<div id="dev-mode-tooltip" class="dev-mode-tooltip" style="display: none;"></div>
|
|
59
|
-
<!-- ========================================================================
|
|
60
|
-
HEADER
|
|
61
|
-
======================================================================== -->
|
|
62
|
-
<header class="bg-white border-b border-gray-200 px-4 py-3 flex items-center justify-between">
|
|
63
|
-
<!-- Back Button -->
|
|
64
|
-
<button
|
|
65
|
-
id="[page]-header-back"
|
|
66
|
-
data-object-id="[page]-header-back"
|
|
67
|
-
onclick="history.back()"
|
|
68
|
-
class="text-gray-600 hover:text-gray-900 font-medium text-sm transition-colors"
|
|
69
|
-
>
|
|
70
|
-
← [Back Text]
|
|
71
|
-
</button>
|
|
72
|
-
|
|
73
|
-
<!-- Page Title -->
|
|
74
|
-
<h1
|
|
75
|
-
id="[page]-header-title"
|
|
76
|
-
data-object-id="[page]-header-title"
|
|
77
|
-
class="text-lg font-semibold text-gray-900"
|
|
78
|
-
>
|
|
79
|
-
[Page Title]
|
|
80
|
-
</h1>
|
|
81
|
-
|
|
82
|
-
<!-- Spacer (for alignment) -->
|
|
83
|
-
<div class="w-20"></div>
|
|
84
|
-
|
|
85
|
-
<!-- Optional: Language Selector or Action Button -->
|
|
86
|
-
<!-- <button class="text-[project-name]-600">Action</button> -->
|
|
87
|
-
</header>
|
|
88
|
-
|
|
89
|
-
<!-- ========================================================================
|
|
90
|
-
MAIN CONTENT
|
|
91
|
-
======================================================================== -->
|
|
92
|
-
<main class="max-w-md mx-auto p-4">
|
|
93
|
-
<form id="[page]Form" class="space-y-4" onsubmit="handleSubmit(event)">
|
|
94
|
-
|
|
95
|
-
<!-- ============================================================
|
|
96
|
-
SECTION 1: Example - Picture Upload
|
|
97
|
-
============================================================ -->
|
|
98
|
-
<div class="flex items-center gap-4 mb-6">
|
|
99
|
-
<button
|
|
100
|
-
type="button"
|
|
101
|
-
id="[page]-picture-upload"
|
|
102
|
-
data-object-id="[page]-picture-upload"
|
|
103
|
-
onclick="handlePictureUpload()"
|
|
104
|
-
class="w-24 h-24 rounded-full bg-gray-100 border-2 border-dashed border-gray-300 flex items-center justify-center hover:border-[project-name]-500 hover:bg-gray-50 transition-all cursor-pointer"
|
|
105
|
-
>
|
|
106
|
-
<img id="picturePreview" class="hidden w-full h-full rounded-full object-cover" alt="Preview" />
|
|
107
|
-
<svg class="w-10 h-10 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
108
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6"></path>
|
|
109
|
-
</svg>
|
|
110
|
-
</button>
|
|
111
|
-
<input type="file" id="pictureInput" accept="image/*" class="hidden">
|
|
112
|
-
|
|
113
|
-
<div class="flex-1">
|
|
114
|
-
<label class="text-sm text-gray-700 font-medium">
|
|
115
|
-
[Upload Label]
|
|
116
|
-
</label>
|
|
117
|
-
<p class="text-xs text-red-600 hidden" id="pictureError"></p>
|
|
118
|
-
</div>
|
|
119
|
-
</div>
|
|
120
|
-
|
|
121
|
-
<!-- ============================================================
|
|
122
|
-
SECTION 2: Example - Text Input
|
|
123
|
-
============================================================ -->
|
|
124
|
-
<div>
|
|
125
|
-
<input
|
|
126
|
-
type="text"
|
|
127
|
-
id="[page]-input-[field]"
|
|
128
|
-
data-object-id="[page]-input-[field]"
|
|
129
|
-
name="[fieldName]"
|
|
130
|
-
placeholder="[Placeholder] *"
|
|
131
|
-
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-[project-name]-500 focus:border-transparent transition-all"
|
|
132
|
-
required
|
|
133
|
-
/>
|
|
134
|
-
<p class="text-sm text-red-600 hidden mt-1" id="[field]Error"></p>
|
|
135
|
-
</div>
|
|
136
|
-
|
|
137
|
-
<!-- ============================================================
|
|
138
|
-
SECTION 3: Example - Split Button (Binary Choice)
|
|
139
|
-
============================================================ -->
|
|
140
|
-
<div
|
|
141
|
-
id="[page]-split-[choice]"
|
|
142
|
-
data-object-id="[page]-split-[choice]"
|
|
143
|
-
class="grid grid-cols-2 gap-0 border border-gray-300 rounded-lg overflow-hidden"
|
|
144
|
-
>
|
|
145
|
-
<button
|
|
146
|
-
type="button"
|
|
147
|
-
id="choice1"
|
|
148
|
-
onclick="selectChoice('option1')"
|
|
149
|
-
class="py-2 text-center font-medium text-gray-700 hover:bg-gray-50 transition-colors"
|
|
150
|
-
>
|
|
151
|
-
[Option 1]
|
|
152
|
-
</button>
|
|
153
|
-
<button
|
|
154
|
-
type="button"
|
|
155
|
-
id="choice2"
|
|
156
|
-
onclick="selectChoice('option2')"
|
|
157
|
-
class="py-2 text-center font-medium text-gray-700 hover:bg-gray-50 transition-colors border-l border-gray-300"
|
|
158
|
-
>
|
|
159
|
-
[Option 2]
|
|
160
|
-
</button>
|
|
161
|
-
</div>
|
|
162
|
-
|
|
163
|
-
<!-- ============================================================
|
|
164
|
-
SECTION 4: Example - Textarea
|
|
165
|
-
============================================================ -->
|
|
166
|
-
<div>
|
|
167
|
-
<textarea
|
|
168
|
-
id="[page]-textarea-[field]"
|
|
169
|
-
data-object-id="[page]-textarea-[field]"
|
|
170
|
-
name="[fieldName]"
|
|
171
|
-
placeholder="[Placeholder]"
|
|
172
|
-
maxlength="500"
|
|
173
|
-
rows="3"
|
|
174
|
-
oninput="updateCharCounter()"
|
|
175
|
-
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-[project-name]-500 focus:border-transparent resize-none"
|
|
176
|
-
></textarea>
|
|
177
|
-
<p class="text-xs text-gray-500 text-right hidden" id="charCounter"></p>
|
|
178
|
-
</div>
|
|
179
|
-
|
|
180
|
-
<!-- ============================================================
|
|
181
|
-
SUBMIT BUTTON
|
|
182
|
-
============================================================ -->
|
|
183
|
-
<button
|
|
184
|
-
type="submit"
|
|
185
|
-
id="[page]-button-submit"
|
|
186
|
-
data-object-id="[page]-button-submit"
|
|
187
|
-
class="w-full py-3 bg-[project-name]-600 text-white rounded-lg font-semibold hover:bg-[project-name]-700 focus:outline-none focus:ring-2 focus:ring-[project-name]-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed transition-all flex items-center justify-center gap-2"
|
|
188
|
-
>
|
|
189
|
-
<span id="submitButtonText">[Submit Text]</span>
|
|
190
|
-
<svg id="submitButtonSpinner" class="hidden animate-spin w-5 h-5" fill="none" viewBox="0 0 24 24">
|
|
191
|
-
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
192
|
-
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
|
193
|
-
</svg>
|
|
194
|
-
</button>
|
|
195
|
-
</form>
|
|
196
|
-
</main>
|
|
197
|
-
|
|
198
|
-
<!-- ========================================================================
|
|
199
|
-
SUCCESS TOAST
|
|
200
|
-
======================================================================== -->
|
|
201
|
-
<div id="successToast" class="hidden fixed bottom-6 left-1/2 -translate-x-1/2 bg-gray-900 text-white px-6 py-3 rounded-lg shadow-lg flex items-center gap-2 z-50 animate-slide-up">
|
|
202
|
-
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
203
|
-
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path>
|
|
204
|
-
</svg>
|
|
205
|
-
<span id="toastMessage">[Success Message]</span>
|
|
206
|
-
</div>
|
|
207
|
-
|
|
208
|
-
<!-- ========================================================================
|
|
209
|
-
ERROR BANNER (optional)
|
|
210
|
-
======================================================================== -->
|
|
211
|
-
<div id="errorBanner" class="hidden fixed top-20 left-1/2 -translate-x-1/2 max-w-md w-full mx-4 bg-red-50 border border-red-200 rounded-lg p-4 flex items-start gap-3 z-50">
|
|
212
|
-
<svg class="w-5 h-5 text-red-600 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
|
|
213
|
-
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd"></path>
|
|
214
|
-
</svg>
|
|
215
|
-
<div class="flex-1">
|
|
216
|
-
<p class="font-medium text-red-900">Error</p>
|
|
217
|
-
<p class="text-sm text-red-700" id="errorMessage">[Error message]</p>
|
|
218
|
-
</div>
|
|
219
|
-
<button onclick="hideErrorBanner()" class="text-red-600 hover:text-red-900">
|
|
220
|
-
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
221
|
-
<path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"></path>
|
|
222
|
-
</svg>
|
|
223
|
-
</button>
|
|
224
|
-
</div>
|
|
225
|
-
|
|
226
|
-
<!-- ========================================================================
|
|
227
|
-
MODALS (add as needed - example: image crop modal)
|
|
228
|
-
======================================================================== -->
|
|
229
|
-
<!-- Image Crop Modal Template (uncomment if using image upload) -->
|
|
230
|
-
<!--
|
|
231
|
-
<div id="cropModal" class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4">
|
|
232
|
-
<div class="bg-white rounded-lg max-w-md w-full overflow-hidden">
|
|
233
|
-
<div class="flex items-center justify-between px-4 py-3 border-b border-gray-200">
|
|
234
|
-
<button onclick="cancelCrop()" class="text-[project-name]-600 font-medium">Cancel</button>
|
|
235
|
-
<h2 class="font-semibold text-gray-900">Crop Image</h2>
|
|
236
|
-
<button onclick="replaceImage()" class="text-[project-name]-600 font-medium">Replace</button>
|
|
237
|
-
</div>
|
|
238
|
-
<div class="p-4">
|
|
239
|
-
<div class="relative bg-gray-100 rounded-lg overflow-hidden" style="height: 300px;">
|
|
240
|
-
<img id="cropImage" src="" alt="Crop" class="w-full h-full object-contain">
|
|
241
|
-
</div>
|
|
242
|
-
<input type="range" id="zoomSlider" min="10" max="200" value="100"
|
|
243
|
-
class="w-full mt-4 accent-[project-name]-600">
|
|
244
|
-
</div>
|
|
245
|
-
<div class="p-4">
|
|
246
|
-
<button onclick="confirmCrop()"
|
|
247
|
-
class="w-full py-3 bg-[project-name]-600 text-white rounded-lg font-semibold hover:bg-[project-name]-700">
|
|
248
|
-
Use Image
|
|
249
|
-
</button>
|
|
250
|
-
</div>
|
|
251
|
-
</div>
|
|
252
|
-
</div>
|
|
253
|
-
-->
|
|
254
|
-
|
|
255
|
-
<!-- ========================================================================
|
|
256
|
-
JAVASCRIPT - Shared Scripts
|
|
257
|
-
======================================================================== -->
|
|
258
|
-
<script src="shared/prototype-api.js"></script>
|
|
259
|
-
<script src="shared/init.js"></script>
|
|
260
|
-
<script src="shared/utils.js"></script>
|
|
261
|
-
|
|
262
|
-
<!-- ========================================================================
|
|
263
|
-
JAVASCRIPT - Dev Mode (feedback tool)
|
|
264
|
-
======================================================================== -->
|
|
265
|
-
<script src="components/dev-mode.js"></script>
|
|
266
|
-
|
|
267
|
-
<!-- ========================================================================
|
|
268
|
-
JAVASCRIPT - Component Scripts (load as needed)
|
|
269
|
-
======================================================================== -->
|
|
270
|
-
<!-- <script src="components/image-crop.js"></script> -->
|
|
271
|
-
<!-- <script src="components/toast.js"></script> -->
|
|
272
|
-
<!-- <script src="components/modal.js"></script> -->
|
|
273
|
-
<!-- <script src="components/form-validation.js"></script> -->
|
|
274
|
-
|
|
275
|
-
<!-- ========================================================================
|
|
276
|
-
JAVASCRIPT - Page-Specific Script (if complex logic)
|
|
277
|
-
======================================================================== -->
|
|
278
|
-
<!-- Option 1: External file (if >150 lines) -->
|
|
279
|
-
<!-- <script src="pages/[page-number]-[page-name].js"></script> -->
|
|
280
|
-
|
|
281
|
-
<!-- Option 2: Inline script (preferred for <150 lines) -->
|
|
282
|
-
<script>
|
|
283
|
-
/**
|
|
284
|
-
* Page: [Page Number] [Page Name]
|
|
285
|
-
* Purpose: [Brief description]
|
|
286
|
-
*/
|
|
287
|
-
|
|
288
|
-
// ================================================================
|
|
289
|
-
// STATE MANAGEMENT
|
|
290
|
-
// ================================================================
|
|
291
|
-
let formData = {
|
|
292
|
-
// Initialize form state
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
// ================================================================
|
|
296
|
-
// INITIALIZATION
|
|
297
|
-
// ================================================================
|
|
298
|
-
window.initPage = function() {
|
|
299
|
-
console.log('📄 [Page Name] loaded');
|
|
300
|
-
|
|
301
|
-
// Page-specific initialization
|
|
302
|
-
loadPageData();
|
|
303
|
-
};
|
|
304
|
-
|
|
305
|
-
async function loadPageData() {
|
|
306
|
-
try {
|
|
307
|
-
// Load any required data
|
|
308
|
-
const user = await window.PrototypeAPI.getUser();
|
|
309
|
-
console.log('👤 Current user:', user);
|
|
310
|
-
|
|
311
|
-
// Pre-fill form if needed
|
|
312
|
-
|
|
313
|
-
} catch (error) {
|
|
314
|
-
console.error('❌ Error loading data:', error);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
// ================================================================
|
|
319
|
-
// FORM HANDLING
|
|
320
|
-
// ================================================================
|
|
321
|
-
async function handleSubmit(event) {
|
|
322
|
-
event.preventDefault();
|
|
323
|
-
|
|
324
|
-
// Validate
|
|
325
|
-
if (!validateForm()) {
|
|
326
|
-
return;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
// Show loading
|
|
330
|
-
setLoadingState(true);
|
|
331
|
-
|
|
332
|
-
try {
|
|
333
|
-
// Collect form data
|
|
334
|
-
const data = {
|
|
335
|
-
// Extract form values
|
|
336
|
-
};
|
|
337
|
-
|
|
338
|
-
// API call
|
|
339
|
-
console.log('📤 Submitting:', data);
|
|
340
|
-
const result = await window.PrototypeAPI.[method](data);
|
|
341
|
-
console.log('✅ Success:', result);
|
|
342
|
-
|
|
343
|
-
// Show success
|
|
344
|
-
showToast('[Success message]', 'success');
|
|
345
|
-
|
|
346
|
-
// Navigate (after delay)
|
|
347
|
-
setTimeout(() => {
|
|
348
|
-
window.location.href = '[next-page].html';
|
|
349
|
-
}, 1500);
|
|
350
|
-
|
|
351
|
-
} catch (error) {
|
|
352
|
-
console.error('❌ Error:', error);
|
|
353
|
-
showErrorBanner(error.message);
|
|
354
|
-
} finally {
|
|
355
|
-
setLoadingState(false);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
function validateForm() {
|
|
360
|
-
let isValid = true;
|
|
361
|
-
|
|
362
|
-
// Validate each field
|
|
363
|
-
// Example:
|
|
364
|
-
// const name = document.getElementById('[field]').value;
|
|
365
|
-
// if (!name) {
|
|
366
|
-
// showFieldError('[field]', 'This field is required');
|
|
367
|
-
// isValid = false;
|
|
368
|
-
// }
|
|
369
|
-
|
|
370
|
-
return isValid;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
// ================================================================
|
|
374
|
-
// UI INTERACTIONS
|
|
375
|
-
// ================================================================
|
|
376
|
-
function handlePictureUpload() {
|
|
377
|
-
document.getElementById('pictureInput').click();
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
function selectChoice(choice) {
|
|
381
|
-
// Handle choice selection
|
|
382
|
-
console.log('Choice selected:', choice);
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
function updateCharCounter() {
|
|
386
|
-
const textarea = document.getElementById('[page]-textarea-[field]');
|
|
387
|
-
const counter = document.getElementById('charCounter');
|
|
388
|
-
const current = textarea.value.length;
|
|
389
|
-
const max = textarea.maxLength;
|
|
390
|
-
|
|
391
|
-
counter.textContent = `${current}/${max}`;
|
|
392
|
-
counter.classList.remove('hidden');
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
// ================================================================
|
|
396
|
-
// FEEDBACK
|
|
397
|
-
// ================================================================
|
|
398
|
-
function setLoadingState(isLoading) {
|
|
399
|
-
const btn = document.getElementById('[page]-button-submit');
|
|
400
|
-
const text = document.getElementById('submitButtonText');
|
|
401
|
-
const spinner = document.getElementById('submitButtonSpinner');
|
|
402
|
-
|
|
403
|
-
btn.disabled = isLoading;
|
|
404
|
-
text.classList.toggle('hidden', isLoading);
|
|
405
|
-
spinner.classList.toggle('hidden', !isLoading);
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
function showToast(message, type = 'success') {
|
|
409
|
-
const toast = document.getElementById('successToast');
|
|
410
|
-
const messageEl = document.getElementById('toastMessage');
|
|
411
|
-
|
|
412
|
-
messageEl.textContent = message;
|
|
413
|
-
toast.classList.remove('hidden');
|
|
414
|
-
|
|
415
|
-
setTimeout(() => {
|
|
416
|
-
toast.classList.add('hidden');
|
|
417
|
-
}, 3000);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
function showErrorBanner(message) {
|
|
421
|
-
const banner = document.getElementById('errorBanner');
|
|
422
|
-
const messageEl = document.getElementById('errorMessage');
|
|
423
|
-
|
|
424
|
-
messageEl.textContent = message;
|
|
425
|
-
banner.classList.remove('hidden');
|
|
426
|
-
|
|
427
|
-
setTimeout(() => {
|
|
428
|
-
banner.classList.add('hidden');
|
|
429
|
-
}, 5000);
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
function hideErrorBanner() {
|
|
433
|
-
document.getElementById('errorBanner').classList.add('hidden');
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
function showFieldError(fieldId, message) {
|
|
437
|
-
const errorEl = document.getElementById(`${fieldId}Error`);
|
|
438
|
-
const inputEl = document.getElementById(fieldId);
|
|
439
|
-
|
|
440
|
-
if (errorEl) {
|
|
441
|
-
errorEl.textContent = message;
|
|
442
|
-
errorEl.classList.remove('hidden');
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
if (inputEl) {
|
|
446
|
-
inputEl.classList.add('border-red-500');
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
function clearFieldError(fieldId) {
|
|
451
|
-
const errorEl = document.getElementById(`${fieldId}Error`);
|
|
452
|
-
const inputEl = document.getElementById(fieldId);
|
|
453
|
-
|
|
454
|
-
if (errorEl) {
|
|
455
|
-
errorEl.classList.add('hidden');
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
if (inputEl) {
|
|
459
|
-
inputEl.classList.remove('border-red-500');
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
</script>
|
|
463
|
-
</body>
|
|
464
|
-
</html>
|
|
465
|
-
|