postcss-enumerates-in-line 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,24 +5,27 @@
5
5
  |[<img width="24" height="24" align="left" src="README.img/1f1ef-1f1f5.png" alt="🇯🇵"> 日本語](README.md)|[<img width="24" height="24" align="left" src="README.img/1f1fa-1f1f8.png" alt="🇺🇸"> English](README_EN.md)|
6
6
 
7
7
 
8
- ## 更新点: v0.3.2
8
+ ## 更新点: v0.4.0
9
9
 
10
- - 以下の条件付きCSSプロパティを追加
11
- + `hover!`
12
- + `dark!`
13
- + `mq(<mediaQueries>)!`
14
- + `data(<customDataElements>)`
15
- + `aria(<ariaAttributes>)`
16
- - デフォルトカラーを[Flexoki]に変更
17
- - `_color.scss`を同梱
18
- - 作成例の`test/gulp/`と`test/postcss/`を更新
10
+ 1. 色設定
11
+
12
+ - CSSプロパティ値に色設定を行う`color[[...]]`関数を追加
13
+ - プラグインのオプションに色テーマを追加する`appendUserColors(...)`を追加
14
+ - プラグインオプション`prependDefaultColor`の初期設定を`false`に変更
15
+
16
+ 2. ショートハンド設定
17
+
18
+ - プラグインのオプションにユーザー定義ショートハンドを拡張する`appendShorthand(...)`を追加
19
+
20
+ 3. CSSプロパティ
21
+
22
+ - 条件付きCSSプロパティ`attr(<attributes>)!`を追加
19
23
 
20
24
 
21
25
  ## 実装予定
22
26
 
23
- - 新しい条件付きCSSプロパティ: `attr(<attributes>)!`
24
- - ユーザー定義ショートハンド機能
25
- - `[[...]]`構文の改良と、デフォルトカラーにアルファチャンネルを設定できる`color-alpha[[...]]`構文の追加
27
+ - サンプルプログラムの更新
28
+ - メジャーアップデート
26
29
 
27
30
 
28
31
  ---
@@ -52,16 +55,11 @@
52
55
  >
53
56
  > `my`は`margin-top` & `margin-bottom`の、`ff`は`font-family`の、`fs`は`font-size`のショートハンドです。
54
57
  > 何がショートハンドとして定義されているかは[プロパティ名のショートハンド](#プロパティ名のショートハンド)を参照してください。
58
+ > またユーザーが独自にショートハンドを登録することも可能です。
55
59
  >
56
60
  > `:`記号の前がプロパティ名、後ろがプロパティ値になっています。
57
61
  > ホワイトスペースはプロパティの区切り文字であるため、プロパティ値に半角スペース記号を使いたい場合は`^`で代用します。
58
62
 
59
- ~~プロパティの列挙を目的としているため、hoverのような状態遷移・メディアクエリ・ダークモードなどへの対応はしません。~~
60
-
61
- ~~> [Tailwind CSS]における`hover:`・`md:`・`dark:`などに対応する機能は備えていないという意味です。~~
62
-
63
- ☑️version 0.3.0以上
64
-
65
63
  またCSSプロパティ名の先頭に以下の書式を加筆することで、条件付きCSSプロパティに対応することができます。
66
64
 
67
65
  - `hover!`: :hover
@@ -69,6 +67,7 @@
69
67
  - `mq(<mediaQueries>)!`: @media screen and &lt;mediaQueries&gt;
70
68
  - `data(<customDataElements>)!`: [data-&lt;customDataElement&gt;]
71
69
  - `aria(<ariaAttributes>)!`: [aria-&lt;ariaAttributes&gt;]
70
+ - `attr(<attributes>)!`: [&lt;attributes&gt;]
72
71
 
73
72
  > 詳しい書式は目次の次へお進みください。
74
73
 
@@ -87,7 +86,7 @@
87
86
  ## 目次
88
87
 
89
88
  - [PostCSS Enumerates in Line](#postcss-enumerates-in-line)
90
- - [更新点: v0.3.2](#更新点-v032)
89
+ - [更新点: v0.4.0](#更新点-v040)
91
90
  - [実装予定](#実装予定)
92
91
  - [目次](#目次)
93
92
  - [CSSでの記述方法](#cssでの記述方法)
@@ -97,6 +96,7 @@
97
96
  - [メディアクエリ](#メディアクエリ)
98
97
  - [カスタムデータ属性](#カスタムデータ属性)
99
98
  - [ARIA属性](#aria属性)
99
+ - [属性プロパティ](#属性プロパティ)
100
100
  - [特殊な記号](#特殊な記号)
101
101
  - [コロン記号](#コロン記号)
102
102
  - [エクスクラメーション記号](#エクスクラメーション記号)
@@ -104,6 +104,7 @@
104
104
  - [二重角括弧記号](#二重角括弧記号)
105
105
  - [デフォルトカラー](#デフォルトカラー)
106
106
  - [プロパティ名のショートハンド](#プロパティ名のショートハンド)
107
+ - [ショートハンドのユーザー定義](#ショートハンドのユーザー定義)
107
108
  - [プラグインを使用する方法](#プラグインを使用する方法)
108
109
  - [gulpでの使い方](#gulpでの使い方)
109
110
  - [package.json](#packagejson)
@@ -122,6 +123,10 @@
122
123
  - [オプション引数](#オプション引数)
123
124
  - [prependDefaultColor](#prependdefaultcolor)
124
125
  - [prependDefaultStyle](#prependdefaultstyle)
126
+ - [appendShorthand](#appendshorthand)
127
+ - [appendUserColor](#appendusercolor)
128
+ - [color\[\[...\]\]関数](#color関数)
129
+ - [prependDefaultColorオプション](#prependdefaultcolorオプション)
125
130
 
126
131
  <div class="x--hr"></div>
127
132
 
@@ -164,7 +169,7 @@ h1 {
164
169
 
165
170
  上記のように`条件付き書式!CSSプロパティ名:CSSプロパティ値`と記法を拡張することができます。
166
171
 
167
- `hover!`, `dark!`, `mq(...)!`, `data(...)!`, `aria(...)!`はそれぞれ重ね掛けが可能です。
172
+ `hover!`, `dark!`, `mq(...)!`, `data(...)!`, `aria(...)!`, `attr(...)!`はそれぞれ重ね掛けが可能です。
168
173
 
169
174
  ```scss
170
175
  h1 {
@@ -172,7 +177,7 @@ h1 {
172
177
  }
173
178
  ```
174
179
 
175
- ただしこれら条件付き書式は1つのCSSプロパティにつき1種しか設定できないため、`mq(...)!`・`data(...)!`・`aria(...)!`を連続して記述できません。
180
+ ただしこれら条件付き書式は1つのCSSプロパティにつき1種しか設定できないため、`mq(...)!`・`data(...)!`・`aria(...)!`・`attr(...)!`を連続して記述できません。
176
181
 
177
182
  列挙する場合は`(`・`)`の中で、`,`を使ってください。
178
183
 
@@ -448,6 +453,36 @@ h1[aria-label="heading"] {
448
453
  > + `\`: %5D
449
454
 
450
455
 
456
+ #### 属性プロパティ
457
+
458
+ カスタムデータ属性(`[data-*]`)とARIA属性(`[aria-*]`)について専用の条件付き書式を設けていますが、それ以外の属性プロパティ(`[*]`)も`attr(...)!`を使うことで記述可能です。
459
+
460
+ そのため`data(foo="bar")!`と`attr(data-foo="bar")!`は等価になります。
461
+
462
+ 複数の属性セレクターを組み合わせる場合は、`,`で区切ります。
463
+
464
+ ```scss
465
+ /* 🚧Before */
466
+ h1 {
467
+ @emums attr(download)!ct:red attr(title="heading",data-tags~="hello")!bw2:1px;
468
+ }
469
+
470
+ /* 🚀After */
471
+ h1[download] {
472
+ color: red;
473
+ }
474
+ h1[title="heading"][data-tags~="hello"] {
475
+ border-bottom-width: 1px;
476
+ }
477
+ ```
478
+
479
+ 属性セレクターは`属性名`、または`属性名`・`条件演算子`・`属性データ`の組み合わせになっています。
480
+
481
+ 属性名が存在することだけを条件にする場合は、`条件演算子`と`属性データ`を必要としません。
482
+
483
+ 詳細は[カスタムデータ属性](#カスタムデータ属性)を参照してください。
484
+
485
+
451
486
  ### 特殊な記号
452
487
 
453
488
  特殊な振る舞いを起こす文字は、`:`・`^`・`!`・`[[`・`]]`の5種類です。
@@ -512,47 +547,59 @@ h1[aria-label="heading"] {
512
547
 
513
548
  しかし変換書式を改善中であるため、意図したように演算子の両端へ正常に空白記号が挿入されない可能性があります。
514
549
 
515
- こうした場合でも`^`記号を補えば正常な算術関数へと修正できるのですが、より確実な手段としては`[[`・`]]`記号を使わず人力で`^`記号を補う方が間違いは少ないでしょう。
550
+ > こうした場合でも`^`記号を補えば正常な算術関数へと修正できるのですが、より確実な手段としては`[[`・`]]`記号を使わず人力で`^`記号を補う方が間違いは少ないでしょう。
516
551
 
552
+ ---
517
553
 
554
+ 上記とは別に、`color[[...]]`という独自の構文をCSSプロパティ値に使用することができます。
518
555
 
519
- ### デフォルトカラー
556
+ ```scss
557
+ h1 {
558
+ @enums ct:color[[yellow,600]];
559
+ }
560
+ ```
520
561
 
521
- デフォルトカラーは[Flexoki] v2.0からのフォークです。
562
+ `,`区切りの複数の引数を取ることができ、この[パッケージが管理する色情報](README.img/default_color.png)を呼び出すために使います。
522
563
 
523
- CSSの`var()`関数を使い、CSS変数から呼び出して使用します。
564
+ これはプラグインオプションの`prependDefaultColor`を`true`にした上で、`@enums ct:var(--color-yellow-600);`を宣言した時と同じ挙動をします。
524
565
 
525
566
  ```scss
526
- body {
527
- @enums ct:var(--color-red-400);
567
+ h1 {
568
+ @enums ct:color[[cyan,400,95%,rgb]];
528
569
  }
529
570
  ```
530
571
 
531
- [<img src="README.img/default_color.png" alt="Default color">](README.img/default_color.png)
572
+ この関数様の構文は、最大で4種類の引数を取ります。
532
573
 
533
- しかし現状では`#RRGGBBAA`書式のアルファチャンネル付き色設定ができないため、`_color.scss`を同梱しています。
574
+ 1. 色テーマ(`cyan`など)
575
+ 2. 濃度レベル(`400`など; 正規表現で書くと`/[\d]+/`)
576
+ 3. アルファ値(`95%`など; 正規表現で書くと`/[\d]+[%]/`)
577
+ 4. 出力形式(`rgb`|`hsl`|`oklch`; 大文字小文字は問いません)
534
578
 
535
- ```scss
536
- @use '../node_modules/postcss-enumerates-in-line/_color.scss' as c;
579
+ 既に登録されている色テーマ名を指定することはできません。
537
580
 
538
- html {
539
- color: #{c.$color-red-400}99; // D14D4199
540
- }
541
- ```
581
+ これはプラグインが初期状態で実装しているものだけでなく、ユーザー定義による追加された色テーマについても同様です。
542
582
 
543
- > 将来的には`color-alpha[[<color-theme>,<color-depth>,<alpha>,<optional:output-style>]]`関数の実装を予定しています。
583
+ > 未指定の種類に対しては、次の初期値が適用されます。
584
+ > 1. `base`
585
+ > 2. `400`
586
+ > 3. `100%`
587
+ > 4. `hsl`
588
+ >
589
+ > 未定義の色テーマや濃度レベルを指定した場合、エラーとして扱われ無視されます。
544
590
 
545
- ```scss
546
- /* 🚧Before */
547
- html {
548
- color: color-alpha[[red,400,60%,oklch]];
549
- }
591
+ この関数を使うことで、透過率が設定できる他、色テーマをプラグインのオプションである`appendUserColors(...)`でユーザー独自の定義を追加できる上に、`prependDefaultColor`を初期値の`false`以外にするとCSS変数として色情報が`:root`ブロックに出力されることでCSSファイルサイズが大きくなるなど、様々なデメリットが解消されるでしょう。
550
592
 
551
- /* 🚀After */
552
- html {
553
- color: oklch(0.597 0.1692 28.38 / 60%);
554
- }
555
- ```
593
+
594
+ ### デフォルトカラー
595
+
596
+ デフォルトカラーは[Flexoki] v2.0からのフォークです。
597
+
598
+ [<img src="README.img/default_color.png" alt="Default color">](README.img/default_color.png)
599
+
600
+ `color[[...]]`の項目で説明した通り、`appendUserColors(...)`オプション設定を使うと独自の色テーマを追加することができます。
601
+
602
+ 詳細は[オプション引数](#オプション引数)を参照してください。
556
603
 
557
604
 
558
605
  ### プロパティ名のショートハンド
@@ -649,6 +696,13 @@ html {
649
696
  数字の`1`から`9`が使われる理由はテンキーの配置を想像してみてください。
650
697
 
651
698
 
699
+ #### ショートハンドのユーザー定義
700
+
701
+ CSSプロパティ名のショートハンドは、プラグインオプションの`appendShorthand(...)`により拡張することができます。
702
+
703
+ 詳細は[オプション引数](#オプション引数)を参照してください。
704
+
705
+
652
706
  ## プラグインを使用する方法
653
707
 
654
708
  ### gulpでの使い方
@@ -864,9 +918,9 @@ PostCSS処理の配列の中に、`enumSpreader({})`関数を差し込みます
864
918
 
865
919
  自動的に出力される色設定への対応内容。
866
920
 
867
- 初期値: true (boolean|string)
921
+ 初期値: false (boolean|string)
868
922
 
869
- `true`を設定した時(または何も設定しなかった時、あるいは`"hsl"`や`"HSL"`を設定した時)において、次のような色設定(HSL形式)がCSSに出力されます。
923
+ `true`を設定した時(または`"hsl"`や`"HSL"`を設定した時)において、次のような色設定(HSL形式)がCSSに出力されます。
870
924
 
871
925
  ```css
872
926
  :root {
@@ -924,3 +978,179 @@ prependDefaultStyle: [
924
978
  追記するだけであって、このプラグインが最初から搭載しているリセットCSSの一部だけを除去することはできません。
925
979
 
926
980
  完全に自己流のリセットCSSだけを出力したい場合は`prependDefaultStyle`オプションを`false`にした上で、SCSSファイルにその設定を記述してください。
981
+
982
+
983
+ ### appendShorthand
984
+
985
+ ユーザー定義ショートハンドの追加。
986
+
987
+ 初期値: [] (string[string,string[]])
988
+
989
+ ```javascript
990
+ appendShorthand: [
991
+ ['pos', ['position']],
992
+ ],
993
+ ```
994
+
995
+ 上記のように指定すると、`pos`が新たに`position`のショートハンドとして機能するようになります。
996
+
997
+ ```javascript
998
+ appendShorthand: [
999
+ ['bw246', ['border-bottom-width', 'border-left-width', 'border-right-width']],
1000
+ ],
1001
+ ```
1002
+
1003
+ 複数のプロパティ名を一括指定することも可能です。
1004
+
1005
+ ```javascript
1006
+ appendShorthand: [
1007
+ ['lh', ['line-height']],
1008
+ ],
1009
+ ```
1010
+
1011
+ `line-height`プロパティには既に`fh`というショートハンドが存在していますが、別名(エイリアス)のショートハンドを与えることもできます。
1012
+
1013
+ ```javascript
1014
+ appendShorthand: [
1015
+ ['o', ['opacity']],
1016
+ ],
1017
+ ```
1018
+
1019
+ しかし上記のように`o`を登録しようとしても、`outline`のショートハンドとして既に登録されているため無視されます。
1020
+
1021
+ ショートハンドの設定上書きはできません。
1022
+
1023
+ また構文エラーの場合は無視されます。
1024
+
1025
+
1026
+ ### appendUserColor
1027
+
1028
+ ユーザー定義色テーマの追加。
1029
+
1030
+ 初期値: [] ({theme: &lt;string&gt;, levels: {level: &lt;number&gt;, rgb: &lt;string&gt;, hsl: &lt;string&gt;, oklch: &lt;string&gt;}[]}[])
1031
+
1032
+ ```javascript
1033
+ appendUserColor: [
1034
+ {
1035
+ theme: 'blood',
1036
+ levels: [
1037
+ {
1038
+ level: 400,
1039
+ rgb: '#660000',
1040
+ hsl: 'hsl(0 100% 20%)',
1041
+ oklch: 'oklch(0.3204 0.1315 29.23)',
1042
+ },
1043
+ {
1044
+ level: 600,
1045
+ rgb: '#D1001C',
1046
+ hsl: 'hsl(352 100% 41%)',
1047
+ oklch: 'oklch(0.5418 0.2202 26.04)',
1048
+ },
1049
+ ]
1050
+ },
1051
+ ]
1052
+ ```
1053
+
1054
+ 上記のように指定すると、`theme`の`blood`が新しい色テーマとして登録され、濃度レベルは`400`と`600`が利用可能になります。
1055
+
1056
+ > デフォルトカラーとして登録されている色テーマ名や、別のユーザー定義色テーマ名とは重複する名称を登録することはできません。
1057
+
1058
+ 登録済みの色テーマは、次の2種類の方法で呼び出すことが可能です。
1059
+
1060
+ 1. `color[[...]]`
1061
+ 2. `prependDefaultColor`
1062
+
1063
+
1064
+ #### color[[...]]関数
1065
+
1066
+ ```scss
1067
+ /* 🚧Before */
1068
+ h1 {
1069
+ @enums ct:color[[red,400]];
1070
+ }
1071
+
1072
+ /* 🚀After */
1073
+ h1 {
1074
+ color: hsl(5 61% 53.7%);
1075
+ }
1076
+ ```
1077
+
1078
+ 色テーマ名(例: `red`)・濃度レベル(例: `400`)・アルファ値(例: `100%`)・出力形式(例: `rgb`)の最大4種類を引数に取り、全てオプション引数であるため省略が可能です。
1079
+
1080
+ ただし構文上の制約から、最低1種類は引数として指定してください。
1081
+
1082
+ > 1. 色テーマ名
1083
+ >
1084
+ > デフォルトカラーまたは`appendUserColor(...)`で登録したもの。
1085
+ >
1086
+ > 省略された場合の初期値は`base`。
1087
+ >
1088
+ > 未定義の色テーマ名を指定した場合、内部エラー処理により無視されます。
1089
+
1090
+ > 2. 濃度レベル
1091
+ >
1092
+ > `0`(輝度ほぼ100%)から`999`(輝度ほぼ0%)までの整数
1093
+ >
1094
+ > 省略された場合の初期値は`400`
1095
+ >
1096
+ > デフォルトカラーはだいたい100区切りの分かりやすい数値になっていますが、`appendUserColor(...)`で登録する場合は独自の数値を与えることが可能です。
1097
+ >
1098
+ > 未定義の濃度レベルを指定した場合、内部エラー処理により無視されます。
1099
+
1100
+ > 3. アルファ値
1101
+ >
1102
+ > `0%`(完全に透明)から`100%`(完全に不透明)までのパーセント値
1103
+ >
1104
+ > 省略された場合の初期値は`100%`
1105
+ >
1106
+ > `50.5%`のような小数点指定も可能ですが、`1`のようにしてパーセント記号を省略すると濃度レベルだと誤解釈してしまうため必ずパーセント記号を付けてください。
1107
+
1108
+ > 4. 出力形式
1109
+ >
1110
+ > CSSファイルへ出力する時の書式
1111
+ >
1112
+ > 省略された場合の初期値は`hsl`
1113
+ >
1114
+ > `hsl`・`rgb`・`oklch`の3種類から選択できます。大文字小文字は問いません。
1115
+
1116
+
1117
+ #### prependDefaultColorオプション
1118
+
1119
+ ```javascript
1120
+ enumSpreader({
1121
+ prependDefaultColor: true,
1122
+ // ...
1123
+ })
1124
+ ```
1125
+
1126
+ プラグインオプションの`prependDefaultColor`を`false`以外の値にすると、色テーマに関するCSS変数が出力されます。
1127
+
1128
+ > 指定可能な値は`hsl`・`rgb`・`oklch`、および`true`(`hsl`と等価)です。
1129
+ >
1130
+ > `true`以外の文字列リテラルに限り、大文字小文字は問いません。
1131
+
1132
+ ```css
1133
+ :root {
1134
+ --color-red-400: hsl(5 61% 53.7%);
1135
+ }
1136
+ ```
1137
+
1138
+ この設定を利用して、色設定を行います。
1139
+
1140
+ ```scss
1141
+ /* 🚧Before */
1142
+ h1 {
1143
+ @enums ct:var(--color-red-400);
1144
+ }
1145
+
1146
+ /* 🚀After */
1147
+ h1 {
1148
+ color: hsl(5 61% 53.7%);
1149
+ }
1150
+ ```
1151
+
1152
+ この方法のメリットは、PostCSS Enumerates in Lineプラグインの外ででも色設定を利用することができる点にあります。
1153
+
1154
+ しかしアルファ値の設定ができなかったり、あるいは大量に出力されるCSS変数のためCSSファイルのサイズが肥大化したりする点はデメリットです。
1155
+
1156
+ 状況に応じて使い分けてください。