@charcoal-ui/styled 2.5.0 → 2.7.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/dist/SetThemeScript.d.ts +20 -20
- package/dist/TokenInjector.d.ts +12 -12
- package/dist/TokenInjector.d.ts.map +1 -1
- package/dist/builders/border.d.ts +9 -9
- package/dist/builders/border.d.ts.map +1 -1
- package/dist/builders/borderRadius.d.ts +6 -6
- package/dist/builders/colors.d.ts +12 -12
- package/dist/builders/colors.d.ts.map +1 -1
- package/dist/builders/elementEffect.d.ts +6 -6
- package/dist/builders/o.d.ts +113 -114
- package/dist/builders/o.d.ts.map +1 -1
- package/dist/builders/outline.d.ts +9 -9
- package/dist/builders/outline.d.ts.map +1 -1
- package/dist/builders/size.d.ts +22 -22
- package/dist/builders/size.d.ts.map +1 -1
- package/dist/builders/spacing.d.ts +14 -14
- package/dist/builders/spacing.d.ts.map +1 -1
- package/dist/builders/transition.d.ts +6 -6
- package/dist/builders/typography.d.ts +10 -10
- package/dist/defineThemeVariables.test.d.ts +1 -1
- package/dist/factories/lib.d.ts +88 -88
- package/dist/factories/lib.d.ts.map +1 -1
- package/dist/helper.d.ts +38 -38
- package/dist/helper.d.ts.map +1 -1
- package/dist/index.cjs.js +918 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +128 -128
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +886 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.story.d.ts +18 -25
- package/dist/index.story.d.ts.map +1 -1
- package/dist/index.test.d.ts +1 -1
- package/dist/internals/index.d.ts +41 -41
- package/dist/storyHelper.d.ts +9 -0
- package/dist/storyHelper.d.ts.map +1 -0
- package/dist/util.d.ts +100 -100
- package/dist/util.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/builders/border.ts +1 -1
- package/src/builders/colors.ts +1 -1
- package/src/builders/o.ts +1 -8
- package/src/builders/outline.ts +1 -1
- package/src/builders/size.ts +1 -1
- package/src/builders/spacing.ts +2 -2
- package/src/index.story.tsx +1 -18
- package/src/index.test.tsx +2 -1
- package/src/index.ts +1 -12
- package/src/storyHelper.ts +18 -0
- package/src/util.ts +1 -1
- package/dist/index.cjs +0 -1174
- package/dist/index.cjs.map +0 -1
- package/dist/index.modern.js +0 -989
- package/dist/index.modern.js.map +0 -1
- package/dist/index.module.js +0 -1157
- package/dist/index.module.js.map +0 -1
package/dist/index.cjs
DELETED
|
@@ -1,1174 +0,0 @@
|
|
|
1
|
-
var utils = require('@charcoal-ui/utils');
|
|
2
|
-
var warning = require('warning');
|
|
3
|
-
var foundation = require('@charcoal-ui/foundation');
|
|
4
|
-
var React = require('react');
|
|
5
|
-
var styledComponents = require('styled-components');
|
|
6
|
-
|
|
7
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
-
|
|
9
|
-
var warning__default = /*#__PURE__*/_interopDefaultLegacy(warning);
|
|
10
|
-
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
11
|
-
|
|
12
|
-
function _extends() {
|
|
13
|
-
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
14
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
15
|
-
var source = arguments[i];
|
|
16
|
-
|
|
17
|
-
for (var key in source) {
|
|
18
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
19
|
-
target[key] = source[key];
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return target;
|
|
25
|
-
};
|
|
26
|
-
return _extends.apply(this, arguments);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function _taggedTemplateLiteralLoose(strings, raw) {
|
|
30
|
-
if (!raw) {
|
|
31
|
-
raw = strings.slice(0);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
strings.raw = raw;
|
|
35
|
-
return strings;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function unreachable(value) {
|
|
39
|
-
throw new Error(arguments.length === 0 ? 'unreachable' : "unreachable (" + JSON.stringify(value) + ")");
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Check whether a value is non-null and non-undefined
|
|
43
|
-
*
|
|
44
|
-
* @param value nullable
|
|
45
|
-
*/
|
|
46
|
-
|
|
47
|
-
var isPresent = function isPresent(value) {
|
|
48
|
-
return value != null;
|
|
49
|
-
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
-
|
|
51
|
-
function objectAssign() {
|
|
52
|
-
return Object.assign.apply(Object, [{}].concat([].slice.call(arguments)));
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Object.keys の返り値の型を厳しめにしてくれるやつ。
|
|
56
|
-
*
|
|
57
|
-
* ジェネリクスは基本的に明示して使うことを推奨。
|
|
58
|
-
*
|
|
59
|
-
* このライブラリでは Theme オブジェクトのジェネリクスを引き回すケースが多く、
|
|
60
|
-
* ジェネリクスを省略するといつのまにか keys の返り値が `string | number | symbol` になりがちなので
|
|
61
|
-
*
|
|
62
|
-
* @param obj - キーを取りたいオブジェクト。ジェネリクスを省略したとき `never[]` のような使えない型が返って欲しい
|
|
63
|
-
*/
|
|
64
|
-
|
|
65
|
-
function keyof(obj) {
|
|
66
|
-
return Object.keys(obj);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* 配列じゃなかったら配列にする
|
|
70
|
-
*/
|
|
71
|
-
|
|
72
|
-
function wrapArray(value) {
|
|
73
|
-
return Array.isArray(value) ? value : [value];
|
|
74
|
-
}
|
|
75
|
-
var noThemeProvider = new Error('`theme` is invalid. `<ThemeProvider>` is not likely mounted.');
|
|
76
|
-
/**
|
|
77
|
-
* 子孫要素で使われるカラーテーマの CSS Variables を上書きする
|
|
78
|
-
*
|
|
79
|
-
* @params colorParams - 上書きしたい色の定義( `theme.color` の一部だけ書けば良い )
|
|
80
|
-
* @params effectParams - effect の定義を上書きしたい場合は渡す(必須ではない)
|
|
81
|
-
*
|
|
82
|
-
* @example
|
|
83
|
-
* ```tsx
|
|
84
|
-
* const LocalTheme = styled.div`
|
|
85
|
-
* ${defineThemeVariables({ text1: '#ff0000' })}
|
|
86
|
-
* // `text1` is now defined as red
|
|
87
|
-
* ${theme((o) => [o.font.text1])}
|
|
88
|
-
* `
|
|
89
|
-
* ```
|
|
90
|
-
*/
|
|
91
|
-
|
|
92
|
-
function defineThemeVariables(colorParams, effectParams) {
|
|
93
|
-
return function toCssObject(props) {
|
|
94
|
-
if (!isPresent(props.theme)) {
|
|
95
|
-
throw noThemeProvider;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
var colors = utils.filterObject(colorParams, isPresent); // flatMapObject の中で毎回 Object.entries を呼ぶのは無駄なので外で呼ぶ
|
|
99
|
-
|
|
100
|
-
var effects = Object.entries(_extends({}, props.theme.effect, effectParams));
|
|
101
|
-
return utils.flatMapObject(colors, function (colorKey, color) {
|
|
102
|
-
return [[utils.customPropertyToken(colorKey), color]].concat(effects.map(function (_ref3) {
|
|
103
|
-
var effectKey = _ref3[0],
|
|
104
|
-
effect = _ref3[1];
|
|
105
|
-
return [utils.customPropertyToken(colorKey, [effectKey]), utils.applyEffect(color, [effect])];
|
|
106
|
-
}));
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
function isSupportedEffect(effect) {
|
|
111
|
-
return ['hover', 'press', 'disabled'].includes(effect);
|
|
112
|
-
}
|
|
113
|
-
var variable = function variable(value) {
|
|
114
|
-
return "var(" + value + ")";
|
|
115
|
-
};
|
|
116
|
-
function onEffectPseudo(effect, css) {
|
|
117
|
-
var _hover, _active, _ref4;
|
|
118
|
-
|
|
119
|
-
return effect === 'hover' ? {
|
|
120
|
-
'&:hover': (_hover = {}, _hover[utils.notDisabledSelector] = css, _hover)
|
|
121
|
-
} : effect === 'press' ? {
|
|
122
|
-
'&:active': (_active = {}, _active[utils.notDisabledSelector] = css, _active)
|
|
123
|
-
} : // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
124
|
-
effect === 'disabled' ? (_ref4 = {}, _ref4[utils.disabledSelector] = css, _ref4) : unreachable(effect);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* 絶対にこれを export してはいけない
|
|
129
|
-
*
|
|
130
|
-
* さもないと `o.bg[internalSym]` みたいな叩き方が可能になってしまう(補完にも意図せず出てしまう)
|
|
131
|
-
*/
|
|
132
|
-
var internalSym = Symbol('internal');
|
|
133
|
-
/**
|
|
134
|
-
* CSSObject に変換可能なオブジェクトを作成する
|
|
135
|
-
*
|
|
136
|
-
* 実際に CSSObject に変換するには外部から `__DO_NOT_USE_GET_INTERNAL__` を使わなければならない
|
|
137
|
-
*
|
|
138
|
-
* これ以降メソッドチェーンが続いてもいいし、続かなくても良い
|
|
139
|
-
*/
|
|
140
|
-
|
|
141
|
-
function createInternal(_ref) {
|
|
142
|
-
var _ref2;
|
|
143
|
-
|
|
144
|
-
var toCSS = _ref.toCSS,
|
|
145
|
-
_ref$context = _ref.context,
|
|
146
|
-
context = _ref$context === void 0 ? {} : _ref$context;
|
|
147
|
-
return _ref2 = {}, _ref2[internalSym] = {
|
|
148
|
-
toCSS: toCSS,
|
|
149
|
-
context: context
|
|
150
|
-
}, _ref2;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
function __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal) {
|
|
154
|
-
return internal[internalSym];
|
|
155
|
-
} // half-leadingをキャンセルするとき && 垂直方向のpaddingが無い時
|
|
156
|
-
// -> before/afterを入れる
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
var shouldCancelHalfLeading = function shouldCancelHalfLeading(_ref3) {
|
|
160
|
-
var cancelHalfLeadingPx = _ref3.cancelHalfLeadingPx,
|
|
161
|
-
_ref3$hasVerticalPadd = _ref3.hasVerticalPadding,
|
|
162
|
-
hasVerticalPadding = _ref3$hasVerticalPadd === void 0 ? false : _ref3$hasVerticalPadd;
|
|
163
|
-
return cancelHalfLeadingPx !== undefined && !hasVerticalPadding;
|
|
164
|
-
};
|
|
165
|
-
/**
|
|
166
|
-
* 個別の Internal( o.〇〇 の返り値 )が提出した context の中身を1つの context にまとめる
|
|
167
|
-
*/
|
|
168
|
-
|
|
169
|
-
function getContext(internals) {
|
|
170
|
-
return internals.reduce(function (context, internal) {
|
|
171
|
-
return _extends({}, context, __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal).context);
|
|
172
|
-
}, {});
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* 全ユーザー定義からコンテキスト生成し、styled-components 向けに CSSObject を構築
|
|
176
|
-
*/
|
|
177
|
-
|
|
178
|
-
function toCSSObjects(internals) {
|
|
179
|
-
// 1パス目
|
|
180
|
-
// 全ユーザー定義を舐めて相互に影響し合う定義をチェックし、その結果(コンテキスト)を取得
|
|
181
|
-
var context = getContext(internals); // 2パス目
|
|
182
|
-
// コンテキストを見ながら最適化されたCSSを構築
|
|
183
|
-
|
|
184
|
-
return internals.map(function (v) {
|
|
185
|
-
return __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(v).toCSS(context);
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* 配列で指定したプロパティを動的に生やす
|
|
191
|
-
*
|
|
192
|
-
* @param source 拡張するオブジェクト
|
|
193
|
-
* @param member オブジェクトに生やすプロパティ一覧
|
|
194
|
-
* @param chain プロパティに格納される値を生成する関数
|
|
195
|
-
*
|
|
196
|
-
* @example
|
|
197
|
-
*
|
|
198
|
-
* const o = factory({}, ['red', 'blue'],
|
|
199
|
-
* color => hex(color)
|
|
200
|
-
* )
|
|
201
|
-
*
|
|
202
|
-
* console.log(o.red) //=> #ff0000
|
|
203
|
-
*/
|
|
204
|
-
|
|
205
|
-
var defineProperties = function defineProperties(source, member, chain) {
|
|
206
|
-
return Object.defineProperties(source, Object.fromEntries(member.map(function (key) {
|
|
207
|
-
return [key, {
|
|
208
|
-
get: function get() {
|
|
209
|
-
return chain(key);
|
|
210
|
-
},
|
|
211
|
-
enumerable: true,
|
|
212
|
-
configurable: true
|
|
213
|
-
}];
|
|
214
|
-
})));
|
|
215
|
-
};
|
|
216
|
-
/**
|
|
217
|
-
* 配列で指定した名前のメソッドを動的に生やす
|
|
218
|
-
*
|
|
219
|
-
* @param source 拡張するオブジェクト
|
|
220
|
-
* @param member オブジェクトに生やすメソッド名一覧
|
|
221
|
-
* @param chain メソッドの戻り値になる値を生成する関数
|
|
222
|
-
*
|
|
223
|
-
* @example
|
|
224
|
-
*
|
|
225
|
-
* const o = defineMethods({}, ['red', 'blue'],
|
|
226
|
-
* (color, alpha: number) => hex(color, alpha)
|
|
227
|
-
* )
|
|
228
|
-
*
|
|
229
|
-
* console.log(o.red(0.5)) //=> #ff000077
|
|
230
|
-
*/
|
|
231
|
-
|
|
232
|
-
var defineMethods = function defineMethods(source, member, chain) {
|
|
233
|
-
return Object.defineProperties(source, Object.fromEntries(member.map(function (key) {
|
|
234
|
-
return [key, {
|
|
235
|
-
value: function value() {
|
|
236
|
-
return chain.apply(void 0, [key].concat([].slice.call(arguments)));
|
|
237
|
-
},
|
|
238
|
-
enumerable: true,
|
|
239
|
-
configurable: true
|
|
240
|
-
}];
|
|
241
|
-
})));
|
|
242
|
-
};
|
|
243
|
-
/**
|
|
244
|
-
* オブジェクトで指定したプロパティ名と値を動的に生やす
|
|
245
|
-
*
|
|
246
|
-
* @param source 拡張するオブジェクト
|
|
247
|
-
* @param def オブジェクトに生やす定義(プロパティ名と値)
|
|
248
|
-
*
|
|
249
|
-
* @example
|
|
250
|
-
*
|
|
251
|
-
* const o = defineConstantProperties({}, {
|
|
252
|
-
* red: '#f00',
|
|
253
|
-
* blue: '#00f',
|
|
254
|
-
* })
|
|
255
|
-
*
|
|
256
|
-
* console.log(o.red) //=> #f00
|
|
257
|
-
*/
|
|
258
|
-
|
|
259
|
-
var defineConstantProperties = function defineConstantProperties(source, def) {
|
|
260
|
-
return defineProperties(source, Object.keys(def), function (key) {
|
|
261
|
-
return def[key];
|
|
262
|
-
});
|
|
263
|
-
};
|
|
264
|
-
/**
|
|
265
|
-
* 配列で指定したモディファイア(プロパティ)をチェーン可能な再帰オブジェクトを動的に生やす
|
|
266
|
-
*
|
|
267
|
-
* @param modifiers オブジェクトに生やすモディファイヤ一覧
|
|
268
|
-
* @param source 指定されたモディファイヤの一覧から値を生成する関数
|
|
269
|
-
*
|
|
270
|
-
* @example
|
|
271
|
-
*
|
|
272
|
-
* const o = definePropertyChains(['red', 'blue'],
|
|
273
|
-
* modifiers => modifiers.map(color => hex(color)).join(',')
|
|
274
|
-
* )
|
|
275
|
-
*
|
|
276
|
-
* console.log(o.red.blue) => #f00,#00f
|
|
277
|
-
*/
|
|
278
|
-
|
|
279
|
-
var definePropertyChains = function definePropertyChains(modifiers, source) {
|
|
280
|
-
return function definePropertiesRecursively(applied) {
|
|
281
|
-
var notApplied = modifiers.filter(function (v) {
|
|
282
|
-
return !applied.includes(v);
|
|
283
|
-
});
|
|
284
|
-
return defineProperties(source(applied), notApplied, function (modifier) {
|
|
285
|
-
return notApplied.length === 0 ? unreachable() : definePropertiesRecursively([].concat(applied, [modifier]));
|
|
286
|
-
});
|
|
287
|
-
}([]);
|
|
288
|
-
};
|
|
289
|
-
/**
|
|
290
|
-
* 配列で指定したモディファイア(メソッド)をチェーン可能な再帰オブジェクトを動的に生やす
|
|
291
|
-
*
|
|
292
|
-
* @param modifiers オブジェクトに生やすモディファイヤ一覧
|
|
293
|
-
* @param source 指定されたモディファイヤの一覧から値を生成する関数
|
|
294
|
-
* @param _inferPhantom 関数形式のモディファイヤの引数型を推論するためのメタタイプ(引数の個数に合わせてタプルで指定する)
|
|
295
|
-
*
|
|
296
|
-
* @example
|
|
297
|
-
*
|
|
298
|
-
* const o = defineMethodChains(['red', 'blue'],
|
|
299
|
-
* modifiers => modifiers.map(([color, alpha]) => hex(color, alpha)).join(',')
|
|
300
|
-
* , {} as [number])
|
|
301
|
-
*
|
|
302
|
-
* console.log(o.red(0.5).blue(1)) => #ff000077,#0000ffff
|
|
303
|
-
*/
|
|
304
|
-
|
|
305
|
-
var defineMethodChains = function defineMethodChains(modifiers, source) {
|
|
306
|
-
return function defineMethodsRecursively(applied) {
|
|
307
|
-
var notApplied = modifiers.filter(function (v) {
|
|
308
|
-
return !applied.map(function (_ref) {
|
|
309
|
-
var w = _ref[0];
|
|
310
|
-
return w;
|
|
311
|
-
}).includes(v);
|
|
312
|
-
});
|
|
313
|
-
return defineMethods(source(applied), notApplied, function (modifier) {
|
|
314
|
-
return notApplied.length === 0 ? unreachable() : defineMethodsRecursively([].concat(applied, [[modifier].concat([].slice.call(arguments, 1))]));
|
|
315
|
-
});
|
|
316
|
-
}([]);
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
var borderDirections = ['top', 'right', 'bottom', 'left'];
|
|
320
|
-
|
|
321
|
-
function borderProperty(direction) {
|
|
322
|
-
return "border-" + direction;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
function borderShorthand(color) {
|
|
326
|
-
return "solid 1px " + color;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
var createBorderCss = function createBorderCss(theme) {
|
|
330
|
-
return function (variant, directions) {
|
|
331
|
-
var all = directions.length === 0;
|
|
332
|
-
var value = borderShorthand(theme.border[variant].color);
|
|
333
|
-
return createInternal({
|
|
334
|
-
toCSS: function toCSS() {
|
|
335
|
-
return _extends({}, all ? {
|
|
336
|
-
border: value
|
|
337
|
-
} : directions.reduce(function (acc, direction) {
|
|
338
|
-
var _extends2;
|
|
339
|
-
|
|
340
|
-
return _extends({}, acc, (_extends2 = {}, _extends2[borderProperty(direction)] = value, _extends2));
|
|
341
|
-
}, {}));
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
};
|
|
345
|
-
};
|
|
346
|
-
function border(theme) {
|
|
347
|
-
var borderTypes = keyof(theme.border);
|
|
348
|
-
var borderCss = createBorderCss(theme);
|
|
349
|
-
var borderObject = defineConstantProperties({}, {
|
|
350
|
-
border: defineProperties({}, borderTypes, function (variant) {
|
|
351
|
-
return definePropertyChains(borderDirections, function (modifiers) {
|
|
352
|
-
return borderCss(variant, modifiers);
|
|
353
|
-
});
|
|
354
|
-
})
|
|
355
|
-
});
|
|
356
|
-
return borderObject;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
var createBorderRadiusCss = function createBorderRadiusCss(theme) {
|
|
360
|
-
return function (size) {
|
|
361
|
-
return createInternal({
|
|
362
|
-
toCSS: function toCSS() {
|
|
363
|
-
return {
|
|
364
|
-
borderRadius: utils.px(theme.borderRadius[size])
|
|
365
|
-
};
|
|
366
|
-
}
|
|
367
|
-
});
|
|
368
|
-
};
|
|
369
|
-
};
|
|
370
|
-
function borderRadius(theme) {
|
|
371
|
-
// 角丸
|
|
372
|
-
var borderRadiusCss = createBorderRadiusCss(theme);
|
|
373
|
-
var borderRadiusObject = defineConstantProperties({}, {
|
|
374
|
-
borderRadius: function borderRadius(radius) {
|
|
375
|
-
return borderRadiusCss(radius);
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
return borderRadiusObject;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
var TRANSITION_DURATION = 0.2;
|
|
382
|
-
/**
|
|
383
|
-
* context の状態を元に transition を追加する。必ず一番最後に呼ぶ
|
|
384
|
-
*/
|
|
385
|
-
|
|
386
|
-
function transition(_theme) {
|
|
387
|
-
var duration = utils.dur(TRANSITION_DURATION);
|
|
388
|
-
|
|
389
|
-
var transition = function transition(property) {
|
|
390
|
-
return {
|
|
391
|
-
transition: property.map(function (v) {
|
|
392
|
-
return duration + " " + v;
|
|
393
|
-
}).join(', ')
|
|
394
|
-
};
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
function toCSS(_ref) {
|
|
398
|
-
var _ref$colorTransition = _ref.colorTransition,
|
|
399
|
-
colorTransition = _ref$colorTransition === void 0 ? false : _ref$colorTransition,
|
|
400
|
-
_ref$backgroundColorT = _ref.backgroundColorTransition,
|
|
401
|
-
backgroundColorTransition = _ref$backgroundColorT === void 0 ? false : _ref$backgroundColorT,
|
|
402
|
-
_ref$boxShadowTransit = _ref.boxShadowTransition,
|
|
403
|
-
boxShadowTransition = _ref$boxShadowTransit === void 0 ? false : _ref$boxShadowTransit;
|
|
404
|
-
return transition([colorTransition ? 'color' : null, backgroundColorTransition ? 'background-color' : null, boxShadowTransition ? 'box-shadow' : null].filter(isPresent));
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
return createInternal({
|
|
408
|
-
toCSS: toCSS
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
function targetProperty(target) {
|
|
413
|
-
return target === 'bg' ? 'background-color' : 'color';
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
var createColorCss = function createColorCss(_theme) {
|
|
417
|
-
return function (target, color, effects) {
|
|
418
|
-
if (effects === void 0) {
|
|
419
|
-
effects = [];
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
function toCSS() {
|
|
423
|
-
var _extends2;
|
|
424
|
-
|
|
425
|
-
return _extends((_extends2 = {}, _extends2[targetProperty(target)] = variable(utils.customPropertyToken(color.toString())), _extends2), effects.filter(isSupportedEffect).reduce(function (acc, effect) {
|
|
426
|
-
var _onEffectPseudo;
|
|
427
|
-
|
|
428
|
-
return _extends({}, acc, onEffectPseudo(effect, (_onEffectPseudo = {}, _onEffectPseudo[targetProperty(target)] = variable(utils.customPropertyToken(color.toString(), [effect])), _onEffectPseudo)));
|
|
429
|
-
}, {}));
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
return createInternal({
|
|
433
|
-
toCSS: toCSS,
|
|
434
|
-
context: effects.length > 0 ? target === 'font' ? {
|
|
435
|
-
colorTransition: true
|
|
436
|
-
} : {
|
|
437
|
-
backgroundColorTransition: true
|
|
438
|
-
} : {}
|
|
439
|
-
});
|
|
440
|
-
};
|
|
441
|
-
};
|
|
442
|
-
var createGradientColorCss = function createGradientColorCss(theme) {
|
|
443
|
-
return function (color, effects, direction) {
|
|
444
|
-
if (effects === void 0) {
|
|
445
|
-
effects = [];
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
var toLinearGradient = utils.gradient(direction);
|
|
449
|
-
|
|
450
|
-
function toCSS(context) {
|
|
451
|
-
var optimized = !shouldCancelHalfLeading(context);
|
|
452
|
-
var duration = utils.dur(TRANSITION_DURATION);
|
|
453
|
-
|
|
454
|
-
if (optimized && effects.length > 0) {
|
|
455
|
-
return _extends({
|
|
456
|
-
position: 'relative',
|
|
457
|
-
zIndex: 0,
|
|
458
|
-
overflow: 'hidden'
|
|
459
|
-
}, effects.filter(isSupportedEffect).reduce(function (acc, effect) {
|
|
460
|
-
var _theme$effect$effect;
|
|
461
|
-
|
|
462
|
-
return _extends({}, acc, {
|
|
463
|
-
'&::before': _extends({
|
|
464
|
-
zIndex: -1
|
|
465
|
-
}, overlayElement, {
|
|
466
|
-
transition: duration + " background-color"
|
|
467
|
-
}),
|
|
468
|
-
'&::after': _extends({
|
|
469
|
-
zIndex: -2
|
|
470
|
-
}, overlayElement, toLinearGradient(theme.gradientColor[color]))
|
|
471
|
-
}, onEffectPseudo(effect, {
|
|
472
|
-
'&::before': {
|
|
473
|
-
backgroundColor: utils.applyEffect(null, (_theme$effect$effect = theme.effect[effect]) != null ? _theme$effect$effect : [])
|
|
474
|
-
}
|
|
475
|
-
}));
|
|
476
|
-
}, {}));
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
warning__default["default"](effects.length === 0, // eslint-disable-next-line max-len
|
|
480
|
-
"'Transition' will not be applied. You can get around this by specifying 'preserveHalfLeading' or both 'padding' and 'typograpy'.");
|
|
481
|
-
return _extends({}, toLinearGradient(theme.gradientColor[color]), effects.filter(isSupportedEffect).reduce(function (acc, effect) {
|
|
482
|
-
var _theme$effect$effect2;
|
|
483
|
-
|
|
484
|
-
return _extends({}, acc, onEffectPseudo(effect, _extends({}, toLinearGradient(utils.applyEffectToGradient((_theme$effect$effect2 = theme.effect[effect]) != null ? _theme$effect$effect2 : [])(theme.gradientColor[color])))));
|
|
485
|
-
}, {}));
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
return createInternal({
|
|
489
|
-
toCSS: toCSS
|
|
490
|
-
});
|
|
491
|
-
};
|
|
492
|
-
};
|
|
493
|
-
var overlayElement = {
|
|
494
|
-
content: "''",
|
|
495
|
-
display: 'block',
|
|
496
|
-
position: 'absolute',
|
|
497
|
-
width: '100%',
|
|
498
|
-
height: '100%',
|
|
499
|
-
top: 0,
|
|
500
|
-
left: 0
|
|
501
|
-
};
|
|
502
|
-
function colors(theme) {
|
|
503
|
-
var colors = keyof(theme.color);
|
|
504
|
-
var effects = keyof(theme.effect); // 色
|
|
505
|
-
|
|
506
|
-
var gradientColors = keyof(theme.gradientColor);
|
|
507
|
-
var colorCss = createColorCss();
|
|
508
|
-
var gradientColorCss = createGradientColorCss(theme);
|
|
509
|
-
var colorObject = defineConstantProperties({}, {
|
|
510
|
-
bg: objectAssign(defineProperties({}, colors, function (color) {
|
|
511
|
-
return definePropertyChains(effects, function (modifiers) {
|
|
512
|
-
return colorCss('bg', color, modifiers);
|
|
513
|
-
});
|
|
514
|
-
}), defineProperties({}, gradientColors, function (color) {
|
|
515
|
-
return function (direction) {
|
|
516
|
-
return definePropertyChains(effects, function (modifiers) {
|
|
517
|
-
return gradientColorCss(color, modifiers, direction);
|
|
518
|
-
});
|
|
519
|
-
};
|
|
520
|
-
})),
|
|
521
|
-
font: defineProperties({}, colors, function (color) {
|
|
522
|
-
return definePropertyChains(effects, function (modifiers) {
|
|
523
|
-
return colorCss('font', color, modifiers);
|
|
524
|
-
});
|
|
525
|
-
})
|
|
526
|
-
});
|
|
527
|
-
return colorObject;
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
var createElementEffectCss = function createElementEffectCss(theme) {
|
|
531
|
-
return function (effects) {
|
|
532
|
-
if (effects === void 0) {
|
|
533
|
-
effects = [];
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
return createInternal({
|
|
537
|
-
toCSS: function toCSS() {
|
|
538
|
-
return effects.filter(isSupportedEffect).reduce(function (acc, effect) {
|
|
539
|
-
var _theme$elementEffect$, _theme$elementEffect$2;
|
|
540
|
-
|
|
541
|
-
return _extends({}, acc, onEffectPseudo(effect, {
|
|
542
|
-
opacity: !Array.isArray(theme.elementEffect[effect]) && ((_theme$elementEffect$ = theme.elementEffect[effect]) == null ? void 0 : _theme$elementEffect$.type) === 'opacity' ? (_theme$elementEffect$2 = theme.elementEffect[effect]) == null ? void 0 : _theme$elementEffect$2.opacity : unreachable()
|
|
543
|
-
}));
|
|
544
|
-
}, {});
|
|
545
|
-
}
|
|
546
|
-
});
|
|
547
|
-
};
|
|
548
|
-
};
|
|
549
|
-
function elementEffect(theme) {
|
|
550
|
-
var effectTypes = keyof(theme.elementEffect); // 要素へのエフェクト (etc: 透過)
|
|
551
|
-
|
|
552
|
-
var elementEffectCss = createElementEffectCss(theme);
|
|
553
|
-
var elementEffectObject = definePropertyChains(effectTypes, function (modifiers) {
|
|
554
|
-
return elementEffectCss(modifiers);
|
|
555
|
-
});
|
|
556
|
-
return elementEffectObject;
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
var outlineType = ['focus'];
|
|
560
|
-
|
|
561
|
-
var outlineCss = function outlineCss(weight, color) {
|
|
562
|
-
return {
|
|
563
|
-
boxShadow: "0 0 0 " + utils.px(weight) + " " + color
|
|
564
|
-
};
|
|
565
|
-
};
|
|
566
|
-
|
|
567
|
-
var createOutlineColorCss = function createOutlineColorCss(theme) {
|
|
568
|
-
return function (variant, modifiers) {
|
|
569
|
-
var weight = theme.outline[variant].weight;
|
|
570
|
-
var color = theme.outline[variant].color;
|
|
571
|
-
return createInternal({
|
|
572
|
-
toCSS: function toCSS() {
|
|
573
|
-
var _;
|
|
574
|
-
|
|
575
|
-
return modifiers.includes('focus') ? onFocus(outlineCss(weight, color)) : {
|
|
576
|
-
'&&': (_ = {}, _[utils.notDisabledSelector] = outlineCss(weight, color), _)
|
|
577
|
-
};
|
|
578
|
-
},
|
|
579
|
-
context: {
|
|
580
|
-
boxShadowTransition: true
|
|
581
|
-
}
|
|
582
|
-
});
|
|
583
|
-
};
|
|
584
|
-
};
|
|
585
|
-
/**
|
|
586
|
-
* @see https://developer.mozilla.org/ja/docs/Web/CSS/:focus-visible#selectively_showing_the_focus_indicator
|
|
587
|
-
*/
|
|
588
|
-
|
|
589
|
-
var onFocus = function onFocus(css) {
|
|
590
|
-
var _ref;
|
|
591
|
-
|
|
592
|
-
return _ref = {}, _ref[utils.notDisabledSelector] = {
|
|
593
|
-
'&:focus, &:active': _extends({
|
|
594
|
-
outline: 'none'
|
|
595
|
-
}, css),
|
|
596
|
-
'&:focus:not(:focus-visible), &:active:not(:focus-visible)': {
|
|
597
|
-
outline: 'none'
|
|
598
|
-
},
|
|
599
|
-
'&:focus-visible': _extends({
|
|
600
|
-
outline: 'none'
|
|
601
|
-
}, css)
|
|
602
|
-
}, _ref;
|
|
603
|
-
};
|
|
604
|
-
|
|
605
|
-
function outline(theme) {
|
|
606
|
-
var outlineCss = createOutlineColorCss(theme);
|
|
607
|
-
var outlineObject = defineConstantProperties({}, {
|
|
608
|
-
outline: defineProperties({}, keyof(theme.outline), function (variant) {
|
|
609
|
-
return definePropertyChains(outlineType, function (modifiers) {
|
|
610
|
-
return outlineCss(variant, modifiers);
|
|
611
|
-
});
|
|
612
|
-
})
|
|
613
|
-
});
|
|
614
|
-
return outlineObject;
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
var fixedProperties = ['width', 'height'];
|
|
618
|
-
var createFixedPxCss = function createFixedPxCss(theme) {
|
|
619
|
-
return function (property, size) {
|
|
620
|
-
return createInternal({
|
|
621
|
-
toCSS: function toCSS() {
|
|
622
|
-
var _ref;
|
|
623
|
-
|
|
624
|
-
return _ref = {}, _ref[property] = size === 'auto' ? 'auto' : utils.px(theme.spacing[size]), _ref;
|
|
625
|
-
}
|
|
626
|
-
});
|
|
627
|
-
};
|
|
628
|
-
};
|
|
629
|
-
var createFixedRelativeCss = function createFixedRelativeCss(_theme) {
|
|
630
|
-
return function (property, amount) {
|
|
631
|
-
return createInternal({
|
|
632
|
-
toCSS: function toCSS() {
|
|
633
|
-
var _ref2;
|
|
634
|
-
|
|
635
|
-
return _ref2 = {}, _ref2[property] = amount, _ref2;
|
|
636
|
-
}
|
|
637
|
-
});
|
|
638
|
-
};
|
|
639
|
-
};
|
|
640
|
-
var createFixedColumnCss = function createFixedColumnCss(theme) {
|
|
641
|
-
return function (property, span) {
|
|
642
|
-
return createInternal({
|
|
643
|
-
toCSS: function toCSS() {
|
|
644
|
-
var _ref3;
|
|
645
|
-
|
|
646
|
-
return _ref3 = {}, _ref3[property] = utils.px(foundation.columnSystem(span, theme.grid.unit.column, theme.grid.unit.gutter)), _ref3;
|
|
647
|
-
}
|
|
648
|
-
});
|
|
649
|
-
};
|
|
650
|
-
};
|
|
651
|
-
function size(theme) {
|
|
652
|
-
var fixedPxCss = createFixedPxCss(theme);
|
|
653
|
-
var fixedColumnCss = createFixedColumnCss(theme);
|
|
654
|
-
var fixedRelativeCss = createFixedRelativeCss();
|
|
655
|
-
var fixedObject = defineProperties({}, fixedProperties, function (property) {
|
|
656
|
-
return defineConstantProperties({}, {
|
|
657
|
-
px: function px(size) {
|
|
658
|
-
return fixedPxCss(property, size);
|
|
659
|
-
},
|
|
660
|
-
column: function column(span) {
|
|
661
|
-
return fixedColumnCss(property, span);
|
|
662
|
-
},
|
|
663
|
-
auto: fixedRelativeCss(property, 'auto'),
|
|
664
|
-
full: fixedRelativeCss(property, '100%')
|
|
665
|
-
});
|
|
666
|
-
});
|
|
667
|
-
return fixedObject;
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
var spacingProperties = ['margin', 'padding'];
|
|
671
|
-
var spacingDirections = ['top', 'right', 'bottom', 'left', 'vertical', 'horizontal', 'all'];
|
|
672
|
-
|
|
673
|
-
function spacingProperty(property, direction) {
|
|
674
|
-
return property + "-" + direction;
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
var createSpacingCss = function createSpacingCss(theme) {
|
|
678
|
-
return function (property, modifiers) {
|
|
679
|
-
var _modifiers$reduce = modifiers.reduce(function (acc, _ref) {
|
|
680
|
-
var direction = _ref[0],
|
|
681
|
-
size = _ref[1];
|
|
682
|
-
|
|
683
|
-
if (direction === 'all') {
|
|
684
|
-
acc.top = size;
|
|
685
|
-
acc.right = size;
|
|
686
|
-
acc.bottom = size;
|
|
687
|
-
acc.left = size;
|
|
688
|
-
} else if (direction === 'vertical') {
|
|
689
|
-
acc.top = size;
|
|
690
|
-
acc.bottom = size;
|
|
691
|
-
} else if (direction === 'horizontal') {
|
|
692
|
-
acc.right = size;
|
|
693
|
-
acc.left = size;
|
|
694
|
-
} else {
|
|
695
|
-
acc[direction] = size;
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
return acc;
|
|
699
|
-
}, {}),
|
|
700
|
-
top = _modifiers$reduce.top,
|
|
701
|
-
right = _modifiers$reduce.right,
|
|
702
|
-
bottom = _modifiers$reduce.bottom,
|
|
703
|
-
left = _modifiers$reduce.left;
|
|
704
|
-
|
|
705
|
-
var hasVerticalPadding = property === 'padding' && top !== undefined && bottom !== undefined && top !== 'auto' && bottom !== 'auto';
|
|
706
|
-
|
|
707
|
-
function toCSS(_ref2) {
|
|
708
|
-
var _ref3, _ref4, _ref5, _ref6;
|
|
709
|
-
|
|
710
|
-
var _ref2$cancelHalfLeadi = _ref2.cancelHalfLeadingPx,
|
|
711
|
-
cancelHalfLeadingPx = _ref2$cancelHalfLeadi === void 0 ? 0 : _ref2$cancelHalfLeadi;
|
|
712
|
-
return _extends({}, top !== undefined && (_ref3 = {}, _ref3[spacingProperty(property, 'top')] = top === 'auto' ? 'auto' : utils.px(theme.spacing[top] + (hasVerticalPadding ? cancelHalfLeadingPx : 0)), _ref3), bottom !== undefined && (_ref4 = {}, _ref4[spacingProperty(property, 'bottom')] = bottom === 'auto' ? 'auto' : utils.px(theme.spacing[bottom] + (hasVerticalPadding ? cancelHalfLeadingPx : 0)), _ref4), right !== undefined && (_ref5 = {}, _ref5[spacingProperty(property, 'right')] = right === 'auto' ? 'auto' : utils.px(theme.spacing[right]), _ref5), left !== undefined && (_ref6 = {}, _ref6[spacingProperty(property, 'left')] = left === 'auto' ? 'auto' : utils.px(theme.spacing[left]), _ref6));
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
return createInternal({
|
|
716
|
-
toCSS: toCSS,
|
|
717
|
-
context: hasVerticalPadding ? {
|
|
718
|
-
hasVerticalPadding: true
|
|
719
|
-
} : {}
|
|
720
|
-
});
|
|
721
|
-
};
|
|
722
|
-
};
|
|
723
|
-
function spacing(theme) {
|
|
724
|
-
var spacingCss = createSpacingCss(theme);
|
|
725
|
-
var spacingObject = defineProperties({}, spacingProperties, function (spacingProperty) {
|
|
726
|
-
return defineMethodChains(spacingDirections, function (modifiers) {
|
|
727
|
-
return spacingCss(spacingProperty, modifiers);
|
|
728
|
-
});
|
|
729
|
-
});
|
|
730
|
-
return spacingObject;
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
var createTypographyCss = function createTypographyCss(theme) {
|
|
734
|
-
return function (size, options) {
|
|
735
|
-
if (options === void 0) {
|
|
736
|
-
options = {};
|
|
737
|
-
}
|
|
738
|
-
|
|
739
|
-
var _options = options,
|
|
740
|
-
_options$preserveHalf = _options.preserveHalfLeading,
|
|
741
|
-
preserveHalfLeading = _options$preserveHalf === void 0 ? false : _options$preserveHalf,
|
|
742
|
-
_options$monospace = _options.monospace,
|
|
743
|
-
monospace = _options$monospace === void 0 ? false : _options$monospace,
|
|
744
|
-
_options$bold = _options.bold,
|
|
745
|
-
bold = _options$bold === void 0 ? false : _options$bold;
|
|
746
|
-
var descriptor = theme.typography.size[size];
|
|
747
|
-
var margin = -utils.halfLeading(descriptor);
|
|
748
|
-
|
|
749
|
-
function toCSS(context) {
|
|
750
|
-
return _extends({
|
|
751
|
-
fontSize: utils.px(descriptor.fontSize),
|
|
752
|
-
lineHeight: utils.px(descriptor.lineHeight)
|
|
753
|
-
}, monospace && {
|
|
754
|
-
fontFamily: 'monospace'
|
|
755
|
-
}, bold && {
|
|
756
|
-
fontWeight: 'bold'
|
|
757
|
-
}, shouldCancelHalfLeading(context) && {
|
|
758
|
-
// prevent margin collapsing
|
|
759
|
-
display: 'flow-root',
|
|
760
|
-
// cancel half-leading with negative margin
|
|
761
|
-
'&::before': _extends({}, leadingCancel, {
|
|
762
|
-
marginTop: utils.px(margin)
|
|
763
|
-
}),
|
|
764
|
-
'&::after': _extends({}, leadingCancel, {
|
|
765
|
-
marginBottom: utils.px(margin)
|
|
766
|
-
})
|
|
767
|
-
});
|
|
768
|
-
}
|
|
769
|
-
|
|
770
|
-
return createInternal({
|
|
771
|
-
toCSS: toCSS,
|
|
772
|
-
context: !preserveHalfLeading ? {
|
|
773
|
-
cancelHalfLeadingPx: margin
|
|
774
|
-
} : {}
|
|
775
|
-
});
|
|
776
|
-
};
|
|
777
|
-
};
|
|
778
|
-
var leadingCancel = {
|
|
779
|
-
display: 'block',
|
|
780
|
-
width: 0,
|
|
781
|
-
height: 0,
|
|
782
|
-
content: "''"
|
|
783
|
-
}; // タイポグラフィ
|
|
784
|
-
|
|
785
|
-
var typographyModifiers = [// TODO
|
|
786
|
-
'monospace', 'bold', 'preserveHalfLeading'];
|
|
787
|
-
function typography(theme) {
|
|
788
|
-
var typographyCss = createTypographyCss(theme);
|
|
789
|
-
var typographyObject = defineProperties({}, ['typography'], function (_) {
|
|
790
|
-
return function (size) {
|
|
791
|
-
return definePropertyChains(typographyModifiers, function (modifiers) {
|
|
792
|
-
return typographyCss(size, {
|
|
793
|
-
preserveHalfLeading: modifiers.includes('preserveHalfLeading'),
|
|
794
|
-
monospace: modifiers.includes('monospace'),
|
|
795
|
-
bold: modifiers.includes('bold')
|
|
796
|
-
});
|
|
797
|
-
});
|
|
798
|
-
};
|
|
799
|
-
});
|
|
800
|
-
return typographyObject;
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
/**
|
|
804
|
-
* `theme(o => [...])` の `o` の部分を構築する
|
|
805
|
-
*
|
|
806
|
-
* @param theme テーマオブジェクト
|
|
807
|
-
* @param DO_NOTHING_IT_IS_JUST_CALLED_FOR_TYPE_INFERENCE 型推論のためだけに使う場合にランタイムコストをゼロにするフラグ
|
|
808
|
-
*/
|
|
809
|
-
|
|
810
|
-
function createO(theme, DO_NOTHING_IT_IS_JUST_CALLED_FOR_TYPE_INFERENCE) {
|
|
811
|
-
if (DO_NOTHING_IT_IS_JUST_CALLED_FOR_TYPE_INFERENCE === void 0) {
|
|
812
|
-
DO_NOTHING_IT_IS_JUST_CALLED_FOR_TYPE_INFERENCE = false;
|
|
813
|
-
}
|
|
814
|
-
|
|
815
|
-
if (DO_NOTHING_IT_IS_JUST_CALLED_FOR_TYPE_INFERENCE) {
|
|
816
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
817
|
-
return {};
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
return objectAssign(colors(theme), typography(theme), spacing(theme), size(theme), elementEffect(theme), border(theme), borderRadius(theme), outline(theme));
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
824
|
-
var GlobalStyle = styledComponents.createGlobalStyle(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref) {
|
|
825
|
-
var themeMap = _ref.themeMap,
|
|
826
|
-
background = _ref.background;
|
|
827
|
-
return Object.entries(themeMap).map(function (_ref2) {
|
|
828
|
-
var key = _ref2[0],
|
|
829
|
-
theme = _ref2[1];
|
|
830
|
-
return key.startsWith('@media') ? styledComponents.css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n ", " {\n :root {\n ", "\n ", "\n }\n }\n "])), key, background !== undefined && styledComponents.css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n background-color: ", ";\n "])), theme.color[background]), defineColorVariableCSS(theme)) : styledComponents.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n /* stylelint-disable-next-line no-duplicate-selectors */\n ", " {\n ", "\n ", "\n }\n "])), key, background !== undefined && styledComponents.css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n background-color: ", ";\n "])), theme.color[background]), defineColorVariableCSS(theme));
|
|
831
|
-
});
|
|
832
|
-
});
|
|
833
|
-
function TokenInjector(_ref3) {
|
|
834
|
-
var themeMap = _ref3.theme,
|
|
835
|
-
background = _ref3.background;
|
|
836
|
-
return /*#__PURE__*/React__default["default"].createElement(GlobalStyle, {
|
|
837
|
-
themeMap: themeMap,
|
|
838
|
-
background: background
|
|
839
|
-
});
|
|
840
|
-
}
|
|
841
|
-
|
|
842
|
-
var defineColorVariableCSS = function defineColorVariableCSS(theme) {
|
|
843
|
-
return Object.entries(defineThemeVariables(theme.color)({
|
|
844
|
-
theme: theme
|
|
845
|
-
})).map(function (_ref4) {
|
|
846
|
-
var varName = _ref4[0],
|
|
847
|
-
value = _ref4[1];
|
|
848
|
-
return variableDefinition(varName, value.toString());
|
|
849
|
-
}).join(';');
|
|
850
|
-
};
|
|
851
|
-
|
|
852
|
-
var variableDefinition = function variableDefinition(prop, value) {
|
|
853
|
-
return prop + ": " + value;
|
|
854
|
-
};
|
|
855
|
-
|
|
856
|
-
var LOCAL_STORAGE_KEY = 'charcoal-theme';
|
|
857
|
-
var DEFAULT_ROOT_ATTRIBUTE = 'theme';
|
|
858
|
-
var keyStringRegExp = new RegExp(/^(\w|-)+$/);
|
|
859
|
-
/**
|
|
860
|
-
* 文字列が英数字_-のみで構成されているか検証する。不正な文字列ならエラーを投げる
|
|
861
|
-
* @param key 検証するキー
|
|
862
|
-
*/
|
|
863
|
-
|
|
864
|
-
function assertKeyString(key) {
|
|
865
|
-
if (!keyStringRegExp.test(key)) {
|
|
866
|
-
throw new Error("Unexpected key :" + key + ", expect: /^(\\w|-)+$/");
|
|
867
|
-
}
|
|
868
|
-
}
|
|
869
|
-
/**
|
|
870
|
-
* `<html data-theme="dark">` のような設定を行うデフォルトのセッター
|
|
871
|
-
*/
|
|
872
|
-
|
|
873
|
-
var themeSetter = function themeSetter(attr) {
|
|
874
|
-
if (attr === void 0) {
|
|
875
|
-
attr = DEFAULT_ROOT_ATTRIBUTE;
|
|
876
|
-
}
|
|
877
|
-
|
|
878
|
-
return function (theme) {
|
|
879
|
-
assertKeyString(attr);
|
|
880
|
-
|
|
881
|
-
if (theme !== undefined) {
|
|
882
|
-
document.documentElement.dataset[attr] = theme;
|
|
883
|
-
} else {
|
|
884
|
-
delete document.documentElement.dataset[attr];
|
|
885
|
-
}
|
|
886
|
-
};
|
|
887
|
-
};
|
|
888
|
-
/**
|
|
889
|
-
* `<html data-theme="dark">` にマッチするセレクタを生成する
|
|
890
|
-
*/
|
|
891
|
-
|
|
892
|
-
function themeSelector(theme, attr) {
|
|
893
|
-
return ":root[data-" + (attr != null ? attr : DEFAULT_ROOT_ATTRIBUTE) + "='" + theme + "']";
|
|
894
|
-
}
|
|
895
|
-
/**
|
|
896
|
-
* prefers-color-scheme を利用する media クエリを生成する
|
|
897
|
-
*/
|
|
898
|
-
|
|
899
|
-
function prefersColorScheme(theme) {
|
|
900
|
-
return "@media (prefers-color-scheme: " + theme + ")";
|
|
901
|
-
}
|
|
902
|
-
/**
|
|
903
|
-
* LocalStorageからテーマの情報を取得して、変化時にテーマをセットするhooks
|
|
904
|
-
*/
|
|
905
|
-
|
|
906
|
-
function useThemeSetter(_temp) {
|
|
907
|
-
var _ref = _temp === void 0 ? {} : _temp,
|
|
908
|
-
_ref$key = _ref.key,
|
|
909
|
-
key = _ref$key === void 0 ? LOCAL_STORAGE_KEY : _ref$key,
|
|
910
|
-
_ref$setter = _ref.setter,
|
|
911
|
-
setter = _ref$setter === void 0 ? themeSetter() : _ref$setter;
|
|
912
|
-
|
|
913
|
-
var _useTheme = useTheme(key),
|
|
914
|
-
theme = _useTheme[0],
|
|
915
|
-
system = _useTheme[2];
|
|
916
|
-
|
|
917
|
-
React.useEffect(function () {
|
|
918
|
-
if (theme === undefined) {
|
|
919
|
-
return;
|
|
920
|
-
} // prefers-color-scheme から値を取っている場合にはcssのみで処理したいのでアンセットする
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
setter(system ? undefined : theme);
|
|
924
|
-
}, [setter, system, theme]);
|
|
925
|
-
}
|
|
926
|
-
/**
|
|
927
|
-
* 同期的にLocalStorageからテーマを取得するヘルパ
|
|
928
|
-
*/
|
|
929
|
-
|
|
930
|
-
function getThemeSync(key) {
|
|
931
|
-
if (key === void 0) {
|
|
932
|
-
key = LOCAL_STORAGE_KEY;
|
|
933
|
-
}
|
|
934
|
-
|
|
935
|
-
var theme = localStorage.getItem(key);
|
|
936
|
-
return theme;
|
|
937
|
-
}
|
|
938
|
-
/**
|
|
939
|
-
* LocalStorage, prefers-color-scheme からテーマの情報を取得して、現在のテーマを返すhooks
|
|
940
|
-
*
|
|
941
|
-
* `dark` `light` という名前だけは特別扱いされていて、prefers-color-schemeにマッチした場合に返ります
|
|
942
|
-
*/
|
|
943
|
-
|
|
944
|
-
var useTheme = function useTheme(key) {
|
|
945
|
-
if (key === void 0) {
|
|
946
|
-
key = LOCAL_STORAGE_KEY;
|
|
947
|
-
}
|
|
948
|
-
|
|
949
|
-
assertKeyString(key);
|
|
950
|
-
var isDark = useMedia('(prefers-color-scheme: dark)');
|
|
951
|
-
var media = isDark !== undefined ? isDark ? 'dark' : 'light' : undefined;
|
|
952
|
-
|
|
953
|
-
var _useLocalStorage = useLocalStorage(key),
|
|
954
|
-
local = _useLocalStorage[0],
|
|
955
|
-
setTheme = _useLocalStorage[1],
|
|
956
|
-
ready = _useLocalStorage[2];
|
|
957
|
-
|
|
958
|
-
var theme = !ready || media === undefined ? undefined : local != null ? local : media;
|
|
959
|
-
var system = local === undefined;
|
|
960
|
-
return [theme, setTheme, system];
|
|
961
|
-
};
|
|
962
|
-
function useLocalStorage(key, defaultValue) {
|
|
963
|
-
var _useState = React.useState(false),
|
|
964
|
-
ready = _useState[0],
|
|
965
|
-
setReady = _useState[1];
|
|
966
|
-
|
|
967
|
-
var _useState2 = React.useState(),
|
|
968
|
-
state = _useState2[0],
|
|
969
|
-
setState = _useState2[1];
|
|
970
|
-
|
|
971
|
-
var defaultValueMemo = React.useMemo(function () {
|
|
972
|
-
return defaultValue == null ? void 0 : defaultValue();
|
|
973
|
-
}, [defaultValue]);
|
|
974
|
-
React.useEffect(function () {
|
|
975
|
-
fetch();
|
|
976
|
-
window.addEventListener('storage', handleStorage);
|
|
977
|
-
return function () {
|
|
978
|
-
window.removeEventListener('storage', handleStorage);
|
|
979
|
-
};
|
|
980
|
-
});
|
|
981
|
-
|
|
982
|
-
var handleStorage = function handleStorage(e) {
|
|
983
|
-
if (e.storageArea !== localStorage) {
|
|
984
|
-
return;
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
if (e.key !== key) {
|
|
988
|
-
return;
|
|
989
|
-
}
|
|
990
|
-
|
|
991
|
-
fetch();
|
|
992
|
-
};
|
|
993
|
-
|
|
994
|
-
var fetch = function fetch() {
|
|
995
|
-
var _ref2;
|
|
996
|
-
|
|
997
|
-
var raw = localStorage.getItem(key);
|
|
998
|
-
setState((_ref2 = raw !== null ? deserialize(raw) : null) != null ? _ref2 : defaultValueMemo);
|
|
999
|
-
setReady(true);
|
|
1000
|
-
};
|
|
1001
|
-
|
|
1002
|
-
var set = function set(value) {
|
|
1003
|
-
if (value === undefined) {
|
|
1004
|
-
// undefinedがセットされる場合にはkeyごと削除
|
|
1005
|
-
localStorage.removeItem(key);
|
|
1006
|
-
} else {
|
|
1007
|
-
var raw = serialize(value);
|
|
1008
|
-
localStorage.setItem(key, raw);
|
|
1009
|
-
} // 同一ウィンドウではstorageイベントが発火しないので、手動で発火させる
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
var event = new StorageEvent('storage', {
|
|
1013
|
-
bubbles: true,
|
|
1014
|
-
cancelable: false,
|
|
1015
|
-
key: key,
|
|
1016
|
-
url: location.href,
|
|
1017
|
-
storageArea: localStorage
|
|
1018
|
-
});
|
|
1019
|
-
dispatchEvent(event);
|
|
1020
|
-
};
|
|
1021
|
-
|
|
1022
|
-
return [state != null ? state : defaultValueMemo, set, ready];
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
function deserialize(raw) {
|
|
1026
|
-
try {
|
|
1027
|
-
return JSON.parse(raw);
|
|
1028
|
-
} catch (_unused) {
|
|
1029
|
-
// syntax error はすべて文字列として扱う
|
|
1030
|
-
return raw;
|
|
1031
|
-
}
|
|
1032
|
-
}
|
|
1033
|
-
|
|
1034
|
-
function serialize(value) {
|
|
1035
|
-
if (typeof value === 'string') {
|
|
1036
|
-
return value;
|
|
1037
|
-
} else {
|
|
1038
|
-
return JSON.stringify(value);
|
|
1039
|
-
}
|
|
1040
|
-
}
|
|
1041
|
-
|
|
1042
|
-
function useMedia(query) {
|
|
1043
|
-
var _useState3 = React.useState(),
|
|
1044
|
-
match = _useState3[0],
|
|
1045
|
-
setState = _useState3[1];
|
|
1046
|
-
|
|
1047
|
-
React.useEffect(function () {
|
|
1048
|
-
var matcher = window.matchMedia(query);
|
|
1049
|
-
|
|
1050
|
-
var onChange = function onChange() {
|
|
1051
|
-
setState(matcher.matches);
|
|
1052
|
-
};
|
|
1053
|
-
|
|
1054
|
-
matcher.addEventListener('change', onChange);
|
|
1055
|
-
setState(matcher.matches);
|
|
1056
|
-
return function () {
|
|
1057
|
-
matcher.removeEventListener('change', onChange);
|
|
1058
|
-
};
|
|
1059
|
-
}, [query]);
|
|
1060
|
-
return match;
|
|
1061
|
-
}
|
|
1062
|
-
|
|
1063
|
-
/**
|
|
1064
|
-
* 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するコードを取得する
|
|
1065
|
-
* @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト
|
|
1066
|
-
* @returns ソースコードの文字列
|
|
1067
|
-
*/
|
|
1068
|
-
|
|
1069
|
-
function makeSetThemeScriptCode(_temp) {
|
|
1070
|
-
var _ref = _temp === void 0 ? defaultProps : _temp,
|
|
1071
|
-
_ref$localStorageKey = _ref.localStorageKey,
|
|
1072
|
-
localStorageKey = _ref$localStorageKey === void 0 ? defaultProps.localStorageKey : _ref$localStorageKey,
|
|
1073
|
-
_ref$rootAttribute = _ref.rootAttribute,
|
|
1074
|
-
rootAttribute = _ref$rootAttribute === void 0 ? defaultProps.rootAttribute : _ref$rootAttribute;
|
|
1075
|
-
|
|
1076
|
-
assertKeyString(localStorageKey);
|
|
1077
|
-
assertKeyString(rootAttribute);
|
|
1078
|
-
return "'use strict';\n(function () {\n var localStorageKey = '" + localStorageKey + "'\n var rootAttribute = '" + rootAttribute + "'\n var currentTheme = localStorage.getItem(localStorageKey);\n if (currentTheme) {\n document.documentElement.dataset[rootAttribute] = currentTheme;\n }\n})();\n";
|
|
1079
|
-
}
|
|
1080
|
-
/**
|
|
1081
|
-
* 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するスクリプトタグ
|
|
1082
|
-
* @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト
|
|
1083
|
-
* @returns
|
|
1084
|
-
*/
|
|
1085
|
-
|
|
1086
|
-
function SetThemeScript(props) {
|
|
1087
|
-
var src = makeSetThemeScriptCode(props);
|
|
1088
|
-
return /*#__PURE__*/React__default["default"].createElement("script", {
|
|
1089
|
-
dangerouslySetInnerHTML: {
|
|
1090
|
-
__html: src
|
|
1091
|
-
}
|
|
1092
|
-
});
|
|
1093
|
-
}
|
|
1094
|
-
var defaultProps = {
|
|
1095
|
-
localStorageKey: LOCAL_STORAGE_KEY,
|
|
1096
|
-
rootAttribute: DEFAULT_ROOT_ATTRIBUTE
|
|
1097
|
-
};
|
|
1098
|
-
SetThemeScript.defaultProps = defaultProps;
|
|
1099
|
-
|
|
1100
|
-
var nonBlank = function nonBlank(value) {
|
|
1101
|
-
return isPresent(value) && value !== false;
|
|
1102
|
-
};
|
|
1103
|
-
/**
|
|
1104
|
-
* `theme(o => [...])` の `theme` ユーティリティを構築する
|
|
1105
|
-
*
|
|
1106
|
-
* @param _styled - DEPRECATED: styled-componnets の `styled` そのものを渡すとそれを元に型推論ができる。が、型引数を渡す方が型推論が高速になりやすい
|
|
1107
|
-
*
|
|
1108
|
-
* @example
|
|
1109
|
-
*
|
|
1110
|
-
* import styled from 'styled-components'
|
|
1111
|
-
* const theme = createTheme(styled)
|
|
1112
|
-
*
|
|
1113
|
-
* @example
|
|
1114
|
-
*
|
|
1115
|
-
* const theme = createTheme<DefaultTheme>()
|
|
1116
|
-
*/
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
function createTheme(_styled) {
|
|
1120
|
-
/**
|
|
1121
|
-
* 本当は `type Builder = ReturnType<createO<T>>` みたいな型を作って、それを o の型にしたい。
|
|
1122
|
-
* が、styled がつくられた時点の TypeScript ではこういうジェネリクスの使い方ができなかった
|
|
1123
|
-
* なので代わりに特に意味のない `createO` の呼び出しをやっている
|
|
1124
|
-
*/
|
|
1125
|
-
createO( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
|
|
1126
|
-
{},
|
|
1127
|
-
/** DO_NOTHING_IT_IS_JUST_CALLED_FOR_TYPE_INFERENCE = */
|
|
1128
|
-
true); // ランタイムの `theme(o => [...])` のインターフェースを構築する
|
|
1129
|
-
|
|
1130
|
-
return function theme(specFn) {
|
|
1131
|
-
// styled-components のテンプレートに埋め込める関数
|
|
1132
|
-
return function interpolate(_ref) {
|
|
1133
|
-
var theme = _ref.theme;
|
|
1134
|
-
|
|
1135
|
-
if (!isPresent(theme)) {
|
|
1136
|
-
// テーマが入っていない場合は復旧不可能なのでエラーにする
|
|
1137
|
-
throw noThemeProvider;
|
|
1138
|
-
}
|
|
1139
|
-
|
|
1140
|
-
var internals = [].concat(wrapArray(
|
|
1141
|
-
/**
|
|
1142
|
-
* こう書いてはいけない
|
|
1143
|
-
*
|
|
1144
|
-
* ❌
|
|
1145
|
-
* ```ts
|
|
1146
|
-
* const o = createO(theme)
|
|
1147
|
-
* const declaration = spec(o)
|
|
1148
|
-
* ```
|
|
1149
|
-
*
|
|
1150
|
-
* `o` を一時変数に入れてしまうと型 `T` の具象化が行われるので関数内に書く
|
|
1151
|
-
*/
|
|
1152
|
-
specFn(
|
|
1153
|
-
/** o = */
|
|
1154
|
-
createO(theme))), [// 必ず挿入される共通のルール
|
|
1155
|
-
transition()]).filter(nonBlank);
|
|
1156
|
-
return toCSSObjects(internals);
|
|
1157
|
-
};
|
|
1158
|
-
};
|
|
1159
|
-
}
|
|
1160
|
-
|
|
1161
|
-
exports.SetThemeScript = SetThemeScript;
|
|
1162
|
-
exports.TokenInjector = TokenInjector;
|
|
1163
|
-
exports.createTheme = createTheme;
|
|
1164
|
-
exports.defineThemeVariables = defineThemeVariables;
|
|
1165
|
-
exports.getThemeSync = getThemeSync;
|
|
1166
|
-
exports.makeSetThemeScriptCode = makeSetThemeScriptCode;
|
|
1167
|
-
exports.prefersColorScheme = prefersColorScheme;
|
|
1168
|
-
exports.themeSelector = themeSelector;
|
|
1169
|
-
exports.themeSetter = themeSetter;
|
|
1170
|
-
exports.useLocalStorage = useLocalStorage;
|
|
1171
|
-
exports.useMedia = useMedia;
|
|
1172
|
-
exports.useTheme = useTheme;
|
|
1173
|
-
exports.useThemeSetter = useThemeSetter;
|
|
1174
|
-
//# sourceMappingURL=index.cjs.map
|