ima-claude 2.9.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.
Files changed (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +463 -0
  3. package/dist/cli.js +1064 -0
  4. package/package.json +49 -0
  5. package/platforms/claude/adapter.ts +115 -0
  6. package/platforms/junie/adapter.ts +254 -0
  7. package/platforms/junie/agents-template.md +113 -0
  8. package/platforms/junie/hook-translations.md +84 -0
  9. package/platforms/shared/detector.ts +27 -0
  10. package/platforms/shared/installer.ts +202 -0
  11. package/platforms/shared/types.ts +78 -0
  12. package/plugins/ima-claude/.claude-plugin/plugin.json +25 -0
  13. package/plugins/ima-claude/agents/explorer.md +30 -0
  14. package/plugins/ima-claude/agents/implementer.md +30 -0
  15. package/plugins/ima-claude/agents/memory.md +42 -0
  16. package/plugins/ima-claude/agents/reviewer.md +53 -0
  17. package/plugins/ima-claude/agents/tester.md +33 -0
  18. package/plugins/ima-claude/agents/wp-developer.md +46 -0
  19. package/plugins/ima-claude/hooks/README.md +145 -0
  20. package/plugins/ima-claude/hooks/atlassian_prereqs.py +112 -0
  21. package/plugins/ima-claude/hooks/block_sed_edits.py +59 -0
  22. package/plugins/ima-claude/hooks/bootstrap.sh +90 -0
  23. package/plugins/ima-claude/hooks/bootstrap_utility_check.py +94 -0
  24. package/plugins/ima-claude/hooks/composer_autoload_check.py +70 -0
  25. package/plugins/ima-claude/hooks/docs_organization.py +104 -0
  26. package/plugins/ima-claude/hooks/enforce_rg_over_grep.py +56 -0
  27. package/plugins/ima-claude/hooks/fp_utility_check.py +90 -0
  28. package/plugins/ima-claude/hooks/hook_logger.py +69 -0
  29. package/plugins/ima-claude/hooks/hooks.json +239 -0
  30. package/plugins/ima-claude/hooks/jira_issue_fetch.py +79 -0
  31. package/plugins/ima-claude/hooks/jquery_in_wordpress.py +92 -0
  32. package/plugins/ima-claude/hooks/memory_bootstrap.py +79 -0
  33. package/plugins/ima-claude/hooks/memory_store_reminder.py +75 -0
  34. package/plugins/ima-claude/hooks/prompt_coach.py +125 -0
  35. package/plugins/ima-claude/hooks/prompt_coach_digest.md +48 -0
  36. package/plugins/ima-claude/hooks/prompt_coach_system.md +30 -0
  37. package/plugins/ima-claude/hooks/sequential_thinking_check.py +81 -0
  38. package/plugins/ima-claude/hooks/serena_over_grep.py +96 -0
  39. package/plugins/ima-claude/hooks/serena_over_read.py +66 -0
  40. package/plugins/ima-claude/hooks/serena_project_check.py +133 -0
  41. package/plugins/ima-claude/hooks/sql_injection_check.py +73 -0
  42. package/plugins/ima-claude/hooks/task_master_after_plan.py +31 -0
  43. package/plugins/ima-claude/hooks/task_master_before_impl.py +93 -0
  44. package/plugins/ima-claude/hooks/tavily_extract_advanced.py +48 -0
  45. package/plugins/ima-claude/hooks/vestige_before_external.py +86 -0
  46. package/plugins/ima-claude/hooks/webfetch_to_tavily.py +42 -0
  47. package/plugins/ima-claude/hooks/websearch_to_tavily.py +41 -0
  48. package/plugins/ima-claude/hooks/wp_security_check.py +150 -0
  49. package/plugins/ima-claude/personalities/README.md +45 -0
  50. package/plugins/ima-claude/personalities/enable-40k.md +69 -0
  51. package/plugins/ima-claude/personalities/enable-templars.md +69 -0
  52. package/plugins/ima-claude/skills/.research-summary.md +340 -0
  53. package/plugins/ima-claude/skills/architect/SKILL.md +304 -0
  54. package/plugins/ima-claude/skills/compound-bridge/SKILL.md +200 -0
  55. package/plugins/ima-claude/skills/discourse/SKILL.md +440 -0
  56. package/plugins/ima-claude/skills/discourse-admin/SKILL.md +192 -0
  57. package/plugins/ima-claude/skills/discourse-admin/references/api-endpoints.md +441 -0
  58. package/plugins/ima-claude/skills/discourse-admin/references/gotchas.md +107 -0
  59. package/plugins/ima-claude/skills/discourse-admin/references/staging-defaults.md +98 -0
  60. package/plugins/ima-claude/skills/discourse-admin/scripts/discourse-admin.py +319 -0
  61. package/plugins/ima-claude/skills/docs-organize/SKILL.md +254 -0
  62. package/plugins/ima-claude/skills/docs-organize/templates/active-README.md +50 -0
  63. package/plugins/ima-claude/skills/docs-organize/templates/archive-README.md +57 -0
  64. package/plugins/ima-claude/skills/docs-organize/templates/docs-README.md +43 -0
  65. package/plugins/ima-claude/skills/docs-organize/templates/phase-archive-README.md +83 -0
  66. package/plugins/ima-claude/skills/docs-organize/templates/section-README.md +48 -0
  67. package/plugins/ima-claude/skills/docs-organize/templates/transient-README.md +79 -0
  68. package/plugins/ima-claude/skills/docs-organize/templates/transient-gitignore +9 -0
  69. package/plugins/ima-claude/skills/ember-discourse/SKILL.md +496 -0
  70. package/plugins/ima-claude/skills/functional-programmer/SKILL.md +258 -0
  71. package/plugins/ima-claude/skills/ima-bootstrap/SKILL.md +278 -0
  72. package/plugins/ima-claude/skills/ima-bootstrap/references/bootstrap-patterns.md +356 -0
  73. package/plugins/ima-claude/skills/ima-bootstrap/references/ima-brand.md +273 -0
  74. package/plugins/ima-claude/skills/ima-bootstrap/references/theme-integration.md +212 -0
  75. package/plugins/ima-claude/skills/ima-brand/SKILL.md +108 -0
  76. package/plugins/ima-claude/skills/ima-brand/references/brand-identity.md +140 -0
  77. package/plugins/ima-claude/skills/ima-brand/references/digital-standards.md +180 -0
  78. package/plugins/ima-claude/skills/ima-brand/references/visual-system.md +173 -0
  79. package/plugins/ima-claude/skills/ima-forms-expert/SKILL.md +175 -0
  80. package/plugins/ima-claude/skills/ima-forms-expert/references/container-components.md +154 -0
  81. package/plugins/ima-claude/skills/ima-forms-expert/references/examples.md +328 -0
  82. package/plugins/ima-claude/skills/ima-forms-expert/references/field-components.md +298 -0
  83. package/plugins/ima-claude/skills/ima-forms-expert/references/form-factory.md +193 -0
  84. package/plugins/ima-claude/skills/ima-forms-expert/references/quick-reference.md +153 -0
  85. package/plugins/ima-claude/skills/ima-forms-expert/references/validation-engine.md +336 -0
  86. package/plugins/ima-claude/skills/jira-checkpoint/SKILL.md +178 -0
  87. package/plugins/ima-claude/skills/jquery/SKILL.md +413 -0
  88. package/plugins/ima-claude/skills/js-fp/SKILL.md +463 -0
  89. package/plugins/ima-claude/skills/js-fp/core-principles.md +487 -0
  90. package/plugins/ima-claude/skills/js-fp/examples/pure-functions.js +260 -0
  91. package/plugins/ima-claude/skills/js-fp/examples/tests/pure-functions.test.js +262 -0
  92. package/plugins/ima-claude/skills/js-fp/references/anti-patterns.md +120 -0
  93. package/plugins/ima-claude/skills/js-fp/references/performance-patterns.md +116 -0
  94. package/plugins/ima-claude/skills/js-fp/references/testing-patterns.md +134 -0
  95. package/plugins/ima-claude/skills/js-fp-api/SKILL.md +280 -0
  96. package/plugins/ima-claude/skills/js-fp-api/examples/crud-endpoint.js +258 -0
  97. package/plugins/ima-claude/skills/js-fp-api/references/middleware-patterns.md +134 -0
  98. package/plugins/ima-claude/skills/js-fp-api/references/security-sql.md +110 -0
  99. package/plugins/ima-claude/skills/js-fp-api/references/validation-patterns.md +165 -0
  100. package/plugins/ima-claude/skills/js-fp-react/SKILL.md +447 -0
  101. package/plugins/ima-claude/skills/js-fp-react/examples/ProductCard.tsx +65 -0
  102. package/plugins/ima-claude/skills/js-fp-react/references/hooks-advanced.md +136 -0
  103. package/plugins/ima-claude/skills/js-fp-react/references/performance-patterns.md +175 -0
  104. package/plugins/ima-claude/skills/js-fp-vue/SKILL.md +322 -0
  105. package/plugins/ima-claude/skills/js-fp-vue/references/complete-examples.md +397 -0
  106. package/plugins/ima-claude/skills/js-fp-vue/references/composables-advanced.md +282 -0
  107. package/plugins/ima-claude/skills/js-fp-vue/references/reactivity-patterns.md +348 -0
  108. package/plugins/ima-claude/skills/js-fp-vue/references/testing.md +314 -0
  109. package/plugins/ima-claude/skills/js-fp-wordpress/SKILL.md +301 -0
  110. package/plugins/ima-claude/skills/js-fp-wordpress/references/ajax-patterns.md +192 -0
  111. package/plugins/ima-claude/skills/js-fp-wordpress/references/event-patterns.md +136 -0
  112. package/plugins/ima-claude/skills/js-fp-wordpress/references/wp-integration.md +248 -0
  113. package/plugins/ima-claude/skills/livecanvas/SKILL.md +209 -0
  114. package/plugins/ima-claude/skills/livecanvas/references/livecanvas-features.md +311 -0
  115. package/plugins/ima-claude/skills/livecanvas/references/loops-and-logic.md +730 -0
  116. package/plugins/ima-claude/skills/livecanvas/references/picostrap.md +227 -0
  117. package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +339 -0
  118. package/plugins/ima-claude/skills/mcp-context7/SKILL.md +109 -0
  119. package/plugins/ima-claude/skills/mcp-memory/SKILL.md +182 -0
  120. package/plugins/ima-claude/skills/mcp-qdrant/SKILL.md +233 -0
  121. package/plugins/ima-claude/skills/mcp-sequential/SKILL.md +149 -0
  122. package/plugins/ima-claude/skills/mcp-serena/SKILL.md +174 -0
  123. package/plugins/ima-claude/skills/mcp-tavily/SKILL.md +118 -0
  124. package/plugins/ima-claude/skills/mcp-vestige/SKILL.md +259 -0
  125. package/plugins/ima-claude/skills/php-authnet/SKILL.md +275 -0
  126. package/plugins/ima-claude/skills/php-authnet/references/api-reference.md +624 -0
  127. package/plugins/ima-claude/skills/php-authnet/references/sandbox-testing.md +424 -0
  128. package/plugins/ima-claude/skills/php-fp/SKILL.md +333 -0
  129. package/plugins/ima-claude/skills/php-fp/examples/pure-functions.php +403 -0
  130. package/plugins/ima-claude/skills/php-fp/examples/tests/PureFunctionsTest.php +515 -0
  131. package/plugins/ima-claude/skills/php-fp/references/core-principles.md +277 -0
  132. package/plugins/ima-claude/skills/php-fp/references/testing-patterns.md +374 -0
  133. package/plugins/ima-claude/skills/php-fp-wordpress/SKILL.md +216 -0
  134. package/plugins/ima-claude/skills/php-fp-wordpress/references/fp-patterns.md +275 -0
  135. package/plugins/ima-claude/skills/php-fp-wordpress/references/plugin-architecture.md +295 -0
  136. package/plugins/ima-claude/skills/php-fp-wordpress/references/security-examples.md +203 -0
  137. package/plugins/ima-claude/skills/php-fp-wordpress/references/testing-strategy.md +259 -0
  138. package/plugins/ima-claude/skills/phpunit-wp/SKILL.md +716 -0
  139. package/plugins/ima-claude/skills/playwright/SKILL.md +434 -0
  140. package/plugins/ima-claude/skills/playwright/references/accessibility-testing.md +153 -0
  141. package/plugins/ima-claude/skills/playwright/references/ci-cd.md +268 -0
  142. package/plugins/ima-claude/skills/playwright/references/network-mocking.md +270 -0
  143. package/plugins/ima-claude/skills/playwright/references/visual-regression.md +215 -0
  144. package/plugins/ima-claude/skills/py-fp/SKILL.md +663 -0
  145. package/plugins/ima-claude/skills/py-fp/examples/pure-functions.py +185 -0
  146. package/plugins/ima-claude/skills/py-fp/examples/tests/test_pure_functions.py +244 -0
  147. package/plugins/ima-claude/skills/py-fp/references/core-principles.md +381 -0
  148. package/plugins/ima-claude/skills/py-fp/references/testing-patterns.md +283 -0
  149. package/plugins/ima-claude/skills/quasar-fp/SKILL.md +327 -0
  150. package/plugins/ima-claude/skills/quasar-fp/metadata.json +85 -0
  151. package/plugins/ima-claude/skills/quasar-fp/references/component-patterns.md +257 -0
  152. package/plugins/ima-claude/skills/quasar-fp/references/theme-integration.md +233 -0
  153. package/plugins/ima-claude/skills/quasar-fp/references/utility-classes.md +237 -0
  154. package/plugins/ima-claude/skills/quickstart/SKILL.md +129 -0
  155. package/plugins/ima-claude/skills/rails/SKILL.md +359 -0
  156. package/plugins/ima-claude/skills/resume-session/SKILL.md +68 -0
  157. package/plugins/ima-claude/skills/rg/SKILL.md +205 -0
  158. package/plugins/ima-claude/skills/ruby-fp/SKILL.md +336 -0
  159. package/plugins/ima-claude/skills/save-session/SKILL.md +81 -0
  160. package/plugins/ima-claude/skills/scorecard/SKILL.md +96 -0
  161. package/plugins/ima-claude/skills/skill-analyzer/SKILL.md +127 -0
  162. package/plugins/ima-claude/skills/skill-analyzer/references/advanced-checklist.md +44 -0
  163. package/plugins/ima-claude/skills/skill-analyzer/references/core-checklist.md +60 -0
  164. package/plugins/ima-claude/skills/skill-analyzer/scripts/analyze_skill.py +418 -0
  165. package/plugins/ima-claude/skills/skill-creator/LICENSE.txt +202 -0
  166. package/plugins/ima-claude/skills/skill-creator/SKILL.md +343 -0
  167. package/plugins/ima-claude/skills/skill-creator/references/output-patterns.md +82 -0
  168. package/plugins/ima-claude/skills/skill-creator/references/workflows.md +28 -0
  169. package/plugins/ima-claude/skills/skill-creator/scripts/init_skill.py +303 -0
  170. package/plugins/ima-claude/skills/skill-creator/scripts/package_skill.py +110 -0
  171. package/plugins/ima-claude/skills/skill-creator/scripts/quick_validate.py +103 -0
  172. package/plugins/ima-claude/skills/task-master/SKILL.md +51 -0
  173. package/plugins/ima-claude/skills/task-planner/SKILL.md +228 -0
  174. package/plugins/ima-claude/skills/task-runner/SKILL.md +192 -0
  175. package/plugins/ima-claude/skills/unit-testing/SKILL.md +198 -0
  176. package/plugins/ima-claude/skills/unit-testing/references/mock-patterns.md +181 -0
  177. package/plugins/ima-claude/skills/unit-testing/references/tdd-workflow.md +177 -0
  178. package/plugins/ima-claude/skills/unit-testing/references/test-strategy.md +126 -0
  179. package/plugins/ima-claude/skills/wp-local/SKILL.md +246 -0
  180. package/plugins/ima-claude/skills/wp-local/references/configuration.md +198 -0
  181. package/plugins/ima-claude/skills/wp-local/references/wp-cli-reference.md +406 -0
  182. package/plugins/ima-claude/skills/wp-local/scripts/wp-local.sh +61 -0
@@ -0,0 +1,327 @@
1
+ ---
2
+ name: "quasar-fp"
3
+ description: "Quasar Framework best practices with utility-first CSS and FP patterns. Use when working with .vue files in Quasar projects, when creating Vue/Quasar components, or when user mentions Quasar, QBtn, QCard, or utility classes like q-pa-md. Enforces utility-first approach to prevent hand-written CSS for standard properties."
4
+ ---
5
+
6
+ # Quasar Framework - Functional Patterns & Utility-First Approach
7
+
8
+ ## Core Principles
9
+
10
+ **Primary Directive**: "Utilities > custom CSS | Components > HTML | Theme system > inline styles"
11
+
12
+ ### Anti-Over-Engineering for Quasar
13
+ - **DO NOT** write custom CSS for spacing, typography, colors, layout (use utilities)
14
+ - **DO NOT** reinvent components that Quasar provides (QBtn, QCard, QDialog, etc.)
15
+ - **DO NOT** bypass theme system with hardcoded colors or magic numbers
16
+ - **DO** use utilities first, custom CSS only for theme-specific brand elements
17
+ - **DO** leverage Quasar components for consistent UX and accessibility
18
+ - **DO** integrate with theme system via CSS custom properties and SCSS variables
19
+
20
+ ---
21
+
22
+ ## Quick Decision Tree
23
+
24
+ ```
25
+ Creating new component?
26
+ |-- Can Quasar utility classes handle spacing/layout/text?
27
+ | |-- YES --> Use utilities (q-pa-*, text-*, row/column)
28
+ | |-- NO --> Is this a standard UI pattern?
29
+ | |-- YES --> Use Quasar component (QBtn, QCard, QDialog)
30
+ | |-- NO --> Custom CSS, but use theme variables
31
+ |
32
+ |-- Final check: Does custom CSS exceed 20% of total styling?
33
+ |-- YES --> Refactor to use more utilities
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Utility-First Pattern
39
+
40
+ ### GOOD: Utility-First Approach
41
+
42
+ ```vue
43
+ <template>
44
+ <div class="q-pa-md q-mb-lg rounded-borders">
45
+ <h2 class="text-h5 text-weight-bold text-primary q-mb-sm q-mt-none">
46
+ Title
47
+ </h2>
48
+ <p class="text-caption text-grey-7 q-mb-none">
49
+ Description text
50
+ </p>
51
+ <q-toggle
52
+ v-model="enabled"
53
+ label="Enable Feature"
54
+ class="text-weight-medium q-mb-sm"
55
+ />
56
+ </div>
57
+ </template>
58
+
59
+ <style scoped lang="scss">
60
+ @import '@/styles/theme.scss';
61
+
62
+ /* ONLY theme-specific custom styling */
63
+ .custom-theme-box {
64
+ background-color: rgba($color-brand-primary, 0.05);
65
+ border-left: $border-width-thick solid $color-brand-accent;
66
+ }
67
+ </style>
68
+ ```
69
+
70
+ ### BAD: Hand-Written CSS for Standard Properties
71
+
72
+ ```vue
73
+ <!-- DO NOT DO THIS - utilities exist for all of these! -->
74
+ <style scoped>
75
+ .my-container {
76
+ padding: 16px; /* Use q-pa-md */
77
+ margin-bottom: 24px; /* Use q-mb-lg */
78
+ }
79
+ .my-title {
80
+ font-size: 1.5rem; /* Use text-h5 */
81
+ font-weight: 700; /* Use text-weight-bold */
82
+ color: #1976D2; /* Use text-primary */
83
+ }
84
+ </style>
85
+ ```
86
+
87
+ ---
88
+
89
+ ## Common Anti-Patterns & Fixes
90
+
91
+ | Anti-Pattern | Fix |
92
+ |--------------|-----|
93
+ | `padding: 16px;` | `class="q-pa-md"` |
94
+ | `margin-bottom: 24px;` | `class="q-mb-lg"` |
95
+ | `font-size: 1.5rem; font-weight: 700;` | `class="text-h5 text-weight-bold"` |
96
+ | `color: #1976D2;` | `class="text-primary"` |
97
+ | `display: flex; align-items: center;` | `class="row items-center"` |
98
+ | `<button>` | `<q-btn>` |
99
+ | `<input>` | `<q-input>` |
100
+ | Custom card div | `<q-card>` |
101
+
102
+ ---
103
+
104
+ ## When to Use Custom CSS
105
+
106
+ Custom CSS is appropriate ONLY for:
107
+
108
+ 1. **Theme-Specific Brand Colors:**
109
+ ```scss
110
+ .prayer-card {
111
+ background-color: rgba($color-brand-primary, 0.05);
112
+ border-left: $border-width-thick solid $color-brand-accent;
113
+ }
114
+ ```
115
+
116
+ 2. **Unique Design Elements:**
117
+ ```scss
118
+ .circular-badge {
119
+ width: 48px;
120
+ height: 48px;
121
+ border-radius: 50%;
122
+ background-color: $color-brand-primary;
123
+ }
124
+ ```
125
+
126
+ 3. **Custom Font Families:**
127
+ ```scss
128
+ .prayer-title {
129
+ font-family: $font-family-prayer;
130
+ }
131
+ ```
132
+
133
+ 4. **Dark Mode Theme Overrides:**
134
+ ```scss
135
+ body.body--dark {
136
+ .prayer-card {
137
+ background-color: rgba($color-brand-primary, 0.15);
138
+ }
139
+ }
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Settings Panel Pattern
145
+
146
+ ```vue
147
+ <script setup>
148
+ import { useUserPreferences } from '@/composables/useUserPreferences.js';
149
+ const userPrefs = useUserPreferences();
150
+ </script>
151
+
152
+ <template>
153
+ <q-expansion-item
154
+ default-opened
155
+ icon="settings"
156
+ label="Settings Section"
157
+ header-class="text-weight-bold"
158
+ >
159
+ <div class="q-pa-md">
160
+ <div class="q-pa-md q-mb-md rounded-borders bg-grey-1">
161
+ <q-toggle
162
+ v-model="userPrefs.someOption"
163
+ label="Enable Feature"
164
+ class="text-weight-medium q-mb-sm"
165
+ />
166
+ <p class="text-caption text-grey-7 q-pl-sm q-mb-none">
167
+ Feature description using Quasar utilities
168
+ </p>
169
+ </div>
170
+ </div>
171
+ </q-expansion-item>
172
+ </template>
173
+
174
+ <style scoped lang="scss">
175
+ @import '@/styles/theme.scss';
176
+
177
+ /* Minimal custom CSS - ONLY for theme brand colors */
178
+ .option-box {
179
+ background-color: rgba($color-brand-secondary, 0.08);
180
+ border-left: $border-width-thick solid $color-brand-primary;
181
+ }
182
+ </style>
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Page Layout Pattern
188
+
189
+ ```vue
190
+ <template>
191
+ <q-page class="q-pa-md">
192
+ <!-- Header with utilities -->
193
+ <div class="text-center q-py-lg q-mb-lg page-header">
194
+ <h1 class="text-h3 text-weight-bold text-primary q-mb-sm q-mt-none">
195
+ Page Title
196
+ </h1>
197
+ <p class="text-h6 text-italic text-accent q-mb-none">
198
+ Subtitle
199
+ </p>
200
+ </div>
201
+
202
+ <!-- Content sections -->
203
+ <div class="q-mb-xl">
204
+ <h2 class="text-h5 text-weight-bold text-primary q-my-md">
205
+ Section Title
206
+ </h2>
207
+ <!-- Content -->
208
+ </div>
209
+ </q-page>
210
+ </template>
211
+
212
+ <style scoped lang="scss">
213
+ @import '@/styles/theme.scss';
214
+
215
+ .page-header {
216
+ border-bottom: 2px solid rgba($color-brand-primary, 0.3);
217
+ }
218
+ </style>
219
+ ```
220
+
221
+ ---
222
+
223
+ ## Composable Integration
224
+
225
+ ```javascript
226
+ import { useQuasar } from 'quasar';
227
+ import { computed } from 'vue';
228
+
229
+ export function useThemeAwareStyles() {
230
+ const $q = useQuasar();
231
+
232
+ // Pure function: derive classes from state
233
+ const containerClasses = computed(() => ({
234
+ 'q-pa-md': true,
235
+ 'q-mb-lg': true,
236
+ 'rounded-borders': true,
237
+ 'bg-grey-1': !$q.dark.isActive,
238
+ 'bg-grey-9': $q.dark.isActive
239
+ }));
240
+
241
+ return { containerClasses };
242
+ }
243
+ ```
244
+
245
+ ---
246
+
247
+ ## Reference Files
248
+
249
+ For detailed information, consult these reference files:
250
+
251
+ - **[references/utility-classes.md](references/utility-classes.md)** - Complete utility class reference (spacing, typography, colors, flexbox)
252
+ - **[references/component-patterns.md](references/component-patterns.md)** - Quasar component usage patterns (QBtn, QCard, QDialog, etc.)
253
+ - **[references/theme-integration.md](references/theme-integration.md)** - Theme system, SCSS variables, CSS custom properties, dark mode
254
+
255
+ ---
256
+
257
+ ## Component Quick Reference
258
+
259
+ | Need | Use Component | Not HTML |
260
+ |------|---------------|----------|
261
+ | Button | `<q-btn>` | `<button>` |
262
+ | Text input | `<q-input>` | `<input>` |
263
+ | Dropdown | `<q-select>` | `<select>` |
264
+ | Toggle | `<q-toggle>` | Custom toggle |
265
+ | Card | `<q-card>` | `<div class="card">` |
266
+ | Modal | `<q-dialog>` | Custom modal |
267
+ | Tabs | `<q-tabs>` | Custom tabs |
268
+ | List | `<q-list>` + `<q-item>` | `<ul>` + `<li>` |
269
+
270
+ ---
271
+
272
+ ## Essential Utility Classes
273
+
274
+ ### Spacing (8px grid)
275
+ - `q-pa-{xs|sm|md|lg|xl}` - Padding all sides (4px, 8px, 16px, 24px, 48px)
276
+ - `q-mb-{size}` - Margin bottom
277
+ - `q-mt-none` - Remove margin top
278
+
279
+ ### Typography
280
+ - `text-h1` through `text-h6` - Headings
281
+ - `text-body1`, `text-body2`, `text-caption` - Body text
282
+ - `text-weight-bold`, `text-weight-medium` - Font weight
283
+ - `text-italic`, `text-uppercase` - Text style
284
+
285
+ ### Colors
286
+ - `text-primary`, `text-secondary`, `text-accent` - Brand colors
287
+ - `text-grey-7` - Muted text
288
+ - `bg-grey-1` - Light background
289
+
290
+ ### Layout
291
+ - `row`, `column` - Flex containers
292
+ - `items-center`, `justify-between` - Alignment
293
+ - `col`, `col-auto` - Flex items
294
+
295
+ ---
296
+
297
+ ## Success Metrics
298
+
299
+ Target values for components using this skill:
300
+ - Utility usage: 80%+ (utilities vs custom CSS)
301
+ - CSS reduction: 30-50% compared to hand-written
302
+ - Quasar component usage: 90%+ (vs raw HTML)
303
+ - Theme integration: 100% (no hardcoded colors)
304
+ - Dark mode support: Automatic via theme system
305
+
306
+ ---
307
+
308
+ ## Integration
309
+
310
+ ### Dependencies
311
+ - Requires: `js-fp-vue` (Vue 3 FP patterns)
312
+
313
+ ### Context7 Integration
314
+ Query Quasar docs when user asks about specific components or configuration:
315
+ ```javascript
316
+ resolveLibraryId({ libraryName: 'quasar', query: 'QTable pagination' })
317
+ ```
318
+
319
+ ### Official Documentation
320
+ - Main: https://quasar.dev
321
+ - Utilities: https://quasar.dev/style/spacing
322
+ - Components: https://quasar.dev/vue-components
323
+
324
+ ---
325
+
326
+ **Framework Version**: Quasar v2 + Vue 3
327
+ **Status**: Production-ready
@@ -0,0 +1,85 @@
1
+ {
2
+ "skill": "quasar-fp",
3
+ "version": "1.0.0",
4
+ "category": "Frontend Framework",
5
+ "framework": "Quasar Framework (Vue 3)",
6
+ "purpose": "Quasar Framework best practices with utility-first CSS and FP patterns",
7
+ "auto_detect": true,
8
+ "detection": {
9
+ "file_patterns": [
10
+ "**/*.vue",
11
+ "**/quasar.config.js",
12
+ "**/quasar.variables.scss"
13
+ ],
14
+ "import_patterns": [
15
+ "import.*from ['\"]quasar['\"]",
16
+ "useQuasar",
17
+ "@/composables/use.*\\.js"
18
+ ],
19
+ "content_patterns": [
20
+ "<q-[a-z-]+",
21
+ "class=\"[^\"]*q-(pa|ma|pt|mt|mb|ml)-[a-z]{2,}",
22
+ "QBtn|QCard|QDialog|QExpansionItem|QToggle|QInput|QSelect"
23
+ ],
24
+ "keywords": [
25
+ "create component",
26
+ "build UI",
27
+ "add form",
28
+ "settings panel",
29
+ "quasar component",
30
+ "vue component"
31
+ ]
32
+ },
33
+ "confidence_weights": {
34
+ "quasar_config_exists": 0.95,
35
+ "vue_files_with_q_components": 0.90,
36
+ "quasar_imports": 0.85,
37
+ "vue_plus_component_keywords": 0.70
38
+ },
39
+ "mcp_integration": {
40
+ "context7": {
41
+ "library_name": "quasar",
42
+ "library_id": "/quasarframework/quasar",
43
+ "trigger_keywords": [
44
+ "how to use Q",
45
+ "Quasar component",
46
+ "quasar.config",
47
+ "Quasar documentation",
48
+ "Quasar styling"
49
+ ],
50
+ "example_queries": [
51
+ "QTable server-side pagination",
52
+ "QDialog component props",
53
+ "Quasar theme customization",
54
+ "QInput validation rules"
55
+ ]
56
+ },
57
+ "sequential": {
58
+ "trigger_keywords": [
59
+ "complex Quasar setup",
60
+ "Quasar configuration",
61
+ "plugin setup",
62
+ "boot file"
63
+ ]
64
+ }
65
+ },
66
+ "dependencies": ["js-fp-vue"],
67
+ "related_skills": ["js-fp-react", "js-fp"],
68
+ "examples": {
69
+ "settings_panel": "src/components/chaplet/SevenSorrowsChapletOptions.vue",
70
+ "complex_component": "src/components/chaplet/SorrowSection.vue",
71
+ "page_layout": "src/pages/chaplets/SevenSorrowsChaplet.vue"
72
+ },
73
+ "success_metrics": {
74
+ "utility_usage_target": 0.80,
75
+ "css_reduction_target": 0.35,
76
+ "quasar_component_usage_target": 0.90,
77
+ "theme_integration_target": 1.0
78
+ },
79
+ "learning_resources": {
80
+ "official_docs": "https://quasar.dev",
81
+ "utility_reference": "https://quasar.dev/style/spacing",
82
+ "components": "https://quasar.dev/vue-components",
83
+ "theme_customization": "https://quasar.dev/style/theme-builder"
84
+ }
85
+ }
@@ -0,0 +1,257 @@
1
+ # Quasar Component Patterns - Best Practices
2
+
3
+ **Purpose**: Guide for using Quasar components effectively with Vue 3 Composition API
4
+
5
+ ---
6
+
7
+ ## Component Philosophy
8
+
9
+ **Use Quasar components instead of HTML** for:
10
+ - Better accessibility (built-in ARIA)
11
+ - Consistent UX (Material Design)
12
+ - Theme integration (auto-respects brand colors)
13
+ - Mobile optimization (touch-friendly, responsive)
14
+ - Less code (handles edge cases automatically)
15
+
16
+ ---
17
+
18
+ ## Essential Components
19
+
20
+ ### Buttons (QBtn)
21
+
22
+ ```vue
23
+ <q-btn
24
+ @click="handleClick"
25
+ label="Click Me"
26
+ icon="check"
27
+ color="primary"
28
+ />
29
+ ```
30
+
31
+ **Common Props:**
32
+ - `label` - Button text
33
+ - `icon` / `icon-right` - Icons
34
+ - `color` - primary|secondary|accent|positive|negative
35
+ - `flat` - No background
36
+ - `outline` - Outlined style
37
+ - `rounded` - Rounded corners
38
+ - `loading` / `disable` - States
39
+
40
+ ---
41
+
42
+ ### Forms (QInput, QSelect, QToggle)
43
+
44
+ **QInput:**
45
+ ```vue
46
+ <q-input
47
+ v-model="name"
48
+ label="Enter name"
49
+ outlined
50
+ :rules="[val => !!val || 'Required']"
51
+ />
52
+ ```
53
+
54
+ **QSelect:**
55
+ ```vue
56
+ <q-select
57
+ v-model="selected"
58
+ :options="options"
59
+ label="Choose option"
60
+ outlined
61
+ />
62
+ ```
63
+
64
+ **QToggle:**
65
+ ```vue
66
+ <q-toggle
67
+ v-model="enabled"
68
+ label="Enable Feature"
69
+ color="primary"
70
+ />
71
+ ```
72
+
73
+ ---
74
+
75
+ ### Cards (QCard)
76
+
77
+ ```vue
78
+ <q-card flat bordered class="q-mb-md">
79
+ <q-card-section class="text-h6">Title</q-card-section>
80
+ <q-card-section>Content</q-card-section>
81
+ <q-card-actions align="right">
82
+ <q-btn label="Action" color="primary" />
83
+ </q-card-actions>
84
+ </q-card>
85
+ ```
86
+
87
+ ---
88
+
89
+ ### Expansion Items (QExpansionItem)
90
+
91
+ ```vue
92
+ <q-expansion-item
93
+ default-opened
94
+ icon="settings"
95
+ label="Settings Section"
96
+ header-class="text-weight-bold"
97
+ >
98
+ <q-card flat class="q-pa-md">
99
+ <!-- Content -->
100
+ </q-card>
101
+ </q-expansion-item>
102
+ ```
103
+
104
+ ---
105
+
106
+ ### Lists (QList, QItem)
107
+
108
+ ```vue
109
+ <q-list bordered class="rounded-borders">
110
+ <q-item clickable @click="handleClick">
111
+ <q-item-section avatar>
112
+ <q-icon name="settings" />
113
+ </q-item-section>
114
+ <q-item-section>
115
+ <q-item-label>Setting Name</q-item-label>
116
+ <q-item-label caption>Description</q-item-label>
117
+ </q-item-section>
118
+ <q-item-section side>
119
+ <q-toggle v-model="value" />
120
+ </q-item-section>
121
+ </q-item>
122
+ </q-list>
123
+ ```
124
+
125
+ ---
126
+
127
+ ### Dialogs (QDialog)
128
+
129
+ ```vue
130
+ <q-dialog v-model="dialogOpen">
131
+ <q-card style="min-width: 350px">
132
+ <q-card-section>
133
+ <div class="text-h6">Dialog Title</div>
134
+ </q-card-section>
135
+ <q-card-section class="q-pt-none">
136
+ Dialog content
137
+ </q-card-section>
138
+ <q-card-actions align="right">
139
+ <q-btn flat label="Cancel" v-close-popup />
140
+ <q-btn label="OK" color="primary" v-close-popup />
141
+ </q-card-actions>
142
+ </q-card>
143
+ </q-dialog>
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Complex Patterns
149
+
150
+ ### Settings Panel
151
+
152
+ ```vue
153
+ <template>
154
+ <q-expansion-item
155
+ default-opened
156
+ icon="settings"
157
+ label="Display Settings"
158
+ header-class="text-weight-bold"
159
+ >
160
+ <div class="q-pa-md">
161
+ <div class="q-pa-md q-mb-md rounded-borders bg-grey-1">
162
+ <q-toggle
163
+ v-model="setting1"
164
+ label="Show Feature"
165
+ class="text-weight-medium q-mb-sm"
166
+ />
167
+ <p class="text-caption text-grey-7 q-pl-sm q-mb-none">
168
+ Feature description
169
+ </p>
170
+ </div>
171
+ </div>
172
+ </q-expansion-item>
173
+ </template>
174
+ ```
175
+
176
+ ### Responsive Header
177
+
178
+ ```vue
179
+ <div class="text-center q-py-lg q-mb-lg">
180
+ <h1 class="text-h3 text-weight-bold text-primary q-mb-sm q-mt-none">
181
+ Page Title
182
+ </h1>
183
+ <p class="text-h6 text-italic text-accent q-mb-sm q-mt-none">
184
+ Subtitle
185
+ </p>
186
+ <p class="text-caption text-grey-7 q-mx-auto q-mb-none" style="max-width: 600px">
187
+ Description
188
+ </p>
189
+ </div>
190
+ ```
191
+
192
+ ---
193
+
194
+ ## Dark Mode Pattern
195
+
196
+ ```vue
197
+ <script setup>
198
+ import { useQuasar } from 'quasar';
199
+ import { computed } from 'vue';
200
+
201
+ const $q = useQuasar();
202
+ const isDark = computed(() => $q.dark.isActive);
203
+ const toggleDark = () => $q.dark.toggle();
204
+ </script>
205
+
206
+ <template>
207
+ <!-- Quasar utilities auto-handle dark mode -->
208
+ <div class="text-primary bg-secondary q-pa-md">
209
+ Automatically switches colors in dark mode
210
+ </div>
211
+ </template>
212
+ ```
213
+
214
+ ---
215
+
216
+ ## Responsive Grid
217
+
218
+ ```vue
219
+ <div class="row q-col-gutter-md">
220
+ <div class="col-12 col-sm-6 col-md-4">
221
+ <q-card>Content 1</q-card>
222
+ </div>
223
+ <div class="col-12 col-sm-6 col-md-4">
224
+ <q-card>Content 2</q-card>
225
+ </div>
226
+ <div class="col-12 col-sm-6 col-md-4">
227
+ <q-card>Content 3</q-card>
228
+ </div>
229
+ </div>
230
+ ```
231
+
232
+ **Breakpoints:**
233
+ - `col-xs` - < 600px (mobile)
234
+ - `col-sm` - 600px - 1023px (tablet)
235
+ - `col-md` - 1024px - 1439px (desktop)
236
+ - `col-lg` - 1440px+ (large desktop)
237
+
238
+ ---
239
+
240
+ ## Quick Component Reference
241
+
242
+ | Need | Use Component | Not HTML |
243
+ |------|---------------|----------|
244
+ | Button | `<q-btn>` | `<button>` |
245
+ | Text input | `<q-input>` | `<input>` |
246
+ | Dropdown | `<q-select>` | `<select>` |
247
+ | Toggle | `<q-toggle>` | Custom toggle |
248
+ | Checkbox | `<q-checkbox>` | `<input type="checkbox">` |
249
+ | Card | `<q-card>` | `<div class="card">` |
250
+ | Modal | `<q-dialog>` | Custom modal |
251
+ | Tabs | `<q-tabs>` | Custom tabs |
252
+ | Table | `<q-table>` | `<table>` |
253
+ | Loading | `<q-spinner>` | Custom spinner |
254
+
255
+ ---
256
+
257
+ **Reference**: https://quasar.dev/vue-components