@aziontech/theme 1.12.0 → 2.0.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 (76) hide show
  1. package/README.md +1 -1
  2. package/package.json +19 -21
  3. package/src/scripts/build-tokens.mjs +391 -0
  4. package/src/scripts/compile-primitives.js +165 -0
  5. package/src/scripts/compile-theme.js +117 -0
  6. package/src/{tokens/build → scripts}/css-vars.js +10 -9
  7. package/src/{tokens/build → scripts}/resolve.js +2 -0
  8. package/src/tests/primitives.html +293 -0
  9. package/src/tests/theme.html +310 -0
  10. package/src/tests/tokens.html +84 -0
  11. package/src/tokens/README.md +306 -272
  12. package/src/tokens/index.js +4 -12
  13. package/src/tokens/primitives/animations/animate.js +8 -0
  14. package/src/tokens/primitives/animations/ease.js +7 -0
  15. package/src/tokens/primitives/border-widths.js +9 -0
  16. package/src/tokens/primitives/breakpoints.js +9 -0
  17. package/src/tokens/primitives/colors/alpha.js +104 -0
  18. package/src/tokens/primitives/colors/brand.js +40 -0
  19. package/src/tokens/primitives/colors/colors.js +142 -0
  20. package/src/tokens/primitives/effects/blur.js +11 -0
  21. package/src/tokens/primitives/effects/drop-shadow.js +10 -0
  22. package/src/tokens/primitives/effects/inset-shadow.js +7 -0
  23. package/src/tokens/primitives/effects/opacity.js +8 -0
  24. package/src/tokens/primitives/effects/perspective.js +9 -0
  25. package/src/tokens/primitives/effects/shadow.js +11 -0
  26. package/src/tokens/primitives/ring-offset.js +5 -0
  27. package/src/tokens/primitives/shape/aspect-video.js +3 -0
  28. package/src/tokens/primitives/shape/container.js +17 -0
  29. package/src/tokens/primitives/shape/height.js +32 -0
  30. package/src/tokens/primitives/shape/radius.js +13 -0
  31. package/src/tokens/primitives/shape/shape.js +12 -0
  32. package/src/tokens/primitives/shape/size.js +32 -0
  33. package/src/tokens/primitives/shape/spacing.js +33 -0
  34. package/src/tokens/primitives/shape/width.js +19 -0
  35. package/src/tokens/primitives/typography/font-family.js +7 -0
  36. package/src/tokens/primitives/typography/font-size.js +30 -0
  37. package/src/tokens/primitives/typography/font-weight.js +13 -0
  38. package/src/tokens/primitives/typography/leading.js +9 -0
  39. package/src/tokens/primitives/typography/line-height.js +13 -0
  40. package/src/tokens/primitives/typography/tracking.js +10 -0
  41. package/src/{tailwind/semantic-animations-plugin.js → tokens/semantic/animations.js} +3 -21
  42. package/src/tokens/semantic/colors.js +138 -0
  43. package/src/tokens/semantic/containers.data.js +18 -0
  44. package/src/tokens/semantic/containers.js +70 -0
  45. package/src/tokens/semantic/spacings.data.js +18 -0
  46. package/src/tokens/semantic/spacings.js +163 -0
  47. package/src/tokens/semantic/texts.data.js +103 -0
  48. package/src/{tailwind/semantic-texts-plugin.js → tokens/semantic/texts.js} +91 -70
  49. package/src/tokens/theme/accent.js +18 -0
  50. package/src/tokens/theme/background.js +32 -0
  51. package/src/tokens/theme/border.js +18 -0
  52. package/src/tokens/theme/feedback/danger.js +16 -0
  53. package/src/tokens/theme/feedback/info.js +16 -0
  54. package/src/tokens/theme/feedback/success.js +16 -0
  55. package/src/tokens/theme/feedback/warning.js +16 -0
  56. package/src/tokens/theme/primary.js +18 -0
  57. package/src/tokens/theme/ring.js +12 -0
  58. package/src/tokens/theme/secondary.js +18 -0
  59. package/src/tokens/theme/surfaces.js +23 -0
  60. package/src/tokens/theme/text.js +18 -0
  61. package/src/tokens/theme.js +32 -0
  62. package/colors-brand.js +0 -24
  63. package/src/tailwind/semantic-colors-plugin.js +0 -91
  64. package/src/tailwind/semantic-spacing-plugin.js +0 -151
  65. package/src/tailwind/tailwind-theme.js +0 -54
  66. package/src/tokens/build/preset.js +0 -62
  67. package/src/tokens/build/tailwind-flat-colors.js +0 -75
  68. package/src/tokens/build/tailwind-helper.js +0 -12
  69. package/src/tokens/build/tailwind-plugin.js +0 -175
  70. package/src/tokens/colors-brand.js +0 -24
  71. package/src/tokens/primitives/brand.js +0 -69
  72. package/src/tokens/primitives/colors.js +0 -144
  73. package/src/tokens/semantic/backgrounds.js +0 -46
  74. package/src/tokens/semantic/borders.js +0 -44
  75. package/src/tokens/semantic/text.js +0 -48
  76. /package/src/{tokens/build → scripts}/refs.js +0 -0
@@ -1,91 +0,0 @@
1
- /**
2
- * Tailwind plugin to expose semantic colors at root level.
3
- *
4
- * This allows using classes like `text-muted` instead of `text-text-muted`.
5
- *
6
- * Usage in tailwind.config.js:
7
- * ```javascript
8
- * import { theme } from '@aziontech/theme/tailwind/tailwind-theme.js';
9
- * import semanticColors from '@aziontech/theme/tailwind/semantic-colors-plugin';
10
- *
11
- * export default {
12
- * theme,
13
- * plugins: [semanticColors()],
14
- * };
15
- * ```
16
- */
17
-
18
- // Lazy-require to avoid hard dependency for consumers
19
- const plugin = (() => {
20
- try {
21
- return require('tailwindcss/plugin');
22
- } catch {
23
- return (handler) => handler;
24
- }
25
- })();
26
-
27
- /**
28
- * Generate semantic color utilities
29
- * @returns {import('tailwindcss/plugin').Plugin}
30
- */
31
- export const semanticColors = () => {
32
- return plugin(({ addUtilities }) => {
33
- const textColors = {
34
- '.text-default': { color: 'var(--text-default)' },
35
- '.text-muted': { color: 'var(--text-muted)' },
36
- '.text-link': { color: 'var(--text-link)' },
37
- '.text-linkHover': { color: 'var(--text-linkHover)' },
38
- '.text-code': { color: 'var(--text-code)' },
39
- '.text-primary': { color: 'var(--text-primary)' },
40
- '.text-primaryHover': { color: 'var(--text-primaryHover)' },
41
- '.text-accent': { color: 'var(--text-accent)' },
42
- '.text-accentHover': { color: 'var(--text-accentHover)' },
43
- '.text-danger': { color: 'var(--text-danger)' },
44
- '.text-dangerHover': { color: 'var(--text-dangerHover)' },
45
- '.text-warning': { color: 'var(--text-warning)' },
46
- '.text-warningHover': { color: 'var(--text-warningHover)' },
47
- '.text-success': { color: 'var(--text-success)' },
48
- '.text-successHover': { color: 'var(--text-successHover)' },
49
- };
50
-
51
- const bgColors = {
52
- '.bg-surfaceRaised': { 'background-color': 'var(--background-surfaceRaised)' },
53
- '.bg-surfaceOverlay': { 'background-color': 'var(--background-surfaceOverlay)' },
54
- '.bg-surface': { 'background-color': 'var(--background-surface)' },
55
- '.bg-canvas': { 'background-color': 'var(--background-canvas)' },
56
- '.bg-danger': { 'background-color': 'var(--background-danger)' },
57
- '.bg-dangerHover': { 'background-color': 'var(--background-dangerHover)' },
58
- '.bg-warning': { 'background-color': 'var(--background-warning)' },
59
- '.bg-warningHover': { 'background-color': 'var(--background-warningHover)' },
60
- '.bg-success': { 'background-color': 'var(--background-success)' },
61
- '.bg-successHover': { 'background-color': 'var(--background-successHover)' },
62
- '.bg-backdrop': { 'background-color': 'var(--background-backdrop)' },
63
- '.bg-primary': { 'background-color': 'var(--background-primary)' },
64
- '.bg-primaryHover': { 'background-color': 'var(--background-primaryHover)' },
65
- '.bg-primary-mask': { 'background-color': 'var(--background-primaryMask)' },
66
- };
67
-
68
- const borderColors = {
69
- '.border-default': { 'border-color': 'var(--border-default)' },
70
- '.border-strong': { 'border-color': 'var(--border-strong)' },
71
- '.border-subtle': { 'border-color': 'var(--border-subtle)' },
72
- '.border-warning': { 'border-color': 'var(--border-warning)' },
73
- '.border-warningHover': { 'border-color': 'var(--border-warningHover)' },
74
- '.border-success': { 'border-color': 'var(--border-success)' },
75
- '.border-successHover': { 'border-color': 'var(--border-successHover)' },
76
- '.border-danger': { 'border-color': 'var(--border-danger)' },
77
- '.border-dangerHover': { 'border-color': 'var(--border-dangerHover)' },
78
- '.border-primary': { 'border-color': 'var(--border-primary)' },
79
- '.border-primaryHover': { 'border-color': 'var(--border-primaryHover)' },
80
- '.border-accent': { 'border-color': 'var(--border-accent)' },
81
- '.border-accentHover': { 'border-color': 'var(--border-accentHover)' },
82
- };
83
-
84
- const variants = ['responsive', 'hover', 'dark', 'before', 'after', 'focus', 'active', 'disabled'];
85
- addUtilities(textColors, variants);
86
- addUtilities(bgColors, variants);
87
- addUtilities(borderColors, variants);
88
- });
89
- };
90
-
91
- export default semanticColors;
@@ -1,151 +0,0 @@
1
- /**
2
- * Tailwind plugin to expose semantic spacing styles.
3
- *
4
- * This adds spacing components for container, padding, and gap utilities.
5
- *
6
- * Usage in tailwind.config.js:
7
- * ```javascript
8
- * import { theme } from '@aziontech/theme/tailwind/tailwind-theme.js';
9
- * import semanticSpacing from '@aziontech/theme/tailwind/semantic-spacing-plugin';
10
- *
11
- * export default {
12
- * theme,
13
- * plugins: [semanticSpacing()],
14
- * };
15
- * ```
16
- */
17
-
18
- // Lazy-require to avoid hard dependency for consumers
19
- const plugin = (() => {
20
- try {
21
- return require('tailwindcss/plugin');
22
- } catch {
23
- return (handler) => handler;
24
- }
25
- })();
26
-
27
- /**
28
- * Generate semantic spacing style components
29
- * @returns {import('tailwindcss/plugin').Plugin}
30
- */
31
- export const semanticSpacing = () => {
32
- return plugin(({ addComponents, theme }) => {
33
- const spacing = {
34
- // Container
35
- '.max-container-width': {
36
- maxWidth: '1280px',
37
- },
38
- '.px-container': {
39
- paddingLeft: theme('spacing.0'),
40
- paddingRight: theme('spacing.0'),
41
- },
42
- '.py-container': {
43
- paddingTop: theme('spacing.48'),
44
- paddingBottom: theme('spacing.48'),
45
- },
46
-
47
- // Padding elements
48
- '.p-elements-confortable': {
49
- padding: theme('spacing.24'),
50
- },
51
- '.p-elements-base': {
52
- padding: theme('spacing.12'),
53
- },
54
- '.p-elements-compact': {
55
- padding: theme('spacing.6'),
56
- },
57
-
58
- // Gap elements
59
- '.gap-elements-confortable': {
60
- gap: theme('spacing.24'),
61
- },
62
- '.gap-elements-base': {
63
- gap: theme('spacing.12'),
64
- },
65
- '.gap-elements-compact': {
66
- gap: theme('spacing.6'),
67
- },
68
-
69
- // Gap sections
70
- '.gap-sections': {
71
- gap: theme('spacing.48'),
72
- },
73
- };
74
-
75
- const responsiveSpacing = {
76
- [`@media (max-width: ${theme('screens.md', '768px')})`]: {
77
- '.max-container-width': {
78
- maxWidth: '1024px',
79
- },
80
- '.px-container': {
81
- paddingLeft: theme('spacing.10'),
82
- paddingRight: theme('spacing.10'),
83
- },
84
- '.py-container': {
85
- paddingTop: theme('spacing.32'),
86
- paddingBottom: theme('spacing.32'),
87
- },
88
- '.p-elements-confortable': {
89
- padding: theme('spacing.16'),
90
- },
91
- '.p-elements-base': {
92
- padding: theme('spacing.8'),
93
- },
94
- '.p-elements-compact': {
95
- padding: theme('spacing.5'),
96
- },
97
- '.gap-elements-confortable': {
98
- gap: theme('spacing.16'),
99
- },
100
- '.gap-elements-base': {
101
- gap: theme('spacing.8'),
102
- },
103
- '.gap-elements-compact': {
104
- gap: theme('spacing.6'),
105
- },
106
- '.gap-sections': {
107
- gap: theme('spacing.40'),
108
- },
109
- },
110
- [`@media (max-width: ${theme('screens.sm', '640px')})`]: {
111
- '.max-container-width': {
112
- maxWidth: theme('screens.lg'),
113
- },
114
- '.px-container': {
115
- paddingLeft: theme('spacing.4'),
116
- paddingRight: theme('spacing.4'),
117
- },
118
- '.py-container': {
119
- paddingTop: theme('spacing.16'),
120
- paddingBottom: theme('spacing.16'),
121
- },
122
- '.p-elements-confortable': {
123
- padding: theme('spacing.8'),
124
- },
125
- '.p-elements-base': {
126
- padding: theme('spacing.6'),
127
- },
128
- '.p-elements-compact': {
129
- padding: theme('spacing.4'),
130
- },
131
- '.gap-elements-confortable': {
132
- gap: theme('spacing.8'),
133
- },
134
- '.gap-elements-base': {
135
- gap: theme('spacing.6'),
136
- },
137
- '.gap-elements-compact': {
138
- gap: theme('spacing.4'),
139
- },
140
- '.gap-sections': {
141
- gap: theme('spacing.20'),
142
- },
143
- },
144
- };
145
-
146
- addComponents(spacing);
147
- addComponents(responsiveSpacing);
148
- });
149
- };
150
-
151
- export default semanticSpacing;
@@ -1,54 +0,0 @@
1
- /**
2
- * Tailwind CSS Configuration for @aziontech/theme
3
- *
4
- * This file exports a Tailwind config with all design tokens from the token system.
5
- * Uses CSS variables for semantic tokens, enabling automatic theme switching.
6
- *
7
- * Usage:
8
- * ```javascript
9
- * // tailwind.config.js
10
- * import { theme } from '@aziontech/theme/tailwind/tailwind-theme.js';
11
- * import flatColorsPlugin from '@aziontech/theme/tailwind/tailwind-flat-colors.js';
12
- *
13
- * export default {
14
- * theme,
15
- * plugins: [flatColorsPlugin],
16
- * };
17
- * ```
18
- *
19
- * For theme switching to work, ensure CSS variables are injected:
20
- * ```javascript
21
- * import { injectCssVars } from '@aziontech/theme/tokens';
22
- * injectCssVars();
23
- * ```
24
- */
25
-
26
- import { primitives } from '../tokens/primitives/colors.js';
27
- import { brandPrimitives, surfacePrimitives } from '../tokens/primitives/brand.js';
28
-
29
- export const theme = {
30
- extend: {
31
- colors: {
32
- base: {
33
- white: primitives.base.white,
34
- black: primitives.base.black,
35
- },
36
- brand: {
37
- primary: brandPrimitives.primary,
38
- accent: brandPrimitives.accent,
39
- },
40
- surface: surfacePrimitives.surface,
41
- orange: primitives.orange,
42
- violet: primitives.violet,
43
- neutral: primitives.neutral,
44
- gray: primitives.gray,
45
- slate: primitives.slate,
46
- red: primitives.red,
47
- green: primitives.green,
48
- yellow: primitives.yellow,
49
- blue: primitives.blue,
50
- },
51
- },
52
- };
53
-
54
- export default { theme };
@@ -1,62 +0,0 @@
1
- /**
2
- * Tailwind preset for Azion tokens.
3
- */
4
-
5
- export const preset = {
6
- theme: {
7
- extend: {
8
- colors: {
9
- text: {
10
- default: 'var(--text-default)',
11
- muted: 'var(--text-muted)',
12
- link: 'var(--text-link)',
13
- linkHover: 'var(--text-linkHover)',
14
- code: 'var(--text-code)',
15
- primary: 'var(--text-primary)',
16
- primaryHover: 'var(--text-primaryHover)',
17
- accent: 'var(--text-accent)',
18
- accentHover: 'var(--text-accentHover)',
19
- danger: 'var(--text-danger)',
20
- dangerHover: 'var(--text-dangerHover)',
21
- warning: 'var(--text-warning)',
22
- warningHover: 'var(--text-warningHover)',
23
- success: 'var(--text-success)',
24
- successHover: 'var(--text-successHover)',
25
- },
26
- background: {
27
- surfaceRaised: 'var(--background-surfaceRaised)',
28
- surfaceOverlay: 'var(--background-surfaceOverlay)',
29
- surface: 'var(--background-surface)',
30
- canvas: 'var(--background-canvas)',
31
- danger: 'var(--background-danger)',
32
- dangerHover: 'var(--background-dangerHover)',
33
- warning: 'var(--background-warning)',
34
- warningHover: 'var(--background-warningHover)',
35
- success: 'var(--background-success)',
36
- successHover: 'var(--background-successHover)',
37
- backdrop: 'var(--background-backdrop)',
38
- primary: 'var(--background-primary)',
39
- primaryHover: 'var(--background-primaryHover)',
40
- },
41
- border: {
42
- default: 'var(--border-default)',
43
- strong: 'var(--border-strong)',
44
- subtle: 'var(--border-subtle)',
45
- warning: 'var(--border-warning)',
46
- warningHover: 'var(--border-warningHover)',
47
- success: 'var(--border-success)',
48
- successHover: 'var(--border-successHover)',
49
- danger: 'var(--border-danger)',
50
- dangerHover: 'var(--border-dangerHover)',
51
- primary: 'var(--border-primary)',
52
- primaryHover: 'var(--border-primaryHover)',
53
- accent: 'var(--border-accent)',
54
- accentHover: 'var(--border-accentHover)',
55
- },
56
- },
57
- },
58
- },
59
- darkMode: ['class', '.dark', '.azion.azion-dark'],
60
- };
61
-
62
- export default preset;
@@ -1,75 +0,0 @@
1
- /**
2
- * Tailwind plugin to expose semantic colors at root level.
3
- *
4
- * This allows using classes like `text-muted` instead of `text-text-muted`.
5
- *
6
- * Usage in tailwind.config.js:
7
- * ```javascript
8
- * import { flatColorsPlugin } from '@aziontech/theme/tokens/build/tailwind-flat-colors.js';
9
- *
10
- * export default {
11
- * plugins: [flatColorsPlugin],
12
- * };
13
- * ```
14
- */
15
-
16
- import plugin from 'tailwindcss/plugin.js';
17
-
18
- export const flatColorsPlugin = plugin(({ addUtilities, addBase, theme }) => {
19
- // Add semantic text colors as root-level utilities
20
- const textColors = {
21
- '.text-default': { color: 'var(--text-default)' },
22
- '.text-muted': { color: 'var(--text-muted)' },
23
- '.text-link': { color: 'var(--text-link)' },
24
- '.text-linkHover': { color: 'var(--text-linkHover)' },
25
- '.text-code': { color: 'var(--text-code)' },
26
- '.text-primary': { color: 'var(--text-primary)' },
27
- '.text-primaryHover': { color: 'var(--text-primaryHover)' },
28
- '.text-accent': { color: 'var(--text-accent)' },
29
- '.text-accentHover': { color: 'var(--text-accentHover)' },
30
- '.text-danger': { color: 'var(--text-danger)' },
31
- '.text-dangerHover': { color: 'var(--text-dangerHover)' },
32
- '.text-warning': { color: 'var(--text-warning)' },
33
- '.text-warningHover': { color: 'var(--text-warningHover)' },
34
- '.text-success': { color: 'var(--text-success)' },
35
- '.text-successHover': { color: 'var(--text-successHover)' },
36
- };
37
-
38
- const bgColors = {
39
- '.bg-surfaceRaised': { 'background-color': 'var(--background-surfaceRaised)' },
40
- '.bg-surfaceOverlay': { 'background-color': 'var(--background-surfaceOverlay)' },
41
- '.bg-surface': { 'background-color': 'var(--background-surface)' },
42
- '.bg-canvas': { 'background-color': 'var(--background-canvas)' },
43
- '.bg-danger': { 'background-color': 'var(--background-danger)' },
44
- '.bg-dangerHover': { 'background-color': 'var(--background-dangerHover)' },
45
- '.bg-warning': { 'background-color': 'var(--background-warning)' },
46
- '.bg-warningHover': { 'background-color': 'var(--background-warningHover)' },
47
- '.bg-success': { 'background-color': 'var(--background-success)' },
48
- '.bg-successHover': { 'background-color': 'var(--background-successHover)' },
49
- '.bg-backdrop': { 'background-color': 'var(--background-backdrop)' },
50
- '.bg-primary': { 'background-color': 'var(--background-primary)' },
51
- '.bg-primaryHover': { 'background-color': 'var(--background-primaryHover)' },
52
- };
53
-
54
- const borderColors = {
55
- '.border-default': { 'border-color': 'var(--border-default)' },
56
- '.border-strong': { 'border-color': 'var(--border-strong)' },
57
- '.border-subtle': { 'border-color': 'var(--border-subtle)' },
58
- '.border-warning': { 'border-color': 'var(--border-warning)' },
59
- '.border-warningHover': { 'border-color': 'var(--border-warningHover)' },
60
- '.border-success': { 'border-color': 'var(--border-success)' },
61
- '.border-successHover': { 'border-color': 'var(--border-successHover)' },
62
- '.border-danger': { 'border-color': 'var(--border-danger)' },
63
- '.border-dangerHover': { 'border-color': 'var(--border-dangerHover)' },
64
- '.border-primary': { 'border-color': 'var(--border-primary)' },
65
- '.border-primaryHover': { 'border-color': 'var(--border-primaryHover)' },
66
- '.border-accent': { 'border-color': 'var(--border-accent)' },
67
- '.border-accentHover': { 'border-color': 'var(--border-accentHover)' },
68
- };
69
-
70
- addUtilities(textColors, ['responsive', 'hover', 'dark']);
71
- addUtilities(bgColors, ['responsive', 'hover', 'dark']);
72
- addUtilities(borderColors, ['responsive', 'hover', 'dark']);
73
- });
74
-
75
- export default flatColorsPlugin;
@@ -1,12 +0,0 @@
1
- /**
2
- * Tailwind helper for merging presets.
3
- */
4
-
5
- import { preset } from './preset.js';
6
-
7
- export const createTailwindConfig = (user) => ({
8
- ...user,
9
- presets: [...(user.presets ?? []), preset],
10
- });
11
-
12
- export default createTailwindConfig;
@@ -1,175 +0,0 @@
1
- /**
2
- * Tailwind plugin to generate static light/dark utilities from semantic tokens.
3
- *
4
- * This plugin emits concrete values for both light and dark themes,
5
- * supporting:
6
- * - Background color utilities
7
- * - Text color utilities
8
- * - Border color utilities
9
- * - Both dark selectors (.dark and .azion.azion-dark)
10
- */
11
-
12
- // Lazy-require to avoid hard dependency for consumers
13
- const plugin = (() => {
14
- try {
15
- return require('tailwindcss/plugin');
16
- } catch {
17
- return (handler) => handler;
18
- }
19
- })();
20
-
21
- import { primitives } from '../primitives/colors.js';
22
- import { surfacePrimitives, brandPrimitives } from '../primitives/brand.js';
23
- import { textSemantic } from '../semantic/text.js';
24
- import { backgroundSemantic } from '../semantic/backgrounds.js';
25
- import { borderSemantic } from '../semantic/borders.js';
26
- import { resolveRefsToCssVars } from './resolve.js';
27
-
28
- const kebab = (value) =>
29
- value
30
- .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
31
- .replace(/_/g, '-')
32
- .toLowerCase();
33
-
34
- const stripPrefix = (value, prefix) =>
35
- value.startsWith(prefix) ? value.slice(prefix.length) : value;
36
-
37
- const resolveTokenMaps = () =>
38
- resolveRefsToCssVars({
39
- primitives,
40
- surfacePrimitives,
41
- brandPrimitives,
42
- textSemantic,
43
- backgroundSemantic,
44
- borderSemantic,
45
- });
46
-
47
- const getValue = (map, key) => map[`--${key}`];
48
-
49
- const addUtility = (
50
- utilities,
51
- darkUtilities,
52
- selectors,
53
- className,
54
- property,
55
- lightValue,
56
- darkValue
57
- ) => {
58
- if (lightValue) {
59
- utilities[className] = { [property]: lightValue };
60
- }
61
- if (darkValue) {
62
- selectors.forEach((selector) => {
63
- darkUtilities[`${selector} ${className}`] = { [property]: darkValue };
64
- });
65
- }
66
- };
67
-
68
- /**
69
- * Generate semantic token utilities for light and dark modes
70
- *
71
- * Usage:
72
- * - Background: bg-layer1, bg-layer2, bg-base, bg-canvas, etc.
73
- * - Text: text-base, text-muted, text-link, text-primary, etc.
74
- * - Border: border-base, border-warning, border-danger, border-primary, etc.
75
- */
76
- export const tokenUtilities = (options = {}) => {
77
- const { light, dark } = resolveTokenMaps();
78
- const darkSelectors = [options.darkSelector ?? '.dark', ...(options.extraDarkSelectors ?? ['.azion.azion-dark'])];
79
-
80
- const utilities = {};
81
- const darkUtilities = {};
82
-
83
- // Background color utilities
84
- Object.keys(backgroundSemantic.light).forEach((key) => {
85
- const suffix = kebab(stripPrefix(key, 'bg'));
86
- const className = `.bg-${suffix}`;
87
- addUtility(
88
- utilities,
89
- darkUtilities,
90
- darkSelectors,
91
- className,
92
- 'backgroundColor',
93
- getValue(light, `background-${key}`),
94
- getValue(dark, `background-${key}`)
95
- );
96
- });
97
-
98
- // Text color utilities
99
- const hasAccent = 'textColorAccent' in textSemantic.light;
100
- const accentKey = hasAccent ? 'textColorAccent' : 'textColorSecondary';
101
- const accentHoverKey = hasAccent ? 'textColorAccentHover' : 'textColorSecondaryHover';
102
-
103
- const textMap = {
104
- base: 'textColorBase',
105
- muted: 'textColorMuted',
106
- link: 'textColorLink',
107
- code: 'textColorCode',
108
- 'muted-hover': 'textColorMutedHover',
109
- 'link-hover': 'textColorLinkHover',
110
- 'base-hover': 'textColorBaseHover',
111
- primary: 'textColorPrimary',
112
- 'primary-hover': 'textColorPrimaryHover',
113
- accent: accentKey,
114
- 'accent-hover': accentHoverKey,
115
- secondary: 'textColorSecondary',
116
- 'secondary-hover': 'textColorSecondaryHover',
117
- danger: 'textDanger',
118
- 'danger-hover': 'textDangerHover',
119
- warning: 'textWarning',
120
- 'warning-hover': 'textWarningHover',
121
- success: 'textSuccess',
122
- 'success-hover': 'textSuccessHover',
123
- };
124
-
125
- Object.entries(textMap).forEach(([name, key]) => {
126
- const className = `.text-${name}`;
127
- addUtility(
128
- utilities,
129
- darkUtilities,
130
- darkSelectors,
131
- className,
132
- 'color',
133
- getValue(light, `text-${key}`),
134
- getValue(dark, `text-${key}`)
135
- );
136
- });
137
-
138
- // Border color utilities
139
- const borderMap = {
140
- base: 'borderBase',
141
- 'base-hover': 'borderBaseHover',
142
- warning: 'borderWarning',
143
- success: 'borderSuccess',
144
- danger: 'borderDanger',
145
- primary: 'borderPrimary',
146
- 'primary-hover': 'borderPrimaryHover',
147
- secondary: 'borderSecondary',
148
- 'secondary-hover': 'borderSecondaryHover',
149
- accent: 'borderAccent',
150
- 'accent-hover': 'borderAccentHover',
151
- 'warning-hover': 'borderWarningHover',
152
- 'success-hover': 'borderSuccessHover',
153
- 'danger-hover': 'borderDangerHover',
154
- };
155
-
156
- Object.entries(borderMap).forEach(([name, key]) => {
157
- const className = `.border-${name}`;
158
- addUtility(
159
- utilities,
160
- darkUtilities,
161
- darkSelectors,
162
- className,
163
- 'borderColor',
164
- getValue(light, `border-${key}`),
165
- getValue(dark, `border-${key}`)
166
- );
167
- });
168
-
169
- return plugin(({ addUtilities }) => {
170
- addUtilities(utilities);
171
- addUtilities(darkUtilities);
172
- });
173
- };
174
-
175
- export default tokenUtilities;
@@ -1,24 +0,0 @@
1
- /**
2
- * BRAND COLORS TOKENS
3
- *
4
- * Organized brand colors consuming primitive colors.
5
- */
6
-
7
- import { primitives } from './primitives/colors.js';
8
-
9
- export const brandColors = {
10
- orange: primitives.orange[500],
11
- darkOrange: primitives.orange[600],
12
- lavander: primitives.violet[300],
13
- darkLavander: primitives.slate[900],
14
- blackLavander: primitives.slate[950],
15
- gray: primitives.neutral[200],
16
- mediumGray: primitives.neutral[500],
17
- darkGray: primitives.neutral[900],
18
- white: primitives.neutral[50],
19
- black: primitives.neutral[950],
20
- };
21
-
22
- export default {
23
- brand: brandColors,
24
- };