@charcoal-ui/tailwind-config 5.11.0-beta.0 → 5.11.0-beta.2
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 +2 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +26 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
- package/src/README.mdx +2 -0
- package/src/__snapshots__/icons.test.ts.snap +31 -1
- package/src/__snapshots__/index.test.ts.snap +5 -0
- package/src/docs/focusring/FocusRing.tsx +45 -0
- package/src/docs/focusring/index.mdx +13 -0
- package/src/docs/focusring/index.ts +1 -0
- package/src/focusring/index.ts +22 -0
- package/src/index.test.ts +13 -0
- package/src/index.ts +2 -0
package/README.md
CHANGED
|
@@ -176,3 +176,5 @@ https://tailwindcss.com/
|
|
|
176
176
|
`@charcoal-ui/tailwind-config` が独自に定義しているクラスについては Storybook を見てください。
|
|
177
177
|
|
|
178
178
|
https://pixiv.github.io/charcoal/?path=/docs/tailwind-config-colors-doc--docs
|
|
179
|
+
|
|
180
|
+
たとえば、標準 plugin には `.ch-focus-ring` も含まれており、フォーカス可能な要素に付けると React 版と同等の focus ring を適用できます。
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/tokenV2.ts","../src/index.ts"],"mappings":";;;;KAGY,eAAA;AAAA,UAEK,QAAA;EACf,OAAA,EAAS,aAAA;EAAA,oCAC2B,aAAA;EAAA,oBAChB,aAAA;AAAA;;;iBCAN,oCAAA,CAAA,GAAwC,IAAA,CACtD,MAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/tokenV2.ts","../src/index.ts"],"mappings":";;;;KAGY,eAAA;AAAA,UAEK,QAAA;EACf,OAAA,EAAS,aAAA;EAAA,oCAC2B,aAAA;EAAA,oBAChB,aAAA;AAAA;;;iBCAN,oCAAA,CAAA,GAAwC,IAAA,CACtD,MAAA;;;UCmBQ,OAAA;EACR,OAAA,GAAU,eAAA;EACV,KAAA,GAAQ,QAAA;EACR,cAAA;EACA,eAAA;EACA,OAAA;EACA,OAAA;AAAA;AAAA,iBAGc,oBAAA,CAAA;EACd,KAAA;EACA,OAAA;EACA,cAAA;EACA,eAAA;EACA,OAAA;EACA;AAAA,GACC,OAAA,GAAU,IAAA,CAAK,MAAA;AAAA,cAsIL,MAAA,EAAQ,IAAA,CAAK,MAAA"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/tokenV2.ts","../src/index.ts"],"mappings":";;;;KAGY,eAAA;AAAA,UAEK,QAAA;EACf,OAAA,EAAS,aAAA;EAAA,oCAC2B,aAAA;EAAA,oBAChB,aAAA;AAAA;;;iBCAN,oCAAA,CAAA,GAAwC,IAAA,CACtD,MAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/tokenV2.ts","../src/index.ts"],"mappings":";;;;KAGY,eAAA;AAAA,UAEK,QAAA;EACf,OAAA,EAAS,aAAA;EAAA,oCAC2B,aAAA;EAAA,oBAChB,aAAA;AAAA;;;iBCAN,oCAAA,CAAA,GAAwC,IAAA,CACtD,MAAA;;;UCmBQ,OAAA;EACR,OAAA,GAAU,eAAA;EACV,KAAA,GAAQ,QAAA;EACR,cAAA;EACA,eAAA;EACA,OAAA;EACA,OAAA;AAAA;AAAA,iBAGc,oBAAA,CAAA;EACd,KAAA;EACA,OAAA;EACA,cAAA;EACA,eAAA;EACA,OAAA;EACA;AAAA,GACC,OAAA,GAAU,IAAA,CAAK,MAAA;AAAA,cAsIL,MAAA,EAAQ,IAAA,CAAK,MAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
Object.defineProperties(exports, {
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
+
});
|
|
2
5
|
//#region \0rolldown/runtime.js
|
|
3
6
|
var __create = Object.create;
|
|
4
7
|
var __defProp = Object.defineProperty;
|
|
@@ -7,16 +10,12 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
|
7
10
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
11
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
12
|
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
}
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
14
|
+
key = keys[i];
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: ((k) => from[k]).bind(null, key),
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
20
19
|
}
|
|
21
20
|
return to;
|
|
22
21
|
};
|
|
@@ -24,7 +23,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
24
23
|
value: mod,
|
|
25
24
|
enumerable: true
|
|
26
25
|
}) : target, mod));
|
|
27
|
-
|
|
28
26
|
//#endregion
|
|
29
27
|
let _charcoal_ui_foundation = require("@charcoal-ui/foundation");
|
|
30
28
|
let _charcoal_ui_theme = require("@charcoal-ui/theme");
|
|
@@ -37,9 +35,7 @@ let _charcoal_ui_icon_files_v2_datauri = require("@charcoal-ui/icon-files/v2/dat
|
|
|
37
35
|
_charcoal_ui_icon_files_v2_datauri = __toESM(_charcoal_ui_icon_files_v2_datauri);
|
|
38
36
|
let _charcoal_ui_icon_files_v1_datauri = require("@charcoal-ui/icon-files/v1/datauri");
|
|
39
37
|
_charcoal_ui_icon_files_v1_datauri = __toESM(_charcoal_ui_icon_files_v1_datauri);
|
|
40
|
-
|
|
41
38
|
//#region src/foundation.ts
|
|
42
|
-
const GRID_COUNT = 12;
|
|
43
39
|
function mergeEffect({ elementEffect, effect }) {
|
|
44
40
|
return {
|
|
45
41
|
...elementEffect,
|
|
@@ -50,7 +46,6 @@ function mergeEffect({ elementEffect, effect }) {
|
|
|
50
46
|
}
|
|
51
47
|
};
|
|
52
48
|
}
|
|
53
|
-
|
|
54
49
|
//#endregion
|
|
55
50
|
//#region src/util.ts
|
|
56
51
|
/**
|
|
@@ -124,14 +119,12 @@ const flattenKeyWithoutDefault = (o, join) => {
|
|
|
124
119
|
});
|
|
125
120
|
}));
|
|
126
121
|
};
|
|
127
|
-
|
|
128
122
|
//#endregion
|
|
129
123
|
//#region src/colors/utils.ts
|
|
130
124
|
const COLOR_PREFIX = "--tailwind-color-";
|
|
131
125
|
function isSingleColor(color) {
|
|
132
126
|
return typeof color === "string";
|
|
133
127
|
}
|
|
134
|
-
|
|
135
128
|
//#endregion
|
|
136
129
|
//#region src/colors/toTailwindConfig.ts
|
|
137
130
|
function colorsToTailwindConfig(version, colors, effects) {
|
|
@@ -158,7 +151,6 @@ function colorsToTailwindConfig(version, colors, effects) {
|
|
|
158
151
|
}
|
|
159
152
|
return (0, _charcoal_ui_utils.mapObject)(targetColors, (name, color) => [name, colorsForAllEffects(name, color)]);
|
|
160
153
|
}
|
|
161
|
-
|
|
162
154
|
//#endregion
|
|
163
155
|
//#region src/colors/pluginTokenV1.ts
|
|
164
156
|
function defineCssVariablesV1(themeMap) {
|
|
@@ -208,7 +200,6 @@ function defineThemeVariables(colorParams, effectParams) {
|
|
|
208
200
|
function withPrefixes(...parts) {
|
|
209
201
|
return parts.join("-");
|
|
210
202
|
}
|
|
211
|
-
|
|
212
203
|
//#endregion
|
|
213
204
|
//#region src/colors/plugin.ts
|
|
214
205
|
/**
|
|
@@ -238,7 +229,16 @@ function toCssVariables(theme) {
|
|
|
238
229
|
return [[varName, color], ...effects.map(([type, effect]) => [`${varName}--${type}`, (0, _charcoal_ui_utils.applyEffect)(color, effect)])];
|
|
239
230
|
});
|
|
240
231
|
}
|
|
241
|
-
|
|
232
|
+
//#endregion
|
|
233
|
+
//#region src/focusring/index.ts
|
|
234
|
+
const createFocusRingUtilities = () => ({ ".ch-focus-ring": { "&:not(:disabled):not([aria-disabled]):focus-visible, &[aria-disabled='false']:focus-visible": {
|
|
235
|
+
outline: "none",
|
|
236
|
+
boxShadow: "0 0 0 4px var(--charcoal-color-border-focus-legacy, rgba(0, 150, 250, 0.32))",
|
|
237
|
+
transition: "0.2s box-shadow"
|
|
238
|
+
} } });
|
|
239
|
+
const charcoalFocusRing = (0, tailwindcss_plugin_js.default)(({ addUtilities }) => {
|
|
240
|
+
addUtilities(createFocusRingUtilities());
|
|
241
|
+
});
|
|
242
242
|
//#endregion
|
|
243
243
|
//#region src/gradient/plugin.ts
|
|
244
244
|
const VAR_PREFIX = "--tailwind-gradient-";
|
|
@@ -277,7 +277,6 @@ function createUtilityName(gradientName, direction, suffix = "") {
|
|
|
277
277
|
suffix
|
|
278
278
|
].filter(Boolean).join("-");
|
|
279
279
|
}
|
|
280
|
-
|
|
281
280
|
//#endregion
|
|
282
281
|
//#region src/typography/plugin.ts
|
|
283
282
|
const leadingCancel = {
|
|
@@ -291,6 +290,11 @@ const typographyStyle = (style) => {
|
|
|
291
290
|
return {
|
|
292
291
|
"font-size": (0, _charcoal_ui_utils.px)(style.fontSize),
|
|
293
292
|
"line-height": (0, _charcoal_ui_utils.px)(style.lineHeight),
|
|
293
|
+
/**
|
|
294
|
+
* cancel leading
|
|
295
|
+
*
|
|
296
|
+
* @see https://yuyakinoshita.com/blog/2020/01/20/line-height-crop/
|
|
297
|
+
*/
|
|
294
298
|
"&::before": {
|
|
295
299
|
...leadingCancel,
|
|
296
300
|
marginTop: (0, _charcoal_ui_utils.px)(margin)
|
|
@@ -310,7 +314,6 @@ const typographyPlugin = (0, tailwindcss_plugin_js.default)(({ addUtilities }) =
|
|
|
310
314
|
}
|
|
311
315
|
}, { variants: ["responsive"] });
|
|
312
316
|
});
|
|
313
|
-
|
|
314
317
|
//#endregion
|
|
315
318
|
//#region src/tokenV2.ts
|
|
316
319
|
function unstable_createTailwindConfigTokenV2() {
|
|
@@ -337,7 +340,6 @@ function unstable_createTailwindConfigTokenV2() {
|
|
|
337
340
|
}
|
|
338
341
|
};
|
|
339
342
|
}
|
|
340
|
-
|
|
341
343
|
//#endregion
|
|
342
344
|
//#region src/icons.ts
|
|
343
345
|
const transformClassNameV2 = (fileName) => {
|
|
@@ -380,7 +382,6 @@ const charcoalIconsV2 = (0, tailwindcss_plugin_js.default)(({ addUtilities }) =>
|
|
|
380
382
|
const charcoalIconsV1 = (0, tailwindcss_plugin_js.default)(({ addUtilities }) => {
|
|
381
383
|
addUtilities(createIconUtilities({ v2: false }));
|
|
382
384
|
});
|
|
383
|
-
|
|
384
385
|
//#endregion
|
|
385
386
|
//#region src/index.ts
|
|
386
387
|
function createTailwindConfig({ theme = { ":root": _charcoal_ui_theme.light }, version = "v3", cssVariablesV1 = true, unstableTokenV2 = false, iconsV2 = false, iconsV1 = false }) {
|
|
@@ -419,13 +420,19 @@ function createTailwindConfig({ theme = { ":root": _charcoal_ui_theme.light }, v
|
|
|
419
420
|
screen: "100vw",
|
|
420
421
|
auto: "auto",
|
|
421
422
|
fit: "fit-content",
|
|
422
|
-
|
|
423
|
+
/**
|
|
424
|
+
* generates classes like "w-col-span-1"
|
|
425
|
+
*/
|
|
426
|
+
...Array.from({ length: 12 }, (_, i) => i + 1).reduce((styles, i) => ({
|
|
423
427
|
...styles,
|
|
424
428
|
[`col-span-${i}`]: (0, _charcoal_ui_utils.px)(_charcoal_ui_foundation.COLUMN_UNIT * i + _charcoal_ui_foundation.GUTTER_UNIT * (i - 1))
|
|
425
429
|
}), {}),
|
|
426
|
-
|
|
430
|
+
/**
|
|
431
|
+
* generates classes like "w-1/12" (except for 12/12, which just equals to w-full)
|
|
432
|
+
*/
|
|
433
|
+
...Array.from({ length: 11 }, (_, i) => i + 1).reduce((styles, i) => ({
|
|
427
434
|
...styles,
|
|
428
|
-
[`${i}
|
|
435
|
+
[`${i}/12`]: `${i / 12 * 100}%`
|
|
429
436
|
}), {}),
|
|
430
437
|
...widthV2
|
|
431
438
|
},
|
|
@@ -448,6 +455,7 @@ function createTailwindConfig({ theme = { ":root": _charcoal_ui_theme.light }, v
|
|
|
448
455
|
corePlugins: { lineHeight: false },
|
|
449
456
|
plugins: [
|
|
450
457
|
typographyPlugin,
|
|
458
|
+
charcoalFocusRing,
|
|
451
459
|
cssVariableColorPlugin$1(theme, Boolean(cssVariablesV1)),
|
|
452
460
|
...Object.entries(theme).map(([selectorOrMediaQuery, theme]) => cssVariableColorPlugin(theme.gradientColor, mergeEffect(theme), selectorOrMediaQuery)),
|
|
453
461
|
...iconsV2 ? [charcoalIconsV2] : [],
|
|
@@ -456,10 +464,10 @@ function createTailwindConfig({ theme = { ":root": _charcoal_ui_theme.light }, v
|
|
|
456
464
|
};
|
|
457
465
|
}
|
|
458
466
|
const config = createTailwindConfig({});
|
|
459
|
-
|
|
460
467
|
//#endregion
|
|
461
468
|
exports.config = config;
|
|
462
469
|
exports.default = config;
|
|
463
470
|
exports.createTailwindConfig = createTailwindConfig;
|
|
464
471
|
exports.unstable_createTailwindConfigTokenV2 = unstable_createTailwindConfigTokenV2;
|
|
472
|
+
|
|
465
473
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["cssVariableColorPlugin","TYPOGRAPHY_SIZE","light","flattenKeys","mapDefaultKeys","iconsV2","iconsV1","light","SPACING","COLUMN_UNIT","GUTTER_UNIT","BORDER_RADIUS","cssVariableColorPlugin","cssVariableGradientPlugin"],"sources":["../src/foundation.ts","../src/util.ts","../src/colors/utils.ts","../src/colors/toTailwindConfig.ts","../src/colors/pluginTokenV1.ts","../src/colors/plugin.ts","../src/gradient/plugin.ts","../src/typography/plugin.ts","../src/tokenV2.ts","../src/icons.ts","../src/index.ts"],"sourcesContent":["import { Effect } from '@charcoal-ui/foundation'\nimport { CharcoalTheme as Theme } from '@charcoal-ui/theme'\n\nexport const GRID_COUNT = 12\n\nexport function mergeEffect({\n elementEffect,\n effect,\n}: Pick<Theme, 'elementEffect' | 'effect'>): MergedEffect {\n return {\n ...elementEffect,\n ...effect,\n outline: {\n type: 'opacity',\n opacity: 0.32,\n } as Effect,\n }\n}\n\nexport type MergedEffect = Record<string, Effect>\n","import type { Config } from 'tailwindcss'\nimport { TailwindVersion, ThemeMap } from './types'\n\n/**\n * the key \"default\" or \"DEFAULT\" has special meaning and dropped from class name\n *\n * @see https://tailwindcss.com/docs/upgrading-to-v2#update-default-theme-keys-to-default\n */\nexport function getDefaultKeyName(version: TailwindVersion) {\n switch (version) {\n case 'v3':\n case 'v2': {\n return 'DEFAULT'\n }\n\n case 'v1': {\n return 'default'\n }\n }\n}\n\nexport function getVariantOption(version: TailwindVersion): Partial<Config> {\n switch (version) {\n case 'v3': {\n // v3 以上では variants は variantOrders に改名された\n // そしてこれは上書きをしたいモチベがない\n // https://v2.tailwindcss.com/docs/configuration#variant-order\n return {}\n }\n\n case 'v2':\n case 'v1': {\n return { variants: {} }\n }\n }\n}\n\nfunction setEquals<T>(a: Set<T>, b: Set<T>) {\n return a.size === b.size && Array.from(a).every((value) => b.has(value))\n}\n\nexport function assertAllThemeHaveSameKeys(themeMap: ThemeMap): void {\n const defaultTheme = themeMap[':root']\n const expectedColorKeys = new Set(Object.keys(defaultTheme.color))\n const expectedEffectKeys = new Set(Object.keys(defaultTheme.effect))\n\n for (const [name, theme] of Object.entries(themeMap)) {\n const colorKeys = new Set(Object.keys(theme.color))\n const effectKeys = new Set(Object.keys(theme.effect))\n\n if (!setEquals(colorKeys, expectedColorKeys)) {\n throw new Error(`:root and ${name} does not have same colors.\n\nExpected( :root ): ${JSON.stringify(Array.from(expectedColorKeys))}\nGot: ${JSON.stringify(Array.from(colorKeys))}`)\n }\n\n if (!setEquals(effectKeys, expectedEffectKeys)) {\n throw new Error(`:root and ${name} does not have same effects.\n\nExpected( :root ): ${JSON.stringify(Array.from(expectedEffectKeys))}\nGot: ${JSON.stringify(Array.from(effectKeys))}`)\n }\n }\n}\n\nexport function camelToKebab(value: string) {\n return value\n .replace(/(?<small>[\\da-z]|(?=[A-Z]))(?<capital>[A-Z])/gu, '$1-$2')\n .toLowerCase()\n}\n\nexport const mapDefaultKey = <O extends object>(o: O) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(JSON.stringify(o), function reviver(k: string, v: string) {\n if (k === 'default') {\n const DefaultKey = getDefaultKeyName('v3')\n this[DefaultKey] = v\n return undefined\n }\n return v\n })\n}\n\nexport const flattenKey = <O extends object>(\n o: O,\n join?: (key: string) => boolean,\n): Record<string, unknown> => {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Object.entries(o).flatMap(([key, v]) => {\n if (typeof v === 'string') return [[key, v]]\n return Object.entries(v as object).map(([kk, vv]) => {\n return [(join?.(key) ?? true) ? [key, kk].join('-') : kk, vv]\n })\n }),\n )\n}\n\n/**\n * `DEFAULT` はkey名に結合しない\n */\nexport const flattenKeyWithoutDefault = <O extends object>(\n o: O,\n join?: (key: string) => boolean,\n): Record<string, unknown> => {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Object.entries(o).flatMap(([key, v]) => {\n if (typeof v === 'string') return [[key, v]]\n return Object.entries(v as object).map(([kk, vv]) => {\n const isDefaultKey = kk === 'DEFAULT' || kk === 'default'\n const outputKey = isDefaultKey\n ? key\n : (join?.(key) ?? true)\n ? [key, kk].join('-')\n : kk\n return [outputKey, vv]\n })\n }),\n )\n}\n","import { GradientMaterial, Material } from '@charcoal-ui/foundation'\n\nexport const COLOR_PREFIX = '--tailwind-color-'\n\nexport function isSingleColor(color: AnyColor): color is Material {\n return typeof color === 'string'\n}\n\ntype AnyColor = Material | GradientMaterial\n\nexport type AnyColorTheme = Record<string, AnyColor>\n","import { Material } from '@charcoal-ui/foundation'\nimport { applyEffect, filterObject, mapObject } from '@charcoal-ui/utils'\nimport type { Config } from 'tailwindcss'\nimport { MergedEffect } from '../foundation'\n\nimport { TailwindVersion } from '../types'\nimport { getDefaultKeyName } from '../util'\n\nimport { AnyColorTheme, COLOR_PREFIX, isSingleColor } from './utils'\n\nexport function colorsToTailwindConfig(\n version: TailwindVersion,\n colors: AnyColorTheme,\n effects: MergedEffect,\n): NonNullable<Config['theme']>['colors'] {\n const targetColors = filterObject(colors, isSingleColor)\n const DEFAULT = getDefaultKeyName(version)\n\n /**\n * こういう感じのを吐き出す\n *\n * ```js\n * {\n * DEFAULT: 'var(--tailwind-color-hoge1, #fff)',\n * hover: 'var(--tailwind-color-hoge1--hover, #eee)',\n * press: 'var(--tailwind-color-hoge1--press, #ddd)',\n * disabled: 'var(--tailwind-color-hoge1--disabled, #eee)',\n * }\n * ```\n */\n function colorsForAllEffects(name: string, color: Material) {\n const varName = `${COLOR_PREFIX}${name}`\n\n return {\n [DEFAULT]: `var(${varName}, ${color})`,\n\n ...mapObject(effects, (effectName, effect) => [\n effectName,\n `var(${varName}--${effectName}, ${applyEffect(color, effect)})`,\n ]),\n }\n }\n\n return mapObject(targetColors, (name, color) => [\n name,\n colorsForAllEffects(name, color),\n ])\n}\n","import {\n applyEffect,\n customPropertyToken,\n filterObject,\n flatMapObject,\n mapObject,\n} from '@charcoal-ui/utils'\nimport { ThemeMap } from '../types'\nimport {\n CharcoalAbstractTheme,\n EffectType,\n Key,\n CharcoalTheme as Theme,\n} from '@charcoal-ui/theme'\n\nexport function defineCssVariablesV1(themeMap: ThemeMap) {\n // @ts-expect-error FIXME\n return mapObject(themeMap, (key, theme) => {\n if (key.startsWith('@media')) {\n return [\n key,\n {\n ':root': defineColorVariableCSS(theme),\n },\n ]\n } else {\n return [key, defineColorVariableCSS(theme)]\n }\n })\n}\n\nexport const defineColorVariableCSS = (theme: Theme) => {\n const borders = mapObject(theme.border, (name, { color }) => [\n // REVIEW: もしtheme.colorにたまたまborder-〇〇で始まる色名がいたら被りうる\n withPrefixes('border', name),\n color,\n ])\n\n const colors = defineThemeVariables({ ...theme.color, ...borders })({ theme })\n return colors\n}\n\n/**\n * Check whether a value is non-null and non-undefined\n *\n * @param value nullable\n */\nexport const isPresent = <T>(value: T): value is NonNullable<T> => value != null\n\n/**\n * 子孫要素で使われるカラーテーマの CSS Variables を上書きする\n *\n * @params colorParams - 上書きしたい色の定義( `theme.color` の一部だけ書けば良い )\n * @params effectParams - effect の定義を上書きしたい場合は渡す(必須ではない)\n *\n * @example\n * ```tsx\n * const LocalTheme = styled.div`\n * ${defineThemeVariables({ text1: '#ff0000' })}\n * // `text1` is now defined as red\n * ${theme((o) => [o.font.text1])}\n * `\n * ```\n */\nexport function defineThemeVariables(\n colorParams: Partial<CharcoalAbstractTheme['color']>,\n effectParams?: Partial<CharcoalAbstractTheme['effect']>,\n) {\n return function toCssObject(props: {\n theme: Pick<CharcoalAbstractTheme, 'effect'>\n }) {\n const colors = filterObject(colorParams, isPresent)\n\n // flatMapObject の中で毎回 Object.entries を呼ぶのは無駄なので外で呼ぶ\n const effects = Object.entries({\n ...props.theme.effect,\n ...effectParams,\n })\n\n return flatMapObject(colors, (colorKey, color) => [\n [customPropertyToken(colorKey), color],\n\n ...effects.map<[string, string]>(([effectKey, effect]) => [\n customPropertyToken(colorKey, [effectKey]),\n applyEffect(color, [effect]),\n ]),\n ])\n }\n}\n\nexport function isSupportedEffect(effect: Key): effect is EffectType {\n return ['hover', 'press', 'disabled'].includes(effect as string)\n}\n\nexport const variable = (value: string) => `var(${value})`\n\nexport function withPrefixes(...parts: string[]) {\n return parts.join('-')\n}\n","import { Material } from '@charcoal-ui/foundation'\nimport { CharcoalTheme as Theme } from '@charcoal-ui/theme'\nimport {\n applyEffect,\n filterObject,\n flatMapObject,\n mapObject,\n} from '@charcoal-ui/utils'\nimport plugin from 'tailwindcss/plugin.js'\nimport { mergeEffect } from '../foundation'\nimport { CSSVariableName, CSSVariables, Definition, ThemeMap } from '../types'\nimport { COLOR_PREFIX, isSingleColor } from './utils'\nimport { defineCssVariablesV1 } from './pluginTokenV1'\n\n/**\n * --tailwind-* また --charcoal-* を生成する\n * TODO: --tailwindをやめる\n */\nexport default function cssVariableColorPlugin(\n themeMap: ThemeMap,\n cssVariablesV1: boolean,\n): ReturnType<typeof plugin> {\n // `:root` 以外のケースで各 CSS Variable がどういう値を取るかを定義する\n const { ':root': _defaultTheme, ...otherThemes } = themeMap\n const definitions = defineCssVariables(otherThemes)\n\n return plugin(({ addBase }) => {\n addBase(definitions)\n\n // styledのTokenInjector移植(background処理除く)\n if (cssVariablesV1) {\n const cssVariablesV1 = defineCssVariablesV1(themeMap)\n // @ts-expect-error FIXME\n addBase(cssVariablesV1)\n }\n })\n}\n\nexport function defineCssVariables(themes: Omit<ThemeMap, ':root'>) {\n return mapObject(themes, (selectorOrMediaQuery, theme) => {\n const css = toCssVariables(theme)\n\n if (selectorOrMediaQuery.startsWith('@media')) {\n return [\n selectorOrMediaQuery,\n {\n ':root': css,\n },\n ]\n } else {\n return [selectorOrMediaQuery, css]\n }\n }) as Definition\n}\n\nfunction toCssVariables(theme: Theme): CSSVariables {\n const colors = filterObject(theme.color, isSingleColor)\n const effects = Object.entries(mergeEffect(theme))\n\n return flatMapObject(colors, (name, color) => {\n const varName: keyof CSSVariables = `${COLOR_PREFIX}${name}`\n\n return [\n [varName, color],\n\n ...effects.map<[CSSVariableName, Material]>(([type, effect]) => [\n `${varName}--${type}`,\n applyEffect(color, effect),\n ]),\n ]\n })\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport { camelToKebab } from '../util'\nimport { GradientMaterial } from '@charcoal-ui/foundation'\nimport { ThemeColorGradient } from '@charcoal-ui/theme'\nimport {\n applyEffectToGradient,\n flatMapObject,\n gradient,\n GradientDirection,\n mapKeys,\n mapObject,\n} from '@charcoal-ui/utils'\nimport { Values } from '../types'\nimport { MergedEffect } from '../foundation'\n\nconst VAR_PREFIX = '--tailwind-gradient-'\n\nexport default function cssVariableColorPlugin(\n gradients: ThemeColorGradient,\n effects: MergedEffect,\n selectorOrMediaQuery: string,\n) {\n const utilities = getUtilities(gradients, effects)\n\n const classRules = mapObject(utilities, (name) => [\n `.bg-${name}`,\n { backgroundImage: `var(${VAR_PREFIX}${name})` },\n ])\n\n return plugin(({ addBase, addUtilities }) => {\n const css = mapKeys(utilities, (name) => `${VAR_PREFIX}${name}`)\n if (selectorOrMediaQuery.startsWith('@media')) {\n addBase({\n [selectorOrMediaQuery]: {\n ':root': css,\n },\n })\n } else {\n addBase({\n [selectorOrMediaQuery]: css,\n })\n }\n\n addUtilities(classRules, {\n // @ts-expect-error FIXME\n variants: ['responsive'],\n })\n })\n}\n\nconst DIRECTIONS = {\n 'to top': 'top',\n 'to bottom': 'bottom',\n 'to left': 'left',\n 'to right': 'right',\n} as const\n\n/**\n * こういう感じのやつ。この時点では `--tailwind-gradient-` のような CSS 変数名になってない\n *\n * ```js\n * {\n * 'hoge1': 'linear-gradient(to top, ...)',\n * ...\n * }\n * ```\n */\ntype Utilities = Record<string, LinearGradient>\n\ntype LinearGradient = `linear-gradient(${string})`\n\nexport function getUtilities(\n gradients: Record<string, GradientMaterial>,\n effect: MergedEffect,\n): Utilities {\n const effects = Object.entries(effect)\n const directions = Object.entries(DIRECTIONS) as [\n GradientDirection,\n Values<typeof DIRECTIONS>,\n ][]\n\n return flatMapObject(gradients, (name, colors) =>\n directions.flatMap(([direction, className]) => {\n const toLinearGradient = (colors: GradientMaterial) => {\n const style = gradient(direction)(colors)\n\n if (!('backgroundImage' in style)) {\n throw new Error(\n `Could not generate linear-gradient() from ${name} ${direction} ${className}`,\n )\n }\n\n // 本当は backgroundColor も同時に生成されるんだけど、使うにはそれ用の CSS 変数も一緒に作らないといけない\n // とりあえず background-image だけで動くのでこっちだけを利用する\n return style.backgroundImage as LinearGradient\n }\n\n return [\n // こういう感じのやつ\n // { 'hoge1': 'linear-gradient(to top, ...)' }\n [createUtilityName(name, className), toLinearGradient(colors)],\n\n // こういう感じのやつ\n // { 'hoge1--hover': 'linear-gradient(to top, ...)' }\n ...effects.map<[string, LinearGradient]>(([effectName, effect]) => [\n createUtilityName(name, className, effectName),\n toLinearGradient(applyEffectToGradient(effect)(colors)),\n ]),\n ]\n }),\n )\n}\n\nfunction createUtilityName(\n gradientName: string,\n direction: Values<typeof DIRECTIONS>,\n suffix = '',\n) {\n return [camelToKebab(gradientName), direction, suffix]\n .filter(Boolean)\n .join('-')\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport { TypographyDescriptor, TYPOGRAPHY_SIZE } from '@charcoal-ui/foundation'\nimport { halfLeading, mapObject, px } from '@charcoal-ui/utils'\n\nconst leadingCancel = {\n display: 'block',\n width: 0,\n height: 0,\n content: '\"\"',\n}\n\nconst typographyStyle = (style: TypographyDescriptor) => {\n const margin = -halfLeading(style)\n\n return {\n 'font-size': px(style.fontSize),\n 'line-height': px(style.lineHeight),\n\n /**\n * cancel leading\n *\n * @see https://yuyakinoshita.com/blog/2020/01/20/line-height-crop/\n */\n '&::before': {\n ...leadingCancel,\n marginTop: px(margin),\n },\n '&::after': {\n ...leadingCancel,\n marginBottom: px(margin),\n },\n }\n}\n\nconst typographyPlugin = plugin(({ addUtilities }) => {\n const typographyClasses = mapObject(TYPOGRAPHY_SIZE, (fontSize, style) => [\n `.typography-${fontSize}`,\n typographyStyle(style),\n ])\n\n addUtilities(\n {\n ...typographyClasses,\n '.preserve-half-leading': {\n '&::before': {\n content: 'none',\n },\n '&::after': {\n content: 'none',\n },\n },\n },\n {\n // @ts-expect-error FIXME\n variants: ['responsive'],\n },\n )\n})\n\nexport default typographyPlugin\n","import light from '@charcoal-ui/theme/unstable-tokens/css-variables.json' with { type: 'json' }\nimport type { Config } from 'tailwindcss'\nimport {\n flattenKey as flattenKeys,\n flattenKeyWithoutDefault,\n mapDefaultKey as mapDefaultKeys,\n} from './util'\n\nexport function unstable_createTailwindConfigTokenV2(): Omit<\n Config,\n 'content'\n> {\n const fontSize = Object.fromEntries(\n Object.entries(light.text['font-size']).flatMap(([k, v]) => {\n // text.fontSize.paragraph + text.lineHeight.paragraph -> text-paragraph\n if (typeof v === 'string') {\n return [\n [\n k,\n [\n v,\n // @ts-expect-error k is keyof line-height\n { lineHeight: light.text['line-height'][k] },\n ],\n ],\n ]\n }\n\n // text.fontSize.heading.s + text.lineHeight.heading.s -> text-heading-s\n return Object.entries(v as Record<string, string>).map(([kk, vv]) => {\n return [\n [k, kk].join('-'),\n [\n vv,\n // @ts-expect-error k is keyof line-height\n { lineHeight: light.text['line-height'][k][kk] },\n ],\n ]\n })\n }),\n ) as NonNullable<Config['theme']>['fontSize']\n\n // space.target.s -> p-target-s\n // space.gap.gapButtons -> p-gap-buttons\n const spacing = flattenKeys(light.space, (key) => !/(gap|padding)/.test(key))\n // color.container.default -> bg-container\n // color.container.hover -> bg-container-hover\n const colors = mapDefaultKeys(light.color)\n\n const config: Omit<Config, 'content'> = {\n darkMode: 'media',\n theme: {\n // borderWidth.m -> border-m\n // borderWidth.focus.1 -> border-focus-1\n borderWidth: flattenKeyWithoutDefault({\n 'width-ch': flattenKeys(light['border-width']), // unstable border width token\n }),\n borderRadius: light.radius,\n borderColor: flattenKeyWithoutDefault({ ch: flattenKeys(colors.border) }),\n\n colors,\n\n fontSize,\n fontWeight: flattenKeys({ ch: light.text['font-weight'] }),\n\n spacing,\n gap: spacing,\n width: light['paragraph-width'],\n },\n }\n\n return config\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport iconsV2 from '@charcoal-ui/icon-files/v2/datauri'\nimport iconsV1 from '@charcoal-ui/icon-files/v1/datauri'\nimport { CSSRuleObject } from 'tailwindcss/types/config'\n\nconst transformClassNameV2 = (fileName: string) => {\n const [size, variant, name] = fileName.split('/')\n return [\n '.icon-v2',\n name.replaceAll('.', '-'),\n ...(variant === 'regular' ? [] : [variant]),\n ...(size === '24' ? [] : [size]),\n ]\n .join('-')\n .toLowerCase()\n}\n\nconst transformClassNameV1 = (fileName: string) => {\n const [size, name] = fileName.split('/')\n return [\n '.icon-v1',\n name.replaceAll('.', '-'),\n ...(size === '24' ? [] : [size]),\n ]\n .join('-')\n .toLowerCase()\n}\n\nexport const createIconUtilities = ({\n v2 = false,\n}: {\n v2?: boolean\n}): {\n [key: string]: CSSRuleObject\n} => {\n const newUtilities: { [key: string]: CSSRuleObject } = {}\n const icons = v2 ? iconsV2 : iconsV1\n for (const [fileName, { uri, isSetCurrentcolor }] of Object.entries(icons)) {\n const className = v2\n ? transformClassNameV2(fileName)\n : transformClassNameV1(fileName)\n\n newUtilities[className] = {\n display: 'inline-block',\n width: '1em',\n height: '1em',\n maskImage: `url(${uri})`,\n maskSize: '100% 100%',\n background: isSetCurrentcolor ? 'currentColor' : null,\n aspectRatio: '1/1',\n }\n }\n return newUtilities\n}\n\nexport const charcoalIconsV2: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createIconUtilities({ v2: true }))\n },\n)\n\nexport const charcoalIconsV1: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createIconUtilities({ v2: false }))\n },\n)\n","import { GRID_COUNT, mergeEffect } from './foundation'\n\nimport type { Config } from 'tailwindcss'\nimport { TailwindVersion, ThemeMap } from './types'\n\nimport {\n assertAllThemeHaveSameKeys,\n getDefaultKeyName,\n getVariantOption,\n} from './util'\nimport {\n COLUMN_UNIT,\n GUTTER_UNIT,\n SPACING,\n BORDER_RADIUS,\n} from '@charcoal-ui/foundation'\nimport { light } from '@charcoal-ui/theme'\nimport { mapObject, px } from '@charcoal-ui/utils'\nimport { colorsToTailwindConfig } from './colors/toTailwindConfig'\n\nimport cssVariableColorPlugin from './colors/plugin'\nimport cssVariableGradientPlugin from './gradient/plugin'\nimport typographyPlugin from './typography/plugin'\nimport { unstable_createTailwindConfigTokenV2 } from './tokenV2'\nimport { charcoalIconsV1, charcoalIconsV2 } from './icons'\nexport { unstable_createTailwindConfigTokenV2 }\n\ninterface Options {\n version?: TailwindVersion\n theme?: ThemeMap\n cssVariablesV1?: boolean\n unstableTokenV2?: boolean\n iconsV2?: boolean\n iconsV1?: boolean\n}\n\nexport function createTailwindConfig({\n theme = { ':root': light },\n version = 'v3',\n cssVariablesV1 = true,\n unstableTokenV2 = false,\n iconsV2 = false,\n iconsV1 = false,\n}: Options): Omit<Config, 'content'> {\n assertAllThemeHaveSameKeys(theme)\n\n const defaultTheme = theme[':root']\n const effects = mergeEffect(defaultTheme)\n const DEFAULT = getDefaultKeyName(version)\n\n const {\n borderWidth: borderWidthV2,\n borderRadius: borderRadiusV2,\n borderColor: borderColorV2,\n colors: colorsV2,\n fontSize: fontSizeV2,\n fontWeight: fontWeightV2,\n spacing: spacingV2,\n gap: gapV2,\n width: widthV2,\n }: Partial<NonNullable<Config['theme']>> = unstableTokenV2\n ? unstable_createTailwindConfigTokenV2().theme\n : {}\n\n return {\n theme: {\n screens: {\n screen1: px(0),\n screen2: px(defaultTheme.breakpoint.screen1),\n screen3: px(defaultTheme.breakpoint.screen2),\n screen4: px(defaultTheme.breakpoint.screen3),\n screen5: px(defaultTheme.breakpoint.screen4),\n },\n colors: {\n // @deprecated\n black: '#000',\n\n // @deprecated\n white: '#fff',\n\n transparent: 'transparent',\n current: 'currentColor',\n ...colorsToTailwindConfig(version, defaultTheme.color, effects),\n ...colorsV2,\n },\n borderColor: {\n ...colorsToTailwindConfig(\n version,\n mapObject(defaultTheme.border, (k, v) => [k, v.color]),\n effects,\n ),\n ...borderColorV2,\n },\n spacing: {\n ...mapObject(\n SPACING,\n (name, pixel) => [name, px(pixel)] as [string, string],\n ),\n ...spacingV2,\n },\n width: {\n full: '100%',\n screen: '100vw',\n auto: 'auto',\n fit: 'fit-content',\n\n /**\n * generates classes like \"w-col-span-1\"\n */\n ...Array.from({ length: GRID_COUNT }, (_, i) => i + 1).reduce(\n (styles, i) => ({\n ...styles,\n [`col-span-${i}`]: px(COLUMN_UNIT * i + GUTTER_UNIT * (i - 1)),\n }),\n {},\n ),\n\n /**\n * generates classes like \"w-1/12\" (except for 12/12, which just equals to w-full)\n */\n ...Array.from({ length: GRID_COUNT - 1 }, (_, i) => i + 1).reduce(\n (styles, i) => ({\n ...styles,\n [`${i}/${GRID_COUNT}`]: `${(i / GRID_COUNT) * 100}%`,\n }),\n {},\n ),\n ...widthV2,\n },\n gap: {\n fixed: px(GUTTER_UNIT),\n ...gapV2,\n },\n borderRadius: {\n ...mapObject(\n BORDER_RADIUS,\n (name, value) => [name, px(value)] as [string, string],\n ),\n ...borderRadiusV2,\n },\n transitionDuration: {\n [DEFAULT]: '0.2s',\n },\n ...(unstableTokenV2\n ? {\n extend: {\n borderWidth: borderWidthV2,\n fontWeight: fontWeightV2,\n fontSize: fontSizeV2,\n },\n }\n : {}),\n },\n\n ...getVariantOption(version),\n\n corePlugins: {\n lineHeight: false,\n },\n plugins: [\n typographyPlugin,\n cssVariableColorPlugin(theme, Boolean(cssVariablesV1)),\n\n ...Object.entries(theme).map(([selectorOrMediaQuery, theme]) =>\n cssVariableGradientPlugin(\n theme.gradientColor,\n mergeEffect(theme),\n selectorOrMediaQuery,\n ),\n ),\n ...(iconsV2 ? [charcoalIconsV2] : []),\n ...(iconsV1 ? [charcoalIconsV1] : []),\n ],\n }\n}\n\nexport const config: Omit<Config, 'content'> = createTailwindConfig({})\n\nexport default config\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["cssVariableColorPlugin","TYPOGRAPHY_SIZE","light","flattenKeys","mapDefaultKeys","iconsV2","iconsV1","light","SPACING","COLUMN_UNIT","GUTTER_UNIT","BORDER_RADIUS","cssVariableColorPlugin","cssVariableGradientPlugin"],"sources":["../src/foundation.ts","../src/util.ts","../src/colors/utils.ts","../src/colors/toTailwindConfig.ts","../src/colors/pluginTokenV1.ts","../src/colors/plugin.ts","../src/focusring/index.ts","../src/gradient/plugin.ts","../src/typography/plugin.ts","../src/tokenV2.ts","../src/icons.ts","../src/index.ts"],"sourcesContent":["import { Effect } from '@charcoal-ui/foundation'\nimport { CharcoalTheme as Theme } from '@charcoal-ui/theme'\n\nexport const GRID_COUNT = 12\n\nexport function mergeEffect({\n elementEffect,\n effect,\n}: Pick<Theme, 'elementEffect' | 'effect'>): MergedEffect {\n return {\n ...elementEffect,\n ...effect,\n outline: {\n type: 'opacity',\n opacity: 0.32,\n } as Effect,\n }\n}\n\nexport type MergedEffect = Record<string, Effect>\n","import type { Config } from 'tailwindcss'\nimport { TailwindVersion, ThemeMap } from './types'\n\n/**\n * the key \"default\" or \"DEFAULT\" has special meaning and dropped from class name\n *\n * @see https://tailwindcss.com/docs/upgrading-to-v2#update-default-theme-keys-to-default\n */\nexport function getDefaultKeyName(version: TailwindVersion) {\n switch (version) {\n case 'v3':\n case 'v2': {\n return 'DEFAULT'\n }\n\n case 'v1': {\n return 'default'\n }\n }\n}\n\nexport function getVariantOption(version: TailwindVersion): Partial<Config> {\n switch (version) {\n case 'v3': {\n // v3 以上では variants は variantOrders に改名された\n // そしてこれは上書きをしたいモチベがない\n // https://v2.tailwindcss.com/docs/configuration#variant-order\n return {}\n }\n\n case 'v2':\n case 'v1': {\n return { variants: {} }\n }\n }\n}\n\nfunction setEquals<T>(a: Set<T>, b: Set<T>) {\n return a.size === b.size && Array.from(a).every((value) => b.has(value))\n}\n\nexport function assertAllThemeHaveSameKeys(themeMap: ThemeMap): void {\n const defaultTheme = themeMap[':root']\n const expectedColorKeys = new Set(Object.keys(defaultTheme.color))\n const expectedEffectKeys = new Set(Object.keys(defaultTheme.effect))\n\n for (const [name, theme] of Object.entries(themeMap)) {\n const colorKeys = new Set(Object.keys(theme.color))\n const effectKeys = new Set(Object.keys(theme.effect))\n\n if (!setEquals(colorKeys, expectedColorKeys)) {\n throw new Error(`:root and ${name} does not have same colors.\n\nExpected( :root ): ${JSON.stringify(Array.from(expectedColorKeys))}\nGot: ${JSON.stringify(Array.from(colorKeys))}`)\n }\n\n if (!setEquals(effectKeys, expectedEffectKeys)) {\n throw new Error(`:root and ${name} does not have same effects.\n\nExpected( :root ): ${JSON.stringify(Array.from(expectedEffectKeys))}\nGot: ${JSON.stringify(Array.from(effectKeys))}`)\n }\n }\n}\n\nexport function camelToKebab(value: string) {\n return value\n .replace(/(?<small>[\\da-z]|(?=[A-Z]))(?<capital>[A-Z])/gu, '$1-$2')\n .toLowerCase()\n}\n\nexport const mapDefaultKey = <O extends object>(o: O) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(JSON.stringify(o), function reviver(k: string, v: string) {\n if (k === 'default') {\n const DefaultKey = getDefaultKeyName('v3')\n this[DefaultKey] = v\n return undefined\n }\n return v\n })\n}\n\nexport const flattenKey = <O extends object>(\n o: O,\n join?: (key: string) => boolean,\n): Record<string, unknown> => {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Object.entries(o).flatMap(([key, v]) => {\n if (typeof v === 'string') return [[key, v]]\n return Object.entries(v as object).map(([kk, vv]) => {\n return [(join?.(key) ?? true) ? [key, kk].join('-') : kk, vv]\n })\n }),\n )\n}\n\n/**\n * `DEFAULT` はkey名に結合しない\n */\nexport const flattenKeyWithoutDefault = <O extends object>(\n o: O,\n join?: (key: string) => boolean,\n): Record<string, unknown> => {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Object.entries(o).flatMap(([key, v]) => {\n if (typeof v === 'string') return [[key, v]]\n return Object.entries(v as object).map(([kk, vv]) => {\n const isDefaultKey = kk === 'DEFAULT' || kk === 'default'\n const outputKey = isDefaultKey\n ? key\n : (join?.(key) ?? true)\n ? [key, kk].join('-')\n : kk\n return [outputKey, vv]\n })\n }),\n )\n}\n","import { GradientMaterial, Material } from '@charcoal-ui/foundation'\n\nexport const COLOR_PREFIX = '--tailwind-color-'\n\nexport function isSingleColor(color: AnyColor): color is Material {\n return typeof color === 'string'\n}\n\ntype AnyColor = Material | GradientMaterial\n\nexport type AnyColorTheme = Record<string, AnyColor>\n","import { Material } from '@charcoal-ui/foundation'\nimport { applyEffect, filterObject, mapObject } from '@charcoal-ui/utils'\nimport type { Config } from 'tailwindcss'\nimport { MergedEffect } from '../foundation'\n\nimport { TailwindVersion } from '../types'\nimport { getDefaultKeyName } from '../util'\n\nimport { AnyColorTheme, COLOR_PREFIX, isSingleColor } from './utils'\n\nexport function colorsToTailwindConfig(\n version: TailwindVersion,\n colors: AnyColorTheme,\n effects: MergedEffect,\n): NonNullable<Config['theme']>['colors'] {\n const targetColors = filterObject(colors, isSingleColor)\n const DEFAULT = getDefaultKeyName(version)\n\n /**\n * こういう感じのを吐き出す\n *\n * ```js\n * {\n * DEFAULT: 'var(--tailwind-color-hoge1, #fff)',\n * hover: 'var(--tailwind-color-hoge1--hover, #eee)',\n * press: 'var(--tailwind-color-hoge1--press, #ddd)',\n * disabled: 'var(--tailwind-color-hoge1--disabled, #eee)',\n * }\n * ```\n */\n function colorsForAllEffects(name: string, color: Material) {\n const varName = `${COLOR_PREFIX}${name}`\n\n return {\n [DEFAULT]: `var(${varName}, ${color})`,\n\n ...mapObject(effects, (effectName, effect) => [\n effectName,\n `var(${varName}--${effectName}, ${applyEffect(color, effect)})`,\n ]),\n }\n }\n\n return mapObject(targetColors, (name, color) => [\n name,\n colorsForAllEffects(name, color),\n ])\n}\n","import {\n applyEffect,\n customPropertyToken,\n filterObject,\n flatMapObject,\n mapObject,\n} from '@charcoal-ui/utils'\nimport { ThemeMap } from '../types'\nimport {\n CharcoalAbstractTheme,\n EffectType,\n Key,\n CharcoalTheme as Theme,\n} from '@charcoal-ui/theme'\n\nexport function defineCssVariablesV1(themeMap: ThemeMap) {\n // @ts-expect-error FIXME\n return mapObject(themeMap, (key, theme) => {\n if (key.startsWith('@media')) {\n return [\n key,\n {\n ':root': defineColorVariableCSS(theme),\n },\n ]\n } else {\n return [key, defineColorVariableCSS(theme)]\n }\n })\n}\n\nexport const defineColorVariableCSS = (theme: Theme) => {\n const borders = mapObject(theme.border, (name, { color }) => [\n // REVIEW: もしtheme.colorにたまたまborder-〇〇で始まる色名がいたら被りうる\n withPrefixes('border', name),\n color,\n ])\n\n const colors = defineThemeVariables({ ...theme.color, ...borders })({ theme })\n return colors\n}\n\n/**\n * Check whether a value is non-null and non-undefined\n *\n * @param value nullable\n */\nexport const isPresent = <T>(value: T): value is NonNullable<T> => value != null\n\n/**\n * 子孫要素で使われるカラーテーマの CSS Variables を上書きする\n *\n * @params colorParams - 上書きしたい色の定義( `theme.color` の一部だけ書けば良い )\n * @params effectParams - effect の定義を上書きしたい場合は渡す(必須ではない)\n *\n * @example\n * ```tsx\n * const LocalTheme = styled.div`\n * ${defineThemeVariables({ text1: '#ff0000' })}\n * // `text1` is now defined as red\n * ${theme((o) => [o.font.text1])}\n * `\n * ```\n */\nexport function defineThemeVariables(\n colorParams: Partial<CharcoalAbstractTheme['color']>,\n effectParams?: Partial<CharcoalAbstractTheme['effect']>,\n) {\n return function toCssObject(props: {\n theme: Pick<CharcoalAbstractTheme, 'effect'>\n }) {\n const colors = filterObject(colorParams, isPresent)\n\n // flatMapObject の中で毎回 Object.entries を呼ぶのは無駄なので外で呼ぶ\n const effects = Object.entries({\n ...props.theme.effect,\n ...effectParams,\n })\n\n return flatMapObject(colors, (colorKey, color) => [\n [customPropertyToken(colorKey), color],\n\n ...effects.map<[string, string]>(([effectKey, effect]) => [\n customPropertyToken(colorKey, [effectKey]),\n applyEffect(color, [effect]),\n ]),\n ])\n }\n}\n\nexport function isSupportedEffect(effect: Key): effect is EffectType {\n return ['hover', 'press', 'disabled'].includes(effect as string)\n}\n\nexport const variable = (value: string) => `var(${value})`\n\nexport function withPrefixes(...parts: string[]) {\n return parts.join('-')\n}\n","import { Material } from '@charcoal-ui/foundation'\nimport { CharcoalTheme as Theme } from '@charcoal-ui/theme'\nimport {\n applyEffect,\n filterObject,\n flatMapObject,\n mapObject,\n} from '@charcoal-ui/utils'\nimport plugin from 'tailwindcss/plugin.js'\nimport { mergeEffect } from '../foundation'\nimport { CSSVariableName, CSSVariables, Definition, ThemeMap } from '../types'\nimport { COLOR_PREFIX, isSingleColor } from './utils'\nimport { defineCssVariablesV1 } from './pluginTokenV1'\n\n/**\n * --tailwind-* また --charcoal-* を生成する\n * TODO: --tailwindをやめる\n */\nexport default function cssVariableColorPlugin(\n themeMap: ThemeMap,\n cssVariablesV1: boolean,\n): ReturnType<typeof plugin> {\n // `:root` 以外のケースで各 CSS Variable がどういう値を取るかを定義する\n const { ':root': _defaultTheme, ...otherThemes } = themeMap\n const definitions = defineCssVariables(otherThemes)\n\n return plugin(({ addBase }) => {\n addBase(definitions)\n\n // styledのTokenInjector移植(background処理除く)\n if (cssVariablesV1) {\n const cssVariablesV1 = defineCssVariablesV1(themeMap)\n // @ts-expect-error FIXME\n addBase(cssVariablesV1)\n }\n })\n}\n\nexport function defineCssVariables(themes: Omit<ThemeMap, ':root'>) {\n return mapObject(themes, (selectorOrMediaQuery, theme) => {\n const css = toCssVariables(theme)\n\n if (selectorOrMediaQuery.startsWith('@media')) {\n return [\n selectorOrMediaQuery,\n {\n ':root': css,\n },\n ]\n } else {\n return [selectorOrMediaQuery, css]\n }\n }) as Definition\n}\n\nfunction toCssVariables(theme: Theme): CSSVariables {\n const colors = filterObject(theme.color, isSingleColor)\n const effects = Object.entries(mergeEffect(theme))\n\n return flatMapObject(colors, (name, color) => {\n const varName: keyof CSSVariables = `${COLOR_PREFIX}${name}`\n\n return [\n [varName, color],\n\n ...effects.map<[CSSVariableName, Material]>(([type, effect]) => [\n `${varName}--${type}`,\n applyEffect(color, effect),\n ]),\n ]\n })\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport { CSSRuleObject } from 'tailwindcss/types/config'\n\nexport const createFocusRingUtilities = (): {\n [key: string]: CSSRuleObject\n} => ({\n '.ch-focus-ring': {\n \"&:not(:disabled):not([aria-disabled]):focus-visible, &[aria-disabled='false']:focus-visible\":\n {\n outline: 'none',\n boxShadow:\n '0 0 0 4px var(--charcoal-color-border-focus-legacy, rgba(0, 150, 250, 0.32))',\n transition: '0.2s box-shadow',\n },\n },\n})\n\nexport const charcoalFocusRing: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createFocusRingUtilities())\n },\n)\n","import plugin from 'tailwindcss/plugin.js'\nimport { camelToKebab } from '../util'\nimport { GradientMaterial } from '@charcoal-ui/foundation'\nimport { ThemeColorGradient } from '@charcoal-ui/theme'\nimport {\n applyEffectToGradient,\n flatMapObject,\n gradient,\n GradientDirection,\n mapKeys,\n mapObject,\n} from '@charcoal-ui/utils'\nimport { Values } from '../types'\nimport { MergedEffect } from '../foundation'\n\nconst VAR_PREFIX = '--tailwind-gradient-'\n\nexport default function cssVariableColorPlugin(\n gradients: ThemeColorGradient,\n effects: MergedEffect,\n selectorOrMediaQuery: string,\n) {\n const utilities = getUtilities(gradients, effects)\n\n const classRules = mapObject(utilities, (name) => [\n `.bg-${name}`,\n { backgroundImage: `var(${VAR_PREFIX}${name})` },\n ])\n\n return plugin(({ addBase, addUtilities }) => {\n const css = mapKeys(utilities, (name) => `${VAR_PREFIX}${name}`)\n if (selectorOrMediaQuery.startsWith('@media')) {\n addBase({\n [selectorOrMediaQuery]: {\n ':root': css,\n },\n })\n } else {\n addBase({\n [selectorOrMediaQuery]: css,\n })\n }\n\n addUtilities(classRules, {\n // @ts-expect-error FIXME\n variants: ['responsive'],\n })\n })\n}\n\nconst DIRECTIONS = {\n 'to top': 'top',\n 'to bottom': 'bottom',\n 'to left': 'left',\n 'to right': 'right',\n} as const\n\n/**\n * こういう感じのやつ。この時点では `--tailwind-gradient-` のような CSS 変数名になってない\n *\n * ```js\n * {\n * 'hoge1': 'linear-gradient(to top, ...)',\n * ...\n * }\n * ```\n */\ntype Utilities = Record<string, LinearGradient>\n\ntype LinearGradient = `linear-gradient(${string})`\n\nexport function getUtilities(\n gradients: Record<string, GradientMaterial>,\n effect: MergedEffect,\n): Utilities {\n const effects = Object.entries(effect)\n const directions = Object.entries(DIRECTIONS) as [\n GradientDirection,\n Values<typeof DIRECTIONS>,\n ][]\n\n return flatMapObject(gradients, (name, colors) =>\n directions.flatMap(([direction, className]) => {\n const toLinearGradient = (colors: GradientMaterial) => {\n const style = gradient(direction)(colors)\n\n if (!('backgroundImage' in style)) {\n throw new Error(\n `Could not generate linear-gradient() from ${name} ${direction} ${className}`,\n )\n }\n\n // 本当は backgroundColor も同時に生成されるんだけど、使うにはそれ用の CSS 変数も一緒に作らないといけない\n // とりあえず background-image だけで動くのでこっちだけを利用する\n return style.backgroundImage as LinearGradient\n }\n\n return [\n // こういう感じのやつ\n // { 'hoge1': 'linear-gradient(to top, ...)' }\n [createUtilityName(name, className), toLinearGradient(colors)],\n\n // こういう感じのやつ\n // { 'hoge1--hover': 'linear-gradient(to top, ...)' }\n ...effects.map<[string, LinearGradient]>(([effectName, effect]) => [\n createUtilityName(name, className, effectName),\n toLinearGradient(applyEffectToGradient(effect)(colors)),\n ]),\n ]\n }),\n )\n}\n\nfunction createUtilityName(\n gradientName: string,\n direction: Values<typeof DIRECTIONS>,\n suffix = '',\n) {\n return [camelToKebab(gradientName), direction, suffix]\n .filter(Boolean)\n .join('-')\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport { TypographyDescriptor, TYPOGRAPHY_SIZE } from '@charcoal-ui/foundation'\nimport { halfLeading, mapObject, px } from '@charcoal-ui/utils'\n\nconst leadingCancel = {\n display: 'block',\n width: 0,\n height: 0,\n content: '\"\"',\n}\n\nconst typographyStyle = (style: TypographyDescriptor) => {\n const margin = -halfLeading(style)\n\n return {\n 'font-size': px(style.fontSize),\n 'line-height': px(style.lineHeight),\n\n /**\n * cancel leading\n *\n * @see https://yuyakinoshita.com/blog/2020/01/20/line-height-crop/\n */\n '&::before': {\n ...leadingCancel,\n marginTop: px(margin),\n },\n '&::after': {\n ...leadingCancel,\n marginBottom: px(margin),\n },\n }\n}\n\nconst typographyPlugin = plugin(({ addUtilities }) => {\n const typographyClasses = mapObject(TYPOGRAPHY_SIZE, (fontSize, style) => [\n `.typography-${fontSize}`,\n typographyStyle(style),\n ])\n\n addUtilities(\n {\n ...typographyClasses,\n '.preserve-half-leading': {\n '&::before': {\n content: 'none',\n },\n '&::after': {\n content: 'none',\n },\n },\n },\n {\n // @ts-expect-error FIXME\n variants: ['responsive'],\n },\n )\n})\n\nexport default typographyPlugin\n","import light from '@charcoal-ui/theme/unstable-tokens/css-variables.json' with { type: 'json' }\nimport type { Config } from 'tailwindcss'\nimport {\n flattenKey as flattenKeys,\n flattenKeyWithoutDefault,\n mapDefaultKey as mapDefaultKeys,\n} from './util'\n\nexport function unstable_createTailwindConfigTokenV2(): Omit<\n Config,\n 'content'\n> {\n const fontSize = Object.fromEntries(\n Object.entries(light.text['font-size']).flatMap(([k, v]) => {\n // text.fontSize.paragraph + text.lineHeight.paragraph -> text-paragraph\n if (typeof v === 'string') {\n return [\n [\n k,\n [\n v,\n // @ts-expect-error k is keyof line-height\n { lineHeight: light.text['line-height'][k] },\n ],\n ],\n ]\n }\n\n // text.fontSize.heading.s + text.lineHeight.heading.s -> text-heading-s\n return Object.entries(v as Record<string, string>).map(([kk, vv]) => {\n return [\n [k, kk].join('-'),\n [\n vv,\n // @ts-expect-error k is keyof line-height\n { lineHeight: light.text['line-height'][k][kk] },\n ],\n ]\n })\n }),\n ) as NonNullable<Config['theme']>['fontSize']\n\n // space.target.s -> p-target-s\n // space.gap.gapButtons -> p-gap-buttons\n const spacing = flattenKeys(light.space, (key) => !/(gap|padding)/.test(key))\n // color.container.default -> bg-container\n // color.container.hover -> bg-container-hover\n const colors = mapDefaultKeys(light.color)\n\n const config: Omit<Config, 'content'> = {\n darkMode: 'media',\n theme: {\n // borderWidth.m -> border-m\n // borderWidth.focus.1 -> border-focus-1\n borderWidth: flattenKeyWithoutDefault({\n 'width-ch': flattenKeys(light['border-width']), // unstable border width token\n }),\n borderRadius: light.radius,\n borderColor: flattenKeyWithoutDefault({ ch: flattenKeys(colors.border) }),\n\n colors,\n\n fontSize,\n fontWeight: flattenKeys({ ch: light.text['font-weight'] }),\n\n spacing,\n gap: spacing,\n width: light['paragraph-width'],\n },\n }\n\n return config\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport iconsV2 from '@charcoal-ui/icon-files/v2/datauri'\nimport iconsV1 from '@charcoal-ui/icon-files/v1/datauri'\nimport { CSSRuleObject } from 'tailwindcss/types/config'\n\nconst transformClassNameV2 = (fileName: string) => {\n const [size, variant, name] = fileName.split('/')\n return [\n '.icon-v2',\n name.replaceAll('.', '-'),\n ...(variant === 'regular' ? [] : [variant]),\n ...(size === '24' ? [] : [size]),\n ]\n .join('-')\n .toLowerCase()\n}\n\nconst transformClassNameV1 = (fileName: string) => {\n const [size, name] = fileName.split('/')\n return [\n '.icon-v1',\n name.replaceAll('.', '-'),\n ...(size === '24' ? [] : [size]),\n ]\n .join('-')\n .toLowerCase()\n}\n\nexport const createIconUtilities = ({\n v2 = false,\n}: {\n v2?: boolean\n}): {\n [key: string]: CSSRuleObject\n} => {\n const newUtilities: { [key: string]: CSSRuleObject } = {}\n const icons = v2 ? iconsV2 : iconsV1\n for (const [fileName, { uri, isSetCurrentcolor }] of Object.entries(icons)) {\n const className = v2\n ? transformClassNameV2(fileName)\n : transformClassNameV1(fileName)\n\n newUtilities[className] = {\n display: 'inline-block',\n width: '1em',\n height: '1em',\n maskImage: `url(${uri})`,\n maskSize: '100% 100%',\n background: isSetCurrentcolor ? 'currentColor' : null,\n aspectRatio: '1/1',\n }\n }\n return newUtilities\n}\n\nexport const charcoalIconsV2: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createIconUtilities({ v2: true }))\n },\n)\n\nexport const charcoalIconsV1: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createIconUtilities({ v2: false }))\n },\n)\n","import { GRID_COUNT, mergeEffect } from './foundation'\n\nimport type { Config } from 'tailwindcss'\nimport { TailwindVersion, ThemeMap } from './types'\n\nimport {\n assertAllThemeHaveSameKeys,\n getDefaultKeyName,\n getVariantOption,\n} from './util'\nimport {\n COLUMN_UNIT,\n GUTTER_UNIT,\n SPACING,\n BORDER_RADIUS,\n} from '@charcoal-ui/foundation'\nimport { light } from '@charcoal-ui/theme'\nimport { mapObject, px } from '@charcoal-ui/utils'\nimport { colorsToTailwindConfig } from './colors/toTailwindConfig'\n\nimport cssVariableColorPlugin from './colors/plugin'\nimport { charcoalFocusRing } from './focusring'\nimport cssVariableGradientPlugin from './gradient/plugin'\nimport typographyPlugin from './typography/plugin'\nimport { unstable_createTailwindConfigTokenV2 } from './tokenV2'\nimport { charcoalIconsV1, charcoalIconsV2 } from './icons'\nexport { unstable_createTailwindConfigTokenV2 }\n\ninterface Options {\n version?: TailwindVersion\n theme?: ThemeMap\n cssVariablesV1?: boolean\n unstableTokenV2?: boolean\n iconsV2?: boolean\n iconsV1?: boolean\n}\n\nexport function createTailwindConfig({\n theme = { ':root': light },\n version = 'v3',\n cssVariablesV1 = true,\n unstableTokenV2 = false,\n iconsV2 = false,\n iconsV1 = false,\n}: Options): Omit<Config, 'content'> {\n assertAllThemeHaveSameKeys(theme)\n\n const defaultTheme = theme[':root']\n const effects = mergeEffect(defaultTheme)\n const DEFAULT = getDefaultKeyName(version)\n\n const {\n borderWidth: borderWidthV2,\n borderRadius: borderRadiusV2,\n borderColor: borderColorV2,\n colors: colorsV2,\n fontSize: fontSizeV2,\n fontWeight: fontWeightV2,\n spacing: spacingV2,\n gap: gapV2,\n width: widthV2,\n }: Partial<NonNullable<Config['theme']>> = unstableTokenV2\n ? unstable_createTailwindConfigTokenV2().theme\n : {}\n\n return {\n theme: {\n screens: {\n screen1: px(0),\n screen2: px(defaultTheme.breakpoint.screen1),\n screen3: px(defaultTheme.breakpoint.screen2),\n screen4: px(defaultTheme.breakpoint.screen3),\n screen5: px(defaultTheme.breakpoint.screen4),\n },\n colors: {\n // @deprecated\n black: '#000',\n\n // @deprecated\n white: '#fff',\n\n transparent: 'transparent',\n current: 'currentColor',\n ...colorsToTailwindConfig(version, defaultTheme.color, effects),\n ...colorsV2,\n },\n borderColor: {\n ...colorsToTailwindConfig(\n version,\n mapObject(defaultTheme.border, (k, v) => [k, v.color]),\n effects,\n ),\n ...borderColorV2,\n },\n spacing: {\n ...mapObject(\n SPACING,\n (name, pixel) => [name, px(pixel)] as [string, string],\n ),\n ...spacingV2,\n },\n width: {\n full: '100%',\n screen: '100vw',\n auto: 'auto',\n fit: 'fit-content',\n\n /**\n * generates classes like \"w-col-span-1\"\n */\n ...Array.from({ length: GRID_COUNT }, (_, i) => i + 1).reduce(\n (styles, i) => ({\n ...styles,\n [`col-span-${i}`]: px(COLUMN_UNIT * i + GUTTER_UNIT * (i - 1)),\n }),\n {},\n ),\n\n /**\n * generates classes like \"w-1/12\" (except for 12/12, which just equals to w-full)\n */\n ...Array.from({ length: GRID_COUNT - 1 }, (_, i) => i + 1).reduce(\n (styles, i) => ({\n ...styles,\n [`${i}/${GRID_COUNT}`]: `${(i / GRID_COUNT) * 100}%`,\n }),\n {},\n ),\n ...widthV2,\n },\n gap: {\n fixed: px(GUTTER_UNIT),\n ...gapV2,\n },\n borderRadius: {\n ...mapObject(\n BORDER_RADIUS,\n (name, value) => [name, px(value)] as [string, string],\n ),\n ...borderRadiusV2,\n },\n transitionDuration: {\n [DEFAULT]: '0.2s',\n },\n ...(unstableTokenV2\n ? {\n extend: {\n borderWidth: borderWidthV2,\n fontWeight: fontWeightV2,\n fontSize: fontSizeV2,\n },\n }\n : {}),\n },\n\n ...getVariantOption(version),\n\n corePlugins: {\n lineHeight: false,\n },\n plugins: [\n typographyPlugin,\n charcoalFocusRing,\n cssVariableColorPlugin(theme, Boolean(cssVariablesV1)),\n\n ...Object.entries(theme).map(([selectorOrMediaQuery, theme]) =>\n cssVariableGradientPlugin(\n theme.gradientColor,\n mergeEffect(theme),\n selectorOrMediaQuery,\n ),\n ),\n ...(iconsV2 ? [charcoalIconsV2] : []),\n ...(iconsV1 ? [charcoalIconsV1] : []),\n ],\n }\n}\n\nexport const config: Omit<Config, 'content'> = createTailwindConfig({})\n\nexport default config\n"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -5,9 +5,7 @@ import plugin from "tailwindcss/plugin.js";
|
|
|
5
5
|
import light$1 from "@charcoal-ui/theme/unstable-tokens/css-variables.json" with { type: "json" };
|
|
6
6
|
import iconsV2 from "@charcoal-ui/icon-files/v2/datauri";
|
|
7
7
|
import iconsV1 from "@charcoal-ui/icon-files/v1/datauri";
|
|
8
|
-
|
|
9
8
|
//#region src/foundation.ts
|
|
10
|
-
const GRID_COUNT = 12;
|
|
11
9
|
function mergeEffect({ elementEffect, effect }) {
|
|
12
10
|
return {
|
|
13
11
|
...elementEffect,
|
|
@@ -18,7 +16,6 @@ function mergeEffect({ elementEffect, effect }) {
|
|
|
18
16
|
}
|
|
19
17
|
};
|
|
20
18
|
}
|
|
21
|
-
|
|
22
19
|
//#endregion
|
|
23
20
|
//#region src/util.ts
|
|
24
21
|
/**
|
|
@@ -92,14 +89,12 @@ const flattenKeyWithoutDefault = (o, join) => {
|
|
|
92
89
|
});
|
|
93
90
|
}));
|
|
94
91
|
};
|
|
95
|
-
|
|
96
92
|
//#endregion
|
|
97
93
|
//#region src/colors/utils.ts
|
|
98
94
|
const COLOR_PREFIX = "--tailwind-color-";
|
|
99
95
|
function isSingleColor(color) {
|
|
100
96
|
return typeof color === "string";
|
|
101
97
|
}
|
|
102
|
-
|
|
103
98
|
//#endregion
|
|
104
99
|
//#region src/colors/toTailwindConfig.ts
|
|
105
100
|
function colorsToTailwindConfig(version, colors, effects) {
|
|
@@ -126,7 +121,6 @@ function colorsToTailwindConfig(version, colors, effects) {
|
|
|
126
121
|
}
|
|
127
122
|
return mapObject(targetColors, (name, color) => [name, colorsForAllEffects(name, color)]);
|
|
128
123
|
}
|
|
129
|
-
|
|
130
124
|
//#endregion
|
|
131
125
|
//#region src/colors/pluginTokenV1.ts
|
|
132
126
|
function defineCssVariablesV1(themeMap) {
|
|
@@ -176,7 +170,6 @@ function defineThemeVariables(colorParams, effectParams) {
|
|
|
176
170
|
function withPrefixes(...parts) {
|
|
177
171
|
return parts.join("-");
|
|
178
172
|
}
|
|
179
|
-
|
|
180
173
|
//#endregion
|
|
181
174
|
//#region src/colors/plugin.ts
|
|
182
175
|
/**
|
|
@@ -206,7 +199,16 @@ function toCssVariables(theme) {
|
|
|
206
199
|
return [[varName, color], ...effects.map(([type, effect]) => [`${varName}--${type}`, applyEffect(color, effect)])];
|
|
207
200
|
});
|
|
208
201
|
}
|
|
209
|
-
|
|
202
|
+
//#endregion
|
|
203
|
+
//#region src/focusring/index.ts
|
|
204
|
+
const createFocusRingUtilities = () => ({ ".ch-focus-ring": { "&:not(:disabled):not([aria-disabled]):focus-visible, &[aria-disabled='false']:focus-visible": {
|
|
205
|
+
outline: "none",
|
|
206
|
+
boxShadow: "0 0 0 4px var(--charcoal-color-border-focus-legacy, rgba(0, 150, 250, 0.32))",
|
|
207
|
+
transition: "0.2s box-shadow"
|
|
208
|
+
} } });
|
|
209
|
+
const charcoalFocusRing = plugin(({ addUtilities }) => {
|
|
210
|
+
addUtilities(createFocusRingUtilities());
|
|
211
|
+
});
|
|
210
212
|
//#endregion
|
|
211
213
|
//#region src/gradient/plugin.ts
|
|
212
214
|
const VAR_PREFIX = "--tailwind-gradient-";
|
|
@@ -245,7 +247,6 @@ function createUtilityName(gradientName, direction, suffix = "") {
|
|
|
245
247
|
suffix
|
|
246
248
|
].filter(Boolean).join("-");
|
|
247
249
|
}
|
|
248
|
-
|
|
249
250
|
//#endregion
|
|
250
251
|
//#region src/typography/plugin.ts
|
|
251
252
|
const leadingCancel = {
|
|
@@ -259,6 +260,11 @@ const typographyStyle = (style) => {
|
|
|
259
260
|
return {
|
|
260
261
|
"font-size": px(style.fontSize),
|
|
261
262
|
"line-height": px(style.lineHeight),
|
|
263
|
+
/**
|
|
264
|
+
* cancel leading
|
|
265
|
+
*
|
|
266
|
+
* @see https://yuyakinoshita.com/blog/2020/01/20/line-height-crop/
|
|
267
|
+
*/
|
|
262
268
|
"&::before": {
|
|
263
269
|
...leadingCancel,
|
|
264
270
|
marginTop: px(margin)
|
|
@@ -278,7 +284,6 @@ const typographyPlugin = plugin(({ addUtilities }) => {
|
|
|
278
284
|
}
|
|
279
285
|
}, { variants: ["responsive"] });
|
|
280
286
|
});
|
|
281
|
-
|
|
282
287
|
//#endregion
|
|
283
288
|
//#region src/tokenV2.ts
|
|
284
289
|
function unstable_createTailwindConfigTokenV2() {
|
|
@@ -305,7 +310,6 @@ function unstable_createTailwindConfigTokenV2() {
|
|
|
305
310
|
}
|
|
306
311
|
};
|
|
307
312
|
}
|
|
308
|
-
|
|
309
313
|
//#endregion
|
|
310
314
|
//#region src/icons.ts
|
|
311
315
|
const transformClassNameV2 = (fileName) => {
|
|
@@ -348,7 +352,6 @@ const charcoalIconsV2 = plugin(({ addUtilities }) => {
|
|
|
348
352
|
const charcoalIconsV1 = plugin(({ addUtilities }) => {
|
|
349
353
|
addUtilities(createIconUtilities({ v2: false }));
|
|
350
354
|
});
|
|
351
|
-
|
|
352
355
|
//#endregion
|
|
353
356
|
//#region src/index.ts
|
|
354
357
|
function createTailwindConfig({ theme = { ":root": light }, version = "v3", cssVariablesV1 = true, unstableTokenV2 = false, iconsV2 = false, iconsV1 = false }) {
|
|
@@ -387,13 +390,19 @@ function createTailwindConfig({ theme = { ":root": light }, version = "v3", cssV
|
|
|
387
390
|
screen: "100vw",
|
|
388
391
|
auto: "auto",
|
|
389
392
|
fit: "fit-content",
|
|
390
|
-
|
|
393
|
+
/**
|
|
394
|
+
* generates classes like "w-col-span-1"
|
|
395
|
+
*/
|
|
396
|
+
...Array.from({ length: 12 }, (_, i) => i + 1).reduce((styles, i) => ({
|
|
391
397
|
...styles,
|
|
392
398
|
[`col-span-${i}`]: px(COLUMN_UNIT * i + GUTTER_UNIT * (i - 1))
|
|
393
399
|
}), {}),
|
|
394
|
-
|
|
400
|
+
/**
|
|
401
|
+
* generates classes like "w-1/12" (except for 12/12, which just equals to w-full)
|
|
402
|
+
*/
|
|
403
|
+
...Array.from({ length: 11 }, (_, i) => i + 1).reduce((styles, i) => ({
|
|
395
404
|
...styles,
|
|
396
|
-
[`${i}
|
|
405
|
+
[`${i}/12`]: `${i / 12 * 100}%`
|
|
397
406
|
}), {}),
|
|
398
407
|
...widthV2
|
|
399
408
|
},
|
|
@@ -416,6 +425,7 @@ function createTailwindConfig({ theme = { ":root": light }, version = "v3", cssV
|
|
|
416
425
|
corePlugins: { lineHeight: false },
|
|
417
426
|
plugins: [
|
|
418
427
|
typographyPlugin,
|
|
428
|
+
charcoalFocusRing,
|
|
419
429
|
cssVariableColorPlugin$1(theme, Boolean(cssVariablesV1)),
|
|
420
430
|
...Object.entries(theme).map(([selectorOrMediaQuery, theme]) => cssVariableColorPlugin(theme.gradientColor, mergeEffect(theme), selectorOrMediaQuery)),
|
|
421
431
|
...iconsV2 ? [charcoalIconsV2] : [],
|
|
@@ -424,7 +434,7 @@ function createTailwindConfig({ theme = { ":root": light }, version = "v3", cssV
|
|
|
424
434
|
};
|
|
425
435
|
}
|
|
426
436
|
const config = createTailwindConfig({});
|
|
427
|
-
|
|
428
437
|
//#endregion
|
|
429
438
|
export { config, config as default, createTailwindConfig, unstable_createTailwindConfigTokenV2 };
|
|
439
|
+
|
|
430
440
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["cssVariableColorPlugin","light","flattenKeys","mapDefaultKeys","cssVariableColorPlugin","cssVariableGradientPlugin"],"sources":["../src/foundation.ts","../src/util.ts","../src/colors/utils.ts","../src/colors/toTailwindConfig.ts","../src/colors/pluginTokenV1.ts","../src/colors/plugin.ts","../src/gradient/plugin.ts","../src/typography/plugin.ts","../src/tokenV2.ts","../src/icons.ts","../src/index.ts"],"sourcesContent":["import { Effect } from '@charcoal-ui/foundation'\nimport { CharcoalTheme as Theme } from '@charcoal-ui/theme'\n\nexport const GRID_COUNT = 12\n\nexport function mergeEffect({\n elementEffect,\n effect,\n}: Pick<Theme, 'elementEffect' | 'effect'>): MergedEffect {\n return {\n ...elementEffect,\n ...effect,\n outline: {\n type: 'opacity',\n opacity: 0.32,\n } as Effect,\n }\n}\n\nexport type MergedEffect = Record<string, Effect>\n","import type { Config } from 'tailwindcss'\nimport { TailwindVersion, ThemeMap } from './types'\n\n/**\n * the key \"default\" or \"DEFAULT\" has special meaning and dropped from class name\n *\n * @see https://tailwindcss.com/docs/upgrading-to-v2#update-default-theme-keys-to-default\n */\nexport function getDefaultKeyName(version: TailwindVersion) {\n switch (version) {\n case 'v3':\n case 'v2': {\n return 'DEFAULT'\n }\n\n case 'v1': {\n return 'default'\n }\n }\n}\n\nexport function getVariantOption(version: TailwindVersion): Partial<Config> {\n switch (version) {\n case 'v3': {\n // v3 以上では variants は variantOrders に改名された\n // そしてこれは上書きをしたいモチベがない\n // https://v2.tailwindcss.com/docs/configuration#variant-order\n return {}\n }\n\n case 'v2':\n case 'v1': {\n return { variants: {} }\n }\n }\n}\n\nfunction setEquals<T>(a: Set<T>, b: Set<T>) {\n return a.size === b.size && Array.from(a).every((value) => b.has(value))\n}\n\nexport function assertAllThemeHaveSameKeys(themeMap: ThemeMap): void {\n const defaultTheme = themeMap[':root']\n const expectedColorKeys = new Set(Object.keys(defaultTheme.color))\n const expectedEffectKeys = new Set(Object.keys(defaultTheme.effect))\n\n for (const [name, theme] of Object.entries(themeMap)) {\n const colorKeys = new Set(Object.keys(theme.color))\n const effectKeys = new Set(Object.keys(theme.effect))\n\n if (!setEquals(colorKeys, expectedColorKeys)) {\n throw new Error(`:root and ${name} does not have same colors.\n\nExpected( :root ): ${JSON.stringify(Array.from(expectedColorKeys))}\nGot: ${JSON.stringify(Array.from(colorKeys))}`)\n }\n\n if (!setEquals(effectKeys, expectedEffectKeys)) {\n throw new Error(`:root and ${name} does not have same effects.\n\nExpected( :root ): ${JSON.stringify(Array.from(expectedEffectKeys))}\nGot: ${JSON.stringify(Array.from(effectKeys))}`)\n }\n }\n}\n\nexport function camelToKebab(value: string) {\n return value\n .replace(/(?<small>[\\da-z]|(?=[A-Z]))(?<capital>[A-Z])/gu, '$1-$2')\n .toLowerCase()\n}\n\nexport const mapDefaultKey = <O extends object>(o: O) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(JSON.stringify(o), function reviver(k: string, v: string) {\n if (k === 'default') {\n const DefaultKey = getDefaultKeyName('v3')\n this[DefaultKey] = v\n return undefined\n }\n return v\n })\n}\n\nexport const flattenKey = <O extends object>(\n o: O,\n join?: (key: string) => boolean,\n): Record<string, unknown> => {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Object.entries(o).flatMap(([key, v]) => {\n if (typeof v === 'string') return [[key, v]]\n return Object.entries(v as object).map(([kk, vv]) => {\n return [(join?.(key) ?? true) ? [key, kk].join('-') : kk, vv]\n })\n }),\n )\n}\n\n/**\n * `DEFAULT` はkey名に結合しない\n */\nexport const flattenKeyWithoutDefault = <O extends object>(\n o: O,\n join?: (key: string) => boolean,\n): Record<string, unknown> => {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Object.entries(o).flatMap(([key, v]) => {\n if (typeof v === 'string') return [[key, v]]\n return Object.entries(v as object).map(([kk, vv]) => {\n const isDefaultKey = kk === 'DEFAULT' || kk === 'default'\n const outputKey = isDefaultKey\n ? key\n : (join?.(key) ?? true)\n ? [key, kk].join('-')\n : kk\n return [outputKey, vv]\n })\n }),\n )\n}\n","import { GradientMaterial, Material } from '@charcoal-ui/foundation'\n\nexport const COLOR_PREFIX = '--tailwind-color-'\n\nexport function isSingleColor(color: AnyColor): color is Material {\n return typeof color === 'string'\n}\n\ntype AnyColor = Material | GradientMaterial\n\nexport type AnyColorTheme = Record<string, AnyColor>\n","import { Material } from '@charcoal-ui/foundation'\nimport { applyEffect, filterObject, mapObject } from '@charcoal-ui/utils'\nimport type { Config } from 'tailwindcss'\nimport { MergedEffect } from '../foundation'\n\nimport { TailwindVersion } from '../types'\nimport { getDefaultKeyName } from '../util'\n\nimport { AnyColorTheme, COLOR_PREFIX, isSingleColor } from './utils'\n\nexport function colorsToTailwindConfig(\n version: TailwindVersion,\n colors: AnyColorTheme,\n effects: MergedEffect,\n): NonNullable<Config['theme']>['colors'] {\n const targetColors = filterObject(colors, isSingleColor)\n const DEFAULT = getDefaultKeyName(version)\n\n /**\n * こういう感じのを吐き出す\n *\n * ```js\n * {\n * DEFAULT: 'var(--tailwind-color-hoge1, #fff)',\n * hover: 'var(--tailwind-color-hoge1--hover, #eee)',\n * press: 'var(--tailwind-color-hoge1--press, #ddd)',\n * disabled: 'var(--tailwind-color-hoge1--disabled, #eee)',\n * }\n * ```\n */\n function colorsForAllEffects(name: string, color: Material) {\n const varName = `${COLOR_PREFIX}${name}`\n\n return {\n [DEFAULT]: `var(${varName}, ${color})`,\n\n ...mapObject(effects, (effectName, effect) => [\n effectName,\n `var(${varName}--${effectName}, ${applyEffect(color, effect)})`,\n ]),\n }\n }\n\n return mapObject(targetColors, (name, color) => [\n name,\n colorsForAllEffects(name, color),\n ])\n}\n","import {\n applyEffect,\n customPropertyToken,\n filterObject,\n flatMapObject,\n mapObject,\n} from '@charcoal-ui/utils'\nimport { ThemeMap } from '../types'\nimport {\n CharcoalAbstractTheme,\n EffectType,\n Key,\n CharcoalTheme as Theme,\n} from '@charcoal-ui/theme'\n\nexport function defineCssVariablesV1(themeMap: ThemeMap) {\n // @ts-expect-error FIXME\n return mapObject(themeMap, (key, theme) => {\n if (key.startsWith('@media')) {\n return [\n key,\n {\n ':root': defineColorVariableCSS(theme),\n },\n ]\n } else {\n return [key, defineColorVariableCSS(theme)]\n }\n })\n}\n\nexport const defineColorVariableCSS = (theme: Theme) => {\n const borders = mapObject(theme.border, (name, { color }) => [\n // REVIEW: もしtheme.colorにたまたまborder-〇〇で始まる色名がいたら被りうる\n withPrefixes('border', name),\n color,\n ])\n\n const colors = defineThemeVariables({ ...theme.color, ...borders })({ theme })\n return colors\n}\n\n/**\n * Check whether a value is non-null and non-undefined\n *\n * @param value nullable\n */\nexport const isPresent = <T>(value: T): value is NonNullable<T> => value != null\n\n/**\n * 子孫要素で使われるカラーテーマの CSS Variables を上書きする\n *\n * @params colorParams - 上書きしたい色の定義( `theme.color` の一部だけ書けば良い )\n * @params effectParams - effect の定義を上書きしたい場合は渡す(必須ではない)\n *\n * @example\n * ```tsx\n * const LocalTheme = styled.div`\n * ${defineThemeVariables({ text1: '#ff0000' })}\n * // `text1` is now defined as red\n * ${theme((o) => [o.font.text1])}\n * `\n * ```\n */\nexport function defineThemeVariables(\n colorParams: Partial<CharcoalAbstractTheme['color']>,\n effectParams?: Partial<CharcoalAbstractTheme['effect']>,\n) {\n return function toCssObject(props: {\n theme: Pick<CharcoalAbstractTheme, 'effect'>\n }) {\n const colors = filterObject(colorParams, isPresent)\n\n // flatMapObject の中で毎回 Object.entries を呼ぶのは無駄なので外で呼ぶ\n const effects = Object.entries({\n ...props.theme.effect,\n ...effectParams,\n })\n\n return flatMapObject(colors, (colorKey, color) => [\n [customPropertyToken(colorKey), color],\n\n ...effects.map<[string, string]>(([effectKey, effect]) => [\n customPropertyToken(colorKey, [effectKey]),\n applyEffect(color, [effect]),\n ]),\n ])\n }\n}\n\nexport function isSupportedEffect(effect: Key): effect is EffectType {\n return ['hover', 'press', 'disabled'].includes(effect as string)\n}\n\nexport const variable = (value: string) => `var(${value})`\n\nexport function withPrefixes(...parts: string[]) {\n return parts.join('-')\n}\n","import { Material } from '@charcoal-ui/foundation'\nimport { CharcoalTheme as Theme } from '@charcoal-ui/theme'\nimport {\n applyEffect,\n filterObject,\n flatMapObject,\n mapObject,\n} from '@charcoal-ui/utils'\nimport plugin from 'tailwindcss/plugin.js'\nimport { mergeEffect } from '../foundation'\nimport { CSSVariableName, CSSVariables, Definition, ThemeMap } from '../types'\nimport { COLOR_PREFIX, isSingleColor } from './utils'\nimport { defineCssVariablesV1 } from './pluginTokenV1'\n\n/**\n * --tailwind-* また --charcoal-* を生成する\n * TODO: --tailwindをやめる\n */\nexport default function cssVariableColorPlugin(\n themeMap: ThemeMap,\n cssVariablesV1: boolean,\n): ReturnType<typeof plugin> {\n // `:root` 以外のケースで各 CSS Variable がどういう値を取るかを定義する\n const { ':root': _defaultTheme, ...otherThemes } = themeMap\n const definitions = defineCssVariables(otherThemes)\n\n return plugin(({ addBase }) => {\n addBase(definitions)\n\n // styledのTokenInjector移植(background処理除く)\n if (cssVariablesV1) {\n const cssVariablesV1 = defineCssVariablesV1(themeMap)\n // @ts-expect-error FIXME\n addBase(cssVariablesV1)\n }\n })\n}\n\nexport function defineCssVariables(themes: Omit<ThemeMap, ':root'>) {\n return mapObject(themes, (selectorOrMediaQuery, theme) => {\n const css = toCssVariables(theme)\n\n if (selectorOrMediaQuery.startsWith('@media')) {\n return [\n selectorOrMediaQuery,\n {\n ':root': css,\n },\n ]\n } else {\n return [selectorOrMediaQuery, css]\n }\n }) as Definition\n}\n\nfunction toCssVariables(theme: Theme): CSSVariables {\n const colors = filterObject(theme.color, isSingleColor)\n const effects = Object.entries(mergeEffect(theme))\n\n return flatMapObject(colors, (name, color) => {\n const varName: keyof CSSVariables = `${COLOR_PREFIX}${name}`\n\n return [\n [varName, color],\n\n ...effects.map<[CSSVariableName, Material]>(([type, effect]) => [\n `${varName}--${type}`,\n applyEffect(color, effect),\n ]),\n ]\n })\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport { camelToKebab } from '../util'\nimport { GradientMaterial } from '@charcoal-ui/foundation'\nimport { ThemeColorGradient } from '@charcoal-ui/theme'\nimport {\n applyEffectToGradient,\n flatMapObject,\n gradient,\n GradientDirection,\n mapKeys,\n mapObject,\n} from '@charcoal-ui/utils'\nimport { Values } from '../types'\nimport { MergedEffect } from '../foundation'\n\nconst VAR_PREFIX = '--tailwind-gradient-'\n\nexport default function cssVariableColorPlugin(\n gradients: ThemeColorGradient,\n effects: MergedEffect,\n selectorOrMediaQuery: string,\n) {\n const utilities = getUtilities(gradients, effects)\n\n const classRules = mapObject(utilities, (name) => [\n `.bg-${name}`,\n { backgroundImage: `var(${VAR_PREFIX}${name})` },\n ])\n\n return plugin(({ addBase, addUtilities }) => {\n const css = mapKeys(utilities, (name) => `${VAR_PREFIX}${name}`)\n if (selectorOrMediaQuery.startsWith('@media')) {\n addBase({\n [selectorOrMediaQuery]: {\n ':root': css,\n },\n })\n } else {\n addBase({\n [selectorOrMediaQuery]: css,\n })\n }\n\n addUtilities(classRules, {\n // @ts-expect-error FIXME\n variants: ['responsive'],\n })\n })\n}\n\nconst DIRECTIONS = {\n 'to top': 'top',\n 'to bottom': 'bottom',\n 'to left': 'left',\n 'to right': 'right',\n} as const\n\n/**\n * こういう感じのやつ。この時点では `--tailwind-gradient-` のような CSS 変数名になってない\n *\n * ```js\n * {\n * 'hoge1': 'linear-gradient(to top, ...)',\n * ...\n * }\n * ```\n */\ntype Utilities = Record<string, LinearGradient>\n\ntype LinearGradient = `linear-gradient(${string})`\n\nexport function getUtilities(\n gradients: Record<string, GradientMaterial>,\n effect: MergedEffect,\n): Utilities {\n const effects = Object.entries(effect)\n const directions = Object.entries(DIRECTIONS) as [\n GradientDirection,\n Values<typeof DIRECTIONS>,\n ][]\n\n return flatMapObject(gradients, (name, colors) =>\n directions.flatMap(([direction, className]) => {\n const toLinearGradient = (colors: GradientMaterial) => {\n const style = gradient(direction)(colors)\n\n if (!('backgroundImage' in style)) {\n throw new Error(\n `Could not generate linear-gradient() from ${name} ${direction} ${className}`,\n )\n }\n\n // 本当は backgroundColor も同時に生成されるんだけど、使うにはそれ用の CSS 変数も一緒に作らないといけない\n // とりあえず background-image だけで動くのでこっちだけを利用する\n return style.backgroundImage as LinearGradient\n }\n\n return [\n // こういう感じのやつ\n // { 'hoge1': 'linear-gradient(to top, ...)' }\n [createUtilityName(name, className), toLinearGradient(colors)],\n\n // こういう感じのやつ\n // { 'hoge1--hover': 'linear-gradient(to top, ...)' }\n ...effects.map<[string, LinearGradient]>(([effectName, effect]) => [\n createUtilityName(name, className, effectName),\n toLinearGradient(applyEffectToGradient(effect)(colors)),\n ]),\n ]\n }),\n )\n}\n\nfunction createUtilityName(\n gradientName: string,\n direction: Values<typeof DIRECTIONS>,\n suffix = '',\n) {\n return [camelToKebab(gradientName), direction, suffix]\n .filter(Boolean)\n .join('-')\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport { TypographyDescriptor, TYPOGRAPHY_SIZE } from '@charcoal-ui/foundation'\nimport { halfLeading, mapObject, px } from '@charcoal-ui/utils'\n\nconst leadingCancel = {\n display: 'block',\n width: 0,\n height: 0,\n content: '\"\"',\n}\n\nconst typographyStyle = (style: TypographyDescriptor) => {\n const margin = -halfLeading(style)\n\n return {\n 'font-size': px(style.fontSize),\n 'line-height': px(style.lineHeight),\n\n /**\n * cancel leading\n *\n * @see https://yuyakinoshita.com/blog/2020/01/20/line-height-crop/\n */\n '&::before': {\n ...leadingCancel,\n marginTop: px(margin),\n },\n '&::after': {\n ...leadingCancel,\n marginBottom: px(margin),\n },\n }\n}\n\nconst typographyPlugin = plugin(({ addUtilities }) => {\n const typographyClasses = mapObject(TYPOGRAPHY_SIZE, (fontSize, style) => [\n `.typography-${fontSize}`,\n typographyStyle(style),\n ])\n\n addUtilities(\n {\n ...typographyClasses,\n '.preserve-half-leading': {\n '&::before': {\n content: 'none',\n },\n '&::after': {\n content: 'none',\n },\n },\n },\n {\n // @ts-expect-error FIXME\n variants: ['responsive'],\n },\n )\n})\n\nexport default typographyPlugin\n","import light from '@charcoal-ui/theme/unstable-tokens/css-variables.json' with { type: 'json' }\nimport type { Config } from 'tailwindcss'\nimport {\n flattenKey as flattenKeys,\n flattenKeyWithoutDefault,\n mapDefaultKey as mapDefaultKeys,\n} from './util'\n\nexport function unstable_createTailwindConfigTokenV2(): Omit<\n Config,\n 'content'\n> {\n const fontSize = Object.fromEntries(\n Object.entries(light.text['font-size']).flatMap(([k, v]) => {\n // text.fontSize.paragraph + text.lineHeight.paragraph -> text-paragraph\n if (typeof v === 'string') {\n return [\n [\n k,\n [\n v,\n // @ts-expect-error k is keyof line-height\n { lineHeight: light.text['line-height'][k] },\n ],\n ],\n ]\n }\n\n // text.fontSize.heading.s + text.lineHeight.heading.s -> text-heading-s\n return Object.entries(v as Record<string, string>).map(([kk, vv]) => {\n return [\n [k, kk].join('-'),\n [\n vv,\n // @ts-expect-error k is keyof line-height\n { lineHeight: light.text['line-height'][k][kk] },\n ],\n ]\n })\n }),\n ) as NonNullable<Config['theme']>['fontSize']\n\n // space.target.s -> p-target-s\n // space.gap.gapButtons -> p-gap-buttons\n const spacing = flattenKeys(light.space, (key) => !/(gap|padding)/.test(key))\n // color.container.default -> bg-container\n // color.container.hover -> bg-container-hover\n const colors = mapDefaultKeys(light.color)\n\n const config: Omit<Config, 'content'> = {\n darkMode: 'media',\n theme: {\n // borderWidth.m -> border-m\n // borderWidth.focus.1 -> border-focus-1\n borderWidth: flattenKeyWithoutDefault({\n 'width-ch': flattenKeys(light['border-width']), // unstable border width token\n }),\n borderRadius: light.radius,\n borderColor: flattenKeyWithoutDefault({ ch: flattenKeys(colors.border) }),\n\n colors,\n\n fontSize,\n fontWeight: flattenKeys({ ch: light.text['font-weight'] }),\n\n spacing,\n gap: spacing,\n width: light['paragraph-width'],\n },\n }\n\n return config\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport iconsV2 from '@charcoal-ui/icon-files/v2/datauri'\nimport iconsV1 from '@charcoal-ui/icon-files/v1/datauri'\nimport { CSSRuleObject } from 'tailwindcss/types/config'\n\nconst transformClassNameV2 = (fileName: string) => {\n const [size, variant, name] = fileName.split('/')\n return [\n '.icon-v2',\n name.replaceAll('.', '-'),\n ...(variant === 'regular' ? [] : [variant]),\n ...(size === '24' ? [] : [size]),\n ]\n .join('-')\n .toLowerCase()\n}\n\nconst transformClassNameV1 = (fileName: string) => {\n const [size, name] = fileName.split('/')\n return [\n '.icon-v1',\n name.replaceAll('.', '-'),\n ...(size === '24' ? [] : [size]),\n ]\n .join('-')\n .toLowerCase()\n}\n\nexport const createIconUtilities = ({\n v2 = false,\n}: {\n v2?: boolean\n}): {\n [key: string]: CSSRuleObject\n} => {\n const newUtilities: { [key: string]: CSSRuleObject } = {}\n const icons = v2 ? iconsV2 : iconsV1\n for (const [fileName, { uri, isSetCurrentcolor }] of Object.entries(icons)) {\n const className = v2\n ? transformClassNameV2(fileName)\n : transformClassNameV1(fileName)\n\n newUtilities[className] = {\n display: 'inline-block',\n width: '1em',\n height: '1em',\n maskImage: `url(${uri})`,\n maskSize: '100% 100%',\n background: isSetCurrentcolor ? 'currentColor' : null,\n aspectRatio: '1/1',\n }\n }\n return newUtilities\n}\n\nexport const charcoalIconsV2: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createIconUtilities({ v2: true }))\n },\n)\n\nexport const charcoalIconsV1: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createIconUtilities({ v2: false }))\n },\n)\n","import { GRID_COUNT, mergeEffect } from './foundation'\n\nimport type { Config } from 'tailwindcss'\nimport { TailwindVersion, ThemeMap } from './types'\n\nimport {\n assertAllThemeHaveSameKeys,\n getDefaultKeyName,\n getVariantOption,\n} from './util'\nimport {\n COLUMN_UNIT,\n GUTTER_UNIT,\n SPACING,\n BORDER_RADIUS,\n} from '@charcoal-ui/foundation'\nimport { light } from '@charcoal-ui/theme'\nimport { mapObject, px } from '@charcoal-ui/utils'\nimport { colorsToTailwindConfig } from './colors/toTailwindConfig'\n\nimport cssVariableColorPlugin from './colors/plugin'\nimport cssVariableGradientPlugin from './gradient/plugin'\nimport typographyPlugin from './typography/plugin'\nimport { unstable_createTailwindConfigTokenV2 } from './tokenV2'\nimport { charcoalIconsV1, charcoalIconsV2 } from './icons'\nexport { unstable_createTailwindConfigTokenV2 }\n\ninterface Options {\n version?: TailwindVersion\n theme?: ThemeMap\n cssVariablesV1?: boolean\n unstableTokenV2?: boolean\n iconsV2?: boolean\n iconsV1?: boolean\n}\n\nexport function createTailwindConfig({\n theme = { ':root': light },\n version = 'v3',\n cssVariablesV1 = true,\n unstableTokenV2 = false,\n iconsV2 = false,\n iconsV1 = false,\n}: Options): Omit<Config, 'content'> {\n assertAllThemeHaveSameKeys(theme)\n\n const defaultTheme = theme[':root']\n const effects = mergeEffect(defaultTheme)\n const DEFAULT = getDefaultKeyName(version)\n\n const {\n borderWidth: borderWidthV2,\n borderRadius: borderRadiusV2,\n borderColor: borderColorV2,\n colors: colorsV2,\n fontSize: fontSizeV2,\n fontWeight: fontWeightV2,\n spacing: spacingV2,\n gap: gapV2,\n width: widthV2,\n }: Partial<NonNullable<Config['theme']>> = unstableTokenV2\n ? unstable_createTailwindConfigTokenV2().theme\n : {}\n\n return {\n theme: {\n screens: {\n screen1: px(0),\n screen2: px(defaultTheme.breakpoint.screen1),\n screen3: px(defaultTheme.breakpoint.screen2),\n screen4: px(defaultTheme.breakpoint.screen3),\n screen5: px(defaultTheme.breakpoint.screen4),\n },\n colors: {\n // @deprecated\n black: '#000',\n\n // @deprecated\n white: '#fff',\n\n transparent: 'transparent',\n current: 'currentColor',\n ...colorsToTailwindConfig(version, defaultTheme.color, effects),\n ...colorsV2,\n },\n borderColor: {\n ...colorsToTailwindConfig(\n version,\n mapObject(defaultTheme.border, (k, v) => [k, v.color]),\n effects,\n ),\n ...borderColorV2,\n },\n spacing: {\n ...mapObject(\n SPACING,\n (name, pixel) => [name, px(pixel)] as [string, string],\n ),\n ...spacingV2,\n },\n width: {\n full: '100%',\n screen: '100vw',\n auto: 'auto',\n fit: 'fit-content',\n\n /**\n * generates classes like \"w-col-span-1\"\n */\n ...Array.from({ length: GRID_COUNT }, (_, i) => i + 1).reduce(\n (styles, i) => ({\n ...styles,\n [`col-span-${i}`]: px(COLUMN_UNIT * i + GUTTER_UNIT * (i - 1)),\n }),\n {},\n ),\n\n /**\n * generates classes like \"w-1/12\" (except for 12/12, which just equals to w-full)\n */\n ...Array.from({ length: GRID_COUNT - 1 }, (_, i) => i + 1).reduce(\n (styles, i) => ({\n ...styles,\n [`${i}/${GRID_COUNT}`]: `${(i / GRID_COUNT) * 100}%`,\n }),\n {},\n ),\n ...widthV2,\n },\n gap: {\n fixed: px(GUTTER_UNIT),\n ...gapV2,\n },\n borderRadius: {\n ...mapObject(\n BORDER_RADIUS,\n (name, value) => [name, px(value)] as [string, string],\n ),\n ...borderRadiusV2,\n },\n transitionDuration: {\n [DEFAULT]: '0.2s',\n },\n ...(unstableTokenV2\n ? {\n extend: {\n borderWidth: borderWidthV2,\n fontWeight: fontWeightV2,\n fontSize: fontSizeV2,\n },\n }\n : {}),\n },\n\n ...getVariantOption(version),\n\n corePlugins: {\n lineHeight: false,\n },\n plugins: [\n typographyPlugin,\n cssVariableColorPlugin(theme, Boolean(cssVariablesV1)),\n\n ...Object.entries(theme).map(([selectorOrMediaQuery, theme]) =>\n cssVariableGradientPlugin(\n theme.gradientColor,\n mergeEffect(theme),\n selectorOrMediaQuery,\n ),\n ),\n ...(iconsV2 ? [charcoalIconsV2] : []),\n ...(iconsV1 ? [charcoalIconsV1] : []),\n ],\n }\n}\n\nexport const config: Omit<Config, 'content'> = createTailwindConfig({})\n\nexport default config\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["cssVariableColorPlugin","light","flattenKeys","mapDefaultKeys","cssVariableColorPlugin","cssVariableGradientPlugin"],"sources":["../src/foundation.ts","../src/util.ts","../src/colors/utils.ts","../src/colors/toTailwindConfig.ts","../src/colors/pluginTokenV1.ts","../src/colors/plugin.ts","../src/focusring/index.ts","../src/gradient/plugin.ts","../src/typography/plugin.ts","../src/tokenV2.ts","../src/icons.ts","../src/index.ts"],"sourcesContent":["import { Effect } from '@charcoal-ui/foundation'\nimport { CharcoalTheme as Theme } from '@charcoal-ui/theme'\n\nexport const GRID_COUNT = 12\n\nexport function mergeEffect({\n elementEffect,\n effect,\n}: Pick<Theme, 'elementEffect' | 'effect'>): MergedEffect {\n return {\n ...elementEffect,\n ...effect,\n outline: {\n type: 'opacity',\n opacity: 0.32,\n } as Effect,\n }\n}\n\nexport type MergedEffect = Record<string, Effect>\n","import type { Config } from 'tailwindcss'\nimport { TailwindVersion, ThemeMap } from './types'\n\n/**\n * the key \"default\" or \"DEFAULT\" has special meaning and dropped from class name\n *\n * @see https://tailwindcss.com/docs/upgrading-to-v2#update-default-theme-keys-to-default\n */\nexport function getDefaultKeyName(version: TailwindVersion) {\n switch (version) {\n case 'v3':\n case 'v2': {\n return 'DEFAULT'\n }\n\n case 'v1': {\n return 'default'\n }\n }\n}\n\nexport function getVariantOption(version: TailwindVersion): Partial<Config> {\n switch (version) {\n case 'v3': {\n // v3 以上では variants は variantOrders に改名された\n // そしてこれは上書きをしたいモチベがない\n // https://v2.tailwindcss.com/docs/configuration#variant-order\n return {}\n }\n\n case 'v2':\n case 'v1': {\n return { variants: {} }\n }\n }\n}\n\nfunction setEquals<T>(a: Set<T>, b: Set<T>) {\n return a.size === b.size && Array.from(a).every((value) => b.has(value))\n}\n\nexport function assertAllThemeHaveSameKeys(themeMap: ThemeMap): void {\n const defaultTheme = themeMap[':root']\n const expectedColorKeys = new Set(Object.keys(defaultTheme.color))\n const expectedEffectKeys = new Set(Object.keys(defaultTheme.effect))\n\n for (const [name, theme] of Object.entries(themeMap)) {\n const colorKeys = new Set(Object.keys(theme.color))\n const effectKeys = new Set(Object.keys(theme.effect))\n\n if (!setEquals(colorKeys, expectedColorKeys)) {\n throw new Error(`:root and ${name} does not have same colors.\n\nExpected( :root ): ${JSON.stringify(Array.from(expectedColorKeys))}\nGot: ${JSON.stringify(Array.from(colorKeys))}`)\n }\n\n if (!setEquals(effectKeys, expectedEffectKeys)) {\n throw new Error(`:root and ${name} does not have same effects.\n\nExpected( :root ): ${JSON.stringify(Array.from(expectedEffectKeys))}\nGot: ${JSON.stringify(Array.from(effectKeys))}`)\n }\n }\n}\n\nexport function camelToKebab(value: string) {\n return value\n .replace(/(?<small>[\\da-z]|(?=[A-Z]))(?<capital>[A-Z])/gu, '$1-$2')\n .toLowerCase()\n}\n\nexport const mapDefaultKey = <O extends object>(o: O) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(JSON.stringify(o), function reviver(k: string, v: string) {\n if (k === 'default') {\n const DefaultKey = getDefaultKeyName('v3')\n this[DefaultKey] = v\n return undefined\n }\n return v\n })\n}\n\nexport const flattenKey = <O extends object>(\n o: O,\n join?: (key: string) => boolean,\n): Record<string, unknown> => {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Object.entries(o).flatMap(([key, v]) => {\n if (typeof v === 'string') return [[key, v]]\n return Object.entries(v as object).map(([kk, vv]) => {\n return [(join?.(key) ?? true) ? [key, kk].join('-') : kk, vv]\n })\n }),\n )\n}\n\n/**\n * `DEFAULT` はkey名に結合しない\n */\nexport const flattenKeyWithoutDefault = <O extends object>(\n o: O,\n join?: (key: string) => boolean,\n): Record<string, unknown> => {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Object.entries(o).flatMap(([key, v]) => {\n if (typeof v === 'string') return [[key, v]]\n return Object.entries(v as object).map(([kk, vv]) => {\n const isDefaultKey = kk === 'DEFAULT' || kk === 'default'\n const outputKey = isDefaultKey\n ? key\n : (join?.(key) ?? true)\n ? [key, kk].join('-')\n : kk\n return [outputKey, vv]\n })\n }),\n )\n}\n","import { GradientMaterial, Material } from '@charcoal-ui/foundation'\n\nexport const COLOR_PREFIX = '--tailwind-color-'\n\nexport function isSingleColor(color: AnyColor): color is Material {\n return typeof color === 'string'\n}\n\ntype AnyColor = Material | GradientMaterial\n\nexport type AnyColorTheme = Record<string, AnyColor>\n","import { Material } from '@charcoal-ui/foundation'\nimport { applyEffect, filterObject, mapObject } from '@charcoal-ui/utils'\nimport type { Config } from 'tailwindcss'\nimport { MergedEffect } from '../foundation'\n\nimport { TailwindVersion } from '../types'\nimport { getDefaultKeyName } from '../util'\n\nimport { AnyColorTheme, COLOR_PREFIX, isSingleColor } from './utils'\n\nexport function colorsToTailwindConfig(\n version: TailwindVersion,\n colors: AnyColorTheme,\n effects: MergedEffect,\n): NonNullable<Config['theme']>['colors'] {\n const targetColors = filterObject(colors, isSingleColor)\n const DEFAULT = getDefaultKeyName(version)\n\n /**\n * こういう感じのを吐き出す\n *\n * ```js\n * {\n * DEFAULT: 'var(--tailwind-color-hoge1, #fff)',\n * hover: 'var(--tailwind-color-hoge1--hover, #eee)',\n * press: 'var(--tailwind-color-hoge1--press, #ddd)',\n * disabled: 'var(--tailwind-color-hoge1--disabled, #eee)',\n * }\n * ```\n */\n function colorsForAllEffects(name: string, color: Material) {\n const varName = `${COLOR_PREFIX}${name}`\n\n return {\n [DEFAULT]: `var(${varName}, ${color})`,\n\n ...mapObject(effects, (effectName, effect) => [\n effectName,\n `var(${varName}--${effectName}, ${applyEffect(color, effect)})`,\n ]),\n }\n }\n\n return mapObject(targetColors, (name, color) => [\n name,\n colorsForAllEffects(name, color),\n ])\n}\n","import {\n applyEffect,\n customPropertyToken,\n filterObject,\n flatMapObject,\n mapObject,\n} from '@charcoal-ui/utils'\nimport { ThemeMap } from '../types'\nimport {\n CharcoalAbstractTheme,\n EffectType,\n Key,\n CharcoalTheme as Theme,\n} from '@charcoal-ui/theme'\n\nexport function defineCssVariablesV1(themeMap: ThemeMap) {\n // @ts-expect-error FIXME\n return mapObject(themeMap, (key, theme) => {\n if (key.startsWith('@media')) {\n return [\n key,\n {\n ':root': defineColorVariableCSS(theme),\n },\n ]\n } else {\n return [key, defineColorVariableCSS(theme)]\n }\n })\n}\n\nexport const defineColorVariableCSS = (theme: Theme) => {\n const borders = mapObject(theme.border, (name, { color }) => [\n // REVIEW: もしtheme.colorにたまたまborder-〇〇で始まる色名がいたら被りうる\n withPrefixes('border', name),\n color,\n ])\n\n const colors = defineThemeVariables({ ...theme.color, ...borders })({ theme })\n return colors\n}\n\n/**\n * Check whether a value is non-null and non-undefined\n *\n * @param value nullable\n */\nexport const isPresent = <T>(value: T): value is NonNullable<T> => value != null\n\n/**\n * 子孫要素で使われるカラーテーマの CSS Variables を上書きする\n *\n * @params colorParams - 上書きしたい色の定義( `theme.color` の一部だけ書けば良い )\n * @params effectParams - effect の定義を上書きしたい場合は渡す(必須ではない)\n *\n * @example\n * ```tsx\n * const LocalTheme = styled.div`\n * ${defineThemeVariables({ text1: '#ff0000' })}\n * // `text1` is now defined as red\n * ${theme((o) => [o.font.text1])}\n * `\n * ```\n */\nexport function defineThemeVariables(\n colorParams: Partial<CharcoalAbstractTheme['color']>,\n effectParams?: Partial<CharcoalAbstractTheme['effect']>,\n) {\n return function toCssObject(props: {\n theme: Pick<CharcoalAbstractTheme, 'effect'>\n }) {\n const colors = filterObject(colorParams, isPresent)\n\n // flatMapObject の中で毎回 Object.entries を呼ぶのは無駄なので外で呼ぶ\n const effects = Object.entries({\n ...props.theme.effect,\n ...effectParams,\n })\n\n return flatMapObject(colors, (colorKey, color) => [\n [customPropertyToken(colorKey), color],\n\n ...effects.map<[string, string]>(([effectKey, effect]) => [\n customPropertyToken(colorKey, [effectKey]),\n applyEffect(color, [effect]),\n ]),\n ])\n }\n}\n\nexport function isSupportedEffect(effect: Key): effect is EffectType {\n return ['hover', 'press', 'disabled'].includes(effect as string)\n}\n\nexport const variable = (value: string) => `var(${value})`\n\nexport function withPrefixes(...parts: string[]) {\n return parts.join('-')\n}\n","import { Material } from '@charcoal-ui/foundation'\nimport { CharcoalTheme as Theme } from '@charcoal-ui/theme'\nimport {\n applyEffect,\n filterObject,\n flatMapObject,\n mapObject,\n} from '@charcoal-ui/utils'\nimport plugin from 'tailwindcss/plugin.js'\nimport { mergeEffect } from '../foundation'\nimport { CSSVariableName, CSSVariables, Definition, ThemeMap } from '../types'\nimport { COLOR_PREFIX, isSingleColor } from './utils'\nimport { defineCssVariablesV1 } from './pluginTokenV1'\n\n/**\n * --tailwind-* また --charcoal-* を生成する\n * TODO: --tailwindをやめる\n */\nexport default function cssVariableColorPlugin(\n themeMap: ThemeMap,\n cssVariablesV1: boolean,\n): ReturnType<typeof plugin> {\n // `:root` 以外のケースで各 CSS Variable がどういう値を取るかを定義する\n const { ':root': _defaultTheme, ...otherThemes } = themeMap\n const definitions = defineCssVariables(otherThemes)\n\n return plugin(({ addBase }) => {\n addBase(definitions)\n\n // styledのTokenInjector移植(background処理除く)\n if (cssVariablesV1) {\n const cssVariablesV1 = defineCssVariablesV1(themeMap)\n // @ts-expect-error FIXME\n addBase(cssVariablesV1)\n }\n })\n}\n\nexport function defineCssVariables(themes: Omit<ThemeMap, ':root'>) {\n return mapObject(themes, (selectorOrMediaQuery, theme) => {\n const css = toCssVariables(theme)\n\n if (selectorOrMediaQuery.startsWith('@media')) {\n return [\n selectorOrMediaQuery,\n {\n ':root': css,\n },\n ]\n } else {\n return [selectorOrMediaQuery, css]\n }\n }) as Definition\n}\n\nfunction toCssVariables(theme: Theme): CSSVariables {\n const colors = filterObject(theme.color, isSingleColor)\n const effects = Object.entries(mergeEffect(theme))\n\n return flatMapObject(colors, (name, color) => {\n const varName: keyof CSSVariables = `${COLOR_PREFIX}${name}`\n\n return [\n [varName, color],\n\n ...effects.map<[CSSVariableName, Material]>(([type, effect]) => [\n `${varName}--${type}`,\n applyEffect(color, effect),\n ]),\n ]\n })\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport { CSSRuleObject } from 'tailwindcss/types/config'\n\nexport const createFocusRingUtilities = (): {\n [key: string]: CSSRuleObject\n} => ({\n '.ch-focus-ring': {\n \"&:not(:disabled):not([aria-disabled]):focus-visible, &[aria-disabled='false']:focus-visible\":\n {\n outline: 'none',\n boxShadow:\n '0 0 0 4px var(--charcoal-color-border-focus-legacy, rgba(0, 150, 250, 0.32))',\n transition: '0.2s box-shadow',\n },\n },\n})\n\nexport const charcoalFocusRing: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createFocusRingUtilities())\n },\n)\n","import plugin from 'tailwindcss/plugin.js'\nimport { camelToKebab } from '../util'\nimport { GradientMaterial } from '@charcoal-ui/foundation'\nimport { ThemeColorGradient } from '@charcoal-ui/theme'\nimport {\n applyEffectToGradient,\n flatMapObject,\n gradient,\n GradientDirection,\n mapKeys,\n mapObject,\n} from '@charcoal-ui/utils'\nimport { Values } from '../types'\nimport { MergedEffect } from '../foundation'\n\nconst VAR_PREFIX = '--tailwind-gradient-'\n\nexport default function cssVariableColorPlugin(\n gradients: ThemeColorGradient,\n effects: MergedEffect,\n selectorOrMediaQuery: string,\n) {\n const utilities = getUtilities(gradients, effects)\n\n const classRules = mapObject(utilities, (name) => [\n `.bg-${name}`,\n { backgroundImage: `var(${VAR_PREFIX}${name})` },\n ])\n\n return plugin(({ addBase, addUtilities }) => {\n const css = mapKeys(utilities, (name) => `${VAR_PREFIX}${name}`)\n if (selectorOrMediaQuery.startsWith('@media')) {\n addBase({\n [selectorOrMediaQuery]: {\n ':root': css,\n },\n })\n } else {\n addBase({\n [selectorOrMediaQuery]: css,\n })\n }\n\n addUtilities(classRules, {\n // @ts-expect-error FIXME\n variants: ['responsive'],\n })\n })\n}\n\nconst DIRECTIONS = {\n 'to top': 'top',\n 'to bottom': 'bottom',\n 'to left': 'left',\n 'to right': 'right',\n} as const\n\n/**\n * こういう感じのやつ。この時点では `--tailwind-gradient-` のような CSS 変数名になってない\n *\n * ```js\n * {\n * 'hoge1': 'linear-gradient(to top, ...)',\n * ...\n * }\n * ```\n */\ntype Utilities = Record<string, LinearGradient>\n\ntype LinearGradient = `linear-gradient(${string})`\n\nexport function getUtilities(\n gradients: Record<string, GradientMaterial>,\n effect: MergedEffect,\n): Utilities {\n const effects = Object.entries(effect)\n const directions = Object.entries(DIRECTIONS) as [\n GradientDirection,\n Values<typeof DIRECTIONS>,\n ][]\n\n return flatMapObject(gradients, (name, colors) =>\n directions.flatMap(([direction, className]) => {\n const toLinearGradient = (colors: GradientMaterial) => {\n const style = gradient(direction)(colors)\n\n if (!('backgroundImage' in style)) {\n throw new Error(\n `Could not generate linear-gradient() from ${name} ${direction} ${className}`,\n )\n }\n\n // 本当は backgroundColor も同時に生成されるんだけど、使うにはそれ用の CSS 変数も一緒に作らないといけない\n // とりあえず background-image だけで動くのでこっちだけを利用する\n return style.backgroundImage as LinearGradient\n }\n\n return [\n // こういう感じのやつ\n // { 'hoge1': 'linear-gradient(to top, ...)' }\n [createUtilityName(name, className), toLinearGradient(colors)],\n\n // こういう感じのやつ\n // { 'hoge1--hover': 'linear-gradient(to top, ...)' }\n ...effects.map<[string, LinearGradient]>(([effectName, effect]) => [\n createUtilityName(name, className, effectName),\n toLinearGradient(applyEffectToGradient(effect)(colors)),\n ]),\n ]\n }),\n )\n}\n\nfunction createUtilityName(\n gradientName: string,\n direction: Values<typeof DIRECTIONS>,\n suffix = '',\n) {\n return [camelToKebab(gradientName), direction, suffix]\n .filter(Boolean)\n .join('-')\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport { TypographyDescriptor, TYPOGRAPHY_SIZE } from '@charcoal-ui/foundation'\nimport { halfLeading, mapObject, px } from '@charcoal-ui/utils'\n\nconst leadingCancel = {\n display: 'block',\n width: 0,\n height: 0,\n content: '\"\"',\n}\n\nconst typographyStyle = (style: TypographyDescriptor) => {\n const margin = -halfLeading(style)\n\n return {\n 'font-size': px(style.fontSize),\n 'line-height': px(style.lineHeight),\n\n /**\n * cancel leading\n *\n * @see https://yuyakinoshita.com/blog/2020/01/20/line-height-crop/\n */\n '&::before': {\n ...leadingCancel,\n marginTop: px(margin),\n },\n '&::after': {\n ...leadingCancel,\n marginBottom: px(margin),\n },\n }\n}\n\nconst typographyPlugin = plugin(({ addUtilities }) => {\n const typographyClasses = mapObject(TYPOGRAPHY_SIZE, (fontSize, style) => [\n `.typography-${fontSize}`,\n typographyStyle(style),\n ])\n\n addUtilities(\n {\n ...typographyClasses,\n '.preserve-half-leading': {\n '&::before': {\n content: 'none',\n },\n '&::after': {\n content: 'none',\n },\n },\n },\n {\n // @ts-expect-error FIXME\n variants: ['responsive'],\n },\n )\n})\n\nexport default typographyPlugin\n","import light from '@charcoal-ui/theme/unstable-tokens/css-variables.json' with { type: 'json' }\nimport type { Config } from 'tailwindcss'\nimport {\n flattenKey as flattenKeys,\n flattenKeyWithoutDefault,\n mapDefaultKey as mapDefaultKeys,\n} from './util'\n\nexport function unstable_createTailwindConfigTokenV2(): Omit<\n Config,\n 'content'\n> {\n const fontSize = Object.fromEntries(\n Object.entries(light.text['font-size']).flatMap(([k, v]) => {\n // text.fontSize.paragraph + text.lineHeight.paragraph -> text-paragraph\n if (typeof v === 'string') {\n return [\n [\n k,\n [\n v,\n // @ts-expect-error k is keyof line-height\n { lineHeight: light.text['line-height'][k] },\n ],\n ],\n ]\n }\n\n // text.fontSize.heading.s + text.lineHeight.heading.s -> text-heading-s\n return Object.entries(v as Record<string, string>).map(([kk, vv]) => {\n return [\n [k, kk].join('-'),\n [\n vv,\n // @ts-expect-error k is keyof line-height\n { lineHeight: light.text['line-height'][k][kk] },\n ],\n ]\n })\n }),\n ) as NonNullable<Config['theme']>['fontSize']\n\n // space.target.s -> p-target-s\n // space.gap.gapButtons -> p-gap-buttons\n const spacing = flattenKeys(light.space, (key) => !/(gap|padding)/.test(key))\n // color.container.default -> bg-container\n // color.container.hover -> bg-container-hover\n const colors = mapDefaultKeys(light.color)\n\n const config: Omit<Config, 'content'> = {\n darkMode: 'media',\n theme: {\n // borderWidth.m -> border-m\n // borderWidth.focus.1 -> border-focus-1\n borderWidth: flattenKeyWithoutDefault({\n 'width-ch': flattenKeys(light['border-width']), // unstable border width token\n }),\n borderRadius: light.radius,\n borderColor: flattenKeyWithoutDefault({ ch: flattenKeys(colors.border) }),\n\n colors,\n\n fontSize,\n fontWeight: flattenKeys({ ch: light.text['font-weight'] }),\n\n spacing,\n gap: spacing,\n width: light['paragraph-width'],\n },\n }\n\n return config\n}\n","import plugin from 'tailwindcss/plugin.js'\nimport iconsV2 from '@charcoal-ui/icon-files/v2/datauri'\nimport iconsV1 from '@charcoal-ui/icon-files/v1/datauri'\nimport { CSSRuleObject } from 'tailwindcss/types/config'\n\nconst transformClassNameV2 = (fileName: string) => {\n const [size, variant, name] = fileName.split('/')\n return [\n '.icon-v2',\n name.replaceAll('.', '-'),\n ...(variant === 'regular' ? [] : [variant]),\n ...(size === '24' ? [] : [size]),\n ]\n .join('-')\n .toLowerCase()\n}\n\nconst transformClassNameV1 = (fileName: string) => {\n const [size, name] = fileName.split('/')\n return [\n '.icon-v1',\n name.replaceAll('.', '-'),\n ...(size === '24' ? [] : [size]),\n ]\n .join('-')\n .toLowerCase()\n}\n\nexport const createIconUtilities = ({\n v2 = false,\n}: {\n v2?: boolean\n}): {\n [key: string]: CSSRuleObject\n} => {\n const newUtilities: { [key: string]: CSSRuleObject } = {}\n const icons = v2 ? iconsV2 : iconsV1\n for (const [fileName, { uri, isSetCurrentcolor }] of Object.entries(icons)) {\n const className = v2\n ? transformClassNameV2(fileName)\n : transformClassNameV1(fileName)\n\n newUtilities[className] = {\n display: 'inline-block',\n width: '1em',\n height: '1em',\n maskImage: `url(${uri})`,\n maskSize: '100% 100%',\n background: isSetCurrentcolor ? 'currentColor' : null,\n aspectRatio: '1/1',\n }\n }\n return newUtilities\n}\n\nexport const charcoalIconsV2: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createIconUtilities({ v2: true }))\n },\n)\n\nexport const charcoalIconsV1: ReturnType<typeof plugin> = plugin(\n ({ addUtilities }) => {\n addUtilities(createIconUtilities({ v2: false }))\n },\n)\n","import { GRID_COUNT, mergeEffect } from './foundation'\n\nimport type { Config } from 'tailwindcss'\nimport { TailwindVersion, ThemeMap } from './types'\n\nimport {\n assertAllThemeHaveSameKeys,\n getDefaultKeyName,\n getVariantOption,\n} from './util'\nimport {\n COLUMN_UNIT,\n GUTTER_UNIT,\n SPACING,\n BORDER_RADIUS,\n} from '@charcoal-ui/foundation'\nimport { light } from '@charcoal-ui/theme'\nimport { mapObject, px } from '@charcoal-ui/utils'\nimport { colorsToTailwindConfig } from './colors/toTailwindConfig'\n\nimport cssVariableColorPlugin from './colors/plugin'\nimport { charcoalFocusRing } from './focusring'\nimport cssVariableGradientPlugin from './gradient/plugin'\nimport typographyPlugin from './typography/plugin'\nimport { unstable_createTailwindConfigTokenV2 } from './tokenV2'\nimport { charcoalIconsV1, charcoalIconsV2 } from './icons'\nexport { unstable_createTailwindConfigTokenV2 }\n\ninterface Options {\n version?: TailwindVersion\n theme?: ThemeMap\n cssVariablesV1?: boolean\n unstableTokenV2?: boolean\n iconsV2?: boolean\n iconsV1?: boolean\n}\n\nexport function createTailwindConfig({\n theme = { ':root': light },\n version = 'v3',\n cssVariablesV1 = true,\n unstableTokenV2 = false,\n iconsV2 = false,\n iconsV1 = false,\n}: Options): Omit<Config, 'content'> {\n assertAllThemeHaveSameKeys(theme)\n\n const defaultTheme = theme[':root']\n const effects = mergeEffect(defaultTheme)\n const DEFAULT = getDefaultKeyName(version)\n\n const {\n borderWidth: borderWidthV2,\n borderRadius: borderRadiusV2,\n borderColor: borderColorV2,\n colors: colorsV2,\n fontSize: fontSizeV2,\n fontWeight: fontWeightV2,\n spacing: spacingV2,\n gap: gapV2,\n width: widthV2,\n }: Partial<NonNullable<Config['theme']>> = unstableTokenV2\n ? unstable_createTailwindConfigTokenV2().theme\n : {}\n\n return {\n theme: {\n screens: {\n screen1: px(0),\n screen2: px(defaultTheme.breakpoint.screen1),\n screen3: px(defaultTheme.breakpoint.screen2),\n screen4: px(defaultTheme.breakpoint.screen3),\n screen5: px(defaultTheme.breakpoint.screen4),\n },\n colors: {\n // @deprecated\n black: '#000',\n\n // @deprecated\n white: '#fff',\n\n transparent: 'transparent',\n current: 'currentColor',\n ...colorsToTailwindConfig(version, defaultTheme.color, effects),\n ...colorsV2,\n },\n borderColor: {\n ...colorsToTailwindConfig(\n version,\n mapObject(defaultTheme.border, (k, v) => [k, v.color]),\n effects,\n ),\n ...borderColorV2,\n },\n spacing: {\n ...mapObject(\n SPACING,\n (name, pixel) => [name, px(pixel)] as [string, string],\n ),\n ...spacingV2,\n },\n width: {\n full: '100%',\n screen: '100vw',\n auto: 'auto',\n fit: 'fit-content',\n\n /**\n * generates classes like \"w-col-span-1\"\n */\n ...Array.from({ length: GRID_COUNT }, (_, i) => i + 1).reduce(\n (styles, i) => ({\n ...styles,\n [`col-span-${i}`]: px(COLUMN_UNIT * i + GUTTER_UNIT * (i - 1)),\n }),\n {},\n ),\n\n /**\n * generates classes like \"w-1/12\" (except for 12/12, which just equals to w-full)\n */\n ...Array.from({ length: GRID_COUNT - 1 }, (_, i) => i + 1).reduce(\n (styles, i) => ({\n ...styles,\n [`${i}/${GRID_COUNT}`]: `${(i / GRID_COUNT) * 100}%`,\n }),\n {},\n ),\n ...widthV2,\n },\n gap: {\n fixed: px(GUTTER_UNIT),\n ...gapV2,\n },\n borderRadius: {\n ...mapObject(\n BORDER_RADIUS,\n (name, value) => [name, px(value)] as [string, string],\n ),\n ...borderRadiusV2,\n },\n transitionDuration: {\n [DEFAULT]: '0.2s',\n },\n ...(unstableTokenV2\n ? {\n extend: {\n borderWidth: borderWidthV2,\n fontWeight: fontWeightV2,\n fontSize: fontSizeV2,\n },\n }\n : {}),\n },\n\n ...getVariantOption(version),\n\n corePlugins: {\n lineHeight: false,\n },\n plugins: [\n typographyPlugin,\n charcoalFocusRing,\n cssVariableColorPlugin(theme, Boolean(cssVariablesV1)),\n\n ...Object.entries(theme).map(([selectorOrMediaQuery, theme]) =>\n cssVariableGradientPlugin(\n theme.gradientColor,\n mergeEffect(theme),\n selectorOrMediaQuery,\n ),\n ),\n ...(iconsV2 ? [charcoalIconsV2] : []),\n ...(iconsV1 ? [charcoalIconsV1] : []),\n ],\n }\n}\n\nexport const config: Omit<Config, 'content'> = createTailwindConfig({})\n\nexport default config\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@charcoal-ui/tailwind-config",
|
|
3
|
-
"version": "5.11.0-beta.
|
|
3
|
+
"version": "5.11.0-beta.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
"tailwindcss": "^3.4.17"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@charcoal-ui/
|
|
30
|
-
"@charcoal-ui/
|
|
31
|
-
"@charcoal-ui/utils": "5.11.0-beta.
|
|
32
|
-
"@charcoal-ui/
|
|
29
|
+
"@charcoal-ui/icon-files": "5.11.0-beta.2",
|
|
30
|
+
"@charcoal-ui/theme": "5.11.0-beta.2",
|
|
31
|
+
"@charcoal-ui/utils": "5.11.0-beta.2",
|
|
32
|
+
"@charcoal-ui/foundation": "5.11.0-beta.2"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"csstype": ">=3.0.0",
|
package/src/README.mdx
CHANGED
|
@@ -137,12 +137,30 @@ exports[`createIconUtilities for icons v1 > createIconUtilities for icons v1 1`]
|
|
|
137
137
|
"maskSize": "100% 100%",
|
|
138
138
|
"width": "1em",
|
|
139
139
|
},
|
|
140
|
+
".icon-v1-arrowleft": {
|
|
141
|
+
"aspectRatio": "1/1",
|
|
142
|
+
"background": "currentColor",
|
|
143
|
+
"display": "inline-block",
|
|
144
|
+
"height": "1em",
|
|
145
|
+
"maskImage": "url(data:image/svg+xml;utf8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4%2012l6.707-6.707a1%201%200%20111.414%201.414L7.828%2011H19a1%201%200%20110%202H7.828l4.293%204.293a1%201%200%2001-1.414%201.414L4%2012z%22%20fill%3D%22currentColor%22%2F%3E%3C%2Fsvg%3E)",
|
|
146
|
+
"maskSize": "100% 100%",
|
|
147
|
+
"width": "1em",
|
|
148
|
+
},
|
|
149
|
+
".icon-v1-arrowright": {
|
|
150
|
+
"aspectRatio": "1/1",
|
|
151
|
+
"background": "currentColor",
|
|
152
|
+
"display": "inline-block",
|
|
153
|
+
"height": "1em",
|
|
154
|
+
"maskImage": "url(data:image/svg+xml;utf8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M20.004%2012l-6.707%206.707a1%201%200%2001-1.414-1.414L16.176%2013H5a1%201%200%20110-2h11.176l-4.293-4.293a1%201%200%20011.414-1.414L20.004%2012z%22%20fill%3D%22currentColor%22%2F%3E%3C%2Fsvg%3E)",
|
|
155
|
+
"maskSize": "100% 100%",
|
|
156
|
+
"width": "1em",
|
|
157
|
+
},
|
|
140
158
|
".icon-v1-arrowup": {
|
|
141
159
|
"aspectRatio": "1/1",
|
|
142
160
|
"background": "currentColor",
|
|
143
161
|
"display": "inline-block",
|
|
144
162
|
"height": "1em",
|
|
145
|
-
"maskImage": "url(data:image/svg+xml;utf8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M12%204.586l6.707%206.707a1%201%200%2001-1.414%201.414L13%208.414V19a1%201%200%2011-2%200V8.414l-4.293%204.293a1%201%200%
|
|
163
|
+
"maskImage": "url(data:image/svg+xml;utf8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M12%204.586l6.707%206.707a1%201%200%2001-1.414%201.414L13%208.414V19a1%201%200%2011-2%200V8.414l-4.293%204.293a1%201%200%2001-1.414-1.414L12%204.586z%22%20fill%3D%22currentColor%22%2F%3E%3C%2Fsvg%3E)",
|
|
146
164
|
"maskSize": "100% 100%",
|
|
147
165
|
"width": "1em",
|
|
148
166
|
},
|
|
@@ -947,6 +965,15 @@ exports[`createIconUtilities for icons v1 > createIconUtilities for icons v1 1`]
|
|
|
947
965
|
"maskSize": "100% 100%",
|
|
948
966
|
"width": "1em",
|
|
949
967
|
},
|
|
968
|
+
".icon-v1-formattext": {
|
|
969
|
+
"aspectRatio": "1/1",
|
|
970
|
+
"background": "currentColor",
|
|
971
|
+
"display": "inline-block",
|
|
972
|
+
"height": "1em",
|
|
973
|
+
"maskImage": "url(data:image/svg+xml;utf8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M18%204a1%201%200%20110%202h-5v12.934c0%20.589-.448%201.066-1%201.066s-1-.477-1-1.066V6H6a1%201%200%20010-2h12z%22%20fill%3D%22currentColor%22%2F%3E%3C%2Fsvg%3E)",
|
|
974
|
+
"maskSize": "100% 100%",
|
|
975
|
+
"width": "1em",
|
|
976
|
+
},
|
|
950
977
|
".icon-v1-fov": {
|
|
951
978
|
"aspectRatio": "1/1",
|
|
952
979
|
"background": "currentColor",
|
|
@@ -147439,6 +147466,8 @@ exports[`createTailwindConfigIconsV1 > list of classes 1`] = `
|
|
|
147439
147466
|
"icon-v1-ar",
|
|
147440
147467
|
"icon-v1-archive",
|
|
147441
147468
|
"icon-v1-arrowdown",
|
|
147469
|
+
"icon-v1-arrowleft",
|
|
147470
|
+
"icon-v1-arrowright",
|
|
147442
147471
|
"icon-v1-arrowup",
|
|
147443
147472
|
"icon-v1-binet",
|
|
147444
147473
|
"icon-v1-body",
|
|
@@ -147497,6 +147526,7 @@ exports[`createTailwindConfigIconsV1 > list of classes 1`] = `
|
|
|
147497
147526
|
"icon-v1-formatfontsize",
|
|
147498
147527
|
"icon-v1-formatletterspacing",
|
|
147499
147528
|
"icon-v1-formatlinespacing",
|
|
147529
|
+
"icon-v1-formattext",
|
|
147500
147530
|
"icon-v1-fov",
|
|
147501
147531
|
"icon-v1-frameeffect",
|
|
147502
147532
|
"icon-v1-framesize",
|
|
@@ -22,6 +22,10 @@ exports[`tailwind.config.js > defaultConfig 1`] = `
|
|
|
22
22
|
"config": undefined,
|
|
23
23
|
"handler": [Function],
|
|
24
24
|
},
|
|
25
|
+
{
|
|
26
|
+
"config": undefined,
|
|
27
|
+
"handler": [Function],
|
|
28
|
+
},
|
|
25
29
|
],
|
|
26
30
|
"theme": {
|
|
27
31
|
"borderColor": {
|
|
@@ -5717,6 +5721,7 @@ exports[`tailwind.config.js > list of classes 1`] = `
|
|
|
5717
5721
|
"typography-20",
|
|
5718
5722
|
"typography-32",
|
|
5719
5723
|
"preserve-half-leading",
|
|
5724
|
+
"ch-focus-ring",
|
|
5720
5725
|
"bg-call-to-action-top",
|
|
5721
5726
|
"bg-call-to-action-top-disabled",
|
|
5722
5727
|
"bg-call-to-action-top-hover",
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react'
|
|
2
|
+
|
|
3
|
+
const itemStyle = {
|
|
4
|
+
backgroundColor: 'var(--charcoal-color-background3, #f5f5f5)',
|
|
5
|
+
borderRadius: 8,
|
|
6
|
+
color: 'var(--charcoal-color-text2, #4f4f4f)',
|
|
7
|
+
padding: '16px 24px',
|
|
8
|
+
} satisfies CSSProperties
|
|
9
|
+
|
|
10
|
+
export const FocusRing: React.FC = () => {
|
|
11
|
+
return (
|
|
12
|
+
<div className="flex flex-col gap-24 p-24 bg-background1">
|
|
13
|
+
<div>
|
|
14
|
+
<p className="typography-14 text-text2 mb-8">通常のフォーカス要素</p>
|
|
15
|
+
<div className="ch-focus-ring" style={itemStyle} tabIndex={0}>
|
|
16
|
+
Focus me
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div>
|
|
21
|
+
<p className="typography-14 text-text2 mb-8">{`aria-disabled="false"`}</p>
|
|
22
|
+
<div
|
|
23
|
+
aria-disabled="false"
|
|
24
|
+
className="ch-focus-ring"
|
|
25
|
+
style={itemStyle}
|
|
26
|
+
tabIndex={0}
|
|
27
|
+
>
|
|
28
|
+
Focus me
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<div>
|
|
33
|
+
<p className="typography-14 text-text2 mb-8">{`aria-disabled="true"`}</p>
|
|
34
|
+
<div
|
|
35
|
+
aria-disabled="true"
|
|
36
|
+
className="ch-focus-ring"
|
|
37
|
+
style={itemStyle}
|
|
38
|
+
tabIndex={0}
|
|
39
|
+
>
|
|
40
|
+
No ring
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Meta, Story } from '@storybook/addon-docs/blocks'
|
|
2
|
+
import { Unstyled } from '@storybook/addon-docs/blocks'
|
|
3
|
+
import { FocusRing } from '.'
|
|
4
|
+
|
|
5
|
+
<Meta title="tailwind-config/FocusRing" component={[FocusRing]} />
|
|
6
|
+
|
|
7
|
+
# FocusRing
|
|
8
|
+
|
|
9
|
+
<br />
|
|
10
|
+
|
|
11
|
+
<Unstyled>
|
|
12
|
+
<FocusRing />
|
|
13
|
+
</Unstyled>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FocusRing } from './FocusRing'
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import plugin from 'tailwindcss/plugin.js'
|
|
2
|
+
import { CSSRuleObject } from 'tailwindcss/types/config'
|
|
3
|
+
|
|
4
|
+
export const createFocusRingUtilities = (): {
|
|
5
|
+
[key: string]: CSSRuleObject
|
|
6
|
+
} => ({
|
|
7
|
+
'.ch-focus-ring': {
|
|
8
|
+
"&:not(:disabled):not([aria-disabled]):focus-visible, &[aria-disabled='false']:focus-visible":
|
|
9
|
+
{
|
|
10
|
+
outline: 'none',
|
|
11
|
+
boxShadow:
|
|
12
|
+
'0 0 0 4px var(--charcoal-color-border-focus-legacy, rgba(0, 150, 250, 0.32))',
|
|
13
|
+
transition: '0.2s box-shadow',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
export const charcoalFocusRing: ReturnType<typeof plugin> = plugin(
|
|
19
|
+
({ addUtilities }) => {
|
|
20
|
+
addUtilities(createFocusRingUtilities())
|
|
21
|
+
},
|
|
22
|
+
)
|
package/src/index.test.ts
CHANGED
|
@@ -55,6 +55,19 @@ describe('tailwind.config.js', () => {
|
|
|
55
55
|
expect(styles).toContainEqual(expect.stringContaining('::after'))
|
|
56
56
|
})
|
|
57
57
|
|
|
58
|
+
test('focus ring plugin', () => {
|
|
59
|
+
const styles = result.getStylesByClassName('ch-focus-ring')
|
|
60
|
+
const css = styles?.join('\n') ?? ''
|
|
61
|
+
|
|
62
|
+
expect(styles).toBeDefined()
|
|
63
|
+
expect(css).toContain(':focus-visible')
|
|
64
|
+
expect(css).toContain('outline: none')
|
|
65
|
+
expect(css).toContain(
|
|
66
|
+
'box-shadow: 0 0 0 4px var(--charcoal-color-border-focus-legacy, rgba(0, 150, 250, 0.32))',
|
|
67
|
+
)
|
|
68
|
+
expect(css).toContain('transition: 0.2s box-shadow')
|
|
69
|
+
})
|
|
70
|
+
|
|
58
71
|
test('gradient plugin', () => {
|
|
59
72
|
const varName = '--tailwind-gradient-surface5-left-hover'
|
|
60
73
|
|
package/src/index.ts
CHANGED
|
@@ -19,6 +19,7 @@ import { mapObject, px } from '@charcoal-ui/utils'
|
|
|
19
19
|
import { colorsToTailwindConfig } from './colors/toTailwindConfig'
|
|
20
20
|
|
|
21
21
|
import cssVariableColorPlugin from './colors/plugin'
|
|
22
|
+
import { charcoalFocusRing } from './focusring'
|
|
22
23
|
import cssVariableGradientPlugin from './gradient/plugin'
|
|
23
24
|
import typographyPlugin from './typography/plugin'
|
|
24
25
|
import { unstable_createTailwindConfigTokenV2 } from './tokenV2'
|
|
@@ -159,6 +160,7 @@ export function createTailwindConfig({
|
|
|
159
160
|
},
|
|
160
161
|
plugins: [
|
|
161
162
|
typographyPlugin,
|
|
163
|
+
charcoalFocusRing,
|
|
162
164
|
cssVariableColorPlugin(theme, Boolean(cssVariablesV1)),
|
|
163
165
|
|
|
164
166
|
...Object.entries(theme).map(([selectorOrMediaQuery, theme]) =>
|