postcss-enumerates-in-line 0.3.0 → 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.
@@ -1,9 +1,10 @@
1
1
  name: Publish Package to npmjs
2
- on: push
3
- #on:
4
- # push:
5
- # branches:
6
- # - master
2
+ #on: push
3
+ on:
4
+ push:
5
+ branches:
6
+ #- master
7
+ - main
7
8
 
8
9
  jobs:
9
10
  build:
package/README.md CHANGED
@@ -5,23 +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.0
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
- - ユーザー定義ショートハンド機能
24
- - `[[...]]`構文の改良と、デフォルトカラーにアルファチャンネルを設定できる`color-alpha[[...]]`構文の追加
27
+ - サンプルプログラムの更新
28
+ - メジャーアップデート
25
29
 
26
30
 
27
31
  ---
@@ -51,16 +55,11 @@
51
55
  >
52
56
  > `my`は`margin-top` & `margin-bottom`の、`ff`は`font-family`の、`fs`は`font-size`のショートハンドです。
53
57
  > 何がショートハンドとして定義されているかは[プロパティ名のショートハンド](#プロパティ名のショートハンド)を参照してください。
58
+ > またユーザーが独自にショートハンドを登録することも可能です。
54
59
  >
55
60
  > `:`記号の前がプロパティ名、後ろがプロパティ値になっています。
56
61
  > ホワイトスペースはプロパティの区切り文字であるため、プロパティ値に半角スペース記号を使いたい場合は`^`で代用します。
57
62
 
58
- ~~プロパティの列挙を目的としているため、hoverのような状態遷移・メディアクエリ・ダークモードなどへの対応はしません。~~
59
-
60
- ~~> [Tailwind CSS]における`hover:`・`md:`・`dark:`などに対応する機能は備えていないという意味です。~~
61
-
62
- ☑️version 0.3.0以上
63
-
64
63
  またCSSプロパティ名の先頭に以下の書式を加筆することで、条件付きCSSプロパティに対応することができます。
65
64
 
66
65
  - `hover!`: :hover
@@ -68,6 +67,7 @@
68
67
  - `mq(<mediaQueries>)!`: @media screen and &lt;mediaQueries&gt;
69
68
  - `data(<customDataElements>)!`: [data-&lt;customDataElement&gt;]
70
69
  - `aria(<ariaAttributes>)!`: [aria-&lt;ariaAttributes&gt;]
70
+ - `attr(<attributes>)!`: [&lt;attributes&gt;]
71
71
 
72
72
  > 詳しい書式は目次の次へお進みください。
73
73
 
@@ -86,7 +86,7 @@
86
86
  ## 目次
87
87
 
88
88
  - [PostCSS Enumerates in Line](#postcss-enumerates-in-line)
89
- - [更新点: v0.3.0](#更新点-v030)
89
+ - [更新点: v0.4.0](#更新点-v040)
90
90
  - [実装予定](#実装予定)
91
91
  - [目次](#目次)
92
92
  - [CSSでの記述方法](#cssでの記述方法)
@@ -96,6 +96,7 @@
96
96
  - [メディアクエリ](#メディアクエリ)
97
97
  - [カスタムデータ属性](#カスタムデータ属性)
98
98
  - [ARIA属性](#aria属性)
99
+ - [属性プロパティ](#属性プロパティ)
99
100
  - [特殊な記号](#特殊な記号)
100
101
  - [コロン記号](#コロン記号)
101
102
  - [エクスクラメーション記号](#エクスクラメーション記号)
@@ -103,6 +104,7 @@
103
104
  - [二重角括弧記号](#二重角括弧記号)
104
105
  - [デフォルトカラー](#デフォルトカラー)
105
106
  - [プロパティ名のショートハンド](#プロパティ名のショートハンド)
107
+ - [ショートハンドのユーザー定義](#ショートハンドのユーザー定義)
106
108
  - [プラグインを使用する方法](#プラグインを使用する方法)
107
109
  - [gulpでの使い方](#gulpでの使い方)
108
110
  - [package.json](#packagejson)
@@ -121,6 +123,10 @@
121
123
  - [オプション引数](#オプション引数)
122
124
  - [prependDefaultColor](#prependdefaultcolor)
123
125
  - [prependDefaultStyle](#prependdefaultstyle)
126
+ - [appendShorthand](#appendshorthand)
127
+ - [appendUserColor](#appendusercolor)
128
+ - [color\[\[...\]\]関数](#color関数)
129
+ - [prependDefaultColorオプション](#prependdefaultcolorオプション)
124
130
 
125
131
  <div class="x--hr"></div>
126
132
 
@@ -163,7 +169,7 @@ h1 {
163
169
 
164
170
  上記のように`条件付き書式!CSSプロパティ名:CSSプロパティ値`と記法を拡張することができます。
165
171
 
166
- `hover!`, `dark!`, `mq(...)!`, `data(...)!`, `aria(...)!`はそれぞれ重ね掛けが可能です。
172
+ `hover!`, `dark!`, `mq(...)!`, `data(...)!`, `aria(...)!`, `attr(...)!`はそれぞれ重ね掛けが可能です。
167
173
 
168
174
  ```scss
169
175
  h1 {
@@ -171,7 +177,7 @@ h1 {
171
177
  }
172
178
  ```
173
179
 
174
- ただしこれら条件付き書式は1つのCSSプロパティにつき1種しか設定できないため、`mq(...)!`・`data(...)!`・`aria(...)!`を連続して記述できません。
180
+ ただしこれら条件付き書式は1つのCSSプロパティにつき1種しか設定できないため、`mq(...)!`・`data(...)!`・`aria(...)!`・`attr(...)!`を連続して記述できません。
175
181
 
176
182
  列挙する場合は`(`・`)`の中で、`,`を使ってください。
177
183
 
@@ -447,6 +453,36 @@ h1[aria-label="heading"] {
447
453
  > + `\`: %5D
448
454
 
449
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
+
450
486
  ### 特殊な記号
451
487
 
452
488
  特殊な振る舞いを起こす文字は、`:`・`^`・`!`・`[[`・`]]`の5種類です。
@@ -511,47 +547,59 @@ h1[aria-label="heading"] {
511
547
 
512
548
  しかし変換書式を改善中であるため、意図したように演算子の両端へ正常に空白記号が挿入されない可能性があります。
513
549
 
514
- こうした場合でも`^`記号を補えば正常な算術関数へと修正できるのですが、より確実な手段としては`[[`・`]]`記号を使わず人力で`^`記号を補う方が間違いは少ないでしょう。
550
+ > こうした場合でも`^`記号を補えば正常な算術関数へと修正できるのですが、より確実な手段としては`[[`・`]]`記号を使わず人力で`^`記号を補う方が間違いは少ないでしょう。
515
551
 
552
+ ---
516
553
 
554
+ 上記とは別に、`color[[...]]`という独自の構文をCSSプロパティ値に使用することができます。
517
555
 
518
- ### デフォルトカラー
556
+ ```scss
557
+ h1 {
558
+ @enums ct:color[[yellow,600]];
559
+ }
560
+ ```
519
561
 
520
- デフォルトカラーは[Flexoki] v2.0からのフォークです。
562
+ `,`区切りの複数の引数を取ることができ、この[パッケージが管理する色情報](README.img/default_color.png)を呼び出すために使います。
521
563
 
522
- CSSの`var()`関数を使い、CSS変数から呼び出して使用します。
564
+ これはプラグインオプションの`prependDefaultColor`を`true`にした上で、`@enums ct:var(--color-yellow-600);`を宣言した時と同じ挙動をします。
523
565
 
524
566
  ```scss
525
- body {
526
- @enums ct:var(--color-red-400);
567
+ h1 {
568
+ @enums ct:color[[cyan,400,95%,rgb]];
527
569
  }
528
570
  ```
529
571
 
530
- [<img src="README.img/default_color.png" alt="Default color">](README.img/default_color.png)
572
+ この関数様の構文は、最大で4種類の引数を取ります。
531
573
 
532
- しかし現状では`#RRGGBBAA`書式のアルファチャンネル付き色設定ができないため、`_color.scss`を同梱しています。
574
+ 1. 色テーマ(`cyan`など)
575
+ 2. 濃度レベル(`400`など; 正規表現で書くと`/[\d]+/`)
576
+ 3. アルファ値(`95%`など; 正規表現で書くと`/[\d]+[%]/`)
577
+ 4. 出力形式(`rgb`|`hsl`|`oklch`; 大文字小文字は問いません)
533
578
 
534
- ```scss
535
- @use '../node_modules/postcss-enumerates-in-line/_color.scss' as c;
579
+ 既に登録されている色テーマ名を指定することはできません。
536
580
 
537
- html {
538
- color: #{c.$color-red-400}99; // D14D4199
539
- }
540
- ```
581
+ これはプラグインが初期状態で実装しているものだけでなく、ユーザー定義による追加された色テーマについても同様です。
541
582
 
542
- > 将来的には`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
+ > 未定義の色テーマや濃度レベルを指定した場合、エラーとして扱われ無視されます。
543
590
 
544
- ```scss
545
- /* 🚧Before */
546
- html {
547
- color: color-alpha[[red,400,60%,oklch]];
548
- }
591
+ この関数を使うことで、透過率が設定できる他、色テーマをプラグインのオプションである`appendUserColors(...)`でユーザー独自の定義を追加できる上に、`prependDefaultColor`を初期値の`false`以外にするとCSS変数として色情報が`:root`ブロックに出力されることでCSSファイルサイズが大きくなるなど、様々なデメリットが解消されるでしょう。
549
592
 
550
- /* 🚀After */
551
- html {
552
- color: oklch(0.597 0.1692 28.38 / 60%);
553
- }
554
- ```
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
+ 詳細は[オプション引数](#オプション引数)を参照してください。
555
603
 
556
604
 
557
605
  ### プロパティ名のショートハンド
@@ -648,6 +696,13 @@ html {
648
696
  数字の`1`から`9`が使われる理由はテンキーの配置を想像してみてください。
649
697
 
650
698
 
699
+ #### ショートハンドのユーザー定義
700
+
701
+ CSSプロパティ名のショートハンドは、プラグインオプションの`appendShorthand(...)`により拡張することができます。
702
+
703
+ 詳細は[オプション引数](#オプション引数)を参照してください。
704
+
705
+
651
706
  ## プラグインを使用する方法
652
707
 
653
708
  ### gulpでの使い方
@@ -863,9 +918,9 @@ PostCSS処理の配列の中に、`enumSpreader({})`関数を差し込みます
863
918
 
864
919
  自動的に出力される色設定への対応内容。
865
920
 
866
- 初期値: true (boolean|string)
921
+ 初期値: false (boolean|string)
867
922
 
868
- `true`を設定した時(または何も設定しなかった時、あるいは`"hsl"`や`"HSL"`を設定した時)において、次のような色設定(HSL形式)がCSSに出力されます。
923
+ `true`を設定した時(または`"hsl"`や`"HSL"`を設定した時)において、次のような色設定(HSL形式)がCSSに出力されます。
869
924
 
870
925
  ```css
871
926
  :root {
@@ -923,3 +978,179 @@ prependDefaultStyle: [
923
978
  追記するだけであって、このプラグインが最初から搭載しているリセットCSSの一部だけを除去することはできません。
924
979
 
925
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
+ 状況に応じて使い分けてください。