@openfin/core-web 0.44.46 → 0.44.48

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/out/styles.css CHANGED
@@ -59,16 +59,6 @@
59
59
  .lm_header [class^=lm_] {
60
60
  box-sizing: content-box !important;
61
61
  }
62
- .lm_header .addTabButton {
63
- -webkit-user-select: none;
64
- user-select: none;
65
- cursor: pointer;
66
- display: flex;
67
- align-items: center;
68
- justify-content: center;
69
- font-weight: bold;
70
- padding: 0 6px;
71
- }
72
62
  .lm_header .lm_controls {
73
63
  position: absolute;
74
64
  right: 3px;
@@ -376,6 +366,17 @@
376
366
  --top-bar-button-hover-color: var(--tab-background-color);
377
367
  --top-bar-button-active-color: var(--tab-button-active-color);
378
368
 
369
+ /*Layout overflow customization */
370
+ /* Dynamically calculated (0 to 1) but can be used to customize shadows
371
+ --layout-tab-overflow-fade-left
372
+ --layout-tab-overflow-fade-right
373
+ */
374
+ --layout-tab-overflow-fade-size: 16px;
375
+ --layout-tab-overflow-shadow-color: inherit; /* Default to initial to not break users that haven't set a color on tabs */
376
+ /* The next two are defined as initial because we need different values for the preview if they are not set */
377
+ --layout-tab-width: initial;
378
+ --layout-tab-min-width: initial;
379
+
379
380
  /* Measurements for various components */
380
381
  --title-bar-height: 30px;
381
382
  --title-bar-border-bottom-height: 1px;
@@ -784,4 +785,211 @@ div.placeholder_image img {
784
785
 
785
786
  :root.light-theme .lm_tabdropdown_list::-webkit-scrollbar-thumb {
786
787
  background-color: #111214;
787
- }
788
+ }
789
+
790
+ /**
791
+ * Tab Overflow Scroll Animation System
792
+ *
793
+ * This CSS implements a scroll-driven animation system for overflowing tabs with dynamic fade effects.
794
+ *
795
+ * How it works:
796
+ *
797
+ * 1. CUSTOM PROPERTIES (@property):
798
+ * - Defines --layout-tab-overflow-fade-left and --layout-tab-overflow-fade-right as animatable numbers
799
+ * - These properties control the intensity of fade masks on each side (0 = no fade, 1 = full fade)
800
+ *
801
+ * 2. SCROLL-DRIVEN ANIMATION (tabScrollFade):
802
+ - see https://css-tricks.com/modern-scroll-shadows-using-scroll-driven-animations/
803
+ * - Uses CSS scroll-timeline to trigger animation based on scroll position
804
+ * - At scroll start (0%): Left fade is 0 (no fade), right fade is 1 (active)
805
+ * - During scroll (10%-90%): Both fades are active (1)
806
+ * - At scroll end (100%): Right fade is 0 (no fade), left fade is 1 (active)
807
+ * - --layout-tabs-overflowing acts as a [space-toggle](https://css-tricks.com/the-css-custom-property-toggle-trick/) boolean for overflow state detection
808
+ *
809
+ * 3. MASK APPLICATION (.lm_tabs):
810
+ * - linear-gradient mask creates transparent-to-opaque transitions on left/right edges
811
+ * - Variables control the fade intensity.
812
+ * - When fade value is 0, that side has no fade (fully opaque)
813
+ * - When fade value is 1, that side fades from transparent to opaque over the fade-size distance
814
+ *
815
+ * 4. SHADOW REVEAL:
816
+ * - .lm_tabs_scroll_shadow has a background color (--layout-tab-overflow-shadow-color)
817
+ * - As the mask reveals transparency, the shadow background becomes visible through the fade
818
+ * - This creates a visual indicator showing there's more content to scroll
819
+ *
820
+ * 5. DYNAMIC TAB SIZING:
821
+ * - Uses --layout-tab-width and --layout-tab-min-width for flexible tab dimensions
822
+ * - Internal variables provide defaults while allowing user overrides
823
+ * - Possible gotchas when modifying:
824
+ - If a user wants to use container-queries for tab width, `lm_tab.width` must be set to an absolute value for lm_tab to be sized properly with the `container` property. This is why have the --layout-tab-width variable.
825
+ - The tab drop preview has no content so it needs to be initialized to something other than fit-content.
826
+ */
827
+
828
+ /** Define as global properties so that they can be used in the animation */
829
+ @property --layout-tab-overflow-fade-left {
830
+ syntax: '<number>';
831
+ inherits: true;
832
+ initial-value: 0;
833
+ }
834
+
835
+ @property --layout-tab-overflow-fade-right {
836
+ syntax: '<number>';
837
+ inherits: true;
838
+ initial-value: 0;
839
+ }
840
+
841
+ @keyframes tabScrollFade {
842
+ 0% {
843
+ /* Space toggle. Whitespace can be used as true/false Unused by us directly but should be exposed for environments that don't support if() (ie core-web on safari) */
844
+ --layout-tabs-overflowing: ;
845
+ --layout-tab-overflow-fade-left: 0;
846
+ }
847
+ 10%, 100% {
848
+ --layout-tab-overflow-fade-left: 1;
849
+ }
850
+
851
+ 0%, 90% {
852
+ --layout-tab-overflow-fade-right: 1;
853
+ }
854
+
855
+ 100% {
856
+ /* Space toggle. Whitespace can be used as true/false */
857
+ --layout-tabs-overflowing: ;
858
+ --layout-tab-overflow-fade-right: 0;
859
+ }
860
+ }
861
+
862
+ .lm_goldenlayout[data-settings-tab-overflow="scroll"] {
863
+ /* Defining separate _internal variables because we need defaults but our drop preview needs to know if the user set styles */
864
+ --_internal-tab-width: var(--layout-tab-width, fit-content);
865
+ --_internal-tab-min-width: var(--layout-tab-min-width, var(--_internal-tab-width));
866
+
867
+ .lm_tab {
868
+ width: var(--_internal-tab-width);
869
+ min-width: var(--_internal-tab-min-width);
870
+ }
871
+
872
+ .lm_tabs_scroll_shadow {
873
+ width: unset;
874
+ display: flex;
875
+ position: relative;
876
+ flex: 0 1 auto;
877
+ overflow: hidden;
878
+ background: var(--layout-tab-overflow-shadow-color);
879
+
880
+ .lm_tabs {
881
+ position: unset;
882
+ --layout-tabs-overflowing: initial;
883
+ overflow-x: auto;
884
+ overflow-y: hidden;
885
+ scrollbar-width: none;
886
+ -ms-overflow-style: none;
887
+ scroll-timeline: --tab-scroll x;
888
+ animation: tabScrollFade linear both;
889
+ animation-timeline: --tab-scroll;
890
+ display: flex;
891
+
892
+ mask-image: linear-gradient(to right,
893
+ rgba(0, 0, 0, calc(1 - var(--layout-tab-overflow-fade-left))) 0,
894
+ rgba(0, 0, 0, 1) var(--layout-tab-overflow-fade-size),
895
+ rgba(0, 0, 0, 1) calc(100% - var(--layout-tab-overflow-fade-size)),
896
+ rgba(0, 0, 0, calc(1 - var(--layout-tab-overflow-fade-right))) 100%);
897
+ mask-mode: alpha;
898
+ }
899
+ }
900
+
901
+ .lm_header {
902
+ display: flex;
903
+ }
904
+
905
+ .lm_header .lm_controls {
906
+ position: unset;
907
+ flex: 0 0 auto;
908
+ /* for documentation purposes, ensure that we expect this not to shrink */
909
+ margin-left: auto;
910
+ }
911
+
912
+ .lm_drop_tab_placeholder {
913
+ /* Use the public facing variables here as the placeholder has no content */
914
+ width: var(--tab-min-width, 100px);
915
+ min-width: var(--tab-min-width, 100px);
916
+ float: unset;
917
+ }
918
+
919
+ .lm_header .newTabButton {
920
+ background-image: var(--new-tab-button-url);
921
+ filter: invert(.3);
922
+ background-size: cover;
923
+ width: 12px;
924
+ height: 12px;
925
+ float: left;
926
+ margin: 6px 5px 0 8px;
927
+ cursor: pointer;
928
+ flex: 0 0 auto;
929
+ }
930
+
931
+ .lm_header .newTabButton:hover {
932
+ filter: invert(0);
933
+ }
934
+ }
935
+ .lm_close {
936
+ display: none;
937
+ }
938
+
939
+ .lm_maximise {
940
+ opacity: 0.5;
941
+ background-repeat: no-repeat;
942
+ background-position: center;
943
+ }
944
+
945
+ .lm_maximise:hover {
946
+ opacity: 1;
947
+ }
948
+
949
+ .lm_tabdropdown {
950
+ /* Give caret a containing block */
951
+ position: relative;
952
+
953
+ &::before {
954
+ filter: invert(.3); /* dark theme idle tint */
955
+ transform: translateY(2px); /* tweak to taste */
956
+
957
+ :root.light-theme & {
958
+ filter: invert(.7);
959
+ }
960
+ }
961
+
962
+ &:hover::before {
963
+ filter: invert(0);
964
+ }
965
+ }
966
+
967
+ /* Tab isClosable setting */
968
+ .lm_tab[data-is-closable="false"] {
969
+ .lm_close_tab {
970
+ display: none !important;
971
+ }
972
+ }
973
+
974
+ /* layout hasHeaders setting */
975
+ [data-settings-has-headers="true"] {
976
+ .lm_header {
977
+ display: flex !important;
978
+ border-bottom: none !important;
979
+ min-width: 204px;
980
+ }
981
+
982
+ [class^="lm_"] {
983
+ box-sizing: border-box !important;
984
+ }
985
+
986
+ .lm_tab {
987
+ overflow-y: hidden !important;
988
+ }
989
+ }
990
+
991
+ [data-settings-prevent-splitter-resize="true"] {
992
+ .lm_splitter {
993
+ pointer-events: none;
994
+ }
995
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfin/core-web",
3
- "version": "0.44.46",
3
+ "version": "0.44.48",
4
4
  "description": "",
5
5
  "private": false,
6
6
  "files": [
@@ -34,8 +34,9 @@
34
34
  "build:worker": "webpack --env production",
35
35
  "build:rollup": "run-s build:lib:* build:broker:*",
36
36
  "build:docs": "typedoc --tsconfig tsconfig.json",
37
+ "build:css": "ts-node scripts/bundle-css.ts",
37
38
  "build": "run-p build:worker build:rollup build:docs",
38
- "postbuild": "ts-node scripts/bundle-css.ts",
39
+ "postbuild": "npm run build:css",
39
40
  "dev:worker": "webpack --env development",
40
41
  "postdev": "npm run postbuild",
41
42
  "dev": "run-p dev:worker build:rollup build:docs",
@@ -55,6 +56,6 @@
55
56
  "uuid": "^8.3.2"
56
57
  },
57
58
  "peerDependencies": {
58
- "@openfin/core": "44.100.47"
59
+ "@openfin/core": "44.100.49"
59
60
  }
60
61
  }