@luquimbo/bi-superpowers 1.0.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/.claude-plugin/plugin.json +8 -0
- package/.mcp.json +25 -0
- package/AGENTS.md +244 -0
- package/CHANGELOG.md +265 -0
- package/LICENSE +21 -0
- package/README.md +211 -0
- package/bin/build-plugin.js +30 -0
- package/bin/cli.js +1064 -0
- package/bin/commands/add.js +533 -0
- package/bin/commands/add.test.js +77 -0
- package/bin/commands/build-desktop.js +166 -0
- package/bin/commands/changelog.js +443 -0
- package/bin/commands/diff.js +325 -0
- package/bin/commands/lint.js +419 -0
- package/bin/commands/lint.test.js +103 -0
- package/bin/commands/mcp-setup.js +246 -0
- package/bin/commands/pull.js +287 -0
- package/bin/commands/pull.test.js +36 -0
- package/bin/commands/push.js +231 -0
- package/bin/commands/push.test.js +14 -0
- package/bin/commands/search.js +344 -0
- package/bin/commands/search.test.js +115 -0
- package/bin/commands/setup.js +545 -0
- package/bin/commands/setup.test.js +46 -0
- package/bin/commands/sync-profile.js +405 -0
- package/bin/commands/sync-profile.test.js +14 -0
- package/bin/commands/sync-source.js +418 -0
- package/bin/commands/sync-source.test.js +14 -0
- package/bin/commands/watch.js +206 -0
- package/bin/lib/generators/claude-plugin.js +266 -0
- package/bin/lib/generators/claude-plugin.test.js +110 -0
- package/bin/lib/generators/index.js +116 -0
- package/bin/lib/generators/shared.js +282 -0
- package/bin/lib/licensing/index.js +35 -0
- package/bin/lib/licensing/storage.js +364 -0
- package/bin/lib/licensing/storage.test.js +55 -0
- package/bin/lib/licensing/validator.js +213 -0
- package/bin/lib/licensing/validator.test.js +137 -0
- package/bin/lib/microsoft-mcp.js +176 -0
- package/bin/lib/microsoft-mcp.test.js +106 -0
- package/bin/lib/skills.js +84 -0
- package/bin/mcp/powerbi-modeling-launcher.js +38 -0
- package/bin/postinstall.js +44 -0
- package/bin/utils/errors.js +159 -0
- package/bin/utils/git.js +298 -0
- package/bin/utils/logger.js +142 -0
- package/bin/utils/mcp-detect.js +274 -0
- package/bin/utils/mcp-detect.test.js +105 -0
- package/bin/utils/pbix.js +305 -0
- package/bin/utils/pbix.test.js +37 -0
- package/bin/utils/profiles.js +312 -0
- package/bin/utils/projects.js +168 -0
- package/bin/utils/readline.js +206 -0
- package/bin/utils/readline.test.js +47 -0
- package/bin/utils/tui.js +314 -0
- package/bin/utils/tui.test.js +127 -0
- package/commands/contributions.md +265 -0
- package/commands/data-model-design.md +468 -0
- package/commands/dax-doctor.md +248 -0
- package/commands/fabric-scripts.md +452 -0
- package/commands/migration-assistant.md +290 -0
- package/commands/model-documenter.md +242 -0
- package/commands/pbi-connect.md +239 -0
- package/commands/project-kickoff.md +905 -0
- package/commands/report-layout.md +296 -0
- package/commands/rls-design.md +533 -0
- package/commands/theme-tweaker.md +624 -0
- package/config.example.json +23 -0
- package/config.json +23 -0
- package/desktop-extension/manifest.json +37 -0
- package/desktop-extension/package.json +10 -0
- package/desktop-extension/server.js +95 -0
- package/docs/openrouter-free-models.md +92 -0
- package/library/examples/README.md +151 -0
- package/library/examples/finance-reporting/README.md +351 -0
- package/library/examples/finance-reporting/data-model.md +267 -0
- package/library/examples/finance-reporting/measures.dax +557 -0
- package/library/examples/hr-analytics/README.md +371 -0
- package/library/examples/hr-analytics/data-model.md +315 -0
- package/library/examples/hr-analytics/measures.dax +460 -0
- package/library/examples/marketing-analytics/README.md +37 -0
- package/library/examples/marketing-analytics/data-model.md +62 -0
- package/library/examples/marketing-analytics/measures.dax +110 -0
- package/library/examples/retail-analytics/README.md +439 -0
- package/library/examples/retail-analytics/data-model.md +288 -0
- package/library/examples/retail-analytics/measures.dax +481 -0
- package/library/examples/supply-chain/README.md +37 -0
- package/library/examples/supply-chain/data-model.md +69 -0
- package/library/examples/supply-chain/measures.dax +77 -0
- package/library/examples/udf-library/README.md +228 -0
- package/library/examples/udf-library/functions.dax +571 -0
- package/library/snippets/dax/README.md +292 -0
- package/library/snippets/dax/business-domains.md +576 -0
- package/library/snippets/dax/calculate-patterns.md +276 -0
- package/library/snippets/dax/calculation-groups.md +489 -0
- package/library/snippets/dax/error-handling.md +495 -0
- package/library/snippets/dax/iterators-and-aggregations.md +474 -0
- package/library/snippets/dax/kpis-and-metrics.md +293 -0
- package/library/snippets/dax/rankings-and-topn.md +235 -0
- package/library/snippets/dax/security-patterns.md +413 -0
- package/library/snippets/dax/text-and-formatting.md +316 -0
- package/library/snippets/dax/time-intelligence.md +196 -0
- package/library/snippets/dax/user-defined-functions.md +477 -0
- package/library/snippets/dax/virtual-tables.md +546 -0
- package/library/snippets/excel-formulas/README.md +84 -0
- package/library/snippets/excel-formulas/aggregations.md +330 -0
- package/library/snippets/excel-formulas/dates-and-times.md +361 -0
- package/library/snippets/excel-formulas/dynamic-arrays.md +314 -0
- package/library/snippets/excel-formulas/lookups.md +169 -0
- package/library/snippets/excel-formulas/text-functions.md +363 -0
- package/library/snippets/governance/naming-conventions.md +97 -0
- package/library/snippets/governance/review-checklists.md +107 -0
- package/library/snippets/power-query/README.md +389 -0
- package/library/snippets/power-query/api-integration.md +707 -0
- package/library/snippets/power-query/connections.md +434 -0
- package/library/snippets/power-query/data-cleaning.md +298 -0
- package/library/snippets/power-query/error-handling.md +526 -0
- package/library/snippets/power-query/parameters.md +350 -0
- package/library/snippets/power-query/performance.md +506 -0
- package/library/snippets/power-query/transformations.md +330 -0
- package/library/snippets/report-design/accessibility.md +78 -0
- package/library/snippets/report-design/chart-selection.md +54 -0
- package/library/snippets/report-design/layout-patterns.md +87 -0
- package/library/templates/data-models/README.md +93 -0
- package/library/templates/data-models/finance-model.md +627 -0
- package/library/templates/data-models/retail-star-schema.md +473 -0
- package/library/templates/excel/README.md +83 -0
- package/library/templates/excel/budget-tracker.md +432 -0
- package/library/templates/excel/data-entry-form.md +533 -0
- package/library/templates/power-bi/README.md +72 -0
- package/library/templates/power-bi/finance-report.md +449 -0
- package/library/templates/power-bi/kpi-scorecard.md +461 -0
- package/library/templates/power-bi/sales-dashboard.md +281 -0
- package/library/themes/excel/README.md +436 -0
- package/library/themes/power-bi/README.md +271 -0
- package/library/themes/power-bi/accessible.json +307 -0
- package/library/themes/power-bi/bi-superpowers-default.json +858 -0
- package/library/themes/power-bi/corporate-blue.json +291 -0
- package/library/themes/power-bi/dark-mode.json +291 -0
- package/library/themes/power-bi/minimal.json +292 -0
- package/library/themes/power-bi/print-friendly.json +309 -0
- package/package.json +93 -0
- package/skills/contributions/SKILL.md +267 -0
- package/skills/data-model-design/SKILL.md +470 -0
- package/skills/data-modeling/SKILL.md +254 -0
- package/skills/data-quality/SKILL.md +664 -0
- package/skills/dax/SKILL.md +708 -0
- package/skills/dax-doctor/SKILL.md +250 -0
- package/skills/dax-udf/SKILL.md +489 -0
- package/skills/deployment/SKILL.md +320 -0
- package/skills/excel-formulas/SKILL.md +463 -0
- package/skills/fabric-scripts/SKILL.md +454 -0
- package/skills/fast-standard/SKILL.md +509 -0
- package/skills/governance/SKILL.md +205 -0
- package/skills/migration-assistant/SKILL.md +292 -0
- package/skills/model-documenter/SKILL.md +244 -0
- package/skills/pbi-connect/SKILL.md +241 -0
- package/skills/power-query/SKILL.md +406 -0
- package/skills/project-kickoff/SKILL.md +907 -0
- package/skills/query-performance/SKILL.md +480 -0
- package/skills/report-design/SKILL.md +207 -0
- package/skills/report-layout/SKILL.md +298 -0
- package/skills/rls-design/SKILL.md +535 -0
- package/skills/semantic-model/SKILL.md +237 -0
- package/skills/testing-validation/SKILL.md +643 -0
- package/skills/theme-tweaker/SKILL.md +626 -0
- package/src/content/base.md +237 -0
- package/src/content/mcp-requirements.json +69 -0
- package/src/content/routing.md +203 -0
- package/src/content/skills/contributions.md +259 -0
- package/src/content/skills/data-model-design.md +462 -0
- package/src/content/skills/data-modeling.md +246 -0
- package/src/content/skills/data-quality.md +656 -0
- package/src/content/skills/dax-doctor.md +242 -0
- package/src/content/skills/dax-udf.md +481 -0
- package/src/content/skills/dax.md +700 -0
- package/src/content/skills/deployment.md +312 -0
- package/src/content/skills/excel-formulas.md +455 -0
- package/src/content/skills/fabric-scripts.md +446 -0
- package/src/content/skills/fast-standard.md +501 -0
- package/src/content/skills/governance.md +197 -0
- package/src/content/skills/migration-assistant.md +284 -0
- package/src/content/skills/model-documenter.md +236 -0
- package/src/content/skills/pbi-connect.md +233 -0
- package/src/content/skills/power-query.md +398 -0
- package/src/content/skills/project-kickoff.md +899 -0
- package/src/content/skills/query-performance.md +472 -0
- package/src/content/skills/report-design.md +199 -0
- package/src/content/skills/report-layout.md +290 -0
- package/src/content/skills/rls-design.md +527 -0
- package/src/content/skills/semantic-model.md +229 -0
- package/src/content/skills/testing-validation.md +635 -0
- package/src/content/skills/theme-tweaker.md +618 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# Power BI Themes
|
|
2
|
+
|
|
3
|
+
Collection of professionally designed `.json` theme files for Power BI reports.
|
|
4
|
+
|
|
5
|
+
## Available Themes
|
|
6
|
+
|
|
7
|
+
| Theme | Description | Best For |
|
|
8
|
+
|-------|-------------|----------|
|
|
9
|
+
| [bi-superpowers-default.json](./bi-superpowers-default.json) | **Recommended** - Shadcn/UI + IBCS standards | Professional BI reports |
|
|
10
|
+
| [corporate-blue.json](./corporate-blue.json) | Microsoft-style blue palette | Corporate dashboards |
|
|
11
|
+
| [dark-mode.json](./dark-mode.json) | Dark background with vibrant accents | Extended viewing, demos |
|
|
12
|
+
| [accessible.json](./accessible.json) | WCAG AA compliant, colorblind-friendly | Public-facing, accessibility-required |
|
|
13
|
+
| [minimal.json](./minimal.json) | Ultra-clean, no borders, maximum white space | Executive presentations |
|
|
14
|
+
| [print-friendly.json](./print-friendly.json) | High contrast, solid borders, grayscale-compatible | PDF export, printing |
|
|
15
|
+
|
|
16
|
+
## Theme Comparison
|
|
17
|
+
|
|
18
|
+
| Feature | Default | Corporate Blue | Dark Mode | Accessible | Minimal | Print |
|
|
19
|
+
|---------|---------|----------------|-----------|------------|---------|-------|
|
|
20
|
+
| Background | Light gray | Off-white | Dark gray | White | White | White |
|
|
21
|
+
| Data colors | IBCS grayscale | Blues + accents | Vibrant | Colorblind-safe | Muted | High contrast |
|
|
22
|
+
| Borders | Subtle (10px radius) | Subtle (8px) | Subtle (8px) | Strong (4px) | None | Solid (1px) |
|
|
23
|
+
| Best contrast | Good | Good | Excellent | Excellent | Good | Excellent |
|
|
24
|
+
| Print-friendly | Yes | Yes | No | Yes | Yes | Excellent |
|
|
25
|
+
| Colorblind-safe | Yes | Partial | Partial | Yes | Partial | Yes |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## BI Agent Superpowers Default Theme
|
|
30
|
+
|
|
31
|
+
Our recommended theme combines modern design with data visualization best practices.
|
|
32
|
+
|
|
33
|
+
### Design System: Shadcn/UI
|
|
34
|
+
|
|
35
|
+
- Clean, minimalist interface
|
|
36
|
+
- System fonts (Segoe UI, SF Pro)
|
|
37
|
+
- Subtle borders with 10px radius
|
|
38
|
+
- Light backgrounds (#FAFAFA page, #FFFFFF cards)
|
|
39
|
+
- Consistent spacing and typography
|
|
40
|
+
|
|
41
|
+
### Data Colors: IBCS Standards
|
|
42
|
+
|
|
43
|
+
Following [International Business Communication Standards](https://www.ibcs.com/):
|
|
44
|
+
|
|
45
|
+
| Purpose | Color | Hex | Usage |
|
|
46
|
+
|---------|-------|-----|-------|
|
|
47
|
+
| Actual (Primary) | Black | `#000000` | Current period data |
|
|
48
|
+
| Previous Year | Gray | `#737373` | Comparison data |
|
|
49
|
+
| Secondary | Light Gray | `#A3A3A3` | Additional series |
|
|
50
|
+
| Tertiary | Lighter Gray | `#D4D4D4` | Background data |
|
|
51
|
+
| Positive/Good | Dark Green | `#166534` | Favorable variance |
|
|
52
|
+
| Negative/Bad | Dark Red | `#991B1B` | Unfavorable variance |
|
|
53
|
+
| Neutral | Gray | `#737373` | No change |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Accessible Theme
|
|
58
|
+
|
|
59
|
+
Designed for WCAG AA compliance and colorblind accessibility.
|
|
60
|
+
|
|
61
|
+
### Features
|
|
62
|
+
|
|
63
|
+
- **High contrast**: All text meets 4.5:1 contrast ratio
|
|
64
|
+
- **Colorblind-safe palette**: Wong colorblind-friendly colors
|
|
65
|
+
- **Larger fonts**: Increased base font sizes
|
|
66
|
+
- **Stronger borders**: 2px borders for clear visual separation
|
|
67
|
+
- **Pattern-friendly**: Colors work with patterns if needed
|
|
68
|
+
|
|
69
|
+
### Color Palette
|
|
70
|
+
|
|
71
|
+
Based on the Wong colorblind-friendly palette:
|
|
72
|
+
|
|
73
|
+
| Color | Hex | RGB | Usage |
|
|
74
|
+
|-------|-----|-----|-------|
|
|
75
|
+
| Blue | `#0072B2` | 0, 114, 178 | Primary |
|
|
76
|
+
| Orange | `#E69F00` | 230, 159, 0 | Secondary |
|
|
77
|
+
| Green | `#009E73` | 0, 158, 115 | Positive |
|
|
78
|
+
| Pink | `#CC79A7` | 204, 121, 167 | Accent |
|
|
79
|
+
| Sky Blue | `#56B4E9` | 86, 180, 233 | Highlight |
|
|
80
|
+
| Vermillion | `#D55E00` | 213, 94, 0 | Negative |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Minimal Theme
|
|
85
|
+
|
|
86
|
+
Ultra-clean design for executive presentations and storytelling.
|
|
87
|
+
|
|
88
|
+
### Features
|
|
89
|
+
|
|
90
|
+
- **No borders**: Visuals blend into the page
|
|
91
|
+
- **Hidden axes**: Focus on data labels, not gridlines
|
|
92
|
+
- **No legends**: Use direct labeling instead
|
|
93
|
+
- **Maximum white space**: Clean, uncluttered appearance
|
|
94
|
+
- **Transparent backgrounds**: Seamless visual integration
|
|
95
|
+
|
|
96
|
+
### Best Practices with Minimal
|
|
97
|
+
|
|
98
|
+
1. Use direct data labels instead of legends
|
|
99
|
+
2. Limit visuals per page (3-4 maximum)
|
|
100
|
+
3. Let the data speak - remove chart clutter
|
|
101
|
+
4. Use titles sparingly - they should add context
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Print-Friendly Theme
|
|
106
|
+
|
|
107
|
+
Optimized for PDF export and physical printing.
|
|
108
|
+
|
|
109
|
+
### Features
|
|
110
|
+
|
|
111
|
+
- **Black borders**: Clear separation when printed
|
|
112
|
+
- **High contrast**: Readable at lower DPI
|
|
113
|
+
- **No transparency**: Solid colors throughout
|
|
114
|
+
- **Legends at bottom**: Better page flow
|
|
115
|
+
- **Grayscale-compatible**: First 3 data colors are grayscale
|
|
116
|
+
|
|
117
|
+
### Print Recommendations
|
|
118
|
+
|
|
119
|
+
1. Export at 150 DPI minimum for quality
|
|
120
|
+
2. Use landscape orientation for dashboards
|
|
121
|
+
3. Test print in B&W to verify readability
|
|
122
|
+
4. Check margins before final export
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## How to Apply a Theme
|
|
127
|
+
|
|
128
|
+
### In Power BI Desktop
|
|
129
|
+
|
|
130
|
+
1. Go to **View** > **Themes** > **Browse for themes**
|
|
131
|
+
2. Select the `.json` file from this folder
|
|
132
|
+
3. Theme applies to all pages immediately
|
|
133
|
+
|
|
134
|
+
### In Power BI Service
|
|
135
|
+
|
|
136
|
+
1. Open report in **Edit** mode
|
|
137
|
+
2. **View** > **Themes** > **Browse for themes**
|
|
138
|
+
3. Upload the `.json` file
|
|
139
|
+
|
|
140
|
+
### Switching Themes
|
|
141
|
+
|
|
142
|
+
Changing themes preserves your visuals and data - only formatting changes. You can safely experiment with different themes.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## IBCS Color Philosophy
|
|
147
|
+
|
|
148
|
+
IBCS recommends using **grayscale for data** and **color only for meaning**:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
Grayscale = Data (Actual, PY, Plan, Forecast)
|
|
152
|
+
Green = Positive variance / Good
|
|
153
|
+
Red = Negative variance / Bad
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
This approach:
|
|
157
|
+
- Reduces visual noise
|
|
158
|
+
- Highlights what matters (variances)
|
|
159
|
+
- Works for colorblind users
|
|
160
|
+
- Prints well in B&W
|
|
161
|
+
|
|
162
|
+
### IBCS Patterns Note
|
|
163
|
+
|
|
164
|
+
Power BI native visuals don't support hatched patterns. For full IBCS compliance with patterns (outlined for Plan, hatched for Forecast), consider:
|
|
165
|
+
- [Zebra BI](https://zebrabi.com/)
|
|
166
|
+
- [Inforiver](https://inforiver.com/)
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Theme Structure
|
|
171
|
+
|
|
172
|
+
```json
|
|
173
|
+
{
|
|
174
|
+
"name": "Theme Name",
|
|
175
|
+
"description": "Brief description",
|
|
176
|
+
"dataColors": ["#000000", "#737373", "..."],
|
|
177
|
+
"background": "#FFFFFF",
|
|
178
|
+
"foreground": "#171717",
|
|
179
|
+
"tableAccent": "#0078D4",
|
|
180
|
+
"good": "#166534",
|
|
181
|
+
"bad": "#991B1B",
|
|
182
|
+
"neutral": "#737373",
|
|
183
|
+
"maximum": "#166534",
|
|
184
|
+
"minimum": "#991B1B",
|
|
185
|
+
"center": "#737373",
|
|
186
|
+
"textClasses": {
|
|
187
|
+
"callout": { "fontFace": "...", "fontSize": 28, "color": "..." },
|
|
188
|
+
"title": { ... },
|
|
189
|
+
"header": { ... },
|
|
190
|
+
"label": { ... }
|
|
191
|
+
},
|
|
192
|
+
"visualStyles": {
|
|
193
|
+
"*": { "*": { ... } },
|
|
194
|
+
"card": { "*": { ... } },
|
|
195
|
+
"lineChart": { "*": { ... } },
|
|
196
|
+
...
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Key Properties
|
|
202
|
+
|
|
203
|
+
| Property | Description |
|
|
204
|
+
|----------|-------------|
|
|
205
|
+
| `name` | Theme name shown in Power BI |
|
|
206
|
+
| `description` | Theme description |
|
|
207
|
+
| `dataColors` | Array of colors for data series (8 recommended) |
|
|
208
|
+
| `background` | Default visual background |
|
|
209
|
+
| `foreground` | Default text color |
|
|
210
|
+
| `tableAccent` | Table header and accent color |
|
|
211
|
+
| `good` / `bad` / `neutral` | Sentiment colors for KPIs |
|
|
212
|
+
| `maximum` / `minimum` / `center` | Conditional formatting colors |
|
|
213
|
+
| `textClasses` | Typography definitions |
|
|
214
|
+
| `visualStyles` | Visual-specific styling |
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Creating Custom Themes
|
|
219
|
+
|
|
220
|
+
### Start from a Template
|
|
221
|
+
|
|
222
|
+
1. Copy an existing theme as your starting point
|
|
223
|
+
2. Modify colors to match your brand
|
|
224
|
+
3. Test in Power BI Desktop
|
|
225
|
+
4. Iterate until satisfied
|
|
226
|
+
|
|
227
|
+
### Use Theme Tweaker
|
|
228
|
+
|
|
229
|
+
The [Theme Tweaker Skill](../../skills/theme-tweaker/SKILL.md) can help you:
|
|
230
|
+
- Generate a theme from brand colors
|
|
231
|
+
- Modify existing themes interactively
|
|
232
|
+
- Ensure accessibility compliance
|
|
233
|
+
|
|
234
|
+
### Testing Checklist
|
|
235
|
+
|
|
236
|
+
- [ ] Apply theme to a report with various visual types
|
|
237
|
+
- [ ] Check all chart types render correctly
|
|
238
|
+
- [ ] Verify text is readable (contrast)
|
|
239
|
+
- [ ] Test conditional formatting (good/bad/neutral)
|
|
240
|
+
- [ ] Export to PDF and verify appearance
|
|
241
|
+
- [ ] Test on different screen sizes
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Contributing
|
|
246
|
+
|
|
247
|
+
Add new themes following these guidelines:
|
|
248
|
+
|
|
249
|
+
1. **Naming**: Use descriptive filenames (e.g., `healthcare-blue.json`)
|
|
250
|
+
2. **Structure**: Include all required properties
|
|
251
|
+
3. **Testing**: Verify with multiple visual types
|
|
252
|
+
4. **Documentation**: Update this README with theme description
|
|
253
|
+
5. **Rationale**: Explain the design philosophy
|
|
254
|
+
|
|
255
|
+
### Submission Checklist
|
|
256
|
+
|
|
257
|
+
- [ ] Valid JSON (no syntax errors)
|
|
258
|
+
- [ ] All required properties present
|
|
259
|
+
- [ ] 8 data colors defined
|
|
260
|
+
- [ ] Tested in Power BI Desktop
|
|
261
|
+
- [ ] README updated
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Resources
|
|
266
|
+
|
|
267
|
+
- [IBCS Standards](https://www.ibcs.com/)
|
|
268
|
+
- [Microsoft Theme Schema](https://github.com/microsoft/powerbi-desktop-samples/tree/main/Report%20Theme%20JSON%20Schema)
|
|
269
|
+
- [Power BI Theme Templates](https://github.com/MattRudy/PowerBI-ThemeTemplates)
|
|
270
|
+
- [Color Contrast Checker](https://webaim.org/resources/contrastchecker/)
|
|
271
|
+
- [Colorblind Simulator](https://www.color-blindness.com/coblis-color-blindness-simulator/)
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Accessible",
|
|
3
|
+
"description": "WCAG AA compliant theme with high contrast and colorblind-friendly palette",
|
|
4
|
+
"dataColors": [
|
|
5
|
+
"#0072B2",
|
|
6
|
+
"#E69F00",
|
|
7
|
+
"#009E73",
|
|
8
|
+
"#CC79A7",
|
|
9
|
+
"#56B4E9",
|
|
10
|
+
"#D55E00",
|
|
11
|
+
"#F0E442",
|
|
12
|
+
"#000000"
|
|
13
|
+
],
|
|
14
|
+
"background": "#FFFFFF",
|
|
15
|
+
"foreground": "#1A1A1A",
|
|
16
|
+
"tableAccent": "#0072B2",
|
|
17
|
+
"good": "#009E73",
|
|
18
|
+
"bad": "#D55E00",
|
|
19
|
+
"neutral": "#666666",
|
|
20
|
+
"maximum": "#009E73",
|
|
21
|
+
"minimum": "#D55E00",
|
|
22
|
+
"center": "#666666",
|
|
23
|
+
"textClasses": {
|
|
24
|
+
"callout": {
|
|
25
|
+
"fontFace": "'Segoe UI', 'Helvetica Neue', Arial, sans-serif",
|
|
26
|
+
"fontSize": 32,
|
|
27
|
+
"color": "#1A1A1A"
|
|
28
|
+
},
|
|
29
|
+
"title": {
|
|
30
|
+
"fontFace": "'Segoe UI Semibold', 'Helvetica Neue', Arial, sans-serif",
|
|
31
|
+
"fontSize": 16,
|
|
32
|
+
"color": "#1A1A1A"
|
|
33
|
+
},
|
|
34
|
+
"header": {
|
|
35
|
+
"fontFace": "'Segoe UI Semibold', 'Helvetica Neue', Arial, sans-serif",
|
|
36
|
+
"fontSize": 14,
|
|
37
|
+
"color": "#1A1A1A"
|
|
38
|
+
},
|
|
39
|
+
"label": {
|
|
40
|
+
"fontFace": "'Segoe UI', 'Helvetica Neue', Arial, sans-serif",
|
|
41
|
+
"fontSize": 12,
|
|
42
|
+
"color": "#333333"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"visualStyles": {
|
|
46
|
+
"*": {
|
|
47
|
+
"*": {
|
|
48
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } }, "transparency": 0 }],
|
|
49
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
50
|
+
"outlineColor": [{ "solid": { "color": "#333333" } }],
|
|
51
|
+
"outlineWeight": [{ "weight": 2 }],
|
|
52
|
+
"title": [{
|
|
53
|
+
"show": true,
|
|
54
|
+
"fontColor": { "solid": { "color": "#1A1A1A" } },
|
|
55
|
+
"fontSize": 16
|
|
56
|
+
}]
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"page": {
|
|
60
|
+
"*": {
|
|
61
|
+
"background": [{ "color": { "solid": { "color": "#F5F5F5" } }, "transparency": 0 }]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"card": {
|
|
65
|
+
"*": {
|
|
66
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
67
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
68
|
+
"categoryLabels": [{ "show": true, "color": { "solid": { "color": "#333333" } }, "fontSize": 14 }],
|
|
69
|
+
"wordWrap": [{ "show": true }]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"multiRowCard": {
|
|
73
|
+
"*": {
|
|
74
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
75
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
76
|
+
"cardTitle": [{ "color": { "solid": { "color": "#1A1A1A" } }, "fontSize": 14 }]
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"clusteredColumnChart": {
|
|
80
|
+
"*": {
|
|
81
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
82
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
83
|
+
"legend": [{ "show": true, "position": "Top", "labelColor": { "solid": { "color": "#1A1A1A" } }, "fontSize": 12 }],
|
|
84
|
+
"categoryAxis": [{
|
|
85
|
+
"show": true,
|
|
86
|
+
"labelColor": { "solid": { "color": "#1A1A1A" } },
|
|
87
|
+
"gridlineShow": false,
|
|
88
|
+
"fontSize": 12
|
|
89
|
+
}],
|
|
90
|
+
"valueAxis": [{
|
|
91
|
+
"show": true,
|
|
92
|
+
"labelColor": { "solid": { "color": "#1A1A1A" } },
|
|
93
|
+
"gridlineShow": true,
|
|
94
|
+
"gridlineColor": { "solid": { "color": "#CCCCCC" } },
|
|
95
|
+
"fontSize": 12
|
|
96
|
+
}],
|
|
97
|
+
"dataPoint": [{ "showAllDataPoints": true }]
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"clusteredBarChart": {
|
|
101
|
+
"*": {
|
|
102
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
103
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
104
|
+
"legend": [{ "show": true, "position": "Top", "labelColor": { "solid": { "color": "#1A1A1A" } }, "fontSize": 12 }],
|
|
105
|
+
"categoryAxis": [{
|
|
106
|
+
"show": true,
|
|
107
|
+
"labelColor": { "solid": { "color": "#1A1A1A" } },
|
|
108
|
+
"gridlineShow": false,
|
|
109
|
+
"fontSize": 12
|
|
110
|
+
}],
|
|
111
|
+
"valueAxis": [{
|
|
112
|
+
"show": true,
|
|
113
|
+
"labelColor": { "solid": { "color": "#1A1A1A" } },
|
|
114
|
+
"gridlineShow": true,
|
|
115
|
+
"gridlineColor": { "solid": { "color": "#CCCCCC" } },
|
|
116
|
+
"fontSize": 12
|
|
117
|
+
}]
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"lineChart": {
|
|
121
|
+
"*": {
|
|
122
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
123
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
124
|
+
"legend": [{ "show": true, "position": "Top", "labelColor": { "solid": { "color": "#1A1A1A" } }, "fontSize": 12 }],
|
|
125
|
+
"categoryAxis": [{
|
|
126
|
+
"show": true,
|
|
127
|
+
"labelColor": { "solid": { "color": "#1A1A1A" } },
|
|
128
|
+
"gridlineShow": false,
|
|
129
|
+
"fontSize": 12
|
|
130
|
+
}],
|
|
131
|
+
"valueAxis": [{
|
|
132
|
+
"show": true,
|
|
133
|
+
"labelColor": { "solid": { "color": "#1A1A1A" } },
|
|
134
|
+
"gridlineShow": true,
|
|
135
|
+
"gridlineColor": { "solid": { "color": "#CCCCCC" } },
|
|
136
|
+
"fontSize": 12
|
|
137
|
+
}],
|
|
138
|
+
"dataPoint": [{ "markerSize": 8 }],
|
|
139
|
+
"lineStyles": [{ "strokeWidth": 3 }]
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"areaChart": {
|
|
143
|
+
"*": {
|
|
144
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
145
|
+
"border": [{ "color": "#333333", "radius": 4 }]
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"pieChart": {
|
|
149
|
+
"*": {
|
|
150
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
151
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
152
|
+
"legend": [{ "show": true, "position": "Right", "labelColor": { "solid": { "color": "#1A1A1A" } }, "fontSize": 12 }],
|
|
153
|
+
"labels": [{ "show": true, "color": { "solid": { "color": "#1A1A1A" } }, "fontSize": 12 }]
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"donutChart": {
|
|
157
|
+
"*": {
|
|
158
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
159
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
160
|
+
"legend": [{ "show": true, "position": "Right", "labelColor": { "solid": { "color": "#1A1A1A" } }, "fontSize": 12 }]
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"waterfallChart": {
|
|
164
|
+
"*": {
|
|
165
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
166
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
167
|
+
"sentimentColors": [{
|
|
168
|
+
"increaseFill": { "solid": { "color": "#009E73" } },
|
|
169
|
+
"decreaseFill": { "solid": { "color": "#D55E00" } },
|
|
170
|
+
"totalFill": { "solid": { "color": "#0072B2" } }
|
|
171
|
+
}]
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"funnel": {
|
|
175
|
+
"*": {
|
|
176
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
177
|
+
"border": [{ "color": "#333333", "radius": 4 }]
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
"gauge": {
|
|
181
|
+
"*": {
|
|
182
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
183
|
+
"border": [{ "color": "#333333", "radius": 4 }]
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"kpi": {
|
|
187
|
+
"*": {
|
|
188
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
189
|
+
"border": [{ "color": "#333333", "radius": 4 }]
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"tableEx": {
|
|
193
|
+
"*": {
|
|
194
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
195
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
196
|
+
"grid": [{
|
|
197
|
+
"gridVertical": true,
|
|
198
|
+
"gridVerticalColor": { "solid": { "color": "#CCCCCC" } },
|
|
199
|
+
"gridHorizontal": true,
|
|
200
|
+
"gridHorizontalColor": { "solid": { "color": "#CCCCCC" } }
|
|
201
|
+
}],
|
|
202
|
+
"columnHeaders": [{
|
|
203
|
+
"fontColor": { "solid": { "color": "#FFFFFF" } },
|
|
204
|
+
"backColor": { "solid": { "color": "#0072B2" } },
|
|
205
|
+
"fontSize": 13
|
|
206
|
+
}],
|
|
207
|
+
"values": [{
|
|
208
|
+
"fontColor": { "solid": { "color": "#1A1A1A" } },
|
|
209
|
+
"backColor": { "solid": { "color": "#FFFFFF" } },
|
|
210
|
+
"fontSize": 12
|
|
211
|
+
}]
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"pivotTable": {
|
|
215
|
+
"*": {
|
|
216
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
217
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
218
|
+
"grid": [{
|
|
219
|
+
"gridVertical": true,
|
|
220
|
+
"gridVerticalColor": { "solid": { "color": "#CCCCCC" } },
|
|
221
|
+
"gridHorizontal": true,
|
|
222
|
+
"gridHorizontalColor": { "solid": { "color": "#CCCCCC" } }
|
|
223
|
+
}],
|
|
224
|
+
"columnHeaders": [{
|
|
225
|
+
"fontColor": { "solid": { "color": "#FFFFFF" } },
|
|
226
|
+
"backColor": { "solid": { "color": "#0072B2" } },
|
|
227
|
+
"fontSize": 13
|
|
228
|
+
}],
|
|
229
|
+
"rowHeaders": [{
|
|
230
|
+
"fontColor": { "solid": { "color": "#1A1A1A" } },
|
|
231
|
+
"backColor": { "solid": { "color": "#E6E6E6" } },
|
|
232
|
+
"fontSize": 12
|
|
233
|
+
}]
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
"slicer": {
|
|
237
|
+
"*": {
|
|
238
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
239
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
240
|
+
"header": [{
|
|
241
|
+
"show": true,
|
|
242
|
+
"fontColor": { "solid": { "color": "#1A1A1A" } },
|
|
243
|
+
"fontSize": 14
|
|
244
|
+
}],
|
|
245
|
+
"items": [{
|
|
246
|
+
"fontColor": { "solid": { "color": "#1A1A1A" } },
|
|
247
|
+
"background": { "solid": { "color": "#FFFFFF" } },
|
|
248
|
+
"fontSize": 12
|
|
249
|
+
}]
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"scatterChart": {
|
|
253
|
+
"*": {
|
|
254
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
255
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
256
|
+
"dataPoint": [{ "markerSize": 10 }]
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
"treemap": {
|
|
260
|
+
"*": {
|
|
261
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
262
|
+
"border": [{ "color": "#333333", "radius": 4 }],
|
|
263
|
+
"labels": [{ "fontSize": 12 }]
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"map": {
|
|
267
|
+
"*": {
|
|
268
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
269
|
+
"border": [{ "color": "#333333", "radius": 4 }]
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"filledMap": {
|
|
273
|
+
"*": {
|
|
274
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
275
|
+
"border": [{ "color": "#333333", "radius": 4 }]
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
"shapeMap": {
|
|
279
|
+
"*": {
|
|
280
|
+
"background": [{ "color": { "solid": { "color": "#FFFFFF" } } }],
|
|
281
|
+
"border": [{ "color": "#333333", "radius": 4 }]
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
"textbox": {
|
|
285
|
+
"*": {
|
|
286
|
+
"background": [{ "color": { "solid": { "color": "transparent" } } }]
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
"image": {
|
|
290
|
+
"*": {
|
|
291
|
+
"background": [{ "color": { "solid": { "color": "transparent" } } }]
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
"shape": {
|
|
295
|
+
"*": {
|
|
296
|
+
"fill": [{ "solid": { "color": "#0072B2" } }],
|
|
297
|
+
"line": [{ "lineColor": { "solid": { "color": "#0072B2" } }, "weight": 2 }]
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
"actionButton": {
|
|
301
|
+
"*": {
|
|
302
|
+
"fill": [{ "solid": { "color": "#0072B2" } }],
|
|
303
|
+
"text": [{ "fontColor": { "solid": { "color": "#FFFFFF" } }, "fontSize": 14 }]
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|