@juxtui/ui 0.5.0 → 0.6.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.
package/dist/style.css CHANGED
@@ -1,3 +1,799 @@
1
+
2
+ @layer theme, base, juxt, components, utilities;
3
+ @layer juxt {
4
+ .j-menu {
5
+ z-index: var(--juxt-z-popover);
6
+ box-sizing: border-box;
7
+ min-width: 11rem;
8
+ max-width: calc(100vw - 16px);
9
+ max-height: var(--j-available-height, 24rem);
10
+ padding: var(--juxt-space-1);
11
+ overflow-y: auto;
12
+ overscroll-behavior: contain;
13
+ outline: none;
14
+ }
15
+ .j-menu__item {
16
+ position: relative;
17
+ display: flex;
18
+ align-items: center;
19
+ gap: var(--juxt-space-2);
20
+ min-height: var(--juxt-control-sm);
21
+ padding: 0 var(--juxt-space-2);
22
+ border-radius: var(--juxt-radius-xs);
23
+ color: var(--juxt-fg);
24
+ font-size: var(--juxt-text-md);
25
+ letter-spacing: var(--juxt-tracking-tight);
26
+ text-decoration: none;
27
+ cursor: pointer;
28
+ outline: none;
29
+ user-select: none;
30
+ -webkit-tap-highlight-color: transparent;
31
+ }
32
+ .j-menu__item:focus,
33
+ .j-menu__item[aria-expanded='true'] {
34
+ background: var(--juxt-surface-hover);
35
+ }
36
+ .j-menu__item[aria-disabled='true'] {
37
+ color: var(--juxt-fg-disabled);
38
+ cursor: not-allowed;
39
+ }
40
+ .j-menu__item--destructive {
41
+ color: var(--juxt-danger-text);
42
+ }
43
+ .j-menu__item--destructive:focus {
44
+ background: var(--juxt-danger-soft);
45
+ }
46
+ .j-menu__icon {
47
+ display: inline-flex;
48
+ flex: none;
49
+ color: var(--juxt-fg-muted);
50
+ }
51
+ .j-menu__icon > svg {
52
+ width: 1rem;
53
+ height: 1rem;
54
+ }
55
+ .j-menu__item:focus .j-menu__icon {
56
+ color: var(--juxt-fg-secondary);
57
+ }
58
+ .j-menu__item--destructive .j-menu__icon {
59
+ color: inherit;
60
+ }
61
+ .j-menu__text {
62
+ flex: 1;
63
+ min-width: 0;
64
+ overflow: hidden;
65
+ text-overflow: ellipsis;
66
+ white-space: nowrap;
67
+ }
68
+ .j-menu__shortcut {
69
+ margin-left: var(--juxt-space-4);
70
+ color: var(--juxt-fg-muted);
71
+ font-size: var(--juxt-text-xs);
72
+ letter-spacing: 0.04em;
73
+ }
74
+ .j-menu__check {
75
+ flex: none;
76
+ width: 0.875rem;
77
+ height: 0.875rem;
78
+ margin-left: var(--juxt-space-4);
79
+ color: var(--juxt-accent-text);
80
+ opacity: 0;
81
+ }
82
+ .j-menu__check.is-checked {
83
+ opacity: 1;
84
+ }
85
+ .j-menu__chevron {
86
+ width: 0.875rem;
87
+ height: 0.875rem;
88
+ margin-right: -0.125rem;
89
+ color: var(--juxt-fg-muted);
90
+ }
91
+ .j-menu__separator {
92
+ height: 1px;
93
+ margin: var(--juxt-space-1) calc(var(--juxt-space-1) * -1);
94
+ background: var(--juxt-border-subtle);
95
+ }
96
+ .dark .j-menu__separator,
97
+ [data-theme='dark'] .j-menu__separator {
98
+ background: var(--juxt-border);
99
+ }
100
+ .j-menu__label {
101
+ padding: var(--juxt-space-1-5) var(--juxt-space-2) var(--juxt-space-1);
102
+ color: var(--juxt-fg-muted);
103
+ font-size: var(--juxt-text-xs);
104
+ font-weight: var(--juxt-weight-medium);
105
+ }
106
+ }
107
+
108
+ @layer theme, base, juxt, components, utilities;
109
+ @layer juxt {
110
+ .j-field {
111
+ display: flex;
112
+ flex-direction: column;
113
+ gap: var(--juxt-space-1-5);
114
+ min-width: 0;
115
+ font-family: var(--juxt-font-sans);
116
+ }
117
+ .j-field__label {
118
+ display: inline-flex;
119
+ align-items: baseline;
120
+ gap: var(--juxt-space-0-5);
121
+ width: fit-content;
122
+ color: var(--juxt-fg);
123
+ font-size: var(--juxt-text-sm);
124
+ font-weight: var(--juxt-weight-medium);
125
+ line-height: var(--juxt-leading-snug);
126
+ letter-spacing: var(--juxt-tracking-tight);
127
+ }
128
+ .j-field.is-disabled .j-field__label {
129
+ color: var(--juxt-fg-muted);
130
+ }
131
+ .j-field__required {
132
+ color: var(--juxt-fg-muted);
133
+ font-weight: var(--juxt-weight-regular);
134
+ }
135
+ .j-field__messages:empty {
136
+ display: none;
137
+ }
138
+ .j-field__description,
139
+ .j-field__error {
140
+ margin: 0;
141
+ font-size: var(--juxt-text-xs);
142
+ line-height: var(--juxt-leading-normal);
143
+ }
144
+ .j-field__description {
145
+ color: var(--juxt-fg-muted);
146
+ }
147
+ .j-field__error {
148
+ color: var(--juxt-danger-text);
149
+ }
150
+ .j-field-message-enter-active {
151
+ transition:
152
+ opacity var(--juxt-duration-fast) var(--juxt-ease-out),
153
+ transform var(--juxt-duration-normal) var(--juxt-ease-out);
154
+ }
155
+ .j-field-message-leave-active {
156
+ transition: opacity var(--juxt-duration-instant) var(--juxt-ease-in);
157
+ }
158
+ .j-field-message-enter-from {
159
+ opacity: 0;
160
+ transform: translateY(calc(var(--juxt-motion-shift) * -0.5));
161
+ }
162
+ .j-field-message-leave-to {
163
+ opacity: 0;
164
+ }
165
+ }
166
+
167
+ @layer theme, base, juxt, components, utilities;
168
+ @layer juxt {
169
+ .j-kbd-group {
170
+ display: inline-flex;
171
+ gap: 3px;
172
+ vertical-align: middle;
173
+ }
174
+ .j-kbd-group--sm .j-kbd,
175
+ .j-kbd--sm {
176
+ min-width: 1.0625rem;
177
+ height: 1.0625rem;
178
+ font-size: 0.625rem;
179
+ }
180
+ }
181
+
182
+ @layer theme, base, juxt, components, utilities;
183
+ @layer juxt {
184
+ .j-tooltip {
185
+ z-index: var(--juxt-z-tooltip);
186
+ box-sizing: border-box;
187
+ max-width: min(17.5rem, calc(100vw - 16px));
188
+ padding: var(--juxt-space-1) var(--juxt-space-2);
189
+ border: 1px solid var(--juxt-tooltip-border);
190
+ border-radius: var(--juxt-radius-sm);
191
+ background: var(--juxt-tooltip-bg);
192
+ box-shadow: var(--juxt-shadow-sm);
193
+ color: var(--juxt-tooltip-fg);
194
+ font-family: var(--juxt-font-sans);
195
+ font-size: var(--juxt-text-xs);
196
+ font-weight: var(--juxt-weight-medium);
197
+ line-height: var(--juxt-leading-snug);
198
+ letter-spacing: 0;
199
+ overflow-wrap: break-word;
200
+ pointer-events: auto;
201
+ }
202
+ .j-tooltip .j-kbd {
203
+ height: 1rem;
204
+ min-width: 1rem;
205
+ margin-left: var(--juxt-space-1);
206
+ border-color: rgb(255 255 255 / 0.14);
207
+ background: rgb(255 255 255 / 0.08);
208
+ color: rgb(255 255 255 / 0.72);
209
+ }
210
+ .j-tooltip-enter-active {
211
+ transition:
212
+ opacity var(--juxt-duration-fast) var(--juxt-ease-out),
213
+ transform var(--juxt-duration-fast) var(--juxt-ease-out);
214
+ }
215
+ .j-tooltip-leave-active {
216
+ transition: opacity var(--juxt-duration-instant) var(--juxt-ease-in);
217
+ }
218
+ .j-tooltip-enter-from,
219
+ .j-tooltip-leave-to {
220
+ opacity: 0;
221
+ }
222
+ .j-tooltip-enter-from {
223
+ transform: translate(
224
+ calc(var(--juxt-motion-shift) * 0.5 * var(--j-pop-x, 0)),
225
+ calc(var(--juxt-motion-shift) * 0.5 * var(--j-pop-dir, 0))
226
+ );
227
+ }
228
+ }
229
+
230
+ @layer theme, base, juxt, components, utilities;
231
+ @layer juxt {
232
+ .j-editor-button {
233
+ display: inline-grid;
234
+ flex: none;
235
+ place-items: center;
236
+ width: var(--juxt-control-sm);
237
+ height: var(--juxt-control-sm);
238
+ padding: 0;
239
+ border: 0;
240
+ border-radius: var(--juxt-radius-sm);
241
+ background: transparent;
242
+ color: var(--juxt-fg-secondary);
243
+ cursor: pointer;
244
+ -webkit-tap-highlight-color: transparent;
245
+ transition-property: background-color, color, outline-color, outline-offset, transform;
246
+ }
247
+ .j-editor-button > svg {
248
+ width: 1rem;
249
+ height: 1rem;
250
+ }
251
+ .j-editor-button:hover:not(:disabled) {
252
+ background: var(--juxt-surface-hover);
253
+ color: var(--juxt-fg);
254
+ }
255
+ .j-editor-button:active:not(:disabled) {
256
+ transform: scale(0.94);
257
+ transition-duration: var(--juxt-duration-instant);
258
+ }
259
+ .j-editor-button.is-active {
260
+ background: var(--juxt-surface-active);
261
+ color: var(--juxt-fg);
262
+ }
263
+ .j-editor-button:disabled {
264
+ color: var(--juxt-fg-disabled);
265
+ cursor: not-allowed;
266
+ }
267
+ .j-editor-button__keys {
268
+ margin-left: var(--juxt-space-1-5);
269
+ }
270
+ @media (prefers-reduced-motion: reduce) {
271
+ .j-editor-button:active:not(:disabled) {
272
+ transform: none;
273
+ }
274
+ }
275
+ }
276
+
277
+ @layer theme, base, juxt, components, utilities;
278
+ @layer juxt {
279
+ /* Frame: the same border, focus halo and invalid states as Input. */
280
+ .j-editor {
281
+ position: relative;
282
+ display: flex;
283
+ flex-direction: column;
284
+ border: 1px solid var(--juxt-border);
285
+ border-radius: var(--juxt-radius-md);
286
+ background: var(--juxt-surface);
287
+ box-shadow: var(--juxt-shadow-xs);
288
+ color: var(--juxt-fg);
289
+ font-family: var(--juxt-font-sans);
290
+ transition:
291
+ border-color var(--juxt-duration-fast) var(--juxt-ease-standard),
292
+ box-shadow var(--juxt-duration-normal) var(--juxt-ease-out);
293
+ }
294
+ .dark .j-editor,
295
+ [data-theme='dark'] .j-editor {
296
+ background: var(--juxt-surface-sunken);
297
+ }
298
+ .j-editor:hover:not(.is-disabled, :focus-within) {
299
+ border-color: var(--juxt-border-strong);
300
+ }
301
+ .j-editor:has(.ProseMirror-focused) {
302
+ border-color: var(--juxt-accent);
303
+ box-shadow: 0 0 0 3px var(--juxt-ring-soft);
304
+ }
305
+ .j-editor.is-invalid {
306
+ border-color: var(--juxt-danger-border);
307
+ }
308
+ .j-editor.is-invalid:has(.ProseMirror-focused) {
309
+ border-color: var(--juxt-danger);
310
+ box-shadow: 0 0 0 3px var(--juxt-danger-ring);
311
+ }
312
+ .j-editor.is-disabled {
313
+ background: var(--juxt-surface-sunken);
314
+ box-shadow: none;
315
+ opacity: 0.7;
316
+ }
317
+
318
+ /* Toolbar: stays reachable while you scroll a long document. */
319
+ .j-editor__toolbar {
320
+ position: sticky;
321
+ top: var(--j-editor-sticky-top, 0);
322
+ z-index: 1;
323
+ display: flex;
324
+ align-items: center;
325
+ gap: 2px;
326
+ padding: var(--juxt-space-1);
327
+ overflow-x: auto;
328
+ border-bottom: 1px solid var(--juxt-border-subtle);
329
+ border-radius: var(--juxt-radius-md) var(--juxt-radius-md) 0 0;
330
+ background: inherit;
331
+ scrollbar-width: none;
332
+ }
333
+ .j-editor__toolbar::-webkit-scrollbar {
334
+ display: none;
335
+ }
336
+ .dark .j-editor__toolbar,
337
+ [data-theme='dark'] .j-editor__toolbar {
338
+ border-bottom-color: var(--juxt-border);
339
+ }
340
+ .j-editor__divider {
341
+ flex: none;
342
+ width: 1px;
343
+ height: 1rem;
344
+ margin: 0 var(--juxt-space-1);
345
+ background: var(--juxt-border);
346
+ }
347
+ .j-editor__spacer {
348
+ flex: 1;
349
+ min-width: var(--juxt-space-2);
350
+ }
351
+ .j-editor__block {
352
+ display: inline-flex;
353
+ flex: none;
354
+ align-items: center;
355
+ gap: var(--juxt-space-1-5);
356
+ height: var(--juxt-control-sm);
357
+ padding: 0 var(--juxt-space-2);
358
+ border: 0;
359
+ border-radius: var(--juxt-radius-sm);
360
+ background: transparent;
361
+ color: var(--juxt-fg);
362
+ font: inherit;
363
+ font-size: var(--juxt-text-sm);
364
+ font-weight: var(--juxt-weight-medium);
365
+ cursor: pointer;
366
+ transition-property: background-color, outline-color, outline-offset;
367
+ }
368
+ .j-editor__block:hover:not(:disabled) {
369
+ background: var(--juxt-surface-hover);
370
+ }
371
+ .j-editor__block:disabled {
372
+ color: var(--juxt-fg-disabled);
373
+ cursor: not-allowed;
374
+ }
375
+ .j-editor__block > svg {
376
+ width: 1rem;
377
+ height: 1rem;
378
+ color: var(--juxt-fg-muted);
379
+ }
380
+ .j-editor__block-label {
381
+ min-width: 5.5rem;
382
+ text-align: left;
383
+ }
384
+ .j-editor__block .j-editor__block-chevron {
385
+ width: 0.75rem;
386
+ height: 0.75rem;
387
+ }
388
+
389
+ /* Writing area */
390
+ .j-editor__content {
391
+ flex: 1;
392
+ min-height: var(--j-editor-min);
393
+ max-height: var(--j-editor-max);
394
+ padding: var(--juxt-space-3) var(--juxt-space-4);
395
+ overflow-y: auto;
396
+ cursor: text;
397
+ }
398
+ .j-editor.is-disabled .j-editor__content,
399
+ .j-editor.is-readonly .j-editor__content {
400
+ cursor: default;
401
+ }
402
+ .j-editor__ssr {
403
+ margin: 0;
404
+ color: var(--juxt-fg-muted);
405
+ }
406
+ .j-editor__footer {
407
+ display: flex;
408
+ justify-content: space-between;
409
+ gap: var(--juxt-space-3);
410
+ padding: var(--juxt-space-1-5) var(--juxt-space-4);
411
+ border-top: 1px solid var(--juxt-border-subtle);
412
+ color: var(--juxt-fg-muted);
413
+ font-size: var(--juxt-text-xs);
414
+ font-variant-numeric: tabular-nums;
415
+ }
416
+ .dark .j-editor__footer,
417
+ [data-theme='dark'] .j-editor__footer {
418
+ border-top-color: var(--juxt-border);
419
+ }
420
+ .j-editor__footer .is-near {
421
+ color: var(--juxt-warning-text);
422
+ }
423
+ .j-editor__footer .is-at {
424
+ color: var(--juxt-danger-text);
425
+ }
426
+
427
+ /* ---------------------------------------------------------------------------
428
+ * Document typography. Deliberately close to the docs prose: calm, readable,
429
+ * a clear hierarchy without shouting.
430
+ * ------------------------------------------------------------------------ */
431
+ .j-editor__prose {
432
+ min-height: calc(var(--j-editor-min) - var(--juxt-space-6));
433
+ color: var(--juxt-fg);
434
+ font-size: 0.9375rem;
435
+ line-height: 1.7;
436
+ letter-spacing: var(--juxt-tracking-tight);
437
+ white-space: pre-wrap;
438
+ word-wrap: break-word;
439
+ outline: none;
440
+ font-variant-ligatures: none;
441
+ font-feature-settings: 'liga' 0;
442
+ }
443
+ .j-editor__prose > * + * {
444
+ margin-top: 0.75em;
445
+ }
446
+ .j-editor__prose p {
447
+ margin: 0;
448
+ }
449
+ .j-editor__prose :is(h1, h2, h3) {
450
+ margin: 1.4em 0 0;
451
+ color: var(--juxt-fg);
452
+ font-weight: var(--juxt-weight-semibold);
453
+ line-height: 1.3;
454
+ letter-spacing: var(--juxt-tracking-tighter);
455
+ }
456
+ .j-editor__prose > :is(h1, h2, h3):first-child {
457
+ margin-top: 0;
458
+ }
459
+ .j-editor__prose h1 {
460
+ font-size: 1.625rem;
461
+ }
462
+ .j-editor__prose h2 {
463
+ font-size: 1.3125rem;
464
+ }
465
+ .j-editor__prose h3 {
466
+ font-size: 1.0625rem;
467
+ }
468
+ .j-editor__prose :is(ul, ol) {
469
+ margin-bottom: 0;
470
+ padding-left: 1.375em;
471
+ }
472
+ .j-editor__prose li + li {
473
+ margin-top: 0.25em;
474
+ }
475
+ .j-editor__prose li > p {
476
+ margin: 0;
477
+ }
478
+ .j-editor__prose li::marker {
479
+ color: var(--juxt-fg-muted);
480
+ }
481
+ .j-editor__prose ul ul {
482
+ list-style-type: circle;
483
+ }
484
+
485
+ /* To-do items look and feel like JCheckbox. */
486
+ .j-editor__prose ul[data-type='taskList'] {
487
+ padding-left: 0.125em;
488
+ list-style: none;
489
+ }
490
+ .j-editor__prose ul[data-type='taskList'] li {
491
+ display: flex;
492
+ align-items: flex-start;
493
+ gap: 0.625em;
494
+ }
495
+ .j-editor__prose ul[data-type='taskList'] li > label {
496
+ display: inline-flex;
497
+ flex: none;
498
+ margin-top: 0.2em;
499
+ user-select: none;
500
+ }
501
+ .j-editor__prose ul[data-type='taskList'] li > div {
502
+ flex: 1;
503
+ min-width: 0;
504
+ }
505
+ .j-editor__prose ul[data-type='taskList'] input[type='checkbox'] {
506
+ display: grid;
507
+ place-content: center;
508
+ width: 1rem;
509
+ height: 1rem;
510
+ margin: 0;
511
+ border: 1px solid var(--juxt-border-strong);
512
+ border-radius: var(--juxt-radius-xs);
513
+ background: var(--juxt-surface);
514
+ cursor: pointer;
515
+ appearance: none;
516
+ transition:
517
+ background-color var(--juxt-duration-fast) var(--juxt-ease-standard),
518
+ border-color var(--juxt-duration-fast) var(--juxt-ease-standard);
519
+ }
520
+ .j-editor__prose ul[data-type='taskList'] input[type='checkbox']::after {
521
+ content: '';
522
+ width: 0.5rem;
523
+ height: 0.28rem;
524
+ margin-top: -0.1rem;
525
+ border-bottom: 2px solid var(--juxt-accent-fg);
526
+ border-left: 2px solid var(--juxt-accent-fg);
527
+ opacity: 0;
528
+ transform: rotate(-45deg) scale(0.6);
529
+ transition:
530
+ opacity var(--juxt-duration-instant) var(--juxt-ease-standard),
531
+ transform var(--juxt-duration-normal) var(--juxt-ease-out);
532
+ }
533
+ .j-editor__prose ul[data-type='taskList'] input[type='checkbox']:checked {
534
+ border-color: var(--juxt-accent);
535
+ background: var(--juxt-accent);
536
+ }
537
+ .j-editor__prose ul[data-type='taskList'] input[type='checkbox']:checked::after {
538
+ opacity: 1;
539
+ transform: rotate(-45deg);
540
+ }
541
+ .j-editor__prose ul[data-type='taskList'] input[type='checkbox']:focus-visible {
542
+ outline: 2px solid var(--juxt-ring);
543
+ outline-offset: 2px;
544
+ }
545
+ .j-editor__prose li[data-checked='true'] > div {
546
+ color: var(--juxt-fg-muted);
547
+ text-decoration: line-through;
548
+ text-decoration-color: var(--juxt-border-strong);
549
+ }
550
+ .j-editor__prose blockquote {
551
+ margin-left: 0;
552
+ margin-right: 0;
553
+ padding-left: 1em;
554
+ border-left: 2px solid var(--juxt-border-strong);
555
+ color: var(--juxt-fg-secondary);
556
+ }
557
+ .j-editor__prose a {
558
+ color: var(--juxt-fg);
559
+ text-decoration: underline;
560
+ text-decoration-color: var(--juxt-border-strong);
561
+ text-underline-offset: 3px;
562
+ cursor: text;
563
+ transition: text-decoration-color var(--juxt-duration-fast) var(--juxt-ease-standard);
564
+ }
565
+ .j-editor__prose a:hover {
566
+ text-decoration-color: var(--juxt-accent);
567
+ }
568
+ .j-editor__prose code {
569
+ padding: 0.1em 0.3em;
570
+ border: 1px solid var(--juxt-border-subtle);
571
+ border-radius: var(--juxt-radius-xs);
572
+ background: var(--juxt-surface-sunken);
573
+ font-family: var(--juxt-font-mono);
574
+ font-size: 0.85em;
575
+ }
576
+ .dark .j-editor__prose code,
577
+ [data-theme='dark'] .j-editor__prose code {
578
+ border-color: var(--juxt-border);
579
+ background: var(--juxt-surface-raised);
580
+ }
581
+ .j-editor__prose pre {
582
+ padding: 0.875em 1em;
583
+ overflow-x: auto;
584
+ border: 1px solid var(--juxt-border-subtle);
585
+ border-radius: var(--juxt-radius-md);
586
+ background: var(--juxt-surface-sunken);
587
+ font-family: var(--juxt-font-mono);
588
+ font-size: 0.8125rem;
589
+ line-height: 1.65;
590
+ white-space: pre;
591
+ }
592
+ .dark .j-editor__prose pre,
593
+ [data-theme='dark'] .j-editor__prose pre {
594
+ border-color: var(--juxt-border);
595
+ background: var(--juxt-bg);
596
+ }
597
+ .j-editor__prose pre code {
598
+ padding: 0;
599
+ border: 0;
600
+ background: none;
601
+ font-size: inherit;
602
+ }
603
+ .j-editor__prose hr {
604
+ height: 1px;
605
+ margin: 1.5em 0;
606
+ border: 0;
607
+ background: var(--juxt-border);
608
+ }
609
+ .j-editor__prose hr.ProseMirror-selectednode {
610
+ outline: 2px solid var(--juxt-ring);
611
+ outline-offset: 4px;
612
+ }
613
+ .j-editor__prose mark {
614
+ padding: 0.05em 0.1em;
615
+ border-radius: 2px;
616
+ background: var(--juxt-warning-soft);
617
+ color: inherit;
618
+ }
619
+ .j-editor__prose ::selection {
620
+ background: var(--juxt-accent-soft);
621
+ }
622
+
623
+ /* Placeholder: on an empty document, and on each empty heading. */
624
+ .j-editor__prose .is-empty::before {
625
+ content: attr(data-placeholder);
626
+ float: left;
627
+ height: 0;
628
+ color: var(--juxt-fg-muted);
629
+ pointer-events: none;
630
+ }
631
+
632
+ /* The per-line hint is quieter than the document placeholder. */
633
+ .j-editor__prose .is-empty:not(.is-editor-empty):not(h1, h2, h3)::before {
634
+ color: var(--juxt-fg-disabled);
635
+ }
636
+ .j-editor__prose .ProseMirror-gapcursor {
637
+ display: none;
638
+ position: relative;
639
+ pointer-events: none;
640
+ }
641
+ .j-editor__prose.ProseMirror-focused .ProseMirror-gapcursor {
642
+ display: block;
643
+ }
644
+ .j-editor__prose .ProseMirror-gapcursor::after {
645
+ content: '';
646
+ position: absolute;
647
+ top: -2px;
648
+ display: block;
649
+ width: 20px;
650
+ border-top: 1px solid var(--juxt-fg);
651
+ animation: j-editor-cursor 1.1s steps(2, start) infinite;
652
+ }
653
+ @keyframes j-editor-cursor {
654
+ to {
655
+ visibility: hidden;
656
+ }
657
+ }
658
+
659
+ /* Selection toolbar */
660
+ .j-editor__bubble {
661
+ z-index: var(--juxt-z-popover);
662
+ display: flex;
663
+ align-items: center;
664
+ gap: 2px;
665
+ padding: 3px;
666
+ border: 1px solid var(--juxt-border);
667
+ border-radius: var(--juxt-radius-md);
668
+ background: var(--juxt-surface-raised);
669
+ box-shadow: var(--juxt-shadow-md);
670
+ animation: j-editor-bubble-in var(--juxt-duration-fast) var(--juxt-ease-out);
671
+ }
672
+ @keyframes j-editor-bubble-in {
673
+ from {
674
+ opacity: 0;
675
+ transform: translateY(calc(var(--juxt-motion-shift) * 0.5)) scale(var(--juxt-motion-scale));
676
+ }
677
+ }
678
+
679
+ /* Slash menu */
680
+ .j-editor__slash {
681
+ z-index: var(--juxt-z-popover);
682
+ width: 17rem;
683
+ max-height: min(20rem, var(--j-available-height, 20rem));
684
+ padding: var(--juxt-space-1);
685
+ overflow-y: auto;
686
+ overscroll-behavior: contain;
687
+ }
688
+ .j-editor__slash-label {
689
+ padding: var(--juxt-space-1-5) var(--juxt-space-2) var(--juxt-space-1);
690
+ color: var(--juxt-fg-muted);
691
+ font-size: var(--juxt-text-xs);
692
+ font-weight: var(--juxt-weight-medium);
693
+ }
694
+ .j-editor__slash-item {
695
+ position: relative;
696
+ display: flex;
697
+ align-items: center;
698
+ gap: var(--juxt-space-2-5);
699
+ padding: var(--juxt-space-1-5) var(--juxt-space-2);
700
+ border-radius: var(--juxt-radius-sm);
701
+ cursor: pointer;
702
+ user-select: none;
703
+ }
704
+ .j-editor__slash-item.is-active {
705
+ background: var(--juxt-surface-hover);
706
+ }
707
+ .j-editor__slash-item.is-active::before {
708
+ content: '';
709
+ position: absolute;
710
+ top: 0.625rem;
711
+ bottom: 0.625rem;
712
+ left: 0;
713
+ width: 2px;
714
+ border-radius: 0 2px 2px 0;
715
+ background: var(--juxt-accent);
716
+ }
717
+ .j-editor__slash-icon {
718
+ display: grid;
719
+ flex: none;
720
+ place-items: center;
721
+ width: 2rem;
722
+ height: 2rem;
723
+ border: 1px solid var(--juxt-border);
724
+ border-radius: var(--juxt-radius-sm);
725
+ background: var(--juxt-surface);
726
+ color: var(--juxt-fg-secondary);
727
+ }
728
+ .j-editor__slash-icon > svg {
729
+ width: 1rem;
730
+ height: 1rem;
731
+ }
732
+ .j-editor__slash-text {
733
+ display: flex;
734
+ flex: 1;
735
+ flex-direction: column;
736
+ min-width: 0;
737
+ }
738
+ .j-editor__slash-title {
739
+ color: var(--juxt-fg);
740
+ font-size: var(--juxt-text-sm);
741
+ font-weight: var(--juxt-weight-medium);
742
+ }
743
+ .j-editor__slash-description {
744
+ overflow: hidden;
745
+ color: var(--juxt-fg-muted);
746
+ font-size: var(--juxt-text-xs);
747
+ text-overflow: ellipsis;
748
+ white-space: nowrap;
749
+ }
750
+ .j-editor__slash-md {
751
+ color: var(--juxt-fg-muted);
752
+ font-family: var(--juxt-font-mono);
753
+ font-size: var(--juxt-text-2xs);
754
+ }
755
+ .j-editor__slash-empty {
756
+ padding: var(--juxt-space-3) var(--juxt-space-2);
757
+ color: var(--juxt-fg-muted);
758
+ font-size: var(--juxt-text-sm);
759
+ }
760
+
761
+ /* Link editor */
762
+ .j-editor__link {
763
+ z-index: var(--juxt-z-popover);
764
+ display: flex;
765
+ align-items: center;
766
+ gap: 2px;
767
+ width: min(22rem, calc(100vw - 16px));
768
+ padding: 3px 3px 3px var(--juxt-space-2-5);
769
+ }
770
+ .j-editor__link-icon {
771
+ flex: none;
772
+ width: 0.875rem;
773
+ height: 0.875rem;
774
+ color: var(--juxt-fg-muted);
775
+ }
776
+ .j-editor__link-input {
777
+ flex: 1;
778
+ min-width: 0;
779
+ height: var(--juxt-control-sm);
780
+ padding: 0 var(--juxt-space-1-5);
781
+ border: 0;
782
+ outline: none;
783
+ background: transparent;
784
+ color: var(--juxt-fg);
785
+ font: inherit;
786
+ font-size: var(--juxt-text-sm);
787
+ }
788
+ .j-editor__link-input::placeholder {
789
+ color: var(--juxt-fg-muted);
790
+ }
791
+ @media (prefers-reduced-motion: reduce) {
792
+ .j-editor__bubble {
793
+ animation: none;
794
+ }
795
+ }
796
+ }
1
797
 
2
798
  @layer theme, base, juxt, components, utilities;
3
799
 
@@ -2151,112 +2947,6 @@ to {
2151
2947
  }
2152
2948
  }
2153
2949
 
2154
- @layer theme, base, juxt, components, utilities;
2155
- @layer juxt {
2156
- .j-menu {
2157
- z-index: var(--juxt-z-popover);
2158
- box-sizing: border-box;
2159
- min-width: 11rem;
2160
- max-width: calc(100vw - 16px);
2161
- max-height: var(--j-available-height, 24rem);
2162
- padding: var(--juxt-space-1);
2163
- overflow-y: auto;
2164
- overscroll-behavior: contain;
2165
- outline: none;
2166
- }
2167
- .j-menu__item {
2168
- position: relative;
2169
- display: flex;
2170
- align-items: center;
2171
- gap: var(--juxt-space-2);
2172
- min-height: var(--juxt-control-sm);
2173
- padding: 0 var(--juxt-space-2);
2174
- border-radius: var(--juxt-radius-xs);
2175
- color: var(--juxt-fg);
2176
- font-size: var(--juxt-text-md);
2177
- letter-spacing: var(--juxt-tracking-tight);
2178
- text-decoration: none;
2179
- cursor: pointer;
2180
- outline: none;
2181
- user-select: none;
2182
- -webkit-tap-highlight-color: transparent;
2183
- }
2184
- .j-menu__item:focus,
2185
- .j-menu__item[aria-expanded='true'] {
2186
- background: var(--juxt-surface-hover);
2187
- }
2188
- .j-menu__item[aria-disabled='true'] {
2189
- color: var(--juxt-fg-disabled);
2190
- cursor: not-allowed;
2191
- }
2192
- .j-menu__item--destructive {
2193
- color: var(--juxt-danger-text);
2194
- }
2195
- .j-menu__item--destructive:focus {
2196
- background: var(--juxt-danger-soft);
2197
- }
2198
- .j-menu__icon {
2199
- display: inline-flex;
2200
- flex: none;
2201
- color: var(--juxt-fg-muted);
2202
- }
2203
- .j-menu__icon > svg {
2204
- width: 1rem;
2205
- height: 1rem;
2206
- }
2207
- .j-menu__item:focus .j-menu__icon {
2208
- color: var(--juxt-fg-secondary);
2209
- }
2210
- .j-menu__item--destructive .j-menu__icon {
2211
- color: inherit;
2212
- }
2213
- .j-menu__text {
2214
- flex: 1;
2215
- min-width: 0;
2216
- overflow: hidden;
2217
- text-overflow: ellipsis;
2218
- white-space: nowrap;
2219
- }
2220
- .j-menu__shortcut {
2221
- margin-left: var(--juxt-space-4);
2222
- color: var(--juxt-fg-muted);
2223
- font-size: var(--juxt-text-xs);
2224
- letter-spacing: 0.04em;
2225
- }
2226
- .j-menu__check {
2227
- flex: none;
2228
- width: 0.875rem;
2229
- height: 0.875rem;
2230
- margin-left: var(--juxt-space-4);
2231
- color: var(--juxt-accent-text);
2232
- opacity: 0;
2233
- }
2234
- .j-menu__check.is-checked {
2235
- opacity: 1;
2236
- }
2237
- .j-menu__chevron {
2238
- width: 0.875rem;
2239
- height: 0.875rem;
2240
- margin-right: -0.125rem;
2241
- color: var(--juxt-fg-muted);
2242
- }
2243
- .j-menu__separator {
2244
- height: 1px;
2245
- margin: var(--juxt-space-1) calc(var(--juxt-space-1) * -1);
2246
- background: var(--juxt-border-subtle);
2247
- }
2248
- .dark .j-menu__separator,
2249
- [data-theme='dark'] .j-menu__separator {
2250
- background: var(--juxt-border);
2251
- }
2252
- .j-menu__label {
2253
- padding: var(--juxt-space-1-5) var(--juxt-space-2) var(--juxt-space-1);
2254
- color: var(--juxt-fg-muted);
2255
- font-size: var(--juxt-text-xs);
2256
- font-weight: var(--juxt-weight-medium);
2257
- }
2258
- }
2259
-
2260
2950
  @layer theme, base, juxt, components, utilities;
2261
2951
  @layer juxt {
2262
2952
  .j-empty-state {
@@ -2437,65 +3127,6 @@ to {
2437
3127
  }
2438
3128
  }
2439
3129
 
2440
- @layer theme, base, juxt, components, utilities;
2441
- @layer juxt {
2442
- .j-field {
2443
- display: flex;
2444
- flex-direction: column;
2445
- gap: var(--juxt-space-1-5);
2446
- min-width: 0;
2447
- font-family: var(--juxt-font-sans);
2448
- }
2449
- .j-field__label {
2450
- display: inline-flex;
2451
- align-items: baseline;
2452
- gap: var(--juxt-space-0-5);
2453
- width: fit-content;
2454
- color: var(--juxt-fg);
2455
- font-size: var(--juxt-text-sm);
2456
- font-weight: var(--juxt-weight-medium);
2457
- line-height: var(--juxt-leading-snug);
2458
- letter-spacing: var(--juxt-tracking-tight);
2459
- }
2460
- .j-field.is-disabled .j-field__label {
2461
- color: var(--juxt-fg-muted);
2462
- }
2463
- .j-field__required {
2464
- color: var(--juxt-fg-muted);
2465
- font-weight: var(--juxt-weight-regular);
2466
- }
2467
- .j-field__messages:empty {
2468
- display: none;
2469
- }
2470
- .j-field__description,
2471
- .j-field__error {
2472
- margin: 0;
2473
- font-size: var(--juxt-text-xs);
2474
- line-height: var(--juxt-leading-normal);
2475
- }
2476
- .j-field__description {
2477
- color: var(--juxt-fg-muted);
2478
- }
2479
- .j-field__error {
2480
- color: var(--juxt-danger-text);
2481
- }
2482
- .j-field-message-enter-active {
2483
- transition:
2484
- opacity var(--juxt-duration-fast) var(--juxt-ease-out),
2485
- transform var(--juxt-duration-normal) var(--juxt-ease-out);
2486
- }
2487
- .j-field-message-leave-active {
2488
- transition: opacity var(--juxt-duration-instant) var(--juxt-ease-in);
2489
- }
2490
- .j-field-message-enter-from {
2491
- opacity: 0;
2492
- transform: translateY(calc(var(--juxt-motion-shift) * -0.5));
2493
- }
2494
- .j-field-message-leave-to {
2495
- opacity: 0;
2496
- }
2497
- }
2498
-
2499
3130
  @layer theme, base, juxt, components, utilities;
2500
3131
  @layer juxt {
2501
3132
  .j-input__native {
@@ -2523,21 +3154,6 @@ to {
2523
3154
  }
2524
3155
  }
2525
3156
 
2526
- @layer theme, base, juxt, components, utilities;
2527
- @layer juxt {
2528
- .j-kbd-group {
2529
- display: inline-flex;
2530
- gap: 3px;
2531
- vertical-align: middle;
2532
- }
2533
- .j-kbd-group--sm .j-kbd,
2534
- .j-kbd--sm {
2535
- min-width: 1.0625rem;
2536
- height: 1.0625rem;
2537
- font-size: 0.625rem;
2538
- }
2539
- }
2540
-
2541
3157
  @layer theme, base, juxt, components, utilities;
2542
3158
  @layer juxt {
2543
3159
  .j-navbar {
@@ -4708,54 +5324,6 @@ to {
4708
5324
  }
4709
5325
  }
4710
5326
 
4711
- @layer theme, base, juxt, components, utilities;
4712
- @layer juxt {
4713
- .j-tooltip {
4714
- z-index: var(--juxt-z-tooltip);
4715
- box-sizing: border-box;
4716
- max-width: min(17.5rem, calc(100vw - 16px));
4717
- padding: var(--juxt-space-1) var(--juxt-space-2);
4718
- border: 1px solid var(--juxt-tooltip-border);
4719
- border-radius: var(--juxt-radius-sm);
4720
- background: var(--juxt-tooltip-bg);
4721
- box-shadow: var(--juxt-shadow-sm);
4722
- color: var(--juxt-tooltip-fg);
4723
- font-family: var(--juxt-font-sans);
4724
- font-size: var(--juxt-text-xs);
4725
- font-weight: var(--juxt-weight-medium);
4726
- line-height: var(--juxt-leading-snug);
4727
- letter-spacing: 0;
4728
- overflow-wrap: break-word;
4729
- pointer-events: auto;
4730
- }
4731
- .j-tooltip .j-kbd {
4732
- height: 1rem;
4733
- min-width: 1rem;
4734
- margin-left: var(--juxt-space-1);
4735
- border-color: rgb(255 255 255 / 0.14);
4736
- background: rgb(255 255 255 / 0.08);
4737
- color: rgb(255 255 255 / 0.72);
4738
- }
4739
- .j-tooltip-enter-active {
4740
- transition:
4741
- opacity var(--juxt-duration-fast) var(--juxt-ease-out),
4742
- transform var(--juxt-duration-fast) var(--juxt-ease-out);
4743
- }
4744
- .j-tooltip-leave-active {
4745
- transition: opacity var(--juxt-duration-instant) var(--juxt-ease-in);
4746
- }
4747
- .j-tooltip-enter-from,
4748
- .j-tooltip-leave-to {
4749
- opacity: 0;
4750
- }
4751
- .j-tooltip-enter-from {
4752
- transform: translate(
4753
- calc(var(--juxt-motion-shift) * 0.5 * var(--j-pop-x, 0)),
4754
- calc(var(--juxt-motion-shift) * 0.5 * var(--j-pop-dir, 0))
4755
- );
4756
- }
4757
- }
4758
-
4759
5327
  @layer theme, base, juxt, components, utilities;
4760
5328
  @layer juxt {
4761
5329
  /*