@jjlmoya/utils-creative 1.17.0 → 1.18.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.
@@ -108,232 +108,3 @@ const { ui } = Astro.props;
108
108
  document.addEventListener('astro:page-load', init);
109
109
  </script>
110
110
 
111
- <style>
112
- .synesthesia-painter {
113
- --sp-bg: #fff;
114
- --sp-bg-muted: #f8fafc;
115
- --sp-text: #0f172a;
116
- --sp-text-muted: #475569;
117
- --sp-text-dim: #64748b;
118
- --sp-border: #e2e8f0;
119
- --sp-shadow: rgba(0, 0, 0, 0.08);
120
- --sp-primary: #6366f1;
121
- --sp-primary-on: #fff;
122
- --sp-header-bg: rgba(255, 255, 255, 0.92);
123
- }
124
-
125
- :global(.theme-dark) .synesthesia-painter {
126
- --sp-bg: #0f172a;
127
- --sp-bg-muted: #1e293b;
128
- --sp-text: #f8fafc;
129
- --sp-text-muted: #94a3b8;
130
- --sp-text-dim: #64748b;
131
- --sp-border: #334155;
132
- --sp-shadow: rgba(0, 0, 0, 0.35);
133
- --sp-primary: #818cf8;
134
- --sp-header-bg: rgba(30, 41, 59, 0.92);
135
- }
136
-
137
- .synesthesia-painter-card {
138
- position: relative;
139
- min-height: 420px;
140
- background-color: var(--sp-bg);
141
- border-radius: 2rem;
142
- border: 1px solid var(--sp-border);
143
- box-shadow: 0 20px 40px -8px var(--sp-shadow);
144
- display: flex;
145
- flex-direction: column;
146
- overflow: hidden;
147
- }
148
-
149
- .synesthesia-painter-header {
150
- position: absolute;
151
- top: 1rem;
152
- right: 1rem;
153
- z-index: 30;
154
- background-color: var(--sp-header-bg);
155
- backdrop-filter: blur(8px);
156
- padding: 0.3rem;
157
- border-radius: 9999px;
158
- border: 1px solid var(--sp-border);
159
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
160
- display: flex;
161
- gap: 0.2rem;
162
- }
163
-
164
- .synesthesia-painter-mode-btn {
165
- padding: 0.4rem 0.875rem;
166
- border-radius: 9999px;
167
- font-size: 0.7rem;
168
- font-weight: 700;
169
- text-transform: uppercase;
170
- letter-spacing: 0.06em;
171
- transition: background 0.2s, color 0.2s;
172
- color: var(--sp-text-muted);
173
- background: none;
174
- border: none;
175
- cursor: pointer;
176
- }
177
-
178
- .synesthesia-painter-mode-btn:hover {
179
- background-color: var(--sp-bg-muted);
180
- color: var(--sp-text);
181
- }
182
-
183
- .synesthesia-painter-mode-btn.active {
184
- background-color: var(--sp-primary);
185
- color: var(--sp-primary-on);
186
- box-shadow: 0 2px 8px rgba(99, 102, 241, 0.35);
187
- }
188
-
189
- .synesthesia-painter-canvas-wrapper {
190
- position: relative;
191
- flex-grow: 1;
192
- padding: 2rem;
193
- padding-top: 5rem;
194
- cursor: text;
195
- }
196
-
197
- @media (min-width: 768px) {
198
- .synesthesia-painter-canvas-wrapper {
199
- padding: 3rem;
200
- padding-top: 5rem;
201
- }
202
- }
203
-
204
- .synesthesia-painter-viz-layer {
205
- word-break: break-all;
206
- white-space: pre-wrap;
207
- line-height: 1.625;
208
- outline: none;
209
- font-size: 2.5rem;
210
- min-height: 100%;
211
- }
212
-
213
- .synesthesia-painter-input {
214
- position: absolute;
215
- inset: 0;
216
- opacity: 0;
217
- cursor: text;
218
- z-index: -10;
219
- width: 100%;
220
- height: 100%;
221
- resize: none;
222
- border: none;
223
- background: transparent;
224
- }
225
-
226
- .synesthesia-painter-placeholder {
227
- position: absolute;
228
- top: 5rem;
229
- left: 2rem;
230
- pointer-events: none;
231
- opacity: 0.35;
232
- user-select: none;
233
- }
234
-
235
- @media (min-width: 768px) {
236
- .synesthesia-painter-placeholder {
237
- left: 3rem;
238
- }
239
- }
240
-
241
- .synesthesia-painter-placeholder-text {
242
- color: var(--sp-text-dim);
243
- font-size: 2.25rem;
244
- font-weight: 300;
245
- font-style: italic;
246
- }
247
-
248
- .synesthesia-painter-footer {
249
- background-color: var(--sp-bg-muted);
250
- border-top: 1px solid var(--sp-border);
251
- padding: 0.875rem 2rem;
252
- display: flex;
253
- align-items: center;
254
- justify-content: space-between;
255
- gap: 1rem;
256
- }
257
-
258
- .synesthesia-painter-tooltip {
259
- font-size: 0.75rem;
260
- color: var(--sp-text-muted);
261
- font-weight: 500;
262
- margin: 0;
263
- }
264
-
265
- .synesthesia-painter-clear-btn {
266
- font-size: 0.7rem;
267
- font-weight: 700;
268
- color: var(--sp-text-dim);
269
- text-transform: uppercase;
270
- letter-spacing: 0.06em;
271
- background: none;
272
- border: none;
273
- cursor: pointer;
274
- display: flex;
275
- align-items: center;
276
- gap: 0.375rem;
277
- transition: color 0.2s;
278
- white-space: nowrap;
279
- }
280
-
281
- .synesthesia-painter-clear-btn:hover {
282
- color: #ef4444;
283
- }
284
-
285
- :global(.synesthesia-painter-char) {
286
- display: inline-block;
287
- color: var(--char-color);
288
- transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
289
- animation: sp-fade-in 0.2s ease-out forwards;
290
- }
291
-
292
- @keyframes sp-fade-in {
293
- from {
294
- opacity: 0;
295
- transform: translateY(4px);
296
- }
297
-
298
- to {
299
- opacity: 1;
300
- transform: translateY(0);
301
- }
302
- }
303
-
304
- :global(.synesthesia-painter-viz-layer.dots .synesthesia-painter-char) {
305
- color: transparent;
306
- font-size: 0;
307
- width: 1rem;
308
- height: 1rem;
309
- border-radius: 50%;
310
- background-color: var(--char-color);
311
- margin: 0.25rem;
312
- box-shadow: 0 0 8px var(--char-color);
313
- }
314
-
315
- :global(.synesthesia-painter-viz-layer.aura .synesthesia-painter-char) {
316
- color: rgba(255, 255, 255, 0.15);
317
- text-shadow: 0 0 18px var(--char-color), 0 0 36px var(--char-color);
318
- }
319
-
320
- :global(.theme-dark .synesthesia-painter-viz-layer.aura .synesthesia-painter-char) {
321
- color: rgba(255, 255, 255, 0.85);
322
- text-shadow: 0 0 14px var(--char-color), 0 0 28px var(--char-color), 0 0 56px var(--char-color);
323
- }
324
-
325
- :global(.synesthesia-painter-cursor) {
326
- display: inline-block;
327
- width: 2px;
328
- height: 2.5rem;
329
- background-color: var(--sp-primary);
330
- animation: sp-blink 1s step-end infinite;
331
- vertical-align: text-bottom;
332
- margin-left: 2px;
333
- }
334
-
335
- @keyframes sp-blink {
336
- 0%, 100% { opacity: 1; }
337
- 50% { opacity: 0; }
338
- }
339
- </style>
@@ -0,0 +1,227 @@
1
+ .synesthesia-painter {
2
+ --sp-bg: #fff;
3
+ --sp-bg-muted: #f8fafc;
4
+ --sp-text: #0f172a;
5
+ --sp-text-muted: #475569;
6
+ --sp-text-dim: #64748b;
7
+ --sp-border: #e2e8f0;
8
+ --sp-shadow: rgba(0, 0, 0, 0.08);
9
+ --sp-primary: #6366f1;
10
+ --sp-primary-on: #fff;
11
+ --sp-header-bg: rgba(255, 255, 255, 0.92);
12
+ }
13
+
14
+ :global(.theme-dark) .synesthesia-painter {
15
+ --sp-bg: #0f172a;
16
+ --sp-bg-muted: #1e293b;
17
+ --sp-text: #f8fafc;
18
+ --sp-text-muted: #94a3b8;
19
+ --sp-text-dim: #64748b;
20
+ --sp-border: #334155;
21
+ --sp-shadow: rgba(0, 0, 0, 0.35);
22
+ --sp-primary: #818cf8;
23
+ --sp-header-bg: rgba(30, 41, 59, 0.92);
24
+ }
25
+
26
+ .synesthesia-painter-card {
27
+ position: relative;
28
+ min-height: 420px;
29
+ background-color: var(--sp-bg);
30
+ border-radius: 2rem;
31
+ border: 1px solid var(--sp-border);
32
+ box-shadow: 0 20px 40px -8px var(--sp-shadow);
33
+ display: flex;
34
+ flex-direction: column;
35
+ overflow: hidden;
36
+ }
37
+
38
+ .synesthesia-painter-header {
39
+ position: absolute;
40
+ top: 1rem;
41
+ right: 1rem;
42
+ z-index: 30;
43
+ background-color: var(--sp-header-bg);
44
+ backdrop-filter: blur(8px);
45
+ padding: 0.3rem;
46
+ border-radius: 9999px;
47
+ border: 1px solid var(--sp-border);
48
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
49
+ display: flex;
50
+ gap: 0.2rem;
51
+ }
52
+
53
+ .synesthesia-painter-mode-btn {
54
+ padding: 0.4rem 0.875rem;
55
+ border-radius: 9999px;
56
+ font-size: 0.7rem;
57
+ font-weight: 700;
58
+ text-transform: uppercase;
59
+ letter-spacing: 0.06em;
60
+ transition: background 0.2s, color 0.2s;
61
+ color: var(--sp-text-muted);
62
+ background: none;
63
+ border: none;
64
+ cursor: pointer;
65
+ }
66
+
67
+ .synesthesia-painter-mode-btn:hover {
68
+ background-color: var(--sp-bg-muted);
69
+ color: var(--sp-text);
70
+ }
71
+
72
+ .synesthesia-painter-mode-btn.active {
73
+ background-color: var(--sp-primary);
74
+ color: var(--sp-primary-on);
75
+ box-shadow: 0 2px 8px rgba(99, 102, 241, 0.35);
76
+ }
77
+
78
+ .synesthesia-painter-canvas-wrapper {
79
+ position: relative;
80
+ flex-grow: 1;
81
+ padding: 2rem;
82
+ padding-top: 5rem;
83
+ cursor: text;
84
+ }
85
+
86
+ @media (min-width: 768px) {
87
+ .synesthesia-painter-canvas-wrapper {
88
+ padding: 3rem;
89
+ padding-top: 5rem;
90
+ }
91
+ }
92
+
93
+ .synesthesia-painter-viz-layer {
94
+ word-break: break-all;
95
+ white-space: pre-wrap;
96
+ line-height: 1.625;
97
+ outline: none;
98
+ font-size: 2.5rem;
99
+ min-height: 100%;
100
+ }
101
+
102
+ .synesthesia-painter-input {
103
+ position: absolute;
104
+ inset: 0;
105
+ opacity: 0;
106
+ cursor: text;
107
+ z-index: -10;
108
+ width: 100%;
109
+ height: 100%;
110
+ resize: none;
111
+ border: none;
112
+ background: transparent;
113
+ }
114
+
115
+ .synesthesia-painter-placeholder {
116
+ position: absolute;
117
+ top: 5rem;
118
+ left: 2rem;
119
+ pointer-events: none;
120
+ opacity: 0.35;
121
+ user-select: none;
122
+ }
123
+
124
+ @media (min-width: 768px) {
125
+ .synesthesia-painter-placeholder {
126
+ left: 3rem;
127
+ }
128
+ }
129
+
130
+ .synesthesia-painter-placeholder-text {
131
+ color: var(--sp-text-dim);
132
+ font-size: 2.25rem;
133
+ font-weight: 300;
134
+ font-style: italic;
135
+ }
136
+
137
+ .synesthesia-painter-footer {
138
+ background-color: var(--sp-bg-muted);
139
+ border-top: 1px solid var(--sp-border);
140
+ padding: 0.875rem 2rem;
141
+ display: flex;
142
+ align-items: center;
143
+ justify-content: space-between;
144
+ gap: 1rem;
145
+ }
146
+
147
+ .synesthesia-painter-tooltip {
148
+ font-size: 0.75rem;
149
+ color: var(--sp-text-muted);
150
+ font-weight: 500;
151
+ margin: 0;
152
+ }
153
+
154
+ .synesthesia-painter-clear-btn {
155
+ font-size: 0.7rem;
156
+ font-weight: 700;
157
+ color: var(--sp-text-dim);
158
+ text-transform: uppercase;
159
+ letter-spacing: 0.06em;
160
+ background: none;
161
+ border: none;
162
+ cursor: pointer;
163
+ display: flex;
164
+ align-items: center;
165
+ gap: 0.375rem;
166
+ transition: color 0.2s;
167
+ white-space: nowrap;
168
+ }
169
+
170
+ .synesthesia-painter-clear-btn:hover {
171
+ color: #ef4444;
172
+ }
173
+
174
+ :global(.synesthesia-painter-char) {
175
+ display: inline-block;
176
+ color: var(--char-color);
177
+ transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
178
+ animation: sp-fade-in 0.2s ease-out forwards;
179
+ }
180
+
181
+ @keyframes sp-fade-in {
182
+ from {
183
+ opacity: 0;
184
+ transform: translateY(4px);
185
+ }
186
+
187
+ to {
188
+ opacity: 1;
189
+ transform: translateY(0);
190
+ }
191
+ }
192
+
193
+ :global(.synesthesia-painter-viz-layer.dots .synesthesia-painter-char) {
194
+ color: transparent;
195
+ font-size: 0;
196
+ width: 1rem;
197
+ height: 1rem;
198
+ border-radius: 50%;
199
+ background-color: var(--char-color);
200
+ margin: 0.25rem;
201
+ box-shadow: 0 0 8px var(--char-color);
202
+ }
203
+
204
+ :global(.synesthesia-painter-viz-layer.aura .synesthesia-painter-char) {
205
+ color: rgba(255, 255, 255, 0.15);
206
+ text-shadow: 0 0 18px var(--char-color), 0 0 36px var(--char-color);
207
+ }
208
+
209
+ :global(.theme-dark .synesthesia-painter-viz-layer.aura .synesthesia-painter-char) {
210
+ color: rgba(255, 255, 255, 0.85);
211
+ text-shadow: 0 0 14px var(--char-color), 0 0 28px var(--char-color), 0 0 56px var(--char-color);
212
+ }
213
+
214
+ :global(.synesthesia-painter-cursor) {
215
+ display: inline-block;
216
+ width: 2px;
217
+ height: 2.5rem;
218
+ background-color: var(--sp-primary);
219
+ animation: sp-blink 1s step-end infinite;
220
+ vertical-align: text-bottom;
221
+ margin-left: 2px;
222
+ }
223
+
224
+ @keyframes sp-blink {
225
+ 0%, 100% { opacity: 1; }
226
+ 50% { opacity: 0; }
227
+ }