@quilltap/theme-storybook 1.0.77 → 1.0.79

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.78] - 2026-10-22
6
+
7
+ ### Added
8
+ - The `qt-storyteller-*` family in `qt-components.css`, mirroring the app's `_storyteller.css`: the Salon's Normal / Paused / Storyteller turn-mode control (`.qt-storyteller-mode`, `-option`, `-option-active`, `-option-paused`) and the storyteller's bidding board (`.qt-storyteller-board`, `-board-header`, `.qt-storyteller-cards`, `.qt-storyteller-card` with `-selected` / `-act` / `-destroy` / `-quiet` / `-head` / `-name`, `.qt-storyteller-plan`, `-meta`, `-warning`, `-actions`, `.qt-storyteller-summary`). Every colour reads a `--qt-storyteller-*` hook with a token fallback.
9
+
5
10
  ## [1.0.76] - 2026-10-20
6
11
 
7
12
  ### Added
package/dist/index.css CHANGED
@@ -3704,3 +3704,210 @@ body {
3704
3704
  font-size: 0.625rem;
3705
3705
  opacity: 0.85;
3706
3706
  }
3707
+ .qt-storyteller-mode {
3708
+ display: flex;
3709
+ width: 100%;
3710
+ border: 1px solid var(--qt-storyteller-mode-border, var(--color-border));
3711
+ border-radius: var(--qt-storyteller-mode-radius, 0.5rem);
3712
+ overflow: hidden;
3713
+ }
3714
+ .qt-storyteller-mode-option {
3715
+ flex: 1 1 0%;
3716
+ display: flex;
3717
+ align-items: center;
3718
+ justify-content: center;
3719
+ min-width: 0;
3720
+ padding: 0.375rem 0.25rem;
3721
+ font-size: 0.75rem;
3722
+ font-weight: 500;
3723
+ white-space: nowrap;
3724
+ overflow: hidden;
3725
+ text-overflow: ellipsis;
3726
+ cursor: pointer;
3727
+ background: var(--qt-storyteller-mode-bg, var(--color-card));
3728
+ color: var(--qt-storyteller-mode-fg, var(--color-muted-foreground));
3729
+ border: none;
3730
+ transition: background-color 150ms, color 150ms;
3731
+ }
3732
+ .qt-storyteller-mode-option + .qt-storyteller-mode-option {
3733
+ border-left: 1px solid var(--qt-storyteller-mode-border, var(--color-border));
3734
+ }
3735
+ .qt-storyteller-mode-option:hover {
3736
+ background: var(--qt-storyteller-mode-hover-bg, var(--color-accent));
3737
+ color: var(--qt-storyteller-mode-hover-fg, var(--color-foreground));
3738
+ }
3739
+ .qt-storyteller-mode-option-active,
3740
+ .qt-storyteller-mode-option-active:hover {
3741
+ background: var(--qt-storyteller-mode-active-bg, var(--color-primary));
3742
+ color: var(--qt-storyteller-mode-active-fg, var(--color-primary-foreground));
3743
+ }
3744
+ .qt-storyteller-mode-option-paused,
3745
+ .qt-storyteller-mode-option-paused:hover {
3746
+ background: var(--qt-status-warning-bg, var(--color-warning));
3747
+ color: var(--qt-status-warning-fg, var(--color-warning-foreground));
3748
+ }
3749
+ .qt-storyteller-board {
3750
+ margin-bottom: 0.5rem;
3751
+ padding: 0.625rem;
3752
+ border: 1px solid var(--qt-storyteller-board-border, var(--color-border));
3753
+ border-radius: var(--qt-storyteller-board-radius, 0.75rem);
3754
+ background: var(--qt-storyteller-board-bg, var(--color-card));
3755
+ color: var(--qt-storyteller-board-fg, var(--color-card-foreground));
3756
+ }
3757
+ .qt-storyteller-board-header {
3758
+ display: flex;
3759
+ align-items: center;
3760
+ justify-content: space-between;
3761
+ gap: 0.5rem;
3762
+ margin-bottom: 0.5rem;
3763
+ font-size: 0.8125rem;
3764
+ font-weight: 600;
3765
+ }
3766
+ .qt-storyteller-cards {
3767
+ display: grid;
3768
+ grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
3769
+ gap: 0.5rem;
3770
+ max-height: 16rem;
3771
+ overflow-y: auto;
3772
+ }
3773
+ .qt-storyteller-card {
3774
+ display: flex;
3775
+ flex-direction: column;
3776
+ gap: 0.375rem;
3777
+ padding: 0.5rem;
3778
+ border: 1px solid var(--qt-storyteller-card-border, var(--color-border));
3779
+ border-radius: var(--qt-storyteller-card-radius, 0.5rem);
3780
+ background: var(--qt-storyteller-card-bg, var(--color-background));
3781
+ font-size: 0.8125rem;
3782
+ }
3783
+ .qt-storyteller-card-selected {
3784
+ border-color: var(--qt-storyteller-card-selected-border, var(--color-primary));
3785
+ box-shadow: 0 0 0 1px var(--qt-storyteller-card-selected-border, var(--color-primary));
3786
+ }
3787
+ .qt-storyteller-card-act {
3788
+ border-color: var(--qt-storyteller-card-act-border, var(--color-warning));
3789
+ }
3790
+ .qt-storyteller-card-destroy {
3791
+ border-color: var(--qt-status-danger-border, var(--color-destructive));
3792
+ background: var(--qt-storyteller-card-destroy-bg, color-mix(in srgb, var(--color-destructive) 10%, var(--color-background)));
3793
+ }
3794
+ .qt-storyteller-card-quiet {
3795
+ opacity: 0.65;
3796
+ }
3797
+ .qt-storyteller-card-head {
3798
+ display: flex;
3799
+ align-items: center;
3800
+ gap: 0.5rem;
3801
+ }
3802
+ .qt-storyteller-card-name {
3803
+ flex: 1 1 0%;
3804
+ min-width: 0;
3805
+ font-weight: 600;
3806
+ overflow: hidden;
3807
+ text-overflow: ellipsis;
3808
+ white-space: nowrap;
3809
+ }
3810
+ .qt-storyteller-plan {
3811
+ font-style: italic;
3812
+ color: var(--qt-storyteller-plan-fg, var(--color-foreground));
3813
+ }
3814
+ .qt-storyteller-meta {
3815
+ font-size: 0.6875rem;
3816
+ color: var(--qt-storyteller-meta-fg, var(--color-muted-foreground));
3817
+ }
3818
+ .qt-storyteller-warning {
3819
+ font-size: 0.75rem;
3820
+ font-weight: 600;
3821
+ color: var(--qt-storyteller-warning-fg, var(--color-destructive));
3822
+ }
3823
+ .qt-storyteller-actions {
3824
+ display: flex;
3825
+ flex-wrap: wrap;
3826
+ align-items: center;
3827
+ gap: 0.375rem;
3828
+ margin-top: 0.5rem;
3829
+ }
3830
+ .qt-storyteller-summary {
3831
+ display: flex;
3832
+ align-items: center;
3833
+ gap: 0.375rem;
3834
+ margin-bottom: 0.5rem;
3835
+ font-size: 0.75rem;
3836
+ color: var(--qt-storyteller-meta-fg, var(--color-muted-foreground));
3837
+ }
3838
+ .qt-intervention {
3839
+ color: var(--qt-intervention-fg, var(--color-foreground));
3840
+ }
3841
+ .qt-intervention-queue {
3842
+ font-weight: 600;
3843
+ color: var(--qt-intervention-queue-fg, var(--color-primary));
3844
+ }
3845
+ .qt-intervention-section {
3846
+ padding: 0.5rem 0.75rem;
3847
+ border: 1px solid var(--qt-intervention-section-border, var(--color-border));
3848
+ border-radius: var(--qt-intervention-section-radius, 0.5rem);
3849
+ }
3850
+ .qt-intervention-section--pinned {
3851
+ border-color: var(--qt-intervention-pinned-border, var(--color-primary));
3852
+ }
3853
+ .qt-intervention-reset {
3854
+ text-decoration: underline;
3855
+ color: var(--qt-intervention-reset-fg, var(--color-primary));
3856
+ cursor: pointer;
3857
+ }
3858
+ .qt-intervention-row {
3859
+ display: block;
3860
+ width: 100%;
3861
+ text-align: left;
3862
+ opacity: 0.75;
3863
+ cursor: pointer;
3864
+ }
3865
+ .qt-intervention-row:hover {
3866
+ opacity: 1;
3867
+ }
3868
+ .qt-intervention-row--winning {
3869
+ opacity: 1;
3870
+ font-weight: 600;
3871
+ outline: 2px solid var(--qt-intervention-winning-outline, var(--color-primary));
3872
+ outline-offset: 1px;
3873
+ }
3874
+ .qt-intervention-effect {
3875
+ padding: 0.375rem 0;
3876
+ border-bottom: 1px solid var(--qt-intervention-section-border, var(--color-border));
3877
+ }
3878
+ .qt-intervention-effect:last-child {
3879
+ border-bottom: none;
3880
+ }
3881
+ .qt-intervention-note {
3882
+ font-size: 0.75rem;
3883
+ font-style: italic;
3884
+ color: var(--qt-intervention-note-fg, var(--color-warning));
3885
+ }
3886
+ .qt-intervention-badge {
3887
+ display: inline-flex;
3888
+ align-items: center;
3889
+ margin-left: 0.25rem;
3890
+ color: var(--qt-intervention-badge-fg, var(--color-muted-foreground));
3891
+ }
3892
+ .qt-intervention-mark {
3893
+ display: inline-block;
3894
+ flex-shrink: 0;
3895
+ color: var(--qt-intervention-badge-fg, var(--color-muted-foreground));
3896
+ }
3897
+ .qt-intervene-toggle {
3898
+ display: inline-flex;
3899
+ align-items: center;
3900
+ justify-content: center;
3901
+ padding: 0.125rem;
3902
+ border-radius: 0.25rem;
3903
+ color: var(--qt-intervene-toggle-fg, var(--color-primary));
3904
+ background: transparent;
3905
+ cursor: pointer;
3906
+ }
3907
+ .qt-intervene-toggle:hover {
3908
+ background-color: var(--qt-intervene-toggle-hover-bg, var(--color-accent));
3909
+ }
3910
+ .qt-intervene-toggle--off {
3911
+ color: var(--qt-intervene-toggle-off-fg, var(--color-muted-foreground));
3912
+ opacity: 0.5;
3913
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quilltap/theme-storybook",
3
- "version": "1.0.77",
3
+ "version": "1.0.79",
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",
@@ -4598,3 +4598,271 @@
4598
4598
  font-size: 0.625rem;
4599
4599
  opacity: 0.85;
4600
4600
  }
4601
+
4602
+ /**
4603
+ * Storyteller mode — the Salon's turn-mode control and the bidding board.
4604
+ * Mirrors app/styles/qt-components/_storyteller.css.
4605
+ */
4606
+ /* The turn-mode control: Normal / Paused / Storyteller, one segmented row. */
4607
+ .qt-storyteller-mode {
4608
+ display: flex;
4609
+ width: 100%;
4610
+ border: 1px solid var(--qt-storyteller-mode-border, var(--color-border));
4611
+ border-radius: var(--qt-storyteller-mode-radius, 0.5rem);
4612
+ overflow: hidden;
4613
+ }
4614
+
4615
+ .qt-storyteller-mode-option {
4616
+ flex: 1 1 0%;
4617
+ display: flex;
4618
+ align-items: center;
4619
+ justify-content: center;
4620
+ min-width: 0;
4621
+ padding: 0.375rem 0.25rem;
4622
+ font-size: 0.75rem;
4623
+ font-weight: 500;
4624
+ white-space: nowrap;
4625
+ overflow: hidden;
4626
+ text-overflow: ellipsis;
4627
+ cursor: pointer;
4628
+ background: var(--qt-storyteller-mode-bg, var(--color-card));
4629
+ color: var(--qt-storyteller-mode-fg, var(--color-muted-foreground));
4630
+ border: none;
4631
+ transition: background-color 150ms, color 150ms;
4632
+ }
4633
+
4634
+ .qt-storyteller-mode-option + .qt-storyteller-mode-option {
4635
+ border-left: 1px solid var(--qt-storyteller-mode-border, var(--color-border));
4636
+ }
4637
+
4638
+ .qt-storyteller-mode-option:hover {
4639
+ background: var(--qt-storyteller-mode-hover-bg, var(--color-accent));
4640
+ color: var(--qt-storyteller-mode-hover-fg, var(--color-foreground));
4641
+ }
4642
+
4643
+ .qt-storyteller-mode-option-active,
4644
+ .qt-storyteller-mode-option-active:hover {
4645
+ background: var(--qt-storyteller-mode-active-bg, var(--color-primary));
4646
+ color: var(--qt-storyteller-mode-active-fg, var(--color-primary-foreground));
4647
+ }
4648
+
4649
+ .qt-storyteller-mode-option-paused,
4650
+ .qt-storyteller-mode-option-paused:hover {
4651
+ background: var(--qt-status-warning-bg, var(--color-warning));
4652
+ color: var(--qt-status-warning-fg, var(--color-warning-foreground));
4653
+ }
4654
+
4655
+ /* The board: a panel above the composer while a round is open. */
4656
+ .qt-storyteller-board {
4657
+ margin-bottom: 0.5rem;
4658
+ padding: 0.625rem;
4659
+ border: 1px solid var(--qt-storyteller-board-border, var(--color-border));
4660
+ border-radius: var(--qt-storyteller-board-radius, 0.75rem);
4661
+ background: var(--qt-storyteller-board-bg, var(--color-card));
4662
+ color: var(--qt-storyteller-board-fg, var(--color-card-foreground));
4663
+ }
4664
+
4665
+ .qt-storyteller-board-header {
4666
+ display: flex;
4667
+ align-items: center;
4668
+ justify-content: space-between;
4669
+ gap: 0.5rem;
4670
+ margin-bottom: 0.5rem;
4671
+ font-size: 0.8125rem;
4672
+ font-weight: 600;
4673
+ }
4674
+
4675
+ .qt-storyteller-cards {
4676
+ display: grid;
4677
+ grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
4678
+ gap: 0.5rem;
4679
+ max-height: 16rem;
4680
+ overflow-y: auto;
4681
+ }
4682
+
4683
+ .qt-storyteller-card {
4684
+ display: flex;
4685
+ flex-direction: column;
4686
+ gap: 0.375rem;
4687
+ padding: 0.5rem;
4688
+ border: 1px solid var(--qt-storyteller-card-border, var(--color-border));
4689
+ border-radius: var(--qt-storyteller-card-radius, 0.5rem);
4690
+ background: var(--qt-storyteller-card-bg, var(--color-background));
4691
+ font-size: 0.8125rem;
4692
+ }
4693
+
4694
+ .qt-storyteller-card-selected {
4695
+ border-color: var(--qt-storyteller-card-selected-border, var(--color-primary));
4696
+ box-shadow: 0 0 0 1px var(--qt-storyteller-card-selected-border, var(--color-primary));
4697
+ }
4698
+
4699
+ .qt-storyteller-card-act {
4700
+ border-color: var(--qt-storyteller-card-act-border, var(--color-warning));
4701
+ }
4702
+
4703
+ .qt-storyteller-card-destroy {
4704
+ border-color: var(--qt-status-danger-border, var(--color-destructive));
4705
+ background: var(--qt-storyteller-card-destroy-bg, color-mix(in srgb, var(--color-destructive) 10%, var(--color-background)));
4706
+ }
4707
+
4708
+ .qt-storyteller-card-quiet {
4709
+ opacity: 0.65;
4710
+ }
4711
+
4712
+ .qt-storyteller-card-head {
4713
+ display: flex;
4714
+ align-items: center;
4715
+ gap: 0.5rem;
4716
+ }
4717
+
4718
+ .qt-storyteller-card-name {
4719
+ flex: 1 1 0%;
4720
+ min-width: 0;
4721
+ font-weight: 600;
4722
+ overflow: hidden;
4723
+ text-overflow: ellipsis;
4724
+ white-space: nowrap;
4725
+ }
4726
+
4727
+ .qt-storyteller-plan {
4728
+ font-style: italic;
4729
+ color: var(--qt-storyteller-plan-fg, var(--color-foreground));
4730
+ }
4731
+
4732
+ .qt-storyteller-meta {
4733
+ font-size: 0.6875rem;
4734
+ color: var(--qt-storyteller-meta-fg, var(--color-muted-foreground));
4735
+ }
4736
+
4737
+ .qt-storyteller-warning {
4738
+ font-size: 0.75rem;
4739
+ font-weight: 600;
4740
+ color: var(--qt-storyteller-warning-fg, var(--color-destructive));
4741
+ }
4742
+
4743
+ .qt-storyteller-actions {
4744
+ display: flex;
4745
+ flex-wrap: wrap;
4746
+ align-items: center;
4747
+ gap: 0.375rem;
4748
+ margin-top: 0.5rem;
4749
+ }
4750
+
4751
+ .qt-storyteller-summary {
4752
+ display: flex;
4753
+ align-items: center;
4754
+ gap: 0.375rem;
4755
+ margin-bottom: 0.5rem;
4756
+ font-size: 0.75rem;
4757
+ color: var(--qt-storyteller-meta-fg, var(--color-muted-foreground));
4758
+ }
4759
+
4760
+ /**
4761
+ * Pascal operator intervention — the hold dialog, the Workbench's hand toggles,
4762
+ * and the "adjusted" badge on a Pascal chip.
4763
+ * Mirrors app/styles/qt-components/_intervention.css.
4764
+ */
4765
+ /* The hold dialog's body. */
4766
+ .qt-intervention {
4767
+ color: var(--qt-intervention-fg, var(--color-foreground));
4768
+ }
4769
+
4770
+ /* "2 more waiting." beside the header line. */
4771
+ .qt-intervention-queue {
4772
+ font-weight: 600;
4773
+ color: var(--qt-intervention-queue-fg, var(--color-primary));
4774
+ }
4775
+
4776
+ /* One part of the run: parameters, roll, consult, outcome… */
4777
+ .qt-intervention-section {
4778
+ padding: 0.5rem 0.75rem;
4779
+ border: 1px solid var(--qt-intervention-section-border, var(--color-border));
4780
+ border-radius: var(--qt-intervention-section-radius, 0.5rem);
4781
+ }
4782
+
4783
+ /* A section the operator has changed. */
4784
+ .qt-intervention-section--pinned {
4785
+ border-color: var(--qt-intervention-pinned-border, var(--color-primary));
4786
+ }
4787
+
4788
+ /* The reset control: unpins the section. */
4789
+ .qt-intervention-reset {
4790
+ text-decoration: underline;
4791
+ color: var(--qt-intervention-reset-fg, var(--color-primary));
4792
+ cursor: pointer;
4793
+ }
4794
+
4795
+ /* One outcome row; click to force it. Wears the .qt-pascal-result accent. */
4796
+ .qt-intervention-row {
4797
+ display: block;
4798
+ width: 100%;
4799
+ text-align: left;
4800
+ opacity: 0.75;
4801
+ cursor: pointer;
4802
+ }
4803
+
4804
+ .qt-intervention-row:hover {
4805
+ opacity: 1;
4806
+ }
4807
+
4808
+ /* The row that wins under the current settings. */
4809
+ .qt-intervention-row--winning {
4810
+ opacity: 1;
4811
+ font-weight: 600;
4812
+ outline: 2px solid var(--qt-intervention-winning-outline, var(--color-primary));
4813
+ outline-offset: 1px;
4814
+ }
4815
+
4816
+ /* One declared effect, with its Auto / On / Off control. */
4817
+ .qt-intervention-effect {
4818
+ padding: 0.375rem 0;
4819
+ border-bottom: 1px solid var(--qt-intervention-section-border, var(--color-border));
4820
+ }
4821
+
4822
+ .qt-intervention-effect:last-child {
4823
+ border-bottom: none;
4824
+ }
4825
+
4826
+ /* An advisory note: a stale answer, a forced row, a clamped parameter. */
4827
+ .qt-intervention-note {
4828
+ font-size: 0.75rem;
4829
+ font-style: italic;
4830
+ color: var(--qt-intervention-note-fg, var(--color-warning));
4831
+ }
4832
+
4833
+ /* The "adjusted" hand beside a Pascal chip's label. */
4834
+ .qt-intervention-badge {
4835
+ display: inline-flex;
4836
+ align-items: center;
4837
+ margin-left: 0.25rem;
4838
+ color: var(--qt-intervention-badge-fg, var(--color-muted-foreground));
4839
+ }
4840
+
4841
+ /* The hand on an intervenable tool in the Workbench library. */
4842
+ .qt-intervention-mark {
4843
+ display: inline-block;
4844
+ flex-shrink: 0;
4845
+ color: var(--qt-intervention-badge-fg, var(--color-muted-foreground));
4846
+ }
4847
+
4848
+ /* The Workbench's per-field hand toggle: shown in the hold dialog, or not. */
4849
+ .qt-intervene-toggle {
4850
+ display: inline-flex;
4851
+ align-items: center;
4852
+ justify-content: center;
4853
+ padding: 0.125rem;
4854
+ border-radius: 0.25rem;
4855
+ color: var(--qt-intervene-toggle-fg, var(--color-primary));
4856
+ background: transparent;
4857
+ cursor: pointer;
4858
+ }
4859
+
4860
+ .qt-intervene-toggle:hover {
4861
+ background-color: var(--qt-intervene-toggle-hover-bg, var(--color-accent));
4862
+ }
4863
+
4864
+ /* A field the author has hidden from the dialog. */
4865
+ .qt-intervene-toggle--off {
4866
+ color: var(--qt-intervene-toggle-off-fg, var(--color-muted-foreground));
4867
+ opacity: 0.5;
4868
+ }