orbcafe-ui 3.1.4 → 3.1.8

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/orbis.css CHANGED
@@ -2577,28 +2577,164 @@ button.orb-app-header-locale:hover,
2577
2577
  font-size: 12px;
2578
2578
  }
2579
2579
 
2580
- .markdown-body .orb-html-demo-frame {
2580
+ /* ---------- markdown: HTML artifact card + inline demo ---------- */
2581
+ /* The html fence renders as a card or an expanded inline block; react-markdown's
2582
+ <pre> wrapper steps aside so neither sits in a second padded frame. */
2583
+ .markdown-body pre:has(.orb-html-demo-card),
2584
+ .markdown-body pre:has(.orb-html-demo) {
2585
+ margin: 0;
2586
+ padding: 0;
2587
+ overflow: visible;
2588
+ background: transparent;
2589
+ border: 0;
2590
+ }
2591
+
2592
+ .markdown-body .orb-html-demo-card {
2581
2593
  margin: 12px 0 4px;
2582
- overflow: hidden;
2594
+ }
2595
+
2596
+ .orb-html-demo-card {
2597
+ display: flex;
2598
+ align-items: center;
2599
+ gap: 12px;
2600
+ width: 100%;
2601
+ padding: 10px 12px;
2583
2602
  border: 1px solid var(--orb-border);
2584
2603
  border-radius: var(--orb-r);
2585
2604
  background: var(--orb-canvas);
2605
+ color: var(--orb-fg);
2606
+ font-family: var(--orb-font);
2607
+ text-align: left;
2608
+ cursor: pointer;
2609
+ transition: background var(--orb-t-fast), border-color var(--orb-t-fast);
2586
2610
  }
2587
2611
 
2588
- .markdown-body .orb-html-demo-caption {
2589
- padding: 8px 12px;
2612
+ .orb-html-demo-card:hover {
2613
+ background: var(--orb-hover);
2614
+ border-color: var(--orb-p200);
2615
+ }
2616
+
2617
+ .orb-html-demo-card:focus-visible {
2618
+ outline: 2px solid var(--orb-focus-solid);
2619
+ outline-offset: 1px;
2620
+ }
2621
+
2622
+ .orb-html-demo-glyph {
2623
+ flex: none;
2624
+ display: grid;
2625
+ place-items: center;
2626
+ width: 36px;
2627
+ height: 36px;
2628
+ border-radius: 8px;
2629
+ background: var(--orb-p100);
2630
+ color: var(--orb-primary);
2631
+ font: 600 13px/1 ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
2632
+ }
2633
+
2634
+ .orb-html-demo-info {
2635
+ flex: 1;
2636
+ min-width: 0;
2637
+ display: flex;
2638
+ flex-direction: column;
2639
+ gap: 2px;
2640
+ }
2641
+
2642
+ .orb-html-demo-title {
2643
+ overflow: hidden;
2644
+ text-overflow: ellipsis;
2645
+ white-space: nowrap;
2646
+ font: 600 14px/1.35 var(--orb-font);
2647
+ color: var(--orb-fg-strong);
2648
+ }
2649
+
2650
+ .orb-html-demo-meta {
2651
+ font: 500 12px/1.3 var(--orb-font);
2652
+ color: var(--orb-muted);
2653
+ }
2654
+
2655
+ .orb-html-demo-openpill {
2656
+ flex: none;
2657
+ padding: 7px 16px;
2658
+ border-radius: 999px;
2659
+ background: var(--orb-primary);
2660
+ color: var(--orb-on-primary);
2661
+ font: 600 13px/1.2 var(--orb-font);
2662
+ transition: background var(--orb-t-fast);
2663
+ }
2664
+
2665
+ .orb-html-demo-card:hover .orb-html-demo-openpill {
2666
+ background: var(--orb-p600);
2667
+ }
2668
+
2669
+ /* Expanded demo: lives in the reply flow, no overlay. Height comes from the
2670
+ iframe's content probe (clamped 200–560px in HtmlDemo). */
2671
+ .orb-html-demo {
2672
+ margin: 12px 0;
2673
+ overflow: hidden;
2674
+ background: var(--orb-canvas);
2675
+ border: 1px solid var(--orb-border);
2676
+ border-radius: var(--orb-r);
2677
+ }
2678
+
2679
+ .orb-html-demo-head {
2680
+ display: flex;
2681
+ align-items: center;
2682
+ gap: 12px;
2683
+ padding: 8px 10px 8px 14px;
2590
2684
  border-bottom: 1px solid var(--orb-border);
2591
2685
  background: var(--orb-surface);
2592
- color: var(--orb-fg-strong);
2686
+ }
2687
+
2688
+ .orb-html-demo-head .orb-html-demo-glyph {
2689
+ width: 28px;
2690
+ height: 28px;
2691
+ font-size: 11px;
2692
+ }
2693
+
2694
+ .orb-html-demo-head-title {
2695
+ flex: 1;
2696
+ min-width: 0;
2697
+ overflow: hidden;
2698
+ text-overflow: ellipsis;
2699
+ white-space: nowrap;
2593
2700
  font: 600 14px/1.3 var(--orb-font);
2701
+ color: var(--orb-fg-strong);
2702
+ }
2703
+
2704
+ .orb-html-demo-segment {
2705
+ flex: none;
2706
+ }
2707
+
2708
+ .orb-html-demo-actions {
2709
+ flex: none;
2710
+ display: flex;
2711
+ align-items: center;
2712
+ gap: 4px;
2594
2713
  }
2595
2714
 
2596
- .markdown-body .orb-html-demo {
2715
+ .orb-html-demo-frame {
2597
2716
  display: block;
2598
2717
  width: 100%;
2599
- margin: 0;
2600
2718
  border: 0;
2601
2719
  background: var(--orb-canvas);
2720
+ transition: height var(--orb-t-fast);
2721
+ }
2722
+
2723
+ .orb-html-demo-code {
2724
+ max-height: 480px;
2725
+ overflow: auto;
2726
+ }
2727
+
2728
+ /* Author display rules would beat the UA's [hidden], so hide explicitly. */
2729
+ .orb-html-demo-frame[hidden],
2730
+ .orb-html-demo-code[hidden] {
2731
+ display: none;
2732
+ }
2733
+
2734
+ @media (prefers-reduced-motion: reduce) {
2735
+ .orb-html-demo-frame {
2736
+ transition: none;
2737
+ }
2602
2738
  }
2603
2739
 
2604
2740
  .markdown-body blockquote {
@@ -2933,6 +3069,19 @@ button.orb-app-header-locale:hover,
2933
3069
  color: var(--orb-on-primary);
2934
3070
  font: 600 12px/1 var(--orb-font);
2935
3071
  }
3072
+ /* 传 <img> 时放开圆形底:宽高自适应、无底色,宿主用它放品牌标识(如 MIXER pill) */
3073
+ .orb-omph-avatar:has(img) {
3074
+ width: auto;
3075
+ height: auto;
3076
+ border-radius: 0;
3077
+ background: none;
3078
+ overflow: visible;
3079
+ }
3080
+ .orb-omph-avatar img {
3081
+ display: block;
3082
+ height: 28px;
3083
+ width: auto;
3084
+ }
2936
3085
 
2937
3086
  .orb-omph-title {
2938
3087
  font: 600 14px/1.2 var(--orb-font);
@@ -3031,6 +3180,26 @@ button.orb-app-header-locale:hover,
3031
3180
  white-space: pre-wrap;
3032
3181
  }
3033
3182
 
3183
+ /* 运行中补充的输入:虚线描边表示还没送达,送达后宿主清掉 queued 回到实线 */
3184
+ .orb-omph-user-bubble[data-queued] {
3185
+ border-style: dashed;
3186
+ }
3187
+
3188
+ .orb-omph-user-meta {
3189
+ display: flex;
3190
+ align-items: center;
3191
+ gap: 8px;
3192
+ }
3193
+
3194
+ .orb-omph-user-queued {
3195
+ padding: 1px 8px;
3196
+ border: 1px solid var(--orb-p100);
3197
+ border-radius: 999px;
3198
+ color: var(--orb-primary);
3199
+ font: 600 10px/1.4 var(--orb-font);
3200
+ letter-spacing: 0.02em;
3201
+ }
3202
+
3034
3203
  .orb-omph-clock {
3035
3204
  font: 500 11px/1.3 var(--orb-font);
3036
3205
  color: var(--orb-muted);
@@ -3403,6 +3572,28 @@ button.orb-app-header-locale:hover,
3403
3572
  background: var(--orb-err);
3404
3573
  }
3405
3574
 
3575
+ /* 忙碌且有草稿时的次级停止:描边样式和主发送按钮区分开 */
3576
+ .orb-omph-stop-secondary {
3577
+ display: inline-flex;
3578
+ align-items: center;
3579
+ justify-content: center;
3580
+ flex: none;
3581
+ width: 36px;
3582
+ height: 36px;
3583
+ border: 1px solid var(--orb-border);
3584
+ border-radius: 50%;
3585
+ background: transparent;
3586
+ color: var(--orb-muted);
3587
+ cursor: pointer;
3588
+ transition: color var(--orb-t-fast), border-color var(--orb-t-fast);
3589
+ }
3590
+
3591
+ .orb-omph-stop-secondary:hover,
3592
+ .orb-omph-stop-secondary:focus-visible {
3593
+ border-color: var(--orb-err);
3594
+ color: var(--orb-err);
3595
+ }
3596
+
3406
3597
  @media (prefers-reduced-motion: reduce) {
3407
3598
  .orb-omph-dot[data-active="true"],
3408
3599
  .orb-omph-caret,
@@ -3644,6 +3835,121 @@ button.orb-app-header-locale:hover,
3644
3835
  font: 500 12px/1.5 var(--orb-font);
3645
3836
  }
3646
3837
 
3838
+ /* ----- sheet (xlsx) ----- */
3839
+ /* 表格吃满内容区:标签条固定,网格区两轴滚动 */
3840
+ .orb-omph-pv-body[data-kind="sheet"] {
3841
+ display: flex;
3842
+ flex-direction: column;
3843
+ overflow: hidden;
3844
+ }
3845
+
3846
+ .orb-omph-sheet {
3847
+ flex: 1;
3848
+ min-height: 0;
3849
+ display: flex;
3850
+ flex-direction: column;
3851
+ }
3852
+
3853
+ .orb-omph-sheet-bar {
3854
+ flex: none;
3855
+ display: flex;
3856
+ align-items: center;
3857
+ gap: 8px;
3858
+ padding: 8px 12px;
3859
+ border-bottom: 1px solid var(--orb-border);
3860
+ background: var(--orb-surface);
3861
+ }
3862
+
3863
+ .orb-omph-sheet-tabs {
3864
+ flex: 1;
3865
+ min-width: 0;
3866
+ display: flex;
3867
+ gap: 4px;
3868
+ overflow-x: auto;
3869
+ }
3870
+
3871
+ .orb-omph-sheet-tab {
3872
+ flex: none;
3873
+ padding: 4px 12px;
3874
+ border: 1px solid transparent;
3875
+ border-radius: var(--orb-r);
3876
+ background: transparent;
3877
+ color: var(--orb-muted);
3878
+ font: 500 12px/1.4 var(--orb-font);
3879
+ white-space: nowrap;
3880
+ cursor: pointer;
3881
+ transition: background var(--orb-t-fast), color var(--orb-t-fast);
3882
+ }
3883
+
3884
+ .orb-omph-sheet-tab:hover {
3885
+ background: var(--orb-hover);
3886
+ color: var(--orb-fg-strong);
3887
+ }
3888
+
3889
+ .orb-omph-sheet-tab[data-active] {
3890
+ background: var(--orb-p100);
3891
+ color: var(--orb-primary);
3892
+ }
3893
+
3894
+ .orb-omph-sheet-tab:focus-visible {
3895
+ outline: 2px solid var(--orb-focus-solid);
3896
+ outline-offset: 1px;
3897
+ }
3898
+
3899
+ .orb-omph-sheet-scroll {
3900
+ flex: 1;
3901
+ min-height: 0;
3902
+ overflow: auto;
3903
+ overscroll-behavior: contain;
3904
+ }
3905
+
3906
+ .orb-omph-sheet-grid {
3907
+ border-collapse: separate;
3908
+ border-spacing: 0;
3909
+ font: 400 12px/1.5 var(--orb-font);
3910
+ color: var(--orb-fg);
3911
+ }
3912
+
3913
+ .orb-omph-sheet-grid th,
3914
+ .orb-omph-sheet-grid td {
3915
+ padding: 4px 10px;
3916
+ border-right: 1px solid var(--orb-border);
3917
+ border-bottom: 1px solid var(--orb-border);
3918
+ text-align: left;
3919
+ vertical-align: top;
3920
+ white-space: pre-wrap;
3921
+ word-break: break-word;
3922
+ max-width: 320px;
3923
+ }
3924
+
3925
+ .orb-omph-sheet-grid thead th {
3926
+ position: sticky;
3927
+ top: 0;
3928
+ z-index: 2;
3929
+ background: var(--orb-surface);
3930
+ color: var(--orb-muted);
3931
+ font-weight: 500;
3932
+ text-align: center;
3933
+ min-width: 72px;
3934
+ }
3935
+
3936
+ .orb-omph-sheet-grid tbody th {
3937
+ position: sticky;
3938
+ left: 0;
3939
+ z-index: 1;
3940
+ background: var(--orb-surface);
3941
+ color: var(--orb-muted);
3942
+ font-weight: 500;
3943
+ text-align: right;
3944
+ min-width: 40px;
3945
+ }
3946
+
3947
+ .orb-omph-sheet-grid .orb-omph-sheet-corner {
3948
+ left: 0;
3949
+ z-index: 3;
3950
+ min-width: 40px;
3951
+ }
3952
+
3647
3953
  .orb-omph-pv-doc {
3648
3954
  max-width: 760px;
3649
3955
  margin: 0 auto;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orbcafe-ui",
3
- "version": "3.1.4",
3
+ "version": "3.1.8",
4
4
  "description": "ORBCAFE UI components — ORBIS brand system, MUI-free",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -87,6 +87,7 @@
87
87
  "dayjs": "^1.11.19",
88
88
  "framer-motion": "^12.35.1",
89
89
  "i18next": "^25.8.18",
90
+ "jszip": "^3.10.2",
90
91
  "mermaid": "^10.9.0",
91
92
  "ogl": "^1.0.11",
92
93
  "react-i18next": "^16.5.8",