UNPKG

adopted-style-sheets

Version:

This library implements functions to use the adopted style of web components for multiple themes.

167 lines (155 loc) 13.4 kB
declare namespace Common { type PrefixedKey<Prefix extends string, Key extends string> = `${Prefix}-${Key}`; } declare namespace Element { type Validators<R, O> = { readonly [Property in keyof R as `validate${Capitalize<string & Property>}`]: (newValue?: R[Property], oldValue?: R[Property]) => void; } & { readonly [Property in keyof O as `validate${Capitalize<string & Property>}`]: (newValue?: O[Property], oldValue?: O[Property]) => void; }; type Mapper<R, O> = { readonly [Property in keyof R as `map${Capitalize<string & Property>}`]?: (newValue?: R[Property]) => R[Property]; } & { readonly [Property in keyof O as `map${Capitalize<string & Property>}`]?: (newValue?: O[Property]) => O[Property]; }; type Watchers<R, O> = Validators<R, O> & Mapper<R, O>; type Props<P> = { [Property in keyof P as `_${string & Property}`]?: P[Property]; }; type Members<R, O> = { [Property in keyof R as `_${string & Property}`]: R[Property]; } & { [Property in keyof O as `_${string & Property}`]?: O[Property]; }; type StateHooks = 'afterPatch' | 'beforePatch'; type StateHooksCallback = (value: unknown, state: Record<string, unknown>, component: Component, key: string) => void; type NextStateHooksCallback = (nextValue: unknown, nextState: Map<string, unknown>, component: Component, key: string) => void; interface Component { componentWillLoad?: () => void; hydrated?: boolean; nextHooks?: Map<string, Map<StateHooks, StateHooksCallback | NextStateHooksCallback>>; nextState?: Map<string, unknown>; state: Record<string, unknown>; timeout?: number; } type ComponentApi<RequiredProps, OptionalProps, RequiredState, OptionalState> = Component & Members<RequiredProps, OptionalProps> & Watchers<RequiredProps, OptionalProps> & { readonly state: Members<RequiredState, OptionalState>; }; type Stringified<T> = T | string; } declare namespace Locale { type ISO_639_1 = 'ab' | 'aa' | 'af' | 'ak' | 'sq' | 'am' | 'ar' | 'an' | 'hy' | 'as' | 'av' | 'ae' | 'ay' | 'az' | 'bm' | 'ba' | 'eu' | 'be' | 'bn' | 'bh' | 'bi' | 'nb' | 'bs' | 'br' | 'bg' | 'my' | 'es' | 'ca' | 'km' | 'ch' | 'ce' | 'ny' | 'zh' | 'za' | 'cu' | 'cv' | 'kw' | 'co' | 'cr' | 'hr' | 'cs' | 'da' | 'dv' | 'nl' | 'dz' | 'en' | 'eo' | 'et' | 'ee' | 'fo' | 'fj' | 'fi' | 'fr' | 'ff' | 'gd' | 'gl' | 'lg' | 'ka' | 'de' | 'ki' | 'el' | 'kl' | 'gn' | 'gu' | 'ht' | 'ha' | 'he' | 'hz' | 'hi' | 'ho' | 'hu' | 'is' | 'io' | 'ig' | 'id' | 'ia' | 'ie' | 'iu' | 'ik' | 'ga' | 'it' | 'ja' | 'jv' | 'kn' | 'kr' | 'ks' | 'kk' | 'rw' | 'ky' | 'kv' | 'kg' | 'ko' | 'kj' | 'ku' | 'lo' | 'la' | 'lv' | 'lb' | 'li' | 'ln' | 'lt' | 'lu' | 'mk' | 'mg' | 'ms' | 'ml' | 'mt' | 'gv' | 'mi' | 'mr' | 'mh' | 'ro' | 'mn' | 'na' | 'nv' | 'nd' | 'nr' | 'ng' | 'ne' | 'se' | 'no' | 'nn' | 'ii' | 'oc' | 'oj' | 'or' | 'om' | 'os' | 'pi' | 'pa' | 'ps' | 'fa' | 'pl' | 'pt' | 'qu' | 'rm' | 'rn' | 'ru' | 'sm' | 'sg' | 'sa' | 'sc' | 'sr' | 'sn' | 'sd' | 'si' | 'sk' | 'sl' | 'so' | 'st' | 'su' | 'sw' | 'ss' | 'sv' | 'tl' | 'ty' | 'tg' | 'ta' | 'tt' | 'te' | 'th' | 'bo' | 'ti' | 'to' | 'ts' | 'tn' | 'tr' | 'tk' | 'tw' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'cy' | 'fy' | 'wo' | 'xh' | 'yi' | 'yo' | 'zu'; type ISO_639_2 = 'abk' | 'ace' | 'ach' | 'ada' | 'ady' | 'aar' | 'afh' | 'afr' | 'afa' | 'ain' | 'aka' | 'akk' | 'alb/sqi' | 'gsw' | 'ale' | 'alg' | 'tut' | 'amh' | 'anp' | 'apa' | 'ara' | 'arg' | 'arp' | 'arw' | 'arm/hye' | 'rup' | 'art' | 'asm' | 'ast' | 'ath' | 'aus' | 'map' | 'ava' | 'ave' | 'awa' | 'aym' | 'aze' | 'ban' | 'bat' | 'bal' | 'bam' | 'bai' | 'bad' | 'bnt' | 'bas' | 'bak' | 'baq/eus' | 'btk' | 'bej' | 'bel' | 'bem' | 'ben' | 'ber' | 'bho' | 'bih' | 'bik' | 'byn' | 'bin' | 'bis' | 'zbl' | 'nob' | 'bos' | 'bra' | 'bre' | 'bug' | 'bul' | 'bua' | 'bur/mya' | 'cad' | 'spa' | 'cat' | 'cau' | 'ceb' | 'cel' | 'cai' | 'khm' | 'chg' | 'cmc' | 'cha' | 'che' | 'chr' | 'nya' | 'chy' | 'chb' | 'chi/zho' | 'chn' | 'chp' | 'cho' | 'zha' | 'chu' | 'chk' | 'chv' | 'nwc' | 'syc' | 'rar' | 'cop' | 'cor' | 'cos' | 'cre' | 'mus' | 'crp' | 'cpe' | 'cpf' | 'cpp' | 'crh' | 'hrv' | 'cus' | 'cze/ces' | 'dak' | 'dan' | 'dar' | 'del' | 'div' | 'zza' | 'din' | 'doi' | 'dgr' | 'dra' | 'dua' | 'dut/nld' | 'dum' | 'dyu' | 'dzo' | 'frs' | 'efi' | 'egy' | 'eka' | 'elx' | 'eng' | 'enm' | 'ang' | 'myv' | 'epo' | 'est' | 'ewe' | 'ewo' | 'fan' | 'fat' | 'fao' | 'fij' | 'fil' | 'fin' | 'fiu' | 'fon' | 'fre/fra' | 'frm' | 'fro' | 'fur' | 'ful' | 'gaa' | 'gla' | 'car' | 'glg' | 'lug' | 'gay' | 'gba' | 'gez' | 'geo/kat' | 'ger/deu' | 'nds' | 'gmh' | 'goh' | 'gem' | 'kik' | 'gil' | 'gon' | 'gor' | 'got' | 'grb' | 'grc' | 'gre/ell' | 'kal' | 'grn' | 'guj' | 'gwi' | 'hai' | 'hat' | 'hau' | 'haw' | 'heb' | 'her' | 'hil' | 'him' | 'hin' | 'hmo' | 'hit' | 'hmn' | 'hun' | 'hup' | 'iba' | 'ice/isl' | 'ido' | 'ibo' | 'ijo' | 'ilo' | 'arc' | 'smn' | 'inc' | 'ine' | 'ind' | 'inh' | 'ina' | 'ile' | 'iku' | 'ipk' | 'ira' | 'gle' | 'mga' | 'sga' | 'iro' | 'ita' | 'jpn' | 'jav' | 'kac' | 'jrb' | 'jpr' | 'kbd' | 'kab' | 'xal' | 'kam' | 'kan' | 'kau' | 'pam' | 'kaa' | 'krc' | 'krl' | 'kar' | 'kas' | 'csb' | 'kaw' | 'kaz' | 'kha' | 'khi' | 'kho' | 'kmb' | 'kin' | 'kir' | 'tlh' | 'kom' | 'kon' | 'kok' | 'kor' | 'kos' | 'kpe' | 'kro' | 'kua' | 'kum' | 'kur' | 'kru' | 'kut' | 'lad' | 'lah' | 'lam' | 'day' | 'lao' | 'lat' | 'lav' | 'ltz' | 'lez' | 'lim' | 'lin' | 'lit' | 'jbo' | 'dsb' | 'loz' | 'lub' | 'lua' | 'lui' | 'smj' | 'lun' | 'luo' | 'lus' | 'mac/mkd' | 'mad' | 'mag' | 'mai' | 'mak' | 'mlg' | 'may/msa' | 'mal' | 'mlt' | 'mnc' | 'mdr' | 'man' | 'mni' | 'mno' | 'glv' | 'mao/mri' | 'arn' | 'mar' | 'chm' | 'mah' | 'mwr' | 'mas' | 'myn' | 'men' | 'mic' | 'min' | 'mwl' | 'moh' | 'mdf' | 'rum/ron' | 'mkh' | 'lol' | 'mon' | 'cnr' | 'mos' | 'mul' | 'mun' | 'nqo' | 'nah' | 'nau' | 'nav' | 'nde' | 'nbl' | 'ndo' | 'nap' | 'new' | 'nep' | 'nia' | 'nic' | 'ssa' | 'niu' | 'zxx' | 'nog' | 'non' | 'nai' | 'frr' | 'sme' | 'nso' | 'nor' | 'nno' | 'nub' | 'iii' | 'nym' | 'nyn' | 'nyo' | 'nzi' | 'oci' | 'pro' | 'oji' | 'ori' | 'orm' | 'osa' | 'oss' | 'oto' | 'pal' | 'pau' | 'pli' | 'pag' | 'pan' | 'pap' | 'paa' | 'pus' | 'per/fas' | 'peo' | 'phi' | 'phn' | 'pon' | 'pol' | 'por' | 'pra' | 'que' | 'raj' | 'rap' | 'qaa-qtz' | 'roa' | 'roh' | 'rom' | 'run' | 'rus' | 'sal' | 'sam' | 'smi' | 'smo' | 'sad' | 'sag' | 'san' | 'sat' | 'srd' | 'sas' | 'sco' | 'sel' | 'sem' | 'srp' | 'srr' | 'shn' | 'sna' | 'scn' | 'sid' | 'sgn' | 'bla' | 'snd' | 'sin' | 'sit' | 'sio' | 'sms' | 'den' | 'sla' | 'slo/slk' | 'slv' | 'sog' | 'som' | 'son' | 'snk' | 'wen' | 'sot' | 'sai' | 'alt' | 'sma' | 'srn' | 'zgh' | 'suk' | 'sux' | 'sun' | 'sus' | 'swa' | 'ssw' | 'swe' | 'syr' | 'tgl' | 'tah' | 'tai' | 'tgk' | 'tmh' | 'tam' | 'tat' | 'tel' | 'ter' | 'tet' | 'tha' | 'tib/bod' | 'tig' | 'tir' | 'tem' | 'tiv' | 'tli' | 'tpi' | 'tkl' | 'tog' | 'ton' | 'tsi' | 'tso' | 'tsn' | 'tum' | 'tup' | 'tur' | 'ota' | 'tuk' | 'tvl' | 'tyv' | 'twi' | 'udm' | 'uga' | 'uig' | 'ukr' | 'umb' | 'mis' | 'und' | 'hsb' | 'urd' | 'uzb' | 'vai' | 'ven' | 'vie' | 'vol' | 'vot' | 'wak' | 'wln' | 'war' | 'was' | 'wel/cym' | 'fry' | 'wal' | 'wol' | 'xho' | 'sah' | 'yao' | 'yap' | 'yid' | 'yor' | 'ypk' | 'znd' | 'zap' | 'zen' | 'zul' | 'zun'; } declare namespace I18n { export { Locale }; export type Props<Prefix extends string, Key extends string> = Lowercase<Common.PrefixedKey<Prefix, Key>>; export type Map<Prefix extends string, Key extends string> = { [K in Props<Prefix, Key>]?: string; }; export type Patch<Name extends Locale.ISO_639_1, Prefix extends string, Key extends string> = (name: Name, map: Map<Prefix, Key>) => Name; export type RegisterPatch<Name extends Locale.ISO_639_1, Prefix extends string, Key extends string> = (patch: Patch<Name, Prefix, Key>) => Name; export type Register<Name extends Locale.ISO_639_1, Prefix extends string, Key extends string> = (name: Name, map: Map<Prefix, Key>) => RegisterPatch<Name, Prefix, Key>; } declare namespace Theming { type PatchOptions = { append?: boolean; }; type Props<Prefix extends string, Key extends string> = Uppercase<Common.PrefixedKey<Prefix, Key> | 'GLOBAL' | 'PROPERTIES'>; type Map<Prefix extends string, Key extends string> = { [K in Props<Prefix, Key>]?: string; }; type Patch<Name extends string, Prefix extends string, Key extends string> = (name: Name, map: Map<Prefix, Key>, options?: PatchOptions) => Name; type RegisterPatch<Name extends string, Prefix extends string, Key extends string> = (patch: Patch<Name, Prefix, Key>) => Name; type Register<Name extends string, Prefix extends string, Key extends string> = (name: Name, map: Map<Prefix, Key>) => RegisterPatch<Name, Prefix, Key>; } type ThemeName = string | null; type Required<T> = { [P in keyof T]-?: T[P]; }; type LoaderCallback = () => any | Promise<any>; type ThemeEncroachCss = { mode: 'after' | 'before'; }; type OptionalThemeDetails = { cache?: boolean; encroachCss?: ThemeEncroachCss | false; loglevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent'; mode?: 'csr' | 'ssr'; name?: ThemeName; }; type ThemeDetails = Required<OptionalThemeDetails>; type RegisterThemeOptions = OptionalThemeDetails & { detect?: 'auto' | 'fixed'; }; type RegisterTranslationOptions = { name?: Generic.I18n.Locale.ISO_639_1; }; type RegisterOptions = { theme?: RegisterThemeOptions; translations?: Generic.I18n.RegisterPatch<Generic.I18n.Locale.ISO_639_1, string, string> | Generic.I18n.RegisterPatch<Generic.I18n.Locale.ISO_639_1, string, string>[] | Set<Generic.I18n.RegisterPatch<Generic.I18n.Locale.ISO_639_1, string, string>>; translation?: RegisterTranslationOptions; transformTagName?: (tagName: string) => string; }; declare const patchThemeTag: (themeName: string, tagName: Generic.Theming.Props<string, string>, css: string, options?: Generic.Theming.PatchOptions) => void; declare const setThemeTag: (themeName: string, tagName: Generic.Theming.Props<string, string>, css: string, options?: Generic.Theming.PatchOptions) => void; declare const patchTheme: (name: string, map: Generic.Theming.Map<string, string>, options?: Generic.Theming.PatchOptions, registerOptions?: RegisterOptions) => string; declare const setTheme: (name: string, map: Generic.Theming.Map<string, string>, options?: Generic.Theming.PatchOptions, registerOptions?: RegisterOptions) => string; declare const getThemeDetails: (element: HTMLElement | ParentNode | null) => ThemeDetails; declare const getTheme: (element: HTMLElement | ParentNode | null) => string | null; declare const getRegisteredThemeNames: () => string[]; declare const getRegisteredThemes: () => Record<string, unknown>; declare const getRegisteredThemeByName: (themeName: string) => unknown; declare const register: (themes: Generic.Theming.RegisterPatch<string, string, string> | Generic.Theming.RegisterPatch<string, string, string>[] | Set<Generic.Theming.RegisterPatch<string, string, string>>, loaders: LoaderCallback | LoaderCallback[] | Set<LoaderCallback>, options?: RegisterOptions) => Promise<void[]>; type RobustStoreSetItemOptions = { enumerable?: boolean; immutable?: boolean; }; declare class RobustStore { private static options; private static instances; private readonly store; private constructor(); static getInstance(identifier: string, object: Record<string, unknown>): RobustStore; private createStore; private recursiveSetItem; setItem(key: string, value: unknown, options?: RobustStoreSetItemOptions): RobustStore; getItem(key: string | string[]): unknown; } declare const getCssStyle: (themeName: string, tagName: Generic.Theming.Props<string, string>) => string; declare const setThemeStyle: (elm: HTMLElement, themeDetails: ThemeDetails) => void; type StylingTask = { styleDisplay: string | null; themeDetails: ThemeDetails; }; type History = { timestamp: number; numberOfTasks: number; }; type Store = { A11yUi: { CSS_STYLE_CACHE: Map<string, Map<string, string[]>>; HYDRATED_HISTORY: History[]; STYLING_TASK_QUEUE: Map<HTMLElement, StylingTask>; Theme?: RegisterThemeOptions; Themes: Record<string, unknown>; }; }; declare const STORE: Store; declare namespace Generic { export type { Common, Element, I18n, Theming }; } interface Library<Prefix extends string, Key extends string, Tag extends string> { readonly Prefix: Prefix; readonly Key: Key; readonly Tag: Tag; } declare class Theme<Prefix extends string, Key extends string, Tag extends string> implements Library<Prefix, Key, Tag> { readonly Prefix: Prefix; readonly Key: Key; readonly Tag: Tag; readonly createTheme: Generic.Theming.Register<string, Prefix, Tag>; readonly createTranslation: Generic.I18n.Register<I18n.Locale.ISO_639_1, Prefix, Key>; constructor(prefix: Prefix, keyEnum: unknown, tagEnum: unknown); } export { Generic, LoaderCallback, RegisterOptions, RobustStore, STORE, Theme, ThemeDetails, getCssStyle, getRegisteredThemeByName, getRegisteredThemeNames, getRegisteredThemes, getTheme, getThemeDetails, patchTheme, patchThemeTag, register, setTheme, setThemeStyle, setThemeTag };