@jjlmoya/utils-creative 1.3.0 → 1.5.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.
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  import type { SynesthesiaPainterUI } from './index';
3
- import './style.css';
4
3
 
5
4
  interface Props {
6
5
  ui: SynesthesiaPainterUI;
@@ -108,3 +107,233 @@ const { ui } = Astro.props;
108
107
  init();
109
108
  document.addEventListener('astro:page-load', init);
110
109
  </script>
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
+ .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
+ .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
+ .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
+ .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>