@quilltap/theme-storybook 1.0.84 → 1.0.86

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/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  All notable changes to `@quilltap/theme-storybook` will be documented in this file.
4
4
 
5
+ ## [1.0.85] - 2026-10-26
6
+
7
+ ### Added
8
+ - The diagram lightbox in `qt-components.css`, mirroring the app's `_content.css`: a zoom-in cursor and focus ring on a clickable `.qt-diagram-canvas[role="button"]`, the full-window `.qt-diagram-lightbox` with its toolbar (`-bar`, `-group`, `-button` with hover / pressed / disabled / focus states, `-zoom` readout, `-check` for the Transparent toggle), the pan-and-zoom `-viewport`, the drawing's `-sheet` (with a checkerboard under `[data-transparent="true"]`) and the `-hint` line. Colours read new `--qt-diagram-lightbox-*` variables, defaulting to the `--qt-overlay-*` tokens.
9
+
5
10
  ## [1.0.84] - 2026-10-25
6
11
 
7
12
  ### Added
package/dist/index.css CHANGED
@@ -300,6 +300,12 @@ body {
300
300
  --qt-status-danger-border: var(--color-destructive);
301
301
  --qt-punctuation-warning-bg: color-mix(in srgb, var(--color-warning) 35%, transparent);
302
302
  --qt-punctuation-warning-underline: var(--color-warning);
303
+ --qt-punctuation-no-dialogue-bg: color-mix(in srgb, var(--color-warning) 14%, transparent);
304
+ --qt-punctuation-no-dialogue-underline: var(--color-warning);
305
+ --qt-composer-narration-fg: color-mix(in srgb, var(--color-foreground) 65%, var(--color-primary));
306
+ --qt-composer-narration-bg: color-mix(in srgb, var(--color-primary) 7%, transparent);
307
+ --qt-composer-ooc-fg: var(--qt-rp-ooc-color);
308
+ --qt-composer-ooc-bg: var(--qt-rp-ooc-bg);
303
309
  --qt-badge-primary-bg: var(--color-primary);
304
310
  --qt-badge-primary-fg: var(--color-primary-foreground);
305
311
  --qt-badge-secondary-bg: var(--color-secondary);
@@ -548,6 +554,15 @@ body {
548
554
  "Chalkboard SE",
549
555
  "Marker Felt",
550
556
  cursive;
557
+ --qt-diagram-lightbox-backdrop: var(--qt-overlay-bg);
558
+ --qt-diagram-lightbox-fg: var(--qt-overlay-fg);
559
+ --qt-diagram-lightbox-muted-fg: var(--qt-overlay-muted-fg);
560
+ --qt-diagram-lightbox-button-bg: var(--qt-overlay-btn-bg);
561
+ --qt-diagram-lightbox-button-hover-bg: var(--qt-overlay-btn-hover-bg);
562
+ --qt-diagram-lightbox-pressed-border: var(--qt-overlay-muted-fg);
563
+ --qt-diagram-lightbox-shadow: 0 10px 40px rgb(0 0 0 / 0.45);
564
+ --qt-diagram-lightbox-check-a: #ffffff;
565
+ --qt-diagram-lightbox-check-b: #d4d4d8;
551
566
  --qt-link-color: var(--color-primary);
552
567
  --qt-link-hover-color: color-mix(in srgb, var(--color-primary) 80%, black);
553
568
  --qt-link-decoration: none;
@@ -1935,6 +1950,20 @@ body {
1935
1950
  text-decoration: underline wavy var(--qt-punctuation-warning-underline);
1936
1951
  text-decoration-thickness: 2px;
1937
1952
  }
1953
+ ::highlight(qt-punctuation-no-dialogue) {
1954
+ background-color: var(--qt-punctuation-no-dialogue-bg);
1955
+ -webkit-text-decoration: underline dotted var(--qt-punctuation-no-dialogue-underline);
1956
+ text-decoration: underline dotted var(--qt-punctuation-no-dialogue-underline);
1957
+ text-decoration-thickness: 2px;
1958
+ }
1959
+ ::highlight(qt-composer-narration) {
1960
+ color: var(--qt-composer-narration-fg);
1961
+ background-color: var(--qt-composer-narration-bg);
1962
+ }
1963
+ ::highlight(qt-composer-ooc) {
1964
+ color: var(--qt-composer-ooc-fg);
1965
+ background-color: var(--qt-composer-ooc-bg);
1966
+ }
1938
1967
  .qt-lexical-contenteditable {
1939
1968
  overflow-y: auto;
1940
1969
  position: relative;
@@ -3374,6 +3403,127 @@ body {
3374
3403
  white-space: pre-wrap;
3375
3404
  word-break: break-word;
3376
3405
  }
3406
+ .qt-diagram-canvas[role=button] {
3407
+ cursor: zoom-in;
3408
+ border-radius: var(--radius-sm);
3409
+ }
3410
+ .qt-diagram-canvas[role=button]:focus-visible {
3411
+ outline: 2px solid var(--color-primary);
3412
+ outline-offset: 2px;
3413
+ }
3414
+ .qt-diagram-lightbox {
3415
+ position: fixed;
3416
+ inset: 0;
3417
+ z-index: 100;
3418
+ display: flex;
3419
+ flex-direction: column;
3420
+ background: var(--qt-diagram-lightbox-backdrop);
3421
+ backdrop-filter: blur(4px);
3422
+ color: var(--qt-diagram-lightbox-fg);
3423
+ outline: none;
3424
+ }
3425
+ .qt-diagram-lightbox-bar {
3426
+ display: flex;
3427
+ flex-wrap: wrap;
3428
+ justify-content: space-between;
3429
+ align-items: center;
3430
+ gap: 0.5rem;
3431
+ padding: 0.75rem 1rem;
3432
+ }
3433
+ .qt-diagram-lightbox-group {
3434
+ display: flex;
3435
+ flex-wrap: wrap;
3436
+ align-items: center;
3437
+ gap: 0.25rem;
3438
+ }
3439
+ .qt-diagram-lightbox-button {
3440
+ display: inline-flex;
3441
+ align-items: center;
3442
+ gap: 0.375rem;
3443
+ min-height: 2rem;
3444
+ padding: 0.25rem 0.625rem;
3445
+ border-radius: var(--radius-sm);
3446
+ border: 1px solid transparent;
3447
+ background: var(--qt-diagram-lightbox-button-bg);
3448
+ color: inherit;
3449
+ font-size: 0.8125rem;
3450
+ line-height: 1.25rem;
3451
+ cursor: pointer;
3452
+ transition: background-color 150ms, border-color 150ms;
3453
+ }
3454
+ .qt-diagram-lightbox-button:hover,
3455
+ .qt-diagram-lightbox-button[aria-pressed=true] {
3456
+ background: var(--qt-diagram-lightbox-button-hover-bg);
3457
+ }
3458
+ .qt-diagram-lightbox-button[aria-pressed=true] {
3459
+ border-color: var(--qt-diagram-lightbox-pressed-border);
3460
+ }
3461
+ .qt-diagram-lightbox-button:disabled {
3462
+ opacity: 0.6;
3463
+ cursor: progress;
3464
+ }
3465
+ .qt-diagram-lightbox-button:focus-visible,
3466
+ .qt-diagram-lightbox-check:focus-within {
3467
+ outline: 2px solid var(--color-primary);
3468
+ outline-offset: 1px;
3469
+ }
3470
+ .qt-diagram-lightbox-zoom {
3471
+ min-width: 3.5rem;
3472
+ text-align: center;
3473
+ font-size: 0.8125rem;
3474
+ font-variant-numeric: tabular-nums;
3475
+ color: var(--qt-diagram-lightbox-muted-fg);
3476
+ }
3477
+ .qt-diagram-lightbox-check {
3478
+ display: inline-flex;
3479
+ align-items: center;
3480
+ gap: 0.375rem;
3481
+ padding: 0.25rem 0.5rem;
3482
+ border-radius: var(--radius-sm);
3483
+ font-size: 0.8125rem;
3484
+ cursor: pointer;
3485
+ }
3486
+ .qt-diagram-lightbox-check > input {
3487
+ accent-color: var(--color-primary);
3488
+ }
3489
+ .qt-diagram-lightbox-viewport {
3490
+ position: relative;
3491
+ flex: 1 1 auto;
3492
+ min-height: 0;
3493
+ overflow: hidden;
3494
+ touch-action: none;
3495
+ -webkit-user-select: none;
3496
+ -moz-user-select: none;
3497
+ user-select: none;
3498
+ cursor: grab;
3499
+ }
3500
+ .qt-diagram-lightbox-viewport:active {
3501
+ cursor: grabbing;
3502
+ }
3503
+ .qt-diagram-lightbox-sheet {
3504
+ position: absolute;
3505
+ border-radius: var(--qt-diagram-radius);
3506
+ background: var(--qt-diagram-bg);
3507
+ color: var(--qt-diagram-fg);
3508
+ box-shadow: var(--qt-diagram-lightbox-shadow);
3509
+ }
3510
+ .qt-diagram-lightbox-sheet[data-transparent=true] {
3511
+ background-color: var(--qt-diagram-lightbox-check-a);
3512
+ background-image:
3513
+ conic-gradient(
3514
+ var(--qt-diagram-lightbox-check-b) 25%,
3515
+ transparent 0 50%,
3516
+ var(--qt-diagram-lightbox-check-b) 0 75%,
3517
+ transparent 0);
3518
+ background-size: 16px 16px;
3519
+ }
3520
+ .qt-diagram-lightbox-hint {
3521
+ margin: 0;
3522
+ padding: 0.5rem 1rem 0.75rem;
3523
+ text-align: center;
3524
+ font-size: 0.75rem;
3525
+ color: var(--qt-diagram-lightbox-muted-fg);
3526
+ }
3377
3527
  .qt-wikilink {
3378
3528
  color: var(--color-primary);
3379
3529
  font-weight: 500;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quilltap/theme-storybook",
3
- "version": "1.0.84",
3
+ "version": "1.0.86",
4
4
  "description": "Storybook preset and stories for developing Quilltap theme plugins",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -169,6 +169,14 @@
169
169
  /* Composer punctuation warnings (PunctuationLintPlugin, ::highlight) */
170
170
  --qt-punctuation-warning-bg: color-mix(in srgb, var(--color-warning) 35%, transparent);
171
171
  --qt-punctuation-warning-underline: var(--color-warning);
172
+ /* Prose mode (Novel-like templates): no dialogue in the draft at all */
173
+ --qt-punctuation-no-dialogue-bg: color-mix(in srgb, var(--color-warning) 14%, transparent);
174
+ --qt-punctuation-no-dialogue-underline: var(--color-warning);
175
+ /* Prose mode composer preview: narration, and ((out of character)) asides */
176
+ --qt-composer-narration-fg: color-mix(in srgb, var(--color-foreground) 65%, var(--color-primary));
177
+ --qt-composer-narration-bg: color-mix(in srgb, var(--color-primary) 7%, transparent);
178
+ --qt-composer-ooc-fg: var(--qt-rp-ooc-color);
179
+ --qt-composer-ooc-bg: var(--qt-rp-ooc-bg);
172
180
 
173
181
  /* Badge palette tokens - referenced by the provider badges */
174
182
  --qt-badge-primary-bg: var(--color-primary);
@@ -472,6 +480,17 @@
472
480
  --qt-diagram-placeholder-height: 8rem;
473
481
  --qt-diagram-font: var(--font-sans);
474
482
  --qt-diagram-hand-font: "Segoe Print", "Bradley Hand", "Chalkboard SE", "Marker Felt", cursive;
483
+ /* The lightbox: the overlay's backdrop and glass buttons, a lifted sheet,
484
+ and the checkerboard behind a transparent copy. */
485
+ --qt-diagram-lightbox-backdrop: var(--qt-overlay-bg);
486
+ --qt-diagram-lightbox-fg: var(--qt-overlay-fg);
487
+ --qt-diagram-lightbox-muted-fg: var(--qt-overlay-muted-fg);
488
+ --qt-diagram-lightbox-button-bg: var(--qt-overlay-btn-bg);
489
+ --qt-diagram-lightbox-button-hover-bg: var(--qt-overlay-btn-hover-bg);
490
+ --qt-diagram-lightbox-pressed-border: var(--qt-overlay-muted-fg);
491
+ --qt-diagram-lightbox-shadow: 0 10px 40px rgb(0 0 0 / 0.45);
492
+ --qt-diagram-lightbox-check-a: #ffffff;
493
+ --qt-diagram-lightbox-check-b: #d4d4d8;
475
494
 
476
495
  /* Link variables */
477
496
  --qt-link-color: var(--color-primary);
@@ -2328,6 +2347,27 @@
2328
2347
  text-decoration-thickness: 2px;
2329
2348
  }
2330
2349
 
2350
+ /* Prose mode (a template like Novel: unmarked narration, quoted dialogue).
2351
+ The no-dialogue tint covers every narrated run while the draft has no
2352
+ dialogue at all; the preview marks narration and ((asides)) the way the
2353
+ rendered message will set them. ::highlight cannot set font-style, so
2354
+ narration is told apart by colour rather than italics. */
2355
+ ::highlight(qt-punctuation-no-dialogue) {
2356
+ background-color: var(--qt-punctuation-no-dialogue-bg);
2357
+ text-decoration: underline dotted var(--qt-punctuation-no-dialogue-underline);
2358
+ text-decoration-thickness: 2px;
2359
+ }
2360
+
2361
+ ::highlight(qt-composer-narration) {
2362
+ color: var(--qt-composer-narration-fg);
2363
+ background-color: var(--qt-composer-narration-bg);
2364
+ }
2365
+
2366
+ ::highlight(qt-composer-ooc) {
2367
+ color: var(--qt-composer-ooc-fg);
2368
+ background-color: var(--qt-composer-ooc-bg);
2369
+ }
2370
+
2331
2371
  /* Lexical editor rich text node styles */
2332
2372
  .qt-lexical-contenteditable {
2333
2373
  overflow-y: auto;
@@ -4219,6 +4259,151 @@
4219
4259
  word-break: break-word;
4220
4260
  }
4221
4261
 
4262
+ /* The drawing is also the way in: click (or Enter) to enlarge. */
4263
+ .qt-diagram-canvas[role="button"] {
4264
+ cursor: zoom-in;
4265
+ border-radius: var(--radius-sm);
4266
+ }
4267
+
4268
+ .qt-diagram-canvas[role="button"]:focus-visible {
4269
+ outline: 2px solid var(--color-primary);
4270
+ outline-offset: 2px;
4271
+ }
4272
+
4273
+ /* The lightbox: one diagram, full-window, to zoom into and copy as PNG
4274
+ (components/chat/diagrams/DiagramLightbox.tsx). */
4275
+ .qt-diagram-lightbox {
4276
+ position: fixed;
4277
+ inset: 0;
4278
+ z-index: 100;
4279
+ display: flex;
4280
+ flex-direction: column;
4281
+ background: var(--qt-diagram-lightbox-backdrop);
4282
+ backdrop-filter: blur(4px);
4283
+ color: var(--qt-diagram-lightbox-fg);
4284
+ outline: none;
4285
+ }
4286
+
4287
+ /* Zoom controls on the left; Transparent, Copy PNG and Close on the right. */
4288
+ .qt-diagram-lightbox-bar {
4289
+ display: flex;
4290
+ flex-wrap: wrap;
4291
+ justify-content: space-between;
4292
+ align-items: center;
4293
+ gap: 0.5rem;
4294
+ padding: 0.75rem 1rem;
4295
+ }
4296
+
4297
+ .qt-diagram-lightbox-group {
4298
+ display: flex;
4299
+ flex-wrap: wrap;
4300
+ align-items: center;
4301
+ gap: 0.25rem;
4302
+ }
4303
+
4304
+ .qt-diagram-lightbox-button {
4305
+ display: inline-flex;
4306
+ align-items: center;
4307
+ gap: 0.375rem;
4308
+ min-height: 2rem;
4309
+ padding: 0.25rem 0.625rem;
4310
+ border-radius: var(--radius-sm);
4311
+ border: 1px solid transparent;
4312
+ background: var(--qt-diagram-lightbox-button-bg);
4313
+ color: inherit;
4314
+ font-size: 0.8125rem;
4315
+ line-height: 1.25rem;
4316
+ cursor: pointer;
4317
+ transition: background-color 150ms, border-color 150ms;
4318
+ }
4319
+
4320
+ .qt-diagram-lightbox-button:hover,
4321
+ .qt-diagram-lightbox-button[aria-pressed="true"] {
4322
+ background: var(--qt-diagram-lightbox-button-hover-bg);
4323
+ }
4324
+
4325
+ .qt-diagram-lightbox-button[aria-pressed="true"] {
4326
+ border-color: var(--qt-diagram-lightbox-pressed-border);
4327
+ }
4328
+
4329
+ .qt-diagram-lightbox-button:disabled {
4330
+ opacity: 0.6;
4331
+ cursor: progress;
4332
+ }
4333
+
4334
+ .qt-diagram-lightbox-button:focus-visible,
4335
+ .qt-diagram-lightbox-check:focus-within {
4336
+ outline: 2px solid var(--color-primary);
4337
+ outline-offset: 1px;
4338
+ }
4339
+
4340
+ .qt-diagram-lightbox-zoom {
4341
+ min-width: 3.5rem;
4342
+ text-align: center;
4343
+ font-size: 0.8125rem;
4344
+ font-variant-numeric: tabular-nums;
4345
+ color: var(--qt-diagram-lightbox-muted-fg);
4346
+ }
4347
+
4348
+ .qt-diagram-lightbox-check {
4349
+ display: inline-flex;
4350
+ align-items: center;
4351
+ gap: 0.375rem;
4352
+ padding: 0.25rem 0.5rem;
4353
+ border-radius: var(--radius-sm);
4354
+ font-size: 0.8125rem;
4355
+ cursor: pointer;
4356
+ }
4357
+
4358
+ .qt-diagram-lightbox-check > input {
4359
+ accent-color: var(--color-primary);
4360
+ }
4361
+
4362
+ /* The pan-and-zoom surface. Touch gestures are all ours here. */
4363
+ .qt-diagram-lightbox-viewport {
4364
+ position: relative;
4365
+ flex: 1 1 auto;
4366
+ min-height: 0;
4367
+ overflow: hidden;
4368
+ touch-action: none;
4369
+ user-select: none;
4370
+ cursor: grab;
4371
+ }
4372
+
4373
+ .qt-diagram-lightbox-viewport:active {
4374
+ cursor: grabbing;
4375
+ }
4376
+
4377
+ /* The drawing on its own card. Sized (not transformed) by the zoom, so the
4378
+ vector is redrawn sharp at every scale. */
4379
+ .qt-diagram-lightbox-sheet {
4380
+ position: absolute;
4381
+ border-radius: var(--qt-diagram-radius);
4382
+ background: var(--qt-diagram-bg);
4383
+ color: var(--qt-diagram-fg);
4384
+ box-shadow: var(--qt-diagram-lightbox-shadow);
4385
+ }
4386
+
4387
+ /* Transparent ticked: show what the PNG will carry — nothing behind it. */
4388
+ .qt-diagram-lightbox-sheet[data-transparent="true"] {
4389
+ background-color: var(--qt-diagram-lightbox-check-a);
4390
+ background-image: conic-gradient(
4391
+ var(--qt-diagram-lightbox-check-b) 25%,
4392
+ transparent 0 50%,
4393
+ var(--qt-diagram-lightbox-check-b) 0 75%,
4394
+ transparent 0
4395
+ );
4396
+ background-size: 16px 16px;
4397
+ }
4398
+
4399
+ .qt-diagram-lightbox-hint {
4400
+ margin: 0;
4401
+ padding: 0.5rem 1rem 0.75rem;
4402
+ text-align: center;
4403
+ font-size: 0.75rem;
4404
+ color: var(--qt-diagram-lightbox-muted-fg);
4405
+ }
4406
+
4222
4407
  /* ==========================================================================
4223
4408
  WIKILINK COMPONENTS
4224
4409
  ========================================================================== */