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