@tutti-os/workbench-surface 0.0.26 → 0.0.28

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.
@@ -2606,480 +2606,6 @@ body[data-desktop-dock-minimized-stack-open="true"] .desktop-dock {
2606
2606
  }
2607
2607
  }
2608
2608
 
2609
- .workspace-launchpad-dock-icon {
2610
- --workspace-launchpad-dock-icon-bg: var(--transparency-block);
2611
- --workspace-launchpad-dock-icon-border: var(--line-1);
2612
- box-sizing: border-box;
2613
- display: grid;
2614
- width: 44px;
2615
- height: 44px;
2616
- grid-template-columns: repeat(2, minmax(0, 1fr));
2617
- gap: 2px;
2618
- padding: 3px;
2619
- border: 1px solid var(--workspace-launchpad-dock-icon-border);
2620
- border-radius: 8px;
2621
- background: var(--workspace-launchpad-dock-icon-bg);
2622
- }
2623
-
2624
- .desktop-dock__slot[data-wallpaper-tone="dark"] .workspace-launchpad-dock-icon {
2625
- --workspace-launchpad-dock-icon-bg: rgb(255 255 255 / 18%);
2626
- --workspace-launchpad-dock-icon-border: rgb(255 255 255 / 15%);
2627
- }
2628
-
2629
- .desktop-dock__slot[data-wallpaper-tone="light"]
2630
- .workspace-launchpad-dock-icon {
2631
- --workspace-launchpad-dock-icon-bg: rgb(0 0 0 / 10%);
2632
- --workspace-launchpad-dock-icon-border: rgb(0 0 0 / 10%);
2633
- }
2634
-
2635
- .workspace-launchpad-dock-icon__tile {
2636
- display: block;
2637
- overflow: visible;
2638
- min-width: 0;
2639
- min-height: 0;
2640
- border-radius: 4px;
2641
- background: transparent;
2642
- }
2643
-
2644
- .workspace-launchpad-dock-icon__tile > img {
2645
- display: block;
2646
- width: 100%;
2647
- height: 100%;
2648
- object-fit: contain;
2649
- object-position: center;
2650
- }
2651
-
2652
- .workspace-launchpad-overlay {
2653
- position: absolute;
2654
- top: 0;
2655
- right: 0;
2656
- bottom: 0;
2657
- left: 0;
2658
- z-index: 10;
2659
- overflow: hidden;
2660
- color: var(--text-primary);
2661
- pointer-events: auto;
2662
- -webkit-app-region: no-drag;
2663
- }
2664
-
2665
- .workspace-launchpad-overlay--closing {
2666
- pointer-events: none;
2667
- }
2668
-
2669
- .workspace-launchpad-overlay__dismiss {
2670
- position: absolute;
2671
- inset: 0;
2672
- z-index: 0;
2673
- border: 0;
2674
- background: var(--backdrop);
2675
- backdrop-filter: blur(24px) saturate(1.18);
2676
- animation: workspace-launchpad-backdrop-enter 160ms ease-out both;
2677
- opacity: 1;
2678
- transition: opacity 180ms ease;
2679
- -webkit-backdrop-filter: blur(24px) saturate(1.18);
2680
- }
2681
-
2682
- .workspace-launchpad-overlay--closing .workspace-launchpad-overlay__dismiss {
2683
- opacity: 0;
2684
- }
2685
-
2686
- .workspace-launchpad-overlay__content {
2687
- position: relative;
2688
- z-index: 1;
2689
- --workspace-launchpad-content-offset-x: 0px;
2690
- display: grid;
2691
- height: 100%;
2692
- min-height: 0;
2693
- grid-template-rows: 64px minmax(0, 1fr) 26px;
2694
- row-gap: 24px;
2695
- padding: 24px clamp(24px, 5vw, 76px) 106px;
2696
- opacity: 1;
2697
- transform: translateX(var(--workspace-launchpad-content-offset-x))
2698
- translateY(0) scale(1);
2699
- transition:
2700
- opacity 180ms ease,
2701
- transform 180ms cubic-bezier(0.4, 0, 1, 1);
2702
- -webkit-app-region: drag;
2703
- }
2704
-
2705
- .workspace-launchpad-overlay__content[data-dock-placement="left"] {
2706
- --workspace-launchpad-content-offset-x: 24px;
2707
- }
2708
-
2709
- @media (max-height: 900px) {
2710
- .workspace-launchpad-overlay__content {
2711
- padding-bottom: clamp(52px, 8vh, 84px);
2712
- }
2713
- }
2714
-
2715
- .workspace-launchpad-overlay--closing .workspace-launchpad-overlay__content {
2716
- opacity: 0;
2717
- transform: translateX(var(--workspace-launchpad-content-offset-x))
2718
- translateY(10px) scale(0.985);
2719
- }
2720
-
2721
- .workspace-workbench-shell--launchpad-open .workbench-dock-frame {
2722
- z-index: 20;
2723
- }
2724
-
2725
- .workspace-launchpad-overlay__topbar {
2726
- position: relative;
2727
- z-index: 1;
2728
- display: flex;
2729
- min-width: 0;
2730
- align-items: flex-start;
2731
- justify-content: center;
2732
- -webkit-app-region: drag;
2733
- }
2734
-
2735
- .workspace-launchpad-search {
2736
- position: relative;
2737
- display: block;
2738
- justify-self: center;
2739
- width: min(330px, calc(100vw - 80px));
2740
- -webkit-app-region: no-drag;
2741
- }
2742
-
2743
- .workspace-launchpad-search__icon {
2744
- position: absolute;
2745
- inset-block: 0;
2746
- left: 11px;
2747
- width: 16px;
2748
- height: 16px;
2749
- margin-block: auto;
2750
- color: var(--text-secondary);
2751
- pointer-events: none;
2752
- }
2753
-
2754
- .workspace-launchpad-search__input {
2755
- padding-left: 34px;
2756
- padding-right: 40px;
2757
- box-shadow: none;
2758
- text-shadow: none;
2759
- }
2760
-
2761
- .workspace-launchpad-search__input::-webkit-search-cancel-button {
2762
- display: none;
2763
- -webkit-appearance: none;
2764
- }
2765
-
2766
- .workspace-launchpad-search__input:focus,
2767
- .workspace-launchpad-search__input:focus-visible {
2768
- box-shadow: none;
2769
- }
2770
-
2771
- .workspace-launchpad-search__clear {
2772
- position: absolute;
2773
- inset-block: 0;
2774
- right: 8px;
2775
- display: grid;
2776
- width: 24px;
2777
- height: 24px;
2778
- margin-block: auto;
2779
- place-items: center;
2780
- border: 0;
2781
- border-radius: 999px;
2782
- background: transparent;
2783
- color: var(--text-tertiary);
2784
- cursor: pointer;
2785
- transition: color 120ms ease;
2786
- }
2787
-
2788
- .workspace-launchpad-search__clear > svg {
2789
- width: 16px;
2790
- height: 16px;
2791
- }
2792
-
2793
- .workspace-launchpad-search__clear:hover {
2794
- background: transparent;
2795
- color: var(--text-primary);
2796
- }
2797
-
2798
- .workspace-launchpad-search__clear:active {
2799
- background: transparent;
2800
- color: var(--text-primary);
2801
- }
2802
-
2803
- .workspace-launchpad-search__clear:focus-visible {
2804
- outline: 2px solid var(--border-focus);
2805
- outline-offset: 1px;
2806
- }
2807
-
2808
- .workspace-launchpad-grid-viewport {
2809
- display: grid;
2810
- min-height: 0;
2811
- align-content: center;
2812
- justify-items: center;
2813
- overflow: visible;
2814
- -webkit-app-region: no-drag;
2815
- }
2816
-
2817
- .workspace-launchpad-grid {
2818
- display: grid;
2819
- width: min(100%, 1040px);
2820
- align-content: center;
2821
- justify-content: center;
2822
- column-gap: clamp(20px, 4vw, 56px);
2823
- row-gap: clamp(22px, 3.5vh, 44px);
2824
- animation: workspace-launchpad-grid-enter 160ms ease-out;
2825
- }
2826
-
2827
- .workspace-launchpad-item {
2828
- display: flex;
2829
- width: 136px;
2830
- min-width: 0;
2831
- min-height: 124px;
2832
- flex-direction: column;
2833
- align-items: center;
2834
- gap: 8px;
2835
- border: 0;
2836
- background: transparent;
2837
- color: var(--text-primary);
2838
- cursor: pointer;
2839
- text-align: center;
2840
- text-shadow: none;
2841
- transition:
2842
- opacity 140ms ease,
2843
- transform 150ms cubic-bezier(0.22, 1, 0.36, 1),
2844
- filter 140ms ease;
2845
- }
2846
-
2847
- .workspace-launchpad-item-wrap {
2848
- position: relative;
2849
- width: 136px;
2850
- min-width: 0;
2851
- animation: workspace-launchpad-item-enter 420ms cubic-bezier(0.16, 1, 0.3, 1)
2852
- both;
2853
- animation-delay: var(--workspace-launchpad-item-delay, 0ms);
2854
- transform-origin: center bottom;
2855
- will-change: opacity, transform, filter;
2856
- }
2857
-
2858
- .workspace-launchpad-item:hover {
2859
- transform: translateY(-2px);
2860
- }
2861
-
2862
- .workspace-launchpad-item:active {
2863
- transform: translateY(0) scale(0.98);
2864
- }
2865
-
2866
- .workspace-launchpad-item:focus-visible {
2867
- outline: 2px solid var(--border-focus);
2868
- outline-offset: 6px;
2869
- border-radius: 8px;
2870
- }
2871
-
2872
- .workspace-launchpad-item--disabled {
2873
- cursor: default;
2874
- filter: grayscale(0.45);
2875
- opacity: 0.42;
2876
- }
2877
-
2878
- .workspace-launchpad-item--disabled:hover,
2879
- .workspace-launchpad-item--disabled:active {
2880
- transform: none;
2881
- }
2882
-
2883
- .workspace-launchpad-item__icon {
2884
- display: grid;
2885
- width: 54px;
2886
- height: 54px;
2887
- place-items: center;
2888
- overflow: visible;
2889
- border-radius: 0;
2890
- background: transparent;
2891
- box-shadow: none;
2892
- color: var(--text-primary);
2893
- }
2894
-
2895
- .workspace-launchpad-item__icon > img {
2896
- display: block;
2897
- width: 100%;
2898
- height: 100%;
2899
- filter: none;
2900
- object-fit: contain;
2901
- object-position: center;
2902
- }
2903
-
2904
- .workspace-launchpad-item__icon > svg {
2905
- width: 28px;
2906
- height: 28px;
2907
- }
2908
-
2909
- .workspace-launchpad-item__label {
2910
- display: -webkit-box;
2911
- width: 100%;
2912
- min-height: 34px;
2913
- overflow: hidden;
2914
- -webkit-box-orient: vertical;
2915
- -webkit-line-clamp: 2;
2916
- color: inherit;
2917
- font-size: 13px;
2918
- font-weight: 400;
2919
- line-height: 17px;
2920
- overflow-wrap: anywhere;
2921
- }
2922
-
2923
- .workspace-launchpad-dock-hover-panel {
2924
- --desktop-dock-tooltip-gap: 12px;
2925
- --workspace-launchpad-hover-panel-shift: 0px;
2926
-
2927
- animation: workspace-launchpad-hover-panel-enter 160ms
2928
- cubic-bezier(0.16, 1, 0.3, 1) both;
2929
- bottom: calc(100% + var(--desktop-dock-tooltip-gap, 12px));
2930
- left: 50%;
2931
- right: auto;
2932
- top: auto;
2933
- z-index: 45;
2934
- max-width: min(240px, calc(100vw - 32px));
2935
- opacity: 1;
2936
- pointer-events: auto;
2937
- transform: translateX(
2938
- calc(-50% + var(--workspace-launchpad-hover-panel-shift))
2939
- )
2940
- translateY(0);
2941
- }
2942
-
2943
- .workspace-launchpad-empty {
2944
- align-self: center;
2945
- justify-self: center;
2946
- padding: 0;
2947
- border: 0;
2948
- background: transparent;
2949
- color: rgb(255 255 255 / 0.82);
2950
- font-size: 14px;
2951
- line-height: 20px;
2952
- box-shadow: none;
2953
- }
2954
-
2955
- .workspace-launchpad-pages {
2956
- display: flex;
2957
- min-height: 18px;
2958
- align-items: center;
2959
- justify-content: center;
2960
- gap: 9px;
2961
- -webkit-app-region: no-drag;
2962
- }
2963
-
2964
- .workspace-launchpad-page-dot {
2965
- width: 8px;
2966
- height: 8px;
2967
- padding: 0;
2968
- border: 0;
2969
- border-radius: 999px;
2970
- background: rgb(255 255 255 / 0.28);
2971
- cursor: pointer;
2972
- transition:
2973
- background-color 120ms ease,
2974
- transform 120ms ease;
2975
- }
2976
-
2977
- .workspace-launchpad-page-dot[data-active="true"] {
2978
- background: rgb(255 255 255 / 0.92);
2979
- transform: scale(1.12);
2980
- }
2981
-
2982
- .workspace-launchpad-page-dot:focus-visible {
2983
- outline: 2px solid rgb(255 255 255 / 0.74);
2984
- outline-offset: 4px;
2985
- }
2986
-
2987
- @keyframes workspace-launchpad-grid-enter {
2988
- from {
2989
- opacity: 0;
2990
- }
2991
-
2992
- to {
2993
- opacity: 1;
2994
- }
2995
- }
2996
-
2997
- @keyframes workspace-launchpad-backdrop-enter {
2998
- from {
2999
- opacity: 0;
3000
- }
3001
-
3002
- to {
3003
- opacity: 1;
3004
- }
3005
- }
3006
-
3007
- @keyframes workspace-launchpad-hover-panel-enter {
3008
- from {
3009
- opacity: 0;
3010
- transform: translateX(-50%) translateY(10px);
3011
- }
3012
-
3013
- to {
3014
- opacity: 1;
3015
- transform: translateX(-50%) translateY(0);
3016
- }
3017
- }
3018
-
3019
- @keyframes workspace-launchpad-item-enter {
3020
- from {
3021
- opacity: 0;
3022
- filter: blur(2px);
3023
- transform: translateY(var(--workspace-launchpad-item-rise, 18px))
3024
- scale(0.96);
3025
- }
3026
-
3027
- 58% {
3028
- opacity: 1;
3029
- filter: blur(0);
3030
- }
3031
-
3032
- to {
3033
- opacity: 1;
3034
- filter: blur(0);
3035
- transform: translateY(0) scale(1);
3036
- }
3037
- }
3038
-
3039
- @media (prefers-reduced-motion: reduce) {
3040
- .workspace-launchpad-grid,
3041
- .workspace-launchpad-item-wrap {
3042
- animation: none;
3043
- }
3044
-
3045
- .workspace-launchpad-overlay__content,
3046
- .workspace-launchpad-overlay__dismiss {
3047
- animation: none;
3048
- transition: none;
3049
- }
3050
-
3051
- .workspace-launchpad-item-wrap {
3052
- opacity: 1;
3053
- transform: none;
3054
- }
3055
- }
3056
-
3057
- @media (max-width: 720px) {
3058
- .workspace-launchpad-overlay__content {
3059
- row-gap: 18px;
3060
- padding-inline: 20px;
3061
- padding-bottom: 100px;
3062
- }
3063
-
3064
- .workspace-launchpad-grid {
3065
- column-gap: 18px;
3066
- }
3067
-
3068
- .workspace-launchpad-item {
3069
- width: 112px;
3070
- }
3071
-
3072
- .workspace-launchpad-item-wrap {
3073
- width: 112px;
3074
- }
3075
-
3076
- .workspace-launchpad-item__icon {
3077
- width: 54px;
3078
- height: 54px;
3079
- border-radius: 16px;
3080
- }
3081
- }
3082
-
3083
2609
  [data-workspace-app-icon="true"] {
3084
2610
  display: inline-grid;
3085
2611
  min-width: 0;
@@ -265,18 +265,6 @@ test("dock overflow keeps scroll controls viewport-bound", () => {
265
265
  css,
266
266
  /\.desktop-dock\[data-dock-placement="left"\]\s+\.desktop-dock__separator\s*{[^}]*align-self:\s*flex-start;[^}]*margin:\s*4px 0 4px var\(--desktop-dock-separator-center-offset\);/s
267
267
  );
268
- assert.match(
269
- css,
270
- /\.workspace-launchpad-dock-icon\s*{[^}]*--workspace-launchpad-dock-icon-bg:\s*var\(--transparency-block\);[^}]*--workspace-launchpad-dock-icon-border:\s*var\(--line-1\);[^}]*background:\s*var\(--workspace-launchpad-dock-icon-bg\);/s
271
- );
272
- assert.match(
273
- css,
274
- /\.desktop-dock__slot\[data-wallpaper-tone="dark"\]\s+\.workspace-launchpad-dock-icon\s*{[^}]*--workspace-launchpad-dock-icon-bg:\s*rgb\(255 255 255 \/ 18%\);[^}]*--workspace-launchpad-dock-icon-border:\s*rgb\(255 255 255 \/ 15%\);/s
275
- );
276
- assert.match(
277
- css,
278
- /\.desktop-dock__slot\[data-wallpaper-tone="light"\]\s+\.workspace-launchpad-dock-icon\s*{[^}]*--workspace-launchpad-dock-icon-bg:\s*rgb\(0 0 0 \/ 10%\);[^}]*--workspace-launchpad-dock-icon-border:\s*rgb\(0 0 0 \/ 10%\);/s
279
- );
280
268
  assert.match(
281
269
  css,
282
270
  /\.desktop-dock\[data-scroll-overflow="true"\]:hover\s+\.desktop-dock__scroll-button:not\(:disabled\)/s
@@ -407,40 +395,3 @@ test("dock overflow keeps scroll controls viewport-bound", () => {
407
395
  /\.desktop-dock\[data-dock-placement="left"\]\[data-scroll-forward="true"\]\s+\.desktop-dock__items\s*{[^}]*mask-image:\s*linear-gradient\(\s*to bottom,/s
408
396
  );
409
397
  });
410
-
411
- test("launchpad top bar remains draggable without stealing controls", () => {
412
- const css = readFileSync(resolve("src/styles/workbench.css"), "utf8");
413
-
414
- assert.match(
415
- css,
416
- /\.workspace-launchpad-overlay__content\s*{[^}]*-webkit-app-region:\s*drag;/s
417
- );
418
- assert.match(
419
- css,
420
- /\.workspace-launchpad-overlay__topbar\s*{[^}]*-webkit-app-region:\s*drag;/s
421
- );
422
- assert.match(
423
- css,
424
- /\.workspace-launchpad-search\s*{[^}]*-webkit-app-region:\s*no-drag;/s
425
- );
426
- assert.match(
427
- css,
428
- /\.workspace-launchpad-grid-viewport\s*{[^}]*-webkit-app-region:\s*no-drag;/s
429
- );
430
- assert.match(
431
- css,
432
- /\.workspace-launchpad-grid-viewport\s*{[^}]*overflow:\s*visible;/s
433
- );
434
- assert.match(
435
- css,
436
- /\.workspace-launchpad-dock-hover-panel\s*{[^}]*--workspace-launchpad-hover-panel-shift:\s*0px;[^}]*left:\s*50%;[^}]*right:\s*auto;[^}]*max-width:\s*min\(240px, calc\(100vw - 32px\)\);[^}]*transform:\s*translateX\(\s*calc\(-50% \+ var\(--workspace-launchpad-hover-panel-shift\)\)\s*\)/s
437
- );
438
- assert.doesNotMatch(
439
- css,
440
- /workspace-launchpad-dock-hover-panel\[data-hover-panel-align=/
441
- );
442
- assert.match(
443
- css,
444
- /\.workspace-launchpad-pages\s*{[^}]*-webkit-app-region:\s*no-drag;/s
445
- );
446
- });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/workbench-surface",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -34,10 +34,10 @@
34
34
  "@tutti-os/config-tsconfig": "0.0.0"
35
35
  },
36
36
  "dependencies": {
37
- "@tutti-os/ui-i18n-runtime": "0.0.26",
38
- "@tutti-os/ui-react-hooks": "0.0.26",
39
- "@tutti-os/workbench-snapshot": "0.0.26",
40
- "@tutti-os/ui-system": "0.0.26"
37
+ "@tutti-os/ui-i18n-runtime": "0.0.28",
38
+ "@tutti-os/ui-react-hooks": "0.0.28",
39
+ "@tutti-os/workbench-snapshot": "0.0.28",
40
+ "@tutti-os/ui-system": "0.0.28"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "react": "^19.1.0",