@noirmd/previewer 2.0.2 → 2.0.4

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/dist/editor.css CHANGED
@@ -53,6 +53,14 @@
53
53
  min-height: var(--nr-editor-min-height, 300px);
54
54
  }
55
55
 
56
+ /* Split mode: the editor drives the height (its content), the preview
57
+ is absolute over the right half at exactly the editor's height and
58
+ scrolls internally when taller. */
59
+ .nr-editor--split {
60
+ flex: 0 1 auto;
61
+ height: auto;
62
+ }
63
+
56
64
  /* ── Toolbar ──────────────────────────────────────────────── */
57
65
 
58
66
  .nr-editor-toolbar {
@@ -176,6 +184,7 @@
176
184
  display: flex;
177
185
  flex: 1 1 auto;
178
186
  min-height: 0;
187
+ position: relative;
179
188
  }
180
189
 
181
190
  .nr-editor-pane {
@@ -187,6 +196,7 @@
187
196
  }
188
197
  .nr-editor-pane--half {
189
198
  width: 50%;
199
+ flex: 0 1 auto;
190
200
  border-right: 1px solid color-mix(in srgb, var(--color-border, #334155) 30%, transparent);
191
201
  }
192
202
 
@@ -213,14 +223,218 @@
213
223
  flex: 1 1 auto;
214
224
  min-width: 0;
215
225
  min-height: 0;
216
- overflow: auto;
217
226
  }
218
227
  .nr-editor-preview--half {
219
- width: 50%;
228
+ position: absolute;
229
+ top: 0;
230
+ bottom: 0;
231
+ left: 50%;
232
+ right: 0;
233
+ width: auto;
234
+ overflow-y: auto;
220
235
  }
221
236
 
222
237
  .nr-editor-prose {
223
- height: 100%;
224
- overflow: auto;
225
238
  padding: 1rem;
226
239
  }
240
+
241
+ /* ── Guide (syntax help panel) ──────────────────────────── */
242
+ .nr-guide {
243
+ position: fixed;
244
+ inset: 0;
245
+ z-index: 200;
246
+ display: flex;
247
+ align-items: center;
248
+ justify-content: center;
249
+ }
250
+ .nr-guide__overlay {
251
+ position: absolute;
252
+ inset: 0;
253
+ background: rgba(2, 6, 23, 0.6);
254
+ backdrop-filter: blur(2px);
255
+ }
256
+ .nr-guide__panel {
257
+ position: relative;
258
+ display: flex;
259
+ flex-direction: column;
260
+ width: min(980px, 94vw);
261
+ height: min(740px, 88vh);
262
+ background: var(--color-background-primary, #0f172a);
263
+ border: 1px solid var(--color-border, #334155);
264
+ border-radius: 14px;
265
+ box-shadow: 0 24px 64px rgba(0, 0, 0, 0.45);
266
+ overflow: hidden;
267
+ }
268
+ .nr-guide__head {
269
+ display: flex;
270
+ align-items: center;
271
+ gap: 10px;
272
+ padding: 12px 16px;
273
+ border-bottom: 1px solid var(--color-border, #334155);
274
+ background: var(--color-background-secondary-solid, #1e293b);
275
+ }
276
+ .nr-guide__head h2 {
277
+ margin: 0;
278
+ font-size: 15px;
279
+ font-weight: 700;
280
+ color: var(--color-text-primary, #e2e8f0);
281
+ }
282
+ .nr-guide__head .material-icons-round {
283
+ color: var(--color-accent-primary, #0ea5e9);
284
+ font-size: 22px;
285
+ }
286
+ .nr-guide__search {
287
+ margin-left: auto;
288
+ width: 260px;
289
+ padding: 6px 10px;
290
+ border: 1px solid var(--color-border, #334155);
291
+ border-radius: 8px;
292
+ background: var(--color-background-primary, #0f172a);
293
+ color: var(--color-text-primary, #e2e8f0);
294
+ font-size: 13px;
295
+ font-family: inherit;
296
+ }
297
+ .nr-guide__search:focus {
298
+ outline: none;
299
+ border-color: var(--color-accent-primary, #0ea5e9);
300
+ }
301
+ .nr-guide__search::placeholder {
302
+ color: var(--color-text-secondary, #94a3b8);
303
+ }
304
+ .nr-guide__close {
305
+ border: none;
306
+ background: none;
307
+ color: var(--color-text-secondary, #94a3b8);
308
+ font-size: 24px;
309
+ line-height: 1;
310
+ cursor: pointer;
311
+ padding: 2px 8px;
312
+ border-radius: 6px;
313
+ }
314
+ .nr-guide__close:hover {
315
+ color: var(--color-text-primary, #e2e8f0);
316
+ background: rgba(255, 255, 255, 0.06);
317
+ }
318
+ .nr-guide__body {
319
+ display: flex;
320
+ flex: 1;
321
+ min-height: 0;
322
+ }
323
+ .nr-guide__nav {
324
+ width: 240px;
325
+ min-width: 240px;
326
+ overflow-y: auto;
327
+ border-right: 1px solid var(--color-border, #334155);
328
+ padding: 10px 8px;
329
+ background: color-mix(
330
+ in srgb,
331
+ var(--color-background-secondary-solid, #1e293b) 40%,
332
+ transparent
333
+ );
334
+ }
335
+ .nr-guide__cat {
336
+ margin-bottom: 4px;
337
+ }
338
+ .nr-guide__cat-head {
339
+ display: flex;
340
+ align-items: center;
341
+ gap: 4px;
342
+ width: 100%;
343
+ padding: 6px 8px;
344
+ border: none;
345
+ background: none;
346
+ color: var(--color-text-secondary, #94a3b8);
347
+ font-size: 12px;
348
+ font-weight: 700;
349
+ text-transform: uppercase;
350
+ letter-spacing: 0.04em;
351
+ cursor: pointer;
352
+ border-radius: 6px;
353
+ }
354
+ .nr-guide__cat-head:hover {
355
+ color: var(--color-text-primary, #e2e8f0);
356
+ }
357
+ .nr-guide__cat-chevron {
358
+ font-size: 16px;
359
+ transition: transform 0.15s;
360
+ }
361
+ .nr-guide__items {
362
+ list-style: none;
363
+ margin: 2px 0 8px;
364
+ padding: 0;
365
+ }
366
+ .nr-guide__item {
367
+ display: flex;
368
+ align-items: center;
369
+ gap: 8px;
370
+ width: 100%;
371
+ padding: 6px 8px 6px 24px;
372
+ border: none;
373
+ background: none;
374
+ color: var(--color-text-primary, #e2e8f0);
375
+ font-size: 13px;
376
+ text-align: left;
377
+ cursor: pointer;
378
+ border-radius: 6px;
379
+ font-family: inherit;
380
+ }
381
+ .nr-guide__item:hover {
382
+ background: rgba(255, 255, 255, 0.05);
383
+ }
384
+ .nr-guide__item--active {
385
+ background: color-mix(
386
+ in srgb,
387
+ var(--color-accent-primary, #0ea5e9) 18%,
388
+ transparent
389
+ );
390
+ color: var(--color-accent-primary, #0ea5e9);
391
+ }
392
+ .nr-guide__item-icon {
393
+ font-size: 15px;
394
+ opacity: 0.8;
395
+ }
396
+ .nr-guide__content {
397
+ flex: 1;
398
+ min-width: 0;
399
+ overflow-y: auto;
400
+ padding: 20px 26px;
401
+ }
402
+ .nr-guide__content > div {
403
+ height: 100%;
404
+ }
405
+ .nr-guide__content .nr-prose {
406
+ font-size: 14px;
407
+ }
408
+ .nr-guide__content h1 {
409
+ font-size: 1.5rem;
410
+ }
411
+ .nr-guide__content h2 {
412
+ font-size: 1.2rem;
413
+ margin-top: 1.8rem;
414
+ }
415
+ .nr-guide__empty {
416
+ color: var(--color-text-secondary, #94a3b8);
417
+ font-size: 14px;
418
+ padding: 40px 12px;
419
+ text-align: center;
420
+ }
421
+ @media (max-width: 720px) {
422
+ .nr-guide__nav {
423
+ width: 200px;
424
+ min-width: 200px;
425
+ }
426
+ .nr-guide__search {
427
+ width: 140px;
428
+ }
429
+ }
430
+ @media (max-width: 560px) {
431
+ .nr-guide__panel {
432
+ width: 100vw;
433
+ height: 100vh;
434
+ border-radius: 0;
435
+ border: none;
436
+ }
437
+ .nr-guide__nav {
438
+ display: none;
439
+ }
440
+ }
@@ -0,0 +1,157 @@
1
+ /* ============================================================
2
+ NoirMD Vanilla — Hover 3D
3
+ ============================================================ */
4
+
5
+ .nr-hover-3d {
6
+ display: inline-grid;
7
+ perspective: 75rem;
8
+ --transform: 0, 0;
9
+ --shine: 100% 100%;
10
+ --shadow: 0rem 0rem 0rem;
11
+ --ease: linear(0, 0.931 13.8%, 1.196 21.4%, 1.343 29.8%, 1.378 36%, 1.365 43.2%, 1.059 78%, 1);
12
+
13
+ filter: drop-shadow(var(--shadow) 0.1rem #00000003) drop-shadow(var(--shadow) 0.2rem #00000003)
14
+ drop-shadow(var(--shadow) 0.3rem #00000003) drop-shadow(var(--shadow) 0.4rem #00000003);
15
+ transition: filter ease-out 400ms;
16
+ }
17
+
18
+ .nr-hover-3d > :nth-child(n + 2) {
19
+ isolation: isolate;
20
+ z-index: 1;
21
+ }
22
+
23
+ .nr-hover-3d__stage {
24
+ position: relative;
25
+ grid-area: 1 / 1 / 4 / 4;
26
+ overflow: hidden;
27
+ border-radius: 1rem;
28
+ transform: rotate3d(var(--transform), 0, 10deg);
29
+ transition:
30
+ transform var(--ease) 500ms,
31
+ scale var(--ease) 500ms,
32
+ outline-color ease-out 500ms;
33
+ outline: 0.5px solid #0000;
34
+ outline-offset: -1px;
35
+ }
36
+
37
+ .nr-hover-3d__stage::before {
38
+ content: "";
39
+ pointer-events: none;
40
+ position: absolute;
41
+ z-index: 1;
42
+ width: 33.3333%;
43
+ height: 33.3333%;
44
+ scale: 500%;
45
+ opacity: 0;
46
+ filter: blur(0.75rem);
47
+ background-image: radial-gradient(circle at 50%, #fff3 10%, transparent 50%);
48
+ translate: var(--shine);
49
+ transition:
50
+ translate ease-out 400ms,
51
+ opacity ease-out 400ms;
52
+ }
53
+
54
+ .nr-hover-3d__stage > * {
55
+ margin: 0;
56
+ }
57
+
58
+ .nr-hover-3d__stage img {
59
+ display: block;
60
+ }
61
+
62
+ .nr-hover-3d:hover {
63
+ --ease: linear(0, 0.708 15.2%, 0.927 23.6%, 1.067 33%, 1.12 41%, 1.13 50.2%, 1.019 83.2%, 1);
64
+
65
+ & > .nr-hover-3d__stage {
66
+ outline-color: #fff1;
67
+ scale: 1.05;
68
+ }
69
+
70
+ & > .nr-hover-3d__stage::before {
71
+ opacity: 1;
72
+ }
73
+ }
74
+
75
+ .nr-hover-3d > :nth-child(n + 2) {
76
+ scale: 1.2;
77
+ }
78
+
79
+ .nr-hover-3d > :nth-child(2) {
80
+ grid-area: 1 / 1 / 2 / 2;
81
+ }
82
+
83
+ .nr-hover-3d > :nth-child(3) {
84
+ grid-area: 1 / 2 / 2 / 3;
85
+ }
86
+
87
+ .nr-hover-3d > :nth-child(4) {
88
+ grid-area: 1 / 3 / 2 / 4;
89
+ }
90
+
91
+ .nr-hover-3d > :nth-child(5) {
92
+ grid-area: 2 / 1 / 3 / 2;
93
+ }
94
+
95
+ .nr-hover-3d > :nth-child(6) {
96
+ grid-area: 2 / 3 / 3 / 4;
97
+ }
98
+
99
+ .nr-hover-3d > :nth-child(7) {
100
+ grid-area: 3 / 1 / 4 / 2;
101
+ }
102
+
103
+ .nr-hover-3d > :nth-child(8) {
104
+ grid-area: 3 / 2 / 4 / 3;
105
+ }
106
+
107
+ .nr-hover-3d > :nth-child(9) {
108
+ grid-area: 3 / 3 / 4 / 4;
109
+ }
110
+
111
+ .nr-hover-3d:has(> :nth-child(2):hover) {
112
+ --transform: -1, 1;
113
+ --shine: 0% 0%;
114
+ --shadow: -0.5rem -0.5rem;
115
+ }
116
+
117
+ .nr-hover-3d:has(> :nth-child(3):hover) {
118
+ --transform: -1, 0;
119
+ --shine: 100% 0%;
120
+ --shadow: 0rem -0.5rem;
121
+ }
122
+
123
+ .nr-hover-3d:has(> :nth-child(4):hover) {
124
+ --transform: -1, -1;
125
+ --shine: 200% 0%;
126
+ --shadow: 0.5rem -0.5rem;
127
+ }
128
+
129
+ .nr-hover-3d:has(> :nth-child(5):hover) {
130
+ --transform: 0, 1;
131
+ --shine: 0% 100%;
132
+ --shadow: -0.5rem 0rem;
133
+ }
134
+
135
+ .nr-hover-3d:has(> :nth-child(6):hover) {
136
+ --transform: 0, -1;
137
+ --shine: 200% 100%;
138
+ --shadow: 0.5rem 0rem;
139
+ }
140
+
141
+ .nr-hover-3d:has(> :nth-child(7):hover) {
142
+ --transform: 1, 1;
143
+ --shine: 0% 200%;
144
+ --shadow: -0.5rem 0.5rem;
145
+ }
146
+
147
+ .nr-hover-3d:has(> :nth-child(8):hover) {
148
+ --transform: 1, 0;
149
+ --shine: 100% 200%;
150
+ --shadow: 0rem 0.5rem;
151
+ }
152
+
153
+ .nr-hover-3d:has(> :nth-child(9):hover) {
154
+ --transform: 1, -1;
155
+ --shine: 200% 200%;
156
+ --shadow: 0.5rem 0.5rem;
157
+ }
@@ -0,0 +1,110 @@
1
+ /* ============================================================
2
+ NoirMD Vanilla — Hover Gallery
3
+ ============================================================ */
4
+
5
+ .nr-hover-gallery {
6
+ --items: 1;
7
+ display: inline-grid;
8
+ grid-template-columns: repeat(var(--items), 1fr);
9
+ width: 100%;
10
+ max-width: 100%;
11
+ gap: 1px;
12
+ overflow: hidden;
13
+ border-radius: var(--nr-radius-sm);
14
+ background: var(--nr-bg-secondary);
15
+ margin: 1rem 0;
16
+ }
17
+
18
+ .nr-hover-gallery:has(> :nth-child(3)) {
19
+ --items: 2;
20
+ }
21
+
22
+ .nr-hover-gallery:has(> :nth-child(4)) {
23
+ --items: 3;
24
+ }
25
+
26
+ .nr-hover-gallery:has(> :nth-child(5)) {
27
+ --items: 4;
28
+ }
29
+
30
+ .nr-hover-gallery:has(> :nth-child(6)) {
31
+ --items: 5;
32
+ }
33
+
34
+ .nr-hover-gallery:has(> :nth-child(7)) {
35
+ --items: 6;
36
+ }
37
+
38
+ .nr-hover-gallery:has(> :nth-child(8)) {
39
+ --items: 7;
40
+ }
41
+
42
+ .nr-hover-gallery:has(> :nth-child(9)) {
43
+ --items: 8;
44
+ }
45
+
46
+ .nr-hover-gallery:has(> :nth-child(10)) {
47
+ --items: 9;
48
+ }
49
+
50
+ .nr-hover-gallery > * {
51
+ opacity: 0;
52
+ height: 100%;
53
+ grid-row: 1;
54
+ object-fit: cover;
55
+ width: 100%;
56
+ }
57
+
58
+ .nr-hover-gallery > :nth-child(1) {
59
+ grid-column: 1 / -1;
60
+ opacity: 1;
61
+ }
62
+
63
+ .nr-hover-gallery > :nth-child(2) {
64
+ grid-column: 1;
65
+ }
66
+
67
+ .nr-hover-gallery > :nth-child(3) {
68
+ grid-column: 2;
69
+ }
70
+
71
+ .nr-hover-gallery > :nth-child(4) {
72
+ grid-column: 3;
73
+ }
74
+
75
+ .nr-hover-gallery > :nth-child(5) {
76
+ grid-column: 4;
77
+ }
78
+
79
+ .nr-hover-gallery > :nth-child(6) {
80
+ grid-column: 5;
81
+ }
82
+
83
+ .nr-hover-gallery > :nth-child(7) {
84
+ grid-column: 6;
85
+ }
86
+
87
+ .nr-hover-gallery > :nth-child(8) {
88
+ grid-column: 7;
89
+ }
90
+
91
+ .nr-hover-gallery > :nth-child(9) {
92
+ grid-column: 8;
93
+ }
94
+
95
+ .nr-hover-gallery > :nth-child(10) {
96
+ grid-column: 9;
97
+ }
98
+
99
+ .nr-hover-gallery > :nth-child(n + 11) {
100
+ display: none;
101
+ }
102
+
103
+ .nr-hover-gallery > *:hover {
104
+ grid-column: 1 / -1;
105
+ opacity: 1;
106
+ }
107
+
108
+ .nr-hover-gallery:has(*:hover) > :nth-child(1) {
109
+ display: none;
110
+ }