diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index 9921e42..d91595a 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -10,7 +10,8 @@
"Bash(npx tsc:*)",
"WebFetch(domain:github.com)",
"Bash(npm install:*)",
- "WebFetch(domain:raw.githubusercontent.com)"
+ "WebFetch(domain:raw.githubusercontent.com)",
+ "Bash(npm run css:analyze:*)"
],
"deny": [],
"ask": []
diff --git a/analyze-css.js b/analyze-css.js
index f4d230e..1ffd7aa 100644
--- a/analyze-css.js
+++ b/analyze-css.js
@@ -19,11 +19,11 @@ console.log('š Running PurgeCSS analysis...');
async function runPurgeCSS() {
const purgeCSSResults = await new PurgeCSS().purge({
content: [
- './src/**/*.ts',
- './wwwroot/**/*.html'
+ './src/v2/**/*.ts',
+ './wwwroot/v2.html'
],
css: [
- './wwwroot/css/*.css'
+ './wwwroot/css/v2/*.css'
],
rejected: true,
rejectedCss: true,
@@ -110,13 +110,10 @@ async function runPurgeCSS() {
console.log('\nš Running CSS Stats analysis...');
function runCSSStats() {
const cssFiles = [
- './wwwroot/css/calendar-base-css.css',
- './wwwroot/css/calendar-components-css.css',
- './wwwroot/css/calendar-events-css.css',
- './wwwroot/css/calendar-layout-css.css',
- './wwwroot/css/calendar-month-css.css',
- './wwwroot/css/calendar-popup-css.css',
- './wwwroot/css/calendar-sliding-animation.css'
+ './wwwroot/css/v2/calendar-v2.css',
+ './wwwroot/css/v2/calendar-v2-base.css',
+ './wwwroot/css/v2/calendar-v2-layout.css',
+ './wwwroot/css/v2/calendar-v2-events.css'
];
const stats = {};
diff --git a/reports/css-analysis-report.html b/reports/css-analysis-report.html
index 8091d64..586ad68 100644
--- a/reports/css-analysis-report.html
+++ b/reports/css-analysis-report.html
@@ -141,19 +141,19 @@
Total CSS Size
-
36.99 KB
+
17.00 KB
Unused CSS Rules
-
71
+
23
Potential Removal
-
0.22%
+
0.15%
@@ -174,73 +174,43 @@
- | calendar-base-css.css |
- 5.14 KB |
- 242 |
- 25 |
- 29 |
- 107 |
- 27 |
-
-
-
- | calendar-components-css.css |
- 4.28 KB |
- 236 |
- 26 |
- 36 |
- 116 |
- 4 |
-
-
-
- | calendar-events-css.css |
- 6.50 KB |
- 308 |
- 41 |
- 45 |
- 139 |
- 4 |
-
-
-
- | calendar-layout-css.css |
- 10.59 KB |
- 1 |
- 84 |
- 84 |
- 237 |
- 12 |
-
-
-
- | calendar-month-css.css |
- 6.59 KB |
- 315 |
- 51 |
- 54 |
- 155 |
- 10 |
-
-
-
- | calendar-popup-css.css |
- 3.32 KB |
- 193 |
- 23 |
- 31 |
- 97 |
- 5 |
-
-
-
- | calendar-sliding-animation.css |
- 0.57 KB |
- 24 |
- 3 |
- 4 |
- 9 |
+ calendar-v2.css |
+ 0.18 KB |
+ 7 |
0 |
+ 0 |
+ 1 |
+ 0 |
+
+
+
+ | calendar-v2-base.css |
+ 1.66 KB |
+ 67 |
+ 3 |
+ 3 |
+ 47 |
+ 32 |
+
+
+
+ | calendar-v2-layout.css |
+ 6.39 KB |
+ 308 |
+ 38 |
+ 48 |
+ 153 |
+ 1 |
+
+
+
+ | calendar-v2-events.css |
+ 8.77 KB |
+ 383 |
+ 54 |
+ 62 |
+ 196 |
+ 5 |
@@ -251,54 +221,33 @@
šļø Unused CSS by File
-
test-nesting.css
-
-
- 5 unused rules
-
-
- Original: 154 | After purge: 0
-
-
-
-
- Show unused selectors
-
- .test-container
.test-container .test-child
:is(.test-container .test-child):hover
.test-container .test-nested
:is(.test-container .test-nested) .deep-nested
-
-
-
-
-
-
-
-
calendar-sliding-animation.css
+
calendar-v2.css
0 unused rules
- Original: 588 | After purge: 588
+ Original: 186 | After purge: 186
ā
No unused CSS found!
-
calendar-popup-css.css
+
calendar-v2-layout.css
- 5 unused rules
+ 3 unused rules
- Original: 3023 | After purge: 2939
+ Original: 6275 | After purge: 6203
Show unused selectors
- &[data-align="right"]
&[data-align="left"]
&:hover
&:active
&[data-action="close"]:hover
+ &:hover
&[data-levels="resource date"]
&[data-levels="team resource date"]
@@ -306,20 +255,21 @@
-
calendar-month-css.css
+
calendar-v2-events.css
- 15 unused rules
+ 20 unused rules
- Original: 5925 | After purge: 5485
+ Original: 7298 | After purge: 6810
Show unused selectors
- .month-event.category-meeting
.month-event.category-deadline
.month-event.category-work
.month-event.category-personal
.month-event.duration-30min
.month-event.duration-1h
.month-event.duration-1h30
.month-event.duration-2h
.month-event.duration-3h
.month-event.duration-4h
swp-calendar[data-view="month"][data-loading="true"] .month-grid
.month-grid.sliding-out-left
.month-grid.sliding-out-right
.month-grid.sliding-in-left
.month-grid.sliding-in-right
+ &:hover
&[data-continues-before="true"]
&[data-continues-after="true"]
swp-events-layer[data-filter-active="true"] swp-event
swp-events-layer[data-filter-active="true"] swp-event[data-matches="true"]
swp-event[data-stack-link]:not([data-stack-link*='"stackLevel":0'])
+swp-event-group[data-stack-link]:not([data-stack-link*='"stackLevel":0']) swp-event
.is-pink
.is-magenta
.is-violet
.is-deep-purple
.is-indigo
.is-light-blue
.is-cyan
.is-teal
.is-light-green
.is-lime
.is-yellow
.is-orange
.is-deep-orange
@@ -327,89 +277,16 @@
-
calendar-layout-css.css
+
calendar-v2-base.css
- 19 unused rules
+ 0 unused rules
- Original: 9940 | After purge: 8956
+ Original: 1701 | After purge: 1701
-
-
- Show unused selectors
-
- -out
swp-day-header[data-today=true]
swp-day-header[data-today=true] swp-day-name
swp-day-header[data-today=true] swp-day-date
swp-resource-avatar img
[data-type=meeting]:is(swp-allday-container swp-allday-event)
[data-type=meal]:is(swp-allday-container swp-allday-event)
[data-type=milestone]:is(swp-allday-container swp-allday-event)
[data-type=personal]:is(swp-allday-container swp-allday-event)
[data-type=deadline]:is(swp-allday-container swp-allday-event)
.highlight[data-type=meeting]:is(swp-allday-container swp-allday-event)
.highlight[data-type=meal]:is(swp-allday-container swp-allday-event)
.highlight[data-type=milestone]:is(swp-allday-container swp-allday-event)
.highlight[data-type=personal]:is(swp-allday-container swp-allday-event)
.highlight[data-type=deadline]:is(swp-allday-container swp-allday-event)
:is(swp-scrollable-content::-webkit-scrollbar-thumb):hover
swp-day-column[data-work-hours=off]
swp-day-column[data-work-hours=off]:after
swp-day-column[data-work-hours=off]:before
-
-
-
-
-
-
-
-
calendar-events-css.css
-
-
- 15 unused rules
-
-
- Original: 4815 | After purge: 4344
-
-
-
-
- Show unused selectors
-
- &[data-type="meeting"]
&[data-type="meal"]
&[data-type="milestone"]
&[data-type="personal"]
&[data-type="deadline"]
&.hover[data-type="meeting"]
&.hover[data-type="meal"]
&.hover[data-type="milestone"]
&.hover[data-type="personal"]
&.hover[data-type="deadline"]
&[data-continues-before="true"]
&[data-continues-after="true"]
&:hover
swp-event[data-stack-link]:not([data-stack-link*='"stackLevel":0'])
-swp-event-group[data-stack-link]:not([data-stack-link*='"stackLevel":0']) swp-event
-
-
-
-
-
-
-
-
calendar-components-css.css
-
-
- 8 unused rules
-
-
- Original: 3476 | After purge: 3340
-
-
-
-
- Show unused selectors
-
- &:hover
&:active
&:not(:last-child)
&:hover:not([disabled])
&[disabled]
&:focus
swp-calendar[data-searching="true"]
&[data-search-match="true"]
-
-
-
-
-
-
-
-
calendar-base-css.css
-
-
- 4 unused rules
-
-
- Original: 5066 | After purge: 4888
-
-
-
-
- Show unused selectors
-
- swp-day-columns swp-event.text-selectable swp-day-columns swp-event-title
-swp-day-columns swp-event.text-selectable swp-day-columns swp-event-time
:focus
:focus:not(:focus-visible)
-
-
-
-
+
ā
No unused CSS found!
@@ -420,12 +297,12 @@ swp-day-columns swp-event.text-selectable swp-day-columns swp-event-time
:foc
ā
CSS usage is relatively clean.
š¦ Consider consolidating similar styles to reduce duplication.
- šØ Review color palette - found 62 unique colors across all files.
+ šØ Review color palette - found 38 unique colors across all files.
š Implement a build process to automatically remove unused CSS in production.
- Report generated: 1.11.2025, 23.12.02
+ Report generated: 11.12.2025, 00.08.52