react-native-terra-ui 0.10.2 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +8 -4
- package/lib/module/context/ThemeProvider.js +5 -5
- package/lib/module/context/ThemeProvider.js.map +1 -1
- package/lib/module/theme/define-config.js +5 -5
- package/lib/module/theme/define-config.js.map +1 -1
- package/lib/module/theme/errors.js +1 -1
- package/lib/module/theme/index.js +2 -2
- package/lib/module/theme/index.js.map +1 -1
- package/lib/module/theme/registry.js +15 -21
- package/lib/module/theme/registry.js.map +1 -1
- package/lib/module/theme/resolve-config.js +68 -68
- package/lib/module/theme/resolve-config.js.map +1 -1
- package/lib/module/theme/runtime.js +11 -11
- package/lib/module/theme/runtime.js.map +1 -1
- package/lib/module/theme/selection-store.js +7 -7
- package/lib/module/theme/selection-store.js.map +1 -1
- package/lib/module/theme/unistyles-adapter.js +1 -1
- package/lib/module/utils/accent-utils.js +24 -24
- package/lib/module/utils/accent-utils.js.map +1 -1
- package/lib/typescript/src/context/ThemeProvider.d.ts +7 -7
- package/lib/typescript/src/context/ThemeProvider.d.ts.map +1 -1
- package/lib/typescript/src/theme/define-config.d.ts +11 -8
- package/lib/typescript/src/theme/define-config.d.ts.map +1 -1
- package/lib/typescript/src/theme/errors.d.ts +1 -1
- package/lib/typescript/src/theme/index.d.ts +3 -3
- package/lib/typescript/src/theme/index.d.ts.map +1 -1
- package/lib/typescript/src/theme/registry.d.ts +5 -5
- package/lib/typescript/src/theme/registry.d.ts.map +1 -1
- package/lib/typescript/src/theme/resolve-config.d.ts +25 -25
- package/lib/typescript/src/theme/resolve-config.d.ts.map +1 -1
- package/lib/typescript/src/theme/runtime.d.ts +5 -5
- package/lib/typescript/src/theme/runtime.d.ts.map +1 -1
- package/lib/typescript/src/theme/selection-store.d.ts +5 -5
- package/lib/typescript/src/theme/selection-store.d.ts.map +1 -1
- package/lib/typescript/src/theme/types.d.ts +20 -47
- package/lib/typescript/src/theme/types.d.ts.map +1 -1
- package/lib/typescript/src/theme/unistyles-adapter.d.ts +1 -1
- package/lib/typescript/src/utils/accent-utils.d.ts +6 -7
- package/lib/typescript/src/utils/accent-utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/context/ThemeProvider.tsx +10 -10
- package/src/theme/define-config.ts +12 -7
- package/src/theme/errors.ts +1 -1
- package/src/theme/index.ts +6 -8
- package/src/theme/registry.ts +15 -23
- package/src/theme/resolve-config.ts +88 -95
- package/src/theme/runtime.ts +11 -11
- package/src/theme/selection-store.ts +9 -9
- package/src/theme/types.ts +21 -47
- package/src/theme/unistyles-adapter.ts +1 -1
- package/src/utils/accent-utils.ts +25 -25
|
@@ -139,10 +139,10 @@ declare global {
|
|
|
139
139
|
namespace TerraUI {
|
|
140
140
|
/**
|
|
141
141
|
* Augment to declare app-specific semantic color keys. Declared keys become
|
|
142
|
-
* valid in `shared` /
|
|
142
|
+
* valid in `shared` / named theme tokens, `theme.color`, and
|
|
143
143
|
* component color props. Keys must not collide with built-in canonical or
|
|
144
144
|
* deprecated names. Type augmentation alone cannot prove a value exists at
|
|
145
|
-
* runtime — provide every declared color through `shared` or
|
|
145
|
+
* runtime — provide every declared color through `shared` or each theme's light/dark entries.
|
|
146
146
|
*
|
|
147
147
|
* @example
|
|
148
148
|
* declare global {
|
|
@@ -229,41 +229,19 @@ export type Scheme = "light" | "dark";
|
|
|
229
229
|
* `light` / `dark` pin a scheme and stop following the system.
|
|
230
230
|
*/
|
|
231
231
|
export type ThemeMode = "system" | "light" | "dark";
|
|
232
|
-
/**
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
* `accent.solid.bg` in `overrides` when an exact fill is required.
|
|
236
|
-
*/
|
|
237
|
-
export interface AccentSeed {
|
|
238
|
-
/** Opaque six-digit sRGB hex (`#rrggbb`). Other formats are rejected at configure time. */
|
|
232
|
+
/** Explicit theme tokens plus a seed-generated accent palette. */
|
|
233
|
+
export type ThemeSeed = TerraThemeOverride & {
|
|
234
|
+
/** Opaque six-digit hex color. Explicit `color` values win over generation. */
|
|
239
235
|
seed: string;
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
* override beats every generated value.
|
|
244
|
-
*/
|
|
245
|
-
overrides?: Partial<ThemeColor>;
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* One scheme's accent input:
|
|
249
|
-
* - a color string — equivalent to `{ seed: value }`;
|
|
250
|
-
* - `{ seed, overrides }` — generation with explicit exceptions;
|
|
251
|
-
* - a full {@link TerraThemeOverride} — skips generation (expert path).
|
|
252
|
-
*/
|
|
253
|
-
export type AccentSchemeInput = string | AccentSeed | TerraThemeOverride;
|
|
254
|
-
/**
|
|
255
|
-
* A named, runtime-switchable overlay on each scheme. A missing scheme leaves
|
|
256
|
-
* that scheme unmodified; the other scheme's seed is never copied implicitly.
|
|
257
|
-
*/
|
|
258
|
-
export type Accent = Partial<Record<Scheme, AccentSchemeInput>>;
|
|
259
|
-
/** @deprecated Use {@link Accent} — a color string per scheme. */
|
|
260
|
-
export type AccentShorthand = Record<Scheme, string>;
|
|
261
|
-
/** @deprecated Use {@link Accent} — a {@link TerraThemeOverride} per scheme. */
|
|
262
|
-
export type AccentOverride = Partial<Record<Scheme, TerraThemeOverride>>;
|
|
236
|
+
};
|
|
237
|
+
/** A seed shorthand, explicit theme tokens, or both via `{ seed, color, ... }`. */
|
|
238
|
+
export type ThemeSchemeInput = string | ThemeSeed | TerraThemeOverride;
|
|
263
239
|
/**
|
|
264
|
-
*
|
|
265
|
-
*
|
|
240
|
+
* A complete named light/dark theme. Missing schemes inherit defaults + shared;
|
|
241
|
+
* seeds are never copied from the other scheme.
|
|
266
242
|
*/
|
|
243
|
+
export type NamedTheme = Partial<Record<Scheme, ThemeSchemeInput>>;
|
|
244
|
+
/** Output of the legacy normalizeAccent helper. */
|
|
267
245
|
export interface NormalizedAccent {
|
|
268
246
|
light: DeepPartial<TerraTheme>;
|
|
269
247
|
dark: DeepPartial<TerraTheme>;
|
|
@@ -357,13 +335,8 @@ export interface ComponentDefaults {
|
|
|
357
335
|
export interface TerraConfig {
|
|
358
336
|
/** Scheme-agnostic token overrides, applied to both light and dark themes. */
|
|
359
337
|
shared?: TerraThemeOverride;
|
|
360
|
-
/**
|
|
361
|
-
|
|
362
|
-
light?: TerraThemeOverride;
|
|
363
|
-
dark?: TerraThemeOverride;
|
|
364
|
-
};
|
|
365
|
-
/** Runtime-switchable named overrides (hue shorthand or full partial). */
|
|
366
|
-
accents?: Record<string, Accent>;
|
|
338
|
+
/** Named light/dark themes applied over defaults + shared. */
|
|
339
|
+
themes?: Record<string, NamedTheme>;
|
|
367
340
|
/**
|
|
368
341
|
* App-provided icon overrides. Semantic icons (`navigation.*`, `status.*`)
|
|
369
342
|
* fall back to the built-in defaults when omitted; app icons (`add`, etc.)
|
|
@@ -376,8 +349,8 @@ export interface TerraConfig {
|
|
|
376
349
|
* `resizeMode`. Wrap third-party components to match `TerraImageProps`.
|
|
377
350
|
*/
|
|
378
351
|
image?: TerraImageComponent;
|
|
379
|
-
/** Name of the
|
|
380
|
-
|
|
352
|
+
/** Name of the theme (from `themes`) to apply by default. */
|
|
353
|
+
defaultTheme?: string;
|
|
381
354
|
/** Per-component default props (e.g. `{ button: { radius: 'full' } }`). */
|
|
382
355
|
components?: ComponentDefaults;
|
|
383
356
|
/**
|
|
@@ -392,13 +365,13 @@ export interface TerraConfig {
|
|
|
392
365
|
initialScheme?: Scheme;
|
|
393
366
|
}
|
|
394
367
|
/** The subset of {@link TerraConfig} that affects resolved theme tokens. */
|
|
395
|
-
export type TerraThemeInput = Pick<TerraConfig, "shared" | "
|
|
368
|
+
export type TerraThemeInput = Pick<TerraConfig, "shared" | "themes" | "defaultTheme">;
|
|
396
369
|
/** Options for pure theme creation. */
|
|
397
370
|
export interface CreateTerraThemesOptions {
|
|
398
371
|
/**
|
|
399
|
-
*
|
|
400
|
-
* with no
|
|
372
|
+
* Named theme to select. Omitted → `defaultTheme`; `null` → the base themes
|
|
373
|
+
* with no named theme. An unknown name throws.
|
|
401
374
|
*/
|
|
402
|
-
|
|
375
|
+
theme?: string | null;
|
|
403
376
|
}
|
|
404
377
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/theme/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAe,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAiB,CAAC;AAIxD,8EAA8E;AAC9E,MAAM,MAAM,UAAU,GAClB,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,gCAAgC;AAChC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3F;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAEpE,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,CAAC;AAInD,oEAAoE;AACpE,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAIlE,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,aAAa,GACb,aAAa,GACb,UAAU,GACV,UAAU,GACV,UAAU,GACV,SAAS,GACT,SAAS,GACT,SAAS,GACT,UAAU,GACV,UAAU,GACV,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzE,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,CAAC;IAC5B,oBAAoB;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACvC;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;CAC9C;AAID;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAElC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,MAAM,EAAE,MAAM,CAAC;IAEf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IAEtB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IAExB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,0BAA0B,EAAE,MAAM,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,0BAA0B,EAAE,MAAM,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAE1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB;;;;;;;;;;;;;;;WAeG;QACH,UAAU,aAAa;SAAG;KAC3B;CACF;AAED,MAAM,WAAW,kBAAmB,SAAQ,OAAO,CAAC,aAAa;CAAG;AAEpE,2EAA2E;AAC3E,MAAM,MAAM,oBAAoB,GAAG,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAErE;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAC/C,MAAM,OAAO,CAAC,aAAa,EAC3B,MAAM,mBAAmB,GAAG,MAAM,gBAAgB,CACnD,CAAC;AAEF,MAAM,WAAW,UAAW,SAAQ,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB;CAAG;AAIhG,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN;;;;;WAKG;QACH,OAAO,EAAE,mBAAmB,CAAC;QAC7B,iCAAiC;QACjC,MAAM,EAAE,mBAAmB,CAAC;KAC7B,CAAC;IACF,MAAM,EAAE;QACN,kFAAkF;QAClF,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,yEAAyE;AACzE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB;AAID,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,YAAY,CAAC;AACnE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,UAAU,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;AAC/E,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,UAAU,EAAE,QAAQ,MAAM,EAAE,CAAC,CAAC;AACzE,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;AAC7E,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,mBAAmB,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;AACtF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,mBAAmB,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;AACxF,gEAAgE;AAChE,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,iBAAiB,GACjB,OAAO,CAAC,MAAM,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;AAClD,MAAM,MAAM,gBAAgB,GAAG,OAAO,CACpC,MAAM,UAAU,EAChB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,IAAI,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,CAC9E,CAAC;AAEF,gGAAgG;AAChG,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAE/C;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAI1D,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtC;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpD
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/theme/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export declare function configureUnistyles({ themes, mode, }: {
|
|
|
20
20
|
* runtime holds the new `light` theme and the previous `dark` theme. Callers
|
|
21
21
|
* publish registry/selection state only after this returns, so on a throw Terra
|
|
22
22
|
* still reports the previous selection; calling the same command again with the
|
|
23
|
-
* previous selection (e.g. `
|
|
23
|
+
* previous selection (e.g. `setTheme(getCurrentTheme() ?? null)`) rewrites
|
|
24
24
|
* both themes and restores consistency. No automatic rollback is attempted.
|
|
25
25
|
*/
|
|
26
26
|
export declare function updateThemes(themes: Record<Scheme, TerraTheme>): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { NamedTheme, NormalizedAccent, Scheme } from "../theme/types";
|
|
2
2
|
import { type AccentGenerationContext } from "./accent-generator.js";
|
|
3
3
|
/**
|
|
4
4
|
* The generation context of a built-in default theme: its four ordinary
|
|
@@ -7,11 +7,10 @@ import { type AccentGenerationContext } from "./accent-generator.js";
|
|
|
7
7
|
*/
|
|
8
8
|
export declare function defaultAccentContext(scheme: Scheme): AccentGenerationContext;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* pass through unchanged. Pure and independent of the registry.
|
|
10
|
+
* @deprecated Prefer createTerraThemes for complete theme resolution.
|
|
11
|
+
* Generates per-scheme patches without shared config. Explicit unseeded patches
|
|
12
|
+
* pass through unchanged; seeded entries generate against their own surface and
|
|
13
|
+
* color tokens and carry the remainder of the patch through unresolved.
|
|
15
14
|
*/
|
|
16
|
-
export declare function normalizeAccent(accent:
|
|
15
|
+
export declare function normalizeAccent(accent: NamedTheme): NormalizedAccent;
|
|
17
16
|
//# sourceMappingURL=accent-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accent-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/accent-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"accent-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/accent-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,MAAM,EAIP,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,uBAAuB,EAG7B,MAAM,uBAAoB,CAAC;AAG5B;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,CAK5E;AAmCD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAKpE"}
|
package/package.json
CHANGED
|
@@ -5,9 +5,9 @@ import { useUnistyles } from "react-native-unistyles";
|
|
|
5
5
|
|
|
6
6
|
import { bootstrapTerraUI } from "../theme/registry";
|
|
7
7
|
import {
|
|
8
|
-
applyAccent,
|
|
9
8
|
applyScheme,
|
|
10
9
|
getThemeSelection,
|
|
10
|
+
setTheme,
|
|
11
11
|
setThemeMode,
|
|
12
12
|
subscribeThemeSelection,
|
|
13
13
|
} from "../theme/runtime";
|
|
@@ -41,13 +41,13 @@ export interface UseThemeResult {
|
|
|
41
41
|
scheme: Scheme;
|
|
42
42
|
/** Pin a scheme (stops following the system). Same as `setMode(scheme)`. */
|
|
43
43
|
setScheme: (scheme: Scheme) => void;
|
|
44
|
-
/** Applied
|
|
45
|
-
|
|
44
|
+
/** Applied theme name, or `undefined` for the base themes. */
|
|
45
|
+
themeName: string | undefined;
|
|
46
46
|
/**
|
|
47
|
-
* Apply a registered
|
|
48
|
-
* name warns in development and leaves the
|
|
47
|
+
* Apply a registered theme; `null` restores the base themes. An unknown
|
|
48
|
+
* name warns in development and leaves the theme unchanged.
|
|
49
49
|
*/
|
|
50
|
-
|
|
50
|
+
setTheme: (name: string | null) => void;
|
|
51
51
|
/**
|
|
52
52
|
* How the active scheme is chosen: `system` follows the OS appearance,
|
|
53
53
|
* `light` / `dark` pin a scheme. A system appearance change updates
|
|
@@ -59,8 +59,8 @@ export interface UseThemeResult {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
|
-
* Access the active theme and switch scheme / mode /
|
|
63
|
-
* comes from the runtime store, so changes made imperatively (`
|
|
62
|
+
* Access the active theme and switch scheme / mode / theme. Selection state
|
|
63
|
+
* comes from the runtime store, so changes made imperatively (`setTheme`,
|
|
64
64
|
* `setThemeMode`) and through this hook are observed by every consumer.
|
|
65
65
|
*/
|
|
66
66
|
export function useTheme(): UseThemeResult {
|
|
@@ -71,8 +71,8 @@ export function useTheme(): UseThemeResult {
|
|
|
71
71
|
theme,
|
|
72
72
|
scheme: (rt.themeName ?? "light") as Scheme,
|
|
73
73
|
setScheme: applyScheme,
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
themeName: selection.themeName,
|
|
75
|
+
setTheme,
|
|
76
76
|
mode: selection.mode,
|
|
77
77
|
setMode: setThemeMode,
|
|
78
78
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TerraConfig } from "./types";
|
|
2
2
|
|
|
3
|
-
/** The literal
|
|
4
|
-
type
|
|
3
|
+
/** The literal theme names declared in `T.themes`, or `never` when none are declared. */
|
|
4
|
+
type DeclaredThemeNames<T> = T extends { themes: infer A }
|
|
5
5
|
? A extends Record<string, unknown>
|
|
6
6
|
? keyof A & string
|
|
7
7
|
: never
|
|
@@ -9,19 +9,24 @@ type DeclaredAccentNames<T> = T extends { accents: infer A }
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Identity helper for authoring a {@link TerraConfig} with contextual typing.
|
|
12
|
-
* Has no side effects. With literal `
|
|
13
|
-
* them; a dynamic `Record<string,
|
|
12
|
+
* Has no side effects. With literal `themes`, `defaultTheme` must name one of
|
|
13
|
+
* them; a dynamic `Record<string, NamedTheme>` keeps `defaultTheme` as `string`
|
|
14
14
|
* and defers to runtime validation.
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* const config = defineTerraConfig({
|
|
18
|
-
*
|
|
19
|
-
*
|
|
18
|
+
* themes: { indigo: { light: "#4f46e5", dark: "#818cf8" } },
|
|
19
|
+
* defaultTheme: "indigo",
|
|
20
20
|
* });
|
|
21
21
|
* configureTerraUI(config);
|
|
22
22
|
*/
|
|
23
23
|
export function defineTerraConfig<const T extends TerraConfig>(
|
|
24
|
-
config: T & {
|
|
24
|
+
config: T & {
|
|
25
|
+
defaultTheme?: DeclaredThemeNames<T>;
|
|
26
|
+
schemes?: never;
|
|
27
|
+
accents?: never;
|
|
28
|
+
defaultAccent?: never;
|
|
29
|
+
}
|
|
25
30
|
): T {
|
|
26
31
|
return config;
|
|
27
32
|
}
|
package/src/theme/errors.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Thrown for invalid pure configuration input — before any registry, selection,
|
|
3
3
|
* or native state is touched. `path` points at the offending config entry, e.g.
|
|
4
|
-
* `
|
|
4
|
+
* `themes.indigo.dark.seed` or `defaultTheme`.
|
|
5
5
|
*/
|
|
6
6
|
export class TerraConfigError extends Error {
|
|
7
7
|
readonly path: string;
|
package/src/theme/index.ts
CHANGED
|
@@ -33,23 +33,23 @@ export { defineTerraConfig } from "./define-config";
|
|
|
33
33
|
export { TerraConfigError } from "./errors";
|
|
34
34
|
export {
|
|
35
35
|
configureTerraUI,
|
|
36
|
-
getAccentNames,
|
|
37
36
|
getDefaultRadius,
|
|
38
37
|
getIcon,
|
|
39
38
|
getImageComponent,
|
|
40
39
|
getIsConfigured,
|
|
41
40
|
getRequiredIcon,
|
|
42
41
|
getSurfaceElevation,
|
|
42
|
+
getThemeNames,
|
|
43
43
|
resolveTheme,
|
|
44
44
|
} from "./registry";
|
|
45
45
|
export { createTerraThemes } from "./resolve-config";
|
|
46
46
|
export type { ThemeSelection } from "./runtime";
|
|
47
47
|
export {
|
|
48
|
-
applyAccent,
|
|
49
48
|
applyScheme,
|
|
50
|
-
|
|
49
|
+
getCurrentTheme,
|
|
51
50
|
getThemeMode,
|
|
52
51
|
getThemeSelection,
|
|
52
|
+
setTheme,
|
|
53
53
|
setThemeMode,
|
|
54
54
|
} from "./runtime";
|
|
55
55
|
export type { ResolvedScreenMargin } from "./screen-margin";
|
|
@@ -60,12 +60,7 @@ export { resolveScreenPadding } from "./screen-padding";
|
|
|
60
60
|
export { defaultDarkTheme, defaultLightTheme } from "./theme";
|
|
61
61
|
// ─── Types ────────────────────────────────────────────────────────────────────
|
|
62
62
|
export type {
|
|
63
|
-
Accent,
|
|
64
63
|
AccentColorToken,
|
|
65
|
-
AccentOverride,
|
|
66
|
-
AccentSchemeInput,
|
|
67
|
-
AccentSeed,
|
|
68
|
-
AccentShorthand,
|
|
69
64
|
ActionColorToken,
|
|
70
65
|
BackgroundColorToken,
|
|
71
66
|
BorderColorToken,
|
|
@@ -81,6 +76,7 @@ export type {
|
|
|
81
76
|
ElevationStyle,
|
|
82
77
|
FontWeightToken,
|
|
83
78
|
LayoutTokens,
|
|
79
|
+
NamedTheme,
|
|
84
80
|
NeutralColorToken,
|
|
85
81
|
OpacityTokens,
|
|
86
82
|
RadiusComponent,
|
|
@@ -110,6 +106,8 @@ export type {
|
|
|
110
106
|
ThemeColor,
|
|
111
107
|
ThemeMode,
|
|
112
108
|
ThemeRadiusOverride,
|
|
109
|
+
ThemeSchemeInput,
|
|
110
|
+
ThemeSeed,
|
|
113
111
|
ThemeSpacingOverride,
|
|
114
112
|
TypeStyle,
|
|
115
113
|
Typography,
|
package/src/theme/registry.ts
CHANGED
|
@@ -23,7 +23,6 @@ import type {
|
|
|
23
23
|
TerraImageComponent,
|
|
24
24
|
TerraSemanticIconName,
|
|
25
25
|
TerraTheme,
|
|
26
|
-
TerraThemeInput,
|
|
27
26
|
ThemeMode,
|
|
28
27
|
} from "./types";
|
|
29
28
|
import { applyMode, configureUnistyles, hasConfiguredUnistyles, updateThemes } from "./unistyles-adapter";
|
|
@@ -81,8 +80,8 @@ let installation: "unconfigured" | "fallback" | "app" = "unconfigured";
|
|
|
81
80
|
|
|
82
81
|
export const getIsConfigured = (): boolean => installation !== "unconfigured";
|
|
83
82
|
|
|
84
|
-
/** Names of the registered
|
|
85
|
-
export const
|
|
83
|
+
/** Names of the registered themes, in declaration order. Returns a fresh array. */
|
|
84
|
+
export const getThemeNames = (): string[] => [...getInstalledConfig().themeNames];
|
|
86
85
|
|
|
87
86
|
export const getImageComponent = (): TerraImageComponent => settings.imageComponent;
|
|
88
87
|
|
|
@@ -107,22 +106,22 @@ export const getSurfaceElevation = (): ElevationKey => settings.surfaceElevation
|
|
|
107
106
|
|
|
108
107
|
/**
|
|
109
108
|
* Resolves one scheme's theme from the installed configuration with the named
|
|
110
|
-
*
|
|
111
|
-
* not the configured `
|
|
109
|
+
* theme selected. Omitting `name` selects the base theme (defaults + shared —
|
|
110
|
+
* not the configured `defaultTheme`). An unknown name warns in development
|
|
112
111
|
* and falls back to the base theme. Pure with respect to runtime state: it
|
|
113
112
|
* never changes the applied selection.
|
|
114
113
|
*/
|
|
115
|
-
export function resolveTheme(scheme: Scheme,
|
|
114
|
+
export function resolveTheme(scheme: Scheme, name?: string): TerraTheme {
|
|
116
115
|
const config = getInstalledConfig();
|
|
117
|
-
let
|
|
118
|
-
if (
|
|
119
|
-
if (config.
|
|
120
|
-
|
|
116
|
+
let themeName: string | null = null;
|
|
117
|
+
if (name !== undefined) {
|
|
118
|
+
if (config.themeNames.includes(name)) {
|
|
119
|
+
themeName = name;
|
|
121
120
|
} else if (__DEV__) {
|
|
122
|
-
console.warn(`[react-native-terra-ui] Unknown
|
|
121
|
+
console.warn(`[react-native-terra-ui] Unknown theme "${name}"; resolving the base theme.`);
|
|
123
122
|
}
|
|
124
123
|
}
|
|
125
|
-
return resolveThemeScheme(config, scheme,
|
|
124
|
+
return resolveThemeScheme(config, scheme, themeName).theme;
|
|
126
125
|
}
|
|
127
126
|
|
|
128
127
|
// ─── Configuration ───────────────────────────────────────────────────────────
|
|
@@ -189,22 +188,15 @@ function deriveMode(config: TerraConfig): ThemeMode {
|
|
|
189
188
|
return "system";
|
|
190
189
|
}
|
|
191
190
|
|
|
192
|
-
const pickThemeInput = (config: TerraConfig): TerraThemeInput => ({
|
|
193
|
-
shared: config.shared,
|
|
194
|
-
schemes: config.schemes,
|
|
195
|
-
accents: config.accents,
|
|
196
|
-
defaultAccent: config.defaultAccent,
|
|
197
|
-
});
|
|
198
|
-
|
|
199
191
|
function applyConfig(config: TerraConfig, kind: "fallback" | "app"): void {
|
|
200
192
|
// (a) Pure: validate and build everything. Throws leave ALL state untouched.
|
|
201
|
-
const themeConfig = normalizeThemeInput(
|
|
193
|
+
const themeConfig = normalizeThemeInput(config);
|
|
202
194
|
const mode = deriveMode(config);
|
|
203
|
-
const { themes, diagnostics } = resolveThemes(themeConfig, themeConfig.
|
|
195
|
+
const { themes, diagnostics } = resolveThemes(themeConfig, themeConfig.defaultTheme);
|
|
204
196
|
const nextSettings = buildSettings(config);
|
|
205
197
|
|
|
206
198
|
// (b) Native. `StyleSheet.configure` runs once per app; after that the
|
|
207
|
-
// rebuilt themes reach the runtime the same way
|
|
199
|
+
// rebuilt themes reach the runtime the same way a theme change does, so an
|
|
208
200
|
// app's config is never stranded behind the fallback's defaults.
|
|
209
201
|
if (hasConfiguredUnistyles()) {
|
|
210
202
|
updateThemes(themes);
|
|
@@ -217,7 +209,7 @@ function applyConfig(config: TerraConfig, kind: "fallback" | "app"): void {
|
|
|
217
209
|
installation = kind;
|
|
218
210
|
settings = nextSettings;
|
|
219
211
|
setInstalledConfig(themeConfig);
|
|
220
|
-
publishThemeSelection({
|
|
212
|
+
publishThemeSelection({ themeName: themeConfig.defaultTheme ?? undefined, mode });
|
|
221
213
|
|
|
222
214
|
warnContrastDiagnostics(diagnostics);
|
|
223
215
|
}
|