@thejaredwilcurt/csslop 0.0.8 → 0.0.9
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 +11 -1
- package/package.json +11 -5
- package/site/assets/CSSLOP-KqihQ_En.js +2 -0
- package/site/assets/CSSLOP-KqihQ_En.js.map +1 -0
- package/site/assets/codemirror-BJgHO250.js +13 -0
- package/site/assets/codemirror-BJgHO250.js.map +1 -0
- package/site/assets/{codemirror-lang-css-CnXScSYC.js → codemirror-lang-css-BZgt8Gl_.js} +2 -2
- package/site/assets/{codemirror-lang-css-CnXScSYC.js.map → codemirror-lang-css-BZgt8Gl_.js.map} +1 -1
- package/site/assets/index-9t3YlATS.js +3 -0
- package/site/assets/index-9t3YlATS.js.map +1 -0
- package/site/assets/lib-B1rwTJiT.js +2 -0
- package/site/assets/lib-B1rwTJiT.js.map +1 -0
- package/site/real/30days30submits-18-v0.0.0.css +1 -0
- package/site/real/3dtransforms-v0.0.0.css +1 -0
- package/site/real/960.gs-v0.0.0.css +1 -0
- package/site/real/98-v0.1.18.css +1 -0
- package/site/real/academicons-v1.9.6.css +1 -0
- package/site/real/admin-lte-v4.0.0.css +1 -0
- package/site/real/adminhub-v1.0.0.css +594 -0
- package/site/real/amoled-cord-v5.0.11.css +1 -0
- package/site/real/animate-v4.1.1.css +1 -0
- package/site/real/animating-hamburger-icons-v0.1.0.css +1 -0
- package/site/real/animo-v1.0.3.css +1 -0
- package/site/real/animsition-v4.0.2.css +1 -0
- package/site/real/awesome-bootstrap-checkbox-v0.3.7.css +1 -0
- package/site/real/balloon-v1.0.0.css +1 -0
- package/site/real/basscss-v8.1.0.css +1 -0
- package/site/real/beercss-v4.0.21.css +1 -0
- package/site/real/blooger-website-v0.0.0.css +583 -0
- package/site/real/blue-topaz-obsidian-v6.0.0.css +1 -0
- package/site/real/boilerform-v1.1.2.css +1 -0
- package/site/real/bojler-v3.2.1.css +1 -0
- package/site/real/bootplus-v1.0.5.css +1 -0
- package/site/real/bootstrap-4-v4.6.2.css +1 -0
- package/site/real/bootstrap-5-v5.3.8.css +1 -0
- package/site/real/bttn-v0.2.4.css +1 -0
- package/site/real/bulma-v1.0.4.css +1 -0
- package/site/real/carbon-v1.107.0.css +1 -0
- package/site/real/cardinal-v3.7.0.css +1 -0
- package/site/real/checka11y-v2.5.0.css +1632 -0
- package/site/real/chota-v0.9.2.css +1 -0
- package/site/real/cirrus-v0.8.0.css +1 -0
- package/site/real/classless-v1.0.0.css +1 -0
- package/site/real/cleanslate-v0.10.1.css +1 -0
- package/site/real/clickeffects-v0.0.0.css +1548 -0
- package/site/real/codyframe-v4.0.9.css +1 -0
- package/site/real/colofilter-v0.0.0.css +1 -0
- package/site/real/concise-v4.0.1.css +1 -0
- package/site/real/crayon-v1.0.0.css +277 -0
- package/site/real/crookedstylesheets-v0.0.0.css +1 -0
- package/site/real/cs16-v0.0.0.css +1 -0
- package/site/real/css-diner-v0.0.0.css +1 -0
- package/site/real/css-extras-v0.4.0.css +1 -0
- package/site/real/css-social-buttons-v1.4.0.css +1 -0
- package/site/real/css-spinners-v2.2.0.css +1 -0
- package/site/real/css3-buttons-v0.0.0.css +1 -0
- package/site/real/cssco-v1.1.0.css +1 -0
- package/site/real/cssicon-v1.0.0.css +1 -0
- package/site/real/cssplot-v0.0.0.css +1 -0
- package/site/real/csszengarden-215-v0.0.0.css +1 -0
- package/site/real/cutestrap1-v1.3.1.css +1 -0
- package/site/real/cutestrap2-v2.0.0.css +1 -0
- package/site/real/destyle-v4.0.1.css +1 -0
- package/site/real/devices-v0.2.0.css +1 -0
- package/site/real/doxygen-awesome-v2.4.2.css +1 -0
- package/site/real/effeckt-v0.5.0.css +1 -0
- package/site/real/elegantfin-v25.12.31.css +1 -0
- package/site/real/enferno-v13.1.1.css +1 -0
- package/site/real/evil-v0.0.0.css +1 -0
- package/site/real/facebook-buttons-v1.0.0.css +1 -0
- package/site/real/ff-ultima-v4.3.0.css +1 -0
- package/site/real/fileicon-v0.1.1.css +1 -0
- package/site/real/finimalism-v12.0.0.css +6332 -0
- package/site/real/firefox-one-v3.7.0.css +174 -0
- package/site/real/firefox-uwp-style-v0.0.0.css +1608 -0
- package/site/real/flakes-v1.0.1.css +1 -0
- package/site/real/flex-layout-attribute-v1.0.3.css +1 -0
- package/site/real/fluentbird-v1.1.2.css +1 -0
- package/site/real/fomantic-v2.9.4.css +1 -0
- package/site/real/font-awesome-v7.2.0.css +1 -0
- package/site/real/foundation-v6.9.0.css +1 -0
- package/site/real/freebies-v0.0.0.css +1 -0
- package/site/real/furatto-v3.1.1.css +1 -0
- package/site/real/gallery-v1.0.2.css +1 -0
- package/site/real/github-dark-v6.3.0.css +1 -0
- package/site/real/github-markdown-v5.9.0.css +1 -0
- package/site/real/github-windows-v0.6.0.css +1 -0
- package/site/real/gitweb-theme-v0.0.0.css +1 -0
- package/site/real/google-type-v0.0.0.css +1 -0
- package/site/real/gridism-v0.2.2.css +1 -0
- package/site/real/gridlex-v2.7.1.css +1 -0
- package/site/real/gumby-v2.6.4.css +1 -0
- package/site/real/gutenberg-v0.7.0.css +1 -0
- package/site/real/halfmoon-v2.0.2.css +1 -0
- package/site/real/halfstyle-v2.0.2.css +1 -0
- package/site/real/hint-v3.0.0.css +1 -0
- package/site/real/holmes-v6.8.12.css +1 -0
- package/site/real/hover-buttons-v0.15.0.css +2960 -0
- package/site/real/html-sheets-of-paper-v0.0.0.css +1 -0
- package/site/real/hugo-universal-theme-v1.4.1.css +1 -0
- package/site/real/icon-hover-effects-v0.0.0.css +1 -0
- package/site/real/instagram-v0.1.4.css +1 -0
- package/site/real/jupyter-themes-v0.20.0.css +1 -0
- package/site/real/justified-v0.0.0.css +1 -0
- package/site/real/kickoff-v8.0.0.css +1 -0
- package/site/real/knacss-v8.2.0.css +1 -0
- package/site/real/less-framework-v0.0.0.css +1 -0
- package/site/real/linktree-v0.0.0.css +1 -0
- package/site/real/littlebox-v0.0.4.css +1 -0
- package/site/real/load-awesome-v1.1.0.css +1 -0
- package/site/real/loaders-v0.1.2.css +1 -0
- package/site/real/luxbar-v0.3.0.css +1 -0
- package/site/real/lynx-v1.4.0.css +1 -0
- package/site/real/markdown-css-v0.0.0.css +1 -0
- package/site/real/material-for-bootstrap-v4.1.1.css +1 -0
- package/site/real/medium.css-v1.0.2.css +1 -0
- package/site/real/meyer-v2.0.0.css +1 -0
- package/site/real/microsoft-metro-buttons-v1.2.0.css +1 -0
- package/site/real/microtip-v0.2.2.css +1 -0
- package/site/real/mini-v3.0.1.css +1 -0
- package/site/real/minireset-v0.0.7.css +1 -0
- package/site/real/missing-v1.3.0.css +1 -0
- package/site/real/mobi-v3.1.1.css +1 -0
- package/site/real/mocka-v1.0.1.css +1 -0
- package/site/real/modern-css-resets-v1.4.0.css +1 -0
- package/site/real/mvcss-v4.1.0.css +1347 -0
- package/site/real/mvp-v1.17.3.css +1 -0
- package/site/real/my-internet-v1.0.0.css +692 -0
- package/site/real/natural-selection-v0.0.0.css +1 -0
- package/site/real/nes-v2.3.0.css +1 -0
- package/site/real/normalize-v8.0.1.css +1 -0
- package/site/real/object-fit-polyfill-v0.3.4.css +1 -0
- package/site/real/obnoxious-v3.5.2.css +1 -0
- package/site/real/obsidian-colored-sidebar-v2.0.0.css +1 -0
- package/site/real/obsidian-modular-css-layout-v0.10.0.css +1 -0
- package/site/real/obsidian-notebook-themes-v2.2.3.css +1 -0
- package/site/real/off-canvas-menu-effects-v0.0.0.css +1 -0
- package/site/real/orbit-v1.4.11.css +1 -0
- package/site/real/orgcss-v9.2.3.css +2464 -0
- package/site/real/paper-v0.4.1.css +1 -0
- package/site/real/patternbolt-v0.0.0.css +1 -0
- package/site/real/patternfly-v6.5.2.css +1 -0
- package/site/real/pesticide-v1.3.0.css +1 -0
- package/site/real/phonon-v1.5.1.css +6232 -0
- package/site/real/photon-v0.1.2.css +1 -0
- package/site/real/picnic-v7.1.0.css +1 -0
- package/site/real/pico-v2.1.1.css +1 -0
- package/site/real/pills-v1.0.1.css +1 -0
- package/site/real/portfolio-template-v0.0.0.css +1 -0
- package/site/real/preboot-v2.0.0.css +1 -0
- package/site/real/pretty-checkbox-v3.0.3.css +1 -0
- package/site/real/progress-tracker-v3.0.0.css +1 -0
- package/site/real/protonmail-themes-v4.0.8.css +276 -0
- package/site/real/proxmorph-v2.7.3.css +1 -0
- package/site/real/pure-v3.0.0.css +1 -0
- package/site/real/pygments-fruity-v1.0.0.css +1 -0
- package/site/real/ratchet-v2.0.2.css +1 -0
- package/site/real/remedy-quotes-v0.1.0.css +1 -0
- package/site/real/remedy-v0.1.0.css +1 -0
- package/site/real/repaintless-v1.4.0.css +1 -0
- package/site/real/reset-v1.0.2.css +1 -0
- package/site/real/responsive-4-v4.1.4.css +1 -0
- package/site/real/responsive-5-v5.0.0.css +1 -0
- package/site/real/ress-v5.0.2.css +1 -0
- package/site/real/rippleui-v1.12.1.css +1 -0
- package/site/real/sakura-v1.5.1.css +1 -0
- package/site/real/sanitize-v13.0.0.css +1 -0
- package/site/real/sapc-apca-v0.0.0.css +1 -0
- package/site/real/select-v3.2.0.css +1 -0
- package/site/real/select2-bootstrap-v1.2.5.css +1 -0
- package/site/real/semantic-v2.5.0.css +1 -0
- package/site/real/shards-v3.0.0.css +1 -0
- package/site/real/shina-fox-v0.1.0.css +1 -0
- package/site/real/sierra-v3.5.0.css +1 -0
- package/site/real/simple-grid-v0.0.0.css +1 -0
- package/site/real/simple-line-icons-v2.5.4.css +1 -0
- package/site/real/simple-v2.3.7.css +1 -0
- package/site/real/simptip-v1.0.4.css +1 -0
- package/site/real/skeleton-v2.0.4.css +1 -0
- package/site/real/slitslider-v1.1.0.css +115 -0
- package/site/real/social-signin-buttons-v0.0.0.css +1 -0
- package/site/real/spcss-v0.9.0.css +1 -0
- package/site/real/spectre-v0.5.9.css +1 -0
- package/site/real/spicetify-bloom-v0.0.0.css +1 -0
- package/site/real/spicetify-dribbblish-v0.0.0.css +1 -0
- package/site/real/spicetify-text-v0.0.0.css +1 -0
- package/site/real/spinkit-v2.0.1.css +1 -0
- package/site/real/stackicons-v1.13.0.css +1 -0
- package/site/real/stackoverflow-dark-v5.1.2.css +1 -0
- package/site/real/stacks-v2.8.6.css +1 -0
- package/site/real/swagger-ui-themes-2-v2.1.0.css +1 -0
- package/site/real/swagger-ui-themes-3-v3.0.1.css +1 -0
- package/site/real/system-v0.1.11.css +1 -0
- package/site/real/tablecloth-v1.0.0.css +1 -0
- package/site/real/tachyons-v4.12.0.css +1 -0
- package/site/real/tailwind-cards-v0.0.0.css +1 -0
- package/site/real/tailwind-v2.2.19.css +1 -0
- package/site/real/the-50-front-end-project-44-v0.0.0.css +1 -0
- package/site/real/the-new-css-reset-v1.11.3.css +1 -0
- package/site/real/toast-v1.1.0.css +1 -0
- package/site/real/tocas-v5.7.0.css +1 -0
- package/site/real/tooltip-twispy-v1.0.6.css +1 -0
- package/site/real/tootik-v1.0.2.css +428 -0
- package/site/real/tuesday-v1.3.0.css +1115 -0
- package/site/real/tufte-v1.8.0.css +1 -0
- package/site/real/tui-v2.1.2.css +1 -0
- package/site/real/tw-animate-css-v1.4.0.css +1 -0
- package/site/real/uikit-v3.25.17.css +1 -0
- package/site/real/unfold-v0.0.0.css +3569 -0
- package/site/real/universal-v0.0.0.css +1 -0
- package/site/real/uswds-v3.13.0.css +1 -0
- package/site/real/utility-opentype-v0.1.4.css +1 -0
- package/site/real/vim-css3-syntax-v2.10.0.css +1 -0
- package/site/real/virtual-bookshelf-v1.1.0.css +211 -0
- package/site/real/vitepress-v1.6.4.css +1 -0
- package/site/real/vivify-v1.0.0.css +1 -0
- package/site/real/voxels-v1.0.0.css +1 -0
- package/site/real/w3css-v4.10.0.css +233 -0
- package/site/real/waffle-grid-v1.3.6.css +1 -0
- package/site/real/water-v2.1.1.css +1 -0
- package/site/real/weather-icons-v2.0.10.css +1 -0
- package/site/real/webgradients-v0.0.0.css +1 -0
- package/site/real/wenk-v1.0.8.css +1 -0
- package/site/real/wikipedia-dark-v3.7.9.css +1 -0
- package/site/real/windows-95-v0.0.0.css +1 -0
- package/site/real/windows-98-v0.0.1.css +1 -0
- package/site/real/wing-v1.0.0.css +1 -0
- package/site/real/woah-v1.3.1.css +1 -0
- package/site/real/wtf-forms-v2.2.0.css +1 -0
- package/site/real/yacy-v4.1.2.css +1 -0
- package/site/real/yue-v1.1.1.css +1 -0
- package/site/real/zotero-dark-theme-v0.0.0.css +1 -0
- package/site/real.json +100 -0
- package/src/declarations/process.js +5 -0
- package/src/index.js +135 -1
- package/src/rules/optimize.js +22 -1
- package/src/rules/stringify.js +67 -1
- package/src/value/minify.js +116 -25
- package/src/value/quotes.js +62 -0
- package/site/assets/CSSLOP-DIcsfyiN.js +0 -2
- package/site/assets/CSSLOP-DIcsfyiN.js.map +0 -1
- package/site/assets/codemirror-CRWP0c-o.js +0 -13
- package/site/assets/codemirror-CRWP0c-o.js.map +0 -1
- package/site/assets/index-BtSQKlYm.js +0 -4
- package/site/assets/index-BtSQKlYm.js.map +0 -1
package/site/real.json
CHANGED
|
@@ -29,6 +29,11 @@
|
|
|
29
29
|
"name": "AdminLTE",
|
|
30
30
|
"size": 410009
|
|
31
31
|
},
|
|
32
|
+
{
|
|
33
|
+
"fileName": "adminhub-v1.0.0.css",
|
|
34
|
+
"name": "AdminHub",
|
|
35
|
+
"size": 10992
|
|
36
|
+
},
|
|
32
37
|
{
|
|
33
38
|
"fileName": "amoled-cord-v5.0.11.css",
|
|
34
39
|
"name": "AMOLED-cord",
|
|
@@ -74,6 +79,11 @@
|
|
|
74
79
|
"name": "Beer CSS",
|
|
75
80
|
"size": 107117
|
|
76
81
|
},
|
|
82
|
+
{
|
|
83
|
+
"fileName": "blooger-website-v0.0.0.css",
|
|
84
|
+
"name": "Blooger_Website",
|
|
85
|
+
"size": 10667
|
|
86
|
+
},
|
|
77
87
|
{
|
|
78
88
|
"fileName": "blue-topaz-obsidian-v6.0.0.css",
|
|
79
89
|
"name": "Blue-Topaz Obsidian",
|
|
@@ -124,6 +134,11 @@
|
|
|
124
134
|
"name": "Cardinal",
|
|
125
135
|
"size": 160885
|
|
126
136
|
},
|
|
137
|
+
{
|
|
138
|
+
"fileName": "checka11y-v2.5.0.css",
|
|
139
|
+
"name": "Checka11y",
|
|
140
|
+
"size": 84136
|
|
141
|
+
},
|
|
127
142
|
{
|
|
128
143
|
"fileName": "chota-v0.9.2.css",
|
|
129
144
|
"name": "Chota",
|
|
@@ -144,6 +159,11 @@
|
|
|
144
159
|
"name": "CleanSlate",
|
|
145
160
|
"size": 20543
|
|
146
161
|
},
|
|
162
|
+
{
|
|
163
|
+
"fileName": "clickeffects-v0.0.0.css",
|
|
164
|
+
"name": "ClickEffects",
|
|
165
|
+
"size": 33700
|
|
166
|
+
},
|
|
147
167
|
{
|
|
148
168
|
"fileName": "codyframe-v4.0.9.css",
|
|
149
169
|
"name": "CodeFrame",
|
|
@@ -159,6 +179,11 @@
|
|
|
159
179
|
"name": "Concise",
|
|
160
180
|
"size": 17115
|
|
161
181
|
},
|
|
182
|
+
{
|
|
183
|
+
"fileName": "crayon-v1.0.0.css",
|
|
184
|
+
"name": "Crayon",
|
|
185
|
+
"size": 6861
|
|
186
|
+
},
|
|
162
187
|
{
|
|
163
188
|
"fileName": "crookedstylesheets-v0.0.0.css",
|
|
164
189
|
"name": "CrookedStyleSheets",
|
|
@@ -274,6 +299,21 @@
|
|
|
274
299
|
"name": "Fileicon",
|
|
275
300
|
"size": 2765
|
|
276
301
|
},
|
|
302
|
+
{
|
|
303
|
+
"fileName": "finimalism-v12.0.0.css",
|
|
304
|
+
"name": "Finimalism",
|
|
305
|
+
"size": 189023
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"fileName": "firefox-one-v3.7.0.css",
|
|
309
|
+
"name": "Firefox-ONE",
|
|
310
|
+
"size": 7849
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"fileName": "firefox-uwp-style-v0.0.0.css",
|
|
314
|
+
"name": "Firefox-UWP-Style",
|
|
315
|
+
"size": 48593
|
|
316
|
+
},
|
|
277
317
|
{
|
|
278
318
|
"fileName": "flakes-v1.0.1.css",
|
|
279
319
|
"name": "Flakes",
|
|
@@ -384,6 +424,11 @@
|
|
|
384
424
|
"name": "Holmes",
|
|
385
425
|
"size": 12527
|
|
386
426
|
},
|
|
427
|
+
{
|
|
428
|
+
"fileName": "hover-buttons-v0.15.0.css",
|
|
429
|
+
"name": "Hover Buttons",
|
|
430
|
+
"size": 53032
|
|
431
|
+
},
|
|
387
432
|
{
|
|
388
433
|
"fileName": "html-sheets-of-paper-v0.0.0.css",
|
|
389
434
|
"name": "HTML Sheets of Paper",
|
|
@@ -519,11 +564,21 @@
|
|
|
519
564
|
"name": "Modern CSS Resets",
|
|
520
565
|
"size": 1307
|
|
521
566
|
},
|
|
567
|
+
{
|
|
568
|
+
"fileName": "mvcss-v4.1.0.css",
|
|
569
|
+
"name": "MVCSS",
|
|
570
|
+
"size": 24333
|
|
571
|
+
},
|
|
522
572
|
{
|
|
523
573
|
"fileName": "mvp-v1.17.3.css",
|
|
524
574
|
"name": "MVP",
|
|
525
575
|
"size": 10327
|
|
526
576
|
},
|
|
577
|
+
{
|
|
578
|
+
"fileName": "my-internet-v1.0.0.css",
|
|
579
|
+
"name": "My Internet",
|
|
580
|
+
"size": 17831
|
|
581
|
+
},
|
|
527
582
|
{
|
|
528
583
|
"fileName": "natural-selection-v0.0.0.css",
|
|
529
584
|
"name": "Natural Selection",
|
|
@@ -574,6 +629,11 @@
|
|
|
574
629
|
"name": "Orbit",
|
|
575
630
|
"size": 156028
|
|
576
631
|
},
|
|
632
|
+
{
|
|
633
|
+
"fileName": "orgcss-v9.2.3.css",
|
|
634
|
+
"name": "OrgCSS",
|
|
635
|
+
"size": 50112
|
|
636
|
+
},
|
|
577
637
|
{
|
|
578
638
|
"fileName": "paper-v0.4.1.css",
|
|
579
639
|
"name": "Paper",
|
|
@@ -594,6 +654,11 @@
|
|
|
594
654
|
"name": "Pesticide",
|
|
595
655
|
"size": 20149
|
|
596
656
|
},
|
|
657
|
+
{
|
|
658
|
+
"fileName": "phonon-v1.5.1.css",
|
|
659
|
+
"name": "Phonon",
|
|
660
|
+
"size": 159930
|
|
661
|
+
},
|
|
597
662
|
{
|
|
598
663
|
"fileName": "photon-v0.1.2.css",
|
|
599
664
|
"name": "Photon",
|
|
@@ -634,6 +699,11 @@
|
|
|
634
699
|
"name": "Progress Tracker",
|
|
635
700
|
"size": 9391
|
|
636
701
|
},
|
|
702
|
+
{
|
|
703
|
+
"fileName": "protonmail-themes-v4.0.8.css",
|
|
704
|
+
"name": "ProtonMail Themes",
|
|
705
|
+
"size": 8606
|
|
706
|
+
},
|
|
637
707
|
{
|
|
638
708
|
"fileName": "proxmorph-v2.7.3.css",
|
|
639
709
|
"name": "ProxMorph",
|
|
@@ -764,6 +834,11 @@
|
|
|
764
834
|
"name": "Skeleton",
|
|
765
835
|
"size": 11519
|
|
766
836
|
},
|
|
837
|
+
{
|
|
838
|
+
"fileName": "slitslider-v1.1.0.css",
|
|
839
|
+
"name": "SlitSlider",
|
|
840
|
+
"size": 2240
|
|
841
|
+
},
|
|
767
842
|
{
|
|
768
843
|
"fileName": "social-signin-buttons-v0.0.0.css",
|
|
769
844
|
"name": "Social Sign-in Buttons",
|
|
@@ -874,6 +949,16 @@
|
|
|
874
949
|
"name": "Tooltip Twispy",
|
|
875
950
|
"size": 6378
|
|
876
951
|
},
|
|
952
|
+
{
|
|
953
|
+
"fileName": "tootik-v1.0.2.css",
|
|
954
|
+
"name": "Tootik",
|
|
955
|
+
"size": 44368
|
|
956
|
+
},
|
|
957
|
+
{
|
|
958
|
+
"fileName": "tuesday-v1.3.0.css",
|
|
959
|
+
"name": "Tuesday",
|
|
960
|
+
"size": 27216
|
|
961
|
+
},
|
|
877
962
|
{
|
|
878
963
|
"fileName": "tufte-v1.8.0.css",
|
|
879
964
|
"name": "Tufte",
|
|
@@ -894,6 +979,11 @@
|
|
|
894
979
|
"name": "UIkit",
|
|
895
980
|
"size": 400799
|
|
896
981
|
},
|
|
982
|
+
{
|
|
983
|
+
"fileName": "unfold-v0.0.0.css",
|
|
984
|
+
"name": "Unfold",
|
|
985
|
+
"size": 90068
|
|
986
|
+
},
|
|
897
987
|
{
|
|
898
988
|
"fileName": "universal-v0.0.0.css",
|
|
899
989
|
"name": "Universal.css",
|
|
@@ -914,6 +1004,11 @@
|
|
|
914
1004
|
"name": "Vim CSS3 Syntax",
|
|
915
1005
|
"size": 32291
|
|
916
1006
|
},
|
|
1007
|
+
{
|
|
1008
|
+
"fileName": "virtual-bookshelf-v1.1.0.css",
|
|
1009
|
+
"name": "Virtual Bookshelf",
|
|
1010
|
+
"size": 5068
|
|
1011
|
+
},
|
|
917
1012
|
{
|
|
918
1013
|
"fileName": "vitepress-v1.6.4.css",
|
|
919
1014
|
"name": "VitePress",
|
|
@@ -929,6 +1024,11 @@
|
|
|
929
1024
|
"name": "Voxels",
|
|
930
1025
|
"size": 4808
|
|
931
1026
|
},
|
|
1027
|
+
{
|
|
1028
|
+
"fileName": "w3css-v4.10.0.css",
|
|
1029
|
+
"name": "w3css",
|
|
1030
|
+
"size": 23124
|
|
1031
|
+
},
|
|
932
1032
|
{
|
|
933
1033
|
"fileName": "waffle-grid-v1.3.6.css",
|
|
934
1034
|
"name": "Waffle Grid",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { minifyValue } from '../value/minify.js';
|
|
6
|
+
import { hasInvalidQuotesCount } from '../value/quotes.js';
|
|
6
7
|
import { collapseShorthandParts } from '../value/shared.js';
|
|
7
8
|
|
|
8
9
|
import {
|
|
@@ -498,6 +499,10 @@ function processDeclarations (declarations, context) {
|
|
|
498
499
|
continue;
|
|
499
500
|
}
|
|
500
501
|
|
|
502
|
+
if (propertyName === 'quotes' && hasInvalidQuotesCount(declaration.value)) {
|
|
503
|
+
continue;
|
|
504
|
+
}
|
|
505
|
+
|
|
501
506
|
let minifiedValue = minifyValue(declaration);
|
|
502
507
|
|
|
503
508
|
let previousIndex = -1;
|
package/src/index.js
CHANGED
|
@@ -31,6 +31,138 @@ import {
|
|
|
31
31
|
import { stringifyRule } from './rules/stringify.js';
|
|
32
32
|
import { minifyValue } from './value/minify.js';
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Splits a minified CSS selector list at top-level commas, respecting
|
|
36
|
+
* parenthesized and bracketed groups so that commas inside pseudo-class
|
|
37
|
+
* arguments like `:is(a, b)` are not treated as selector separators.
|
|
38
|
+
*
|
|
39
|
+
* @param {string} selectorList The comma-separated selector list string.
|
|
40
|
+
* @return {Array} An array of individual selector strings.
|
|
41
|
+
*/
|
|
42
|
+
function splitSelectorList (selectorList) {
|
|
43
|
+
const selectors = [];
|
|
44
|
+
let current = '';
|
|
45
|
+
let depth = 0;
|
|
46
|
+
for (const character of selectorList) {
|
|
47
|
+
if (character === '(' || character === '[') {
|
|
48
|
+
depth++;
|
|
49
|
+
current += character;
|
|
50
|
+
} else if (character === ')' || character === ']') {
|
|
51
|
+
depth--;
|
|
52
|
+
current += character;
|
|
53
|
+
} else if (character === ',' && depth === 0) {
|
|
54
|
+
selectors.push(current.trim());
|
|
55
|
+
current = '';
|
|
56
|
+
} else {
|
|
57
|
+
current += character;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const remaining = current.trim();
|
|
61
|
+
if (remaining) {
|
|
62
|
+
selectors.push(remaining);
|
|
63
|
+
}
|
|
64
|
+
return selectors;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Deduplicates a minified CSS selector list string by splitting at top-level
|
|
69
|
+
* commas, removing duplicate selectors, and rejoining with commas.
|
|
70
|
+
*
|
|
71
|
+
* @param {string} selectorList The comma-separated selector list string.
|
|
72
|
+
* @return {string} The deduplicated selector list string.
|
|
73
|
+
*/
|
|
74
|
+
function deduplicateSelectorList (selectorList) {
|
|
75
|
+
const selectors = splitSelectorList(selectorList);
|
|
76
|
+
const seen = new Set();
|
|
77
|
+
const unique = selectors.filter((selector) => {
|
|
78
|
+
if (seen.has(selector)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
seen.add(selector);
|
|
82
|
+
return true;
|
|
83
|
+
});
|
|
84
|
+
return unique.join(',');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Extracts the declaration body (from the opening brace to the end) of a
|
|
89
|
+
* stringified CSS rule. Returns null for at-rules or strings without braces,
|
|
90
|
+
* since those should not participate in selector merging.
|
|
91
|
+
*
|
|
92
|
+
* @param {string} ruleString A stringified CSS rule.
|
|
93
|
+
* @return {string|null} The body substring starting at `{`, or null if not a simple rule.
|
|
94
|
+
*/
|
|
95
|
+
function extractRuleBody (ruleString) {
|
|
96
|
+
// At-rules start with @ and should not be merged by selector
|
|
97
|
+
if (ruleString.startsWith('@')) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const braceIndex = ruleString.indexOf('{');
|
|
101
|
+
if (braceIndex === -1) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
return ruleString.slice(braceIndex);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Normalizes a stringified CSS rule body for order-independent comparison
|
|
109
|
+
* by sorting top-level declarations alphabetically. Bodies that contain
|
|
110
|
+
* nested rules (additional `{` characters beyond the opening brace) are
|
|
111
|
+
* returned as-is since their internal structure makes simple sorting unsafe.
|
|
112
|
+
*
|
|
113
|
+
* @param {string} body The rule body string starting with `{`.
|
|
114
|
+
* @return {string} The body with declarations sorted, or the original body if it contains nested rules.
|
|
115
|
+
*/
|
|
116
|
+
function normalizeBodyForComparison (body) {
|
|
117
|
+
// Nested rules contain additional opening braces; skip normalization
|
|
118
|
+
if (body.indexOf('{', 1) !== -1) {
|
|
119
|
+
return body;
|
|
120
|
+
}
|
|
121
|
+
const inner = body.slice(1, -1);
|
|
122
|
+
if (!inner) {
|
|
123
|
+
return body;
|
|
124
|
+
}
|
|
125
|
+
const declarations = inner.split(';').filter(Boolean).sort();
|
|
126
|
+
return '{' + declarations.join(';') + '}';
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Merges consecutive stringified rules that share an identical declaration
|
|
131
|
+
* body into a single rule with comma-separated selectors. This catches
|
|
132
|
+
* rules whose values only become identical after minification (e.g.
|
|
133
|
+
* `#F00` and `rgb(255,0,0)` both minify to `red`).
|
|
134
|
+
*
|
|
135
|
+
* @param {Array} ruleStrings The array of stringified CSS rule strings.
|
|
136
|
+
* @return {Array} A new array with adjacent identical-body rules merged.
|
|
137
|
+
*/
|
|
138
|
+
function mergeAdjacentRulesWithIdenticalBodies (ruleStrings) {
|
|
139
|
+
const result = [];
|
|
140
|
+
for (const ruleString of ruleStrings) {
|
|
141
|
+
if (!ruleString) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const lastResult = result[result.length - 1];
|
|
145
|
+
if (lastResult) {
|
|
146
|
+
const lastBody = extractRuleBody(lastResult);
|
|
147
|
+
const currentBody = extractRuleBody(ruleString);
|
|
148
|
+
const bodiesAreEquivalent = (
|
|
149
|
+
lastBody &&
|
|
150
|
+
currentBody &&
|
|
151
|
+
normalizeBodyForComparison(lastBody) === normalizeBodyForComparison(currentBody)
|
|
152
|
+
);
|
|
153
|
+
if (bodiesAreEquivalent) {
|
|
154
|
+
const lastSelector = lastResult.slice(0, lastResult.length - lastBody.length);
|
|
155
|
+
const currentSelector = ruleString.slice(0, ruleString.length - currentBody.length);
|
|
156
|
+
const combinedSelector = deduplicateSelectorList(lastSelector + ',' + currentSelector);
|
|
157
|
+
result[result.length - 1] = combinedSelector + lastBody;
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
result.push(ruleString);
|
|
162
|
+
}
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
|
|
34
166
|
/**
|
|
35
167
|
* Parses, optimizes, and minifies a CSS string by applying rule merging, declaration deduplication, value compression, and dead-code elimination.
|
|
36
168
|
*
|
|
@@ -95,7 +227,9 @@ export const minifyCSS = function (input) {
|
|
|
95
227
|
output.push(stringifyRule(rule, context));
|
|
96
228
|
}
|
|
97
229
|
|
|
98
|
-
|
|
230
|
+
const mergedOutput = mergeAdjacentRulesWithIdenticalBodies(output);
|
|
231
|
+
|
|
232
|
+
return restoreEscapeSequences(mergedOutput.join(''));
|
|
99
233
|
}
|
|
100
234
|
|
|
101
235
|
return source;
|
package/src/rules/optimize.js
CHANGED
|
@@ -366,6 +366,26 @@ function deduplicateKeyframes (rules) {
|
|
|
366
366
|
});
|
|
367
367
|
}
|
|
368
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Removes duplicate selectors from a combined selector list by normalizing
|
|
371
|
+
* whitespace and preserving the first occurrence of each unique selector.
|
|
372
|
+
*
|
|
373
|
+
* @param {Array} selectors The selector strings to deduplicate.
|
|
374
|
+
* @return {Array} A new array with duplicate selectors removed.
|
|
375
|
+
*/
|
|
376
|
+
function deduplicateSelectors (selectors) {
|
|
377
|
+
const seen = new Set();
|
|
378
|
+
return selectors.filter((selector) => {
|
|
379
|
+
// Normalize whitespace to single spaces for consistent comparison
|
|
380
|
+
const normalized = selector.trim().replace(/\s+/g, ' ');
|
|
381
|
+
if (seen.has(normalized)) {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
seen.add(normalized);
|
|
385
|
+
return true;
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
|
|
369
389
|
/**
|
|
370
390
|
* Merges consecutive rules whose declarations are a subset of the following rule, combining their selectors and splitting out any extra declarations.
|
|
371
391
|
*
|
|
@@ -409,7 +429,8 @@ function mergeByDeclarations (rules) {
|
|
|
409
429
|
return !commonProperties.has(declaration.property);
|
|
410
430
|
});
|
|
411
431
|
result.pop();
|
|
412
|
-
|
|
432
|
+
const combinedSelectors = deduplicateSelectors([...previousRule.selectors, ...rule.selectors]);
|
|
433
|
+
result.push({ ...previousRule, selectors: combinedSelectors });
|
|
413
434
|
if (currentOnlyDeclarations.length > 0) {
|
|
414
435
|
result.push({ ...rule, declarations: currentOnlyDeclarations });
|
|
415
436
|
}
|
package/src/rules/stringify.js
CHANGED
|
@@ -361,6 +361,68 @@ function processIsSelector (selector) {
|
|
|
361
361
|
return [':is(' + parts.join(',') + ')'];
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
+
/**
|
|
365
|
+
* Removes spaces after commas only inside parenthesized groups (function
|
|
366
|
+
* calls like `var()`, `calc()`), leaving top-level comma spacing intact.
|
|
367
|
+
*
|
|
368
|
+
* @param {string} value The whitespace-collapsed custom property value.
|
|
369
|
+
* @return {string} The value with post-comma spaces removed inside function calls only.
|
|
370
|
+
*/
|
|
371
|
+
function removeSpacesAfterCommasInsideFunctions (value) {
|
|
372
|
+
let result = '';
|
|
373
|
+
let parenthesisDepth = 0;
|
|
374
|
+
for (let index = 0; index < value.length; index++) {
|
|
375
|
+
const character = value[index];
|
|
376
|
+
if (character === '(') {
|
|
377
|
+
parenthesisDepth++;
|
|
378
|
+
}
|
|
379
|
+
if (character === ')') {
|
|
380
|
+
parenthesisDepth--;
|
|
381
|
+
}
|
|
382
|
+
if (character === ',' && parenthesisDepth > 0) {
|
|
383
|
+
result += ',';
|
|
384
|
+
// Skip whitespace after the comma inside function calls
|
|
385
|
+
while (index + 1 < value.length && value[index + 1] === ' ') {
|
|
386
|
+
index++;
|
|
387
|
+
}
|
|
388
|
+
} else {
|
|
389
|
+
result += character;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return result;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Strips leading zeros from decimal numbers in a custom property value
|
|
397
|
+
* (e.g. `0.5` becomes `.5`, `-0.02em` becomes `-.02em`).
|
|
398
|
+
*
|
|
399
|
+
* @param {string} value The custom property value string.
|
|
400
|
+
* @return {string} The value with leading zeros removed from decimals.
|
|
401
|
+
*/
|
|
402
|
+
function stripLeadingZerosFromDecimals (value) {
|
|
403
|
+
// Match a boundary (start, whitespace, comma, open-paren), optional sign, then leading zeros before a decimal
|
|
404
|
+
return value.replace(/(^|\s|,|\()(-?)0+(\.\d+)/g, '$1$2$3');
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Collapses whitespace in a custom property value while preserving
|
|
409
|
+
* token boundaries. Each whitespace sequence is reduced to a single
|
|
410
|
+
* space, spaces after commas inside function calls are removed, and
|
|
411
|
+
* leading zeros on decimal numbers are stripped.
|
|
412
|
+
*
|
|
413
|
+
* @param {string} value The raw custom property value string.
|
|
414
|
+
* @return {string} The minified custom property value.
|
|
415
|
+
*/
|
|
416
|
+
function collapseCustomPropertyWhitespace (value) {
|
|
417
|
+
// Collapse all whitespace sequences (newlines, tabs, multiple spaces) to a single space
|
|
418
|
+
let collapsed = value.replace(/\s+/g, ' ');
|
|
419
|
+
// Remove spaces after commas only inside function calls (e.g. var(--bar, 1.5) → var(--bar,1.5))
|
|
420
|
+
collapsed = removeSpacesAfterCommasInsideFunctions(collapsed);
|
|
421
|
+
// Strip leading zeros from decimals (e.g. 0.5 → .5, -0.02em → -.02em)
|
|
422
|
+
collapsed = stripLeadingZerosFromDecimals(collapsed);
|
|
423
|
+
return collapsed;
|
|
424
|
+
}
|
|
425
|
+
|
|
364
426
|
/**
|
|
365
427
|
* Converts a parsed CSS AST rule node into a minified CSS string, dispatching to specialized handlers for each rule type including selectors, `@media`, `@keyframes`, `@layer`, and other at-rules.
|
|
366
428
|
*
|
|
@@ -517,7 +579,11 @@ function stringifyRule (rule, context, nested = false) {
|
|
|
517
579
|
} else if (/^rgb\(\s*\d+\s+\d+\s+\d+\s*\)$/i.test(trimmedRawValue)) {
|
|
518
580
|
value = ' ' + trimmedRawValue;
|
|
519
581
|
} else {
|
|
520
|
-
value = trimmedRawValue;
|
|
582
|
+
value = collapseCustomPropertyWhitespace(trimmedRawValue);
|
|
583
|
+
// Prepend a space when value starts with a bare decimal point to avoid ambiguity after the colon
|
|
584
|
+
if (value.startsWith('.')) {
|
|
585
|
+
value = ' ' + value;
|
|
586
|
+
}
|
|
521
587
|
}
|
|
522
588
|
}
|
|
523
589
|
} else {
|