@lgtm-hq/turbo-themes 0.12.21 → 0.12.23

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 (90) hide show
  1. package/dist/tokens/style-dictionary/themes.json +2 -2
  2. package/dist/tokens/style-dictionary/tokens.json +2 -2
  3. package/package.json +2 -1
  4. package/packages/core/dist/index.d.ts +9 -0
  5. package/packages/core/dist/index.d.ts.map +1 -0
  6. package/packages/core/dist/index.js +10 -0
  7. package/packages/core/dist/index.js.map +1 -0
  8. package/packages/core/dist/themes/bulma.d.ts +31 -0
  9. package/packages/core/dist/themes/bulma.d.ts.map +1 -0
  10. package/packages/core/dist/themes/bulma.js +160 -0
  11. package/packages/core/dist/themes/bulma.js.map +1 -0
  12. package/packages/core/dist/themes/css/bulma-generator.d.ts +6 -0
  13. package/packages/core/dist/themes/css/bulma-generator.d.ts.map +1 -0
  14. package/packages/core/dist/themes/css/bulma-generator.js +42 -0
  15. package/packages/core/dist/themes/css/bulma-generator.js.map +1 -0
  16. package/packages/core/dist/themes/css/global-overrides.d.ts +2 -0
  17. package/packages/core/dist/themes/css/global-overrides.d.ts.map +1 -0
  18. package/packages/core/dist/themes/css/global-overrides.js +10 -0
  19. package/packages/core/dist/themes/css/global-overrides.js.map +1 -0
  20. package/packages/core/dist/themes/css/helpers.d.ts +58 -0
  21. package/packages/core/dist/themes/css/helpers.d.ts.map +1 -0
  22. package/packages/core/dist/themes/css/helpers.js +181 -0
  23. package/packages/core/dist/themes/css/helpers.js.map +1 -0
  24. package/packages/core/dist/themes/css/index.d.ts +13 -0
  25. package/packages/core/dist/themes/css/index.d.ts.map +1 -0
  26. package/packages/core/dist/themes/css/index.js +26 -0
  27. package/packages/core/dist/themes/css/index.js.map +1 -0
  28. package/packages/core/dist/themes/css/mappings.d.ts +57 -0
  29. package/packages/core/dist/themes/css/mappings.d.ts.map +1 -0
  30. package/packages/core/dist/themes/css/mappings.js +79 -0
  31. package/packages/core/dist/themes/css/mappings.js.map +1 -0
  32. package/packages/core/dist/themes/css/overrides/accessibility.d.ts +6 -0
  33. package/packages/core/dist/themes/css/overrides/accessibility.d.ts.map +1 -0
  34. package/packages/core/dist/themes/css/overrides/accessibility.js +37 -0
  35. package/packages/core/dist/themes/css/overrides/accessibility.js.map +1 -0
  36. package/packages/core/dist/themes/css/overrides/dropdown.d.ts +6 -0
  37. package/packages/core/dist/themes/css/overrides/dropdown.d.ts.map +1 -0
  38. package/packages/core/dist/themes/css/overrides/dropdown.js +86 -0
  39. package/packages/core/dist/themes/css/overrides/dropdown.js.map +1 -0
  40. package/packages/core/dist/themes/css/overrides/forms.d.ts +6 -0
  41. package/packages/core/dist/themes/css/overrides/forms.d.ts.map +1 -0
  42. package/packages/core/dist/themes/css/overrides/forms.js +128 -0
  43. package/packages/core/dist/themes/css/overrides/forms.js.map +1 -0
  44. package/packages/core/dist/themes/css/overrides/index.d.ts +14 -0
  45. package/packages/core/dist/themes/css/overrides/index.d.ts.map +1 -0
  46. package/packages/core/dist/themes/css/overrides/index.js +30 -0
  47. package/packages/core/dist/themes/css/overrides/index.js.map +1 -0
  48. package/packages/core/dist/themes/css/overrides/navbar.d.ts +6 -0
  49. package/packages/core/dist/themes/css/overrides/navbar.d.ts.map +1 -0
  50. package/packages/core/dist/themes/css/overrides/navbar.js +63 -0
  51. package/packages/core/dist/themes/css/overrides/navbar.js.map +1 -0
  52. package/packages/core/dist/themes/css/overrides/tables.d.ts +6 -0
  53. package/packages/core/dist/themes/css/overrides/tables.d.ts.map +1 -0
  54. package/packages/core/dist/themes/css/overrides/tables.js +28 -0
  55. package/packages/core/dist/themes/css/overrides/tables.js.map +1 -0
  56. package/packages/core/dist/themes/css/overrides/typography.d.ts +6 -0
  57. package/packages/core/dist/themes/css/overrides/typography.d.ts.map +1 -0
  58. package/packages/core/dist/themes/css/overrides/typography.js +139 -0
  59. package/packages/core/dist/themes/css/overrides/typography.js.map +1 -0
  60. package/packages/core/dist/themes/css/syntax-generator.d.ts +6 -0
  61. package/packages/core/dist/themes/css/syntax-generator.d.ts.map +1 -0
  62. package/packages/core/dist/themes/css/syntax-generator.js +55 -0
  63. package/packages/core/dist/themes/css/syntax-generator.js.map +1 -0
  64. package/packages/core/dist/themes/css/types.d.ts +23 -0
  65. package/packages/core/dist/themes/css/types.d.ts.map +1 -0
  66. package/packages/core/dist/themes/css/types.js +4 -0
  67. package/packages/core/dist/themes/css/types.js.map +1 -0
  68. package/packages/core/dist/themes/css.d.ts +2 -0
  69. package/packages/core/dist/themes/css.d.ts.map +1 -0
  70. package/packages/core/dist/themes/css.js +5 -0
  71. package/packages/core/dist/themes/css.js.map +1 -0
  72. package/packages/core/dist/themes/registry.d.ts +2 -0
  73. package/packages/core/dist/themes/registry.d.ts.map +1 -0
  74. package/packages/core/dist/themes/registry.js +6 -0
  75. package/packages/core/dist/themes/registry.js.map +1 -0
  76. package/packages/core/dist/themes/tokens.json +1050 -0
  77. package/packages/core/dist/themes/types.d.ts +198 -0
  78. package/packages/core/dist/themes/types.d.ts.map +1 -0
  79. package/packages/core/dist/themes/types.js +4 -0
  80. package/packages/core/dist/themes/types.js.map +1 -0
  81. package/packages/core/dist/tokens/index.d.ts +68 -0
  82. package/packages/core/dist/tokens/index.d.ts.map +1 -0
  83. package/packages/core/dist/tokens/index.js +86 -0
  84. package/packages/core/dist/tokens/index.js.map +1 -0
  85. package/packages/css/dist/generator.d.ts.map +1 -1
  86. package/packages/css/dist/generator.js +2 -0
  87. package/packages/css/dist/generator.js.map +1 -1
  88. package/packages/theme-selector/dist/errors.d.ts.map +1 -1
  89. package/packages/theme-selector/dist/errors.js +4 -0
  90. package/packages/theme-selector/dist/errors.js.map +1 -1
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://design-tokens.org/schema.json",
3
3
  "$description": "Turbo Themes - Design tokens for 9 themes",
4
- "$version": "0.12.21",
5
- "$generated": "2026-01-28T18:20:10.297Z",
4
+ "$version": "0.12.23",
5
+ "$generated": "2026-01-30T15:24:30.862Z",
6
6
  "meta": {
7
7
  "themeIds": [
8
8
  "bulma-dark",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://design-tokens.org/schema.json",
3
3
  "$description": "Turbo Themes - Flat tokens for 9 themes",
4
- "$version": "0.12.21",
5
- "$generated": "2026-01-28T18:20:10.298Z",
4
+ "$version": "0.12.23",
5
+ "$generated": "2026-01-30T15:24:30.863Z",
6
6
  "meta": {
7
7
  "themeIds": [
8
8
  "bulma-dark",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lgtm-hq/turbo-themes",
3
- "version": "0.12.21",
3
+ "version": "0.12.23",
4
4
  "description": "Universal theme packs and an accessible theme selector.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -63,6 +63,7 @@
63
63
  "types": "./dist/index.d.ts",
64
64
  "files": [
65
65
  "dist/**",
66
+ "packages/core/dist/**",
66
67
  "packages/css/dist/**",
67
68
  "packages/css/dist/components/**",
68
69
  "packages/theme-selector/dist/**",
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Core package exports
3
+ *
4
+ * Re-exports tokens and themes for use by other packages
5
+ */
6
+ export * from './tokens/index.js';
7
+ export * from './themes/registry.js';
8
+ export * from './themes/types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: MIT
2
+ /**
3
+ * Core package exports
4
+ *
5
+ * Re-exports tokens and themes for use by other packages
6
+ */
7
+ export * from './tokens/index.js';
8
+ export * from './themes/registry.js';
9
+ export * from './themes/types.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { BulmaConfig } from './types.ts';
2
+ /**
3
+ * Convert hex color to HSL values
4
+ */
5
+ export declare function hexToHsl(hex: string): {
6
+ h: number;
7
+ s: number;
8
+ l: number;
9
+ };
10
+ /**
11
+ * Theme colors interface for Bulma configuration
12
+ */
13
+ export interface ThemeColors {
14
+ primary: string;
15
+ link: string;
16
+ info: string;
17
+ success: string;
18
+ warning: string;
19
+ danger: string;
20
+ }
21
+ /**
22
+ * Generate Bulma Sass configuration from theme config
23
+ */
24
+ export declare function generateBulmaConfig(config: BulmaConfig): string;
25
+ /**
26
+ * Generate full Bulma @use statement with configuration
27
+ * @param colors - Theme colors in hex format
28
+ * @param config - Optional Bulma configuration (breakpoints, spacing, etc.)
29
+ */
30
+ export declare function generateBulmaUse(colors: ThemeColors, config?: BulmaConfig): string;
31
+ //# sourceMappingURL=bulma.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulma.d.ts","sourceRoot":"","sources":["../../src/themes/bulma.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAuCzE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA4D/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAqClF"}
@@ -0,0 +1,160 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Bulma configuration utilities
3
+ /**
4
+ * Convert hex color to HSL values
5
+ */
6
+ export function hexToHsl(hex) {
7
+ // Remove # if present
8
+ const cleanHex = hex.replace('#', '');
9
+ // Parse hex to RGB
10
+ const r = Number.parseInt(cleanHex.slice(0, 2), 16) / 255;
11
+ const g = Number.parseInt(cleanHex.slice(2, 4), 16) / 255;
12
+ const b = Number.parseInt(cleanHex.slice(4, 6), 16) / 255;
13
+ const max = Math.max(r, g, b);
14
+ const min = Math.min(r, g, b);
15
+ let h;
16
+ const l = (max + min) / 2;
17
+ let s;
18
+ if (max === min) {
19
+ h = s = 0; // achromatic
20
+ }
21
+ else {
22
+ const d = max - min;
23
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
24
+ switch (max) {
25
+ case r:
26
+ h = (g - b) / d + (g < b ? 6 : 0);
27
+ break;
28
+ case g:
29
+ h = (b - r) / d + 2;
30
+ break;
31
+ default:
32
+ h = (r - g) / d + 4;
33
+ break;
34
+ }
35
+ h /= 6;
36
+ }
37
+ return {
38
+ h: Math.round(h * 360),
39
+ s: Math.round(s * 100),
40
+ l: Math.round(l * 100),
41
+ };
42
+ }
43
+ /**
44
+ * Generate Bulma Sass configuration from theme config
45
+ */
46
+ export function generateBulmaConfig(config) {
47
+ const lines = [];
48
+ // Breakpoints
49
+ if (config.breakpoints) {
50
+ lines.push('// Custom breakpoints');
51
+ const breakpoints = config.breakpoints;
52
+ if (breakpoints.mobile)
53
+ lines.push(`$mobile: ${breakpoints.mobile};`);
54
+ if (breakpoints.tablet)
55
+ lines.push(`$tablet: ${breakpoints.tablet};`);
56
+ if (breakpoints.desktop)
57
+ lines.push(`$desktop: ${breakpoints.desktop};`);
58
+ if (breakpoints.widescreen)
59
+ lines.push(`$widescreen: ${breakpoints.widescreen};`);
60
+ if (breakpoints.fullhd)
61
+ lines.push(`$fullhd: ${breakpoints.fullhd};`);
62
+ lines.push('');
63
+ }
64
+ // Spacing
65
+ if (config.spacing) {
66
+ lines.push('// Custom spacing scale');
67
+ const spacing = config.spacing;
68
+ if (spacing.small)
69
+ lines.push(`$spacing-small: ${spacing.small};`);
70
+ if (spacing.medium)
71
+ lines.push(`$spacing-medium: ${spacing.medium};`);
72
+ if (spacing.large)
73
+ lines.push(`$spacing-large: ${spacing.large};`);
74
+ lines.push('');
75
+ }
76
+ // Sizes
77
+ if (config.sizes) {
78
+ lines.push('// Custom typography sizes');
79
+ const sizes = config.sizes;
80
+ if (sizes.small)
81
+ lines.push(`$size-small: ${sizes.small};`);
82
+ if (sizes.normal)
83
+ lines.push(`$size-normal: ${sizes.normal};`);
84
+ if (sizes.medium)
85
+ lines.push(`$size-medium: ${sizes.medium};`);
86
+ if (sizes.large)
87
+ lines.push(`$size-large: ${sizes.large};`);
88
+ lines.push('');
89
+ }
90
+ // Radius
91
+ if (config.radius) {
92
+ lines.push('// Custom border radius');
93
+ const radius = config.radius;
94
+ if (radius.small)
95
+ lines.push(`$radius-small: ${radius.small};`);
96
+ if (radius.normal)
97
+ lines.push(`$radius: ${radius.normal};`);
98
+ if (radius.medium)
99
+ lines.push(`$radius-medium: ${radius.medium};`);
100
+ if (radius.large)
101
+ lines.push(`$radius-large: ${radius.large};`);
102
+ if (radius.rounded)
103
+ lines.push(`$radius-rounded: ${radius.rounded};`);
104
+ lines.push('');
105
+ }
106
+ // Shadows
107
+ if (config.shadows) {
108
+ lines.push('// Custom shadows');
109
+ const shadows = config.shadows;
110
+ if (shadows.small)
111
+ lines.push(`$shadow-small: ${shadows.small};`);
112
+ if (shadows.normal)
113
+ lines.push(`$shadow-normal: ${shadows.normal};`);
114
+ if (shadows.medium)
115
+ lines.push(`$shadow-medium: ${shadows.medium};`);
116
+ if (shadows.large)
117
+ lines.push(`$shadow-large: ${shadows.large};`);
118
+ lines.push('');
119
+ }
120
+ return lines.join('\n');
121
+ }
122
+ /**
123
+ * Generate full Bulma @use statement with configuration
124
+ * @param colors - Theme colors in hex format
125
+ * @param config - Optional Bulma configuration (breakpoints, spacing, etc.)
126
+ */
127
+ export function generateBulmaUse(colors, config) {
128
+ // Convert hex colors to HSL with error handling
129
+ let primaryHsl, linkHsl, infoHsl, successHsl, warningHsl, dangerHsl;
130
+ try {
131
+ primaryHsl = hexToHsl(colors.primary);
132
+ linkHsl = hexToHsl(colors.link);
133
+ infoHsl = hexToHsl(colors.info);
134
+ successHsl = hexToHsl(colors.success);
135
+ warningHsl = hexToHsl(colors.warning);
136
+ dangerHsl = hexToHsl(colors.danger);
137
+ }
138
+ catch (error) {
139
+ throw new Error(`Invalid theme colors: ${error instanceof Error ? error.message : String(error)}`);
140
+ }
141
+ // Generate Bulma config (breakpoints, spacing, etc.)
142
+ const configStr = config ? generateBulmaConfig(config) : '';
143
+ // Build the @use statement with color configuration
144
+ // Use 'bulma/sass' to ensure variables are properly forwarded and configurable
145
+ const colorConfig = `@use 'bulma/sass' with (
146
+ $primary: hsl(${primaryHsl.h}, ${primaryHsl.s}%, ${primaryHsl.l}%),
147
+ $link: hsl(${linkHsl.h}, ${linkHsl.s}%, ${linkHsl.l}%),
148
+ $info: hsl(${infoHsl.h}, ${infoHsl.s}%, ${infoHsl.l}%),
149
+ $success: hsl(${successHsl.h}, ${successHsl.s}%, ${successHsl.l}%),
150
+ $warning: hsl(${warningHsl.h}, ${warningHsl.s}%, ${warningHsl.l}%),
151
+ $danger: hsl(${dangerHsl.h}, ${dangerHsl.s}%, ${dangerHsl.l}%)
152
+ );`;
153
+ // If no additional config, return just the color config
154
+ if (!configStr.trim()) {
155
+ return colorConfig;
156
+ }
157
+ // Combine config and color @use statement with newline separator
158
+ return `${configStr}\n${colorConfig}`;
159
+ }
160
+ //# sourceMappingURL=bulma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulma.js","sourceRoot":"","sources":["../../src/themes/bulma.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ThemeFlavor } from '../types.js';
2
+ /**
3
+ * Generates theme CSS variables for a flavor using data-driven mappings.
4
+ */
5
+ export declare function generateThemeCSSVariables(flavor: ThemeFlavor): string;
6
+ //# sourceMappingURL=bulma-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulma-generator.d.ts","sourceRoot":"","sources":["../../../src/themes/css/bulma-generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAqB/C;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA+CrE"}
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Bulma-specific CSS variable generation
3
+ import { escapeCssId, generateVariables, generateHSLComponents, generateHSLColors, generateComponentVariables, } from './helpers.js';
4
+ import { BULMA_SCHEME_MAPPINGS, PRIMARY_HSL_MAPPING, STATE_HSL_MAPPINGS, TEXT_MAPPINGS, HEADING_MAPPINGS, CONTENT_MAPPINGS, TABLE_MAPPINGS, SYNTAX_MAPPINGS, SURFACE_MAPPINGS, COMPONENT_MAPPINGS, } from './mappings.js';
5
+ /**
6
+ * Generates theme CSS variables for a flavor using data-driven mappings.
7
+ */
8
+ export function generateThemeCSSVariables(flavor) {
9
+ const { tokens } = flavor;
10
+ const escapedId = escapeCssId(flavor.id);
11
+ const lines = [];
12
+ // Bulma scheme variables
13
+ lines.push(...generateVariables(tokens, BULMA_SCHEME_MAPPINGS));
14
+ // Primary color HSL components
15
+ lines.push(...generateHSLComponents(tokens, PRIMARY_HSL_MAPPING));
16
+ // State colors as HSL
17
+ lines.push(...generateHSLColors(tokens, STATE_HSL_MAPPINGS));
18
+ // Typography (with special formatting for font stacks)
19
+ lines.push(` --theme-font-sans:\n ${tokens.typography.fonts.sans};`);
20
+ lines.push(` --theme-font-mono:\n ${tokens.typography.fonts.mono};`);
21
+ // Text variables
22
+ lines.push(...generateVariables(tokens, TEXT_MAPPINGS));
23
+ // Heading variables
24
+ lines.push(...generateVariables(tokens, HEADING_MAPPINGS));
25
+ // Content element variables
26
+ lines.push(...generateVariables(tokens, CONTENT_MAPPINGS));
27
+ // Table variables
28
+ lines.push(...generateVariables(tokens, TABLE_MAPPINGS));
29
+ // Syntax highlighting variables
30
+ lines.push(...generateVariables(tokens, SYNTAX_MAPPINGS));
31
+ // Surface/background variables
32
+ lines.push(...generateVariables(tokens, SURFACE_MAPPINGS));
33
+ // Component tokens (optional)
34
+ const componentLines = generateComponentVariables(tokens, COMPONENT_MAPPINGS);
35
+ if (componentLines.length > 0) {
36
+ lines.push(...componentLines);
37
+ }
38
+ // Color scheme
39
+ lines.push(` color-scheme: ${flavor.appearance};`);
40
+ return `html[data-flavor='${escapedId}'] {\n${lines.join('\n')}\n}`;
41
+ }
42
+ //# sourceMappingURL=bulma-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulma-generator.js","sourceRoot":"","sources":["../../../src/themes/css/bulma-generator.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,yCAAyC;AAGzC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAmB;IAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,yBAAyB;IACzB,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEhE,+BAA+B;IAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAElE,sBAAsB;IACtB,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE7D,uDAAuD;IACvD,KAAK,CAAC,IAAI,CAAC,6BAA6B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,CAAC,6BAA6B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IAEzE,iBAAiB;IACjB,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAExD,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE3D,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE3D,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAEzD,gCAAgC;IAChC,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAE1D,+BAA+B;IAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE3D,8BAA8B;IAC9B,MAAM,cAAc,GAAG,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC9E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;IAChC,CAAC;IAED,eAAe;IACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;IAEpD,OAAO,qBAAqB,SAAS,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACtE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { cssGlobalOverrides, cssTypographyOverrides, cssFormOverrides, cssDropdownOverrides, cssTableOverrides, cssNavbarOverrides, cssAccessibilityOverrides, } from './overrides/index.js';
2
+ //# sourceMappingURL=global-overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-overrides.d.ts","sourceRoot":"","sources":["../../../src/themes/css/global-overrides.ts"],"names":[],"mappings":"AASA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Global CSS override generation - re-exports from modular structure
3
+ //
4
+ // This file maintains backward compatibility by re-exporting the composed
5
+ // cssGlobalOverrides function from the new modular overrides/ directory.
6
+ //
7
+ // For new code, prefer importing from './overrides/index.js' directly,
8
+ // which also exports individual override functions for selective use.
9
+ export { cssGlobalOverrides, cssTypographyOverrides, cssFormOverrides, cssDropdownOverrides, cssTableOverrides, cssNavbarOverrides, cssAccessibilityOverrides, } from './overrides/index.js';
10
+ //# sourceMappingURL=global-overrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-overrides.js","sourceRoot":"","sources":["../../../src/themes/css/global-overrides.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,qEAAqE;AACrE,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AAEtE,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { ThemeTokens } from '../types.js';
2
+ import type { CSSVariableMapping, HSLVariableMapping, HSLColorMapping, ComponentTokenMapping } from './types.js';
3
+ /**
4
+ * Unified token path resolver options.
5
+ */
6
+ interface ResolveTokenOptions {
7
+ /** Optional path prefix (e.g., 'components' for component tokens) */
8
+ prefix?: string;
9
+ /** Fallback path to try if primary path fails */
10
+ fallbackPath?: string;
11
+ }
12
+ /**
13
+ * Unified token path resolver.
14
+ * Gets a value from tokens using a dot-separated path with optional prefix and fallback.
15
+ */
16
+ export declare function resolveTokenPath(tokens: ThemeTokens, path: string, options?: ResolveTokenOptions): string | undefined;
17
+ /**
18
+ * Gets a nested value from an object using a dot-separated path.
19
+ * Convenience wrapper around resolveTokenPath.
20
+ */
21
+ export declare function getTokenValue(tokens: ThemeTokens, path: string): string | undefined;
22
+ /**
23
+ * Gets a component token value with fallback.
24
+ * Convenience wrapper around resolveTokenPath for component tokens.
25
+ */
26
+ export declare function getComponentTokenValue(tokens: ThemeTokens, componentPath: string, fallbackPath: string): string;
27
+ /**
28
+ * Converts a hex color to an HSL string.
29
+ */
30
+ export declare function hexToHslString(hex: string): string;
31
+ /**
32
+ * Escapes a string for use in CSS selectors.
33
+ * Fallback implements CSS.escape algorithm per CSSOM spec when native is unavailable.
34
+ */
35
+ export declare function escapeCssId(id: string): string;
36
+ /**
37
+ * Validates and sanitizes a CSS color value.
38
+ * Returns the value if valid, or a transparent fallback if invalid.
39
+ */
40
+ export declare function sanitizeCssColor(value: string | undefined): string;
41
+ /**
42
+ * Generates CSS variable declarations from a mapping array.
43
+ */
44
+ export declare function generateVariables(tokens: ThemeTokens, mappings: CSSVariableMapping[]): string[];
45
+ /**
46
+ * Generates HSL component variables (h, s%, l%).
47
+ */
48
+ export declare function generateHSLComponents(tokens: ThemeTokens, mapping: HSLVariableMapping): string[];
49
+ /**
50
+ * Generates HSL color variables.
51
+ */
52
+ export declare function generateHSLColors(tokens: ThemeTokens, mappings: HSLColorMapping[]): string[];
53
+ /**
54
+ * Generates component token variables with fallbacks.
55
+ */
56
+ export declare function generateComponentVariables(tokens: ThemeTokens, mappings: ComponentTokenMapping[]): string[];
57
+ export {};
58
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/themes/css/helpers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,UAAU,mBAAmB;IAC3B,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,GAAG,SAAS,CAqBpB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAU9C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CA4BlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAQ/F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAUhG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAM5F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,qBAAqB,EAAE,GAChC,MAAM,EAAE,CA4BV"}
@@ -0,0 +1,181 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Helper functions for CSS generation
3
+ import { hexToHsl } from '../bulma.js';
4
+ /**
5
+ * Traverses an object using a dot-separated path.
6
+ * Internal helper used by all token resolution functions.
7
+ */
8
+ function traversePath(obj, path) {
9
+ const parts = path.split('.');
10
+ let current = obj;
11
+ for (const part of parts) {
12
+ if (current === null || current === undefined || typeof current !== 'object') {
13
+ return undefined;
14
+ }
15
+ // Safe: path is from hardcoded TOKEN_MAPPINGS, not user input
16
+ // nosemgrep: prototype-pollution-loop
17
+ current = current[part];
18
+ }
19
+ return current;
20
+ }
21
+ /**
22
+ * Unified token path resolver.
23
+ * Gets a value from tokens using a dot-separated path with optional prefix and fallback.
24
+ */
25
+ export function resolveTokenPath(tokens, path, options) {
26
+ const { prefix, fallbackPath } = options ?? {};
27
+ // Build full path with optional prefix
28
+ const fullPath = prefix ? `${prefix}.${path}` : path;
29
+ // Try primary path
30
+ const value = traversePath(tokens, fullPath);
31
+ if (typeof value === 'string') {
32
+ return value;
33
+ }
34
+ // Try fallback path if provided
35
+ if (fallbackPath) {
36
+ const fallbackValue = traversePath(tokens, fallbackPath);
37
+ if (typeof fallbackValue === 'string') {
38
+ return fallbackValue;
39
+ }
40
+ }
41
+ return undefined;
42
+ }
43
+ /**
44
+ * Gets a nested value from an object using a dot-separated path.
45
+ * Convenience wrapper around resolveTokenPath.
46
+ */
47
+ export function getTokenValue(tokens, path) {
48
+ return resolveTokenPath(tokens, path);
49
+ }
50
+ /**
51
+ * Gets a component token value with fallback.
52
+ * Convenience wrapper around resolveTokenPath for component tokens.
53
+ */
54
+ export function getComponentTokenValue(tokens, componentPath, fallbackPath) {
55
+ if (!tokens.components) {
56
+ return fallbackPath ? (resolveTokenPath(tokens, fallbackPath) ?? '') : '';
57
+ }
58
+ return (resolveTokenPath(tokens, componentPath, { prefix: 'components', fallbackPath }) ?? '');
59
+ }
60
+ /**
61
+ * Converts a hex color to an HSL string.
62
+ */
63
+ export function hexToHslString(hex) {
64
+ const hsl = hexToHsl(hex);
65
+ return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;
66
+ }
67
+ /**
68
+ * Escapes a string for use in CSS selectors.
69
+ * Fallback implements CSS.escape algorithm per CSSOM spec when native is unavailable.
70
+ */
71
+ export function escapeCssId(id) {
72
+ if (typeof CSS !== 'undefined' && CSS.escape) {
73
+ return CSS.escape(id);
74
+ }
75
+ // Fallback: escape per CSSOM spec (simplified for valid identifier chars)
76
+ return id.replace(/[\0-\x1f\x7f]|^-?[0-9]|[^a-zA-Z0-9_-]/g, (char) => {
77
+ if (char === '\0')
78
+ return '\uFFFD';
79
+ const code = char.charCodeAt(0);
80
+ return '\\' + code.toString(16) + ' ';
81
+ });
82
+ }
83
+ /**
84
+ * Validates and sanitizes a CSS color value.
85
+ * Returns the value if valid, or a transparent fallback if invalid.
86
+ */
87
+ export function sanitizeCssColor(value) {
88
+ if (!value || typeof value !== 'string') {
89
+ return 'transparent';
90
+ }
91
+ // Allow hex colors, rgb/rgba/hsl/hsla functions, and named colors
92
+ const trimmed = value.trim();
93
+ // Hex color validation
94
+ if (/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(trimmed)) {
95
+ return trimmed;
96
+ }
97
+ // RGB/RGBA/HSL/HSLA function validation
98
+ if (/^(rgb|rgba|hsl|hsla)\([^)]+\)$/i.test(trimmed)) {
99
+ // Additional check: no semicolons or braces in the value
100
+ if (!/[;{}]/.test(trimmed)) {
101
+ return trimmed;
102
+ }
103
+ }
104
+ // Named color validation (common named colors only)
105
+ const namedColors = new Set([
106
+ 'transparent', 'inherit', 'currentColor', 'initial', 'unset',
107
+ 'black', 'white', 'red', 'green', 'blue', 'yellow', 'orange',
108
+ 'purple', 'gray', 'grey', 'pink', 'brown', 'cyan', 'magenta',
109
+ ]);
110
+ if (namedColors.has(trimmed.toLowerCase())) {
111
+ return trimmed;
112
+ }
113
+ // Default fallback for invalid values
114
+ return 'transparent';
115
+ }
116
+ /**
117
+ * Generates CSS variable declarations from a mapping array.
118
+ */
119
+ export function generateVariables(tokens, mappings) {
120
+ return mappings.map((mapping) => {
121
+ let value = getTokenValue(tokens, mapping.tokenPath);
122
+ if (value === undefined && mapping.fallbackPath) {
123
+ value = getTokenValue(tokens, mapping.fallbackPath);
124
+ }
125
+ return ` ${mapping.cssVar}: ${value ?? ''};`;
126
+ });
127
+ }
128
+ /**
129
+ * Generates HSL component variables (h, s%, l%).
130
+ */
131
+ export function generateHSLComponents(tokens, mapping) {
132
+ const hex = getTokenValue(tokens, mapping.tokenPath);
133
+ if (!hex)
134
+ return [];
135
+ const hsl = hexToHsl(hex);
136
+ return [
137
+ ` ${mapping.hVar}: ${hsl.h};`,
138
+ ` ${mapping.sVar}: ${hsl.s}%;`,
139
+ ` ${mapping.lVar}: ${hsl.l}%;`,
140
+ ];
141
+ }
142
+ /**
143
+ * Generates HSL color variables.
144
+ */
145
+ export function generateHSLColors(tokens, mappings) {
146
+ return mappings.map((mapping) => {
147
+ const hex = getTokenValue(tokens, mapping.tokenPath);
148
+ if (!hex)
149
+ return ` ${mapping.cssVar}: ;`;
150
+ return ` ${mapping.cssVar}: ${hexToHslString(hex)};`;
151
+ });
152
+ }
153
+ /**
154
+ * Generates component token variables with fallbacks.
155
+ */
156
+ export function generateComponentVariables(tokens, mappings) {
157
+ if (!tokens.components)
158
+ return [];
159
+ const lines = [];
160
+ let currentComponent = '';
161
+ for (const mapping of mappings) {
162
+ const component = mapping.componentPath.split('.')[0] ?? '';
163
+ // Add comment for new component section
164
+ if (component && component !== currentComponent) {
165
+ const componentName = component.charAt(0).toUpperCase() + component.slice(1);
166
+ lines.push(` /* ${componentName} component tokens */`);
167
+ currentComponent = component;
168
+ }
169
+ // Special case for modal.bg which has a non-token fallback
170
+ let value;
171
+ if (mapping.componentPath === 'modal.bg' && !mapping.fallbackPath) {
172
+ value = getComponentTokenValue(tokens, mapping.componentPath, '') || 'rgba(10, 10, 10, 0.86)';
173
+ }
174
+ else {
175
+ value = getComponentTokenValue(tokens, mapping.componentPath, mapping.fallbackPath);
176
+ }
177
+ lines.push(` ${mapping.cssVar}: ${value};`);
178
+ }
179
+ return lines;
180
+ }
181
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/themes/css/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export * from './types.js';
2
+ import type { ThemeFlavor } from '../types.js';
3
+ /**
4
+ * Generate CSS for a specific flavor.
5
+ */
6
+ export declare function cssForFlavor(flavor: ThemeFlavor): string;
7
+ /**
8
+ * Generate global CSS overrides that apply theme variables.
9
+ */
10
+ export declare function cssGlobalOverrides(): string;
11
+ export { generateSyntaxHighlightingCSS } from './syntax-generator.js';
12
+ export { generateThemeCSSVariables } from './bulma-generator.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/themes/css/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAOxD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAGD,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC"}