@charcoal-ui/styled 4.1.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,7 +13,7 @@ export declare function makeSetThemeScriptCode({ localStorageKey, rootAttribute,
13
13
  * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト
14
14
  * @returns
15
15
  */
16
- export declare function SetThemeScript(props: Props): JSX.Element;
16
+ export declare function SetThemeScript(props: Props): import("react/jsx-runtime").JSX.Element;
17
17
  export declare namespace SetThemeScript {
18
18
  var defaultProps: Props;
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SetThemeScript.d.ts","sourceRoot":"","sources":["../src/SetThemeScript.tsx"],"names":[],"mappings":"AAMA,UAAU,KAAK;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,eAA8C,EAC9C,aAA0C,GAC3C,GAAE,OAAO,CAAC,KAAK,CAAgB,UAa/B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,eAS1C;yBATe,cAAc"}
1
+ {"version":3,"file":"SetThemeScript.d.ts","sourceRoot":"","sources":["../src/SetThemeScript.tsx"],"names":[],"mappings":"AAMA,UAAU,KAAK;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,eAA8C,EAC9C,aAA0C,GAC3C,GAAE,OAAO,CAAC,KAAK,CAAgB,UAa/B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,2CAS1C;yBATe,cAAc"}
@@ -8,6 +8,6 @@ type Theme = Pick<CharcoalAbstractTheme, 'color' | 'effect' | 'border'>;
8
8
  export default function TokenInjector<T extends Theme>({ theme: themeMap, background, }: {
9
9
  theme: ThemeMap<T>;
10
10
  background?: keyof ThemeMap<T>[string]['color'];
11
- }): JSX.Element;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
12
  export {};
13
13
  //# sourceMappingURL=TokenInjector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TokenInjector.d.ts","sourceRoot":"","sources":["../src/TokenInjector.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAsC1D,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,KAAK;IACvC,OAAO,EAAE,CAAC,CAAA;IACV,CAAC,UAAU,EAAE,WAAW,MAAM,GAAG,GAAG,CAAC,CAAA;IACrC,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAA;CACtB;AAED,KAAK,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAA;AAEvE,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,EACrD,KAAK,EAAE,QAAQ,EACf,UAAU,GACX,EAAE;IACD,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAA;CAChD,eAEA"}
1
+ {"version":3,"file":"TokenInjector.d.ts","sourceRoot":"","sources":["../src/TokenInjector.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAmC1D,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,KAAK;IACvC,OAAO,EAAE,CAAC,CAAA;IACV,CAAC,UAAU,EAAE,WAAW,MAAM,GAAG,GAAG,CAAC,CAAA;IACrC,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAA;CACtB;AAED,KAAK,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAA;AAEvE,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,EACrD,KAAK,EAAE,QAAQ,EACf,UAAU,GACX,EAAE;IACD,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAA;CAChD,2CAEA"}
@@ -7,5 +7,5 @@ declare module 'styled-components' {
7
7
  interface DefaultTheme extends MyTheme {
8
8
  }
9
9
  }
10
- export declare const Example: () => JSX.Element;
10
+ export declare const Example: () => import("react/jsx-runtime").JSX.Element;
11
11
  //# sourceMappingURL=addThemeUtils.story.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addThemeUtils.story.d.ts","sourceRoot":"","sources":["../src/addThemeUtils.story.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAW,MAAM,eAAe,CAAA;;;;AAEhD,wBAEC;AAED,OAAO,QAAQ,mBAAmB,CAAC;IACjC,UAAiB,YAAa,SAAQ,OAAO;KAAG;CACjD;AAED,eAAO,MAAM,OAAO,mBAiCnB,CAAA"}
1
+ {"version":3,"file":"addThemeUtils.story.d.ts","sourceRoot":"","sources":["../src/addThemeUtils.story.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAW,MAAM,eAAe,CAAA;;;;AAEhD,wBAEC;AAED,OAAO,QAAQ,mBAAmB,CAAC;IACjC,UAAiB,YAAa,SAAQ,OAAO;KAAG;CACjD;AAED,eAAO,MAAM,OAAO,+CAiCnB,CAAA"}
package/dist/index.cjs.js CHANGED
@@ -695,10 +695,7 @@ var import_styled_components = require("styled-components");
695
695
  var import_utils10 = require("@charcoal-ui/utils");
696
696
  var import_jsx_runtime = require("react/jsx-runtime");
697
697
  var GlobalStyle = import_styled_components.createGlobalStyle`
698
- ${({
699
- themeMap,
700
- background
701
- }) => Object.entries(themeMap).map(
698
+ ${({ themeMap, background }) => Object.entries(themeMap).map(
702
699
  ([key, theme]) => key.startsWith("@media") ? import_styled_components.css`
703
700
  ${key} {
704
701
  :root {
@@ -947,8 +944,8 @@ var focusVisibleFocusRingCss = import_styled_components3.css`
947
944
  // src/styles/disabledCss.ts
948
945
  var import_styled_components4 = require("styled-components");
949
946
  var disabledCss = import_styled_components4.css`
950
- :disabled,
951
- [aria-disabled]:not([aria-disabled='false']) {
947
+ &:disabled,
948
+ &[aria-disabled]:not([aria-disabled='false']) {
952
949
  opacity: 0.32;
953
950
  cursor: default;
954
951
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/util.ts","../src/internals/index.ts","../src/factories/lib.ts","../src/builders/border.ts","../src/builders/borderRadius.ts","../src/builders/colors.ts","../src/builders/transition.ts","../src/builders/elementEffect.ts","../src/builders/outline.ts","../src/builders/size.ts","../src/builders/spacing.ts","../src/builders/typography.ts","../src/builders/o.ts","../src/TokenInjector.tsx","../src/helper.ts","../src/utils/typographyCss.ts","../src/SetThemeScript.tsx","../src/styles/focusVisibleFocusRingCss.ts","../src/styles/disabledCss.ts","../src/styles/assertiveRingCss.ts","../src/utils/margin.ts","../src/utils/helpers/pxIfNum.ts","../src/utils/padding.ts","../src/utils/gap.ts","../src/utils/addThemeUtils.ts"],"sourcesContent":["import { CSSObject, ThemedStyledInterface } from 'styled-components'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { ArrayOrSingle, isPresent, noThemeProvider, wrapArray } from './util'\nimport { Internal, toCSSObjects } from './internals'\nimport createO from './builders/o'\nimport transition from './builders/transition'\nexport { default as TokenInjector } from './TokenInjector'\nexport {\n getThemeSync,\n themeSetter,\n themeSelector,\n prefersColorScheme,\n useTheme,\n useThemeSetter,\n useLocalStorage,\n useMedia,\n} from './helper'\nexport { defineThemeVariables } from './util'\nexport { removeHalfLeadingCss } from './utils/typographyCss'\nexport * from './SetThemeScript'\n\ntype Blank = null | undefined | false\n\nconst nonBlank = <T>(value: T): value is T extends Blank ? never : T =>\n isPresent(value) && (value as unknown) !== false\n\n/**\n * @deprecated\n * 実行時のパフォーマンスが低い問題があります。\n * ref. https://github.com/pixiv/charcoal/pull/377\n *\n * styled-components の theming 方法を推奨します。\n * ref. https://styled-components.com/docs/advanced#theming\n *\n * `theme(o => [...])` の `theme` ユーティリティを構築する\n *\n * @param _styled - DEPRECATED: styled-components の `styled` そのものを渡すとそれを元に型推論ができる。が、型引数を渡す方が型推論が高速になりやすい\n *\n * @example\n *\n * import styled from 'styled-components'\n * const theme = createTheme(styled)\n *\n * @example\n *\n * const theme = createTheme<DefaultTheme>()\n */\nexport function createTheme<T extends CharcoalAbstractTheme>(\n _styled?: ThemedStyledInterface<T>\n) {\n type Builder = ReturnType<typeof createO<T>>\n\n // ランタイムの `theme(o => [...])` のインターフェースを構築する\n return function theme(\n specFn: (o: Builder) => ArrayOrSingle<Internal | Blank>\n ): ThemeProp<T> {\n // styled-components のテンプレートに埋め込める関数\n return function interpolate({ theme }) {\n if (!isPresent(theme)) {\n // テーマが入っていない場合は復旧不可能なのでエラーにする\n throw noThemeProvider\n }\n\n const internals = [\n // ユーザーが定義したルール\n ...wrapArray(\n /**\n * こう書いてはいけない\n *\n * ❌\n * ```ts\n * const o = createO(theme)\n * const declaration = spec(o)\n * ```\n *\n * `o` を一時変数に入れてしまうと型 `T` の具象化が行われるので関数内に書く\n */\n specFn(/** o = */ createO(theme))\n ),\n\n // 必ず挿入される共通のルール\n transition(theme),\n ].filter(nonBlank)\n\n return toCSSObjects(internals)\n }\n }\n}\n\nexport type ThemeProp<T> = ({\n theme,\n}: {\n theme: T | undefined\n}) => CSSObject | CSSObject[]\n\nexport { focusVisibleFocusRingCss } from './styles/focusVisibleFocusRingCss'\nexport { disabledCss } from './styles/disabledCss'\nexport { assertiveRingCss } from './styles/assertiveRingCss'\nexport type { CharcoalThemeUtils } from './utils/CharcoalStyledTheme'\nexport { addThemeUtils } from './utils/addThemeUtils'\n","import {\n applyEffect,\n customPropertyToken,\n disabledSelector,\n filterObject,\n flatMapObject,\n notDisabledSelector,\n} from '@charcoal-ui/utils'\nimport { CharcoalAbstractTheme, EffectType, Key } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\n\n/**\n * Function used to assert a given code path is unreachable\n */\nexport function unreachable(): never\n/**\n * Function used to assert a given code path is unreachable.\n * Very useful for ensuring switches are exhaustive:\n *\n * ```ts\n * switch (a.type) {\n * case Types.A:\n * case Types.B:\n * break\n * default:\n * unreachable(a) // will cause a build error if there was\n * // a Types.C that was not checked\n * }\n * ```\n *\n * @param value Value to be asserted as unreachable\n */\n// NOTE: Uses separate overloads, _not_ `value?: never`, to not allow `undefined` to be passed\n\nexport function unreachable(value: never): never\nexport function unreachable(value?: never): never {\n throw new Error(\n arguments.length === 0\n ? 'unreachable'\n : `unreachable (${JSON.stringify(value)})`\n )\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// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Head<U> = U extends [infer T, ...any[]] ? T : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Tail<U> = U extends [any, any, ...any[]]\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: U) => any) extends (head: any, ...args: infer T) => any\n ? T\n : never\n : never\n// Buggy at ts@4.0.0-dev20200506\n// type Tail<U> = U extends [any, ...infer T] ? T : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RecursiveObjectAssign<T, S extends any[]> = {\n 0: T & Head<S>\n 1: RecursiveObjectAssign<T & Head<S>, Tail<S>>\n}[Tail<S> extends never ? 0 : 1]\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ObjectAssign<T extends any[]> = RecursiveObjectAssign<\n Record<string, unknown>,\n T\n>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function objectAssign<T extends any[]>(...sources: T) {\n return Object.assign({}, ...sources) as ObjectAssign<T>\n}\n\n/**\n * Object.keys の返り値の型を厳しめにしてくれるやつ。\n *\n * ジェネリクスは基本的に明示して使うことを推奨。\n *\n * このライブラリでは Theme オブジェクトのジェネリクスを引き回すケースが多く、\n * ジェネリクスを省略するといつのまにか keys の返り値が `string | number | symbol` になりがちなので\n *\n * @param obj - キーを取りたいオブジェクト。ジェネリクスを省略したとき `never[]` のような使えない型が返って欲しい\n */\nexport function keyof<\n // このジェネリクスは必須(書かないと返り値が `never[]` になる )\n T extends Record<never, unknown>,\n // このジェネリクスは書かなくて良い、obj の内容から推論される( T と矛盾してはいけない )\n _ extends T = T\n>(obj: _) {\n return Object.keys(obj) as unknown as (keyof T & string)[]\n}\n\nexport interface ReadonlyArrayConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isArray(value: any): value is readonly any[]\n}\n\nexport function extractNonNullKeys<V, K extends keyof V>(obj: {\n [key in K]: V[key]\n}) {\n return Object.entries(obj)\n .filter(([_, v]) => v !== null)\n .map(([k]) => k) as { [key in K]: V[key] extends null ? never : key }[K][]\n}\n\n/**\n * 配列じゃなかったら配列にする\n */\nexport function wrapArray<T>(value: ArrayOrSingle<T>): T[] {\n return Array.isArray(value) ? value : [value]\n}\n\nexport type ArrayOrSingle<T> = T | T[]\n\nexport const noThemeProvider = new Error(\n '`theme` is invalid. `<ThemeProvider>` is not likely mounted.'\n)\n\ntype NonNullableCSSObject = Record<keyof CSSObject, string | number>\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 }): NonNullableCSSObject {\n if (!isPresent(props.theme)) {\n throw noThemeProvider\n }\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 onEffectPseudo(effect: EffectType, css: CSSObject) {\n return effect === 'hover'\n ? { '&:hover': { [notDisabledSelector]: css } }\n : effect === 'press'\n ? { '&:active': { [notDisabledSelector]: css } }\n : // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n effect === 'disabled'\n ? { [disabledSelector]: css }\n : unreachable(effect)\n}\n\nexport function withPrefixes(...parts: string[]) {\n return parts.join('-')\n}\n","import { CSSObject } from 'styled-components'\n\nexport interface Context {\n cancelHalfLeadingPx?: number\n hasVerticalPadding?: boolean\n boxShadowTransition?: boolean\n colorTransition?: boolean\n backgroundColorTransition?: boolean\n}\n\n/**\n * 絶対にこれを export してはいけない\n *\n * さもないと `o.bg[internalSym]` みたいな叩き方が可能になってしまう(補完にも意図せず出てしまう)\n */\nconst internalSym: unique symbol = Symbol('internal')\n\n/**\n * CSSObject に変換可能なオブジェクトを作成する\n *\n * 実際に CSSObject に変換するには外部から `__DO_NOT_USE_GET_INTERNAL__` を使わなければならない\n *\n * これ以降メソッドチェーンが続いてもいいし、続かなくても良い\n */\nexport function createInternal({\n toCSS,\n context = {},\n}: {\n toCSS: (context: Context) => CSSObject\n context?: Context\n}): Internal {\n return {\n [internalSym]: {\n toCSS,\n context,\n },\n }\n}\n\nfunction __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal: Internal) {\n return internal[internalSym]\n}\n\nexport interface Internal {\n [internalSym]: {\n toCSS: (context: Context) => CSSObject\n context: Context\n }\n}\n\n// half-leadingをキャンセルするとき && 垂直方向のpaddingが無い時\n// -> before/afterを入れる\nexport const shouldCancelHalfLeading = ({\n cancelHalfLeadingPx,\n hasVerticalPadding = false,\n}: Context) => cancelHalfLeadingPx !== undefined && !hasVerticalPadding\n\n/**\n * 個別の Internal( o.〇〇 の返り値 )が提出した context の中身を1つの context にまとめる\n */\nexport function getContext(internals: Internal[]) {\n return internals.reduce<Context>(\n (context, internal) => ({\n ...context,\n ...__DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal).context,\n }),\n {}\n )\n}\n\n/**\n * 全ユーザー定義からコンテキスト生成し、styled-components 向けに CSSObject を構築\n */\nexport function toCSSObjects(internals: Internal[]): CSSObject[] {\n // 1パス目\n // 全ユーザー定義を舐めて相互に影響し合う定義をチェックし、その結果(コンテキスト)を取得\n const context = getContext(internals)\n\n // 2パス目\n // コンテキストを見ながら最適化されたCSSを構築\n return internals.map((v) =>\n __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(v).toCSS(context)\n )\n}\n","import { Key } from '@charcoal-ui/theme'\nimport { unreachable } from '../util'\n\n/**\n * 配列で指定したプロパティを動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param member オブジェクトに生やすプロパティ一覧\n * @param chain プロパティに格納される値を生成する関数\n *\n * @example\n *\n * const o = factory({}, ['red', 'blue'],\n * color => hex(color)\n * )\n *\n * console.log(o.red) //=> #ff0000\n */\nexport const defineProperties = <\n TSource,\n TMember extends readonly Key[],\n TValue\n>(\n source: TSource,\n member: TMember,\n chain: (key: TMember[number]) => TValue\n) =>\n Object.defineProperties(\n source,\n Object.fromEntries(\n member.map((key) => [\n key,\n { get: () => chain(key), enumerable: true, configurable: true },\n ])\n )\n ) as TSource & { readonly [key in TMember[number]]: TValue }\n\n/**\n * 配列で指定した名前のメソッドを動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param member オブジェクトに生やすメソッド名一覧\n * @param chain メソッドの戻り値になる値を生成する関数\n *\n * @example\n *\n * const o = defineMethods({}, ['red', 'blue'],\n * (color, alpha: number) => hex(color, alpha)\n * )\n *\n * console.log(o.red(0.5)) //=> #ff000077\n */\nexport const defineMethods = <\n TSource,\n TMember extends readonly string[],\n TValue,\n TArguments extends unknown[]\n>(\n source: TSource,\n member: TMember,\n chain: (key: TMember[number], ...args: TArguments) => TValue\n) =>\n Object.defineProperties(\n source,\n Object.fromEntries(\n member.map((key) => [\n key,\n {\n value: (...args: TArguments) => chain(key, ...args),\n enumerable: true,\n configurable: true,\n },\n ])\n )\n ) as TSource & {\n readonly [key in TMember[number]]: (...args: TArguments) => TValue\n }\n\n/**\n * オブジェクトで指定したプロパティ名と値を動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param def オブジェクトに生やす定義(プロパティ名と値)\n *\n * @example\n *\n * const o = defineConstantProperties({}, {\n * red: '#f00',\n * blue: '#00f',\n * })\n *\n * console.log(o.red) //=> #f00\n */\nexport const defineConstantProperties = <\n TSource,\n TDef extends { [key: string]: unknown }\n>(\n source: TSource,\n def: TDef\n) =>\n defineProperties(source, Object.keys(def), (key) => def[key]) as TSource &\n Readonly<TDef>\n\n/**\n * 配列で指定したモディファイア(プロパティ)をチェーン可能な再帰オブジェクトを動的に生やす\n *\n * @param modifiers オブジェクトに生やすモディファイヤ一覧\n * @param source 指定されたモディファイヤの一覧から値を生成する関数\n *\n * @example\n *\n * const o = definePropertyChains(['red', 'blue'],\n * modifiers => modifiers.map(color => hex(color)).join(',')\n * )\n *\n * console.log(o.red.blue) => #f00,#00f\n */\nexport const definePropertyChains = <TSource, T extends Key>(\n modifiers: readonly T[],\n source: (applied: readonly T[]) => TSource\n) =>\n (function definePropertiesRecursively(\n applied: readonly T[]\n ): PropertyChain<TSource, T> {\n const notApplied = modifiers.filter((v) => !applied.includes(v))\n return defineProperties(source(applied), notApplied, (modifier) =>\n notApplied.length === 0\n ? unreachable()\n : definePropertiesRecursively([...applied, modifier])\n )\n })([])\n\nexport type PropertyChain<TSource, TModifiers extends Key> = TSource & {\n readonly [key in TModifiers]: PropertyChain<TSource, Exclude<TModifiers, key>>\n}\n\n/**\n * 配列で指定したモディファイア(メソッド)をチェーン可能な再帰オブジェクトを動的に生やす\n *\n * @param modifiers オブジェクトに生やすモディファイヤ一覧\n * @param source 指定されたモディファイヤの一覧から値を生成する関数\n * @param _inferPhantom 関数形式のモディファイヤの引数型を推論するためのメタタイプ(引数の個数に合わせてタプルで指定する)\n *\n * @example\n *\n * const o = defineMethodChains(['red', 'blue'],\n * modifiers => modifiers.map(([color, alpha]) => hex(color, alpha)).join(',')\n * , {} as [number])\n *\n * console.log(o.red(0.5).blue(1)) => #ff000077,#0000ffff\n */\nexport const defineMethodChains = <\n TSource,\n T extends string,\n TArguments extends unknown[]\n>(\n modifiers: readonly T[],\n source: (applied: readonly [T, ...TArguments][]) => TSource,\n ..._inferPhantom: TArguments\n) =>\n (function defineMethodsRecursively(\n applied: readonly [T, ...TArguments][]\n ): MethodChain<TSource, T, TArguments> {\n const notApplied = modifiers.filter(\n (v) => !applied.map(([w]) => w).includes(v)\n )\n return defineMethods(\n source(applied),\n notApplied,\n (modifier, ...args: TArguments) =>\n notApplied.length === 0\n ? unreachable()\n : defineMethodsRecursively([...applied, [modifier, ...args]])\n )\n })([])\n\nexport type MethodChain<\n TSource,\n TModifiers extends string,\n TArguments extends unknown[]\n> = TSource & {\n readonly [key in TModifiers]: (\n ...args: TArguments\n ) => MethodChain<TSource, Exclude<TModifiers, key>, TArguments>\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\nimport { keyof, variable, withPrefixes } from '../util'\nimport { Internal, createInternal } from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\nimport { customPropertyToken } from '@charcoal-ui/utils'\n\nexport const borderDirections = ['top', 'right', 'bottom', 'left'] as const\ntype BorderDirection = (typeof borderDirections)[number]\n\nexport const createBorderCss = <T extends CharcoalAbstractTheme>(\n variant: keyof T['border'],\n directions: readonly BorderDirection[]\n): Internal => {\n const all = directions.length === 0\n\n const value = `solid 1px ${variable(\n customPropertyToken(withPrefixes('border', variant.toString()))\n )}`\n\n return createInternal({\n toCSS() {\n return {\n ...(all\n ? { border: value }\n : directions.reduce<CSSObject>(\n (acc, direction) => ({\n ...acc,\n [`border-${direction}`]: value,\n }),\n {}\n )),\n }\n },\n })\n}\n\nexport default function border<T extends CharcoalAbstractTheme>(theme: T) {\n const borderTypes = keyof<T['border']>(theme.border)\n\n const borderObject = defineConstantProperties(\n {},\n {\n border: defineProperties({}, borderTypes, (variant) =>\n definePropertyChains(borderDirections, (modifiers) =>\n createBorderCss(variant, modifiers)\n )\n ),\n }\n )\n return borderObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { Internal, createInternal } from '../internals'\nimport { defineConstantProperties } from '../factories/lib'\n\nexport const createBorderRadiusCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (size: keyof T['borderRadius']): Internal => {\n return createInternal({\n toCSS() {\n return {\n borderRadius: px(theme.borderRadius[size]),\n }\n },\n })\n }\n\nexport default function borderRadius<T extends CharcoalAbstractTheme>(\n theme: T\n) {\n // 角丸\n const borderRadiusCss = createBorderRadiusCss(theme)\n const borderRadiusObject = defineConstantProperties(\n {},\n {\n borderRadius: (radius: keyof T['borderRadius']) =>\n borderRadiusCss(radius),\n }\n )\n\n return borderRadiusObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport {\n applyEffect,\n applyEffectToGradient,\n customPropertyToken,\n dur,\n gradient,\n GradientDirection,\n} from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport warning from 'warning'\nimport {\n keyof,\n objectAssign,\n isSupportedEffect,\n onEffectPseudo,\n variable,\n} from '../util'\nimport {\n createInternal,\n Internal,\n Context,\n shouldCancelHalfLeading,\n} from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\nimport { TRANSITION_DURATION } from './transition'\n\nconst colorProperties = ['bg', 'font'] as const\nexport type ColorProperty = (typeof colorProperties)[number]\n\nfunction targetProperty(target: ColorProperty) {\n return target === 'bg' ? 'background-color' : 'color'\n}\n\nexport const createColorCss =\n <T extends CharcoalAbstractTheme>(_theme: T) =>\n (\n target: ColorProperty,\n color: keyof T['color'],\n effects: readonly (keyof T['effect'])[] = []\n ): Internal => {\n function toCSS() {\n return {\n [targetProperty(target)]: variable(\n customPropertyToken(color.toString())\n ),\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n [targetProperty(target)]: variable(\n customPropertyToken(color.toString(), [effect])\n ),\n }),\n }),\n {}\n ),\n }\n }\n\n return createInternal({\n toCSS,\n context:\n effects.length > 0\n ? target === 'font'\n ? {\n colorTransition: true,\n }\n : {\n backgroundColorTransition: true,\n }\n : {},\n })\n }\n\nexport const createGradientColorCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n color: keyof T['gradientColor'],\n effects: readonly (keyof T['effect'])[] = [],\n direction: GradientDirection\n ): Internal => {\n const toLinearGradient = gradient(direction)\n\n function toCSS(context: Context): CSSObject {\n const optimized = !shouldCancelHalfLeading(context)\n const duration = dur(TRANSITION_DURATION)\n\n if (optimized && effects.length > 0) {\n return {\n position: 'relative',\n zIndex: 0,\n overflow: 'hidden',\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n '&::before': {\n zIndex: -1,\n ...overlayElement,\n transition: `${duration} background-color`,\n },\n '&::after': {\n zIndex: -2,\n ...overlayElement,\n ...toLinearGradient(theme.gradientColor[color]),\n },\n ...onEffectPseudo(effect, {\n '&::before': {\n backgroundColor: applyEffect(\n null,\n theme.effect[effect] ?? []\n ),\n },\n }),\n }),\n {}\n ),\n }\n }\n\n warning(\n effects.length === 0,\n\n `'Transition' will not be applied. You can get around this by specifying 'preserveHalfLeading' or both 'padding' and 'typography'.`\n )\n\n return {\n ...toLinearGradient(theme.gradientColor[color]),\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n ...toLinearGradient(\n applyEffectToGradient(theme.effect[effect] ?? [])(\n theme.gradientColor[color]\n )\n ),\n }),\n }),\n {}\n ),\n }\n }\n\n return createInternal({ toCSS })\n }\n\nconst overlayElement: CSSObject = {\n content: \"''\",\n display: 'block',\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n}\n\nexport default function colors<T extends CharcoalAbstractTheme>(theme: T) {\n const colors = keyof<T['color']>(theme.color)\n const effects = keyof<T['effect']>(theme.effect)\n\n // 色\n const gradientColors = keyof<T['gradientColor']>(theme.gradientColor)\n const colorCss = createColorCss(theme)\n const gradientColorCss = createGradientColorCss(theme)\n\n const colorObject = defineConstantProperties(\n {},\n {\n bg: objectAssign(\n defineProperties({}, colors, (color) =>\n definePropertyChains(effects, (modifiers) =>\n colorCss('bg', color, modifiers)\n )\n ),\n defineProperties(\n {},\n gradientColors,\n (color) => (direction: GradientDirection) =>\n definePropertyChains(effects, (modifiers) =>\n gradientColorCss(color, modifiers, direction)\n )\n )\n ),\n font: defineProperties({}, colors, (color) =>\n definePropertyChains(effects, (modifiers) =>\n colorCss('font', color, modifiers)\n )\n ),\n }\n )\n\n return colorObject\n}\n","import { dur } from '@charcoal-ui/utils'\nimport { isPresent } from '../util'\nimport { Internal, createInternal, Context } from '../internals'\n\n// TODO: deprecate\nexport const TRANSITION_DURATION = 0.2\n\n/**\n * context の状態を元に transition を追加する。必ず一番最後に呼ぶ\n */\nexport default function transition(_theme: unknown): Internal {\n const duration = dur(TRANSITION_DURATION)\n const transition = (property: string[]) => ({\n transition: property.map((v) => `${duration} ${v}`).join(', '),\n })\n\n function toCSS({\n colorTransition = false,\n backgroundColorTransition = false,\n boxShadowTransition = false,\n }: Context) {\n return transition(\n [\n colorTransition ? 'color' : null,\n backgroundColorTransition ? 'background-color' : null,\n boxShadowTransition ? 'box-shadow' : null,\n ].filter(isPresent)\n )\n }\n\n return createInternal({ toCSS })\n}\n","import { CharcoalAbstractTheme, EffectType } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\nimport {\n isSupportedEffect,\n keyof,\n onEffectPseudo,\n ReadonlyArrayConstructor,\n unreachable,\n} from '../util'\nimport { Internal, createInternal } from '../internals'\nimport { definePropertyChains } from '../factories/lib'\n\nexport const createElementEffectCss =\n <\n T extends CharcoalAbstractTheme,\n TElementEffect extends T['elementEffect']\n >(theme: {\n elementEffect: TElementEffect\n }) =>\n (effects: readonly (keyof TElementEffect)[] = []): Internal =>\n createInternal({\n toCSS() {\n return effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n opacity:\n !(Array as ReadonlyArrayConstructor).isArray(\n theme.elementEffect[effect]\n ) && theme.elementEffect[effect]?.type === 'opacity'\n ? theme.elementEffect[effect]?.opacity\n : unreachable(),\n }),\n }),\n {}\n )\n },\n })\n\nexport default function elementEffect<T extends CharcoalAbstractTheme>(\n theme: T\n) {\n const effectTypes = keyof<T['elementEffect']>(\n theme.elementEffect\n ) as EffectType[]\n\n // 要素へのエフェクト (etc: 透過)\n const elementEffectCss = createElementEffectCss(theme)\n const elementEffectObject = definePropertyChains(effectTypes, (modifiers) =>\n elementEffectCss(modifiers)\n )\n\n return elementEffectObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px, notDisabledSelector } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport { keyof } from '../util'\nimport { Internal, createInternal } from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\n\nexport const outlineType = ['focus'] as const\ntype OutlineType = (typeof outlineType)[number]\n\nconst outlineCss = (weight: number, color: string) => ({\n boxShadow: `0 0 0 ${px(weight)} ${color}`,\n})\n\nexport const createOutlineColorCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n variant: keyof T['outline'],\n modifiers: readonly OutlineType[]\n ): Internal => {\n const weight = theme.outline[variant].weight\n const color = theme.outline[variant].color\n\n return createInternal({\n toCSS() {\n return modifiers.includes('focus')\n ? onFocus(outlineCss(weight, color))\n : { '&&': { [notDisabledSelector]: outlineCss(weight, color) } }\n },\n context: {\n boxShadowTransition: true,\n },\n })\n }\n\n/**\n * @see https://developer.mozilla.org/ja/docs/Web/CSS/:focus-visible#selectively_showing_the_focus_indicator\n */\nconst onFocus = (css: CSSObject) => ({\n [notDisabledSelector]: {\n '&:focus, &:active': {\n outline: 'none',\n ...css,\n },\n\n '&:focus:not(:focus-visible), &:active:not(:focus-visible)': {\n outline: 'none',\n },\n\n '&:focus-visible': {\n outline: 'none',\n ...css,\n },\n },\n})\n\nexport default function outline<T extends CharcoalAbstractTheme>(theme: T) {\n const outlineCss = createOutlineColorCss(theme)\n\n const outlineObject = defineConstantProperties(\n {},\n {\n outline: defineProperties(\n {},\n keyof<T['outline']>(theme.outline),\n (variant) =>\n definePropertyChains(outlineType, (modifiers) =>\n outlineCss(variant, modifiers)\n )\n ),\n }\n )\n\n return outlineObject\n}\n","import { columnSystem } from '@charcoal-ui/foundation'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { Internal, createInternal } from '../internals'\nimport { defineProperties, defineConstantProperties } from '../factories/lib'\n\nexport const fixedProperties = ['width', 'height'] as const\ntype FixedProperty = (typeof fixedProperties)[number]\n\nexport const createFixedPxCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (property: FixedProperty, size: keyof T['spacing'] | 'auto'): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: size === 'auto' ? 'auto' : px(theme.spacing[size]),\n }\n },\n })\n\nexport const createFixedRelativeCss =\n <T extends CharcoalAbstractTheme>(_theme: T) =>\n (property: FixedProperty, amount: '100%' | 'auto'): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: amount,\n }\n },\n })\n\nexport const createFixedColumnCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (property: FixedProperty, span: number): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: px(\n columnSystem(span, theme.grid.unit.column, theme.grid.unit.gutter)\n ),\n }\n },\n })\n\nexport default function size<T extends CharcoalAbstractTheme>(theme: T) {\n const fixedPxCss = createFixedPxCss(theme)\n const fixedColumnCss = createFixedColumnCss(theme)\n const fixedRelativeCss = createFixedRelativeCss(theme)\n const fixedObject = defineProperties({}, fixedProperties, (property) =>\n defineConstantProperties(\n {},\n {\n px: (size: keyof T['spacing'] | 'auto') => fixedPxCss(property, size),\n column: (span: number) => fixedColumnCss(property, span),\n auto: fixedRelativeCss(property, 'auto'),\n full: fixedRelativeCss(property, '100%'),\n }\n )\n )\n return fixedObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport { Internal, createInternal, Context } from '../internals'\nimport { defineProperties, defineMethodChains } from '../factories/lib'\n\nexport const spacingProperties = ['margin', 'padding'] as const\nexport const spacingDirections = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'vertical',\n 'horizontal',\n 'all',\n] as const\ntype SpacingProperty = (typeof spacingProperties)[number]\ntype SpacingDirection = (typeof spacingDirections)[number]\n\nfunction spacingProperty(\n property: SpacingProperty,\n direction: 'top' | 'right' | 'bottom' | 'left'\n) {\n return `${property}-${direction}`\n}\n\nexport const createSpacingCss =\n <T extends CharcoalAbstractTheme>(theme: { spacing: T['spacing'] }) =>\n (\n property: SpacingProperty,\n modifiers: readonly [SpacingDirection, keyof T['spacing'] | 'auto'][]\n ): Internal => {\n const { top, right, bottom, left } = modifiers.reduce(\n (acc, [direction, size]) => {\n if (direction === 'all') {\n acc.top = size\n acc.right = size\n acc.bottom = size\n acc.left = size\n } else if (direction === 'vertical') {\n acc.top = size\n acc.bottom = size\n } else if (direction === 'horizontal') {\n acc.right = size\n acc.left = size\n } else {\n acc[direction] = size\n }\n return acc\n },\n {} as Partial<\n Record<'top' | 'right' | 'bottom' | 'left', keyof T['spacing'] | 'auto'>\n >\n )\n\n const hasVerticalPadding =\n property === 'padding' &&\n top !== undefined &&\n bottom !== undefined &&\n top !== 'auto' &&\n bottom !== 'auto'\n\n function toCSS({ cancelHalfLeadingPx = 0 }: Context): CSSObject {\n return {\n ...(top !== undefined && {\n [spacingProperty(property, 'top')]:\n top === 'auto'\n ? 'auto'\n : px(\n theme.spacing[top] +\n (hasVerticalPadding ? cancelHalfLeadingPx : 0)\n ),\n }),\n ...(bottom !== undefined && {\n [spacingProperty(property, 'bottom')]:\n bottom === 'auto'\n ? 'auto'\n : px(\n theme.spacing[bottom] +\n (hasVerticalPadding ? cancelHalfLeadingPx : 0)\n ),\n }),\n ...(right !== undefined && {\n [spacingProperty(property, 'right')]:\n right === 'auto' ? 'auto' : px(theme.spacing[right]),\n }),\n ...(left !== undefined && {\n [spacingProperty(property, 'left')]:\n left === 'auto' ? 'auto' : px(theme.spacing[left]),\n }),\n }\n }\n\n return createInternal({\n toCSS,\n context: hasVerticalPadding ? { hasVerticalPadding: true } : {},\n })\n }\n\nexport default function spacing<T extends CharcoalAbstractTheme>(theme: T) {\n const spacingCss = createSpacingCss(theme)\n const spacingObject = defineProperties(\n {},\n spacingProperties,\n (spacingProperty) =>\n defineMethodChains(\n spacingDirections,\n (modifiers) => spacingCss(spacingProperty, modifiers),\n {} as keyof T['spacing'] | 'auto' // 推論のためのメタタイプ\n )\n )\n return spacingObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { halfLeading, px } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport {\n Internal,\n createInternal,\n shouldCancelHalfLeading,\n Context,\n} from '../internals'\nimport { defineProperties, definePropertyChains } from '../factories/lib'\n\nexport const createTypographyCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n size: keyof T['typography']['size'],\n options: {\n preserveHalfLeading?: boolean\n monospace?: boolean\n bold?: boolean\n } = {}\n ): Internal => {\n const {\n preserveHalfLeading = false,\n monospace = false,\n bold = false,\n } = options\n const descriptor = theme.typography.size[size]\n const margin = -halfLeading(descriptor)\n\n function toCSS(context: Context): CSSObject {\n return {\n fontSize: px(descriptor.fontSize),\n lineHeight: px(descriptor.lineHeight),\n ...(monospace && {\n fontFamily: 'monospace',\n }),\n ...(bold && {\n fontWeight: 'bold',\n }),\n ...(shouldCancelHalfLeading(context) && {\n // prevent margin collapsing\n display: 'flow-root',\n // cancel half-leading with negative margin\n '&::before': {\n ...leadingCancel,\n marginTop: px(margin),\n },\n '&::after': {\n ...leadingCancel,\n marginBottom: px(margin),\n },\n }),\n }\n }\n\n return createInternal({\n toCSS,\n context: !preserveHalfLeading\n ? {\n cancelHalfLeadingPx: margin,\n }\n : {},\n })\n }\n\nconst leadingCancel: CSSObject = {\n display: 'block',\n width: 0,\n height: 0,\n content: `''`,\n}\n\n// タイポグラフィ\nconst typographyModifiers = [\n // TODO\n 'monospace',\n 'bold',\n 'preserveHalfLeading',\n] as const\n\nexport default function typography<T extends CharcoalAbstractTheme>(theme: T) {\n const typographyCss = createTypographyCss(theme)\n const typographyObject = defineProperties(\n {},\n ['typography'] as const,\n (_) => (size: keyof T['typography']['size']) =>\n definePropertyChains(typographyModifiers, (modifiers) =>\n typographyCss(size, {\n preserveHalfLeading: modifiers.includes('preserveHalfLeading'),\n monospace: modifiers.includes('monospace'),\n bold: modifiers.includes('bold'),\n })\n )\n )\n\n return typographyObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { objectAssign } from '../util'\nimport border from './border'\nimport borderRadius from './borderRadius'\nimport colors from './colors'\nimport elementEffect from './elementEffect'\nimport outline from './outline'\nimport size from './size'\nimport spacing from './spacing'\nimport typography from './typography'\n\n/**\n * `theme(o => [...])` の `o` の部分を構築する\n *\n * @param theme テーマオブジェクト\n */\nexport default function createO<T extends CharcoalAbstractTheme>(\n theme: {\n // factoryの第二引数に入れ込むものだけ明示的に型変数を展開しておくことで型の具象化を遅延する\n color: T['color']\n gradientColor: T['gradientColor']\n border: T['border']\n outline: T['outline']\n } & Omit<T, 'color' | 'gradientColor' | 'border' | 'outline'>\n) {\n return objectAssign(\n colors(theme),\n typography(theme),\n spacing(theme),\n size(theme),\n elementEffect(theme),\n border(theme),\n borderRadius(theme),\n outline(theme)\n )\n}\n","import { createGlobalStyle, css } from 'styled-components'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { defineThemeVariables, withPrefixes } from './util'\nimport { mapObject } from '@charcoal-ui/utils'\n\nconst GlobalStyle = createGlobalStyle`\n ${<T extends Theme>({\n themeMap,\n background,\n }: {\n themeMap: ThemeMap<T>\n background?: keyof ThemeMap<T>[string]['color']\n }) =>\n Object.entries(themeMap).map(([key, theme]) =>\n key.startsWith('@media')\n ? css`\n ${key} {\n :root {\n ${background !== undefined &&\n css`\n background-color: ${theme.color[background]};\n `}\n ${defineColorVariableCSS(theme)}\n }\n }\n `\n : css`\n /* stylelint-disable-next-line no-duplicate-selectors */\n ${key} {\n ${background !== undefined &&\n css`\n background-color: ${theme.color[background]};\n `}\n ${defineColorVariableCSS(theme)}\n }\n `\n )}\n`\n\nexport interface ThemeMap<T extends Theme> {\n ':root': T\n [mediaQuery: `@media (${string})`]: T\n [selector: string]: T\n}\n\ntype Theme = Pick<CharcoalAbstractTheme, 'color' | 'effect' | 'border'>\n\nexport default function TokenInjector<T extends Theme>({\n theme: themeMap,\n background,\n}: {\n theme: ThemeMap<T>\n background?: keyof ThemeMap<T>[string]['color']\n}) {\n return <GlobalStyle themeMap={themeMap} background={background} />\n}\n\nconst 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\n return toCSSVariables(colors)\n}\n\nfunction toCSSVariables(css: Record<string, string | number>) {\n return Object.entries(css)\n .map(([varName, value]) => variableDefinition(varName, value.toString()))\n .join(';')\n}\n\nconst variableDefinition = (prop: string, value: string) => `${prop}: ${value}`\n","import { useEffect, useMemo, useState } from 'react'\n\nexport const LOCAL_STORAGE_KEY = 'charcoal-theme'\nexport const DEFAULT_ROOT_ATTRIBUTE = 'theme'\n\nconst keyStringRegExp = new RegExp(/^(\\w|-)+$/)\n\n/**\n * 文字列が英数字_-のみで構成されているか検証する。不正な文字列ならエラーを投げる\n * @param key 検証するキー\n */\nexport function assertKeyString(key: string) {\n if (!keyStringRegExp.test(key)) {\n throw new Error(`Unexpected key :${key}, expect: /^(\\\\w|-)+$/`)\n }\n}\n\n/**\n * `<html data-theme=\"dark\">` のような設定を行うデフォルトのセッター\n */\nexport const themeSetter =\n (attr: string = DEFAULT_ROOT_ATTRIBUTE) =>\n (theme: string | undefined) => {\n assertKeyString(attr)\n if (theme !== undefined) {\n document.documentElement.dataset[attr] = theme\n } else {\n delete document.documentElement.dataset[attr]\n }\n }\n\n/**\n * `<html data-theme=\"dark\">` にマッチするセレクタを生成する\n */\nexport function themeSelector<\n T extends string,\n S extends string = typeof DEFAULT_ROOT_ATTRIBUTE\n>(theme: T, attr?: S) {\n return `:root[data-${attr ?? DEFAULT_ROOT_ATTRIBUTE}='${theme}']` as const\n}\n\n/**\n * prefers-color-scheme を利用する media クエリを生成する\n */\nexport function prefersColorScheme<T extends 'light' | 'dark'>(theme: T) {\n return `@media (prefers-color-scheme: ${theme})` as const\n}\n\n/**\n * LocalStorageからテーマの情報を取得して、変化時にテーマをセットするhooks\n */\nexport function useThemeSetter({\n key = LOCAL_STORAGE_KEY,\n setter = themeSetter(),\n}: { key?: string; setter?: (theme: string | undefined) => void } = {}) {\n const [theme, , system] = useTheme(key)\n\n useEffect(() => {\n if (theme === undefined) {\n return\n }\n // prefers-color-scheme から値を取っている場合にはcssのみで処理したいのでアンセットする\n setter(system ? undefined : theme)\n }, [setter, system, theme])\n}\n\n/**\n * 同期的にLocalStorageからテーマを取得するヘルパ\n */\nexport function getThemeSync(key: string = LOCAL_STORAGE_KEY) {\n const theme = localStorage.getItem(key)\n return theme\n}\n\n/**\n * LocalStorage, prefers-color-scheme からテーマの情報を取得して、現在のテーマを返すhooks\n *\n * `dark` `light` という名前だけは特別扱いされていて、prefers-color-schemeにマッチした場合に返ります\n */\nexport const useTheme = (localStorageKey: string = LOCAL_STORAGE_KEY) => {\n assertKeyString(localStorageKey)\n const isDark = useMedia('(prefers-color-scheme: dark)')\n const media = isDark !== undefined ? (isDark ? 'dark' : 'light') : undefined\n const [local, setTheme, ready] =\n useLocalStorage<typeof media>(localStorageKey)\n const theme = !ready || media === undefined ? undefined : local ?? media\n const system = local === undefined\n return [theme, setTheme, system] as const\n}\n\nexport function useLocalStorage<T>(key: string, defaultValue?: () => T) {\n const [ready, setReady] = useState(false)\n const [state, setState] = useState<T>()\n const defaultValueMemo = useMemo(() => defaultValue?.(), [defaultValue])\n\n useEffect(() => {\n fetch()\n window.addEventListener('storage', handleStorage)\n return () => {\n window.removeEventListener('storage', handleStorage)\n }\n })\n\n const handleStorage = (e: StorageEvent) => {\n if (e.storageArea !== localStorage) {\n return\n }\n if (e.key !== key) {\n return\n }\n fetch()\n }\n\n const fetch = () => {\n const raw = localStorage.getItem(key)\n setState((raw !== null ? deserialize(raw) : null) ?? defaultValueMemo)\n setReady(true)\n }\n\n const set = (value: T | undefined) => {\n if (value === undefined) {\n // undefinedがセットされる場合にはkeyごと削除\n localStorage.removeItem(key)\n } else {\n const raw = serialize(value)\n localStorage.setItem(key, raw)\n }\n\n // 同一ウィンドウではstorageイベントが発火しないので、手動で発火させる\n const event = new StorageEvent('storage', {\n bubbles: true,\n cancelable: false,\n key,\n url: location.href,\n storageArea: localStorage,\n })\n dispatchEvent(event)\n }\n\n return [state ?? defaultValueMemo, set, ready] as const\n}\n\nfunction deserialize<T>(raw: string): T {\n try {\n return JSON.parse(raw) as T\n } catch {\n // syntax error はすべて文字列として扱う\n return raw as unknown as T\n }\n}\n\nfunction serialize(value: unknown): string {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value)\n }\n}\n\nexport function useMedia(query: string) {\n const [match, setState] = useState<boolean>()\n\n useEffect(() => {\n const matcher = window.matchMedia(query)\n\n const onChange = () => {\n setState(matcher.matches)\n }\n\n matcher.addEventListener('change', onChange)\n\n setState(matcher.matches)\n\n return () => {\n matcher.removeEventListener('change', onChange)\n }\n }, [query])\n\n return match\n}\n","import { css } from 'styled-components'\n\nconst boldCss = css`\n font-weight: bold;\n`\n\nexport const removeHalfLeadingCss = css`\n &::before {\n display: block;\n width: 0;\n height: 0;\n content: '';\n margin-top: -4px;\n }\n\n &::after {\n display: block;\n width: 0;\n height: 0;\n content: '';\n margin-bottom: -4px;\n }\n`\n\nexport function typography(\n size: 12 | 14 | 16 | 20,\n bold = false,\n preserveHalfLeading = false\n) {\n const cssObj = css`\n font-size: ${size}px;\n line-height: ${size + 8}px;\n display: flow-root;\n ${bold === true && boldCss}\n ${preserveHalfLeading !== true && removeHalfLeadingCss}\n `\n\n return cssObj\n}\n","import {\n assertKeyString,\n DEFAULT_ROOT_ATTRIBUTE,\n LOCAL_STORAGE_KEY,\n} from './helper'\n\ninterface Props {\n localStorageKey: string\n rootAttribute: string\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するコードを取得する\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns ソースコードの文字列\n */\nexport function makeSetThemeScriptCode({\n localStorageKey = defaultProps.localStorageKey,\n rootAttribute = defaultProps.rootAttribute,\n}: Partial<Props> = defaultProps) {\n assertKeyString(localStorageKey)\n assertKeyString(rootAttribute)\n return `'use strict';\n(function () {\n var localStorageKey = '${localStorageKey}'\n var rootAttribute = '${rootAttribute}'\n var currentTheme = localStorage.getItem(localStorageKey);\n if (currentTheme) {\n document.documentElement.dataset[rootAttribute] = currentTheme;\n }\n})();\n`\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するスクリプトタグ\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns\n */\nexport function SetThemeScript(props: Props) {\n const src = makeSetThemeScriptCode(props)\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: src,\n }}\n />\n )\n}\n\nconst defaultProps: Props = {\n localStorageKey: LOCAL_STORAGE_KEY,\n rootAttribute: DEFAULT_ROOT_ATTRIBUTE,\n}\n\nSetThemeScript.defaultProps = defaultProps\n","import { css } from 'styled-components'\n\n/**\n * `&:focus:not(:focus-visible)` is backwards compatibility for legacy browsers.\n *\n * cf. https://github.com/WICG/focus-visible#backwards-compatibility\n */\nexport const focusVisibleFocusRingCss = css`\n &:focus {\n outline: none;\n box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);\n }\n &:focus:not(:focus-visible) {\n box-shadow: none;\n }\n &:focus-visible {\n box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);\n }\n`\n","import { css } from 'styled-components'\n\nexport const disabledCss = css`\n :disabled,\n [aria-disabled]:not([aria-disabled='false']) {\n opacity: 0.32;\n cursor: default;\n }\n`\n","import { css } from 'styled-components'\n\nexport const assertiveRingCss = css`\n box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);\n`\n","import { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { SpacingType } from './helpers/SpacingType'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function margin(arg1: SpacingType): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType,\n arg3: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType,\n arg3: SpacingType,\n arg4: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2?: SpacingType,\n arg3?: SpacingType,\n arg4?: SpacingType\n) {\n return css`\n margin: ${pxIfNum(arg1)} ${pxIfNum(arg2)} ${pxIfNum(arg3)} ${pxIfNum(arg4)};\n `\n}\n\nexport function marginTop(v: SpacingType) {\n return css`\n margin-top: ${pxIfNum(v)};\n `\n}\n\nexport function marginBottom(v: SpacingType) {\n return css`\n margin-bottom: ${pxIfNum(v)};\n `\n}\n\nexport function marginLeft(v: SpacingType) {\n return css`\n margin-left: ${pxIfNum(v)};\n `\n}\n\nexport function marginRight(v: SpacingType) {\n return css`\n margin-right: ${pxIfNum(v)};\n `\n}\n","export function pxIfNum(v?: number | string) {\n if (v === undefined) return ''\n if (typeof v === 'number') return `${v}px`\n return v\n}\n","import { Spacing } from '@charcoal-ui/theme'\nimport { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function padding(arg1: keyof Spacing): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing,\n arg3: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing,\n arg3: keyof Spacing,\n arg4: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2?: keyof Spacing,\n arg3?: keyof Spacing,\n arg4?: keyof Spacing\n) {\n return css`\n padding: ${arg1}px ${pxIfNum(arg2)} ${pxIfNum(arg3)} ${pxIfNum(arg4)};\n `\n}\n\nexport function paddingTop(v: keyof Spacing) {\n return css`\n padding-top: ${v}px;\n `\n}\n\nexport function paddingBottom(v: keyof Spacing) {\n return css`\n padding-bottom: ${v}px;\n `\n}\n\nexport function paddingLeft(v: keyof Spacing) {\n return css`\n padding-left: ${v}px;\n `\n}\n\nexport function paddingRight(v: keyof Spacing) {\n return css`\n padding-right: ${v}px;\n `\n}\n","import { Spacing } from '@charcoal-ui/theme'\nimport { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function gap(v1: keyof Spacing): FlattenSimpleInterpolation\n\nexport function gap(\n v1: keyof Spacing,\n v2: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function gap(v1: keyof Spacing, v2?: keyof Spacing) {\n return css`\n gap: ${v1}px ${pxIfNum(v2)};\n `\n}\n\nexport function rowGap(v: keyof Spacing) {\n return css`\n row-gap: ${v}px;\n `\n}\n\nexport function columnGap(v: keyof Spacing) {\n return css`\n column-gap: ${v}px;\n `\n}\n","import { CharcoalTheme } from '@charcoal-ui/theme'\nimport { CharcoalThemeUtils } from './CharcoalStyledTheme'\nimport {\n margin,\n marginBottom,\n marginLeft,\n marginRight,\n marginTop,\n} from './margin'\nimport {\n padding,\n paddingBottom,\n paddingLeft,\n paddingRight,\n paddingTop,\n} from './padding'\nimport { columnGap, gap, rowGap } from './gap'\nimport { disabledCss } from '../styles/disabledCss'\nimport { typography } from './typographyCss'\nimport { focusVisibleFocusRingCss } from '../styles/focusVisibleFocusRingCss'\nimport { assertiveRingCss } from '../styles/assertiveRingCss'\n\n/**\n * Adds some utilities to the theme object.\n * They can be used as an alternative `createTheme`(`theme(o=>)`) for styling.\n */\nexport function addThemeUtils(\n theme: CharcoalTheme\n): CharcoalTheme & CharcoalThemeUtils {\n return {\n ...theme,\n utils: {\n margin,\n marginTop,\n marginLeft,\n marginBottom,\n marginRight,\n padding,\n paddingTop,\n paddingLeft,\n paddingBottom,\n paddingRight,\n gap,\n rowGap,\n columnGap,\n typography,\n focusVisibleFocusRingCss,\n assertiveRingCss,\n disabledCss,\n },\n }\n}\n"],"mappings":"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","names":["colors","css","import_utils","import_utils","size","import_utils","import_utils","transition","warning","colors","import_utils","css","outlineCss","import_utils","size","import_utils","size","spacingProperty","import_utils","size","margin","import_utils","colors","css","import_styled_components","typography","size","import_jsx_runtime","import_styled_components","import_styled_components","import_styled_components","import_styled_components","import_styled_components","import_styled_components","typography","theme"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/util.ts","../src/internals/index.ts","../src/factories/lib.ts","../src/builders/border.ts","../src/builders/borderRadius.ts","../src/builders/colors.ts","../src/builders/transition.ts","../src/builders/elementEffect.ts","../src/builders/outline.ts","../src/builders/size.ts","../src/builders/spacing.ts","../src/builders/typography.ts","../src/builders/o.ts","../src/TokenInjector.tsx","../src/helper.ts","../src/utils/typographyCss.ts","../src/SetThemeScript.tsx","../src/styles/focusVisibleFocusRingCss.ts","../src/styles/disabledCss.ts","../src/styles/assertiveRingCss.ts","../src/utils/margin.ts","../src/utils/helpers/pxIfNum.ts","../src/utils/padding.ts","../src/utils/gap.ts","../src/utils/addThemeUtils.ts"],"sourcesContent":["import { CSSObject, ThemedStyledInterface } from 'styled-components'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { ArrayOrSingle, isPresent, noThemeProvider, wrapArray } from './util'\nimport { Internal, toCSSObjects } from './internals'\nimport createO from './builders/o'\nimport transition from './builders/transition'\nexport { default as TokenInjector } from './TokenInjector'\nexport {\n getThemeSync,\n themeSetter,\n themeSelector,\n prefersColorScheme,\n useTheme,\n useThemeSetter,\n useLocalStorage,\n useMedia,\n} from './helper'\nexport { defineThemeVariables } from './util'\nexport { removeHalfLeadingCss } from './utils/typographyCss'\nexport * from './SetThemeScript'\n\ntype Blank = null | undefined | false\n\nconst nonBlank = <T>(value: T): value is T extends Blank ? never : T =>\n isPresent(value) && (value as unknown) !== false\n\n/**\n * @deprecated\n * 実行時のパフォーマンスが低い問題があります。\n * ref. https://github.com/pixiv/charcoal/pull/377\n *\n * styled-components の theming 方法を推奨します。\n * ref. https://styled-components.com/docs/advanced#theming\n *\n * `theme(o => [...])` の `theme` ユーティリティを構築する\n *\n * @param _styled - DEPRECATED: styled-components の `styled` そのものを渡すとそれを元に型推論ができる。が、型引数を渡す方が型推論が高速になりやすい\n *\n * @example\n *\n * import styled from 'styled-components'\n * const theme = createTheme(styled)\n *\n * @example\n *\n * const theme = createTheme<DefaultTheme>()\n */\nexport function createTheme<T extends CharcoalAbstractTheme>(\n _styled?: ThemedStyledInterface<T>\n) {\n type Builder = ReturnType<typeof createO<T>>\n\n // ランタイムの `theme(o => [...])` のインターフェースを構築する\n return function theme(\n specFn: (o: Builder) => ArrayOrSingle<Internal | Blank>\n ): ThemeProp<T> {\n // styled-components のテンプレートに埋め込める関数\n return function interpolate({ theme }) {\n if (!isPresent(theme)) {\n // テーマが入っていない場合は復旧不可能なのでエラーにする\n throw noThemeProvider\n }\n\n const internals = [\n // ユーザーが定義したルール\n ...wrapArray(\n /**\n * こう書いてはいけない\n *\n * ❌\n * ```ts\n * const o = createO(theme)\n * const declaration = spec(o)\n * ```\n *\n * `o` を一時変数に入れてしまうと型 `T` の具象化が行われるので関数内に書く\n */\n specFn(/** o = */ createO(theme))\n ),\n\n // 必ず挿入される共通のルール\n transition(theme),\n ].filter(nonBlank)\n\n return toCSSObjects(internals)\n }\n }\n}\n\nexport type ThemeProp<T> = ({\n theme,\n}: {\n theme: T | undefined\n}) => CSSObject | CSSObject[]\n\nexport { focusVisibleFocusRingCss } from './styles/focusVisibleFocusRingCss'\nexport { disabledCss } from './styles/disabledCss'\nexport { assertiveRingCss } from './styles/assertiveRingCss'\nexport type { CharcoalThemeUtils } from './utils/CharcoalStyledTheme'\nexport { addThemeUtils } from './utils/addThemeUtils'\n","import {\n applyEffect,\n customPropertyToken,\n disabledSelector,\n filterObject,\n flatMapObject,\n notDisabledSelector,\n} from '@charcoal-ui/utils'\nimport { CharcoalAbstractTheme, EffectType, Key } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\n\n/**\n * Function used to assert a given code path is unreachable\n */\nexport function unreachable(): never\n/**\n * Function used to assert a given code path is unreachable.\n * Very useful for ensuring switches are exhaustive:\n *\n * ```ts\n * switch (a.type) {\n * case Types.A:\n * case Types.B:\n * break\n * default:\n * unreachable(a) // will cause a build error if there was\n * // a Types.C that was not checked\n * }\n * ```\n *\n * @param value Value to be asserted as unreachable\n */\n// NOTE: Uses separate overloads, _not_ `value?: never`, to not allow `undefined` to be passed\n\nexport function unreachable(value: never): never\nexport function unreachable(value?: never): never {\n throw new Error(\n arguments.length === 0\n ? 'unreachable'\n : `unreachable (${JSON.stringify(value)})`\n )\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// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Head<U> = U extends [infer T, ...any[]] ? T : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Tail<U> = U extends [any, any, ...any[]]\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: U) => any) extends (head: any, ...args: infer T) => any\n ? T\n : never\n : never\n// Buggy at ts@4.0.0-dev20200506\n// type Tail<U> = U extends [any, ...infer T] ? T : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RecursiveObjectAssign<T, S extends any[]> = {\n 0: T & Head<S>\n 1: RecursiveObjectAssign<T & Head<S>, Tail<S>>\n}[Tail<S> extends never ? 0 : 1]\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ObjectAssign<T extends any[]> = RecursiveObjectAssign<\n Record<string, unknown>,\n T\n>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function objectAssign<T extends any[]>(...sources: T) {\n return Object.assign({}, ...sources) as ObjectAssign<T>\n}\n\n/**\n * Object.keys の返り値の型を厳しめにしてくれるやつ。\n *\n * ジェネリクスは基本的に明示して使うことを推奨。\n *\n * このライブラリでは Theme オブジェクトのジェネリクスを引き回すケースが多く、\n * ジェネリクスを省略するといつのまにか keys の返り値が `string | number | symbol` になりがちなので\n *\n * @param obj - キーを取りたいオブジェクト。ジェネリクスを省略したとき `never[]` のような使えない型が返って欲しい\n */\nexport function keyof<\n // このジェネリクスは必須(書かないと返り値が `never[]` になる )\n T extends Record<never, unknown>,\n // このジェネリクスは書かなくて良い、obj の内容から推論される( T と矛盾してはいけない )\n _ extends T = T\n>(obj: _) {\n return Object.keys(obj) as unknown as (keyof T & string)[]\n}\n\nexport interface ReadonlyArrayConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isArray(value: any): value is readonly any[]\n}\n\nexport function extractNonNullKeys<V, K extends keyof V>(obj: {\n [key in K]: V[key]\n}) {\n return Object.entries(obj)\n .filter(([_, v]) => v !== null)\n .map(([k]) => k) as { [key in K]: V[key] extends null ? never : key }[K][]\n}\n\n/**\n * 配列じゃなかったら配列にする\n */\nexport function wrapArray<T>(value: ArrayOrSingle<T>): T[] {\n return Array.isArray(value) ? value : [value]\n}\n\nexport type ArrayOrSingle<T> = T | T[]\n\nexport const noThemeProvider = new Error(\n '`theme` is invalid. `<ThemeProvider>` is not likely mounted.'\n)\n\ntype NonNullableCSSObject = Record<keyof CSSObject, string | number>\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 }): NonNullableCSSObject {\n if (!isPresent(props.theme)) {\n throw noThemeProvider\n }\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 onEffectPseudo(effect: EffectType, css: CSSObject) {\n return effect === 'hover'\n ? { '&:hover': { [notDisabledSelector]: css } }\n : effect === 'press'\n ? { '&:active': { [notDisabledSelector]: css } }\n : // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n effect === 'disabled'\n ? { [disabledSelector]: css }\n : unreachable(effect)\n}\n\nexport function withPrefixes(...parts: string[]) {\n return parts.join('-')\n}\n","import { CSSObject } from 'styled-components'\n\nexport interface Context {\n cancelHalfLeadingPx?: number\n hasVerticalPadding?: boolean\n boxShadowTransition?: boolean\n colorTransition?: boolean\n backgroundColorTransition?: boolean\n}\n\n/**\n * 絶対にこれを export してはいけない\n *\n * さもないと `o.bg[internalSym]` みたいな叩き方が可能になってしまう(補完にも意図せず出てしまう)\n */\nconst internalSym: unique symbol = Symbol('internal')\n\n/**\n * CSSObject に変換可能なオブジェクトを作成する\n *\n * 実際に CSSObject に変換するには外部から `__DO_NOT_USE_GET_INTERNAL__` を使わなければならない\n *\n * これ以降メソッドチェーンが続いてもいいし、続かなくても良い\n */\nexport function createInternal({\n toCSS,\n context = {},\n}: {\n toCSS: (context: Context) => CSSObject\n context?: Context\n}): Internal {\n return {\n [internalSym]: {\n toCSS,\n context,\n },\n }\n}\n\nfunction __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal: Internal) {\n return internal[internalSym]\n}\n\nexport interface Internal {\n [internalSym]: {\n toCSS: (context: Context) => CSSObject\n context: Context\n }\n}\n\n// half-leadingをキャンセルするとき && 垂直方向のpaddingが無い時\n// -> before/afterを入れる\nexport const shouldCancelHalfLeading = ({\n cancelHalfLeadingPx,\n hasVerticalPadding = false,\n}: Context) => cancelHalfLeadingPx !== undefined && !hasVerticalPadding\n\n/**\n * 個別の Internal( o.〇〇 の返り値 )が提出した context の中身を1つの context にまとめる\n */\nexport function getContext(internals: Internal[]) {\n return internals.reduce<Context>(\n (context, internal) => ({\n ...context,\n ...__DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal).context,\n }),\n {}\n )\n}\n\n/**\n * 全ユーザー定義からコンテキスト生成し、styled-components 向けに CSSObject を構築\n */\nexport function toCSSObjects(internals: Internal[]): CSSObject[] {\n // 1パス目\n // 全ユーザー定義を舐めて相互に影響し合う定義をチェックし、その結果(コンテキスト)を取得\n const context = getContext(internals)\n\n // 2パス目\n // コンテキストを見ながら最適化されたCSSを構築\n return internals.map((v) =>\n __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(v).toCSS(context)\n )\n}\n","import { Key } from '@charcoal-ui/theme'\nimport { unreachable } from '../util'\n\n/**\n * 配列で指定したプロパティを動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param member オブジェクトに生やすプロパティ一覧\n * @param chain プロパティに格納される値を生成する関数\n *\n * @example\n *\n * const o = factory({}, ['red', 'blue'],\n * color => hex(color)\n * )\n *\n * console.log(o.red) //=> #ff0000\n */\nexport const defineProperties = <\n TSource,\n TMember extends readonly Key[],\n TValue\n>(\n source: TSource,\n member: TMember,\n chain: (key: TMember[number]) => TValue\n) =>\n Object.defineProperties(\n source,\n Object.fromEntries(\n member.map((key) => [\n key,\n { get: () => chain(key), enumerable: true, configurable: true },\n ])\n )\n ) as TSource & { readonly [key in TMember[number]]: TValue }\n\n/**\n * 配列で指定した名前のメソッドを動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param member オブジェクトに生やすメソッド名一覧\n * @param chain メソッドの戻り値になる値を生成する関数\n *\n * @example\n *\n * const o = defineMethods({}, ['red', 'blue'],\n * (color, alpha: number) => hex(color, alpha)\n * )\n *\n * console.log(o.red(0.5)) //=> #ff000077\n */\nexport const defineMethods = <\n TSource,\n TMember extends readonly string[],\n TValue,\n TArguments extends unknown[]\n>(\n source: TSource,\n member: TMember,\n chain: (key: TMember[number], ...args: TArguments) => TValue\n) =>\n Object.defineProperties(\n source,\n Object.fromEntries(\n member.map((key) => [\n key,\n {\n value: (...args: TArguments) => chain(key, ...args),\n enumerable: true,\n configurable: true,\n },\n ])\n )\n ) as TSource & {\n readonly [key in TMember[number]]: (...args: TArguments) => TValue\n }\n\n/**\n * オブジェクトで指定したプロパティ名と値を動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param def オブジェクトに生やす定義(プロパティ名と値)\n *\n * @example\n *\n * const o = defineConstantProperties({}, {\n * red: '#f00',\n * blue: '#00f',\n * })\n *\n * console.log(o.red) //=> #f00\n */\nexport const defineConstantProperties = <\n TSource,\n TDef extends { [key: string]: unknown }\n>(\n source: TSource,\n def: TDef\n) =>\n defineProperties(source, Object.keys(def), (key) => def[key]) as TSource &\n Readonly<TDef>\n\n/**\n * 配列で指定したモディファイア(プロパティ)をチェーン可能な再帰オブジェクトを動的に生やす\n *\n * @param modifiers オブジェクトに生やすモディファイヤ一覧\n * @param source 指定されたモディファイヤの一覧から値を生成する関数\n *\n * @example\n *\n * const o = definePropertyChains(['red', 'blue'],\n * modifiers => modifiers.map(color => hex(color)).join(',')\n * )\n *\n * console.log(o.red.blue) => #f00,#00f\n */\nexport const definePropertyChains = <TSource, T extends Key>(\n modifiers: readonly T[],\n source: (applied: readonly T[]) => TSource\n) =>\n (function definePropertiesRecursively(\n applied: readonly T[]\n ): PropertyChain<TSource, T> {\n const notApplied = modifiers.filter((v) => !applied.includes(v))\n return defineProperties(source(applied), notApplied, (modifier) =>\n notApplied.length === 0\n ? unreachable()\n : definePropertiesRecursively([...applied, modifier])\n )\n })([])\n\nexport type PropertyChain<TSource, TModifiers extends Key> = TSource & {\n readonly [key in TModifiers]: PropertyChain<TSource, Exclude<TModifiers, key>>\n}\n\n/**\n * 配列で指定したモディファイア(メソッド)をチェーン可能な再帰オブジェクトを動的に生やす\n *\n * @param modifiers オブジェクトに生やすモディファイヤ一覧\n * @param source 指定されたモディファイヤの一覧から値を生成する関数\n * @param _inferPhantom 関数形式のモディファイヤの引数型を推論するためのメタタイプ(引数の個数に合わせてタプルで指定する)\n *\n * @example\n *\n * const o = defineMethodChains(['red', 'blue'],\n * modifiers => modifiers.map(([color, alpha]) => hex(color, alpha)).join(',')\n * , {} as [number])\n *\n * console.log(o.red(0.5).blue(1)) => #ff000077,#0000ffff\n */\nexport const defineMethodChains = <\n TSource,\n T extends string,\n TArguments extends unknown[]\n>(\n modifiers: readonly T[],\n source: (applied: readonly [T, ...TArguments][]) => TSource,\n ..._inferPhantom: TArguments\n) =>\n (function defineMethodsRecursively(\n applied: readonly [T, ...TArguments][]\n ): MethodChain<TSource, T, TArguments> {\n const notApplied = modifiers.filter(\n (v) => !applied.map(([w]) => w).includes(v)\n )\n return defineMethods(\n source(applied),\n notApplied,\n (modifier, ...args: TArguments) =>\n notApplied.length === 0\n ? unreachable()\n : defineMethodsRecursively([...applied, [modifier, ...args]])\n )\n })([])\n\nexport type MethodChain<\n TSource,\n TModifiers extends string,\n TArguments extends unknown[]\n> = TSource & {\n readonly [key in TModifiers]: (\n ...args: TArguments\n ) => MethodChain<TSource, Exclude<TModifiers, key>, TArguments>\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\nimport { keyof, variable, withPrefixes } from '../util'\nimport { Internal, createInternal } from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\nimport { customPropertyToken } from '@charcoal-ui/utils'\n\nexport const borderDirections = ['top', 'right', 'bottom', 'left'] as const\ntype BorderDirection = (typeof borderDirections)[number]\n\nexport const createBorderCss = <T extends CharcoalAbstractTheme>(\n variant: keyof T['border'],\n directions: readonly BorderDirection[]\n): Internal => {\n const all = directions.length === 0\n\n const value = `solid 1px ${variable(\n customPropertyToken(withPrefixes('border', variant.toString()))\n )}`\n\n return createInternal({\n toCSS() {\n return {\n ...(all\n ? { border: value }\n : directions.reduce<CSSObject>(\n (acc, direction) => ({\n ...acc,\n [`border-${direction}`]: value,\n }),\n {}\n )),\n }\n },\n })\n}\n\nexport default function border<T extends CharcoalAbstractTheme>(theme: T) {\n const borderTypes = keyof<T['border']>(theme.border)\n\n const borderObject = defineConstantProperties(\n {},\n {\n border: defineProperties({}, borderTypes, (variant) =>\n definePropertyChains(borderDirections, (modifiers) =>\n createBorderCss(variant, modifiers)\n )\n ),\n }\n )\n return borderObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { Internal, createInternal } from '../internals'\nimport { defineConstantProperties } from '../factories/lib'\n\nexport const createBorderRadiusCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (size: keyof T['borderRadius']): Internal => {\n return createInternal({\n toCSS() {\n return {\n borderRadius: px(theme.borderRadius[size]),\n }\n },\n })\n }\n\nexport default function borderRadius<T extends CharcoalAbstractTheme>(\n theme: T\n) {\n // 角丸\n const borderRadiusCss = createBorderRadiusCss(theme)\n const borderRadiusObject = defineConstantProperties(\n {},\n {\n borderRadius: (radius: keyof T['borderRadius']) =>\n borderRadiusCss(radius),\n }\n )\n\n return borderRadiusObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport {\n applyEffect,\n applyEffectToGradient,\n customPropertyToken,\n dur,\n gradient,\n GradientDirection,\n} from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport warning from 'warning'\nimport {\n keyof,\n objectAssign,\n isSupportedEffect,\n onEffectPseudo,\n variable,\n} from '../util'\nimport {\n createInternal,\n Internal,\n Context,\n shouldCancelHalfLeading,\n} from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\nimport { TRANSITION_DURATION } from './transition'\n\nconst colorProperties = ['bg', 'font'] as const\nexport type ColorProperty = (typeof colorProperties)[number]\n\nfunction targetProperty(target: ColorProperty) {\n return target === 'bg' ? 'background-color' : 'color'\n}\n\nexport const createColorCss =\n <T extends CharcoalAbstractTheme>(_theme: T) =>\n (\n target: ColorProperty,\n color: keyof T['color'],\n effects: readonly (keyof T['effect'])[] = []\n ): Internal => {\n function toCSS() {\n return {\n [targetProperty(target)]: variable(\n customPropertyToken(color.toString())\n ),\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n [targetProperty(target)]: variable(\n customPropertyToken(color.toString(), [effect])\n ),\n }),\n }),\n {}\n ),\n }\n }\n\n return createInternal({\n toCSS,\n context:\n effects.length > 0\n ? target === 'font'\n ? {\n colorTransition: true,\n }\n : {\n backgroundColorTransition: true,\n }\n : {},\n })\n }\n\nexport const createGradientColorCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n color: keyof T['gradientColor'],\n effects: readonly (keyof T['effect'])[] = [],\n direction: GradientDirection\n ): Internal => {\n const toLinearGradient = gradient(direction)\n\n function toCSS(context: Context): CSSObject {\n const optimized = !shouldCancelHalfLeading(context)\n const duration = dur(TRANSITION_DURATION)\n\n if (optimized && effects.length > 0) {\n return {\n position: 'relative',\n zIndex: 0,\n overflow: 'hidden',\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n '&::before': {\n zIndex: -1,\n ...overlayElement,\n transition: `${duration} background-color`,\n },\n '&::after': {\n zIndex: -2,\n ...overlayElement,\n ...toLinearGradient(theme.gradientColor[color]),\n },\n ...onEffectPseudo(effect, {\n '&::before': {\n backgroundColor: applyEffect(\n null,\n theme.effect[effect] ?? []\n ),\n },\n }),\n }),\n {}\n ),\n }\n }\n\n warning(\n effects.length === 0,\n\n `'Transition' will not be applied. You can get around this by specifying 'preserveHalfLeading' or both 'padding' and 'typography'.`\n )\n\n return {\n ...toLinearGradient(theme.gradientColor[color]),\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n ...toLinearGradient(\n applyEffectToGradient(theme.effect[effect] ?? [])(\n theme.gradientColor[color]\n )\n ),\n }),\n }),\n {}\n ),\n }\n }\n\n return createInternal({ toCSS })\n }\n\nconst overlayElement: CSSObject = {\n content: \"''\",\n display: 'block',\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n}\n\nexport default function colors<T extends CharcoalAbstractTheme>(theme: T) {\n const colors = keyof<T['color']>(theme.color)\n const effects = keyof<T['effect']>(theme.effect)\n\n // 色\n const gradientColors = keyof<T['gradientColor']>(theme.gradientColor)\n const colorCss = createColorCss(theme)\n const gradientColorCss = createGradientColorCss(theme)\n\n const colorObject = defineConstantProperties(\n {},\n {\n bg: objectAssign(\n defineProperties({}, colors, (color) =>\n definePropertyChains(effects, (modifiers) =>\n colorCss('bg', color, modifiers)\n )\n ),\n defineProperties(\n {},\n gradientColors,\n (color) => (direction: GradientDirection) =>\n definePropertyChains(effects, (modifiers) =>\n gradientColorCss(color, modifiers, direction)\n )\n )\n ),\n font: defineProperties({}, colors, (color) =>\n definePropertyChains(effects, (modifiers) =>\n colorCss('font', color, modifiers)\n )\n ),\n }\n )\n\n return colorObject\n}\n","import { dur } from '@charcoal-ui/utils'\nimport { isPresent } from '../util'\nimport { Internal, createInternal, Context } from '../internals'\n\n// TODO: deprecate\nexport const TRANSITION_DURATION = 0.2\n\n/**\n * context の状態を元に transition を追加する。必ず一番最後に呼ぶ\n */\nexport default function transition(_theme: unknown): Internal {\n const duration = dur(TRANSITION_DURATION)\n const transition = (property: string[]) => ({\n transition: property.map((v) => `${duration} ${v}`).join(', '),\n })\n\n function toCSS({\n colorTransition = false,\n backgroundColorTransition = false,\n boxShadowTransition = false,\n }: Context) {\n return transition(\n [\n colorTransition ? 'color' : null,\n backgroundColorTransition ? 'background-color' : null,\n boxShadowTransition ? 'box-shadow' : null,\n ].filter(isPresent)\n )\n }\n\n return createInternal({ toCSS })\n}\n","import { CharcoalAbstractTheme, EffectType } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\nimport {\n isSupportedEffect,\n keyof,\n onEffectPseudo,\n ReadonlyArrayConstructor,\n unreachable,\n} from '../util'\nimport { Internal, createInternal } from '../internals'\nimport { definePropertyChains } from '../factories/lib'\n\nexport const createElementEffectCss =\n <\n T extends CharcoalAbstractTheme,\n TElementEffect extends T['elementEffect']\n >(theme: {\n elementEffect: TElementEffect\n }) =>\n (effects: readonly (keyof TElementEffect)[] = []): Internal =>\n createInternal({\n toCSS() {\n return effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n opacity:\n !(Array as ReadonlyArrayConstructor).isArray(\n theme.elementEffect[effect]\n ) && theme.elementEffect[effect]?.type === 'opacity'\n ? theme.elementEffect[effect]?.opacity\n : unreachable(),\n }),\n }),\n {}\n )\n },\n })\n\nexport default function elementEffect<T extends CharcoalAbstractTheme>(\n theme: T\n) {\n const effectTypes = keyof<T['elementEffect']>(\n theme.elementEffect\n ) as EffectType[]\n\n // 要素へのエフェクト (etc: 透過)\n const elementEffectCss = createElementEffectCss(theme)\n const elementEffectObject = definePropertyChains(effectTypes, (modifiers) =>\n elementEffectCss(modifiers)\n )\n\n return elementEffectObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px, notDisabledSelector } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport { keyof } from '../util'\nimport { Internal, createInternal } from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\n\nexport const outlineType = ['focus'] as const\ntype OutlineType = (typeof outlineType)[number]\n\nconst outlineCss = (weight: number, color: string) => ({\n boxShadow: `0 0 0 ${px(weight)} ${color}`,\n})\n\nexport const createOutlineColorCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n variant: keyof T['outline'],\n modifiers: readonly OutlineType[]\n ): Internal => {\n const weight = theme.outline[variant].weight\n const color = theme.outline[variant].color\n\n return createInternal({\n toCSS() {\n return modifiers.includes('focus')\n ? onFocus(outlineCss(weight, color))\n : { '&&': { [notDisabledSelector]: outlineCss(weight, color) } }\n },\n context: {\n boxShadowTransition: true,\n },\n })\n }\n\n/**\n * @see https://developer.mozilla.org/ja/docs/Web/CSS/:focus-visible#selectively_showing_the_focus_indicator\n */\nconst onFocus = (css: CSSObject) => ({\n [notDisabledSelector]: {\n '&:focus, &:active': {\n outline: 'none',\n ...css,\n },\n\n '&:focus:not(:focus-visible), &:active:not(:focus-visible)': {\n outline: 'none',\n },\n\n '&:focus-visible': {\n outline: 'none',\n ...css,\n },\n },\n})\n\nexport default function outline<T extends CharcoalAbstractTheme>(theme: T) {\n const outlineCss = createOutlineColorCss(theme)\n\n const outlineObject = defineConstantProperties(\n {},\n {\n outline: defineProperties(\n {},\n keyof<T['outline']>(theme.outline),\n (variant) =>\n definePropertyChains(outlineType, (modifiers) =>\n outlineCss(variant, modifiers)\n )\n ),\n }\n )\n\n return outlineObject\n}\n","import { columnSystem } from '@charcoal-ui/foundation'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { Internal, createInternal } from '../internals'\nimport { defineProperties, defineConstantProperties } from '../factories/lib'\n\nexport const fixedProperties = ['width', 'height'] as const\ntype FixedProperty = (typeof fixedProperties)[number]\n\nexport const createFixedPxCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (property: FixedProperty, size: keyof T['spacing'] | 'auto'): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: size === 'auto' ? 'auto' : px(theme.spacing[size]),\n }\n },\n })\n\nexport const createFixedRelativeCss =\n <T extends CharcoalAbstractTheme>(_theme: T) =>\n (property: FixedProperty, amount: '100%' | 'auto'): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: amount,\n }\n },\n })\n\nexport const createFixedColumnCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (property: FixedProperty, span: number): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: px(\n columnSystem(span, theme.grid.unit.column, theme.grid.unit.gutter)\n ),\n }\n },\n })\n\nexport default function size<T extends CharcoalAbstractTheme>(theme: T) {\n const fixedPxCss = createFixedPxCss(theme)\n const fixedColumnCss = createFixedColumnCss(theme)\n const fixedRelativeCss = createFixedRelativeCss(theme)\n const fixedObject = defineProperties({}, fixedProperties, (property) =>\n defineConstantProperties(\n {},\n {\n px: (size: keyof T['spacing'] | 'auto') => fixedPxCss(property, size),\n column: (span: number) => fixedColumnCss(property, span),\n auto: fixedRelativeCss(property, 'auto'),\n full: fixedRelativeCss(property, '100%'),\n }\n )\n )\n return fixedObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport { Internal, createInternal, Context } from '../internals'\nimport { defineProperties, defineMethodChains } from '../factories/lib'\n\nexport const spacingProperties = ['margin', 'padding'] as const\nexport const spacingDirections = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'vertical',\n 'horizontal',\n 'all',\n] as const\ntype SpacingProperty = (typeof spacingProperties)[number]\ntype SpacingDirection = (typeof spacingDirections)[number]\n\nfunction spacingProperty(\n property: SpacingProperty,\n direction: 'top' | 'right' | 'bottom' | 'left'\n) {\n return `${property}-${direction}`\n}\n\nexport const createSpacingCss =\n <T extends CharcoalAbstractTheme>(theme: { spacing: T['spacing'] }) =>\n (\n property: SpacingProperty,\n modifiers: readonly [SpacingDirection, keyof T['spacing'] | 'auto'][]\n ): Internal => {\n const { top, right, bottom, left } = modifiers.reduce(\n (acc, [direction, size]) => {\n if (direction === 'all') {\n acc.top = size\n acc.right = size\n acc.bottom = size\n acc.left = size\n } else if (direction === 'vertical') {\n acc.top = size\n acc.bottom = size\n } else if (direction === 'horizontal') {\n acc.right = size\n acc.left = size\n } else {\n acc[direction] = size\n }\n return acc\n },\n {} as Partial<\n Record<'top' | 'right' | 'bottom' | 'left', keyof T['spacing'] | 'auto'>\n >\n )\n\n const hasVerticalPadding =\n property === 'padding' &&\n top !== undefined &&\n bottom !== undefined &&\n top !== 'auto' &&\n bottom !== 'auto'\n\n function toCSS({ cancelHalfLeadingPx = 0 }: Context): CSSObject {\n return {\n ...(top !== undefined && {\n [spacingProperty(property, 'top')]:\n top === 'auto'\n ? 'auto'\n : px(\n theme.spacing[top] +\n (hasVerticalPadding ? cancelHalfLeadingPx : 0)\n ),\n }),\n ...(bottom !== undefined && {\n [spacingProperty(property, 'bottom')]:\n bottom === 'auto'\n ? 'auto'\n : px(\n theme.spacing[bottom] +\n (hasVerticalPadding ? cancelHalfLeadingPx : 0)\n ),\n }),\n ...(right !== undefined && {\n [spacingProperty(property, 'right')]:\n right === 'auto' ? 'auto' : px(theme.spacing[right]),\n }),\n ...(left !== undefined && {\n [spacingProperty(property, 'left')]:\n left === 'auto' ? 'auto' : px(theme.spacing[left]),\n }),\n }\n }\n\n return createInternal({\n toCSS,\n context: hasVerticalPadding ? { hasVerticalPadding: true } : {},\n })\n }\n\nexport default function spacing<T extends CharcoalAbstractTheme>(theme: T) {\n const spacingCss = createSpacingCss(theme)\n const spacingObject = defineProperties(\n {},\n spacingProperties,\n (spacingProperty) =>\n defineMethodChains(\n spacingDirections,\n (modifiers) => spacingCss(spacingProperty, modifiers),\n {} as keyof T['spacing'] | 'auto' // 推論のためのメタタイプ\n )\n )\n return spacingObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { halfLeading, px } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport {\n Internal,\n createInternal,\n shouldCancelHalfLeading,\n Context,\n} from '../internals'\nimport { defineProperties, definePropertyChains } from '../factories/lib'\n\nexport const createTypographyCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n size: keyof T['typography']['size'],\n options: {\n preserveHalfLeading?: boolean\n monospace?: boolean\n bold?: boolean\n } = {}\n ): Internal => {\n const {\n preserveHalfLeading = false,\n monospace = false,\n bold = false,\n } = options\n const descriptor = theme.typography.size[size]\n const margin = -halfLeading(descriptor)\n\n function toCSS(context: Context): CSSObject {\n return {\n fontSize: px(descriptor.fontSize),\n lineHeight: px(descriptor.lineHeight),\n ...(monospace && {\n fontFamily: 'monospace',\n }),\n ...(bold && {\n fontWeight: 'bold',\n }),\n ...(shouldCancelHalfLeading(context) && {\n // prevent margin collapsing\n display: 'flow-root',\n // cancel half-leading with negative margin\n '&::before': {\n ...leadingCancel,\n marginTop: px(margin),\n },\n '&::after': {\n ...leadingCancel,\n marginBottom: px(margin),\n },\n }),\n }\n }\n\n return createInternal({\n toCSS,\n context: !preserveHalfLeading\n ? {\n cancelHalfLeadingPx: margin,\n }\n : {},\n })\n }\n\nconst leadingCancel: CSSObject = {\n display: 'block',\n width: 0,\n height: 0,\n content: `''`,\n}\n\n// タイポグラフィ\nconst typographyModifiers = [\n // TODO\n 'monospace',\n 'bold',\n 'preserveHalfLeading',\n] as const\n\nexport default function typography<T extends CharcoalAbstractTheme>(theme: T) {\n const typographyCss = createTypographyCss(theme)\n const typographyObject = defineProperties(\n {},\n ['typography'] as const,\n (_) => (size: keyof T['typography']['size']) =>\n definePropertyChains(typographyModifiers, (modifiers) =>\n typographyCss(size, {\n preserveHalfLeading: modifiers.includes('preserveHalfLeading'),\n monospace: modifiers.includes('monospace'),\n bold: modifiers.includes('bold'),\n })\n )\n )\n\n return typographyObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { objectAssign } from '../util'\nimport border from './border'\nimport borderRadius from './borderRadius'\nimport colors from './colors'\nimport elementEffect from './elementEffect'\nimport outline from './outline'\nimport size from './size'\nimport spacing from './spacing'\nimport typography from './typography'\n\n/**\n * `theme(o => [...])` の `o` の部分を構築する\n *\n * @param theme テーマオブジェクト\n */\nexport default function createO<T extends CharcoalAbstractTheme>(\n theme: {\n // factoryの第二引数に入れ込むものだけ明示的に型変数を展開しておくことで型の具象化を遅延する\n color: T['color']\n gradientColor: T['gradientColor']\n border: T['border']\n outline: T['outline']\n } & Omit<T, 'color' | 'gradientColor' | 'border' | 'outline'>\n) {\n return objectAssign(\n colors(theme),\n typography(theme),\n spacing(theme),\n size(theme),\n elementEffect(theme),\n border(theme),\n borderRadius(theme),\n outline(theme)\n )\n}\n","import { createGlobalStyle, css } from 'styled-components'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { defineThemeVariables, withPrefixes } from './util'\nimport { mapObject } from '@charcoal-ui/utils'\n\nconst GlobalStyle = createGlobalStyle<{\n themeMap: ThemeMap<Theme>\n background?: keyof ThemeMap<Theme>[string]['color']\n}>`\n ${({ themeMap, background }) =>\n Object.entries(themeMap).map(([key, theme]) =>\n key.startsWith('@media')\n ? css`\n ${key} {\n :root {\n ${background !== undefined &&\n css`\n background-color: ${theme.color[background]};\n `}\n ${defineColorVariableCSS(theme)}\n }\n }\n `\n : css`\n /* stylelint-disable-next-line no-duplicate-selectors */\n ${key} {\n ${background !== undefined &&\n css`\n background-color: ${theme.color[background]};\n `}\n ${defineColorVariableCSS(theme)}\n }\n `\n )}\n`\n\nexport interface ThemeMap<T extends Theme> {\n ':root': T\n [mediaQuery: `@media (${string})`]: T\n [selector: string]: T\n}\n\ntype Theme = Pick<CharcoalAbstractTheme, 'color' | 'effect' | 'border'>\n\nexport default function TokenInjector<T extends Theme>({\n theme: themeMap,\n background,\n}: {\n theme: ThemeMap<T>\n background?: keyof ThemeMap<T>[string]['color']\n}) {\n return <GlobalStyle themeMap={themeMap} background={background} />\n}\n\nconst 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\n return toCSSVariables(colors)\n}\n\nfunction toCSSVariables(css: Record<string, string | number>) {\n return Object.entries(css)\n .map(([varName, value]) => variableDefinition(varName, value.toString()))\n .join(';')\n}\n\nconst variableDefinition = (prop: string, value: string) => `${prop}: ${value}`\n","import { useEffect, useMemo, useState } from 'react'\n\nexport const LOCAL_STORAGE_KEY = 'charcoal-theme'\nexport const DEFAULT_ROOT_ATTRIBUTE = 'theme'\n\nconst keyStringRegExp = new RegExp(/^(\\w|-)+$/)\n\n/**\n * 文字列が英数字_-のみで構成されているか検証する。不正な文字列ならエラーを投げる\n * @param key 検証するキー\n */\nexport function assertKeyString(key: string) {\n if (!keyStringRegExp.test(key)) {\n throw new Error(`Unexpected key :${key}, expect: /^(\\\\w|-)+$/`)\n }\n}\n\n/**\n * `<html data-theme=\"dark\">` のような設定を行うデフォルトのセッター\n */\nexport const themeSetter =\n (attr: string = DEFAULT_ROOT_ATTRIBUTE) =>\n (theme: string | undefined) => {\n assertKeyString(attr)\n if (theme !== undefined) {\n document.documentElement.dataset[attr] = theme\n } else {\n delete document.documentElement.dataset[attr]\n }\n }\n\n/**\n * `<html data-theme=\"dark\">` にマッチするセレクタを生成する\n */\nexport function themeSelector<\n T extends string,\n S extends string = typeof DEFAULT_ROOT_ATTRIBUTE\n>(theme: T, attr?: S) {\n return `:root[data-${attr ?? DEFAULT_ROOT_ATTRIBUTE}='${theme}']` as const\n}\n\n/**\n * prefers-color-scheme を利用する media クエリを生成する\n */\nexport function prefersColorScheme<T extends 'light' | 'dark'>(theme: T) {\n return `@media (prefers-color-scheme: ${theme})` as const\n}\n\n/**\n * LocalStorageからテーマの情報を取得して、変化時にテーマをセットするhooks\n */\nexport function useThemeSetter({\n key = LOCAL_STORAGE_KEY,\n setter = themeSetter(),\n}: { key?: string; setter?: (theme: string | undefined) => void } = {}) {\n const [theme, , system] = useTheme(key)\n\n useEffect(() => {\n if (theme === undefined) {\n return\n }\n // prefers-color-scheme から値を取っている場合にはcssのみで処理したいのでアンセットする\n setter(system ? undefined : theme)\n }, [setter, system, theme])\n}\n\n/**\n * 同期的にLocalStorageからテーマを取得するヘルパ\n */\nexport function getThemeSync(key: string = LOCAL_STORAGE_KEY) {\n const theme = localStorage.getItem(key)\n return theme\n}\n\n/**\n * LocalStorage, prefers-color-scheme からテーマの情報を取得して、現在のテーマを返すhooks\n *\n * `dark` `light` という名前だけは特別扱いされていて、prefers-color-schemeにマッチした場合に返ります\n */\nexport const useTheme = (localStorageKey: string = LOCAL_STORAGE_KEY) => {\n assertKeyString(localStorageKey)\n const isDark = useMedia('(prefers-color-scheme: dark)')\n const media = isDark !== undefined ? (isDark ? 'dark' : 'light') : undefined\n const [local, setTheme, ready] =\n useLocalStorage<typeof media>(localStorageKey)\n const theme = !ready || media === undefined ? undefined : local ?? media\n const system = local === undefined\n return [theme, setTheme, system] as const\n}\n\nexport function useLocalStorage<T>(key: string, defaultValue?: () => T) {\n const [ready, setReady] = useState(false)\n const [state, setState] = useState<T>()\n const defaultValueMemo = useMemo(() => defaultValue?.(), [defaultValue])\n\n useEffect(() => {\n fetch()\n window.addEventListener('storage', handleStorage)\n return () => {\n window.removeEventListener('storage', handleStorage)\n }\n })\n\n const handleStorage = (e: StorageEvent) => {\n if (e.storageArea !== localStorage) {\n return\n }\n if (e.key !== key) {\n return\n }\n fetch()\n }\n\n const fetch = () => {\n const raw = localStorage.getItem(key)\n setState((raw !== null ? deserialize(raw) : null) ?? defaultValueMemo)\n setReady(true)\n }\n\n const set = (value: T | undefined) => {\n if (value === undefined) {\n // undefinedがセットされる場合にはkeyごと削除\n localStorage.removeItem(key)\n } else {\n const raw = serialize(value)\n localStorage.setItem(key, raw)\n }\n\n // 同一ウィンドウではstorageイベントが発火しないので、手動で発火させる\n const event = new StorageEvent('storage', {\n bubbles: true,\n cancelable: false,\n key,\n url: location.href,\n storageArea: localStorage,\n })\n dispatchEvent(event)\n }\n\n return [state ?? defaultValueMemo, set, ready] as const\n}\n\nfunction deserialize<T>(raw: string): T {\n try {\n return JSON.parse(raw) as T\n } catch {\n // syntax error はすべて文字列として扱う\n return raw as unknown as T\n }\n}\n\nfunction serialize(value: unknown): string {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value)\n }\n}\n\nexport function useMedia(query: string) {\n const [match, setState] = useState<boolean>()\n\n useEffect(() => {\n const matcher = window.matchMedia(query)\n\n const onChange = () => {\n setState(matcher.matches)\n }\n\n matcher.addEventListener('change', onChange)\n\n setState(matcher.matches)\n\n return () => {\n matcher.removeEventListener('change', onChange)\n }\n }, [query])\n\n return match\n}\n","import { css } from 'styled-components'\n\nconst boldCss = css`\n font-weight: bold;\n`\n\nexport const removeHalfLeadingCss = css`\n &::before {\n display: block;\n width: 0;\n height: 0;\n content: '';\n margin-top: -4px;\n }\n\n &::after {\n display: block;\n width: 0;\n height: 0;\n content: '';\n margin-bottom: -4px;\n }\n`\n\nexport function typography(\n size: 12 | 14 | 16 | 20,\n bold = false,\n preserveHalfLeading = false\n) {\n const cssObj = css`\n font-size: ${size}px;\n line-height: ${size + 8}px;\n display: flow-root;\n ${bold === true && boldCss}\n ${preserveHalfLeading !== true && removeHalfLeadingCss}\n `\n\n return cssObj\n}\n","import {\n assertKeyString,\n DEFAULT_ROOT_ATTRIBUTE,\n LOCAL_STORAGE_KEY,\n} from './helper'\n\ninterface Props {\n localStorageKey: string\n rootAttribute: string\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するコードを取得する\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns ソースコードの文字列\n */\nexport function makeSetThemeScriptCode({\n localStorageKey = defaultProps.localStorageKey,\n rootAttribute = defaultProps.rootAttribute,\n}: Partial<Props> = defaultProps) {\n assertKeyString(localStorageKey)\n assertKeyString(rootAttribute)\n return `'use strict';\n(function () {\n var localStorageKey = '${localStorageKey}'\n var rootAttribute = '${rootAttribute}'\n var currentTheme = localStorage.getItem(localStorageKey);\n if (currentTheme) {\n document.documentElement.dataset[rootAttribute] = currentTheme;\n }\n})();\n`\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するスクリプトタグ\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns\n */\nexport function SetThemeScript(props: Props) {\n const src = makeSetThemeScriptCode(props)\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: src,\n }}\n />\n )\n}\n\nconst defaultProps: Props = {\n localStorageKey: LOCAL_STORAGE_KEY,\n rootAttribute: DEFAULT_ROOT_ATTRIBUTE,\n}\n\nSetThemeScript.defaultProps = defaultProps\n","import { css } from 'styled-components'\n\n/**\n * `&:focus:not(:focus-visible)` is backwards compatibility for legacy browsers.\n *\n * cf. https://github.com/WICG/focus-visible#backwards-compatibility\n */\nexport const focusVisibleFocusRingCss = css`\n &:focus {\n outline: none;\n box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);\n }\n &:focus:not(:focus-visible) {\n box-shadow: none;\n }\n &:focus-visible {\n box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);\n }\n`\n","import { css } from 'styled-components'\n\nexport const disabledCss = css`\n &:disabled,\n &[aria-disabled]:not([aria-disabled='false']) {\n opacity: 0.32;\n cursor: default;\n }\n`\n","import { css } from 'styled-components'\n\nexport const assertiveRingCss = css`\n box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);\n`\n","import { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { SpacingType } from './helpers/SpacingType'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function margin(arg1: SpacingType): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType,\n arg3: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType,\n arg3: SpacingType,\n arg4: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2?: SpacingType,\n arg3?: SpacingType,\n arg4?: SpacingType\n) {\n return css`\n margin: ${pxIfNum(arg1)} ${pxIfNum(arg2)} ${pxIfNum(arg3)} ${pxIfNum(arg4)};\n `\n}\n\nexport function marginTop(v: SpacingType) {\n return css`\n margin-top: ${pxIfNum(v)};\n `\n}\n\nexport function marginBottom(v: SpacingType) {\n return css`\n margin-bottom: ${pxIfNum(v)};\n `\n}\n\nexport function marginLeft(v: SpacingType) {\n return css`\n margin-left: ${pxIfNum(v)};\n `\n}\n\nexport function marginRight(v: SpacingType) {\n return css`\n margin-right: ${pxIfNum(v)};\n `\n}\n","export function pxIfNum(v?: number | string) {\n if (v === undefined) return ''\n if (typeof v === 'number') return `${v}px`\n return v\n}\n","import { Spacing } from '@charcoal-ui/theme'\nimport { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function padding(arg1: keyof Spacing): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing,\n arg3: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing,\n arg3: keyof Spacing,\n arg4: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2?: keyof Spacing,\n arg3?: keyof Spacing,\n arg4?: keyof Spacing\n) {\n return css`\n padding: ${arg1}px ${pxIfNum(arg2)} ${pxIfNum(arg3)} ${pxIfNum(arg4)};\n `\n}\n\nexport function paddingTop(v: keyof Spacing) {\n return css`\n padding-top: ${v}px;\n `\n}\n\nexport function paddingBottom(v: keyof Spacing) {\n return css`\n padding-bottom: ${v}px;\n `\n}\n\nexport function paddingLeft(v: keyof Spacing) {\n return css`\n padding-left: ${v}px;\n `\n}\n\nexport function paddingRight(v: keyof Spacing) {\n return css`\n padding-right: ${v}px;\n `\n}\n","import { Spacing } from '@charcoal-ui/theme'\nimport { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function gap(v1: keyof Spacing): FlattenSimpleInterpolation\n\nexport function gap(\n v1: keyof Spacing,\n v2: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function gap(v1: keyof Spacing, v2?: keyof Spacing) {\n return css`\n gap: ${v1}px ${pxIfNum(v2)};\n `\n}\n\nexport function rowGap(v: keyof Spacing) {\n return css`\n row-gap: ${v}px;\n `\n}\n\nexport function columnGap(v: keyof Spacing) {\n return css`\n column-gap: ${v}px;\n `\n}\n","import { CharcoalTheme } from '@charcoal-ui/theme'\nimport { CharcoalThemeUtils } from './CharcoalStyledTheme'\nimport {\n margin,\n marginBottom,\n marginLeft,\n marginRight,\n marginTop,\n} from './margin'\nimport {\n padding,\n paddingBottom,\n paddingLeft,\n paddingRight,\n paddingTop,\n} from './padding'\nimport { columnGap, gap, rowGap } from './gap'\nimport { disabledCss } from '../styles/disabledCss'\nimport { typography } from './typographyCss'\nimport { focusVisibleFocusRingCss } from '../styles/focusVisibleFocusRingCss'\nimport { assertiveRingCss } from '../styles/assertiveRingCss'\n\n/**\n * Adds some utilities to the theme object.\n * They can be used as an alternative `createTheme`(`theme(o=>)`) for styling.\n */\nexport function addThemeUtils(\n theme: CharcoalTheme\n): CharcoalTheme & CharcoalThemeUtils {\n return {\n ...theme,\n utils: {\n margin,\n marginTop,\n marginLeft,\n marginBottom,\n marginRight,\n padding,\n paddingTop,\n paddingLeft,\n paddingBottom,\n paddingRight,\n gap,\n rowGap,\n columnGap,\n typography,\n focusVisibleFocusRingCss,\n assertiveRingCss,\n disabledCss,\n },\n }\n}\n"],"mappings":"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","names":["colors","css","import_utils","import_utils","size","import_utils","import_utils","transition","warning","colors","import_utils","css","outlineCss","import_utils","size","import_utils","size","spacingProperty","import_utils","size","margin","import_utils","colors","css","import_styled_components","typography","size","import_jsx_runtime","import_styled_components","import_styled_components","import_styled_components","import_styled_components","import_styled_components","import_styled_components","typography","theme"]}
package/dist/index.esm.js CHANGED
@@ -659,10 +659,7 @@ import { createGlobalStyle, css } from "styled-components";
659
659
  import { mapObject } from "@charcoal-ui/utils";
660
660
  import { jsx } from "react/jsx-runtime";
661
661
  var GlobalStyle = createGlobalStyle`
662
- ${({
663
- themeMap,
664
- background
665
- }) => Object.entries(themeMap).map(
662
+ ${({ themeMap, background }) => Object.entries(themeMap).map(
666
663
  ([key, theme]) => key.startsWith("@media") ? css`
667
664
  ${key} {
668
665
  :root {
@@ -911,8 +908,8 @@ var focusVisibleFocusRingCss = css3`
911
908
  // src/styles/disabledCss.ts
912
909
  import { css as css4 } from "styled-components";
913
910
  var disabledCss = css4`
914
- :disabled,
915
- [aria-disabled]:not([aria-disabled='false']) {
911
+ &:disabled,
912
+ &[aria-disabled]:not([aria-disabled='false']) {
916
913
  opacity: 0.32;
917
914
  cursor: default;
918
915
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util.ts","../src/internals/index.ts","../src/factories/lib.ts","../src/builders/border.ts","../src/builders/borderRadius.ts","../src/builders/colors.ts","../src/builders/transition.ts","../src/builders/elementEffect.ts","../src/builders/outline.ts","../src/builders/size.ts","../src/builders/spacing.ts","../src/builders/typography.ts","../src/builders/o.ts","../src/TokenInjector.tsx","../src/helper.ts","../src/utils/typographyCss.ts","../src/SetThemeScript.tsx","../src/styles/focusVisibleFocusRingCss.ts","../src/styles/disabledCss.ts","../src/styles/assertiveRingCss.ts","../src/utils/margin.ts","../src/utils/helpers/pxIfNum.ts","../src/utils/padding.ts","../src/utils/gap.ts","../src/utils/addThemeUtils.ts","../src/index.ts"],"sourcesContent":["import {\n applyEffect,\n customPropertyToken,\n disabledSelector,\n filterObject,\n flatMapObject,\n notDisabledSelector,\n} from '@charcoal-ui/utils'\nimport { CharcoalAbstractTheme, EffectType, Key } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\n\n/**\n * Function used to assert a given code path is unreachable\n */\nexport function unreachable(): never\n/**\n * Function used to assert a given code path is unreachable.\n * Very useful for ensuring switches are exhaustive:\n *\n * ```ts\n * switch (a.type) {\n * case Types.A:\n * case Types.B:\n * break\n * default:\n * unreachable(a) // will cause a build error if there was\n * // a Types.C that was not checked\n * }\n * ```\n *\n * @param value Value to be asserted as unreachable\n */\n// NOTE: Uses separate overloads, _not_ `value?: never`, to not allow `undefined` to be passed\n\nexport function unreachable(value: never): never\nexport function unreachable(value?: never): never {\n throw new Error(\n arguments.length === 0\n ? 'unreachable'\n : `unreachable (${JSON.stringify(value)})`\n )\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// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Head<U> = U extends [infer T, ...any[]] ? T : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Tail<U> = U extends [any, any, ...any[]]\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: U) => any) extends (head: any, ...args: infer T) => any\n ? T\n : never\n : never\n// Buggy at ts@4.0.0-dev20200506\n// type Tail<U> = U extends [any, ...infer T] ? T : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RecursiveObjectAssign<T, S extends any[]> = {\n 0: T & Head<S>\n 1: RecursiveObjectAssign<T & Head<S>, Tail<S>>\n}[Tail<S> extends never ? 0 : 1]\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ObjectAssign<T extends any[]> = RecursiveObjectAssign<\n Record<string, unknown>,\n T\n>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function objectAssign<T extends any[]>(...sources: T) {\n return Object.assign({}, ...sources) as ObjectAssign<T>\n}\n\n/**\n * Object.keys の返り値の型を厳しめにしてくれるやつ。\n *\n * ジェネリクスは基本的に明示して使うことを推奨。\n *\n * このライブラリでは Theme オブジェクトのジェネリクスを引き回すケースが多く、\n * ジェネリクスを省略するといつのまにか keys の返り値が `string | number | symbol` になりがちなので\n *\n * @param obj - キーを取りたいオブジェクト。ジェネリクスを省略したとき `never[]` のような使えない型が返って欲しい\n */\nexport function keyof<\n // このジェネリクスは必須(書かないと返り値が `never[]` になる )\n T extends Record<never, unknown>,\n // このジェネリクスは書かなくて良い、obj の内容から推論される( T と矛盾してはいけない )\n _ extends T = T\n>(obj: _) {\n return Object.keys(obj) as unknown as (keyof T & string)[]\n}\n\nexport interface ReadonlyArrayConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isArray(value: any): value is readonly any[]\n}\n\nexport function extractNonNullKeys<V, K extends keyof V>(obj: {\n [key in K]: V[key]\n}) {\n return Object.entries(obj)\n .filter(([_, v]) => v !== null)\n .map(([k]) => k) as { [key in K]: V[key] extends null ? never : key }[K][]\n}\n\n/**\n * 配列じゃなかったら配列にする\n */\nexport function wrapArray<T>(value: ArrayOrSingle<T>): T[] {\n return Array.isArray(value) ? value : [value]\n}\n\nexport type ArrayOrSingle<T> = T | T[]\n\nexport const noThemeProvider = new Error(\n '`theme` is invalid. `<ThemeProvider>` is not likely mounted.'\n)\n\ntype NonNullableCSSObject = Record<keyof CSSObject, string | number>\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 }): NonNullableCSSObject {\n if (!isPresent(props.theme)) {\n throw noThemeProvider\n }\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 onEffectPseudo(effect: EffectType, css: CSSObject) {\n return effect === 'hover'\n ? { '&:hover': { [notDisabledSelector]: css } }\n : effect === 'press'\n ? { '&:active': { [notDisabledSelector]: css } }\n : // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n effect === 'disabled'\n ? { [disabledSelector]: css }\n : unreachable(effect)\n}\n\nexport function withPrefixes(...parts: string[]) {\n return parts.join('-')\n}\n","import { CSSObject } from 'styled-components'\n\nexport interface Context {\n cancelHalfLeadingPx?: number\n hasVerticalPadding?: boolean\n boxShadowTransition?: boolean\n colorTransition?: boolean\n backgroundColorTransition?: boolean\n}\n\n/**\n * 絶対にこれを export してはいけない\n *\n * さもないと `o.bg[internalSym]` みたいな叩き方が可能になってしまう(補完にも意図せず出てしまう)\n */\nconst internalSym: unique symbol = Symbol('internal')\n\n/**\n * CSSObject に変換可能なオブジェクトを作成する\n *\n * 実際に CSSObject に変換するには外部から `__DO_NOT_USE_GET_INTERNAL__` を使わなければならない\n *\n * これ以降メソッドチェーンが続いてもいいし、続かなくても良い\n */\nexport function createInternal({\n toCSS,\n context = {},\n}: {\n toCSS: (context: Context) => CSSObject\n context?: Context\n}): Internal {\n return {\n [internalSym]: {\n toCSS,\n context,\n },\n }\n}\n\nfunction __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal: Internal) {\n return internal[internalSym]\n}\n\nexport interface Internal {\n [internalSym]: {\n toCSS: (context: Context) => CSSObject\n context: Context\n }\n}\n\n// half-leadingをキャンセルするとき && 垂直方向のpaddingが無い時\n// -> before/afterを入れる\nexport const shouldCancelHalfLeading = ({\n cancelHalfLeadingPx,\n hasVerticalPadding = false,\n}: Context) => cancelHalfLeadingPx !== undefined && !hasVerticalPadding\n\n/**\n * 個別の Internal( o.〇〇 の返り値 )が提出した context の中身を1つの context にまとめる\n */\nexport function getContext(internals: Internal[]) {\n return internals.reduce<Context>(\n (context, internal) => ({\n ...context,\n ...__DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal).context,\n }),\n {}\n )\n}\n\n/**\n * 全ユーザー定義からコンテキスト生成し、styled-components 向けに CSSObject を構築\n */\nexport function toCSSObjects(internals: Internal[]): CSSObject[] {\n // 1パス目\n // 全ユーザー定義を舐めて相互に影響し合う定義をチェックし、その結果(コンテキスト)を取得\n const context = getContext(internals)\n\n // 2パス目\n // コンテキストを見ながら最適化されたCSSを構築\n return internals.map((v) =>\n __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(v).toCSS(context)\n )\n}\n","import { Key } from '@charcoal-ui/theme'\nimport { unreachable } from '../util'\n\n/**\n * 配列で指定したプロパティを動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param member オブジェクトに生やすプロパティ一覧\n * @param chain プロパティに格納される値を生成する関数\n *\n * @example\n *\n * const o = factory({}, ['red', 'blue'],\n * color => hex(color)\n * )\n *\n * console.log(o.red) //=> #ff0000\n */\nexport const defineProperties = <\n TSource,\n TMember extends readonly Key[],\n TValue\n>(\n source: TSource,\n member: TMember,\n chain: (key: TMember[number]) => TValue\n) =>\n Object.defineProperties(\n source,\n Object.fromEntries(\n member.map((key) => [\n key,\n { get: () => chain(key), enumerable: true, configurable: true },\n ])\n )\n ) as TSource & { readonly [key in TMember[number]]: TValue }\n\n/**\n * 配列で指定した名前のメソッドを動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param member オブジェクトに生やすメソッド名一覧\n * @param chain メソッドの戻り値になる値を生成する関数\n *\n * @example\n *\n * const o = defineMethods({}, ['red', 'blue'],\n * (color, alpha: number) => hex(color, alpha)\n * )\n *\n * console.log(o.red(0.5)) //=> #ff000077\n */\nexport const defineMethods = <\n TSource,\n TMember extends readonly string[],\n TValue,\n TArguments extends unknown[]\n>(\n source: TSource,\n member: TMember,\n chain: (key: TMember[number], ...args: TArguments) => TValue\n) =>\n Object.defineProperties(\n source,\n Object.fromEntries(\n member.map((key) => [\n key,\n {\n value: (...args: TArguments) => chain(key, ...args),\n enumerable: true,\n configurable: true,\n },\n ])\n )\n ) as TSource & {\n readonly [key in TMember[number]]: (...args: TArguments) => TValue\n }\n\n/**\n * オブジェクトで指定したプロパティ名と値を動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param def オブジェクトに生やす定義(プロパティ名と値)\n *\n * @example\n *\n * const o = defineConstantProperties({}, {\n * red: '#f00',\n * blue: '#00f',\n * })\n *\n * console.log(o.red) //=> #f00\n */\nexport const defineConstantProperties = <\n TSource,\n TDef extends { [key: string]: unknown }\n>(\n source: TSource,\n def: TDef\n) =>\n defineProperties(source, Object.keys(def), (key) => def[key]) as TSource &\n Readonly<TDef>\n\n/**\n * 配列で指定したモディファイア(プロパティ)をチェーン可能な再帰オブジェクトを動的に生やす\n *\n * @param modifiers オブジェクトに生やすモディファイヤ一覧\n * @param source 指定されたモディファイヤの一覧から値を生成する関数\n *\n * @example\n *\n * const o = definePropertyChains(['red', 'blue'],\n * modifiers => modifiers.map(color => hex(color)).join(',')\n * )\n *\n * console.log(o.red.blue) => #f00,#00f\n */\nexport const definePropertyChains = <TSource, T extends Key>(\n modifiers: readonly T[],\n source: (applied: readonly T[]) => TSource\n) =>\n (function definePropertiesRecursively(\n applied: readonly T[]\n ): PropertyChain<TSource, T> {\n const notApplied = modifiers.filter((v) => !applied.includes(v))\n return defineProperties(source(applied), notApplied, (modifier) =>\n notApplied.length === 0\n ? unreachable()\n : definePropertiesRecursively([...applied, modifier])\n )\n })([])\n\nexport type PropertyChain<TSource, TModifiers extends Key> = TSource & {\n readonly [key in TModifiers]: PropertyChain<TSource, Exclude<TModifiers, key>>\n}\n\n/**\n * 配列で指定したモディファイア(メソッド)をチェーン可能な再帰オブジェクトを動的に生やす\n *\n * @param modifiers オブジェクトに生やすモディファイヤ一覧\n * @param source 指定されたモディファイヤの一覧から値を生成する関数\n * @param _inferPhantom 関数形式のモディファイヤの引数型を推論するためのメタタイプ(引数の個数に合わせてタプルで指定する)\n *\n * @example\n *\n * const o = defineMethodChains(['red', 'blue'],\n * modifiers => modifiers.map(([color, alpha]) => hex(color, alpha)).join(',')\n * , {} as [number])\n *\n * console.log(o.red(0.5).blue(1)) => #ff000077,#0000ffff\n */\nexport const defineMethodChains = <\n TSource,\n T extends string,\n TArguments extends unknown[]\n>(\n modifiers: readonly T[],\n source: (applied: readonly [T, ...TArguments][]) => TSource,\n ..._inferPhantom: TArguments\n) =>\n (function defineMethodsRecursively(\n applied: readonly [T, ...TArguments][]\n ): MethodChain<TSource, T, TArguments> {\n const notApplied = modifiers.filter(\n (v) => !applied.map(([w]) => w).includes(v)\n )\n return defineMethods(\n source(applied),\n notApplied,\n (modifier, ...args: TArguments) =>\n notApplied.length === 0\n ? unreachable()\n : defineMethodsRecursively([...applied, [modifier, ...args]])\n )\n })([])\n\nexport type MethodChain<\n TSource,\n TModifiers extends string,\n TArguments extends unknown[]\n> = TSource & {\n readonly [key in TModifiers]: (\n ...args: TArguments\n ) => MethodChain<TSource, Exclude<TModifiers, key>, TArguments>\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\nimport { keyof, variable, withPrefixes } from '../util'\nimport { Internal, createInternal } from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\nimport { customPropertyToken } from '@charcoal-ui/utils'\n\nexport const borderDirections = ['top', 'right', 'bottom', 'left'] as const\ntype BorderDirection = (typeof borderDirections)[number]\n\nexport const createBorderCss = <T extends CharcoalAbstractTheme>(\n variant: keyof T['border'],\n directions: readonly BorderDirection[]\n): Internal => {\n const all = directions.length === 0\n\n const value = `solid 1px ${variable(\n customPropertyToken(withPrefixes('border', variant.toString()))\n )}`\n\n return createInternal({\n toCSS() {\n return {\n ...(all\n ? { border: value }\n : directions.reduce<CSSObject>(\n (acc, direction) => ({\n ...acc,\n [`border-${direction}`]: value,\n }),\n {}\n )),\n }\n },\n })\n}\n\nexport default function border<T extends CharcoalAbstractTheme>(theme: T) {\n const borderTypes = keyof<T['border']>(theme.border)\n\n const borderObject = defineConstantProperties(\n {},\n {\n border: defineProperties({}, borderTypes, (variant) =>\n definePropertyChains(borderDirections, (modifiers) =>\n createBorderCss(variant, modifiers)\n )\n ),\n }\n )\n return borderObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { Internal, createInternal } from '../internals'\nimport { defineConstantProperties } from '../factories/lib'\n\nexport const createBorderRadiusCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (size: keyof T['borderRadius']): Internal => {\n return createInternal({\n toCSS() {\n return {\n borderRadius: px(theme.borderRadius[size]),\n }\n },\n })\n }\n\nexport default function borderRadius<T extends CharcoalAbstractTheme>(\n theme: T\n) {\n // 角丸\n const borderRadiusCss = createBorderRadiusCss(theme)\n const borderRadiusObject = defineConstantProperties(\n {},\n {\n borderRadius: (radius: keyof T['borderRadius']) =>\n borderRadiusCss(radius),\n }\n )\n\n return borderRadiusObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport {\n applyEffect,\n applyEffectToGradient,\n customPropertyToken,\n dur,\n gradient,\n GradientDirection,\n} from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport warning from 'warning'\nimport {\n keyof,\n objectAssign,\n isSupportedEffect,\n onEffectPseudo,\n variable,\n} from '../util'\nimport {\n createInternal,\n Internal,\n Context,\n shouldCancelHalfLeading,\n} from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\nimport { TRANSITION_DURATION } from './transition'\n\nconst colorProperties = ['bg', 'font'] as const\nexport type ColorProperty = (typeof colorProperties)[number]\n\nfunction targetProperty(target: ColorProperty) {\n return target === 'bg' ? 'background-color' : 'color'\n}\n\nexport const createColorCss =\n <T extends CharcoalAbstractTheme>(_theme: T) =>\n (\n target: ColorProperty,\n color: keyof T['color'],\n effects: readonly (keyof T['effect'])[] = []\n ): Internal => {\n function toCSS() {\n return {\n [targetProperty(target)]: variable(\n customPropertyToken(color.toString())\n ),\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n [targetProperty(target)]: variable(\n customPropertyToken(color.toString(), [effect])\n ),\n }),\n }),\n {}\n ),\n }\n }\n\n return createInternal({\n toCSS,\n context:\n effects.length > 0\n ? target === 'font'\n ? {\n colorTransition: true,\n }\n : {\n backgroundColorTransition: true,\n }\n : {},\n })\n }\n\nexport const createGradientColorCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n color: keyof T['gradientColor'],\n effects: readonly (keyof T['effect'])[] = [],\n direction: GradientDirection\n ): Internal => {\n const toLinearGradient = gradient(direction)\n\n function toCSS(context: Context): CSSObject {\n const optimized = !shouldCancelHalfLeading(context)\n const duration = dur(TRANSITION_DURATION)\n\n if (optimized && effects.length > 0) {\n return {\n position: 'relative',\n zIndex: 0,\n overflow: 'hidden',\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n '&::before': {\n zIndex: -1,\n ...overlayElement,\n transition: `${duration} background-color`,\n },\n '&::after': {\n zIndex: -2,\n ...overlayElement,\n ...toLinearGradient(theme.gradientColor[color]),\n },\n ...onEffectPseudo(effect, {\n '&::before': {\n backgroundColor: applyEffect(\n null,\n theme.effect[effect] ?? []\n ),\n },\n }),\n }),\n {}\n ),\n }\n }\n\n warning(\n effects.length === 0,\n\n `'Transition' will not be applied. You can get around this by specifying 'preserveHalfLeading' or both 'padding' and 'typography'.`\n )\n\n return {\n ...toLinearGradient(theme.gradientColor[color]),\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n ...toLinearGradient(\n applyEffectToGradient(theme.effect[effect] ?? [])(\n theme.gradientColor[color]\n )\n ),\n }),\n }),\n {}\n ),\n }\n }\n\n return createInternal({ toCSS })\n }\n\nconst overlayElement: CSSObject = {\n content: \"''\",\n display: 'block',\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n}\n\nexport default function colors<T extends CharcoalAbstractTheme>(theme: T) {\n const colors = keyof<T['color']>(theme.color)\n const effects = keyof<T['effect']>(theme.effect)\n\n // 色\n const gradientColors = keyof<T['gradientColor']>(theme.gradientColor)\n const colorCss = createColorCss(theme)\n const gradientColorCss = createGradientColorCss(theme)\n\n const colorObject = defineConstantProperties(\n {},\n {\n bg: objectAssign(\n defineProperties({}, colors, (color) =>\n definePropertyChains(effects, (modifiers) =>\n colorCss('bg', color, modifiers)\n )\n ),\n defineProperties(\n {},\n gradientColors,\n (color) => (direction: GradientDirection) =>\n definePropertyChains(effects, (modifiers) =>\n gradientColorCss(color, modifiers, direction)\n )\n )\n ),\n font: defineProperties({}, colors, (color) =>\n definePropertyChains(effects, (modifiers) =>\n colorCss('font', color, modifiers)\n )\n ),\n }\n )\n\n return colorObject\n}\n","import { dur } from '@charcoal-ui/utils'\nimport { isPresent } from '../util'\nimport { Internal, createInternal, Context } from '../internals'\n\n// TODO: deprecate\nexport const TRANSITION_DURATION = 0.2\n\n/**\n * context の状態を元に transition を追加する。必ず一番最後に呼ぶ\n */\nexport default function transition(_theme: unknown): Internal {\n const duration = dur(TRANSITION_DURATION)\n const transition = (property: string[]) => ({\n transition: property.map((v) => `${duration} ${v}`).join(', '),\n })\n\n function toCSS({\n colorTransition = false,\n backgroundColorTransition = false,\n boxShadowTransition = false,\n }: Context) {\n return transition(\n [\n colorTransition ? 'color' : null,\n backgroundColorTransition ? 'background-color' : null,\n boxShadowTransition ? 'box-shadow' : null,\n ].filter(isPresent)\n )\n }\n\n return createInternal({ toCSS })\n}\n","import { CharcoalAbstractTheme, EffectType } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\nimport {\n isSupportedEffect,\n keyof,\n onEffectPseudo,\n ReadonlyArrayConstructor,\n unreachable,\n} from '../util'\nimport { Internal, createInternal } from '../internals'\nimport { definePropertyChains } from '../factories/lib'\n\nexport const createElementEffectCss =\n <\n T extends CharcoalAbstractTheme,\n TElementEffect extends T['elementEffect']\n >(theme: {\n elementEffect: TElementEffect\n }) =>\n (effects: readonly (keyof TElementEffect)[] = []): Internal =>\n createInternal({\n toCSS() {\n return effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n opacity:\n !(Array as ReadonlyArrayConstructor).isArray(\n theme.elementEffect[effect]\n ) && theme.elementEffect[effect]?.type === 'opacity'\n ? theme.elementEffect[effect]?.opacity\n : unreachable(),\n }),\n }),\n {}\n )\n },\n })\n\nexport default function elementEffect<T extends CharcoalAbstractTheme>(\n theme: T\n) {\n const effectTypes = keyof<T['elementEffect']>(\n theme.elementEffect\n ) as EffectType[]\n\n // 要素へのエフェクト (etc: 透過)\n const elementEffectCss = createElementEffectCss(theme)\n const elementEffectObject = definePropertyChains(effectTypes, (modifiers) =>\n elementEffectCss(modifiers)\n )\n\n return elementEffectObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px, notDisabledSelector } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport { keyof } from '../util'\nimport { Internal, createInternal } from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\n\nexport const outlineType = ['focus'] as const\ntype OutlineType = (typeof outlineType)[number]\n\nconst outlineCss = (weight: number, color: string) => ({\n boxShadow: `0 0 0 ${px(weight)} ${color}`,\n})\n\nexport const createOutlineColorCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n variant: keyof T['outline'],\n modifiers: readonly OutlineType[]\n ): Internal => {\n const weight = theme.outline[variant].weight\n const color = theme.outline[variant].color\n\n return createInternal({\n toCSS() {\n return modifiers.includes('focus')\n ? onFocus(outlineCss(weight, color))\n : { '&&': { [notDisabledSelector]: outlineCss(weight, color) } }\n },\n context: {\n boxShadowTransition: true,\n },\n })\n }\n\n/**\n * @see https://developer.mozilla.org/ja/docs/Web/CSS/:focus-visible#selectively_showing_the_focus_indicator\n */\nconst onFocus = (css: CSSObject) => ({\n [notDisabledSelector]: {\n '&:focus, &:active': {\n outline: 'none',\n ...css,\n },\n\n '&:focus:not(:focus-visible), &:active:not(:focus-visible)': {\n outline: 'none',\n },\n\n '&:focus-visible': {\n outline: 'none',\n ...css,\n },\n },\n})\n\nexport default function outline<T extends CharcoalAbstractTheme>(theme: T) {\n const outlineCss = createOutlineColorCss(theme)\n\n const outlineObject = defineConstantProperties(\n {},\n {\n outline: defineProperties(\n {},\n keyof<T['outline']>(theme.outline),\n (variant) =>\n definePropertyChains(outlineType, (modifiers) =>\n outlineCss(variant, modifiers)\n )\n ),\n }\n )\n\n return outlineObject\n}\n","import { columnSystem } from '@charcoal-ui/foundation'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { Internal, createInternal } from '../internals'\nimport { defineProperties, defineConstantProperties } from '../factories/lib'\n\nexport const fixedProperties = ['width', 'height'] as const\ntype FixedProperty = (typeof fixedProperties)[number]\n\nexport const createFixedPxCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (property: FixedProperty, size: keyof T['spacing'] | 'auto'): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: size === 'auto' ? 'auto' : px(theme.spacing[size]),\n }\n },\n })\n\nexport const createFixedRelativeCss =\n <T extends CharcoalAbstractTheme>(_theme: T) =>\n (property: FixedProperty, amount: '100%' | 'auto'): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: amount,\n }\n },\n })\n\nexport const createFixedColumnCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (property: FixedProperty, span: number): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: px(\n columnSystem(span, theme.grid.unit.column, theme.grid.unit.gutter)\n ),\n }\n },\n })\n\nexport default function size<T extends CharcoalAbstractTheme>(theme: T) {\n const fixedPxCss = createFixedPxCss(theme)\n const fixedColumnCss = createFixedColumnCss(theme)\n const fixedRelativeCss = createFixedRelativeCss(theme)\n const fixedObject = defineProperties({}, fixedProperties, (property) =>\n defineConstantProperties(\n {},\n {\n px: (size: keyof T['spacing'] | 'auto') => fixedPxCss(property, size),\n column: (span: number) => fixedColumnCss(property, span),\n auto: fixedRelativeCss(property, 'auto'),\n full: fixedRelativeCss(property, '100%'),\n }\n )\n )\n return fixedObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport { Internal, createInternal, Context } from '../internals'\nimport { defineProperties, defineMethodChains } from '../factories/lib'\n\nexport const spacingProperties = ['margin', 'padding'] as const\nexport const spacingDirections = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'vertical',\n 'horizontal',\n 'all',\n] as const\ntype SpacingProperty = (typeof spacingProperties)[number]\ntype SpacingDirection = (typeof spacingDirections)[number]\n\nfunction spacingProperty(\n property: SpacingProperty,\n direction: 'top' | 'right' | 'bottom' | 'left'\n) {\n return `${property}-${direction}`\n}\n\nexport const createSpacingCss =\n <T extends CharcoalAbstractTheme>(theme: { spacing: T['spacing'] }) =>\n (\n property: SpacingProperty,\n modifiers: readonly [SpacingDirection, keyof T['spacing'] | 'auto'][]\n ): Internal => {\n const { top, right, bottom, left } = modifiers.reduce(\n (acc, [direction, size]) => {\n if (direction === 'all') {\n acc.top = size\n acc.right = size\n acc.bottom = size\n acc.left = size\n } else if (direction === 'vertical') {\n acc.top = size\n acc.bottom = size\n } else if (direction === 'horizontal') {\n acc.right = size\n acc.left = size\n } else {\n acc[direction] = size\n }\n return acc\n },\n {} as Partial<\n Record<'top' | 'right' | 'bottom' | 'left', keyof T['spacing'] | 'auto'>\n >\n )\n\n const hasVerticalPadding =\n property === 'padding' &&\n top !== undefined &&\n bottom !== undefined &&\n top !== 'auto' &&\n bottom !== 'auto'\n\n function toCSS({ cancelHalfLeadingPx = 0 }: Context): CSSObject {\n return {\n ...(top !== undefined && {\n [spacingProperty(property, 'top')]:\n top === 'auto'\n ? 'auto'\n : px(\n theme.spacing[top] +\n (hasVerticalPadding ? cancelHalfLeadingPx : 0)\n ),\n }),\n ...(bottom !== undefined && {\n [spacingProperty(property, 'bottom')]:\n bottom === 'auto'\n ? 'auto'\n : px(\n theme.spacing[bottom] +\n (hasVerticalPadding ? cancelHalfLeadingPx : 0)\n ),\n }),\n ...(right !== undefined && {\n [spacingProperty(property, 'right')]:\n right === 'auto' ? 'auto' : px(theme.spacing[right]),\n }),\n ...(left !== undefined && {\n [spacingProperty(property, 'left')]:\n left === 'auto' ? 'auto' : px(theme.spacing[left]),\n }),\n }\n }\n\n return createInternal({\n toCSS,\n context: hasVerticalPadding ? { hasVerticalPadding: true } : {},\n })\n }\n\nexport default function spacing<T extends CharcoalAbstractTheme>(theme: T) {\n const spacingCss = createSpacingCss(theme)\n const spacingObject = defineProperties(\n {},\n spacingProperties,\n (spacingProperty) =>\n defineMethodChains(\n spacingDirections,\n (modifiers) => spacingCss(spacingProperty, modifiers),\n {} as keyof T['spacing'] | 'auto' // 推論のためのメタタイプ\n )\n )\n return spacingObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { halfLeading, px } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport {\n Internal,\n createInternal,\n shouldCancelHalfLeading,\n Context,\n} from '../internals'\nimport { defineProperties, definePropertyChains } from '../factories/lib'\n\nexport const createTypographyCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n size: keyof T['typography']['size'],\n options: {\n preserveHalfLeading?: boolean\n monospace?: boolean\n bold?: boolean\n } = {}\n ): Internal => {\n const {\n preserveHalfLeading = false,\n monospace = false,\n bold = false,\n } = options\n const descriptor = theme.typography.size[size]\n const margin = -halfLeading(descriptor)\n\n function toCSS(context: Context): CSSObject {\n return {\n fontSize: px(descriptor.fontSize),\n lineHeight: px(descriptor.lineHeight),\n ...(monospace && {\n fontFamily: 'monospace',\n }),\n ...(bold && {\n fontWeight: 'bold',\n }),\n ...(shouldCancelHalfLeading(context) && {\n // prevent margin collapsing\n display: 'flow-root',\n // cancel half-leading with negative margin\n '&::before': {\n ...leadingCancel,\n marginTop: px(margin),\n },\n '&::after': {\n ...leadingCancel,\n marginBottom: px(margin),\n },\n }),\n }\n }\n\n return createInternal({\n toCSS,\n context: !preserveHalfLeading\n ? {\n cancelHalfLeadingPx: margin,\n }\n : {},\n })\n }\n\nconst leadingCancel: CSSObject = {\n display: 'block',\n width: 0,\n height: 0,\n content: `''`,\n}\n\n// タイポグラフィ\nconst typographyModifiers = [\n // TODO\n 'monospace',\n 'bold',\n 'preserveHalfLeading',\n] as const\n\nexport default function typography<T extends CharcoalAbstractTheme>(theme: T) {\n const typographyCss = createTypographyCss(theme)\n const typographyObject = defineProperties(\n {},\n ['typography'] as const,\n (_) => (size: keyof T['typography']['size']) =>\n definePropertyChains(typographyModifiers, (modifiers) =>\n typographyCss(size, {\n preserveHalfLeading: modifiers.includes('preserveHalfLeading'),\n monospace: modifiers.includes('monospace'),\n bold: modifiers.includes('bold'),\n })\n )\n )\n\n return typographyObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { objectAssign } from '../util'\nimport border from './border'\nimport borderRadius from './borderRadius'\nimport colors from './colors'\nimport elementEffect from './elementEffect'\nimport outline from './outline'\nimport size from './size'\nimport spacing from './spacing'\nimport typography from './typography'\n\n/**\n * `theme(o => [...])` の `o` の部分を構築する\n *\n * @param theme テーマオブジェクト\n */\nexport default function createO<T extends CharcoalAbstractTheme>(\n theme: {\n // factoryの第二引数に入れ込むものだけ明示的に型変数を展開しておくことで型の具象化を遅延する\n color: T['color']\n gradientColor: T['gradientColor']\n border: T['border']\n outline: T['outline']\n } & Omit<T, 'color' | 'gradientColor' | 'border' | 'outline'>\n) {\n return objectAssign(\n colors(theme),\n typography(theme),\n spacing(theme),\n size(theme),\n elementEffect(theme),\n border(theme),\n borderRadius(theme),\n outline(theme)\n )\n}\n","import { createGlobalStyle, css } from 'styled-components'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { defineThemeVariables, withPrefixes } from './util'\nimport { mapObject } from '@charcoal-ui/utils'\n\nconst GlobalStyle = createGlobalStyle`\n ${<T extends Theme>({\n themeMap,\n background,\n }: {\n themeMap: ThemeMap<T>\n background?: keyof ThemeMap<T>[string]['color']\n }) =>\n Object.entries(themeMap).map(([key, theme]) =>\n key.startsWith('@media')\n ? css`\n ${key} {\n :root {\n ${background !== undefined &&\n css`\n background-color: ${theme.color[background]};\n `}\n ${defineColorVariableCSS(theme)}\n }\n }\n `\n : css`\n /* stylelint-disable-next-line no-duplicate-selectors */\n ${key} {\n ${background !== undefined &&\n css`\n background-color: ${theme.color[background]};\n `}\n ${defineColorVariableCSS(theme)}\n }\n `\n )}\n`\n\nexport interface ThemeMap<T extends Theme> {\n ':root': T\n [mediaQuery: `@media (${string})`]: T\n [selector: string]: T\n}\n\ntype Theme = Pick<CharcoalAbstractTheme, 'color' | 'effect' | 'border'>\n\nexport default function TokenInjector<T extends Theme>({\n theme: themeMap,\n background,\n}: {\n theme: ThemeMap<T>\n background?: keyof ThemeMap<T>[string]['color']\n}) {\n return <GlobalStyle themeMap={themeMap} background={background} />\n}\n\nconst 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\n return toCSSVariables(colors)\n}\n\nfunction toCSSVariables(css: Record<string, string | number>) {\n return Object.entries(css)\n .map(([varName, value]) => variableDefinition(varName, value.toString()))\n .join(';')\n}\n\nconst variableDefinition = (prop: string, value: string) => `${prop}: ${value}`\n","import { useEffect, useMemo, useState } from 'react'\n\nexport const LOCAL_STORAGE_KEY = 'charcoal-theme'\nexport const DEFAULT_ROOT_ATTRIBUTE = 'theme'\n\nconst keyStringRegExp = new RegExp(/^(\\w|-)+$/)\n\n/**\n * 文字列が英数字_-のみで構成されているか検証する。不正な文字列ならエラーを投げる\n * @param key 検証するキー\n */\nexport function assertKeyString(key: string) {\n if (!keyStringRegExp.test(key)) {\n throw new Error(`Unexpected key :${key}, expect: /^(\\\\w|-)+$/`)\n }\n}\n\n/**\n * `<html data-theme=\"dark\">` のような設定を行うデフォルトのセッター\n */\nexport const themeSetter =\n (attr: string = DEFAULT_ROOT_ATTRIBUTE) =>\n (theme: string | undefined) => {\n assertKeyString(attr)\n if (theme !== undefined) {\n document.documentElement.dataset[attr] = theme\n } else {\n delete document.documentElement.dataset[attr]\n }\n }\n\n/**\n * `<html data-theme=\"dark\">` にマッチするセレクタを生成する\n */\nexport function themeSelector<\n T extends string,\n S extends string = typeof DEFAULT_ROOT_ATTRIBUTE\n>(theme: T, attr?: S) {\n return `:root[data-${attr ?? DEFAULT_ROOT_ATTRIBUTE}='${theme}']` as const\n}\n\n/**\n * prefers-color-scheme を利用する media クエリを生成する\n */\nexport function prefersColorScheme<T extends 'light' | 'dark'>(theme: T) {\n return `@media (prefers-color-scheme: ${theme})` as const\n}\n\n/**\n * LocalStorageからテーマの情報を取得して、変化時にテーマをセットするhooks\n */\nexport function useThemeSetter({\n key = LOCAL_STORAGE_KEY,\n setter = themeSetter(),\n}: { key?: string; setter?: (theme: string | undefined) => void } = {}) {\n const [theme, , system] = useTheme(key)\n\n useEffect(() => {\n if (theme === undefined) {\n return\n }\n // prefers-color-scheme から値を取っている場合にはcssのみで処理したいのでアンセットする\n setter(system ? undefined : theme)\n }, [setter, system, theme])\n}\n\n/**\n * 同期的にLocalStorageからテーマを取得するヘルパ\n */\nexport function getThemeSync(key: string = LOCAL_STORAGE_KEY) {\n const theme = localStorage.getItem(key)\n return theme\n}\n\n/**\n * LocalStorage, prefers-color-scheme からテーマの情報を取得して、現在のテーマを返すhooks\n *\n * `dark` `light` という名前だけは特別扱いされていて、prefers-color-schemeにマッチした場合に返ります\n */\nexport const useTheme = (localStorageKey: string = LOCAL_STORAGE_KEY) => {\n assertKeyString(localStorageKey)\n const isDark = useMedia('(prefers-color-scheme: dark)')\n const media = isDark !== undefined ? (isDark ? 'dark' : 'light') : undefined\n const [local, setTheme, ready] =\n useLocalStorage<typeof media>(localStorageKey)\n const theme = !ready || media === undefined ? undefined : local ?? media\n const system = local === undefined\n return [theme, setTheme, system] as const\n}\n\nexport function useLocalStorage<T>(key: string, defaultValue?: () => T) {\n const [ready, setReady] = useState(false)\n const [state, setState] = useState<T>()\n const defaultValueMemo = useMemo(() => defaultValue?.(), [defaultValue])\n\n useEffect(() => {\n fetch()\n window.addEventListener('storage', handleStorage)\n return () => {\n window.removeEventListener('storage', handleStorage)\n }\n })\n\n const handleStorage = (e: StorageEvent) => {\n if (e.storageArea !== localStorage) {\n return\n }\n if (e.key !== key) {\n return\n }\n fetch()\n }\n\n const fetch = () => {\n const raw = localStorage.getItem(key)\n setState((raw !== null ? deserialize(raw) : null) ?? defaultValueMemo)\n setReady(true)\n }\n\n const set = (value: T | undefined) => {\n if (value === undefined) {\n // undefinedがセットされる場合にはkeyごと削除\n localStorage.removeItem(key)\n } else {\n const raw = serialize(value)\n localStorage.setItem(key, raw)\n }\n\n // 同一ウィンドウではstorageイベントが発火しないので、手動で発火させる\n const event = new StorageEvent('storage', {\n bubbles: true,\n cancelable: false,\n key,\n url: location.href,\n storageArea: localStorage,\n })\n dispatchEvent(event)\n }\n\n return [state ?? defaultValueMemo, set, ready] as const\n}\n\nfunction deserialize<T>(raw: string): T {\n try {\n return JSON.parse(raw) as T\n } catch {\n // syntax error はすべて文字列として扱う\n return raw as unknown as T\n }\n}\n\nfunction serialize(value: unknown): string {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value)\n }\n}\n\nexport function useMedia(query: string) {\n const [match, setState] = useState<boolean>()\n\n useEffect(() => {\n const matcher = window.matchMedia(query)\n\n const onChange = () => {\n setState(matcher.matches)\n }\n\n matcher.addEventListener('change', onChange)\n\n setState(matcher.matches)\n\n return () => {\n matcher.removeEventListener('change', onChange)\n }\n }, [query])\n\n return match\n}\n","import { css } from 'styled-components'\n\nconst boldCss = css`\n font-weight: bold;\n`\n\nexport const removeHalfLeadingCss = css`\n &::before {\n display: block;\n width: 0;\n height: 0;\n content: '';\n margin-top: -4px;\n }\n\n &::after {\n display: block;\n width: 0;\n height: 0;\n content: '';\n margin-bottom: -4px;\n }\n`\n\nexport function typography(\n size: 12 | 14 | 16 | 20,\n bold = false,\n preserveHalfLeading = false\n) {\n const cssObj = css`\n font-size: ${size}px;\n line-height: ${size + 8}px;\n display: flow-root;\n ${bold === true && boldCss}\n ${preserveHalfLeading !== true && removeHalfLeadingCss}\n `\n\n return cssObj\n}\n","import {\n assertKeyString,\n DEFAULT_ROOT_ATTRIBUTE,\n LOCAL_STORAGE_KEY,\n} from './helper'\n\ninterface Props {\n localStorageKey: string\n rootAttribute: string\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するコードを取得する\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns ソースコードの文字列\n */\nexport function makeSetThemeScriptCode({\n localStorageKey = defaultProps.localStorageKey,\n rootAttribute = defaultProps.rootAttribute,\n}: Partial<Props> = defaultProps) {\n assertKeyString(localStorageKey)\n assertKeyString(rootAttribute)\n return `'use strict';\n(function () {\n var localStorageKey = '${localStorageKey}'\n var rootAttribute = '${rootAttribute}'\n var currentTheme = localStorage.getItem(localStorageKey);\n if (currentTheme) {\n document.documentElement.dataset[rootAttribute] = currentTheme;\n }\n})();\n`\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するスクリプトタグ\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns\n */\nexport function SetThemeScript(props: Props) {\n const src = makeSetThemeScriptCode(props)\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: src,\n }}\n />\n )\n}\n\nconst defaultProps: Props = {\n localStorageKey: LOCAL_STORAGE_KEY,\n rootAttribute: DEFAULT_ROOT_ATTRIBUTE,\n}\n\nSetThemeScript.defaultProps = defaultProps\n","import { css } from 'styled-components'\n\n/**\n * `&:focus:not(:focus-visible)` is backwards compatibility for legacy browsers.\n *\n * cf. https://github.com/WICG/focus-visible#backwards-compatibility\n */\nexport const focusVisibleFocusRingCss = css`\n &:focus {\n outline: none;\n box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);\n }\n &:focus:not(:focus-visible) {\n box-shadow: none;\n }\n &:focus-visible {\n box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);\n }\n`\n","import { css } from 'styled-components'\n\nexport const disabledCss = css`\n :disabled,\n [aria-disabled]:not([aria-disabled='false']) {\n opacity: 0.32;\n cursor: default;\n }\n`\n","import { css } from 'styled-components'\n\nexport const assertiveRingCss = css`\n box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);\n`\n","import { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { SpacingType } from './helpers/SpacingType'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function margin(arg1: SpacingType): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType,\n arg3: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType,\n arg3: SpacingType,\n arg4: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2?: SpacingType,\n arg3?: SpacingType,\n arg4?: SpacingType\n) {\n return css`\n margin: ${pxIfNum(arg1)} ${pxIfNum(arg2)} ${pxIfNum(arg3)} ${pxIfNum(arg4)};\n `\n}\n\nexport function marginTop(v: SpacingType) {\n return css`\n margin-top: ${pxIfNum(v)};\n `\n}\n\nexport function marginBottom(v: SpacingType) {\n return css`\n margin-bottom: ${pxIfNum(v)};\n `\n}\n\nexport function marginLeft(v: SpacingType) {\n return css`\n margin-left: ${pxIfNum(v)};\n `\n}\n\nexport function marginRight(v: SpacingType) {\n return css`\n margin-right: ${pxIfNum(v)};\n `\n}\n","export function pxIfNum(v?: number | string) {\n if (v === undefined) return ''\n if (typeof v === 'number') return `${v}px`\n return v\n}\n","import { Spacing } from '@charcoal-ui/theme'\nimport { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function padding(arg1: keyof Spacing): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing,\n arg3: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing,\n arg3: keyof Spacing,\n arg4: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2?: keyof Spacing,\n arg3?: keyof Spacing,\n arg4?: keyof Spacing\n) {\n return css`\n padding: ${arg1}px ${pxIfNum(arg2)} ${pxIfNum(arg3)} ${pxIfNum(arg4)};\n `\n}\n\nexport function paddingTop(v: keyof Spacing) {\n return css`\n padding-top: ${v}px;\n `\n}\n\nexport function paddingBottom(v: keyof Spacing) {\n return css`\n padding-bottom: ${v}px;\n `\n}\n\nexport function paddingLeft(v: keyof Spacing) {\n return css`\n padding-left: ${v}px;\n `\n}\n\nexport function paddingRight(v: keyof Spacing) {\n return css`\n padding-right: ${v}px;\n `\n}\n","import { Spacing } from '@charcoal-ui/theme'\nimport { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function gap(v1: keyof Spacing): FlattenSimpleInterpolation\n\nexport function gap(\n v1: keyof Spacing,\n v2: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function gap(v1: keyof Spacing, v2?: keyof Spacing) {\n return css`\n gap: ${v1}px ${pxIfNum(v2)};\n `\n}\n\nexport function rowGap(v: keyof Spacing) {\n return css`\n row-gap: ${v}px;\n `\n}\n\nexport function columnGap(v: keyof Spacing) {\n return css`\n column-gap: ${v}px;\n `\n}\n","import { CharcoalTheme } from '@charcoal-ui/theme'\nimport { CharcoalThemeUtils } from './CharcoalStyledTheme'\nimport {\n margin,\n marginBottom,\n marginLeft,\n marginRight,\n marginTop,\n} from './margin'\nimport {\n padding,\n paddingBottom,\n paddingLeft,\n paddingRight,\n paddingTop,\n} from './padding'\nimport { columnGap, gap, rowGap } from './gap'\nimport { disabledCss } from '../styles/disabledCss'\nimport { typography } from './typographyCss'\nimport { focusVisibleFocusRingCss } from '../styles/focusVisibleFocusRingCss'\nimport { assertiveRingCss } from '../styles/assertiveRingCss'\n\n/**\n * Adds some utilities to the theme object.\n * They can be used as an alternative `createTheme`(`theme(o=>)`) for styling.\n */\nexport function addThemeUtils(\n theme: CharcoalTheme\n): CharcoalTheme & CharcoalThemeUtils {\n return {\n ...theme,\n utils: {\n margin,\n marginTop,\n marginLeft,\n marginBottom,\n marginRight,\n padding,\n paddingTop,\n paddingLeft,\n paddingBottom,\n paddingRight,\n gap,\n rowGap,\n columnGap,\n typography,\n focusVisibleFocusRingCss,\n assertiveRingCss,\n disabledCss,\n },\n }\n}\n","import { CSSObject, ThemedStyledInterface } from 'styled-components'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { ArrayOrSingle, isPresent, noThemeProvider, wrapArray } from './util'\nimport { Internal, toCSSObjects } from './internals'\nimport createO from './builders/o'\nimport transition from './builders/transition'\nexport { default as TokenInjector } from './TokenInjector'\nexport {\n getThemeSync,\n themeSetter,\n themeSelector,\n prefersColorScheme,\n useTheme,\n useThemeSetter,\n useLocalStorage,\n useMedia,\n} from './helper'\nexport { defineThemeVariables } from './util'\nexport { removeHalfLeadingCss } from './utils/typographyCss'\nexport * from './SetThemeScript'\n\ntype Blank = null | undefined | false\n\nconst nonBlank = <T>(value: T): value is T extends Blank ? never : T =>\n isPresent(value) && (value as unknown) !== false\n\n/**\n * @deprecated\n * 実行時のパフォーマンスが低い問題があります。\n * ref. https://github.com/pixiv/charcoal/pull/377\n *\n * styled-components の theming 方法を推奨します。\n * ref. https://styled-components.com/docs/advanced#theming\n *\n * `theme(o => [...])` の `theme` ユーティリティを構築する\n *\n * @param _styled - DEPRECATED: styled-components の `styled` そのものを渡すとそれを元に型推論ができる。が、型引数を渡す方が型推論が高速になりやすい\n *\n * @example\n *\n * import styled from 'styled-components'\n * const theme = createTheme(styled)\n *\n * @example\n *\n * const theme = createTheme<DefaultTheme>()\n */\nexport function createTheme<T extends CharcoalAbstractTheme>(\n _styled?: ThemedStyledInterface<T>\n) {\n type Builder = ReturnType<typeof createO<T>>\n\n // ランタイムの `theme(o => [...])` のインターフェースを構築する\n return function theme(\n specFn: (o: Builder) => ArrayOrSingle<Internal | Blank>\n ): ThemeProp<T> {\n // styled-components のテンプレートに埋め込める関数\n return function interpolate({ theme }) {\n if (!isPresent(theme)) {\n // テーマが入っていない場合は復旧不可能なのでエラーにする\n throw noThemeProvider\n }\n\n const internals = [\n // ユーザーが定義したルール\n ...wrapArray(\n /**\n * こう書いてはいけない\n *\n * ❌\n * ```ts\n * const o = createO(theme)\n * const declaration = spec(o)\n * ```\n *\n * `o` を一時変数に入れてしまうと型 `T` の具象化が行われるので関数内に書く\n */\n specFn(/** o = */ createO(theme))\n ),\n\n // 必ず挿入される共通のルール\n transition(theme),\n ].filter(nonBlank)\n\n return toCSSObjects(internals)\n }\n }\n}\n\nexport type ThemeProp<T> = ({\n theme,\n}: {\n theme: T | undefined\n}) => CSSObject | CSSObject[]\n\nexport { focusVisibleFocusRingCss } from './styles/focusVisibleFocusRingCss'\nexport { disabledCss } from './styles/disabledCss'\nexport { assertiveRingCss } from './styles/assertiveRingCss'\nexport type { CharcoalThemeUtils } from './utils/CharcoalStyledTheme'\nexport { addThemeUtils } from './utils/addThemeUtils'\n"],"mappings":"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","names":["colors","css","customPropertyToken","size","applyEffect","customPropertyToken","dur","transition","customPropertyToken","dur","applyEffect","colors","px","notDisabledSelector","px","notDisabledSelector","css","outlineCss","px","size","px","px","size","px","spacingProperty","px","size","margin","px","colors","css","css","typography","size","jsx","css","css","css","css","css","css","css","css","css","typography","theme"]}
1
+ {"version":3,"sources":["../src/util.ts","../src/internals/index.ts","../src/factories/lib.ts","../src/builders/border.ts","../src/builders/borderRadius.ts","../src/builders/colors.ts","../src/builders/transition.ts","../src/builders/elementEffect.ts","../src/builders/outline.ts","../src/builders/size.ts","../src/builders/spacing.ts","../src/builders/typography.ts","../src/builders/o.ts","../src/TokenInjector.tsx","../src/helper.ts","../src/utils/typographyCss.ts","../src/SetThemeScript.tsx","../src/styles/focusVisibleFocusRingCss.ts","../src/styles/disabledCss.ts","../src/styles/assertiveRingCss.ts","../src/utils/margin.ts","../src/utils/helpers/pxIfNum.ts","../src/utils/padding.ts","../src/utils/gap.ts","../src/utils/addThemeUtils.ts","../src/index.ts"],"sourcesContent":["import {\n applyEffect,\n customPropertyToken,\n disabledSelector,\n filterObject,\n flatMapObject,\n notDisabledSelector,\n} from '@charcoal-ui/utils'\nimport { CharcoalAbstractTheme, EffectType, Key } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\n\n/**\n * Function used to assert a given code path is unreachable\n */\nexport function unreachable(): never\n/**\n * Function used to assert a given code path is unreachable.\n * Very useful for ensuring switches are exhaustive:\n *\n * ```ts\n * switch (a.type) {\n * case Types.A:\n * case Types.B:\n * break\n * default:\n * unreachable(a) // will cause a build error if there was\n * // a Types.C that was not checked\n * }\n * ```\n *\n * @param value Value to be asserted as unreachable\n */\n// NOTE: Uses separate overloads, _not_ `value?: never`, to not allow `undefined` to be passed\n\nexport function unreachable(value: never): never\nexport function unreachable(value?: never): never {\n throw new Error(\n arguments.length === 0\n ? 'unreachable'\n : `unreachable (${JSON.stringify(value)})`\n )\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// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Head<U> = U extends [infer T, ...any[]] ? T : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Tail<U> = U extends [any, any, ...any[]]\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: U) => any) extends (head: any, ...args: infer T) => any\n ? T\n : never\n : never\n// Buggy at ts@4.0.0-dev20200506\n// type Tail<U> = U extends [any, ...infer T] ? T : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RecursiveObjectAssign<T, S extends any[]> = {\n 0: T & Head<S>\n 1: RecursiveObjectAssign<T & Head<S>, Tail<S>>\n}[Tail<S> extends never ? 0 : 1]\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ObjectAssign<T extends any[]> = RecursiveObjectAssign<\n Record<string, unknown>,\n T\n>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function objectAssign<T extends any[]>(...sources: T) {\n return Object.assign({}, ...sources) as ObjectAssign<T>\n}\n\n/**\n * Object.keys の返り値の型を厳しめにしてくれるやつ。\n *\n * ジェネリクスは基本的に明示して使うことを推奨。\n *\n * このライブラリでは Theme オブジェクトのジェネリクスを引き回すケースが多く、\n * ジェネリクスを省略するといつのまにか keys の返り値が `string | number | symbol` になりがちなので\n *\n * @param obj - キーを取りたいオブジェクト。ジェネリクスを省略したとき `never[]` のような使えない型が返って欲しい\n */\nexport function keyof<\n // このジェネリクスは必須(書かないと返り値が `never[]` になる )\n T extends Record<never, unknown>,\n // このジェネリクスは書かなくて良い、obj の内容から推論される( T と矛盾してはいけない )\n _ extends T = T\n>(obj: _) {\n return Object.keys(obj) as unknown as (keyof T & string)[]\n}\n\nexport interface ReadonlyArrayConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isArray(value: any): value is readonly any[]\n}\n\nexport function extractNonNullKeys<V, K extends keyof V>(obj: {\n [key in K]: V[key]\n}) {\n return Object.entries(obj)\n .filter(([_, v]) => v !== null)\n .map(([k]) => k) as { [key in K]: V[key] extends null ? never : key }[K][]\n}\n\n/**\n * 配列じゃなかったら配列にする\n */\nexport function wrapArray<T>(value: ArrayOrSingle<T>): T[] {\n return Array.isArray(value) ? value : [value]\n}\n\nexport type ArrayOrSingle<T> = T | T[]\n\nexport const noThemeProvider = new Error(\n '`theme` is invalid. `<ThemeProvider>` is not likely mounted.'\n)\n\ntype NonNullableCSSObject = Record<keyof CSSObject, string | number>\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 }): NonNullableCSSObject {\n if (!isPresent(props.theme)) {\n throw noThemeProvider\n }\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 onEffectPseudo(effect: EffectType, css: CSSObject) {\n return effect === 'hover'\n ? { '&:hover': { [notDisabledSelector]: css } }\n : effect === 'press'\n ? { '&:active': { [notDisabledSelector]: css } }\n : // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n effect === 'disabled'\n ? { [disabledSelector]: css }\n : unreachable(effect)\n}\n\nexport function withPrefixes(...parts: string[]) {\n return parts.join('-')\n}\n","import { CSSObject } from 'styled-components'\n\nexport interface Context {\n cancelHalfLeadingPx?: number\n hasVerticalPadding?: boolean\n boxShadowTransition?: boolean\n colorTransition?: boolean\n backgroundColorTransition?: boolean\n}\n\n/**\n * 絶対にこれを export してはいけない\n *\n * さもないと `o.bg[internalSym]` みたいな叩き方が可能になってしまう(補完にも意図せず出てしまう)\n */\nconst internalSym: unique symbol = Symbol('internal')\n\n/**\n * CSSObject に変換可能なオブジェクトを作成する\n *\n * 実際に CSSObject に変換するには外部から `__DO_NOT_USE_GET_INTERNAL__` を使わなければならない\n *\n * これ以降メソッドチェーンが続いてもいいし、続かなくても良い\n */\nexport function createInternal({\n toCSS,\n context = {},\n}: {\n toCSS: (context: Context) => CSSObject\n context?: Context\n}): Internal {\n return {\n [internalSym]: {\n toCSS,\n context,\n },\n }\n}\n\nfunction __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal: Internal) {\n return internal[internalSym]\n}\n\nexport interface Internal {\n [internalSym]: {\n toCSS: (context: Context) => CSSObject\n context: Context\n }\n}\n\n// half-leadingをキャンセルするとき && 垂直方向のpaddingが無い時\n// -> before/afterを入れる\nexport const shouldCancelHalfLeading = ({\n cancelHalfLeadingPx,\n hasVerticalPadding = false,\n}: Context) => cancelHalfLeadingPx !== undefined && !hasVerticalPadding\n\n/**\n * 個別の Internal( o.〇〇 の返り値 )が提出した context の中身を1つの context にまとめる\n */\nexport function getContext(internals: Internal[]) {\n return internals.reduce<Context>(\n (context, internal) => ({\n ...context,\n ...__DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(internal).context,\n }),\n {}\n )\n}\n\n/**\n * 全ユーザー定義からコンテキスト生成し、styled-components 向けに CSSObject を構築\n */\nexport function toCSSObjects(internals: Internal[]): CSSObject[] {\n // 1パス目\n // 全ユーザー定義を舐めて相互に影響し合う定義をチェックし、その結果(コンテキスト)を取得\n const context = getContext(internals)\n\n // 2パス目\n // コンテキストを見ながら最適化されたCSSを構築\n return internals.map((v) =>\n __DO_NOT_USE_ACCESS_PRIVATE_PROPERTY__(v).toCSS(context)\n )\n}\n","import { Key } from '@charcoal-ui/theme'\nimport { unreachable } from '../util'\n\n/**\n * 配列で指定したプロパティを動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param member オブジェクトに生やすプロパティ一覧\n * @param chain プロパティに格納される値を生成する関数\n *\n * @example\n *\n * const o = factory({}, ['red', 'blue'],\n * color => hex(color)\n * )\n *\n * console.log(o.red) //=> #ff0000\n */\nexport const defineProperties = <\n TSource,\n TMember extends readonly Key[],\n TValue\n>(\n source: TSource,\n member: TMember,\n chain: (key: TMember[number]) => TValue\n) =>\n Object.defineProperties(\n source,\n Object.fromEntries(\n member.map((key) => [\n key,\n { get: () => chain(key), enumerable: true, configurable: true },\n ])\n )\n ) as TSource & { readonly [key in TMember[number]]: TValue }\n\n/**\n * 配列で指定した名前のメソッドを動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param member オブジェクトに生やすメソッド名一覧\n * @param chain メソッドの戻り値になる値を生成する関数\n *\n * @example\n *\n * const o = defineMethods({}, ['red', 'blue'],\n * (color, alpha: number) => hex(color, alpha)\n * )\n *\n * console.log(o.red(0.5)) //=> #ff000077\n */\nexport const defineMethods = <\n TSource,\n TMember extends readonly string[],\n TValue,\n TArguments extends unknown[]\n>(\n source: TSource,\n member: TMember,\n chain: (key: TMember[number], ...args: TArguments) => TValue\n) =>\n Object.defineProperties(\n source,\n Object.fromEntries(\n member.map((key) => [\n key,\n {\n value: (...args: TArguments) => chain(key, ...args),\n enumerable: true,\n configurable: true,\n },\n ])\n )\n ) as TSource & {\n readonly [key in TMember[number]]: (...args: TArguments) => TValue\n }\n\n/**\n * オブジェクトで指定したプロパティ名と値を動的に生やす\n *\n * @param source 拡張するオブジェクト\n * @param def オブジェクトに生やす定義(プロパティ名と値)\n *\n * @example\n *\n * const o = defineConstantProperties({}, {\n * red: '#f00',\n * blue: '#00f',\n * })\n *\n * console.log(o.red) //=> #f00\n */\nexport const defineConstantProperties = <\n TSource,\n TDef extends { [key: string]: unknown }\n>(\n source: TSource,\n def: TDef\n) =>\n defineProperties(source, Object.keys(def), (key) => def[key]) as TSource &\n Readonly<TDef>\n\n/**\n * 配列で指定したモディファイア(プロパティ)をチェーン可能な再帰オブジェクトを動的に生やす\n *\n * @param modifiers オブジェクトに生やすモディファイヤ一覧\n * @param source 指定されたモディファイヤの一覧から値を生成する関数\n *\n * @example\n *\n * const o = definePropertyChains(['red', 'blue'],\n * modifiers => modifiers.map(color => hex(color)).join(',')\n * )\n *\n * console.log(o.red.blue) => #f00,#00f\n */\nexport const definePropertyChains = <TSource, T extends Key>(\n modifiers: readonly T[],\n source: (applied: readonly T[]) => TSource\n) =>\n (function definePropertiesRecursively(\n applied: readonly T[]\n ): PropertyChain<TSource, T> {\n const notApplied = modifiers.filter((v) => !applied.includes(v))\n return defineProperties(source(applied), notApplied, (modifier) =>\n notApplied.length === 0\n ? unreachable()\n : definePropertiesRecursively([...applied, modifier])\n )\n })([])\n\nexport type PropertyChain<TSource, TModifiers extends Key> = TSource & {\n readonly [key in TModifiers]: PropertyChain<TSource, Exclude<TModifiers, key>>\n}\n\n/**\n * 配列で指定したモディファイア(メソッド)をチェーン可能な再帰オブジェクトを動的に生やす\n *\n * @param modifiers オブジェクトに生やすモディファイヤ一覧\n * @param source 指定されたモディファイヤの一覧から値を生成する関数\n * @param _inferPhantom 関数形式のモディファイヤの引数型を推論するためのメタタイプ(引数の個数に合わせてタプルで指定する)\n *\n * @example\n *\n * const o = defineMethodChains(['red', 'blue'],\n * modifiers => modifiers.map(([color, alpha]) => hex(color, alpha)).join(',')\n * , {} as [number])\n *\n * console.log(o.red(0.5).blue(1)) => #ff000077,#0000ffff\n */\nexport const defineMethodChains = <\n TSource,\n T extends string,\n TArguments extends unknown[]\n>(\n modifiers: readonly T[],\n source: (applied: readonly [T, ...TArguments][]) => TSource,\n ..._inferPhantom: TArguments\n) =>\n (function defineMethodsRecursively(\n applied: readonly [T, ...TArguments][]\n ): MethodChain<TSource, T, TArguments> {\n const notApplied = modifiers.filter(\n (v) => !applied.map(([w]) => w).includes(v)\n )\n return defineMethods(\n source(applied),\n notApplied,\n (modifier, ...args: TArguments) =>\n notApplied.length === 0\n ? unreachable()\n : defineMethodsRecursively([...applied, [modifier, ...args]])\n )\n })([])\n\nexport type MethodChain<\n TSource,\n TModifiers extends string,\n TArguments extends unknown[]\n> = TSource & {\n readonly [key in TModifiers]: (\n ...args: TArguments\n ) => MethodChain<TSource, Exclude<TModifiers, key>, TArguments>\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\nimport { keyof, variable, withPrefixes } from '../util'\nimport { Internal, createInternal } from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\nimport { customPropertyToken } from '@charcoal-ui/utils'\n\nexport const borderDirections = ['top', 'right', 'bottom', 'left'] as const\ntype BorderDirection = (typeof borderDirections)[number]\n\nexport const createBorderCss = <T extends CharcoalAbstractTheme>(\n variant: keyof T['border'],\n directions: readonly BorderDirection[]\n): Internal => {\n const all = directions.length === 0\n\n const value = `solid 1px ${variable(\n customPropertyToken(withPrefixes('border', variant.toString()))\n )}`\n\n return createInternal({\n toCSS() {\n return {\n ...(all\n ? { border: value }\n : directions.reduce<CSSObject>(\n (acc, direction) => ({\n ...acc,\n [`border-${direction}`]: value,\n }),\n {}\n )),\n }\n },\n })\n}\n\nexport default function border<T extends CharcoalAbstractTheme>(theme: T) {\n const borderTypes = keyof<T['border']>(theme.border)\n\n const borderObject = defineConstantProperties(\n {},\n {\n border: defineProperties({}, borderTypes, (variant) =>\n definePropertyChains(borderDirections, (modifiers) =>\n createBorderCss(variant, modifiers)\n )\n ),\n }\n )\n return borderObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { Internal, createInternal } from '../internals'\nimport { defineConstantProperties } from '../factories/lib'\n\nexport const createBorderRadiusCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (size: keyof T['borderRadius']): Internal => {\n return createInternal({\n toCSS() {\n return {\n borderRadius: px(theme.borderRadius[size]),\n }\n },\n })\n }\n\nexport default function borderRadius<T extends CharcoalAbstractTheme>(\n theme: T\n) {\n // 角丸\n const borderRadiusCss = createBorderRadiusCss(theme)\n const borderRadiusObject = defineConstantProperties(\n {},\n {\n borderRadius: (radius: keyof T['borderRadius']) =>\n borderRadiusCss(radius),\n }\n )\n\n return borderRadiusObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport {\n applyEffect,\n applyEffectToGradient,\n customPropertyToken,\n dur,\n gradient,\n GradientDirection,\n} from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport warning from 'warning'\nimport {\n keyof,\n objectAssign,\n isSupportedEffect,\n onEffectPseudo,\n variable,\n} from '../util'\nimport {\n createInternal,\n Internal,\n Context,\n shouldCancelHalfLeading,\n} from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\nimport { TRANSITION_DURATION } from './transition'\n\nconst colorProperties = ['bg', 'font'] as const\nexport type ColorProperty = (typeof colorProperties)[number]\n\nfunction targetProperty(target: ColorProperty) {\n return target === 'bg' ? 'background-color' : 'color'\n}\n\nexport const createColorCss =\n <T extends CharcoalAbstractTheme>(_theme: T) =>\n (\n target: ColorProperty,\n color: keyof T['color'],\n effects: readonly (keyof T['effect'])[] = []\n ): Internal => {\n function toCSS() {\n return {\n [targetProperty(target)]: variable(\n customPropertyToken(color.toString())\n ),\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n [targetProperty(target)]: variable(\n customPropertyToken(color.toString(), [effect])\n ),\n }),\n }),\n {}\n ),\n }\n }\n\n return createInternal({\n toCSS,\n context:\n effects.length > 0\n ? target === 'font'\n ? {\n colorTransition: true,\n }\n : {\n backgroundColorTransition: true,\n }\n : {},\n })\n }\n\nexport const createGradientColorCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n color: keyof T['gradientColor'],\n effects: readonly (keyof T['effect'])[] = [],\n direction: GradientDirection\n ): Internal => {\n const toLinearGradient = gradient(direction)\n\n function toCSS(context: Context): CSSObject {\n const optimized = !shouldCancelHalfLeading(context)\n const duration = dur(TRANSITION_DURATION)\n\n if (optimized && effects.length > 0) {\n return {\n position: 'relative',\n zIndex: 0,\n overflow: 'hidden',\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n '&::before': {\n zIndex: -1,\n ...overlayElement,\n transition: `${duration} background-color`,\n },\n '&::after': {\n zIndex: -2,\n ...overlayElement,\n ...toLinearGradient(theme.gradientColor[color]),\n },\n ...onEffectPseudo(effect, {\n '&::before': {\n backgroundColor: applyEffect(\n null,\n theme.effect[effect] ?? []\n ),\n },\n }),\n }),\n {}\n ),\n }\n }\n\n warning(\n effects.length === 0,\n\n `'Transition' will not be applied. You can get around this by specifying 'preserveHalfLeading' or both 'padding' and 'typography'.`\n )\n\n return {\n ...toLinearGradient(theme.gradientColor[color]),\n ...effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n ...toLinearGradient(\n applyEffectToGradient(theme.effect[effect] ?? [])(\n theme.gradientColor[color]\n )\n ),\n }),\n }),\n {}\n ),\n }\n }\n\n return createInternal({ toCSS })\n }\n\nconst overlayElement: CSSObject = {\n content: \"''\",\n display: 'block',\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n}\n\nexport default function colors<T extends CharcoalAbstractTheme>(theme: T) {\n const colors = keyof<T['color']>(theme.color)\n const effects = keyof<T['effect']>(theme.effect)\n\n // 色\n const gradientColors = keyof<T['gradientColor']>(theme.gradientColor)\n const colorCss = createColorCss(theme)\n const gradientColorCss = createGradientColorCss(theme)\n\n const colorObject = defineConstantProperties(\n {},\n {\n bg: objectAssign(\n defineProperties({}, colors, (color) =>\n definePropertyChains(effects, (modifiers) =>\n colorCss('bg', color, modifiers)\n )\n ),\n defineProperties(\n {},\n gradientColors,\n (color) => (direction: GradientDirection) =>\n definePropertyChains(effects, (modifiers) =>\n gradientColorCss(color, modifiers, direction)\n )\n )\n ),\n font: defineProperties({}, colors, (color) =>\n definePropertyChains(effects, (modifiers) =>\n colorCss('font', color, modifiers)\n )\n ),\n }\n )\n\n return colorObject\n}\n","import { dur } from '@charcoal-ui/utils'\nimport { isPresent } from '../util'\nimport { Internal, createInternal, Context } from '../internals'\n\n// TODO: deprecate\nexport const TRANSITION_DURATION = 0.2\n\n/**\n * context の状態を元に transition を追加する。必ず一番最後に呼ぶ\n */\nexport default function transition(_theme: unknown): Internal {\n const duration = dur(TRANSITION_DURATION)\n const transition = (property: string[]) => ({\n transition: property.map((v) => `${duration} ${v}`).join(', '),\n })\n\n function toCSS({\n colorTransition = false,\n backgroundColorTransition = false,\n boxShadowTransition = false,\n }: Context) {\n return transition(\n [\n colorTransition ? 'color' : null,\n backgroundColorTransition ? 'background-color' : null,\n boxShadowTransition ? 'box-shadow' : null,\n ].filter(isPresent)\n )\n }\n\n return createInternal({ toCSS })\n}\n","import { CharcoalAbstractTheme, EffectType } from '@charcoal-ui/theme'\nimport { CSSObject } from 'styled-components'\nimport {\n isSupportedEffect,\n keyof,\n onEffectPseudo,\n ReadonlyArrayConstructor,\n unreachable,\n} from '../util'\nimport { Internal, createInternal } from '../internals'\nimport { definePropertyChains } from '../factories/lib'\n\nexport const createElementEffectCss =\n <\n T extends CharcoalAbstractTheme,\n TElementEffect extends T['elementEffect']\n >(theme: {\n elementEffect: TElementEffect\n }) =>\n (effects: readonly (keyof TElementEffect)[] = []): Internal =>\n createInternal({\n toCSS() {\n return effects.filter(isSupportedEffect).reduce<CSSObject>(\n (acc, effect) => ({\n ...acc,\n ...onEffectPseudo(effect, {\n opacity:\n !(Array as ReadonlyArrayConstructor).isArray(\n theme.elementEffect[effect]\n ) && theme.elementEffect[effect]?.type === 'opacity'\n ? theme.elementEffect[effect]?.opacity\n : unreachable(),\n }),\n }),\n {}\n )\n },\n })\n\nexport default function elementEffect<T extends CharcoalAbstractTheme>(\n theme: T\n) {\n const effectTypes = keyof<T['elementEffect']>(\n theme.elementEffect\n ) as EffectType[]\n\n // 要素へのエフェクト (etc: 透過)\n const elementEffectCss = createElementEffectCss(theme)\n const elementEffectObject = definePropertyChains(effectTypes, (modifiers) =>\n elementEffectCss(modifiers)\n )\n\n return elementEffectObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px, notDisabledSelector } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport { keyof } from '../util'\nimport { Internal, createInternal } from '../internals'\nimport {\n defineConstantProperties,\n defineProperties,\n definePropertyChains,\n} from '../factories/lib'\n\nexport const outlineType = ['focus'] as const\ntype OutlineType = (typeof outlineType)[number]\n\nconst outlineCss = (weight: number, color: string) => ({\n boxShadow: `0 0 0 ${px(weight)} ${color}`,\n})\n\nexport const createOutlineColorCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n variant: keyof T['outline'],\n modifiers: readonly OutlineType[]\n ): Internal => {\n const weight = theme.outline[variant].weight\n const color = theme.outline[variant].color\n\n return createInternal({\n toCSS() {\n return modifiers.includes('focus')\n ? onFocus(outlineCss(weight, color))\n : { '&&': { [notDisabledSelector]: outlineCss(weight, color) } }\n },\n context: {\n boxShadowTransition: true,\n },\n })\n }\n\n/**\n * @see https://developer.mozilla.org/ja/docs/Web/CSS/:focus-visible#selectively_showing_the_focus_indicator\n */\nconst onFocus = (css: CSSObject) => ({\n [notDisabledSelector]: {\n '&:focus, &:active': {\n outline: 'none',\n ...css,\n },\n\n '&:focus:not(:focus-visible), &:active:not(:focus-visible)': {\n outline: 'none',\n },\n\n '&:focus-visible': {\n outline: 'none',\n ...css,\n },\n },\n})\n\nexport default function outline<T extends CharcoalAbstractTheme>(theme: T) {\n const outlineCss = createOutlineColorCss(theme)\n\n const outlineObject = defineConstantProperties(\n {},\n {\n outline: defineProperties(\n {},\n keyof<T['outline']>(theme.outline),\n (variant) =>\n definePropertyChains(outlineType, (modifiers) =>\n outlineCss(variant, modifiers)\n )\n ),\n }\n )\n\n return outlineObject\n}\n","import { columnSystem } from '@charcoal-ui/foundation'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { Internal, createInternal } from '../internals'\nimport { defineProperties, defineConstantProperties } from '../factories/lib'\n\nexport const fixedProperties = ['width', 'height'] as const\ntype FixedProperty = (typeof fixedProperties)[number]\n\nexport const createFixedPxCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (property: FixedProperty, size: keyof T['spacing'] | 'auto'): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: size === 'auto' ? 'auto' : px(theme.spacing[size]),\n }\n },\n })\n\nexport const createFixedRelativeCss =\n <T extends CharcoalAbstractTheme>(_theme: T) =>\n (property: FixedProperty, amount: '100%' | 'auto'): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: amount,\n }\n },\n })\n\nexport const createFixedColumnCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (property: FixedProperty, span: number): Internal =>\n createInternal({\n toCSS() {\n return {\n [property]: px(\n columnSystem(span, theme.grid.unit.column, theme.grid.unit.gutter)\n ),\n }\n },\n })\n\nexport default function size<T extends CharcoalAbstractTheme>(theme: T) {\n const fixedPxCss = createFixedPxCss(theme)\n const fixedColumnCss = createFixedColumnCss(theme)\n const fixedRelativeCss = createFixedRelativeCss(theme)\n const fixedObject = defineProperties({}, fixedProperties, (property) =>\n defineConstantProperties(\n {},\n {\n px: (size: keyof T['spacing'] | 'auto') => fixedPxCss(property, size),\n column: (span: number) => fixedColumnCss(property, span),\n auto: fixedRelativeCss(property, 'auto'),\n full: fixedRelativeCss(property, '100%'),\n }\n )\n )\n return fixedObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { px } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport { Internal, createInternal, Context } from '../internals'\nimport { defineProperties, defineMethodChains } from '../factories/lib'\n\nexport const spacingProperties = ['margin', 'padding'] as const\nexport const spacingDirections = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'vertical',\n 'horizontal',\n 'all',\n] as const\ntype SpacingProperty = (typeof spacingProperties)[number]\ntype SpacingDirection = (typeof spacingDirections)[number]\n\nfunction spacingProperty(\n property: SpacingProperty,\n direction: 'top' | 'right' | 'bottom' | 'left'\n) {\n return `${property}-${direction}`\n}\n\nexport const createSpacingCss =\n <T extends CharcoalAbstractTheme>(theme: { spacing: T['spacing'] }) =>\n (\n property: SpacingProperty,\n modifiers: readonly [SpacingDirection, keyof T['spacing'] | 'auto'][]\n ): Internal => {\n const { top, right, bottom, left } = modifiers.reduce(\n (acc, [direction, size]) => {\n if (direction === 'all') {\n acc.top = size\n acc.right = size\n acc.bottom = size\n acc.left = size\n } else if (direction === 'vertical') {\n acc.top = size\n acc.bottom = size\n } else if (direction === 'horizontal') {\n acc.right = size\n acc.left = size\n } else {\n acc[direction] = size\n }\n return acc\n },\n {} as Partial<\n Record<'top' | 'right' | 'bottom' | 'left', keyof T['spacing'] | 'auto'>\n >\n )\n\n const hasVerticalPadding =\n property === 'padding' &&\n top !== undefined &&\n bottom !== undefined &&\n top !== 'auto' &&\n bottom !== 'auto'\n\n function toCSS({ cancelHalfLeadingPx = 0 }: Context): CSSObject {\n return {\n ...(top !== undefined && {\n [spacingProperty(property, 'top')]:\n top === 'auto'\n ? 'auto'\n : px(\n theme.spacing[top] +\n (hasVerticalPadding ? cancelHalfLeadingPx : 0)\n ),\n }),\n ...(bottom !== undefined && {\n [spacingProperty(property, 'bottom')]:\n bottom === 'auto'\n ? 'auto'\n : px(\n theme.spacing[bottom] +\n (hasVerticalPadding ? cancelHalfLeadingPx : 0)\n ),\n }),\n ...(right !== undefined && {\n [spacingProperty(property, 'right')]:\n right === 'auto' ? 'auto' : px(theme.spacing[right]),\n }),\n ...(left !== undefined && {\n [spacingProperty(property, 'left')]:\n left === 'auto' ? 'auto' : px(theme.spacing[left]),\n }),\n }\n }\n\n return createInternal({\n toCSS,\n context: hasVerticalPadding ? { hasVerticalPadding: true } : {},\n })\n }\n\nexport default function spacing<T extends CharcoalAbstractTheme>(theme: T) {\n const spacingCss = createSpacingCss(theme)\n const spacingObject = defineProperties(\n {},\n spacingProperties,\n (spacingProperty) =>\n defineMethodChains(\n spacingDirections,\n (modifiers) => spacingCss(spacingProperty, modifiers),\n {} as keyof T['spacing'] | 'auto' // 推論のためのメタタイプ\n )\n )\n return spacingObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { halfLeading, px } from '@charcoal-ui/utils'\nimport { CSSObject } from 'styled-components'\nimport {\n Internal,\n createInternal,\n shouldCancelHalfLeading,\n Context,\n} from '../internals'\nimport { defineProperties, definePropertyChains } from '../factories/lib'\n\nexport const createTypographyCss =\n <T extends CharcoalAbstractTheme>(theme: T) =>\n (\n size: keyof T['typography']['size'],\n options: {\n preserveHalfLeading?: boolean\n monospace?: boolean\n bold?: boolean\n } = {}\n ): Internal => {\n const {\n preserveHalfLeading = false,\n monospace = false,\n bold = false,\n } = options\n const descriptor = theme.typography.size[size]\n const margin = -halfLeading(descriptor)\n\n function toCSS(context: Context): CSSObject {\n return {\n fontSize: px(descriptor.fontSize),\n lineHeight: px(descriptor.lineHeight),\n ...(monospace && {\n fontFamily: 'monospace',\n }),\n ...(bold && {\n fontWeight: 'bold',\n }),\n ...(shouldCancelHalfLeading(context) && {\n // prevent margin collapsing\n display: 'flow-root',\n // cancel half-leading with negative margin\n '&::before': {\n ...leadingCancel,\n marginTop: px(margin),\n },\n '&::after': {\n ...leadingCancel,\n marginBottom: px(margin),\n },\n }),\n }\n }\n\n return createInternal({\n toCSS,\n context: !preserveHalfLeading\n ? {\n cancelHalfLeadingPx: margin,\n }\n : {},\n })\n }\n\nconst leadingCancel: CSSObject = {\n display: 'block',\n width: 0,\n height: 0,\n content: `''`,\n}\n\n// タイポグラフィ\nconst typographyModifiers = [\n // TODO\n 'monospace',\n 'bold',\n 'preserveHalfLeading',\n] as const\n\nexport default function typography<T extends CharcoalAbstractTheme>(theme: T) {\n const typographyCss = createTypographyCss(theme)\n const typographyObject = defineProperties(\n {},\n ['typography'] as const,\n (_) => (size: keyof T['typography']['size']) =>\n definePropertyChains(typographyModifiers, (modifiers) =>\n typographyCss(size, {\n preserveHalfLeading: modifiers.includes('preserveHalfLeading'),\n monospace: modifiers.includes('monospace'),\n bold: modifiers.includes('bold'),\n })\n )\n )\n\n return typographyObject\n}\n","import { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { objectAssign } from '../util'\nimport border from './border'\nimport borderRadius from './borderRadius'\nimport colors from './colors'\nimport elementEffect from './elementEffect'\nimport outline from './outline'\nimport size from './size'\nimport spacing from './spacing'\nimport typography from './typography'\n\n/**\n * `theme(o => [...])` の `o` の部分を構築する\n *\n * @param theme テーマオブジェクト\n */\nexport default function createO<T extends CharcoalAbstractTheme>(\n theme: {\n // factoryの第二引数に入れ込むものだけ明示的に型変数を展開しておくことで型の具象化を遅延する\n color: T['color']\n gradientColor: T['gradientColor']\n border: T['border']\n outline: T['outline']\n } & Omit<T, 'color' | 'gradientColor' | 'border' | 'outline'>\n) {\n return objectAssign(\n colors(theme),\n typography(theme),\n spacing(theme),\n size(theme),\n elementEffect(theme),\n border(theme),\n borderRadius(theme),\n outline(theme)\n )\n}\n","import { createGlobalStyle, css } from 'styled-components'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { defineThemeVariables, withPrefixes } from './util'\nimport { mapObject } from '@charcoal-ui/utils'\n\nconst GlobalStyle = createGlobalStyle<{\n themeMap: ThemeMap<Theme>\n background?: keyof ThemeMap<Theme>[string]['color']\n}>`\n ${({ themeMap, background }) =>\n Object.entries(themeMap).map(([key, theme]) =>\n key.startsWith('@media')\n ? css`\n ${key} {\n :root {\n ${background !== undefined &&\n css`\n background-color: ${theme.color[background]};\n `}\n ${defineColorVariableCSS(theme)}\n }\n }\n `\n : css`\n /* stylelint-disable-next-line no-duplicate-selectors */\n ${key} {\n ${background !== undefined &&\n css`\n background-color: ${theme.color[background]};\n `}\n ${defineColorVariableCSS(theme)}\n }\n `\n )}\n`\n\nexport interface ThemeMap<T extends Theme> {\n ':root': T\n [mediaQuery: `@media (${string})`]: T\n [selector: string]: T\n}\n\ntype Theme = Pick<CharcoalAbstractTheme, 'color' | 'effect' | 'border'>\n\nexport default function TokenInjector<T extends Theme>({\n theme: themeMap,\n background,\n}: {\n theme: ThemeMap<T>\n background?: keyof ThemeMap<T>[string]['color']\n}) {\n return <GlobalStyle themeMap={themeMap} background={background} />\n}\n\nconst 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\n return toCSSVariables(colors)\n}\n\nfunction toCSSVariables(css: Record<string, string | number>) {\n return Object.entries(css)\n .map(([varName, value]) => variableDefinition(varName, value.toString()))\n .join(';')\n}\n\nconst variableDefinition = (prop: string, value: string) => `${prop}: ${value}`\n","import { useEffect, useMemo, useState } from 'react'\n\nexport const LOCAL_STORAGE_KEY = 'charcoal-theme'\nexport const DEFAULT_ROOT_ATTRIBUTE = 'theme'\n\nconst keyStringRegExp = new RegExp(/^(\\w|-)+$/)\n\n/**\n * 文字列が英数字_-のみで構成されているか検証する。不正な文字列ならエラーを投げる\n * @param key 検証するキー\n */\nexport function assertKeyString(key: string) {\n if (!keyStringRegExp.test(key)) {\n throw new Error(`Unexpected key :${key}, expect: /^(\\\\w|-)+$/`)\n }\n}\n\n/**\n * `<html data-theme=\"dark\">` のような設定を行うデフォルトのセッター\n */\nexport const themeSetter =\n (attr: string = DEFAULT_ROOT_ATTRIBUTE) =>\n (theme: string | undefined) => {\n assertKeyString(attr)\n if (theme !== undefined) {\n document.documentElement.dataset[attr] = theme\n } else {\n delete document.documentElement.dataset[attr]\n }\n }\n\n/**\n * `<html data-theme=\"dark\">` にマッチするセレクタを生成する\n */\nexport function themeSelector<\n T extends string,\n S extends string = typeof DEFAULT_ROOT_ATTRIBUTE\n>(theme: T, attr?: S) {\n return `:root[data-${attr ?? DEFAULT_ROOT_ATTRIBUTE}='${theme}']` as const\n}\n\n/**\n * prefers-color-scheme を利用する media クエリを生成する\n */\nexport function prefersColorScheme<T extends 'light' | 'dark'>(theme: T) {\n return `@media (prefers-color-scheme: ${theme})` as const\n}\n\n/**\n * LocalStorageからテーマの情報を取得して、変化時にテーマをセットするhooks\n */\nexport function useThemeSetter({\n key = LOCAL_STORAGE_KEY,\n setter = themeSetter(),\n}: { key?: string; setter?: (theme: string | undefined) => void } = {}) {\n const [theme, , system] = useTheme(key)\n\n useEffect(() => {\n if (theme === undefined) {\n return\n }\n // prefers-color-scheme から値を取っている場合にはcssのみで処理したいのでアンセットする\n setter(system ? undefined : theme)\n }, [setter, system, theme])\n}\n\n/**\n * 同期的にLocalStorageからテーマを取得するヘルパ\n */\nexport function getThemeSync(key: string = LOCAL_STORAGE_KEY) {\n const theme = localStorage.getItem(key)\n return theme\n}\n\n/**\n * LocalStorage, prefers-color-scheme からテーマの情報を取得して、現在のテーマを返すhooks\n *\n * `dark` `light` という名前だけは特別扱いされていて、prefers-color-schemeにマッチした場合に返ります\n */\nexport const useTheme = (localStorageKey: string = LOCAL_STORAGE_KEY) => {\n assertKeyString(localStorageKey)\n const isDark = useMedia('(prefers-color-scheme: dark)')\n const media = isDark !== undefined ? (isDark ? 'dark' : 'light') : undefined\n const [local, setTheme, ready] =\n useLocalStorage<typeof media>(localStorageKey)\n const theme = !ready || media === undefined ? undefined : local ?? media\n const system = local === undefined\n return [theme, setTheme, system] as const\n}\n\nexport function useLocalStorage<T>(key: string, defaultValue?: () => T) {\n const [ready, setReady] = useState(false)\n const [state, setState] = useState<T>()\n const defaultValueMemo = useMemo(() => defaultValue?.(), [defaultValue])\n\n useEffect(() => {\n fetch()\n window.addEventListener('storage', handleStorage)\n return () => {\n window.removeEventListener('storage', handleStorage)\n }\n })\n\n const handleStorage = (e: StorageEvent) => {\n if (e.storageArea !== localStorage) {\n return\n }\n if (e.key !== key) {\n return\n }\n fetch()\n }\n\n const fetch = () => {\n const raw = localStorage.getItem(key)\n setState((raw !== null ? deserialize(raw) : null) ?? defaultValueMemo)\n setReady(true)\n }\n\n const set = (value: T | undefined) => {\n if (value === undefined) {\n // undefinedがセットされる場合にはkeyごと削除\n localStorage.removeItem(key)\n } else {\n const raw = serialize(value)\n localStorage.setItem(key, raw)\n }\n\n // 同一ウィンドウではstorageイベントが発火しないので、手動で発火させる\n const event = new StorageEvent('storage', {\n bubbles: true,\n cancelable: false,\n key,\n url: location.href,\n storageArea: localStorage,\n })\n dispatchEvent(event)\n }\n\n return [state ?? defaultValueMemo, set, ready] as const\n}\n\nfunction deserialize<T>(raw: string): T {\n try {\n return JSON.parse(raw) as T\n } catch {\n // syntax error はすべて文字列として扱う\n return raw as unknown as T\n }\n}\n\nfunction serialize(value: unknown): string {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value)\n }\n}\n\nexport function useMedia(query: string) {\n const [match, setState] = useState<boolean>()\n\n useEffect(() => {\n const matcher = window.matchMedia(query)\n\n const onChange = () => {\n setState(matcher.matches)\n }\n\n matcher.addEventListener('change', onChange)\n\n setState(matcher.matches)\n\n return () => {\n matcher.removeEventListener('change', onChange)\n }\n }, [query])\n\n return match\n}\n","import { css } from 'styled-components'\n\nconst boldCss = css`\n font-weight: bold;\n`\n\nexport const removeHalfLeadingCss = css`\n &::before {\n display: block;\n width: 0;\n height: 0;\n content: '';\n margin-top: -4px;\n }\n\n &::after {\n display: block;\n width: 0;\n height: 0;\n content: '';\n margin-bottom: -4px;\n }\n`\n\nexport function typography(\n size: 12 | 14 | 16 | 20,\n bold = false,\n preserveHalfLeading = false\n) {\n const cssObj = css`\n font-size: ${size}px;\n line-height: ${size + 8}px;\n display: flow-root;\n ${bold === true && boldCss}\n ${preserveHalfLeading !== true && removeHalfLeadingCss}\n `\n\n return cssObj\n}\n","import {\n assertKeyString,\n DEFAULT_ROOT_ATTRIBUTE,\n LOCAL_STORAGE_KEY,\n} from './helper'\n\ninterface Props {\n localStorageKey: string\n rootAttribute: string\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するコードを取得する\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns ソースコードの文字列\n */\nexport function makeSetThemeScriptCode({\n localStorageKey = defaultProps.localStorageKey,\n rootAttribute = defaultProps.rootAttribute,\n}: Partial<Props> = defaultProps) {\n assertKeyString(localStorageKey)\n assertKeyString(rootAttribute)\n return `'use strict';\n(function () {\n var localStorageKey = '${localStorageKey}'\n var rootAttribute = '${rootAttribute}'\n var currentTheme = localStorage.getItem(localStorageKey);\n if (currentTheme) {\n document.documentElement.dataset[rootAttribute] = currentTheme;\n }\n})();\n`\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するスクリプトタグ\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns\n */\nexport function SetThemeScript(props: Props) {\n const src = makeSetThemeScriptCode(props)\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: src,\n }}\n />\n )\n}\n\nconst defaultProps: Props = {\n localStorageKey: LOCAL_STORAGE_KEY,\n rootAttribute: DEFAULT_ROOT_ATTRIBUTE,\n}\n\nSetThemeScript.defaultProps = defaultProps\n","import { css } from 'styled-components'\n\n/**\n * `&:focus:not(:focus-visible)` is backwards compatibility for legacy browsers.\n *\n * cf. https://github.com/WICG/focus-visible#backwards-compatibility\n */\nexport const focusVisibleFocusRingCss = css`\n &:focus {\n outline: none;\n box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);\n }\n &:focus:not(:focus-visible) {\n box-shadow: none;\n }\n &:focus-visible {\n box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);\n }\n`\n","import { css } from 'styled-components'\n\nexport const disabledCss = css`\n &:disabled,\n &[aria-disabled]:not([aria-disabled='false']) {\n opacity: 0.32;\n cursor: default;\n }\n`\n","import { css } from 'styled-components'\n\nexport const assertiveRingCss = css`\n box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);\n`\n","import { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { SpacingType } from './helpers/SpacingType'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function margin(arg1: SpacingType): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType,\n arg3: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2: SpacingType,\n arg3: SpacingType,\n arg4: SpacingType\n): FlattenSimpleInterpolation\n\nexport function margin(\n arg1: SpacingType,\n arg2?: SpacingType,\n arg3?: SpacingType,\n arg4?: SpacingType\n) {\n return css`\n margin: ${pxIfNum(arg1)} ${pxIfNum(arg2)} ${pxIfNum(arg3)} ${pxIfNum(arg4)};\n `\n}\n\nexport function marginTop(v: SpacingType) {\n return css`\n margin-top: ${pxIfNum(v)};\n `\n}\n\nexport function marginBottom(v: SpacingType) {\n return css`\n margin-bottom: ${pxIfNum(v)};\n `\n}\n\nexport function marginLeft(v: SpacingType) {\n return css`\n margin-left: ${pxIfNum(v)};\n `\n}\n\nexport function marginRight(v: SpacingType) {\n return css`\n margin-right: ${pxIfNum(v)};\n `\n}\n","export function pxIfNum(v?: number | string) {\n if (v === undefined) return ''\n if (typeof v === 'number') return `${v}px`\n return v\n}\n","import { Spacing } from '@charcoal-ui/theme'\nimport { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function padding(arg1: keyof Spacing): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing,\n arg3: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2: keyof Spacing,\n arg3: keyof Spacing,\n arg4: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function padding(\n arg1: keyof Spacing,\n arg2?: keyof Spacing,\n arg3?: keyof Spacing,\n arg4?: keyof Spacing\n) {\n return css`\n padding: ${arg1}px ${pxIfNum(arg2)} ${pxIfNum(arg3)} ${pxIfNum(arg4)};\n `\n}\n\nexport function paddingTop(v: keyof Spacing) {\n return css`\n padding-top: ${v}px;\n `\n}\n\nexport function paddingBottom(v: keyof Spacing) {\n return css`\n padding-bottom: ${v}px;\n `\n}\n\nexport function paddingLeft(v: keyof Spacing) {\n return css`\n padding-left: ${v}px;\n `\n}\n\nexport function paddingRight(v: keyof Spacing) {\n return css`\n padding-right: ${v}px;\n `\n}\n","import { Spacing } from '@charcoal-ui/theme'\nimport { css, FlattenSimpleInterpolation } from 'styled-components'\nimport { pxIfNum } from './helpers/pxIfNum'\n\nexport function gap(v1: keyof Spacing): FlattenSimpleInterpolation\n\nexport function gap(\n v1: keyof Spacing,\n v2: keyof Spacing\n): FlattenSimpleInterpolation\n\nexport function gap(v1: keyof Spacing, v2?: keyof Spacing) {\n return css`\n gap: ${v1}px ${pxIfNum(v2)};\n `\n}\n\nexport function rowGap(v: keyof Spacing) {\n return css`\n row-gap: ${v}px;\n `\n}\n\nexport function columnGap(v: keyof Spacing) {\n return css`\n column-gap: ${v}px;\n `\n}\n","import { CharcoalTheme } from '@charcoal-ui/theme'\nimport { CharcoalThemeUtils } from './CharcoalStyledTheme'\nimport {\n margin,\n marginBottom,\n marginLeft,\n marginRight,\n marginTop,\n} from './margin'\nimport {\n padding,\n paddingBottom,\n paddingLeft,\n paddingRight,\n paddingTop,\n} from './padding'\nimport { columnGap, gap, rowGap } from './gap'\nimport { disabledCss } from '../styles/disabledCss'\nimport { typography } from './typographyCss'\nimport { focusVisibleFocusRingCss } from '../styles/focusVisibleFocusRingCss'\nimport { assertiveRingCss } from '../styles/assertiveRingCss'\n\n/**\n * Adds some utilities to the theme object.\n * They can be used as an alternative `createTheme`(`theme(o=>)`) for styling.\n */\nexport function addThemeUtils(\n theme: CharcoalTheme\n): CharcoalTheme & CharcoalThemeUtils {\n return {\n ...theme,\n utils: {\n margin,\n marginTop,\n marginLeft,\n marginBottom,\n marginRight,\n padding,\n paddingTop,\n paddingLeft,\n paddingBottom,\n paddingRight,\n gap,\n rowGap,\n columnGap,\n typography,\n focusVisibleFocusRingCss,\n assertiveRingCss,\n disabledCss,\n },\n }\n}\n","import { CSSObject, ThemedStyledInterface } from 'styled-components'\nimport { CharcoalAbstractTheme } from '@charcoal-ui/theme'\nimport { ArrayOrSingle, isPresent, noThemeProvider, wrapArray } from './util'\nimport { Internal, toCSSObjects } from './internals'\nimport createO from './builders/o'\nimport transition from './builders/transition'\nexport { default as TokenInjector } from './TokenInjector'\nexport {\n getThemeSync,\n themeSetter,\n themeSelector,\n prefersColorScheme,\n useTheme,\n useThemeSetter,\n useLocalStorage,\n useMedia,\n} from './helper'\nexport { defineThemeVariables } from './util'\nexport { removeHalfLeadingCss } from './utils/typographyCss'\nexport * from './SetThemeScript'\n\ntype Blank = null | undefined | false\n\nconst nonBlank = <T>(value: T): value is T extends Blank ? never : T =>\n isPresent(value) && (value as unknown) !== false\n\n/**\n * @deprecated\n * 実行時のパフォーマンスが低い問題があります。\n * ref. https://github.com/pixiv/charcoal/pull/377\n *\n * styled-components の theming 方法を推奨します。\n * ref. https://styled-components.com/docs/advanced#theming\n *\n * `theme(o => [...])` の `theme` ユーティリティを構築する\n *\n * @param _styled - DEPRECATED: styled-components の `styled` そのものを渡すとそれを元に型推論ができる。が、型引数を渡す方が型推論が高速になりやすい\n *\n * @example\n *\n * import styled from 'styled-components'\n * const theme = createTheme(styled)\n *\n * @example\n *\n * const theme = createTheme<DefaultTheme>()\n */\nexport function createTheme<T extends CharcoalAbstractTheme>(\n _styled?: ThemedStyledInterface<T>\n) {\n type Builder = ReturnType<typeof createO<T>>\n\n // ランタイムの `theme(o => [...])` のインターフェースを構築する\n return function theme(\n specFn: (o: Builder) => ArrayOrSingle<Internal | Blank>\n ): ThemeProp<T> {\n // styled-components のテンプレートに埋め込める関数\n return function interpolate({ theme }) {\n if (!isPresent(theme)) {\n // テーマが入っていない場合は復旧不可能なのでエラーにする\n throw noThemeProvider\n }\n\n const internals = [\n // ユーザーが定義したルール\n ...wrapArray(\n /**\n * こう書いてはいけない\n *\n * ❌\n * ```ts\n * const o = createO(theme)\n * const declaration = spec(o)\n * ```\n *\n * `o` を一時変数に入れてしまうと型 `T` の具象化が行われるので関数内に書く\n */\n specFn(/** o = */ createO(theme))\n ),\n\n // 必ず挿入される共通のルール\n transition(theme),\n ].filter(nonBlank)\n\n return toCSSObjects(internals)\n }\n }\n}\n\nexport type ThemeProp<T> = ({\n theme,\n}: {\n theme: T | undefined\n}) => CSSObject | CSSObject[]\n\nexport { focusVisibleFocusRingCss } from './styles/focusVisibleFocusRingCss'\nexport { disabledCss } from './styles/disabledCss'\nexport { assertiveRingCss } from './styles/assertiveRingCss'\nexport type { CharcoalThemeUtils } from './utils/CharcoalStyledTheme'\nexport { addThemeUtils } from './utils/addThemeUtils'\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA4BA,SAAS,YAAY,OAAsB;AAChD,QAAM,IAAI;AAAA,IACR,UAAU,WAAW,IACjB,gBACA,gBAAgB,KAAK,UAAU,KAAK;AAAA,EAC1C;AACF;AAOO,IAAM,YAAY,CAAI,UAAsC,SAAS;AA4BrE,SAAS,gBAAiC,SAAY;AAC3D,SAAO,OAAO,OAAO,CAAC,GAAG,GAAG,OAAO;AACrC;AAYO,SAAS,MAKd,KAAQ;AACR,SAAO,OAAO,KAAK,GAAG;AACxB;AAkBO,SAAS,UAAa,OAA8B;AACzD,SAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAC9C;AAIO,IAAM,kBAAkB,IAAI;AAAA,EACjC;AACF;AAmBO,SAAS,qBACd,aACA,cACA;AACA,SAAO,SAAS,YAAY,OAEH;AACvB,QAAI,CAAC,UAAU,MAAM,KAAK,GAAG;AAC3B,YAAM;AAAA,IACR;AAEA,UAAMA,UAAS,aAAa,aAAa,SAAS;AAGlD,UAAM,UAAU,OAAO,QAAQ;AAAA,MAC7B,GAAG,MAAM,MAAM;AAAA,MACf,GAAG;AAAA,IACL,CAAC;AAED,WAAO,cAAcA,SAAQ,CAAC,UAAU,UAAU;AAAA,MAChD,CAAC,oBAAoB,QAAQ,GAAG,KAAK;AAAA,MAErC,GAAG,QAAQ,IAAsB,CAAC,CAAC,WAAW,MAAM,MAAM;AAAA,QACxD,oBAAoB,UAAU,CAAC,SAAS,CAAC;AAAA,QACzC,YAAY,OAAO,CAAC,MAAM,CAAC;AAAA,MAC7B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAEO,SAAS,kBAAkB,QAAmC;AACnE,SAAO,CAAC,SAAS,SAAS,UAAU,EAAE,SAAS,MAAgB;AACjE;AAEO,IAAM,WAAW,CAAC,UAAkB,OAAO;AAE3C,SAAS,eAAe,QAAoBC,MAAgB;AACjE,SAAO,WAAW,UACd,EAAE,WAAW,EAAE,CAAC,sBAAsBA,KAAI,EAAE,IAC5C,WAAW,UACX,EAAE,YAAY,EAAE,CAAC,sBAAsBA,KAAI,EAAE,IAE/C,WAAW,aACT,EAAE,CAAC,mBAAmBA,KAAI,IAC1B,YAAY,MAAM;AACxB;AAEO,SAAS,gBAAgB,OAAiB;AAC/C,SAAO,MAAM,KAAK,GAAG;AACvB;;;AChLA,IAAM,cAA6B,OAAO,UAAU;AAS7C,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,UAAU,CAAC;AACb,GAGa;AACX,SAAO;AAAA,IACL,CAAC,cAAc;AAAA,MACb;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,uCAAuC,UAAoB;AAClE,SAAO,SAAS;AAClB;AAWO,IAAM,0BAA0B,CAAC;AAAA,EACtC;AAAA,EACA,qBAAqB;AACvB,MAAe,wBAAwB,UAAa,CAAC;AAK9C,SAAS,WAAW,WAAuB;AAChD,SAAO,UAAU;AAAA,IACf,CAAC,SAAS,cAAc;AAAA,MACtB,GAAG;AAAA,MACH,GAAG,uCAAuC,QAAQ,EAAE;AAAA,IACtD;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAKO,SAAS,aAAa,WAAoC;AAG/D,QAAM,UAAU,WAAW,SAAS;AAIpC,SAAO,UAAU;AAAA,IAAI,CAAC,MACpB,uCAAuC,CAAC,EAAE,MAAM,OAAO;AAAA,EACzD;AACF;;;ACjEO,IAAM,mBAAmB,CAK9B,QACA,QACA,UAEA,OAAO;AAAA,EACL;AAAA,EACA,OAAO;AAAA,IACL,OAAO,IAAI,CAAC,QAAQ;AAAA,MAClB;AAAA,MACA,EAAE,KAAK,MAAM,MAAM,GAAG,GAAG,YAAY,MAAM,cAAc,KAAK;AAAA,IAChE,CAAC;AAAA,EACH;AACF;AAiBK,IAAM,gBAAgB,CAM3B,QACA,QACA,UAEA,OAAO;AAAA,EACL;AAAA,EACA,OAAO;AAAA,IACL,OAAO,IAAI,CAAC,QAAQ;AAAA,MAClB;AAAA,MACA;AAAA,QACE,OAAO,IAAI,SAAqB,MAAM,KAAK,GAAG,IAAI;AAAA,QAClD,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAmBK,IAAM,2BAA2B,CAItC,QACA,QAEA,iBAAiB,QAAQ,OAAO,KAAK,GAAG,GAAG,CAAC,QAAQ,IAAI,IAAI;AAiBvD,IAAM,uBAAuB,CAClC,WACA,WAEC,SAAS,4BACR,SAC2B;AAC3B,QAAM,aAAa,UAAU,OAAO,CAAC,MAAM,CAAC,QAAQ,SAAS,CAAC,CAAC;AAC/D,SAAO;AAAA,IAAiB,OAAO,OAAO;AAAA,IAAG;AAAA,IAAY,CAAC,aACpD,WAAW,WAAW,IAClB,YAAY,IACZ,4BAA4B,CAAC,GAAG,SAAS,QAAQ,CAAC;AAAA,EACxD;AACF,EAAG,CAAC,CAAC;AAqBA,IAAM,qBAAqB,CAKhC,WACA,WACG,kBAEF,SAAS,yBACR,SACqC;AACrC,QAAM,aAAa,UAAU;AAAA,IAC3B,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;AAAA,EAC5C;AACA,SAAO;AAAA,IACL,OAAO,OAAO;AAAA,IACd;AAAA,IACA,CAAC,aAAa,SACZ,WAAW,WAAW,IAClB,YAAY,IACZ,yBAAyB,CAAC,GAAG,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;AAAA,EAClE;AACF,EAAG,CAAC,CAAC;;;ACrKP,SAAS,uBAAAC,4BAA2B;AAE7B,IAAM,mBAAmB,CAAC,OAAO,SAAS,UAAU,MAAM;AAG1D,IAAM,kBAAkB,CAC7B,SACA,eACa;AACb,QAAM,MAAM,WAAW,WAAW;AAElC,QAAM,QAAQ,aAAa;AAAA,IACzBA,qBAAoB,aAAa,UAAU,QAAQ,SAAS,CAAC,CAAC;AAAA,EAChE;AAEA,SAAO,eAAe;AAAA,IACpB,QAAQ;AACN,aAAO;AAAA,QACL,GAAI,MACA,EAAE,QAAQ,MAAM,IAChB,WAAW;AAAA,UACT,CAAC,KAAK,eAAe;AAAA,YACnB,GAAG;AAAA,YACH,CAAC,UAAU,cAAc;AAAA,UAC3B;AAAA,UACA,CAAC;AAAA,QACH;AAAA,MACN;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEe,SAAR,OAAyD,OAAU;AACxE,QAAM,cAAc,MAAmB,MAAM,MAAM;AAEnD,QAAM,eAAe;AAAA,IACnB,CAAC;AAAA,IACD;AAAA,MACE,QAAQ;AAAA,QAAiB,CAAC;AAAA,QAAG;AAAA,QAAa,CAAC,YACzC;AAAA,UAAqB;AAAA,UAAkB,CAAC,cACtC,gBAAgB,SAAS,SAAS;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ACtDA,SAAS,UAAU;AAIZ,IAAM,wBACX,CAAkC,UAClC,CAACC,UAA4C;AAC3C,SAAO,eAAe;AAAA,IACpB,QAAQ;AACN,aAAO;AAAA,QACL,cAAc,GAAG,MAAM,aAAaA,MAAK;AAAA,MAC3C;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEa,SAAR,aACL,OACA;AAEA,QAAM,kBAAkB,sBAAsB,KAAK;AACnD,QAAM,qBAAqB;AAAA,IACzB,CAAC;AAAA,IACD;AAAA,MACE,cAAc,CAAC,WACb,gBAAgB,MAAM;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AACT;;;AC9BA;AAAA,EACE,eAAAC;AAAA,EACA;AAAA,EACA,uBAAAC;AAAA,EACA,OAAAC;AAAA,EACA;AAAA,OAEK;AAEP,OAAO,aAAa;;;ACVpB,SAAS,WAAW;AAKb,IAAM,sBAAsB;AAKpB,SAAR,WAA4B,QAA2B;AAC5D,QAAM,WAAW,IAAI,mBAAmB;AACxC,QAAMC,cAAa,CAAC,cAAwB;AAAA,IAC1C,YAAY,SAAS,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,EAAE,KAAK,IAAI;AAAA,EAC/D;AAEA,WAAS,MAAM;AAAA,IACb,kBAAkB;AAAA,IAClB,4BAA4B;AAAA,IAC5B,sBAAsB;AAAA,EACxB,GAAY;AACV,WAAOA;AAAA,MACL;AAAA,QACE,kBAAkB,UAAU;AAAA,QAC5B,4BAA4B,qBAAqB;AAAA,QACjD,sBAAsB,eAAe;AAAA,MACvC,EAAE,OAAO,SAAS;AAAA,IACpB;AAAA,EACF;AAEA,SAAO,eAAe,EAAE,MAAM,CAAC;AACjC;;;ADGA,SAAS,eAAe,QAAuB;AAC7C,SAAO,WAAW,OAAO,qBAAqB;AAChD;AAEO,IAAM,iBACX,CAAkC,WAClC,CACE,QACA,OACA,UAA0C,CAAC,MAC9B;AACb,WAAS,QAAQ;AACf,WAAO;AAAA,MACL,CAAC,eAAe,MAAM,IAAI;AAAA,QACxBC,qBAAoB,MAAM,SAAS,CAAC;AAAA,MACtC;AAAA,MACA,GAAG,QAAQ,OAAO,iBAAiB,EAAE;AAAA,QACnC,CAAC,KAAK,YAAY;AAAA,UAChB,GAAG;AAAA,UACH,GAAG,eAAe,QAAQ;AAAA,YACxB,CAAC,eAAe,MAAM,IAAI;AAAA,cACxBA,qBAAoB,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC;AAAA,YAChD;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO,eAAe;AAAA,IACpB;AAAA,IACA,SACE,QAAQ,SAAS,IACb,WAAW,SACT;AAAA,MACE,iBAAiB;AAAA,IACnB,IACA;AAAA,MACE,2BAA2B;AAAA,IAC7B,IACF,CAAC;AAAA,EACT,CAAC;AACH;AAEK,IAAM,yBACX,CAAkC,UAClC,CACE,OACA,UAA0C,CAAC,GAC3C,cACa;AACb,QAAM,mBAAmB,SAAS,SAAS;AAE3C,WAAS,MAAM,SAA6B;AAC1C,UAAM,YAAY,CAAC,wBAAwB,OAAO;AAClD,UAAM,WAAWC,KAAI,mBAAmB;AAExC,QAAI,aAAa,QAAQ,SAAS,GAAG;AACnC,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,GAAG,QAAQ,OAAO,iBAAiB,EAAE;AAAA,UACnC,CAAC,KAAK,YAAY;AAAA,YAChB,GAAG;AAAA,YACH,aAAa;AAAA,cACX,QAAQ;AAAA,cACR,GAAG;AAAA,cACH,YAAY,GAAG;AAAA,YACjB;AAAA,YACA,YAAY;AAAA,cACV,QAAQ;AAAA,cACR,GAAG;AAAA,cACH,GAAG,iBAAiB,MAAM,cAAc,MAAM;AAAA,YAChD;AAAA,YACA,GAAG,eAAe,QAAQ;AAAA,cACxB,aAAa;AAAA,gBACX,iBAAiBC;AAAA,kBACf;AAAA,kBACA,MAAM,OAAO,WAAW,CAAC;AAAA,gBAC3B;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH;AAAA,UACA,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA;AAAA,MACE,QAAQ,WAAW;AAAA,MAEnB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,GAAG,iBAAiB,MAAM,cAAc,MAAM;AAAA,MAC9C,GAAG,QAAQ,OAAO,iBAAiB,EAAE;AAAA,QACnC,CAAC,KAAK,YAAY;AAAA,UAChB,GAAG;AAAA,UACH,GAAG,eAAe,QAAQ;AAAA,YACxB,GAAG;AAAA,cACD,sBAAsB,MAAM,OAAO,WAAW,CAAC,CAAC;AAAA,gBAC9C,MAAM,cAAc;AAAA,cACtB;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO,eAAe,EAAE,MAAM,CAAC;AACjC;AAEF,IAAM,iBAA4B;AAAA,EAChC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AACR;AAEe,SAAR,OAAyD,OAAU;AACxE,QAAMC,UAAS,MAAkB,MAAM,KAAK;AAC5C,QAAM,UAAU,MAAmB,MAAM,MAAM;AAG/C,QAAM,iBAAiB,MAA0B,MAAM,aAAa;AACpE,QAAM,WAAW,eAAe,KAAK;AACrC,QAAM,mBAAmB,uBAAuB,KAAK;AAErD,QAAM,cAAc;AAAA,IAClB,CAAC;AAAA,IACD;AAAA,MACE,IAAI;AAAA,QACF;AAAA,UAAiB,CAAC;AAAA,UAAGA;AAAA,UAAQ,CAAC,UAC5B;AAAA,YAAqB;AAAA,YAAS,CAAC,cAC7B,SAAS,MAAM,OAAO,SAAS;AAAA,UACjC;AAAA,QACF;AAAA,QACA;AAAA,UACE,CAAC;AAAA,UACD;AAAA,UACA,CAAC,UAAU,CAAC,cACV;AAAA,YAAqB;AAAA,YAAS,CAAC,cAC7B,iBAAiB,OAAO,WAAW,SAAS;AAAA,UAC9C;AAAA,QACJ;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QAAiB,CAAC;AAAA,QAAGA;AAAA,QAAQ,CAAC,UAClC;AAAA,UAAqB;AAAA,UAAS,CAAC,cAC7B,SAAS,QAAQ,OAAO,SAAS;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AEzLO,IAAM,yBACX,CAGE,UAGF,CAAC,UAA6C,CAAC,MAC7C,eAAe;AAAA,EACb,QAAQ;AACN,WAAO,QAAQ,OAAO,iBAAiB,EAAE;AAAA,MACvC,CAAC,KAAK,YAAY;AAAA,QAChB,GAAG;AAAA,QACH,GAAG,eAAe,QAAQ;AAAA,UACxB,SACE,CAAE,MAAmC;AAAA,YACnC,MAAM,cAAc;AAAA,UACtB,KAAK,MAAM,cAAc,SAAS,SAAS,YACvC,MAAM,cAAc,SAAS,UAC7B,YAAY;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,MACA,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;AAEU,SAAR,cACL,OACA;AACA,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,EACR;AAGA,QAAM,mBAAmB,uBAAuB,KAAK;AACrD,QAAM,sBAAsB;AAAA,IAAqB;AAAA,IAAa,CAAC,cAC7D,iBAAiB,SAAS;AAAA,EAC5B;AAEA,SAAO;AACT;;;ACpDA,SAAS,MAAAC,KAAI,uBAAAC,4BAA2B;AAUjC,IAAM,cAAc,CAAC,OAAO;AAGnC,IAAM,aAAa,CAAC,QAAgB,WAAmB;AAAA,EACrD,WAAW,SAASC,IAAG,MAAM,KAAK;AACpC;AAEO,IAAM,wBACX,CAAkC,UAClC,CACE,SACA,cACa;AACb,QAAM,SAAS,MAAM,QAAQ,SAAS;AACtC,QAAM,QAAQ,MAAM,QAAQ,SAAS;AAErC,SAAO,eAAe;AAAA,IACpB,QAAQ;AACN,aAAO,UAAU,SAAS,OAAO,IAC7B,QAAQ,WAAW,QAAQ,KAAK,CAAC,IACjC,EAAE,MAAM,EAAE,CAACC,uBAAsB,WAAW,QAAQ,KAAK,EAAE,EAAE;AAAA,IACnE;AAAA,IACA,SAAS;AAAA,MACP,qBAAqB;AAAA,IACvB;AAAA,EACF,CAAC;AACH;AAKF,IAAM,UAAU,CAACC,UAAoB;AAAA,EACnC,CAACD,uBAAsB;AAAA,IACrB,qBAAqB;AAAA,MACnB,SAAS;AAAA,MACT,GAAGC;AAAA,IACL;AAAA,IAEA,6DAA6D;AAAA,MAC3D,SAAS;AAAA,IACX;AAAA,IAEA,mBAAmB;AAAA,MACjB,SAAS;AAAA,MACT,GAAGA;AAAA,IACL;AAAA,EACF;AACF;AAEe,SAAR,QAA0D,OAAU;AACzE,QAAMC,cAAa,sBAAsB,KAAK;AAE9C,QAAM,gBAAgB;AAAA,IACpB,CAAC;AAAA,IACD;AAAA,MACE,SAAS;AAAA,QACP,CAAC;AAAA,QACD,MAAoB,MAAM,OAAO;AAAA,QACjC,CAAC,YACC;AAAA,UAAqB;AAAA,UAAa,CAAC,cACjCA,YAAW,SAAS,SAAS;AAAA,QAC/B;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AC9EA,SAAS,oBAAoB;AAE7B,SAAS,MAAAC,WAAU;AAIZ,IAAM,kBAAkB,CAAC,SAAS,QAAQ;AAG1C,IAAM,mBACX,CAAkC,UAClC,CAAC,UAAyBC,UACxB,eAAe;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,MACL,CAAC,WAAWA,UAAS,SAAS,SAASC,IAAG,MAAM,QAAQD,MAAK;AAAA,IAC/D;AAAA,EACF;AACF,CAAC;AAEE,IAAM,yBACX,CAAkC,WAClC,CAAC,UAAyB,WACxB,eAAe;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,MACL,CAAC,WAAW;AAAA,IACd;AAAA,EACF;AACF,CAAC;AAEE,IAAM,uBACX,CAAkC,UAClC,CAAC,UAAyB,SACxB,eAAe;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,MACL,CAAC,WAAWC;AAAA,QACV,aAAa,MAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK,MAAM;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAEU,SAAR,KAAuD,OAAU;AACtE,QAAM,aAAa,iBAAiB,KAAK;AACzC,QAAM,iBAAiB,qBAAqB,KAAK;AACjD,QAAM,mBAAmB,uBAAuB,KAAK;AACrD,QAAM,cAAc;AAAA,IAAiB,CAAC;AAAA,IAAG;AAAA,IAAiB,CAAC,aACzD;AAAA,MACE,CAAC;AAAA,MACD;AAAA,QACE,IAAI,CAACD,UAAsC,WAAW,UAAUA,KAAI;AAAA,QACpE,QAAQ,CAAC,SAAiB,eAAe,UAAU,IAAI;AAAA,QACvD,MAAM,iBAAiB,UAAU,MAAM;AAAA,QACvC,MAAM,iBAAiB,UAAU,MAAM;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;AC3DA,SAAS,MAAAE,WAAU;AAKZ,IAAM,oBAAoB,CAAC,UAAU,SAAS;AAC9C,IAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIA,SAAS,gBACP,UACA,WACA;AACA,SAAO,GAAG,YAAY;AACxB;AAEO,IAAM,mBACX,CAAkC,UAClC,CACE,UACA,cACa;AACb,QAAM,EAAE,KAAK,OAAO,QAAQ,KAAK,IAAI,UAAU;AAAA,IAC7C,CAAC,KAAK,CAAC,WAAWC,KAAI,MAAM;AAC1B,UAAI,cAAc,OAAO;AACvB,YAAI,MAAMA;AACV,YAAI,QAAQA;AACZ,YAAI,SAASA;AACb,YAAI,OAAOA;AAAA,MACb,WAAW,cAAc,YAAY;AACnC,YAAI,MAAMA;AACV,YAAI,SAASA;AAAA,MACf,WAAW,cAAc,cAAc;AACrC,YAAI,QAAQA;AACZ,YAAI,OAAOA;AAAA,MACb,OAAO;AACL,YAAI,aAAaA;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EAGH;AAEA,QAAM,qBACJ,aAAa,aACb,QAAQ,UACR,WAAW,UACX,QAAQ,UACR,WAAW;AAEb,WAAS,MAAM,EAAE,sBAAsB,EAAE,GAAuB;AAC9D,WAAO;AAAA,MACL,GAAI,QAAQ,UAAa;AAAA,QACvB,CAAC,gBAAgB,UAAU,KAAK,IAC9B,QAAQ,SACJ,SACAC;AAAA,UACE,MAAM,QAAQ,QACX,qBAAqB,sBAAsB;AAAA,QAChD;AAAA,MACR;AAAA,MACA,GAAI,WAAW,UAAa;AAAA,QAC1B,CAAC,gBAAgB,UAAU,QAAQ,IACjC,WAAW,SACP,SACAA;AAAA,UACE,MAAM,QAAQ,WACX,qBAAqB,sBAAsB;AAAA,QAChD;AAAA,MACR;AAAA,MACA,GAAI,UAAU,UAAa;AAAA,QACzB,CAAC,gBAAgB,UAAU,OAAO,IAChC,UAAU,SAAS,SAASA,IAAG,MAAM,QAAQ,MAAM;AAAA,MACvD;AAAA,MACA,GAAI,SAAS,UAAa;AAAA,QACxB,CAAC,gBAAgB,UAAU,MAAM,IAC/B,SAAS,SAAS,SAASA,IAAG,MAAM,QAAQ,KAAK;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAEA,SAAO,eAAe;AAAA,IACpB;AAAA,IACA,SAAS,qBAAqB,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAAA,EAChE,CAAC;AACH;AAEa,SAAR,QAA0D,OAAU;AACzE,QAAM,aAAa,iBAAiB,KAAK;AACzC,QAAM,gBAAgB;AAAA,IACpB,CAAC;AAAA,IACD;AAAA,IACA,CAACC,qBACC;AAAA,MACE;AAAA,MACA,CAAC,cAAc,WAAWA,kBAAiB,SAAS;AAAA,MACpD,CAAC;AAAA,IACH;AAAA,EACJ;AACA,SAAO;AACT;;;AC/GA,SAAS,aAAa,MAAAC,WAAU;AAUzB,IAAM,sBACX,CAAkC,UAClC,CACEC,OACA,UAII,CAAC,MACQ;AACb,QAAM;AAAA,IACJ,sBAAsB;AAAA,IACtB,YAAY;AAAA,IACZ,OAAO;AAAA,EACT,IAAI;AACJ,QAAM,aAAa,MAAM,WAAW,KAAKA;AACzC,QAAMC,UAAS,CAAC,YAAY,UAAU;AAEtC,WAAS,MAAM,SAA6B;AAC1C,WAAO;AAAA,MACL,UAAUC,IAAG,WAAW,QAAQ;AAAA,MAChC,YAAYA,IAAG,WAAW,UAAU;AAAA,MACpC,GAAI,aAAa;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA,GAAI,QAAQ;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MACA,GAAI,wBAAwB,OAAO,KAAK;AAAA,QAEtC,SAAS;AAAA,QAET,aAAa;AAAA,UACX,GAAG;AAAA,UACH,WAAWA,IAAGD,OAAM;AAAA,QACtB;AAAA,QACA,YAAY;AAAA,UACV,GAAG;AAAA,UACH,cAAcC,IAAGD,OAAM;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,eAAe;AAAA,IACpB;AAAA,IACA,SAAS,CAAC,sBACN;AAAA,MACE,qBAAqBA;AAAA,IACvB,IACA,CAAC;AAAA,EACP,CAAC;AACH;AAEF,IAAM,gBAA2B;AAAA,EAC/B,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AACX;AAGA,IAAM,sBAAsB;AAAA,EAE1B;AAAA,EACA;AAAA,EACA;AACF;AAEe,SAAR,WAA6D,OAAU;AAC5E,QAAM,gBAAgB,oBAAoB,KAAK;AAC/C,QAAM,mBAAmB;AAAA,IACvB,CAAC;AAAA,IACD,CAAC,YAAY;AAAA,IACb,CAAC,MAAM,CAACD,UACN;AAAA,MAAqB;AAAA,MAAqB,CAAC,cACzC,cAAcA,OAAM;AAAA,QAClB,qBAAqB,UAAU,SAAS,qBAAqB;AAAA,QAC7D,WAAW,UAAU,SAAS,WAAW;AAAA,QACzC,MAAM,UAAU,SAAS,MAAM;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,EACJ;AAEA,SAAO;AACT;;;AChFe,SAAR,QACL,OAOA;AACA,SAAO;AAAA,IACL,OAAO,KAAK;AAAA,IACZ,WAAW,KAAK;AAAA,IAChB,QAAQ,KAAK;AAAA,IACb,KAAK,KAAK;AAAA,IACV,cAAc,KAAK;AAAA,IACnB,OAAO,KAAK;AAAA,IACZ,aAAa,KAAK;AAAA,IAClB,QAAQ,KAAK;AAAA,EACf;AACF;;;ACnCA,SAAS,mBAAmB,WAAW;AAGvC,SAAS,iBAAiB;AAgDjB;AA9CT,IAAM,cAAc;AAAA,IAIhB,CAAC,EAAE,UAAU,WAAW,MACxB,OAAO,QAAQ,QAAQ,EAAE;AAAA,EAAI,CAAC,CAAC,KAAK,KAAK,MACvC,IAAI,WAAW,QAAQ,IACnB;AAAA,cACI;AAAA;AAAA,kBAEI,eAAe,UACjB;AAAA,sCACsB,MAAM,MAAM;AAAA;AAAA,kBAEhC,uBAAuB,KAAK;AAAA;AAAA;AAAA,cAIpC;AAAA;AAAA,cAEI;AAAA,gBACE,eAAe,UACjB;AAAA,oCACsB,MAAM,MAAM;AAAA;AAAA,gBAEhC,uBAAuB,KAAK;AAAA;AAAA;AAGxC;AAAA;AAWW,SAAR,cAAgD;AAAA,EACrD,OAAO;AAAA,EACP;AACF,GAGG;AACD,SAAO,oBAAC,eAAY,UAAoB,YAAwB;AAClE;AAEA,IAAM,yBAAyB,CAAC,UAAiB;AAC/C,QAAM,UAAU,UAAU,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM;AAAA,IAE3D,aAAa,UAAU,IAAI;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,QAAMG,UAAS,qBAAqB,EAAE,GAAG,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;AAE7E,SAAO,eAAeA,OAAM;AAC9B;AAEA,SAAS,eAAeC,MAAsC;AAC5D,SAAO,OAAO,QAAQA,IAAG,EACtB,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,mBAAmB,SAAS,MAAM,SAAS,CAAC,CAAC,EACvE,KAAK,GAAG;AACb;AAEA,IAAM,qBAAqB,CAAC,MAAc,UAAkB,GAAG,SAAS;;;ACxExE,SAAS,WAAW,SAAS,gBAAgB;AAEtC,IAAM,oBAAoB;AAC1B,IAAM,yBAAyB;AAEtC,IAAM,kBAAkB,IAAI,OAAO,WAAW;AAMvC,SAAS,gBAAgB,KAAa;AAC3C,MAAI,CAAC,gBAAgB,KAAK,GAAG,GAAG;AAC9B,UAAM,IAAI,MAAM,mBAAmB,2BAA2B;AAAA,EAChE;AACF;AAKO,IAAM,cACX,CAAC,OAAe,2BAChB,CAAC,UAA8B;AAC7B,kBAAgB,IAAI;AACpB,MAAI,UAAU,QAAW;AACvB,aAAS,gBAAgB,QAAQ,QAAQ;AAAA,EAC3C,OAAO;AACL,WAAO,SAAS,gBAAgB,QAAQ;AAAA,EAC1C;AACF;AAKK,SAAS,cAGd,OAAU,MAAU;AACpB,SAAO,cAAc,QAAQ,2BAA2B;AAC1D;AAKO,SAAS,mBAA+C,OAAU;AACvE,SAAO,iCAAiC;AAC1C;AAKO,SAAS,eAAe;AAAA,EAC7B,MAAM;AAAA,EACN,SAAS,YAAY;AACvB,IAAoE,CAAC,GAAG;AACtE,QAAM,CAAC,OAAO,EAAE,MAAM,IAAI,SAAS,GAAG;AAEtC,YAAU,MAAM;AACd,QAAI,UAAU,QAAW;AACvB;AAAA,IACF;AAEA,WAAO,SAAS,SAAY,KAAK;AAAA,EACnC,GAAG,CAAC,QAAQ,QAAQ,KAAK,CAAC;AAC5B;AAKO,SAAS,aAAa,MAAc,mBAAmB;AAC5D,QAAM,QAAQ,aAAa,QAAQ,GAAG;AACtC,SAAO;AACT;AAOO,IAAM,WAAW,CAAC,kBAA0B,sBAAsB;AACvE,kBAAgB,eAAe;AAC/B,QAAM,SAAS,SAAS,8BAA8B;AACtD,QAAM,QAAQ,WAAW,SAAa,SAAS,SAAS,UAAW;AACnE,QAAM,CAAC,OAAO,UAAU,KAAK,IAC3B,gBAA8B,eAAe;AAC/C,QAAM,QAAQ,CAAC,SAAS,UAAU,SAAY,SAAY,SAAS;AACnE,QAAM,SAAS,UAAU;AACzB,SAAO,CAAC,OAAO,UAAU,MAAM;AACjC;AAEO,SAAS,gBAAmB,KAAa,cAAwB;AACtE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AACxC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAY;AACtC,QAAM,mBAAmB,QAAQ,MAAM,eAAe,GAAG,CAAC,YAAY,CAAC;AAEvE,YAAU,MAAM;AACd,UAAM;AACN,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM;AACX,aAAO,oBAAoB,WAAW,aAAa;AAAA,IACrD;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,CAAC,MAAoB;AACzC,QAAI,EAAE,gBAAgB,cAAc;AAClC;AAAA,IACF;AACA,QAAI,EAAE,QAAQ,KAAK;AACjB;AAAA,IACF;AACA,UAAM;AAAA,EACR;AAEA,QAAM,QAAQ,MAAM;AAClB,UAAM,MAAM,aAAa,QAAQ,GAAG;AACpC,cAAU,QAAQ,OAAO,YAAY,GAAG,IAAI,SAAS,gBAAgB;AACrE,aAAS,IAAI;AAAA,EACf;AAEA,QAAM,MAAM,CAAC,UAAyB;AACpC,QAAI,UAAU,QAAW;AAEvB,mBAAa,WAAW,GAAG;AAAA,IAC7B,OAAO;AACL,YAAM,MAAM,UAAU,KAAK;AAC3B,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAC/B;AAGA,UAAM,QAAQ,IAAI,aAAa,WAAW;AAAA,MACxC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ;AAAA,MACA,KAAK,SAAS;AAAA,MACd,aAAa;AAAA,IACf,CAAC;AACD,kBAAc,KAAK;AAAA,EACrB;AAEA,SAAO,CAAC,SAAS,kBAAkB,KAAK,KAAK;AAC/C;AAEA,SAAS,YAAe,KAAgB;AACtC,MAAI;AACF,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB,QAAE;AAEA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,UAAU,OAAwB;AACzC,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT,OAAO;AACL,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AACF;AAEO,SAAS,SAAS,OAAe;AACtC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAkB;AAE5C,YAAU,MAAM;AACd,UAAM,UAAU,OAAO,WAAW,KAAK;AAEvC,UAAM,WAAW,MAAM;AACrB,eAAS,QAAQ,OAAO;AAAA,IAC1B;AAEA,YAAQ,iBAAiB,UAAU,QAAQ;AAE3C,aAAS,QAAQ,OAAO;AAExB,WAAO,MAAM;AACX,cAAQ,oBAAoB,UAAU,QAAQ;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO;AACT;;;ACnLA,SAAS,OAAAC,YAAW;AAEpB,IAAM,UAAUA;AAAA;AAAA;AAIT,IAAM,uBAAuBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkB7B,SAASC,YACdC,OACA,OAAO,OACP,sBAAsB,OACtB;AACA,QAAM,SAASF;AAAA,iBACAE;AAAA,mBACEA,QAAO;AAAA;AAAA,MAEpB,SAAS,QAAQ;AAAA,MACjB,wBAAwB,QAAQ;AAAA;AAGpC,SAAO;AACT;;;ACII,gBAAAC,YAAA;AA1BG,SAAS,uBAAuB;AAAA,EACrC,kBAAkB,aAAa;AAAA,EAC/B,gBAAgB,aAAa;AAC/B,IAAoB,cAAc;AAChC,kBAAgB,eAAe;AAC/B,kBAAgB,aAAa;AAC7B,SAAO;AAAA;AAAA,6BAEoB;AAAA,2BACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO3B;AAOO,SAAS,eAAe,OAAc;AAC3C,QAAM,MAAM,uBAAuB,KAAK;AACxC,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,yBAAyB;AAAA,QACvB,QAAQ;AAAA,MACV;AAAA;AAAA,EACF;AAEJ;AAEA,IAAM,eAAsB;AAAA,EAC1B,iBAAiB;AAAA,EACjB,eAAe;AACjB;AAEA,eAAe,eAAe;;;ACvD9B,SAAS,OAAAC,YAAW;AAOb,IAAM,2BAA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACPxC,SAAS,OAAAC,YAAW;AAEb,IAAM,cAAcA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACF3B,SAAS,OAAAC,YAAW;AAEb,IAAM,mBAAmBA;AAAA;AAAA;;;ACFhC,SAAS,OAAAC,YAAuC;;;ACAzC,SAAS,QAAQ,GAAqB;AAC3C,MAAI,MAAM;AAAW,WAAO;AAC5B,MAAI,OAAO,MAAM;AAAU,WAAO,GAAG;AACrC,SAAO;AACT;;;ADoBO,SAAS,OACd,MACA,MACA,MACA,MACA;AACA,SAAOC;AAAA,cACK,QAAQ,IAAI,KAAK,QAAQ,IAAI,KAAK,QAAQ,IAAI,KAAK,QAAQ,IAAI;AAAA;AAE7E;AAEO,SAAS,UAAU,GAAgB;AACxC,SAAOA;AAAA,kBACS,QAAQ,CAAC;AAAA;AAE3B;AAEO,SAAS,aAAa,GAAgB;AAC3C,SAAOA;AAAA,qBACY,QAAQ,CAAC;AAAA;AAE9B;AAEO,SAAS,WAAW,GAAgB;AACzC,SAAOA;AAAA,mBACU,QAAQ,CAAC;AAAA;AAE5B;AAEO,SAAS,YAAY,GAAgB;AAC1C,SAAOA;AAAA,oBACW,QAAQ,CAAC;AAAA;AAE7B;;;AExDA,SAAS,OAAAC,YAAuC;AAuBzC,SAAS,QACd,MACA,MACA,MACA,MACA;AACA,SAAOC;AAAA,eACM,UAAU,QAAQ,IAAI,KAAK,QAAQ,IAAI,KAAK,QAAQ,IAAI;AAAA;AAEvE;AAEO,SAAS,WAAW,GAAkB;AAC3C,SAAOA;AAAA,mBACU;AAAA;AAEnB;AAEO,SAAS,cAAc,GAAkB;AAC9C,SAAOA;AAAA,sBACa;AAAA;AAEtB;AAEO,SAAS,YAAY,GAAkB;AAC5C,SAAOA;AAAA,oBACW;AAAA;AAEpB;AAEO,SAAS,aAAa,GAAkB;AAC7C,SAAOA;AAAA,qBACY;AAAA;AAErB;;;ACxDA,SAAS,OAAAC,YAAuC;AAUzC,SAAS,IAAI,IAAmB,IAAoB;AACzD,SAAOC;AAAA,WACE,QAAQ,QAAQ,EAAE;AAAA;AAE7B;AAEO,SAAS,OAAO,GAAkB;AACvC,SAAOA;AAAA,eACM;AAAA;AAEf;AAEO,SAAS,UAAU,GAAkB;AAC1C,SAAOA;AAAA,kBACS;AAAA;AAElB;;;ACDO,SAAS,cACd,OACoC;AACpC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC5BA,IAAM,WAAW,CAAI,UACnB,UAAU,KAAK,KAAM,UAAsB;AAuBtC,SAAS,YACd,SACA;AAIA,SAAO,SAAS,MACd,QACc;AAEd,WAAO,SAAS,YAAY,EAAE,OAAAC,OAAM,GAAG;AACrC,UAAI,CAAC,UAAUA,MAAK,GAAG;AAErB,cAAM;AAAA,MACR;AAEA,YAAM,YAAY;AAAA,QAEhB,GAAG;AAAA,UAYD,OAAkB,QAAQA,MAAK,CAAC;AAAA,QAClC;AAAA,QAGA,WAAWA,MAAK;AAAA,MAClB,EAAE,OAAO,QAAQ;AAEjB,aAAO,aAAa,SAAS;AAAA,IAC/B;AAAA,EACF;AACF;","names":["colors","css","customPropertyToken","size","applyEffect","customPropertyToken","dur","transition","customPropertyToken","dur","applyEffect","colors","px","notDisabledSelector","px","notDisabledSelector","css","outlineCss","px","size","px","px","size","px","spacingProperty","px","size","margin","px","colors","css","css","typography","size","jsx","css","css","css","css","css","css","css","css","css","typography","theme"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@charcoal-ui/styled",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "license": "Apache-2.0",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.cjs.js",
@@ -21,16 +21,16 @@
21
21
  "test": "vitest run --passWithNoTests"
22
22
  },
23
23
  "devDependencies": {
24
- "@types/react": "^17.0.38",
25
- "@types/react-test-renderer": "^17.0.2",
24
+ "@types/react": "^18.3.3",
25
+ "@types/react-test-renderer": "^18.3.0",
26
26
  "@types/styled-components": "^5.1.21",
27
27
  "@types/warning": "^3.0.0",
28
28
  "@vitejs/plugin-react": "^4.3.1",
29
29
  "jest-styled-components": "^7.1.1",
30
30
  "jsdom": "^24.1.0",
31
31
  "npm-run-all": "^4.1.5",
32
- "react": "^17.0.2",
33
- "react-test-renderer": "^17.0.2",
32
+ "react": "^18.3.1",
33
+ "react-test-renderer": "^18.3.1",
34
34
  "rimraf": "^3.0.2",
35
35
  "styled-components": "^5.3.3",
36
36
  "tsup": "^6.5.0",
@@ -38,9 +38,9 @@
38
38
  "vitest": "^2.0.2"
39
39
  },
40
40
  "dependencies": {
41
- "@charcoal-ui/foundation": "^4.1.0",
42
- "@charcoal-ui/theme": "^4.1.0",
43
- "@charcoal-ui/utils": "^4.1.0",
41
+ "@charcoal-ui/foundation": "^4.2.0",
42
+ "@charcoal-ui/theme": "^4.2.0",
43
+ "@charcoal-ui/utils": "^4.2.0",
44
44
  "warning": "^4.0.3"
45
45
  },
46
46
  "peerDependencies": {
@@ -59,5 +59,5 @@
59
59
  "url": "https://github.com/pixiv/charcoal.git",
60
60
  "directory": "packages/styled"
61
61
  },
62
- "gitHead": "e1d401460774c73120434d8be3bca5698d519493"
62
+ "gitHead": "45c93231d4b0feffe8f3a6bef2cdab96302c8eb4"
63
63
  }
@@ -3,14 +3,11 @@ import { CharcoalAbstractTheme } from '@charcoal-ui/theme'
3
3
  import { defineThemeVariables, withPrefixes } from './util'
4
4
  import { mapObject } from '@charcoal-ui/utils'
5
5
 
6
- const GlobalStyle = createGlobalStyle`
7
- ${<T extends Theme>({
8
- themeMap,
9
- background,
10
- }: {
11
- themeMap: ThemeMap<T>
12
- background?: keyof ThemeMap<T>[string]['color']
13
- }) =>
6
+ const GlobalStyle = createGlobalStyle<{
7
+ themeMap: ThemeMap<Theme>
8
+ background?: keyof ThemeMap<Theme>[string]['color']
9
+ }>`
10
+ ${({ themeMap, background }) =>
14
11
  Object.entries(themeMap).map(([key, theme]) =>
15
12
  key.startsWith('@media')
16
13
  ? css`
@@ -100,7 +100,7 @@ exports[`Storybook Tests > styled/addThemeUtils > Example 1`] = `
100
100
  }
101
101
 
102
102
  .c7:disabled,
103
- .c7 [aria-disabled]:not([aria-disabled='false']) {
103
+ .c7[aria-disabled]:not([aria-disabled='false']) {
104
104
  opacity: 0.32;
105
105
  cursor: default;
106
106
  }
@@ -100,7 +100,7 @@ exports[`Story > <Example /> 1`] = `
100
100
  }
101
101
 
102
102
  .c7:disabled,
103
- .c7 [aria-disabled]:not([aria-disabled='false']) {
103
+ .c7[aria-disabled]:not([aria-disabled='false']) {
104
104
  opacity: 0.32;
105
105
  cursor: default;
106
106
  }
@@ -208,7 +208,7 @@ exports[`ThemeUtilsTest > <ThemeUtilsTest /> 1`] = `
208
208
  }
209
209
 
210
210
  .c0:disabled,
211
- .c0 [aria-disabled]:not([aria-disabled='false']) {
211
+ .c0[aria-disabled]:not([aria-disabled='false']) {
212
212
  opacity: 0.32;
213
213
  cursor: default;
214
214
  }
@@ -1,8 +1,8 @@
1
1
  import { css } from 'styled-components'
2
2
 
3
3
  export const disabledCss = css`
4
- :disabled,
5
- [aria-disabled]:not([aria-disabled='false']) {
4
+ &:disabled,
5
+ &[aria-disabled]:not([aria-disabled='false']) {
6
6
  opacity: 0.32;
7
7
  cursor: default;
8
8
  }