@salla.sa/twilight-tailwind-theme 3.0.0-beta.1 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/plugin-core.js ADDED
@@ -0,0 +1,218 @@
1
+ // Shared by index.js (theme plugin) and twilight-components per-component build.
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+ const globalUtilities = require('./global-utilities');
5
+
6
+ const hasReactPackage = (dir) => {
7
+ for (; ; dir = path.dirname(dir)) {
8
+ if (fs.existsSync(path.join(dir, 'node_modules/@salla.sa/twilight-components-react'))) return true;
9
+ if (dir === path.dirname(dir)) return false;
10
+ }
11
+ };
12
+
13
+ // On for the SSR themes (they install the React package); every other build keeps the previous output.
14
+ const enableThemeV2 = process.env.TWILIGHT_THEME_V2 === 'true' || [process.cwd(), __dirname].some(hasReactPackage)
15
+
16
+ const v2Keyframes = enableThemeV2 ? {
17
+ sFadeInUp: {
18
+ '0%': { transform: 'translateY(20px)', opacity: '0' },
19
+ '100%': { transform: 'translateY(0)', opacity: '1' },
20
+ },
21
+ sFadeIn: {
22
+ '0%': { opacity: '0' },
23
+ '100%': { opacity: '1' },
24
+ },
25
+ sFadeOut: {
26
+ '0%': { opacity: '1' },
27
+ '100%': { opacity: '0' },
28
+ },
29
+ sTranslateLeft: {
30
+ '0%': { transform: 'translateX(110%)', opacity: '0' },
31
+ '100%': { transform: 'translateX(0)', opacity: '1' },
32
+ },
33
+ sTranslateRight: {
34
+ '0%': { transform: 'translateX(-110%)', opacity: '0' },
35
+ '100%': { transform: 'translateX(0)', opacity: '1' },
36
+ },
37
+ sTranslateLeftOut: {
38
+ '0%': { transform: 'translateX(0)', opacity: '1' },
39
+ '100%': { transform: 'translateX(110%)', opacity: '0' },
40
+ },
41
+ sTranslateRightOut: {
42
+ '0%': { transform: 'translateX(0)', opacity: '1' },
43
+ '100%': { transform: 'translateX(-110%)', opacity: '0' },
44
+ },
45
+ sShrinkFly: {
46
+ '0%': { transform: 'scale(1)', opacity: '1' },
47
+ '50%': { transform: 'scale(0.2)', opacity: '1' },
48
+ '100%': { transform: 'scale(0)', opacity: '0' },
49
+ },
50
+ sExpandHeight: {
51
+ '0%': { height: '0', opacity: '0' },
52
+ '100%': { opacity: '1' },
53
+ },
54
+ sCollapseHeight: {
55
+ '0%': { opacity: '1' },
56
+ '100%': { height: '0', opacity: '0' },
57
+ },
58
+ sSlideDownShare: {
59
+ '0%': { transform: 'translateY(-30px) scaleY(0)', opacity: '0' },
60
+ '100%': { transform: 'translateY(0) scaleY(1)', opacity: '1' },
61
+ },
62
+ sRubberBand: {
63
+ '0%': { transform: 'scale(1)' },
64
+ '30%': { transform: 'scale(1.25, 0.75)' },
65
+ '40%': { transform: 'scale(0.75, 1.25)' },
66
+ '50%': { transform: 'scale(1.15, 0.85)' },
67
+ '65%': { transform: 'scale(0.95, 1.05)' },
68
+ '75%': { transform: 'scale(1.05, 0.95)' },
69
+ '100%': { transform: 'scale(1)' },
70
+ },
71
+ } : {}
72
+
73
+ const v2Animations = enableThemeV2 ? {
74
+ 'fade-in-up': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards',
75
+ 'fade-in': 'sFadeIn 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards',
76
+ 'fade-out': 'sFadeOut 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards',
77
+ 'translate-left': 'sTranslateLeft 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards',
78
+ 'translate-right': 'sTranslateRight 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards',
79
+ 'translate-left-out': 'sTranslateLeftOut 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards',
80
+ 'translate-right-out': 'sTranslateRightOut 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards',
81
+ 'shrink-fly': 'sShrinkFly 1.7s ease-out forwards',
82
+ 'expand-height': 'sExpandHeight 0.3s cubic-bezier(0.455, 0.03, 0.515, 0.955) forwards',
83
+ 'collapse-height': 'sCollapseHeight 0.3s cubic-bezier(0.455, 0.03, 0.515, 0.955) forwards',
84
+ 'slide-down-share': 'sSlideDownShare 1.4s cubic-bezier(0.16, 1, 0.3, 1) forwards',
85
+ 'rubber-band': 'sRubberBand 0.8s ease-out',
86
+ 'stagger-0': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0s forwards',
87
+ 'stagger-100': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.1s forwards',
88
+ 'stagger-200': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.2s forwards',
89
+ 'stagger-300': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.3s forwards',
90
+ 'stagger-400': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.4s forwards',
91
+ 'stagger-500': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.5s forwards',
92
+ 'stagger-70': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.07s forwards',
93
+ 'stagger-140': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.14s forwards',
94
+ 'stagger-210': 'sFadeInUp 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.21s forwards',
95
+ } : {}
96
+
97
+ module.exports = {
98
+ enableThemeV2,
99
+ handler({ addUtilities, addVariant }) {
100
+ addVariant('border', ['&:focus']);
101
+ globalUtilities.forEach((group) => addUtilities(group));
102
+
103
+ // SAL-73 Phase 3: prefers-reduced-motion overrides for the v2 animation
104
+ // utilities. Dormant unless TWILIGHT_THEME_V2=true.
105
+ if (enableThemeV2) {
106
+ addUtilities({
107
+ '@media (prefers-reduced-motion: reduce)': {
108
+ '.animate-fade-in-up, .animate-fade-in, .animate-fade-out': {
109
+ 'animation': 'none !important',
110
+ 'opacity': '1 !important',
111
+ 'transform': 'none !important',
112
+ },
113
+ '.animate-translate-left, .animate-translate-right, .animate-translate-left-out, .animate-translate-right-out': {
114
+ 'animation': 'none !important',
115
+ 'opacity': '1 !important',
116
+ 'transform': 'none !important',
117
+ },
118
+ '.animate-shrink-fly': {
119
+ 'animation': 'none !important',
120
+ 'opacity': '1 !important',
121
+ 'transform': 'none !important',
122
+ },
123
+ '.animate-expand-height, .animate-collapse-height': {
124
+ 'animation': 'none !important',
125
+ 'opacity': '1 !important',
126
+ 'height': 'auto !important',
127
+ },
128
+ '.animate-slide-down-share': {
129
+ 'animation': 'none !important',
130
+ 'opacity': '1 !important',
131
+ 'transform': 'none !important',
132
+ },
133
+ '.animate-stagger-0, .animate-stagger-100, .animate-stagger-200, .animate-stagger-300, .animate-stagger-400, .animate-stagger-500': {
134
+ 'animation': 'none !important',
135
+ 'opacity': '1 !important',
136
+ 'transform': 'none !important',
137
+ },
138
+ '.animate-stagger-70, .animate-stagger-140, .animate-stagger-210': {
139
+ 'animation': 'none !important',
140
+ 'opacity': '1 !important',
141
+ 'transform': 'none !important',
142
+ },
143
+ '.animate-rubber-band': {
144
+ 'animation': 'none !important',
145
+ 'transform': 'none !important',
146
+ },
147
+ }
148
+ });
149
+ }
150
+ },
151
+ config: {
152
+ important: true,
153
+ darkMode: 'class', // or 'media' or 'class',
154
+ theme: {
155
+ fontFamily: { // move to plugin
156
+ sans: [
157
+ 'var(--font-main)',
158
+ '-apple-system',
159
+ 'BlinkMacSystemFont',
160
+ ],
161
+ primary: "var(--font-main)"
162
+ },
163
+ extend: {
164
+ colors: {
165
+ 'inherit': 'inherit',
166
+ 'transparent': 'transparent',
167
+ 'primary': 'var(--color-primary)',
168
+ 'primary-d': 'var(--color-primary-dark)',
169
+ 'primary-l': 'var(--color-primary-light)',
170
+ 'primary-reverse': 'var(--color-primary-reverse)',
171
+ 'dark': 'var(--color-dark)'
172
+ },
173
+ zIndex: {
174
+ '1': '1',
175
+ },
176
+ fontSize: {
177
+ 'icon-lg': '33px',
178
+ },
179
+ boxShadow: {
180
+ 'default': '5px 10px 30px #2B2D340D;',
181
+ },
182
+ transitionTimingFunction: {
183
+ 'elastic': 'cubic-bezier(0.55, 0, 0.1, 1)',
184
+ },
185
+ screens: {
186
+ 'xxs': { 'min': '380px', 'max': '479px' },
187
+ 'xs': '480px',
188
+ },
189
+ keyframes: {
190
+ slideUpFromBottom: {
191
+ '0%': { transform: 'translateY(100%)', opacity: '0' },
192
+ '100%': { transform: 'translateY(0%)', opacity: '1' },
193
+ },
194
+ slideDownFromBottom: {
195
+ '0%': { transform: 'translateY(0%)', opacity: '1' },
196
+ '100%': { transform: 'translateY(100%)', opacity: '0' },
197
+ },
198
+ slideUPFromTop: {
199
+ '0%': { transform: 'translateY(-0%)', opacity: '1' },
200
+ '100%': { transform: 'translateY(-100%)', opacity: '0' }
201
+ },
202
+ slideDownFromTop: {
203
+ '0%': { transform: 'translateY(-100%)', opacity: '0' },
204
+ '100%': { transform: 'translateY(-0%)', opacity: '1' }
205
+ },
206
+ ...v2Keyframes,
207
+ },
208
+ animation: {
209
+ slideUpFromBottom: 'slideUpFromBottom .6s linear',
210
+ slideDownFromBottom: 'slideDownFromBottom .6s linear',
211
+ slideDownFromTop: 'slideDownFromTop .6s linear',
212
+ slideUPFromTop: 'slideUPFromTop .6s linear',
213
+ ...v2Animations,
214
+ },
215
+ }
216
+ }
217
+ },
218
+ };