Skip to content

Commit 9ce0939

Browse files
committed
feat(theming): redesign with async theme support
1 parent 6806f53 commit 9ce0939

13 files changed

Lines changed: 204 additions & 184 deletions

File tree

packages/theming-material/src/scheme/scheme-static-color.builder.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { inject } from '@angular/core';
22
import {
3-
ThemeBuilder,
4-
ThemeBuilderContext,
53
ThemeTokens,
4+
TokenBuilder,
5+
TokenBuilderContext,
66
} from '@angularity/theming';
77
import { Hct, TonalPalette } from '@material/material-color-utilities';
88

@@ -41,7 +41,7 @@ export interface SchemeStaticColorBuilderConfig {
4141
}
4242

4343
/**
44-
* Implementation of `ThemeBuilder` that generates hex color tokens for Material
44+
* Implementation of `TokenBuilder` that generates hex color tokens for Material
4545
* Design static colors (aka. custom colors).
4646
*
4747
* @remarks
@@ -63,19 +63,19 @@ export interface SchemeStaticColorBuilderConfig {
6363
*
6464
* @example
6565
* ```ts
66-
* provideTheme(
67-
* withThemeBuilder("scheme", SchemeBuilder, {
66+
* createTheme(
67+
* scheduleTokenBuild("scheme", SchemeBuilder, {
6868
* type: SchemeTonalSpot,
6969
* source: Hct.fromInt(0x33bdff),
7070
* mode: SchemeMode.Light,
7171
* contrast: SchemeContrastLevel.Standard,
7272
* }),
73-
* withThemeBuilder("scheme", SchemeStaticColorBuilder, {
73+
* scheduleTokenBuild("scheme", SchemeStaticColorBuilder, {
7474
* name: "success",
7575
* source: Hct.fromInt(0x8cb84a),
7676
* mode: SchemeMode.Light,
7777
* }),
78-
* withThemeBuilder("scheme", SchemeStaticColorBuilder, {
78+
* scheduleTokenBuild("scheme", SchemeStaticColorBuilder, {
7979
* name: "warning",
8080
* source: Hct.fromInt(0xd6913e),
8181
* mode: SchemeMode.Light,
@@ -84,12 +84,12 @@ export interface SchemeStaticColorBuilderConfig {
8484
* ```
8585
*/
8686
export class SchemeStaticColorBuilder
87-
implements ThemeBuilder<SchemeStaticColorBuilderConfig>
87+
implements TokenBuilder<SchemeStaticColorBuilderConfig>
8888
{
8989
protected hctFormatter = inject(HctFormatter);
9090

9191
build(
92-
context: ThemeBuilderContext<SchemeStaticColorBuilderConfig>,
92+
context: TokenBuilderContext<SchemeStaticColorBuilderConfig>,
9393
): ThemeTokens {
9494
const { name, config } = context;
9595
const palette = TonalPalette.fromHct(config.source);

packages/theming-material/src/scheme/scheme.builder.spec.ts

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
/// <reference types="jasmine" />
22

33
import { TestBed } from '@angular/core/testing';
4-
import { provideTheme, ThemeTokenRegistry } from '@angularity/theming';
4+
import {
5+
createTheme,
6+
InMemoryThemeTokenRegistry,
7+
provideTheme,
8+
scheduleTokenBuild,
9+
ThemeTokenRegistry,
10+
} from '@angularity/theming';
511
import { Hct, SchemeVibrant } from '@material/material-color-utilities';
6-
import { withThemeBuilder } from 'packages/theming/src/builder-composition';
712

8-
import { provide } from '../../../core/src/provide';
9-
import { InMemoryThemeTokenRegistry } from '../../../theming/src/token';
1013
import {
1114
SchemeBuilder,
1215
SchemeContrastLevel,
@@ -18,21 +21,23 @@ describe('SchemeBuilder', () => {
1821
TestBed.configureTestingModule({
1922
providers: [
2023
provideTheme(
21-
withThemeBuilder('scheme', SchemeBuilder, {
22-
type: SchemeVibrant,
23-
source: Hct.fromInt(0x33bdff),
24-
mode: SchemeMode.Light,
25-
contrast: SchemeContrastLevel.Standard,
26-
}),
24+
createTheme(
25+
scheduleTokenBuild('scheme', SchemeBuilder, {
26+
type: SchemeVibrant,
27+
source: Hct.fromInt(0x33bdff),
28+
mode: SchemeMode.Light,
29+
contrast: SchemeContrastLevel.Standard,
30+
}),
31+
),
2732
),
2833
InMemoryThemeTokenRegistry,
29-
provide({
30-
token: ThemeTokenRegistry,
34+
{
35+
provide: ThemeTokenRegistry,
3136
useExisting: InMemoryThemeTokenRegistry,
32-
}),
37+
},
3338
],
3439
});
35-
const tokens = TestBed.inject(InMemoryThemeTokenRegistry).tokens;
40+
const tokens = TestBed.inject(InMemoryThemeTokenRegistry).getAll();
3641
expect(tokens['scheme-primary']).toBeDefined();
3742
expect(tokens['scheme-on-primary']).toBe('#ffffff');
3843
});

packages/theming-material/src/scheme/scheme.builder.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { inject, Injectable } from '@angular/core';
22
import {
3-
ThemeBuilder,
4-
ThemeBuilderContext,
53
ThemeTokens,
4+
TokenBuilder,
5+
TokenBuilderContext,
66
} from '@angularity/theming';
77
import {
88
DynamicColor,
@@ -98,7 +98,7 @@ export interface SchemeBuilderConfig {
9898
}
9999

100100
/**
101-
* Implementation of `ThemeBuilder` that generates hex color tokens for all
101+
* Implementation of `TokenBuilder` that generates hex color tokens for all
102102
* Material Design color roles.
103103
*
104104
* @remarks
@@ -116,8 +116,8 @@ export interface SchemeBuilderConfig {
116116
*
117117
* @example
118118
* ```ts
119-
* provideTheme(
120-
* withThemeBuilder("scheme", SchemeBuilder, {
119+
* createTheme(
120+
* scheduleTokenBuild("scheme", SchemeBuilder, {
121121
* type: SchemeTonalSpot,
122122
* source: Hct.fromInt(0x33bdff),
123123
* mode: SchemeMode.Light,
@@ -127,10 +127,10 @@ export interface SchemeBuilderConfig {
127127
* ```
128128
*/
129129
@Injectable({ providedIn: 'root' })
130-
export class SchemeBuilder implements ThemeBuilder<SchemeBuilderConfig> {
130+
export class SchemeBuilder implements TokenBuilder<SchemeBuilderConfig> {
131131
protected hctFormatter = inject(HctFormatter);
132132

133-
build(context: ThemeBuilderContext<SchemeBuilderConfig>): ThemeTokens {
133+
build(context: TokenBuilderContext<SchemeBuilderConfig>): ThemeTokens {
134134
const scheme = this.getScheme(context.config);
135135
const tokens: ThemeTokens = {};
136136
for (const [k, v] of Object.entries(MaterialDynamicColors)) {

packages/theming-material/src/typescale/standard-typescale.builder.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { inject, Injectable } from '@angular/core';
22
import {
3-
ThemeBuilder,
4-
ThemeBuilderContext,
53
ThemeTokens,
4+
TokenBuilder,
5+
TokenBuilderContext,
66
} from '@angularity/theming';
77

88
import { STANDARD_TYPESCALES } from './standard-typescales';
@@ -16,7 +16,7 @@ export interface StandardTypescaleBuilderConfig {
1616
}
1717

1818
/**
19-
* Implementation of `ThemeBuilder` that generates theme tokens of typescale
19+
* Implementation of `TokenBuilder` that generates theme tokens of typescale
2020
* levels strictly following the Material specifications.
2121
*
2222
* @remarks
@@ -34,20 +34,20 @@ export interface StandardTypescaleBuilderConfig {
3434
*
3535
* @example
3636
* ```ts
37-
* provideTheme(
38-
* withThemeBuilder("typescale", StandardTypescaleBuilder, {
37+
* createTheme(
38+
* scheduleTokenBuild("typescale", StandardTypescaleBuilder, {
3939
* font: 'Roboto, sans-serif',
4040
* }),
4141
* ),
4242
* ```
4343
*/
4444
@Injectable({ providedIn: 'root' })
4545
export class StandardTypescaleBuilder
46-
implements ThemeBuilder<StandardTypescaleBuilderConfig>
46+
implements TokenBuilder<StandardTypescaleBuilderConfig>
4747
{
4848
protected core = inject(TypescaleBuilder);
4949
build(
50-
context: ThemeBuilderContext<StandardTypescaleBuilderConfig>,
50+
context: TokenBuilderContext<StandardTypescaleBuilderConfig>,
5151
): ThemeTokens {
5252
const { name, config } = context;
5353
const typescales = STANDARD_TYPESCALES.map((typescale) => ({

packages/theming-material/src/typescale/typescale.builder.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Injectable } from '@angular/core';
22
import {
3-
ThemeBuilder,
4-
ThemeBuilderContext,
53
ThemeTokens,
4+
TokenBuilder,
5+
TokenBuilderContext,
66
} from '@angularity/theming';
77

88
/**
@@ -57,7 +57,7 @@ export interface TypescaleConfig {
5757
export interface TypescaleBuilderConfig extends Array<TypescaleConfig> {}
5858

5959
/**
60-
* Implementation of `ThemeBuilder` for generating theme tokens relevant to
60+
* Implementation of `TokenBuilder` for generating theme tokens relevant to
6161
* Material typescale levels.
6262
*
6363
* @remarks
@@ -77,7 +77,7 @@ export interface TypescaleBuilderConfig extends Array<TypescaleConfig> {}
7777
* @example
7878
* ```ts
7979
* const font = 'Roboto, sans-serif';
80-
* export const APP_TYPESCALES: TypescaleConfig[] = [
80+
* export const appTypescales: TypescaleConfig[] = [
8181
* {
8282
* font,
8383
* name: 'display-large',
@@ -98,15 +98,15 @@ export interface TypescaleBuilderConfig extends Array<TypescaleConfig> {}
9898
* ];
9999
* ```
100100
* ```ts
101-
* provideTheme(
102-
* withThemeBuilder("typescale", TypescaleBuilder, APP_TYPESCALES),
101+
* createTheme(
102+
* scheduleTokenBuild("typescale", TypescaleBuilder, appTypescales),
103103
* ),
104104
* ```
105105
*
106106
*/
107107
@Injectable({ providedIn: 'root' })
108-
export class TypescaleBuilder implements ThemeBuilder<TypescaleBuilderConfig> {
109-
build(context: ThemeBuilderContext<TypescaleBuilderConfig>): ThemeTokens {
108+
export class TypescaleBuilder implements TokenBuilder<TypescaleBuilderConfig> {
109+
build(context: TokenBuilderContext<TypescaleBuilderConfig>): ThemeTokens {
110110
const tokens: ThemeTokens = {};
111111
for (const typescale of context.config) {
112112
const result = this.buildTypescale(typescale);
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { Injectable } from '@angular/core';
22

3-
import { ThemeBuilder, ThemeBuilderContext } from '../builder';
43
import { ThemeTokens } from '../token';
4+
import { TokenBuilder, TokenBuilderContext } from '../token-builder';
55

6-
export interface TokensBuilderConfig extends ThemeTokens {}
6+
export interface VanillaBuilderConfig extends ThemeTokens {}
77

88
/**
9-
* An implementation of `ThemeBuilder` that simply accepts an object of
9+
* An implementation of `TokenBuilder` that simply accepts an object of
1010
* pre-defined theme tokens as configuration and returns them as is when
1111
* requested to generate tokens.
1212
*
@@ -16,21 +16,21 @@ export interface TokensBuilderConfig extends ThemeTokens {}
1616
*
1717
* @example
1818
* ```ts
19-
* withThemeBuilder("tokens-", TokensBuilder, {
19+
* scheduleTokenBuild("tokens-", VanillaBuilder, {
2020
* "primary-color": "#ff0000",
2121
* }),
2222
* ```
2323
*
2424
* @example
2525
* ```ts
26-
* withThemeBuilder("", TokensBuilder, {
26+
* scheduleTokenBuild("", VanillaBuilder, {
2727
* "primary-color": "#ff0000",
2828
* }),
2929
* ```
3030
*/
3131
@Injectable({ providedIn: 'root' })
32-
export class TokensBuilder implements ThemeBuilder<TokensBuilderConfig> {
33-
build(context: ThemeBuilderContext<TokensBuilderConfig>): ThemeTokens {
32+
export class VanillaBuilder implements TokenBuilder<VanillaBuilderConfig> {
33+
build(context: TokenBuilderContext<VanillaBuilderConfig>): ThemeTokens {
3434
const tokens: ThemeTokens = {};
3535
for (const [key, value] of Object.entries(context.config))
3636
tokens[`${context.name}${key}`] = value;

packages/theming/src/manager.ts

Lines changed: 0 additions & 44 deletions
This file was deleted.

0 commit comments

Comments
 (0)