@quilltap/theme-storybook 1.0.88 → 1.0.90

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/index.css CHANGED
@@ -19,11 +19,11 @@
19
19
  --theme-border: hsl(225 10% 87%);
20
20
  --theme-input: hsl(225 10% 87%);
21
21
  --theme-ring: hsl(225 65% 48%);
22
- --theme-success: hsl(152 60% 38%);
22
+ --theme-success: hsl(152 60% 31%);
23
23
  --theme-success-foreground: hsl(0 0% 100%);
24
- --theme-warning: hsl(38 90% 46%);
25
- --theme-warning-foreground: hsl(0 0% 10%);
26
- --theme-info: hsl(210 75% 48%);
24
+ --theme-warning: hsl(38 90% 32%);
25
+ --theme-warning-foreground: hsl(0 0% 100%);
26
+ --theme-info: hsl(210 75% 44.5%);
27
27
  --theme-info-foreground: hsl(0 0% 100%);
28
28
  --theme-chat-user: hsl(225 62% 50%);
29
29
  --theme-chat-user-foreground: hsl(0 0% 100%);
@@ -76,20 +76,20 @@
76
76
  --theme-secondary: hsl(225 14% 17%);
77
77
  --theme-secondary-foreground: hsl(225 10% 85%);
78
78
  --theme-muted: hsl(225 12% 14%);
79
- --theme-muted-foreground: hsl(225 8% 56%);
79
+ --theme-muted-foreground: hsl(225 8% 58%);
80
80
  --theme-accent: hsl(225 14% 18%);
81
81
  --theme-accent-foreground: hsl(225 10% 85%);
82
- --theme-destructive: hsl(0 60% 54%);
83
- --theme-destructive-foreground: hsl(0 0% 100%);
82
+ --theme-destructive: hsl(0 60% 62%);
83
+ --theme-destructive-foreground: hsl(225 18% 9%);
84
84
  --theme-border: hsl(225 12% 20%);
85
85
  --theme-input: hsl(225 12% 20%);
86
86
  --theme-ring: hsl(225 55% 60%);
87
87
  --theme-success: hsl(152 55% 44%);
88
- --theme-success-foreground: hsl(0 0% 100%);
88
+ --theme-success-foreground: hsl(225 18% 9%);
89
89
  --theme-warning: hsl(38 85% 52%);
90
90
  --theme-warning-foreground: hsl(0 0% 10%);
91
91
  --theme-info: hsl(210 70% 58%);
92
- --theme-info-foreground: hsl(0 0% 100%);
92
+ --theme-info-foreground: hsl(225 18% 9%);
93
93
  --theme-chat-user: hsl(225 60% 56%);
94
94
  --theme-chat-user-foreground: hsl(0 0% 100%);
95
95
  }
@@ -445,7 +445,7 @@ body {
445
445
  --qt-queue-badge-memory-fg: hsl(0 0% 100%);
446
446
  --qt-queue-badge-embedding-bg: hsl(270 50% 48%);
447
447
  --qt-queue-badge-embedding-fg: hsl(0 0% 100%);
448
- --qt-queue-badge-summary-bg: hsl(152 55% 38%);
448
+ --qt-queue-badge-summary-bg: hsl(152 55% 33.5%);
449
449
  --qt-queue-badge-summary-fg: hsl(0 0% 100%);
450
450
  --qt-queue-badge-danger-bg: hsl(0 60% 48%);
451
451
  --qt-queue-badge-danger-fg: hsl(0 0% 100%);
@@ -2748,6 +2748,18 @@ body {
2748
2748
  .qt-text-danger {
2749
2749
  color: var(--color-destructive);
2750
2750
  }
2751
+ .qt-text-success-foreground {
2752
+ color: var(--color-success-foreground);
2753
+ }
2754
+ .qt-text-warning-foreground {
2755
+ color: var(--color-warning-foreground);
2756
+ }
2757
+ .qt-text-info-foreground {
2758
+ color: var(--color-info-foreground);
2759
+ }
2760
+ .qt-text-destructive-foreground {
2761
+ color: var(--color-destructive-foreground);
2762
+ }
2751
2763
  .qt-border-primary {
2752
2764
  border-color: var(--color-primary);
2753
2765
  }
@@ -3148,6 +3160,53 @@ body {
3148
3160
  min-width: 0;
3149
3161
  height: 100%;
3150
3162
  }
3163
+ .qt-page-toolbar {
3164
+ display: flex;
3165
+ align-items: center;
3166
+ justify-content: space-between;
3167
+ padding: 0.75rem 1rem;
3168
+ position: sticky;
3169
+ top: 0;
3170
+ z-index: 30;
3171
+ background: var(--qt-app-header-bg);
3172
+ backdrop-filter: var(--qt-app-header-blur);
3173
+ -webkit-backdrop-filter: var(--qt-app-header-blur);
3174
+ }
3175
+ .qt-page-toolbar-left {
3176
+ display: flex;
3177
+ align-items: center;
3178
+ min-width: 2.5rem;
3179
+ }
3180
+ .qt-page-toolbar-center {
3181
+ flex: 1 1 0%;
3182
+ display: flex;
3183
+ justify-content: center;
3184
+ padding-left: 1rem;
3185
+ padding-right: 1rem;
3186
+ max-width: 32rem;
3187
+ }
3188
+ .qt-page-toolbar-right {
3189
+ display: flex;
3190
+ align-items: center;
3191
+ gap: 0.5rem;
3192
+ min-width: 2.5rem;
3193
+ justify-content: flex-end;
3194
+ }
3195
+ @media (min-width: 768px) {
3196
+ .qt-page-toolbar-left {
3197
+ min-width: 0;
3198
+ }
3199
+ }
3200
+ @media (max-width: 639px) {
3201
+ .qt-page-toolbar {
3202
+ flex-wrap: wrap;
3203
+ row-gap: 0.5rem;
3204
+ }
3205
+ .qt-page-toolbar-right {
3206
+ flex-basis: 100%;
3207
+ justify-content: center;
3208
+ }
3209
+ }
3151
3210
  .qt-app-header {
3152
3211
  display: flex;
3153
3212
  align-items: center;
@@ -3610,7 +3669,7 @@ body {
3610
3669
  .dark {
3611
3670
  --qt-queue-badge-memory-bg: hsl(225 55% 55%);
3612
3671
  --qt-queue-badge-embedding-bg: hsl(270 50% 55%);
3613
- --qt-queue-badge-summary-bg: hsl(152 50% 42%);
3672
+ --qt-queue-badge-summary-bg: hsl(152 50% 34.5%);
3614
3673
  --qt-queue-badge-danger-bg: hsl(0 60% 52%);
3615
3674
  --qt-queue-badge-story-bg: hsl(225 12% 44%);
3616
3675
  --qt-chat-whisper-bg: color-mix(in srgb, var(--qt-chat-assistant-bg) 60%, #6b5b95 40%);
@@ -3716,6 +3775,24 @@ body {
3716
3775
  .qt-tab-divider {
3717
3776
  border-top: 1px solid var(--qt-tab-divider-color);
3718
3777
  }
3778
+ .qt-skip-link {
3779
+ position: absolute;
3780
+ left: 0.5rem;
3781
+ top: -10rem;
3782
+ z-index: 60;
3783
+ padding: 0.5rem 1rem;
3784
+ border-radius: 0.375rem;
3785
+ background: var(--color-primary);
3786
+ color: var(--color-primary-foreground);
3787
+ font-size: 0.875rem;
3788
+ font-weight: 500;
3789
+ text-decoration: none;
3790
+ }
3791
+ .qt-skip-link:focus {
3792
+ top: 0.5rem;
3793
+ outline: 2px solid var(--color-ring);
3794
+ outline-offset: 2px;
3795
+ }
3719
3796
  .qt-tab-strip {
3720
3797
  display: flex;
3721
3798
  align-items: flex-end;
@@ -3758,9 +3835,9 @@ body {
3758
3835
  display: inline-flex;
3759
3836
  align-items: center;
3760
3837
  justify-content: center;
3761
- width: 1.15rem;
3762
- height: 1.15rem;
3763
- margin-left: 0.125rem;
3838
+ width: 1.5rem;
3839
+ height: 1.5rem;
3840
+ margin: -0.175rem -0.25rem -0.175rem 0;
3764
3841
  border-radius: 0.25rem;
3765
3842
  opacity: 0.55;
3766
3843
  transition: opacity 0.15s ease, background 0.15s ease;
@@ -4391,3 +4468,12 @@ li:is(.qt-chat-narration, .qt-chat-ooc, .qt-chat-inner-monologue) {
4391
4468
  currentColor calc(50% + 0.75px),
4392
4469
  transparent calc(50% + 0.75px));
4393
4470
  }
4471
+ @media (prefers-reduced-motion: reduce) {
4472
+ *,
4473
+ *::before,
4474
+ *::after {
4475
+ animation-duration: 0.001ms !important;
4476
+ animation-iteration-count: 1 !important;
4477
+ transition-duration: 0.001ms !important;
4478
+ }
4479
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quilltap/theme-storybook",
3
- "version": "1.0.88",
3
+ "version": "1.0.90",
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",
@@ -348,7 +348,7 @@
348
348
  --qt-queue-badge-memory-fg: hsl(0 0% 100%);
349
349
  --qt-queue-badge-embedding-bg: hsl(270 50% 48%);
350
350
  --qt-queue-badge-embedding-fg: hsl(0 0% 100%);
351
- --qt-queue-badge-summary-bg: hsl(152 55% 38%);
351
+ --qt-queue-badge-summary-bg: hsl(152 55% 33.5%);
352
352
  --qt-queue-badge-summary-fg: hsl(0 0% 100%);
353
353
  --qt-queue-badge-danger-bg: hsl(0 60% 48%);
354
354
  --qt-queue-badge-danger-fg: hsl(0 0% 100%);
@@ -3414,6 +3414,23 @@
3414
3414
  color: var(--color-destructive);
3415
3415
  }
3416
3416
 
3417
+ /* Text on a status fill */
3418
+ .qt-text-success-foreground {
3419
+ color: var(--color-success-foreground);
3420
+ }
3421
+
3422
+ .qt-text-warning-foreground {
3423
+ color: var(--color-warning-foreground);
3424
+ }
3425
+
3426
+ .qt-text-info-foreground {
3427
+ color: var(--color-info-foreground);
3428
+ }
3429
+
3430
+ .qt-text-destructive-foreground {
3431
+ color: var(--color-destructive-foreground);
3432
+ }
3433
+
3417
3434
  /* Border utilities */
3418
3435
  .qt-border-primary {
3419
3436
  border-color: var(--color-primary);
@@ -3954,6 +3971,66 @@
3954
3971
  height: 100%;
3955
3972
  }
3956
3973
 
3974
+ /* Page toolbar - top toolbar with search and actions */
3975
+ .qt-page-toolbar {
3976
+ display: flex;
3977
+ align-items: center;
3978
+ justify-content: space-between;
3979
+ padding: 0.75rem 1rem;
3980
+ position: sticky;
3981
+ top: 0;
3982
+ z-index: 30;
3983
+ background: var(--qt-app-header-bg);
3984
+ backdrop-filter: var(--qt-app-header-blur);
3985
+ -webkit-backdrop-filter: var(--qt-app-header-blur);
3986
+ }
3987
+
3988
+ .qt-page-toolbar-left {
3989
+ display: flex;
3990
+ align-items: center;
3991
+ /* Reserve space for hamburger on mobile, empty on desktop */
3992
+ min-width: 2.5rem;
3993
+ }
3994
+
3995
+ .qt-page-toolbar-center {
3996
+ flex: 1 1 0%;
3997
+ display: flex;
3998
+ justify-content: center;
3999
+ padding-left: 1rem;
4000
+ padding-right: 1rem;
4001
+ max-width: 32rem;
4002
+ }
4003
+
4004
+ .qt-page-toolbar-right {
4005
+ display: flex;
4006
+ align-items: center;
4007
+ gap: 0.5rem;
4008
+ /* Balance with left section */
4009
+ min-width: 2.5rem;
4010
+ justify-content: flex-end;
4011
+ }
4012
+
4013
+ /* On desktop, hide the left placeholder when hamburger is hidden */
4014
+ @media (min-width: 768px) {
4015
+ .qt-page-toolbar-left {
4016
+ min-width: 0;
4017
+ }
4018
+ }
4019
+
4020
+ /* Phone widths: the queue badges take a row of their own rather than
4021
+ sliding under the search button (WCAG 1.4.10 reflow). */
4022
+ @media (max-width: 639px) {
4023
+ .qt-page-toolbar {
4024
+ flex-wrap: wrap;
4025
+ row-gap: 0.5rem;
4026
+ }
4027
+
4028
+ .qt-page-toolbar-right {
4029
+ flex-basis: 100%;
4030
+ justify-content: center;
4031
+ }
4032
+ }
4033
+
3957
4034
  .qt-app-header {
3958
4035
  display: flex;
3959
4036
  align-items: center;
@@ -4530,7 +4607,7 @@
4530
4607
  /* Queue status badges — dark mode */
4531
4608
  --qt-queue-badge-memory-bg: hsl(225 55% 55%);
4532
4609
  --qt-queue-badge-embedding-bg: hsl(270 50% 55%);
4533
- --qt-queue-badge-summary-bg: hsl(152 50% 42%);
4610
+ --qt-queue-badge-summary-bg: hsl(152 50% 34.5%);
4534
4611
  --qt-queue-badge-danger-bg: hsl(0 60% 52%);
4535
4612
  --qt-queue-badge-story-bg: hsl(225 12% 44%);
4536
4613
 
@@ -4684,6 +4761,27 @@
4684
4761
  border-top: 1px solid var(--qt-tab-divider-color);
4685
4762
  }
4686
4763
 
4764
+ /* Skip link - first stop for the keyboard, hidden until focused (WCAG 2.4.1) */
4765
+ .qt-skip-link {
4766
+ position: absolute;
4767
+ left: 0.5rem;
4768
+ top: -10rem;
4769
+ z-index: 60; /* above the sticky toolbar and the sidebar rail */
4770
+ padding: 0.5rem 1rem;
4771
+ border-radius: 0.375rem;
4772
+ background: var(--color-primary);
4773
+ color: var(--color-primary-foreground);
4774
+ font-size: 0.875rem;
4775
+ font-weight: 500;
4776
+ text-decoration: none;
4777
+ }
4778
+
4779
+ .qt-skip-link:focus {
4780
+ top: 0.5rem;
4781
+ outline: 2px solid var(--color-ring);
4782
+ outline-offset: 2px;
4783
+ }
4784
+
4687
4785
  /* ==========================================================================
4688
4786
  WORKSPACE (tabbed two-pane shell — strip, divider, drop-zone)
4689
4787
 
@@ -4744,9 +4842,10 @@
4744
4842
  display: inline-flex;
4745
4843
  align-items: center;
4746
4844
  justify-content: center;
4747
- width: 1.15rem;
4748
- height: 1.15rem;
4749
- margin-left: 0.125rem;
4845
+ /* 24px: the WCAG 2.5.8 minimum target. The negative margin keeps the tab's footprint. */
4846
+ width: 1.5rem;
4847
+ height: 1.5rem;
4848
+ margin: -0.175rem -0.25rem -0.175rem 0;
4750
4849
  border-radius: 0.25rem;
4751
4850
  opacity: 0.55;
4752
4851
  transition: opacity 0.15s ease, background 0.15s ease;
@@ -5450,3 +5549,16 @@ li:is(.qt-chat-narration, .qt-chat-ooc, .qt-chat-inner-monologue) {
5450
5549
  transparent calc(50% + 0.75px)
5451
5550
  );
5452
5551
  }
5552
+
5553
+ /* ============================================================================
5554
+ REDUCED MOTION — every theme honours the OS setting
5555
+ ============================================================================ */
5556
+ @media (prefers-reduced-motion: reduce) {
5557
+ *,
5558
+ *::before,
5559
+ *::after {
5560
+ animation-duration: 0.001ms !important;
5561
+ animation-iteration-count: 1 !important;
5562
+ transition-duration: 0.001ms !important;
5563
+ }
5564
+ }
@@ -54,11 +54,11 @@
54
54
  --theme-ring: hsl(225 65% 48%);
55
55
 
56
56
  /* Status colors */
57
- --theme-success: hsl(152 60% 38%);
57
+ --theme-success: hsl(152 60% 31%);
58
58
  --theme-success-foreground: hsl(0 0% 100%);
59
- --theme-warning: hsl(38 90% 46%);
60
- --theme-warning-foreground: hsl(0 0% 10%);
61
- --theme-info: hsl(210 75% 48%);
59
+ --theme-warning: hsl(38 90% 32%);
60
+ --theme-warning-foreground: hsl(0 0% 100%);
61
+ --theme-info: hsl(210 75% 44.5%);
62
62
  --theme-info-foreground: hsl(0 0% 100%);
63
63
 
64
64
  /* Chat-specific colors */
@@ -99,24 +99,24 @@
99
99
  --theme-secondary-foreground: hsl(225 10% 85%);
100
100
 
101
101
  --theme-muted: hsl(225 12% 14%);
102
- --theme-muted-foreground: hsl(225 8% 56%);
102
+ --theme-muted-foreground: hsl(225 8% 58%);
103
103
 
104
104
  --theme-accent: hsl(225 14% 18%);
105
105
  --theme-accent-foreground: hsl(225 10% 85%);
106
106
 
107
- --theme-destructive: hsl(0 60% 54%);
108
- --theme-destructive-foreground: hsl(0 0% 100%);
107
+ --theme-destructive: hsl(0 60% 62%);
108
+ --theme-destructive-foreground: hsl(225 18% 9%);
109
109
 
110
110
  --theme-border: hsl(225 12% 20%);
111
111
  --theme-input: hsl(225 12% 20%);
112
112
  --theme-ring: hsl(225 55% 60%);
113
113
 
114
114
  --theme-success: hsl(152 55% 44%);
115
- --theme-success-foreground: hsl(0 0% 100%);
115
+ --theme-success-foreground: hsl(225 18% 9%);
116
116
  --theme-warning: hsl(38 85% 52%);
117
117
  --theme-warning-foreground: hsl(0 0% 10%);
118
118
  --theme-info: hsl(210 70% 58%);
119
- --theme-info-foreground: hsl(0 0% 100%);
119
+ --theme-info-foreground: hsl(225 18% 9%);
120
120
 
121
121
  --theme-chat-user: hsl(225 60% 56%);
122
122
  --theme-chat-user-foreground: hsl(0 0% 100%);