@hjmds/design-contracts 1.14.0 → 1.15.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.
Files changed (110) hide show
  1. package/dist/design-profile-layout.d.ts +11 -0
  2. package/dist/design-profile-layout.d.ts.map +1 -0
  3. package/dist/design-profile-layout.js +18 -0
  4. package/dist/design-profile-layout.js.map +1 -0
  5. package/dist/design-profile.d.ts +89 -0
  6. package/dist/design-profile.d.ts.map +1 -0
  7. package/dist/design-profile.js +262 -0
  8. package/dist/design-profile.js.map +1 -0
  9. package/dist/design-system-provider.d.ts +6 -0
  10. package/dist/design-system-provider.d.ts.map +1 -1
  11. package/dist/design-system-provider.js +4 -2
  12. package/dist/design-system-provider.js.map +1 -1
  13. package/dist/gooey-navigation.d.ts +19 -1
  14. package/dist/gooey-navigation.d.ts.map +1 -1
  15. package/dist/gooey-navigation.js +37 -2
  16. package/dist/gooey-navigation.js.map +1 -1
  17. package/dist/palette-contrast.d.ts +6 -0
  18. package/dist/palette-contrast.d.ts.map +1 -1
  19. package/dist/palette-contrast.js +17 -0
  20. package/dist/palette-contrast.js.map +1 -1
  21. package/dist/screen-patterns.d.ts +16 -1
  22. package/dist/screen-patterns.d.ts.map +1 -1
  23. package/dist/screen-patterns.js +4 -0
  24. package/dist/screen-patterns.js.map +1 -1
  25. package/dist/toast-liquid.d.ts +3 -1
  26. package/dist/toast-liquid.d.ts.map +1 -1
  27. package/dist/toast-liquid.js +6 -2
  28. package/dist/toast-liquid.js.map +1 -1
  29. package/dist/version.d.ts +1 -1
  30. package/dist/version.js +1 -1
  31. package/dist/version.js.map +1 -1
  32. package/docs/asset.md +7 -0
  33. package/docs/brand-boundary.md +14 -5
  34. package/docs/code-block.md +12 -1
  35. package/docs/collapsible.md +6 -0
  36. package/docs/design-profile.md +263 -0
  37. package/docs/design-system-provider.md +7 -0
  38. package/docs/dialog.md +5 -1
  39. package/docs/generated/component-maturity.md +1 -1
  40. package/docs/generated/renderer-evidence.json +3 -3
  41. package/docs/generated/renderer-evidence.md +1 -1
  42. package/docs/generated/showcase-manifest.json +1 -1
  43. package/docs/gooey-navigation.md +37 -6
  44. package/docs/heading.md +15 -0
  45. package/docs/theming.md +18 -5
  46. package/docs/usage/README.md +5 -0
  47. package/docs/usage/components/activity-heatmap.md +3 -1
  48. package/docs/usage/components/agreement.md +2 -0
  49. package/docs/usage/components/alert-dialog.md +9 -0
  50. package/docs/usage/components/asset.md +9 -2
  51. package/docs/usage/components/badge.md +3 -1
  52. package/docs/usage/components/bottom-cta.md +3 -1
  53. package/docs/usage/components/bottom-navigation.md +5 -1
  54. package/docs/usage/components/button.md +7 -1
  55. package/docs/usage/components/calendar.md +3 -1
  56. package/docs/usage/components/card.md +19 -2
  57. package/docs/usage/components/carousel.md +5 -0
  58. package/docs/usage/components/code-block.md +14 -2
  59. package/docs/usage/components/collapsible.md +10 -2
  60. package/docs/usage/components/combobox.md +12 -1
  61. package/docs/usage/components/command-palette.md +11 -6
  62. package/docs/usage/components/content-transition.md +1 -1
  63. package/docs/usage/components/context-menu.md +7 -1
  64. package/docs/usage/components/date-picker.md +3 -1
  65. package/docs/usage/components/design-system-provider.md +7 -5
  66. package/docs/usage/components/dialog.md +53 -1
  67. package/docs/usage/components/field.md +3 -1
  68. package/docs/usage/components/form.md +7 -2
  69. package/docs/usage/components/heading.md +7 -1
  70. package/docs/usage/components/image.md +2 -0
  71. package/docs/usage/components/list-row.md +2 -0
  72. package/docs/usage/components/list.md +2 -0
  73. package/docs/usage/components/load-more.md +3 -1
  74. package/docs/usage/components/mentions.md +3 -1
  75. package/docs/usage/components/menu.md +3 -1
  76. package/docs/usage/components/menubar.md +7 -1
  77. package/docs/usage/components/message-composer.md +11 -5
  78. package/docs/usage/components/notice.md +9 -0
  79. package/docs/usage/components/number-field.md +3 -1
  80. package/docs/usage/components/onboarding-screen.md +16 -9
  81. package/docs/usage/components/overview-screen.md +73 -0
  82. package/docs/usage/components/password-field.md +5 -1
  83. package/docs/usage/components/popover.md +7 -0
  84. package/docs/usage/components/saved-items-screen.md +3 -1
  85. package/docs/usage/components/screen-layout.md +9 -1
  86. package/docs/usage/components/search-field.md +3 -1
  87. package/docs/usage/components/select.md +9 -0
  88. package/docs/usage/components/sheet.md +14 -1
  89. package/docs/usage/components/skeleton.md +9 -0
  90. package/docs/usage/components/slider.md +3 -1
  91. package/docs/usage/components/statistic.md +3 -1
  92. package/docs/usage/components/surface.md +8 -1
  93. package/docs/usage/components/tabs.md +11 -2
  94. package/docs/usage/components/tag.md +3 -1
  95. package/docs/usage/components/tags-input.md +6 -1
  96. package/docs/usage/components/text-area.md +3 -1
  97. package/docs/usage/components/text-transition.md +8 -2
  98. package/docs/usage/components/text.md +3 -1
  99. package/docs/usage/components/toast.md +18 -1
  100. package/docs/usage/components/top-bar.md +3 -1
  101. package/docs/usage/compositions/command-records.md +106 -0
  102. package/docs/usage/compositions/content-transition-comparison.md +108 -0
  103. package/docs/usage/compositions/date-time-selection.md +110 -0
  104. package/docs/usage/compositions/design-profile-comparison.md +114 -0
  105. package/docs/usage/tokens/color.md +9 -2
  106. package/docs/usage/tokens/elevation-opacity.md +8 -1
  107. package/docs/usage/tokens/motion.md +10 -1
  108. package/docs/usage/tokens/radius.md +8 -1
  109. package/docs/usage/tokens/typography.md +15 -1
  110. package/package.json +13 -1
@@ -0,0 +1,11 @@
1
+ import type { HjmDesignProfile } from "./design-profile.js";
2
+ import type { GridDescriptor } from "./grid.js";
3
+ export type DesignProfileScreenPresentation = HjmDesignProfile["screens"]["overview"];
4
+ export declare function resolveDesignProfileScreen(presentation?: DesignProfileScreenPresentation): {
5
+ maxWidth: 720 | 1200;
6
+ headerAxis: "column" | "row";
7
+ centered: boolean;
8
+ gap: 24 | 32;
9
+ };
10
+ export declare function resolveDesignProfileCollection(collection?: HjmDesignProfile["compositions"]["collection"]): GridDescriptor;
11
+ //# sourceMappingURL=design-profile-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-profile-layout.d.ts","sourceRoot":"","sources":["../src/design-profile-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,MAAM,+BAA+B,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;AACtF,wBAAgB,0BAA0B,CAAC,YAAY,GAAE,+BAA6C;;;;;EAOrG;AACD,wBAAgB,8BAA8B,CAAC,UAAU,GAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC,YAAY,CAAU,GAAG,cAAc,CAKlI"}
@@ -0,0 +1,18 @@
1
+ import { layout, spacing } from "./foundations.js";
2
+ export function resolveDesignProfileScreen(presentation = "dashboard") {
3
+ if (!["dashboard", "editorial", "landscape"].includes(presentation))
4
+ throw new TypeError("Unsupported profile screen presentation");
5
+ // Long prose stays in the existing reading width; collections use the existing
6
+ // content width. This does not change the order of accessible screen regions.
7
+ return { maxWidth: presentation === "editorial" ? layout.readingMaxWidth : layout.contentMaxWidth,
8
+ headerAxis: presentation === "dashboard" ? "row" : "column",
9
+ centered: presentation === "landscape", gap: presentation === "landscape" ? spacing.xxl : spacing.xl };
10
+ }
11
+ export function resolveDesignProfileCollection(collection = "rows") {
12
+ if (!["rows", "cards", "grid"].includes(collection))
13
+ throw new TypeError("Unsupported profile collection");
14
+ // Three-column editorial cards stay readable at 240; Grid reduces columns to
15
+ // the measured container and font scale instead of trusting viewport width alone.
16
+ return { columns: collection === "rows" ? { compact: 1 } : { compact: 1, medium: 2, expanded: collection === "grid" ? 3 : 2 }, gap: { compact: collection === "rows" ? "sm" : "lg" }, minColumnWidth: { compact: 240 } };
17
+ }
18
+ //# sourceMappingURL=design-profile-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-profile-layout.js","sourceRoot":"","sources":["../src/design-profile-layout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,UAAU,0BAA0B,CAAC,eAAgD,WAAW;IACpG,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACpI,+EAA+E;IAC/E,8EAA8E;IAC9E,OAAO,EAAE,QAAQ,EAAE,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe;QAC/F,UAAU,EAAE,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,KAAc,CAAC,CAAC,CAAC,QAAiB;QAC7E,QAAQ,EAAE,YAAY,KAAK,WAAW,EAAE,GAAG,EAAE,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;AAC3G,CAAC;AACD,MAAM,UAAU,8BAA8B,CAAC,aAA6D,MAAM;IAChH,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;IAC3G,6EAA6E;IAC7E,kFAAkF;IAClF,OAAO,EAAE,OAAO,EAAE,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;AAC3N,CAAC","sourcesContent":["import type { HjmDesignProfile } from \"./design-profile.js\";\nimport { layout, spacing } from \"./foundations.js\";\nimport type { GridDescriptor } from \"./grid.js\";\n\nexport type DesignProfileScreenPresentation = HjmDesignProfile[\"screens\"][\"overview\"];\nexport function resolveDesignProfileScreen(presentation: DesignProfileScreenPresentation = \"dashboard\") {\n if (![\"dashboard\", \"editorial\", \"landscape\"].includes(presentation)) throw new TypeError(\"Unsupported profile screen presentation\");\n // Long prose stays in the existing reading width; collections use the existing\n // content width. This does not change the order of accessible screen regions.\n return { maxWidth: presentation === \"editorial\" ? layout.readingMaxWidth : layout.contentMaxWidth,\n headerAxis: presentation === \"dashboard\" ? \"row\" as const : \"column\" as const,\n centered: presentation === \"landscape\", gap: presentation === \"landscape\" ? spacing.xxl : spacing.xl };\n}\nexport function resolveDesignProfileCollection(collection: HjmDesignProfile[\"compositions\"][\"collection\"] = \"rows\"): GridDescriptor {\n if (![\"rows\", \"cards\", \"grid\"].includes(collection)) throw new TypeError(\"Unsupported profile collection\");\n // Three-column editorial cards stay readable at 240; Grid reduces columns to\n // the measured container and font scale instead of trusting viewport width alone.\n return { columns: collection === \"rows\" ? { compact: 1 } : { compact: 1, medium: 2, expanded: collection === \"grid\" ? 3 : 2 }, gap: { compact: collection === \"rows\" ? \"sm\" : \"lg\" }, minColumnWidth: { compact: 240 } };\n}\n"]}
@@ -0,0 +1,89 @@
1
+ import { type ResolvedTheme, type ThemeColors } from "./colors.js";
2
+ import { radius, typography, heading, shadow, type FontWeightValue } from "./foundations.js";
3
+ import { type EffectSurfaceDescriptor } from "./effect-surface.js";
4
+ import type { ContentTransitionPreset } from "./content-transition.js";
5
+ /** A product chooses one portable profile; the renderer owns each host translation.
6
+ * Keep business state/callbacks outside it so a visual change cannot replace a draft.
7
+ * See docs/design-profile.md for the staged renderer integration and coverage limits. */
8
+ export type HjmDesignPreset = "neutral" | "retro" | "paper" | "forest" | "minimal" | "editorial" | "brutalist" | "glass" | "aurora" | "terminal" | "clay";
9
+ type RadiusTokens = Readonly<Record<keyof typeof radius, number>>;
10
+ type TypeToken = Readonly<{
11
+ fontSize: number;
12
+ lineHeight: number;
13
+ fontWeight: FontWeightValue;
14
+ }>;
15
+ type TypographyTokens = Readonly<Record<keyof typeof typography, TypeToken>>;
16
+ type HeadingTokens = Readonly<Record<keyof typeof heading, TypeToken>>;
17
+ type ShadowToken = Readonly<{
18
+ color: string;
19
+ opacity: number;
20
+ radius: number;
21
+ offsetY: number;
22
+ }>;
23
+ type ShadowTokens = Readonly<Record<keyof typeof shadow, ShadowToken>>;
24
+ type SurfaceMaterial = Readonly<{
25
+ /** Host-relative strength; Web maps 1 to 32px, Native host calibrates its own blur. */
26
+ blurStrength: number;
27
+ /** Requested semantic fill; the renderer raises opacity when background contrast requires it. */
28
+ fillOpacity: number;
29
+ insetShadows: readonly Readonly<ShadowToken & {
30
+ offsetX: number;
31
+ }>[];
32
+ }>;
33
+ type Palette = Readonly<Record<ResolvedTheme, Readonly<ThemeColors>>>;
34
+ export type HjmDesignProfile = Readonly<{
35
+ id: string;
36
+ palette: Palette;
37
+ tokens: Readonly<{
38
+ radius: RadiusTokens;
39
+ fontFamily: Readonly<{
40
+ ui: readonly string[];
41
+ code: readonly string[];
42
+ }>;
43
+ typography: TypographyTokens;
44
+ heading: HeadingTokens;
45
+ shadow: ShadowTokens;
46
+ }>;
47
+ material: Readonly<Record<"canvas" | "card", EffectSurfaceDescriptor | null> & {
48
+ surface?: SurfaceMaterial | null;
49
+ }>;
50
+ interactions: Readonly<{
51
+ contentTransition: ContentTransitionPreset;
52
+ selectionMotion: "none" | "slide";
53
+ }>;
54
+ compositions: Readonly<{
55
+ collection: "rows" | "cards" | "grid";
56
+ toolbar: "inline" | "collapsible";
57
+ }>;
58
+ screens: Readonly<{
59
+ overview: "dashboard" | "editorial" | "landscape";
60
+ }>;
61
+ }>;
62
+ /** A custom app profile is data, not a mutable global registry or renderer import.
63
+ * Partial records inherit the selected preset independently in light and dark. */
64
+ export type HjmDesignProfileInput = Readonly<{
65
+ extends?: HjmDesignPreset;
66
+ id?: string;
67
+ palette?: Readonly<Partial<Record<ResolvedTheme, Readonly<Partial<ThemeColors>>>>>;
68
+ tokens?: Readonly<{
69
+ radius?: Readonly<Partial<RadiusTokens>>;
70
+ fontFamily?: Readonly<Partial<HjmDesignProfile["tokens"]["fontFamily"]>>;
71
+ typography?: Readonly<Partial<Record<keyof typeof typography, Partial<TypeToken>>>>;
72
+ heading?: Readonly<Partial<Record<keyof typeof heading, Partial<TypeToken>>>>;
73
+ shadow?: Readonly<Partial<Record<keyof typeof shadow, Partial<ShadowToken>>>>;
74
+ }>;
75
+ material?: Readonly<Partial<Pick<HjmDesignProfile["material"], "canvas" | "card">> & {
76
+ surface?: Partial<SurfaceMaterial> | null;
77
+ }>;
78
+ interactions?: Readonly<Partial<HjmDesignProfile["interactions"]>>;
79
+ compositions?: Readonly<Partial<HjmDesignProfile["compositions"]>>;
80
+ screens?: Readonly<Partial<HjmDesignProfile["screens"]>>;
81
+ }>;
82
+ export declare const hjmDesignPresets: Readonly<Record<HjmDesignPreset, HjmDesignProfile>>;
83
+ export declare function defineHjmDesignProfile(input?: HjmDesignProfileInput): HjmDesignProfile;
84
+ /** Resolve the readable fill against black/white backdrop extremes using the
85
+ * final product palette, including brandPalette overrides. Blur is decorative:
86
+ * it cannot be used as evidence of text contrast over arbitrary app content. */
87
+ export declare function resolveDesignProfileSurfaceMaterial(profile: HjmDesignProfile | undefined, palette: Readonly<ThemeColors>): SurfaceMaterial | null;
88
+ export {};
89
+ //# sourceMappingURL=design-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-profile.d.ts","sourceRoot":"","sources":["../src/design-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,262 @@
1
+ import { THEMES } from "./colors.js";
2
+ import { radius, fontFamily, typography, heading, shadow, fontWeight } from "./foundations.js";
3
+ import { checkPaletteContrast, resolveSurfaceFillOpacity } from "./palette-contrast.js";
4
+ import { resolveEffectSurface } from "./effect-surface.js";
5
+ const neutral = {
6
+ id: "neutral", palette: THEMES,
7
+ tokens: { radius, fontFamily, typography, heading, shadow },
8
+ material: { canvas: null, card: null, surface: null },
9
+ interactions: { contentTransition: "fade", selectionMotion: "none" },
10
+ compositions: { collection: "rows", toolbar: "inline" },
11
+ screens: { overview: "dashboard" },
12
+ };
13
+ /** Profiles deliberately differ in interaction and arrangement, not just hue.
14
+ * No font asset is bundled or implied: custom font loading remains product-owned. */
15
+ const presetInputs = {
16
+ retro: {
17
+ id: "retro",
18
+ palette: {
19
+ light: { bg: "#fff8e8", surface: "#fffdf5", surfaceAlt: "#eee0c5", surfaceAccent: "#f6d4a0", border: "#d1bd96", borderControl: "#75604b", primary: "#973c20", contentBrand: "#80321a", text: "#2c2119", textBody: "#413123", textMuted: "#594637", textSub: "#695646", textWeak: "#857461" },
20
+ dark: { bg: "#211a16", surface: "#2d241d", surfaceAlt: "#3b3025", surfaceAccent: "#5e3827", border: "#807260", borderControl: "#b7a387", primary: "#af5437", contentBrand: "#ffc38b", text: "#fff5e1", textBody: "#ead8bb", textMuted: "#d5c1a3", textSub: "#bea88b", textWeak: "#a18e74" },
21
+ },
22
+ tokens: { radius: { sm: 2, md: 4, lg: 6, xl: 8 } },
23
+ material: { canvas: { layers: ["noise"], intensity: 0.08, active: false, seed: "retro" } },
24
+ interactions: { contentTransition: "slide", selectionMotion: "none" },
25
+ compositions: { collection: "grid", toolbar: "inline" },
26
+ screens: { overview: "dashboard" },
27
+ },
28
+ paper: {
29
+ id: "paper",
30
+ palette: {
31
+ light: { bg: "#f9f5ed", surface: "#fffdf8", surfaceAlt: "#eee8dc", surfaceAccent: "#e7dac8", border: "#d6cabb", borderControl: "#776b5c", primary: "#665039", contentBrand: "#58432e", text: "#28231c", textBody: "#40382d", textMuted: "#5b5145", textSub: "#6e6253", textWeak: "#887b69" },
32
+ dark: { bg: "#1b1916", surface: "#27231e", surfaceAlt: "#332d25", surfaceAccent: "#4f4132", border: "#847561", borderControl: "#b8a68c", primary: "#83684c", contentBrand: "#e3bf91", text: "#f8f0e1", textBody: "#e5d9c4", textMuted: "#d0c0a6", textSub: "#b8a78d", textWeak: "#a18e72" },
33
+ },
34
+ tokens: { radius: { sm: 4, md: 6, lg: 8, xl: 12 } },
35
+ material: { canvas: { layers: ["grain"], intensity: 0.06, active: false, seed: "paper" } },
36
+ interactions: { contentTransition: "fade", selectionMotion: "none" },
37
+ compositions: { collection: "rows", toolbar: "collapsible" },
38
+ screens: { overview: "editorial" },
39
+ },
40
+ forest: {
41
+ id: "forest",
42
+ palette: {
43
+ light: { bg: "#f2f7ef", surface: "#fbfdf8", surfaceAlt: "#e0ebda", surfaceAccent: "#d5e8c9", border: "#bdcdb5", borderControl: "#65765c", primary: "#285c35", contentBrand: "#23512d", text: "#1d2b1b", textBody: "#30422c", textMuted: "#485c41", textSub: "#5c6e54", textWeak: "#7b8b71" },
44
+ dark: { bg: "#111c15", surface: "#1b2a1e", surfaceAlt: "#293a2a", surfaceAccent: "#304d32", border: "#6b816a", borderControl: "#95ac8d", primary: "#477c54", contentBrand: "#a8d994", text: "#eff7e9", textBody: "#d8e9cf", textMuted: "#bdd4b3", textSub: "#a1bd94", textWeak: "#87a17b" },
45
+ },
46
+ tokens: { radius: { sm: 10, md: 16, lg: 24, xl: 32 } },
47
+ material: { canvas: { layers: ["mesh", "glow"], intensity: 0.1, active: false, seed: "forest" } },
48
+ interactions: { contentTransition: "rise", selectionMotion: "slide" },
49
+ compositions: { collection: "cards", toolbar: "collapsible" },
50
+ screens: { overview: "landscape" },
51
+ },
52
+ minimal: {
53
+ id: "minimal",
54
+ palette: { light: { primary: "#404040", contentBrand: "#333333", surfaceAccent: "#eeeeee" }, dark: { primary: "#727272", contentBrand: "#dddddd", surfaceAccent: "#303030" } },
55
+ tokens: { radius: { sm: 4, md: 8, lg: 12, xl: 16 }, shadow: { raised: { opacity: 0 }, floating: { opacity: 0.08 } } },
56
+ interactions: { contentTransition: "fade", selectionMotion: "none" },
57
+ compositions: { collection: "rows", toolbar: "inline" }, screens: { overview: "dashboard" },
58
+ },
59
+ editorial: {
60
+ id: "editorial",
61
+ palette: { light: { primary: "#59435f", contentBrand: "#513a57", surfaceAccent: "#eee4f0" }, dark: { primary: "#846b8e", contentBrand: "#ead0f2", surfaceAccent: "#392a3e" } },
62
+ tokens: { radius: { sm: 0, md: 2, lg: 4, xl: 8 }, typography: { heading: { fontSize: 28, lineHeight: 38, fontWeight: fontWeight.medium }, body: { lineHeight: 24 } }, heading: { level1: { fontSize: 44, lineHeight: 54, fontWeight: fontWeight.medium }, level2: { fontSize: 34, lineHeight: 44, fontWeight: fontWeight.medium } } },
63
+ interactions: { contentTransition: "rise", selectionMotion: "none" },
64
+ compositions: { collection: "rows", toolbar: "collapsible" }, screens: { overview: "editorial" },
65
+ },
66
+ brutalist: {
67
+ id: "brutalist",
68
+ palette: { light: { primary: "#171717", contentBrand: "#171717", surfaceAccent: "#e8ed91", border: "#171717" }, dark: { primary: "#727272", contentBrand: "#f0f3a3", surfaceAccent: "#393a1c", border: "#cccccc" } },
69
+ tokens: { radius: { sm: 0, md: 0, lg: 0, xl: 0 }, shadow: { raised: { radius: 0, offsetY: 4, opacity: 0.25 }, floating: { radius: 0, offsetY: 6, opacity: 0.3 } }, typography: { heading: { fontSize: 30, lineHeight: 38, fontWeight: fontWeight.heavy } }, heading: { level1: { fontSize: 48, lineHeight: 56 }, level2: { fontSize: 38, lineHeight: 46 } } },
70
+ interactions: { contentTransition: "slide", selectionMotion: "none" },
71
+ compositions: { collection: "cards", toolbar: "inline" }, screens: { overview: "editorial" },
72
+ },
73
+ glass: {
74
+ id: "glass",
75
+ palette: {
76
+ // contrast rules; the neutral weak/subtle tiers required an opaque fill.
77
+ light: { primary: "#435e91", contentBrand: "#354c78", surfaceAccent: "#e4ecf7", textSub: "#5b6879", textWeak: "#748292" }, dark: { primary: "#5673a3", contentBrand: "#c1d8ff", surfaceAccent: "#233654" }
78
+ },
79
+ tokens: { radius: { sm: 12, md: 18, lg: 26, xl: 36 }, shadow: { floating: { radius: 24, opacity: 0.12, offsetY: 8 } } },
80
+ material: { canvas: { layers: ["mesh"], intensity: 0.16, active: false, seed: "glass" }, card: { layers: ["glow"], intensity: 0.06, active: false, seed: "glass-card" }, surface: { blurStrength: 0.75, fillOpacity: 0.88, insetShadows: [] } },
81
+ interactions: { contentTransition: "fade", selectionMotion: "slide" },
82
+ compositions: { collection: "cards", toolbar: "inline" }, screens: { overview: "landscape" },
83
+ },
84
+ aurora: {
85
+ id: "aurora",
86
+ palette: { light: { primary: "#62409b", contentBrand: "#58388b", surfaceAccent: "#ece2fa" }, dark: { primary: "#8161b1", contentBrand: "#dbc3ff", surfaceAccent: "#392651" } },
87
+ tokens: { radius: { sm: 8, md: 14, lg: 22, xl: 30 } },
88
+ material: { canvas: { layers: ["mesh", "glow"], intensity: 0.2, active: true, period: 30, seed: "aurora" } },
89
+ interactions: { contentTransition: "scale", selectionMotion: "slide" },
90
+ compositions: { collection: "grid", toolbar: "collapsible" }, screens: { overview: "landscape" },
91
+ },
92
+ terminal: {
93
+ id: "terminal",
94
+ palette: { light: { primary: "#235837", contentBrand: "#245435", surfaceAccent: "#deefdf" }, dark: { primary: "#467f54", contentBrand: "#95e2a6", surfaceAccent: "#203b28" } },
95
+ tokens: { radius: { sm: 2, md: 4, lg: 6, xl: 8 }, fontFamily: { ui: fontFamily.code }, shadow: { raised: { opacity: 0 }, floating: { radius: 0, offsetY: 0, opacity: 0 } } },
96
+ interactions: { contentTransition: "fade", selectionMotion: "none" },
97
+ compositions: { collection: "rows", toolbar: "collapsible" }, screens: { overview: "dashboard" },
98
+ },
99
+ clay: {
100
+ id: "clay",
101
+ palette: { light: { primary: "#904663", contentBrand: "#803b57", surfaceAccent: "#f7e1eb" }, dark: { primary: "#a25e7d", contentBrand: "#f1bed4", surfaceAccent: "#482b3a" } },
102
+ tokens: { radius: { sm: 14, md: 22, lg: 32, xl: 44 }, shadow: { raised: { radius: 16, offsetY: 6, opacity: 0.12 }, floating: { radius: 28, offsetY: 12, opacity: 0.18 } } },
103
+ material: { card: { layers: ["grain"], intensity: 0.04, active: false, seed: "clay" }, surface: { blurStrength: 0, fillOpacity: 1, insetShadows: [
104
+ { color: "#ffffff", opacity: 0.22, radius: 10, offsetX: 3, offsetY: 4 },
105
+ { color: "#000000", opacity: 0.12, radius: 12, offsetX: -3, offsetY: -4 },
106
+ ] } },
107
+ interactions: { contentTransition: "scale", selectionMotion: "slide" },
108
+ compositions: { collection: "cards", toolbar: "collapsible" }, screens: { overview: "dashboard" },
109
+ },
110
+ };
111
+ function freeze(value) {
112
+ if (value !== null && typeof value === "object") {
113
+ for (const item of Object.values(value))
114
+ freeze(item);
115
+ Object.freeze(value);
116
+ }
117
+ return value;
118
+ }
119
+ function choose(value, allowed, field) {
120
+ if (!allowed.includes(value))
121
+ throw new TypeError(`Unsupported design profile ${field}`);
122
+ }
123
+ function merge(base, input) {
124
+ for (const role of Object.keys(input.material ?? {})) {
125
+ if (!["canvas", "card", "surface"].includes(role))
126
+ throw new TypeError("Unsupported design profile material role");
127
+ }
128
+ const requestedSurface = input.material?.surface;
129
+ if (requestedSurface !== undefined && requestedSurface !== null && (typeof requestedSurface !== "object" || Array.isArray(requestedSurface)))
130
+ throw new TypeError("Invalid design profile surface material");
131
+ for (const key of Object.keys(requestedSurface ?? {})) {
132
+ if (!["blurStrength", "fillOpacity", "insetShadows"].includes(key))
133
+ throw new TypeError("Unsupported design profile surface material field");
134
+ }
135
+ const palette = {
136
+ light: { ...base.palette.light, ...input.palette?.light },
137
+ dark: { ...base.palette.dark, ...input.palette?.dark },
138
+ };
139
+ // fromEntries loses fixed keys; iteration over the complete base preserves every role.
140
+ const type = Object.fromEntries(Object.entries(base.tokens.typography).map(([key, value]) => [key, { ...value, ...input.tokens?.typography?.[key] }]));
141
+ // Display levels need their own roles: deriving them from body text would erase
142
+ // the hierarchy. Keep the original level3–5 typography aliases, with explicit
143
+ // heading overrides last, and preserve inherited heading values on empty input.
144
+ const aliases = { level3: "heading", level4: "titleLarge", level5: "title" };
145
+ for (const key of Object.keys(input.tokens?.heading ?? {})) {
146
+ if (!Object.prototype.hasOwnProperty.call(heading, key))
147
+ throw new TypeError("Unsupported design profile heading level");
148
+ }
149
+ const headings = Object.fromEntries(Object.entries(base.tokens.heading).map(([key, value]) => {
150
+ const level = key;
151
+ const alias = level in aliases ? aliases[level] : undefined;
152
+ return [level, { ...value, ...(alias ? input.tokens?.typography?.[alias] : undefined), ...input.tokens?.heading?.[level] }];
153
+ }));
154
+ // The complete base shadow record has the same key-preservation guarantee.
155
+ const elevation = Object.fromEntries(Object.entries(base.tokens.shadow).map(([key, value]) => [key, { ...value, ...input.tokens?.shadow?.[key] }]));
156
+ const profile = {
157
+ id: input.id ?? base.id, palette,
158
+ tokens: {
159
+ radius: { ...base.tokens.radius, ...input.tokens?.radius },
160
+ // Copy caller-owned arrays: freezing the resolved profile must never freeze app input.
161
+ fontFamily: { ui: [...(input.tokens?.fontFamily?.ui ?? base.tokens.fontFamily.ui)], code: [...(input.tokens?.fontFamily?.code ?? base.tokens.fontFamily.code)] },
162
+ typography: type, heading: headings, shadow: elevation,
163
+ },
164
+ material: { ...base.material, ...input.material, surface: input.material?.surface === null ? null
165
+ : input.material?.surface === undefined ? base.material.surface ?? null
166
+ : { blurStrength: 0, fillOpacity: 1, insetShadows: [], ...base.material.surface, ...input.material.surface } },
167
+ interactions: { ...base.interactions, ...input.interactions },
168
+ compositions: { ...base.compositions, ...input.compositions },
169
+ screens: { ...base.screens, ...input.screens },
170
+ };
171
+ if (!profile.id.trim())
172
+ throw new TypeError("Design profile id must not be empty");
173
+ for (const mode of ["light", "dark"]) {
174
+ for (const [key, value] of Object.entries(palette[mode])) {
175
+ if (!(key in THEMES[mode]) || !/^#[0-9a-f]{6}$/i.test(value))
176
+ throw new TypeError(`Invalid design profile palette ${mode}.${key}`);
177
+ }
178
+ if (checkPaletteContrast(palette[mode]).length)
179
+ throw new RangeError(`Design profile ${mode} palette fails required contrast pairs`);
180
+ }
181
+ for (const [key, value] of Object.entries(profile.tokens.radius)) {
182
+ if (!(key in radius) || !Number.isFinite(value) || value < 0 || value > 999)
183
+ throw new RangeError("Invalid design profile radius");
184
+ }
185
+ // Circles/pills retain their semantic geometry; product corners apply to other roles.
186
+ if (profile.tokens.radius.full !== radius.full)
187
+ throw new RangeError("Design profile must preserve full radius");
188
+ for (const value of [...Object.values(type), ...Object.values(headings)]) {
189
+ if (!Number.isFinite(value.fontSize) || value.fontSize < 11 || value.fontSize > 96 || !Number.isFinite(value.lineHeight) || value.lineHeight < value.fontSize || value.lineHeight > 144)
190
+ throw new RangeError("Invalid design profile typography");
191
+ choose(value.fontWeight, ["400", "500", "600", "700", "800"], "fontWeight");
192
+ }
193
+ for (const families of Object.values(profile.tokens.fontFamily)) {
194
+ if (!families.length || families.some(family => !family.trim()))
195
+ throw new TypeError("Design profile font families must not be empty");
196
+ }
197
+ for (const token of Object.values(elevation)) {
198
+ if (!/^#[0-9a-f]{6}$/i.test(token.color) || !Number.isFinite(token.opacity) || token.opacity < 0 || token.opacity > 1 || !Number.isFinite(token.radius) || token.radius < 0 || token.radius > 96 || !Number.isFinite(token.offsetY) || Math.abs(token.offsetY) > 96)
199
+ throw new RangeError("Invalid design profile shadow");
200
+ }
201
+ const surface = profile.material.surface;
202
+ if (surface) {
203
+ // Keep a readable semantic fill rather than copying a low-alpha reference card.
204
+ // Native can fail to supply blur and must always retain its opaque fallback.
205
+ if (!Number.isFinite(surface.blurStrength) || surface.blurStrength < 0 || surface.blurStrength > 1 || !Number.isFinite(surface.fillOpacity) || surface.fillOpacity < 0.85 || surface.fillOpacity > 1)
206
+ throw new RangeError("Invalid design profile surface material");
207
+ if (!Array.isArray(surface.insetShadows) || surface.insetShadows.length > 2)
208
+ throw new RangeError("Invalid design profile inset shadows");
209
+ for (const token of surface.insetShadows) {
210
+ if (!/^#[0-9a-f]{6}$/i.test(token.color) || !Number.isFinite(token.opacity) || token.opacity < 0 || token.opacity > 1 || !Number.isFinite(token.radius) || token.radius < 0 || token.radius > 96 || !Number.isFinite(token.offsetY) || Math.abs(token.offsetY) > 96 || !Number.isFinite(token.offsetX) || Math.abs(token.offsetX) > 96)
211
+ throw new RangeError("Invalid design profile inset shadow");
212
+ }
213
+ }
214
+ const effects = Object.fromEntries(["canvas", "card"].map(role => {
215
+ const descriptor = profile.material[role];
216
+ if (descriptor === null)
217
+ return [role, null];
218
+ resolveEffectSurface(descriptor);
219
+ // Deep-copy material data as well: a preset resolver must not own caller state.
220
+ return [role, { ...descriptor, ...(descriptor.layers ? { layers: [...descriptor.layers] } : {}), ...(descriptor.colors ? { colors: descriptor.colors.map(color => ({ ...color })) } : {}) }];
221
+ }));
222
+ const material = { ...effects, surface: surface ? { ...surface, insetShadows: surface.insetShadows.map(token => ({ ...token })) } : null };
223
+ choose(profile.interactions.contentTransition, ["fade", "rise", "slide", "scale"], "contentTransition");
224
+ choose(profile.interactions.selectionMotion, ["none", "slide"], "selectionMotion");
225
+ choose(profile.compositions.collection, ["rows", "cards", "grid"], "collection");
226
+ choose(profile.compositions.toolbar, ["inline", "collapsible"], "toolbar");
227
+ choose(profile.screens.overview, ["dashboard", "editorial", "landscape"], "overview");
228
+ return freeze({ ...profile, material });
229
+ }
230
+ export const hjmDesignPresets = freeze({
231
+ neutral: merge(neutral, {}),
232
+ retro: merge(neutral, presetInputs.retro),
233
+ paper: merge(neutral, presetInputs.paper),
234
+ forest: merge(neutral, presetInputs.forest),
235
+ minimal: merge(neutral, presetInputs.minimal),
236
+ editorial: merge(neutral, presetInputs.editorial),
237
+ brutalist: merge(neutral, presetInputs.brutalist),
238
+ glass: merge(neutral, presetInputs.glass),
239
+ aurora: merge(neutral, presetInputs.aurora),
240
+ terminal: merge(neutral, presetInputs.terminal),
241
+ clay: merge(neutral, presetInputs.clay),
242
+ });
243
+ export function defineHjmDesignProfile(input = {}) {
244
+ const base = hjmDesignPresets[input.extends ?? "neutral"];
245
+ if (!base)
246
+ throw new TypeError("Unknown HJM design preset");
247
+ return merge(base, input);
248
+ }
249
+ /** Resolve the readable fill against black/white backdrop extremes using the
250
+ * final product palette, including brandPalette overrides. Blur is decorative:
251
+ * it cannot be used as evidence of text contrast over arbitrary app content. */
252
+ export function resolveDesignProfileSurfaceMaterial(profile, palette) {
253
+ const material = profile?.material.surface;
254
+ if (!material)
255
+ return null;
256
+ // Transparency requires a real backdrop effect. Plain/clay surfaces stay solid
257
+ // on both hosts instead of becoming tint-only imitations of a glass material.
258
+ if (!material.blurStrength)
259
+ return { ...material, fillOpacity: 1 };
260
+ return { ...material, fillOpacity: resolveSurfaceFillOpacity(material.fillOpacity, palette) };
261
+ }
262
+ //# sourceMappingURL=design-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-profile.js","sourceRoot":"","sources":["../src/design-profile.ts"],"names":[],"mappings":"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","sourcesContent":["import { THEMES, type ResolvedTheme, type ThemeColors } from \"./colors.js\";\nimport { radius, fontFamily, typography, heading, shadow, fontWeight, type FontWeightValue } from \"./foundations.js\";\nimport { checkPaletteContrast, resolveSurfaceFillOpacity } from \"./palette-contrast.js\";\nimport { resolveEffectSurface, type EffectSurfaceDescriptor } from \"./effect-surface.js\";\nimport type { ContentTransitionPreset } from \"./content-transition.js\";\n\n/** A product chooses one portable profile; the renderer owns each host translation.\n * Keep business state/callbacks outside it so a visual change cannot replace a draft.\n * See docs/design-profile.md for the staged renderer integration and coverage limits. */\nexport type HjmDesignPreset = \"neutral\" | \"retro\" | \"paper\" | \"forest\" | \"minimal\" | \"editorial\" | \"brutalist\" | \"glass\" | \"aurora\" | \"terminal\" | \"clay\";\ntype RadiusTokens = Readonly<Record<keyof typeof radius, number>>;\ntype TypeToken = Readonly<{ fontSize: number; lineHeight: number; fontWeight: FontWeightValue }>;\ntype TypographyTokens = Readonly<Record<keyof typeof typography, TypeToken>>;\ntype HeadingTokens = Readonly<Record<keyof typeof heading, TypeToken>>;\ntype ShadowToken = Readonly<{ color: string; opacity: number; radius: number; offsetY: number }>;\ntype ShadowTokens = Readonly<Record<keyof typeof shadow, ShadowToken>>;\ntype SurfaceMaterial = Readonly<{\n /** Host-relative strength; Web maps 1 to 32px, Native host calibrates its own blur. */\n blurStrength: number;\n /** Requested semantic fill; the renderer raises opacity when background contrast requires it. */\n fillOpacity: number;\n insetShadows: readonly Readonly<ShadowToken & { offsetX: number }>[];\n}>;\ntype Palette = Readonly<Record<ResolvedTheme, Readonly<ThemeColors>>>;\nexport type HjmDesignProfile = Readonly<{\n id: string;\n palette: Palette;\n tokens: Readonly<{\n radius: RadiusTokens;\n fontFamily: Readonly<{ ui: readonly string[]; code: readonly string[] }>;\n typography: TypographyTokens;\n heading: HeadingTokens;\n shadow: ShadowTokens;\n }>;\n material: Readonly<Record<\"canvas\" | \"card\", EffectSurfaceDescriptor | null> & { surface?: SurfaceMaterial | null }>;\n interactions: Readonly<{\n contentTransition: ContentTransitionPreset;\n selectionMotion: \"none\" | \"slide\";\n }>;\n compositions: Readonly<{\n collection: \"rows\" | \"cards\" | \"grid\";\n toolbar: \"inline\" | \"collapsible\";\n }>;\n screens: Readonly<{ overview: \"dashboard\" | \"editorial\" | \"landscape\" }>;\n}>;\n\n/** A custom app profile is data, not a mutable global registry or renderer import.\n * Partial records inherit the selected preset independently in light and dark. */\nexport type HjmDesignProfileInput = Readonly<{\n extends?: HjmDesignPreset;\n id?: string;\n palette?: Readonly<Partial<Record<ResolvedTheme, Readonly<Partial<ThemeColors>>>>>;\n tokens?: Readonly<{\n radius?: Readonly<Partial<RadiusTokens>>;\n fontFamily?: Readonly<Partial<HjmDesignProfile[\"tokens\"][\"fontFamily\"]>>;\n typography?: Readonly<Partial<Record<keyof typeof typography, Partial<TypeToken>>>>;\n heading?: Readonly<Partial<Record<keyof typeof heading, Partial<TypeToken>>>>;\n shadow?: Readonly<Partial<Record<keyof typeof shadow, Partial<ShadowToken>>>>;\n }>;\n material?: Readonly<Partial<Pick<HjmDesignProfile[\"material\"], \"canvas\" | \"card\">> & { surface?: Partial<SurfaceMaterial> | null }>;\n interactions?: Readonly<Partial<HjmDesignProfile[\"interactions\"]>>;\n compositions?: Readonly<Partial<HjmDesignProfile[\"compositions\"]>>;\n screens?: Readonly<Partial<HjmDesignProfile[\"screens\"]>>;\n}>;\n\nconst neutral: HjmDesignProfile = {\n id: \"neutral\", palette: THEMES,\n tokens: { radius, fontFamily, typography, heading, shadow },\n material: { canvas: null, card: null, surface: null },\n interactions: { contentTransition: \"fade\", selectionMotion: \"none\" },\n compositions: { collection: \"rows\", toolbar: \"inline\" },\n screens: { overview: \"dashboard\" },\n};\n\n/** Profiles deliberately differ in interaction and arrangement, not just hue.\n * No font asset is bundled or implied: custom font loading remains product-owned. */\nconst presetInputs: Readonly<Record<Exclude<HjmDesignPreset, \"neutral\">, HjmDesignProfileInput>> = {\n retro: {\n id: \"retro\",\n palette: {\n light: { bg: \"#fff8e8\", surface: \"#fffdf5\", surfaceAlt: \"#eee0c5\", surfaceAccent: \"#f6d4a0\", border: \"#d1bd96\", borderControl: \"#75604b\", primary: \"#973c20\", contentBrand: \"#80321a\", text: \"#2c2119\", textBody: \"#413123\", textMuted: \"#594637\", textSub: \"#695646\", textWeak: \"#857461\" },\n dark: { bg: \"#211a16\", surface: \"#2d241d\", surfaceAlt: \"#3b3025\", surfaceAccent: \"#5e3827\", border: \"#807260\", borderControl: \"#b7a387\", primary: \"#af5437\", contentBrand: \"#ffc38b\", text: \"#fff5e1\", textBody: \"#ead8bb\", textMuted: \"#d5c1a3\", textSub: \"#bea88b\", textWeak: \"#a18e74\" },\n },\n tokens: { radius: { sm: 2, md: 4, lg: 6, xl: 8 } },\n material: { canvas: { layers: [\"noise\"], intensity: 0.08, active: false, seed: \"retro\" } },\n interactions: { contentTransition: \"slide\", selectionMotion: \"none\" },\n compositions: { collection: \"grid\", toolbar: \"inline\" },\n screens: { overview: \"dashboard\" },\n },\n paper: {\n id: \"paper\",\n palette: {\n light: { bg: \"#f9f5ed\", surface: \"#fffdf8\", surfaceAlt: \"#eee8dc\", surfaceAccent: \"#e7dac8\", border: \"#d6cabb\", borderControl: \"#776b5c\", primary: \"#665039\", contentBrand: \"#58432e\", text: \"#28231c\", textBody: \"#40382d\", textMuted: \"#5b5145\", textSub: \"#6e6253\", textWeak: \"#887b69\" },\n dark: { bg: \"#1b1916\", surface: \"#27231e\", surfaceAlt: \"#332d25\", surfaceAccent: \"#4f4132\", border: \"#847561\", borderControl: \"#b8a68c\", primary: \"#83684c\", contentBrand: \"#e3bf91\", text: \"#f8f0e1\", textBody: \"#e5d9c4\", textMuted: \"#d0c0a6\", textSub: \"#b8a78d\", textWeak: \"#a18e72\" },\n },\n tokens: { radius: { sm: 4, md: 6, lg: 8, xl: 12 } },\n material: { canvas: { layers: [\"grain\"], intensity: 0.06, active: false, seed: \"paper\" } },\n interactions: { contentTransition: \"fade\", selectionMotion: \"none\" },\n compositions: { collection: \"rows\", toolbar: \"collapsible\" },\n screens: { overview: \"editorial\" },\n },\n forest: {\n id: \"forest\",\n palette: {\n light: { bg: \"#f2f7ef\", surface: \"#fbfdf8\", surfaceAlt: \"#e0ebda\", surfaceAccent: \"#d5e8c9\", border: \"#bdcdb5\", borderControl: \"#65765c\", primary: \"#285c35\", contentBrand: \"#23512d\", text: \"#1d2b1b\", textBody: \"#30422c\", textMuted: \"#485c41\", textSub: \"#5c6e54\", textWeak: \"#7b8b71\" },\n dark: { bg: \"#111c15\", surface: \"#1b2a1e\", surfaceAlt: \"#293a2a\", surfaceAccent: \"#304d32\", border: \"#6b816a\", borderControl: \"#95ac8d\", primary: \"#477c54\", contentBrand: \"#a8d994\", text: \"#eff7e9\", textBody: \"#d8e9cf\", textMuted: \"#bdd4b3\", textSub: \"#a1bd94\", textWeak: \"#87a17b\" },\n },\n tokens: { radius: { sm: 10, md: 16, lg: 24, xl: 32 } },\n material: { canvas: { layers: [\"mesh\", \"glow\"], intensity: 0.1, active: false, seed: \"forest\" } },\n interactions: { contentTransition: \"rise\", selectionMotion: \"slide\" },\n compositions: { collection: \"cards\", toolbar: \"collapsible\" },\n screens: { overview: \"landscape\" },\n },\n minimal: {\n id: \"minimal\",\n palette: { light: { primary: \"#404040\", contentBrand: \"#333333\", surfaceAccent: \"#eeeeee\" }, dark: { primary: \"#727272\", contentBrand: \"#dddddd\", surfaceAccent: \"#303030\" } },\n tokens: { radius: { sm: 4, md: 8, lg: 12, xl: 16 }, shadow: { raised: { opacity: 0 }, floating: { opacity: 0.08 } } },\n\n interactions: { contentTransition: \"fade\", selectionMotion: \"none\" },\n compositions: { collection: \"rows\", toolbar: \"inline\" }, screens: { overview: \"dashboard\" },\n },\n editorial: {\n id: \"editorial\",\n palette: { light: { primary: \"#59435f\", contentBrand: \"#513a57\", surfaceAccent: \"#eee4f0\" }, dark: { primary: \"#846b8e\", contentBrand: \"#ead0f2\", surfaceAccent: \"#392a3e\" } },\n tokens: { radius: { sm: 0, md: 2, lg: 4, xl: 8 }, typography: { heading: { fontSize: 28, lineHeight: 38, fontWeight: fontWeight.medium }, body: { lineHeight: 24 } }, heading: { level1: { fontSize: 44, lineHeight: 54, fontWeight: fontWeight.medium }, level2: { fontSize: 34, lineHeight: 44, fontWeight: fontWeight.medium } } },\n\n interactions: { contentTransition: \"rise\", selectionMotion: \"none\" },\n compositions: { collection: \"rows\", toolbar: \"collapsible\" }, screens: { overview: \"editorial\" },\n },\n brutalist: {\n id: \"brutalist\",\n palette: { light: { primary: \"#171717\", contentBrand: \"#171717\", surfaceAccent: \"#e8ed91\", border: \"#171717\" }, dark: { primary: \"#727272\", contentBrand: \"#f0f3a3\", surfaceAccent: \"#393a1c\", border: \"#cccccc\" } },\n tokens: { radius: { sm: 0, md: 0, lg: 0, xl: 0 }, shadow: { raised: { radius: 0, offsetY: 4, opacity: 0.25 }, floating: { radius: 0, offsetY: 6, opacity: 0.3 } }, typography: { heading: { fontSize: 30, lineHeight: 38, fontWeight: fontWeight.heavy } }, heading: { level1: { fontSize: 48, lineHeight: 56 }, level2: { fontSize: 38, lineHeight: 46 } } },\n\n interactions: { contentTransition: \"slide\", selectionMotion: \"none\" },\n compositions: { collection: \"cards\", toolbar: \"inline\" }, screens: { overview: \"editorial\" },\n },\n glass: {\n id: \"glass\",\n palette: { // Stronger ink tiers keep glass visibly translucent under the existing\n // contrast rules; the neutral weak/subtle tiers required an opaque fill.\n light: { primary: \"#435e91\", contentBrand: \"#354c78\", surfaceAccent: \"#e4ecf7\", textSub: \"#5b6879\", textWeak: \"#748292\" }, dark: { primary: \"#5673a3\", contentBrand: \"#c1d8ff\", surfaceAccent: \"#233654\" } },\n tokens: { radius: { sm: 12, md: 18, lg: 26, xl: 36 }, shadow: { floating: { radius: 24, opacity: 0.12, offsetY: 8 } } },\n material: { canvas: { layers: [\"mesh\"], intensity: 0.16, active: false, seed: \"glass\" }, card: { layers: [\"glow\"], intensity: 0.06, active: false, seed: \"glass-card\" }, surface: { blurStrength: 0.75, fillOpacity: 0.88, insetShadows: [] } },\n interactions: { contentTransition: \"fade\", selectionMotion: \"slide\" },\n compositions: { collection: \"cards\", toolbar: \"inline\" }, screens: { overview: \"landscape\" },\n },\n aurora: {\n id: \"aurora\",\n palette: { light: { primary: \"#62409b\", contentBrand: \"#58388b\", surfaceAccent: \"#ece2fa\" }, dark: { primary: \"#8161b1\", contentBrand: \"#dbc3ff\", surfaceAccent: \"#392651\" } },\n tokens: { radius: { sm: 8, md: 14, lg: 22, xl: 30 } },\n material: { canvas: { layers: [\"mesh\", \"glow\"], intensity: 0.2, active: true, period: 30, seed: \"aurora\" } },\n interactions: { contentTransition: \"scale\", selectionMotion: \"slide\" },\n compositions: { collection: \"grid\", toolbar: \"collapsible\" }, screens: { overview: \"landscape\" },\n },\n terminal: {\n id: \"terminal\",\n palette: { light: { primary: \"#235837\", contentBrand: \"#245435\", surfaceAccent: \"#deefdf\" }, dark: { primary: \"#467f54\", contentBrand: \"#95e2a6\", surfaceAccent: \"#203b28\" } },\n tokens: { radius: { sm: 2, md: 4, lg: 6, xl: 8 }, fontFamily: { ui: fontFamily.code }, shadow: { raised: { opacity: 0 }, floating: { radius: 0, offsetY: 0, opacity: 0 } } },\n\n interactions: { contentTransition: \"fade\", selectionMotion: \"none\" },\n compositions: { collection: \"rows\", toolbar: \"collapsible\" }, screens: { overview: \"dashboard\" },\n },\n clay: {\n id: \"clay\",\n palette: { light: { primary: \"#904663\", contentBrand: \"#803b57\", surfaceAccent: \"#f7e1eb\" }, dark: { primary: \"#a25e7d\", contentBrand: \"#f1bed4\", surfaceAccent: \"#482b3a\" } },\n tokens: { radius: { sm: 14, md: 22, lg: 32, xl: 44 }, shadow: { raised: { radius: 16, offsetY: 6, opacity: 0.12 }, floating: { radius: 28, offsetY: 12, opacity: 0.18 } } },\n material: { card: { layers: [\"grain\"], intensity: 0.04, active: false, seed: \"clay\" }, surface: { blurStrength: 0, fillOpacity: 1, insetShadows: [\n { color: \"#ffffff\", opacity: 0.22, radius: 10, offsetX: 3, offsetY: 4 },\n { color: \"#000000\", opacity: 0.12, radius: 12, offsetX: -3, offsetY: -4 },\n ] } },\n interactions: { contentTransition: \"scale\", selectionMotion: \"slide\" },\n compositions: { collection: \"cards\", toolbar: \"collapsible\" }, screens: { overview: \"dashboard\" },\n },\n};\n\nfunction freeze<T>(value: T): T {\n if (value !== null && typeof value === \"object\") {\n for (const item of Object.values(value)) freeze(item);\n Object.freeze(value);\n }\n return value;\n}\n\nfunction choose<T extends string>(value: T, allowed: readonly T[], field: string): void {\n if (!allowed.includes(value)) throw new TypeError(`Unsupported design profile ${field}`);\n}\n\nfunction merge(base: HjmDesignProfile, input: HjmDesignProfileInput): HjmDesignProfile {\n for (const role of Object.keys(input.material ?? {})) {\n if (![\"canvas\", \"card\", \"surface\"].includes(role)) throw new TypeError(\"Unsupported design profile material role\");\n }\n const requestedSurface = input.material?.surface;\n if (requestedSurface !== undefined && requestedSurface !== null && (typeof requestedSurface !== \"object\" || Array.isArray(requestedSurface))) throw new TypeError(\"Invalid design profile surface material\");\n for (const key of Object.keys(requestedSurface ?? {})) {\n if (![\"blurStrength\", \"fillOpacity\", \"insetShadows\"].includes(key)) throw new TypeError(\"Unsupported design profile surface material field\");\n }\n const palette = {\n light: { ...base.palette.light, ...input.palette?.light },\n dark: { ...base.palette.dark, ...input.palette?.dark },\n };\n // fromEntries loses fixed keys; iteration over the complete base preserves every role.\n const type = Object.fromEntries(Object.entries(base.tokens.typography).map(([key, value]) => [key, { ...value, ...input.tokens?.typography?.[key as keyof TypographyTokens] }])) as unknown as TypographyTokens;\n // Display levels need their own roles: deriving them from body text would erase\n // the hierarchy. Keep the original level3–5 typography aliases, with explicit\n // heading overrides last, and preserve inherited heading values on empty input.\n const aliases = { level3: \"heading\", level4: \"titleLarge\", level5: \"title\" } as const;\n for (const key of Object.keys(input.tokens?.heading ?? {})) {\n if (!Object.prototype.hasOwnProperty.call(heading, key)) throw new TypeError(\"Unsupported design profile heading level\");\n }\n const headings = Object.fromEntries(Object.entries(base.tokens.heading).map(([key, value]) => {\n const level = key as keyof HeadingTokens;\n const alias = level in aliases ? aliases[level as keyof typeof aliases] : undefined;\n return [level, { ...value, ...(alias ? input.tokens?.typography?.[alias] : undefined), ...input.tokens?.heading?.[level] }];\n })) as unknown as HeadingTokens;\n // The complete base shadow record has the same key-preservation guarantee.\n const elevation = Object.fromEntries(Object.entries(base.tokens.shadow).map(([key, value]) => [key, { ...value, ...input.tokens?.shadow?.[key as keyof ShadowTokens] }])) as unknown as ShadowTokens;\n const profile: HjmDesignProfile = {\n id: input.id ?? base.id, palette,\n tokens: {\n radius: { ...base.tokens.radius, ...input.tokens?.radius },\n // Copy caller-owned arrays: freezing the resolved profile must never freeze app input.\n fontFamily: { ui: [...(input.tokens?.fontFamily?.ui ?? base.tokens.fontFamily.ui)], code: [...(input.tokens?.fontFamily?.code ?? base.tokens.fontFamily.code)] },\n typography: type, heading: headings, shadow: elevation,\n },\n material: { ...base.material, ...input.material, surface: input.material?.surface === null ? null\n : input.material?.surface === undefined ? base.material.surface ?? null\n : { blurStrength: 0, fillOpacity: 1, insetShadows: [], ...base.material.surface, ...input.material.surface } },\n interactions: { ...base.interactions, ...input.interactions },\n compositions: { ...base.compositions, ...input.compositions },\n screens: { ...base.screens, ...input.screens },\n };\n if (!profile.id.trim()) throw new TypeError(\"Design profile id must not be empty\");\n for (const mode of [\"light\", \"dark\"] as const) {\n for (const [key, value] of Object.entries(palette[mode])) {\n if (!(key in THEMES[mode]) || !/^#[0-9a-f]{6}$/i.test(value)) throw new TypeError(`Invalid design profile palette ${mode}.${key}`);\n }\n if (checkPaletteContrast(palette[mode]).length) throw new RangeError(`Design profile ${mode} palette fails required contrast pairs`);\n }\n for (const [key, value] of Object.entries(profile.tokens.radius)) {\n if (!(key in radius) || !Number.isFinite(value) || value < 0 || value > 999) throw new RangeError(\"Invalid design profile radius\");\n }\n // Circles/pills retain their semantic geometry; product corners apply to other roles.\n if (profile.tokens.radius.full !== radius.full) throw new RangeError(\"Design profile must preserve full radius\");\n for (const value of [...Object.values(type), ...Object.values(headings)]) {\n if (!Number.isFinite(value.fontSize) || value.fontSize < 11 || value.fontSize > 96 || !Number.isFinite(value.lineHeight) || value.lineHeight < value.fontSize || value.lineHeight > 144) throw new RangeError(\"Invalid design profile typography\");\n choose(value.fontWeight, [\"400\", \"500\", \"600\", \"700\", \"800\"], \"fontWeight\");\n }\n for (const families of Object.values(profile.tokens.fontFamily)) {\n if (!families.length || families.some(family => !family.trim())) throw new TypeError(\"Design profile font families must not be empty\");\n }\n for (const token of Object.values(elevation)) {\n if (!/^#[0-9a-f]{6}$/i.test(token.color) || !Number.isFinite(token.opacity) || token.opacity < 0 || token.opacity > 1 || !Number.isFinite(token.radius) || token.radius < 0 || token.radius > 96 || !Number.isFinite(token.offsetY) || Math.abs(token.offsetY) > 96) throw new RangeError(\"Invalid design profile shadow\");\n }\n const surface = profile.material.surface;\n if (surface) {\n // Keep a readable semantic fill rather than copying a low-alpha reference card.\n // Native can fail to supply blur and must always retain its opaque fallback.\n if (!Number.isFinite(surface.blurStrength) || surface.blurStrength < 0 || surface.blurStrength > 1 || !Number.isFinite(surface.fillOpacity) || surface.fillOpacity < 0.85 || surface.fillOpacity > 1) throw new RangeError(\"Invalid design profile surface material\");\n if (!Array.isArray(surface.insetShadows) || surface.insetShadows.length > 2) throw new RangeError(\"Invalid design profile inset shadows\");\n for (const token of surface.insetShadows) {\n if (!/^#[0-9a-f]{6}$/i.test(token.color) || !Number.isFinite(token.opacity) || token.opacity < 0 || token.opacity > 1 || !Number.isFinite(token.radius) || token.radius < 0 || token.radius > 96 || !Number.isFinite(token.offsetY) || Math.abs(token.offsetY) > 96 || !Number.isFinite(token.offsetX) || Math.abs(token.offsetX) > 96) throw new RangeError(\"Invalid design profile inset shadow\");\n }\n }\n const effects = Object.fromEntries(([\"canvas\", \"card\"] as const).map(role => {\n const descriptor = profile.material[role];\n if (descriptor === null) return [role, null];\n resolveEffectSurface(descriptor);\n // Deep-copy material data as well: a preset resolver must not own caller state.\n return [role, { ...descriptor, ...(descriptor.layers ? { layers: [...descriptor.layers] } : {}), ...(descriptor.colors ? { colors: descriptor.colors.map(color => ({ ...color })) } : {}) }];\n })) as Pick<HjmDesignProfile[\"material\"], \"canvas\" | \"card\">;\n const material = { ...effects, surface: surface ? { ...surface, insetShadows: surface.insetShadows.map(token => ({ ...token })) } : null };\n choose(profile.interactions.contentTransition, [\"fade\", \"rise\", \"slide\", \"scale\"], \"contentTransition\");\n choose(profile.interactions.selectionMotion, [\"none\", \"slide\"], \"selectionMotion\");\n choose(profile.compositions.collection, [\"rows\", \"cards\", \"grid\"], \"collection\");\n choose(profile.compositions.toolbar, [\"inline\", \"collapsible\"], \"toolbar\");\n choose(profile.screens.overview, [\"dashboard\", \"editorial\", \"landscape\"], \"overview\");\n return freeze({ ...profile, material });\n}\n\nexport const hjmDesignPresets: Readonly<Record<HjmDesignPreset, HjmDesignProfile>> = freeze({\n neutral: merge(neutral, {}),\n retro: merge(neutral, presetInputs.retro),\n paper: merge(neutral, presetInputs.paper),\n forest: merge(neutral, presetInputs.forest),\n minimal: merge(neutral, presetInputs.minimal),\n editorial: merge(neutral, presetInputs.editorial),\n brutalist: merge(neutral, presetInputs.brutalist),\n glass: merge(neutral, presetInputs.glass),\n aurora: merge(neutral, presetInputs.aurora),\n terminal: merge(neutral, presetInputs.terminal),\n clay: merge(neutral, presetInputs.clay),\n});\n\nexport function defineHjmDesignProfile(input: HjmDesignProfileInput = {}): HjmDesignProfile {\n const base = hjmDesignPresets[input.extends ?? \"neutral\"];\n if (!base) throw new TypeError(\"Unknown HJM design preset\");\n return merge(base, input);\n}\n\n/** Resolve the readable fill against black/white backdrop extremes using the\n * final product palette, including brandPalette overrides. Blur is decorative:\n * it cannot be used as evidence of text contrast over arbitrary app content. */\nexport function resolveDesignProfileSurfaceMaterial(profile: HjmDesignProfile | undefined, palette: Readonly<ThemeColors>): SurfaceMaterial | null {\n const material = profile?.material.surface;\n if (!material) return null;\n // Transparency requires a real backdrop effect. Plain/clay surfaces stay solid\n // on both hosts instead of becoming tint-only imitations of a glass material.\n if (!material.blurStrength) return { ...material, fillOpacity: 1 };\n return { ...material, fillOpacity: resolveSurfaceFillOpacity(material.fillOpacity, palette) };\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import type { HjmDesignProfile } from "./design-profile.js";
1
2
  import type { ColorReferencePalette } from "./color-references.js";
2
3
  import { type ResolvedTheme, type ThemeColors, type ThemePreference } from "./colors.js";
3
4
  /**
@@ -99,6 +100,9 @@ export type ResolveDesignSystemEnvironmentOptions = Readonly<{
99
100
  * keys are replaced; the rest keep the HJM defaults.
100
101
  */
101
102
  brandPalette?: Readonly<Partial<Record<ResolvedTheme, Readonly<Partial<ThemeColors>>>>>;
103
+ /** Use defineHjmDesignProfile once at the product boundary; importing its registry
104
+ * here at runtime would force every granular component to bundle all reference packs. */
105
+ designProfile?: HjmDesignProfile;
102
106
  /** A nested renderer inherits the already-resolved parent before consulting OS defaults. */
103
107
  parent?: ResolvedDesignSystemEnvironment;
104
108
  }>;
@@ -106,6 +110,8 @@ export type DesignSystemProviderValue = Readonly<{
106
110
  environment: ResolvedDesignSystemEnvironment;
107
111
  /** Palette consumed directly by `resolveColorReference`. */
108
112
  palette: ColorReferencePalette;
113
+ /** Optional to preserve existing pre-resolved provider values. */
114
+ designProfile?: HjmDesignProfile;
109
115
  }>;
110
116
  /**
111
117
  * Runtime boundary for the resolved palette a renderer receives, including one
@@ -1 +1 @@
1
- {"version":3,"file":"design-system-provider.d.ts","sourceRoot":"","sources":["../src/design-system-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"design-system-provider.d.ts","sourceRoot":"","sources":["../src/design-system-provider.ts"],"names":[],"mappings":"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"}
@@ -186,12 +186,14 @@ export function resolveDesignSystemEnvironment(input, options) {
186
186
  export function resolveDesignSystemProviderValue(input, options) {
187
187
  const environment = resolveDesignSystemEnvironment(input, options);
188
188
  const brandOverride = options.brandPalette?.[environment.theme];
189
+ const basePalette = options.designProfile?.palette[environment.theme] ?? THEMES[environment.theme];
189
190
  const value = {
190
191
  environment,
192
+ ...(options.designProfile === undefined ? {} : { designProfile: options.designProfile }),
191
193
  palette: {
192
194
  theme: brandOverride === undefined
193
- ? THEMES[environment.theme]
194
- : { ...THEMES[environment.theme], ...brandOverride },
195
+ ? basePalette
196
+ : { ...basePalette, ...brandOverride },
195
197
  statusAccents: ACCENTS[environment.theme],
196
198
  statusAccentFills: accentFill,
197
199
  },