igniteui-theming 25.1.0 → 25.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/index.d.ts +75 -0
  2. package/dist/index.js +12 -0
  3. package/dist/json/components/bootstrap.json +1 -0
  4. package/dist/json/components/fluent.json +1 -0
  5. package/dist/json/components/indigo.json +1 -0
  6. package/dist/json/components/material.json +1 -0
  7. package/{json → dist/json}/components/themes.json +31 -1
  8. package/dist/mcp/generators/css.d.ts +7 -4
  9. package/dist/mcp/generators/css.js +129 -104
  10. package/dist/mcp/generators/sass.js +227 -254
  11. package/dist/mcp/index.js +259 -323
  12. package/dist/mcp/knowledge/color-usage.js +524 -502
  13. package/dist/mcp/knowledge/colors.js +61 -50
  14. package/dist/mcp/knowledge/component-metadata.js +697 -598
  15. package/dist/mcp/knowledge/component-themes.js +70 -57
  16. package/dist/mcp/knowledge/custom-palettes.js +4 -9
  17. package/dist/mcp/knowledge/docs/colors/guidance.js +4 -0
  18. package/dist/mcp/knowledge/docs/colors/usage.js +4 -0
  19. package/dist/mcp/knowledge/docs/layout/functions/border-radius.js +4 -0
  20. package/dist/mcp/knowledge/docs/layout/functions/pad.js +4 -0
  21. package/dist/mcp/knowledge/docs/layout/functions/sizable.js +4 -0
  22. package/dist/mcp/knowledge/docs/layout/mixins/sizable.js +4 -0
  23. package/dist/mcp/knowledge/docs/layout/mixins/sizing.js +4 -0
  24. package/dist/mcp/knowledge/docs/layout/mixins/spacing.js +4 -0
  25. package/dist/mcp/knowledge/docs/layout/overview.js +4 -0
  26. package/dist/mcp/knowledge/docs/setup/platform.js +4 -0
  27. package/dist/mcp/knowledge/elevations.d.ts +1 -1
  28. package/dist/mcp/knowledge/elevations.js +26 -12
  29. package/dist/mcp/knowledge/index.js +23 -87
  30. package/dist/mcp/knowledge/layout-docs.d.ts +1 -1
  31. package/dist/mcp/knowledge/multipliers.js +5 -0
  32. package/dist/mcp/knowledge/palettes.js +29 -17
  33. package/dist/mcp/knowledge/platforms/angular.js +98 -120
  34. package/dist/mcp/knowledge/platforms/blazor.js +39 -34
  35. package/dist/mcp/knowledge/platforms/common.js +83 -68
  36. package/dist/mcp/knowledge/platforms/index.js +265 -242
  37. package/dist/mcp/knowledge/platforms/react.js +43 -35
  38. package/dist/mcp/knowledge/platforms/webcomponents.js +266 -292
  39. package/dist/mcp/knowledge/sass-api.js +1 -0
  40. package/dist/mcp/knowledge/typography.js +13 -5
  41. package/dist/mcp/resources/index.js +1 -0
  42. package/dist/mcp/resources/presets.js +409 -508
  43. package/dist/mcp/theming/dist/json/colors/meta/multipliers.js +50 -0
  44. package/dist/mcp/theming/dist/json/colors/presets/palettes.js +85 -0
  45. package/dist/mcp/theming/dist/json/components/themes.js +5792 -0
  46. package/dist/mcp/theming/dist/json/elevations/indigo.js +29 -0
  47. package/dist/mcp/theming/dist/json/elevations/material.js +3 -0
  48. package/dist/mcp/theming/dist/json/typography/presets/typescales.js +621 -0
  49. package/dist/mcp/tools/descriptions.js +98 -154
  50. package/dist/mcp/tools/handlers/color.js +58 -56
  51. package/dist/mcp/tools/handlers/component-theme.js +163 -225
  52. package/dist/mcp/tools/handlers/component-tokens.js +159 -219
  53. package/dist/mcp/tools/handlers/custom-palette.js +138 -179
  54. package/dist/mcp/tools/handlers/elevations.js +27 -28
  55. package/dist/mcp/tools/handlers/index.js +11 -0
  56. package/dist/mcp/tools/handlers/layout.js +125 -176
  57. package/dist/mcp/tools/handlers/palette.js +105 -120
  58. package/dist/mcp/tools/handlers/platform.js +289 -311
  59. package/dist/mcp/tools/handlers/resource.js +22 -31
  60. package/dist/mcp/tools/handlers/theme.js +86 -103
  61. package/dist/mcp/tools/handlers/typography.js +29 -30
  62. package/dist/mcp/tools/index.js +13 -0
  63. package/dist/mcp/tools/schemas.js +239 -218
  64. package/dist/mcp/utils/color.js +277 -239
  65. package/dist/mcp/utils/preprocessing.js +57 -30
  66. package/dist/mcp/utils/result.js +43 -45
  67. package/dist/mcp/utils/sass.js +271 -191
  68. package/dist/mcp/utils/theming-resolve.d.ts +19 -0
  69. package/dist/mcp/utils/theming-resolve.js +57 -0
  70. package/dist/mcp/utils/types.js +96 -53
  71. package/dist/mcp/validators/custom-palette.js +218 -243
  72. package/dist/mcp/validators/index.js +3 -0
  73. package/dist/mcp/validators/palette.js +231 -229
  74. package/dist/tailwind/utilities/bootstrap.css +1 -0
  75. package/dist/tailwind/utilities/fluent.css +1 -0
  76. package/dist/tailwind/utilities/indigo.css +1 -0
  77. package/dist/tailwind/utilities/material.css +1 -0
  78. package/package.json +45 -64
  79. package/sass/json/README.md +12 -7
  80. package/sass/themes/_mixins.scss +1 -0
  81. package/sass/themes/components/button-group/_button-group-theme.scss +42 -0
  82. package/sass/themes/components/grid/_grid-theme.scss +1 -1
  83. package/sass/themes/schemas/components/dark/_button-group.scss +173 -50
  84. package/sass/themes/schemas/components/dark/_grid.scss +0 -16
  85. package/sass/themes/schemas/components/light/_button-group.scss +221 -99
  86. package/sass/themes/schemas/components/light/_grid.scss +14 -20
  87. package/LICENSE +0 -21
  88. package/README.md +0 -391
  89. package/dist/mcp/json/colors/presets/palettes.json.js +0 -13
  90. package/dist/mcp/json/components/themes.json.js +0 -143
  91. package/dist/mcp/json/elevations/indigo.json.js +0 -8
  92. package/dist/mcp/json/elevations/material.json.js +0 -8
  93. package/dist/mcp/json/typography/presets/typescales.json.js +0 -17
  94. package/dist/mcp/knowledge/docs/colors/guidance.md.js +0 -4
  95. package/dist/mcp/knowledge/docs/colors/usage.md.js +0 -4
  96. package/dist/mcp/knowledge/docs/layout/functions/border-radius.md.js +0 -4
  97. package/dist/mcp/knowledge/docs/layout/functions/pad.md.js +0 -4
  98. package/dist/mcp/knowledge/docs/layout/functions/sizable.md.js +0 -4
  99. package/dist/mcp/knowledge/docs/layout/mixins/sizable.md.js +0 -4
  100. package/dist/mcp/knowledge/docs/layout/mixins/sizing.md.js +0 -4
  101. package/dist/mcp/knowledge/docs/layout/mixins/spacing.md.js +0 -4
  102. package/dist/mcp/knowledge/docs/layout/overview.md.js +0 -4
  103. package/dist/mcp/knowledge/docs/setup/platform.md.js +0 -4
  104. package/dist/mcp/vite-env.d.ts +0 -18
  105. package/index.js +0 -5
  106. package/json/components/bootstrap.json +0 -1
  107. package/json/components/fluent.json +0 -1
  108. package/json/components/indigo.json +0 -1
  109. package/json/components/material.json +0 -1
  110. package/tailwind/utilities/bootstrap.css +0 -1
  111. package/tailwind/utilities/fluent.css +0 -1
  112. package/tailwind/utilities/indigo.css +0 -1
  113. package/tailwind/utilities/material.css +0 -1
  114. /package/{json → dist/json}/colors/meta/multipliers.json +0 -0
  115. /package/{json → dist/json}/colors/meta/palette.json +0 -0
  116. /package/{json → dist/json}/colors/presets/palettes.json +0 -0
  117. /package/{json → dist/json}/elevations/indigo.json +0 -0
  118. /package/{json → dist/json}/elevations/material.json +0 -0
  119. /package/{json → dist/json}/typography/presets/typescales.json +0 -0
  120. /package/{tailwind → dist/tailwind}/themes/base.css +0 -0
  121. /package/{tailwind → dist/tailwind}/themes/dark/bootstrap.css +0 -0
  122. /package/{tailwind → dist/tailwind}/themes/dark/fluent.css +0 -0
  123. /package/{tailwind → dist/tailwind}/themes/dark/indigo.css +0 -0
  124. /package/{tailwind → dist/tailwind}/themes/dark/material.css +0 -0
  125. /package/{tailwind → dist/tailwind}/themes/light/bootstrap.css +0 -0
  126. /package/{tailwind → dist/tailwind}/themes/light/fluent.css +0 -0
  127. /package/{tailwind → dist/tailwind}/themes/light/indigo.css +0 -0
  128. /package/{tailwind → dist/tailwind}/themes/light/material.css +0 -0
@@ -1,33 +1,24 @@
1
- import { getResourceContent, RESOURCE_DEFINITIONS } from "../../resources/presets.js";
1
+ import { RESOURCE_DEFINITIONS, getResourceContent } from "../../resources/presets.js";
2
+ import "../../resources/index.js";
3
+ //#region src/tools/handlers/resource.ts
4
+ /**
5
+ * Handler for read_resource tool.
6
+ * Reads theming resource content by URI, bypassing the custom protocol scheme.
7
+ */
2
8
  async function handleReadResource(params) {
3
- const { uri } = params;
4
- const content = getResourceContent(uri);
5
- if (!content) {
6
- const available = RESOURCE_DEFINITIONS.map(
7
- (r) => ` - ${r.uri}: ${r.name}`
8
- ).join("\n");
9
- return {
10
- content: [
11
- {
12
- type: "text",
13
- text: `Resource not found: ${uri}
14
-
15
- Available resources:
16
- ${available}`
17
- }
18
- ],
19
- isError: true
20
- };
21
- }
22
- return {
23
- content: [
24
- {
25
- type: "text",
26
- text: content.content
27
- }
28
- ]
29
- };
9
+ const { uri } = params;
10
+ const content = getResourceContent(uri);
11
+ if (!content) return {
12
+ content: [{
13
+ type: "text",
14
+ text: `Resource not found: ${uri}\n\nAvailable resources:\n${RESOURCE_DEFINITIONS.map((r) => ` - ${r.uri}: ${r.name}`).join("\n")}`
15
+ }],
16
+ isError: true
17
+ };
18
+ return { content: [{
19
+ type: "text",
20
+ text: content.content
21
+ }] };
30
22
  }
31
- export {
32
- handleReadResource
33
- };
23
+ //#endregion
24
+ export { handleReadResource };
@@ -1,106 +1,89 @@
1
1
  import { generateTheme } from "../../generators/sass.js";
2
- import "../../knowledge/colors.js";
3
- import "../../knowledge/component-metadata.js";
4
- import "../../knowledge/custom-palettes.js";
5
- import "../../utils/types.js";
6
- import "../../knowledge/palettes.js";
7
- import "node:fs";
8
- import "node:path";
9
- import "../../utils/color.js";
10
- import { validatePaletteColors, analyzeThemeColorsForPalette, generateWarningComments, generatePaletteSuitabilityComments, formatValidationResult, formatPaletteSuitabilityWarnings } from "../../validators/palette.js";
2
+ import { analyzeThemeColorsForPalette, formatPaletteSuitabilityWarnings, formatValidationResult, generatePaletteSuitabilityComments, generateWarningComments, validatePaletteColors } from "../../validators/palette.js";
3
+ import "../../validators/index.js";
4
+ //#region src/tools/handlers/theme.ts
5
+ /**
6
+ * Handler for create_theme tool.
7
+ */
11
8
  async function handleCreateTheme(params) {
12
- const variant = params.variant ?? "light";
13
- const validation = await validatePaletteColors({
14
- variant,
15
- surface: params.surfaceColor
16
- });
17
- const suitabilityAnalysis = await analyzeThemeColorsForPalette({
18
- primary: params.primaryColor,
19
- secondary: params.secondaryColor,
20
- surface: params.surfaceColor
21
- });
22
- const result = generateTheme({
23
- platform: params.platform,
24
- licensed: params.licensed,
25
- designSystem: params.designSystem,
26
- primaryColor: params.primaryColor,
27
- secondaryColor: params.secondaryColor,
28
- surfaceColor: params.surfaceColor,
29
- variant: params.variant,
30
- name: params.name,
31
- fontFamily: params.fontFamily,
32
- includeTypography: params.includeTypography,
33
- includeElevations: params.includeElevations,
34
- includeSpacing: params.includeSpacing
35
- });
36
- let finalCode = result.code;
37
- const allWarningComments = [];
38
- if (!validation.isValid) {
39
- allWarningComments.push(...generateWarningComments(validation));
40
- }
41
- if (!suitabilityAnalysis.allSuitable) {
42
- allWarningComments.push(
43
- ...generatePaletteSuitabilityComments(suitabilityAnalysis)
44
- );
45
- }
46
- if (allWarningComments.length > 0) {
47
- const lines = finalCode.split("\n");
48
- const useIndex = lines.findIndex(
49
- (line) => line.startsWith("@use '") || line.startsWith('@use "')
50
- );
51
- if (useIndex > 0) {
52
- lines.splice(useIndex, 0, ...allWarningComments, "");
53
- finalCode = lines.join("\n");
54
- }
55
- }
56
- const responseParts = [result.description];
57
- let platformNote = "";
58
- switch (params.platform) {
59
- case "angular":
60
- platformNote = "Platform: Ignite UI for Angular";
61
- break;
62
- case "webcomponents":
63
- platformNote = "Platform: Ignite UI for Web Components";
64
- break;
65
- case "react":
66
- platformNote = "Platform: Ignite UI for React";
67
- break;
68
- case "blazor":
69
- platformNote = "Platform: Ignite UI for Blazor";
70
- break;
71
- case "generic":
72
- platformNote = "Platform: Ignite UI Theming (Standalone)";
73
- break;
74
- default:
75
- platformNote = "Platform: Not specified (generic output). Specify `platform` for optimized code.";
76
- break;
77
- }
78
- responseParts.push("");
79
- responseParts.push(platformNote);
80
- const validationText = formatValidationResult(validation);
81
- if (validationText) {
82
- responseParts.push("");
83
- responseParts.push(validationText);
84
- }
85
- if (!suitabilityAnalysis.allSuitable) {
86
- responseParts.push("");
87
- responseParts.push(formatPaletteSuitabilityWarnings(suitabilityAnalysis));
88
- }
89
- responseParts.push("");
90
- responseParts.push(`Variables created/used: ${result.variables.join(", ")}`);
91
- responseParts.push("");
92
- responseParts.push("```scss");
93
- responseParts.push(finalCode.trimEnd());
94
- responseParts.push("```");
95
- return {
96
- content: [
97
- {
98
- type: "text",
99
- text: responseParts.join("\n")
100
- }
101
- ]
102
- };
9
+ const validation = await validatePaletteColors({
10
+ variant: params.variant ?? "light",
11
+ surface: params.surfaceColor
12
+ });
13
+ const suitabilityAnalysis = await analyzeThemeColorsForPalette({
14
+ primary: params.primaryColor,
15
+ secondary: params.secondaryColor,
16
+ surface: params.surfaceColor
17
+ });
18
+ const result = generateTheme({
19
+ platform: params.platform,
20
+ licensed: params.licensed,
21
+ designSystem: params.designSystem,
22
+ primaryColor: params.primaryColor,
23
+ secondaryColor: params.secondaryColor,
24
+ surfaceColor: params.surfaceColor,
25
+ variant: params.variant,
26
+ name: params.name,
27
+ fontFamily: params.fontFamily,
28
+ includeTypography: params.includeTypography,
29
+ includeElevations: params.includeElevations,
30
+ includeSpacing: params.includeSpacing
31
+ });
32
+ let finalCode = result.code;
33
+ const allWarningComments = [];
34
+ if (!validation.isValid) allWarningComments.push(...generateWarningComments(validation));
35
+ if (!suitabilityAnalysis.allSuitable) allWarningComments.push(...generatePaletteSuitabilityComments(suitabilityAnalysis));
36
+ if (allWarningComments.length > 0) {
37
+ const lines = finalCode.split("\n");
38
+ const useIndex = lines.findIndex((line) => line.startsWith("@use '") || line.startsWith("@use \""));
39
+ if (useIndex > 0) {
40
+ lines.splice(useIndex, 0, ...allWarningComments, "");
41
+ finalCode = lines.join("\n");
42
+ }
43
+ }
44
+ const responseParts = [result.description];
45
+ let platformNote = "";
46
+ switch (params.platform) {
47
+ case "angular":
48
+ platformNote = "Platform: Ignite UI for Angular";
49
+ break;
50
+ case "webcomponents":
51
+ platformNote = "Platform: Ignite UI for Web Components";
52
+ break;
53
+ case "react":
54
+ platformNote = "Platform: Ignite UI for React";
55
+ break;
56
+ case "blazor":
57
+ platformNote = "Platform: Ignite UI for Blazor";
58
+ break;
59
+ case "generic":
60
+ platformNote = "Platform: Ignite UI Theming (Standalone)";
61
+ break;
62
+ default:
63
+ platformNote = "Platform: Not specified (generic output). Specify `platform` for optimized code.";
64
+ break;
65
+ }
66
+ responseParts.push("");
67
+ responseParts.push(platformNote);
68
+ const validationText = formatValidationResult(validation);
69
+ if (validationText) {
70
+ responseParts.push("");
71
+ responseParts.push(validationText);
72
+ }
73
+ if (!suitabilityAnalysis.allSuitable) {
74
+ responseParts.push("");
75
+ responseParts.push(formatPaletteSuitabilityWarnings(suitabilityAnalysis));
76
+ }
77
+ responseParts.push("");
78
+ responseParts.push(`Variables created/used: ${result.variables.join(", ")}`);
79
+ responseParts.push("");
80
+ responseParts.push("```scss");
81
+ responseParts.push(finalCode.trimEnd());
82
+ responseParts.push("```");
83
+ return { content: [{
84
+ type: "text",
85
+ text: responseParts.join("\n")
86
+ }] };
103
87
  }
104
- export {
105
- handleCreateTheme
106
- };
88
+ //#endregion
89
+ export { handleCreateTheme };
@@ -1,33 +1,32 @@
1
- import { generateTypography } from "../../generators/sass.js";
2
1
  import { PLATFORM_METADATA } from "../../knowledge/platforms/index.js";
2
+ import { generateTypography } from "../../generators/sass.js";
3
+ //#region src/tools/handlers/typography.ts
4
+ /**
5
+ * Handler for create_typography tool.
6
+ */
3
7
  function handleCreateTypography(params) {
4
- const result = generateTypography({
5
- platform: params.platform,
6
- licensed: params.licensed,
7
- fontFamily: params.fontFamily,
8
- designSystem: params.designSystem,
9
- customScale: params.customScale,
10
- name: params.name
11
- });
12
- const responseParts = [result.description];
13
- const platformNote = params.platform ? `Platform: ${PLATFORM_METADATA[params.platform]?.name ?? params.platform}` : "Platform: Not specified (generic output). Specify `platform` for optimized code.";
14
- responseParts.push("");
15
- responseParts.push(platformNote);
16
- responseParts.push("");
17
- responseParts.push(`Variables used: ${result.variables.join(", ")}`);
18
- responseParts.push("");
19
- responseParts.push("```scss");
20
- responseParts.push(result.code.trimEnd());
21
- responseParts.push("```");
22
- return {
23
- content: [
24
- {
25
- type: "text",
26
- text: responseParts.join("\n")
27
- }
28
- ]
29
- };
8
+ const result = generateTypography({
9
+ platform: params.platform,
10
+ licensed: params.licensed,
11
+ fontFamily: params.fontFamily,
12
+ designSystem: params.designSystem,
13
+ customScale: params.customScale,
14
+ name: params.name
15
+ });
16
+ const responseParts = [result.description];
17
+ const platformNote = params.platform ? `Platform: ${PLATFORM_METADATA[params.platform]?.name ?? params.platform}` : "Platform: Not specified (generic output). Specify `platform` for optimized code.";
18
+ responseParts.push("");
19
+ responseParts.push(platformNote);
20
+ responseParts.push("");
21
+ responseParts.push(`Variables used: ${result.variables.join(", ")}`);
22
+ responseParts.push("");
23
+ responseParts.push("```scss");
24
+ responseParts.push(result.code.trimEnd());
25
+ responseParts.push("```");
26
+ return { content: [{
27
+ type: "text",
28
+ text: responseParts.join("\n")
29
+ }] };
30
30
  }
31
- export {
32
- handleCreateTypography
33
- };
31
+ //#endregion
32
+ export { handleCreateTypography };
@@ -0,0 +1,13 @@
1
+ import "./handlers/color.js";
2
+ import "./handlers/component-theme.js";
3
+ import "./handlers/component-tokens.js";
4
+ import "./handlers/custom-palette.js";
5
+ import "./handlers/elevations.js";
6
+ import "./handlers/layout.js";
7
+ import "./handlers/palette.js";
8
+ import "./handlers/platform.js";
9
+ import "./handlers/resource.js";
10
+ import "./handlers/theme.js";
11
+ import "./handlers/typography.js";
12
+ import "./handlers/index.js";
13
+ import "./schemas.js";