@genome-spy/core 0.63.0 → 0.65.0

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.
Files changed (138) hide show
  1. package/dist/bundle/{index-CCJIjehY.js → AbortablePromiseCache-CcuMrnn7.js} +22 -91
  2. package/dist/bundle/browser-txUcLy2H.js +123 -0
  3. package/dist/bundle/index-BQpbYrv4.js +1712 -0
  4. package/dist/bundle/index-BhtHKLUo.js +73 -0
  5. package/dist/bundle/index-C0llXMqm.js +280 -0
  6. package/dist/bundle/index-CCe8rnZz.js +716 -0
  7. package/dist/bundle/index-CD7FLu9x.js +269 -0
  8. package/dist/bundle/{index-C08YCM2T.js → index-D-w7Mmt9.js} +246 -126
  9. package/dist/bundle/index-D74H8TTz.js +508 -0
  10. package/dist/bundle/index-DhcU-Gk-.js +1487 -0
  11. package/dist/bundle/index.es.js +5394 -4989
  12. package/dist/bundle/index.js +420 -362
  13. package/dist/bundle/inflate-DRgHi_KK.js +1050 -0
  14. package/dist/schema.json +93 -13
  15. package/dist/src/data/collector.d.ts +7 -2
  16. package/dist/src/data/collector.d.ts.map +1 -1
  17. package/dist/src/data/collector.js +13 -2
  18. package/dist/src/data/dataFlow.d.ts +20 -42
  19. package/dist/src/data/dataFlow.d.ts.map +1 -1
  20. package/dist/src/data/dataFlow.js +57 -80
  21. package/dist/src/data/dataFlow.test.js +35 -2
  22. package/dist/src/data/flowHandle.d.ts +15 -0
  23. package/dist/src/data/flowHandle.d.ts.map +1 -0
  24. package/dist/src/data/flowHandle.js +13 -0
  25. package/dist/src/data/flowInit.d.ts +85 -0
  26. package/dist/src/data/flowInit.d.ts.map +1 -0
  27. package/dist/src/data/flowInit.js +238 -0
  28. package/dist/src/data/flowInit.test.d.ts +2 -0
  29. package/dist/src/data/flowInit.test.d.ts.map +1 -0
  30. package/dist/src/data/flowInit.test.js +413 -0
  31. package/dist/src/data/flowOptimizer.d.ts +6 -4
  32. package/dist/src/data/flowOptimizer.d.ts.map +1 -1
  33. package/dist/src/data/flowOptimizer.js +29 -14
  34. package/dist/src/data/flowOptimizer.test.js +20 -15
  35. package/dist/src/data/sources/lazy/bamSource.js +1 -1
  36. package/dist/src/data/sources/lazy/bigBedSource.js +1 -1
  37. package/dist/src/data/sources/lazy/bigWigSource.js +1 -1
  38. package/dist/src/data/sources/lazy/gff3Source.d.ts +2 -6
  39. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  40. package/dist/src/data/sources/lazy/gff3Source.js +4 -8
  41. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  42. package/dist/src/data/sources/lazy/indexedFastaSource.js +17 -17
  43. package/dist/src/data/sources/lazy/tabixSource.js +1 -1
  44. package/dist/src/genomeSpy.d.ts +1 -1
  45. package/dist/src/genomeSpy.d.ts.map +1 -1
  46. package/dist/src/genomeSpy.js +18 -61
  47. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  48. package/dist/src/gl/webGLHelper.js +8 -0
  49. package/dist/src/marks/link.fragment.glsl.js +1 -1
  50. package/dist/src/marks/link.vertex.glsl.js +1 -1
  51. package/dist/src/marks/mark.d.ts +1 -0
  52. package/dist/src/marks/mark.d.ts.map +1 -1
  53. package/dist/src/marks/mark.js +22 -1
  54. package/dist/src/marks/point.fragment.glsl.js +1 -1
  55. package/dist/src/marks/point.vertex.glsl.js +1 -1
  56. package/dist/src/marks/rect.fragment.glsl.js +1 -1
  57. package/dist/src/marks/rect.vertex.glsl.js +1 -1
  58. package/dist/src/marks/rule.fragment.glsl.js +1 -1
  59. package/dist/src/marks/rule.vertex.glsl.js +1 -1
  60. package/dist/src/marks/text.fragment.glsl.js +1 -1
  61. package/dist/src/marks/text.vertex.glsl.js +1 -1
  62. package/dist/src/selection/selection.d.ts +5 -0
  63. package/dist/src/selection/selection.d.ts.map +1 -1
  64. package/dist/src/selection/selection.js +43 -6
  65. package/dist/src/selection/selection.test.d.ts +2 -0
  66. package/dist/src/selection/selection.test.d.ts.map +1 -0
  67. package/dist/src/selection/selection.test.js +14 -0
  68. package/dist/src/spec/parameter.d.ts +28 -2
  69. package/dist/src/spec/sampleView.d.ts +3 -2
  70. package/dist/src/styles/{genome-spy.scss → genome-spy.css} +25 -21
  71. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  72. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  73. package/dist/src/styles/genome-spy.css.js +264 -195
  74. package/dist/src/styles/update.sh +14 -4
  75. package/dist/src/types/viewContext.d.ts +1 -1
  76. package/dist/src/utils/expression.d.ts +5 -0
  77. package/dist/src/utils/expression.d.ts.map +1 -1
  78. package/dist/src/utils/expression.js +37 -0
  79. package/dist/src/utils/interactionEvent.d.ts +18 -1
  80. package/dist/src/utils/interactionEvent.d.ts.map +1 -1
  81. package/dist/src/utils/interactionEvent.js +101 -1
  82. package/dist/src/utils/interactionEvent.test.d.ts +2 -0
  83. package/dist/src/utils/interactionEvent.test.d.ts.map +1 -0
  84. package/dist/src/utils/interactionEvent.test.js +35 -0
  85. package/dist/src/view/axisResolution.d.ts +5 -0
  86. package/dist/src/view/axisResolution.d.ts.map +1 -1
  87. package/dist/src/view/axisResolution.js +16 -1
  88. package/dist/src/view/facetView.d.ts +1 -1
  89. package/dist/src/view/facetView.d.ts.map +1 -1
  90. package/dist/src/view/facetView.js +1 -0
  91. package/dist/src/view/flowBuilder.d.ts +2 -2
  92. package/dist/src/view/flowBuilder.d.ts.map +1 -1
  93. package/dist/src/view/flowBuilder.js +21 -4
  94. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  95. package/dist/src/view/gridView/gridView.js +13 -0
  96. package/dist/src/view/gridView/selectionRect.d.ts +8 -4
  97. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  98. package/dist/src/view/gridView/selectionRect.js +28 -3
  99. package/dist/src/view/gridView/selectionRect.test.d.ts +2 -0
  100. package/dist/src/view/gridView/selectionRect.test.d.ts.map +1 -0
  101. package/dist/src/view/gridView/selectionRect.test.js +87 -0
  102. package/dist/src/view/paramMediator.d.ts +2 -1
  103. package/dist/src/view/paramMediator.d.ts.map +1 -1
  104. package/dist/src/view/paramMediator.js +13 -1
  105. package/dist/src/view/paramMediator.test.js +22 -0
  106. package/dist/src/view/scaleResolution.d.ts +5 -0
  107. package/dist/src/view/scaleResolution.d.ts.map +1 -1
  108. package/dist/src/view/scaleResolution.js +10 -0
  109. package/dist/src/view/testUtils.d.ts.map +1 -1
  110. package/dist/src/view/testUtils.js +16 -4
  111. package/dist/src/view/unitView.d.ts.map +1 -1
  112. package/dist/src/view/unitView.js +103 -10
  113. package/dist/src/view/view.d.ts +17 -1
  114. package/dist/src/view/view.d.ts.map +1 -1
  115. package/dist/src/view/view.js +57 -1
  116. package/dist/src/view/viewDispose.test.d.ts +2 -0
  117. package/dist/src/view/viewDispose.test.d.ts.map +1 -0
  118. package/dist/src/view/viewDispose.test.js +110 -0
  119. package/dist/src/view/viewUtils.d.ts +4 -4
  120. package/dist/src/view/viewUtils.d.ts.map +1 -1
  121. package/dist/src/view/viewUtils.js +19 -15
  122. package/dist/src/view/viewUtils.test.d.ts +2 -0
  123. package/dist/src/view/viewUtils.test.d.ts.map +1 -0
  124. package/dist/src/view/viewUtils.test.js +87 -0
  125. package/package.json +16 -16
  126. package/dist/bundle/__vite-browser-external-C--ziKoh.js +0 -8
  127. package/dist/bundle/_commonjsHelpers-DjF3Plf2.js +0 -26
  128. package/dist/bundle/index-5ajWdKly.js +0 -1319
  129. package/dist/bundle/index-B03-Om4z.js +0 -274
  130. package/dist/bundle/index-BftNdA0O.js +0 -27
  131. package/dist/bundle/index-Bg7C4Xat.js +0 -2750
  132. package/dist/bundle/index-C3QR8Lv6.js +0 -2131
  133. package/dist/bundle/index-DTcHjAHp.js +0 -505
  134. package/dist/bundle/index-DnIkxb0L.js +0 -1025
  135. package/dist/bundle/index-Ww3TAo6_.js +0 -71
  136. package/dist/bundle/index-g8iXgW0W.js +0 -651
  137. package/dist/bundle/long-B-FASCSo.js +0 -2387
  138. package/dist/bundle/remoteFile-BuaqFGWk.js +0 -94
@@ -166,9 +166,27 @@ export type SelectionInitInterval =
166
166
 
167
167
  export type InteractionEventType = "click" | "dblclick" | "mouseover";
168
168
 
169
+ // TODO: merge with InteractionEventType
170
+ export type DomEventType = "click" | "dblclick" | "mouseover" | "pointerover";
171
+
172
+ export interface EventConfig {
173
+ /**
174
+ * The type of event to listen to. For example, `"click"` or `"mouseover"`.
175
+ */
176
+ type: DomEventType;
177
+
178
+ /**
179
+ * An optional filter expression to further filter events of the specified type.
180
+ * The expression can only refer to the event object as `event`, and should
181
+ * evaluate to a boolean value indicating whether to include the event.
182
+ * No other data or parameters are in scope.
183
+ */
184
+ filter?: string;
185
+ }
186
+
169
187
  export interface BaseSelectionConfig<T extends SelectionType = SelectionType> {
170
188
  /**
171
- * Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:
189
+ * The selection type.
172
190
  *
173
191
  * - `"point"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.
174
192
  * - `"interval"` -- to select a continuous range of data values on `drag`.
@@ -176,8 +194,16 @@ export interface BaseSelectionConfig<T extends SelectionType = SelectionType> {
176
194
  type: T;
177
195
 
178
196
  /**
197
+ * A string or object that defines the events to which the selection should listen.
198
+ */
199
+ on?: DomEventType | EventConfig | string;
200
+
201
+ /**
202
+ * A string or object that defines the events that should clear the selection.
203
+ *
204
+ * __Default value:__ `"dblclick"`
179
205
  */
180
- on?: "click" | "mouseover" | "pointerover";
206
+ clear?: DomEventType | EventConfig | string | boolean;
181
207
  }
182
208
 
183
209
  export interface PointSelectionConfig extends BaseSelectionConfig<"point"> {
@@ -1,4 +1,3 @@
1
- import { Type } from "./channel.js";
2
1
  import { Data } from "./data.js";
3
2
  import { Align, FontStyle, FontWeight } from "./font.js";
4
3
  import { Scale } from "./scale.js";
@@ -31,11 +30,13 @@ export interface SampleSpec extends ViewSpecBase {
31
30
  stickySummaries?: boolean;
32
31
  }
33
32
 
33
+ export type SampleAttributeType = "nominal" | "ordinal" | "quantitative";
34
+
34
35
  export interface SampleAttributeDef {
35
36
  /**
36
37
  * The attribute type. One of `"nominal"`, `"ordinal"`, or `"quantitative"`.
37
38
  */
38
- type?: Type; // TODO: Omit index/locus from available types
39
+ type?: SampleAttributeType;
39
40
 
40
41
  /**
41
42
  * Scale definition for the (default) color channel
@@ -1,12 +1,17 @@
1
- @use "sass:math";
2
-
3
- $basic-spacing: 10px;
1
+ :root {
2
+ --genome-spy-basic-spacing: 10px;
3
+ --genome-spy-font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial,
4
+ sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
5
+ }
4
6
 
5
- $font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
6
- "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
7
+ @keyframes genome-spy-blinker {
8
+ 50% {
9
+ opacity: 0;
10
+ }
11
+ }
7
12
 
8
13
  .genome-spy {
9
- font-family: $font-family;
14
+ font-family: var(--genome-spy-font-family);
10
15
 
11
16
  position: relative;
12
17
 
@@ -58,13 +63,7 @@ $font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
58
63
  opacity: 1;
59
64
 
60
65
  .ellipsis {
61
- animation: blinker 1s linear infinite;
62
- }
63
-
64
- @keyframes blinker {
65
- 50% {
66
- opacity: 0;
67
- }
66
+ animation: genome-spy-blinker 1s linear infinite;
68
67
  }
69
68
  }
70
69
  }
@@ -119,10 +118,12 @@ $font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
119
118
  max-width: 450px;
120
119
  overflow: hidden;
121
120
 
122
- $background-color: #f6f6f6;
123
- background: $background-color;
124
- padding: $basic-spacing;
125
- font-size: 12px;
121
+ --background-color: #f6f6f6;
122
+ background: var(--background-color);
123
+ padding: var(--genome-spy-basic-spacing);
124
+
125
+ --font-size: 12px;
126
+ font-size: var(--font-size);
126
127
 
127
128
  box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.21);
128
129
 
@@ -147,9 +148,11 @@ $font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
147
148
  }
148
149
 
149
150
  > .title {
150
- padding-bottom: math.div($basic-spacing, 2);
151
- margin-bottom: math.div($basic-spacing, 2);
152
- border-bottom: 1px dashed darken($background-color, 25%);
151
+ padding-bottom: calc(var(--genome-spy-basic-spacing) / 2);
152
+ margin-bottom: calc(var(--genome-spy-basic-spacing) / 2);
153
+ border-bottom: 1px dashed var(--background-color);
154
+ border-bottom: 1px dashed
155
+ color-mix(in srgb, black 25%, var(--background-color));
153
156
  }
154
157
 
155
158
  .summary {
@@ -167,6 +170,7 @@ $font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
167
170
  td {
168
171
  padding: 2px 0.4em;
169
172
  vertical-align: top;
173
+ font-size: var(--font-size);
170
174
 
171
175
  &:first-child {
172
176
  padding-left: 0;
@@ -264,5 +268,5 @@ $font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
264
268
  .gs-input-bindings {
265
269
  flex-basis: content;
266
270
  font-size: 14px;
267
- padding: $basic-spacing;
271
+ padding: var(--genome-spy-basic-spacing);
268
272
  }
@@ -1,3 +1,3 @@
1
1
  export default css;
2
- declare const css: "\n.genome-spy {\n font-family: system-ui, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n position: relative;\n display: flex;\n flex-direction: column;\n}\n.genome-spy .canvas-wrapper {\n position: relative;\n flex-grow: 1;\n overflow: hidden;\n}\n.genome-spy canvas {\n display: block;\n transform: scale(1, 1);\n opacity: 1;\n transition: transform 0.6s, opacity 0.6s;\n}\n.genome-spy canvas:focus, .genome-spy canvas:focus-visible {\n outline: none;\n}\n.genome-spy .loading-message {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.genome-spy .loading-message .message {\n color: #666;\n opacity: 0;\n transition: opacity 0.7s;\n}\n.genome-spy .loading > canvas {\n transform: scale(0.95, 0.95);\n opacity: 0;\n}\n.genome-spy .loading > .loading-message .message {\n opacity: 1;\n}\n.genome-spy .loading > .loading-message .message .ellipsis {\n animation: blinker 1s linear infinite;\n}\n@keyframes blinker {\n 50% {\n opacity: 0;\n }\n}\n.genome-spy .loading-indicators {\n position: absolute;\n inset: 0;\n user-select: none;\n pointer-events: none;\n}\n.genome-spy .loading-indicators div {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.genome-spy .loading-indicators div > div {\n font-size: 11px;\n transition: opacity 0.2s;\n background: white;\n padding: 2px 5px;\n display: flex;\n border-radius: 3px;\n gap: 0.5em;\n opacity: 0;\n}\n.genome-spy .loading-indicators div > div.loading {\n opacity: 0.5;\n}\n.genome-spy .loading-indicators div > div.error {\n opacity: 0.8;\n color: firebrick;\n}\n.genome-spy .loading-indicators div > div > * {\n display: block;\n}\n.genome-spy .loading-indicators div > div img {\n width: 1.5em;\n height: 1.5em;\n}\n.genome-spy .tooltip {\n position: absolute;\n max-width: 450px;\n overflow: hidden;\n background: #f6f6f6;\n padding: 10px;\n font-size: 12px;\n box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.21);\n transition: outline-color 0.3s ease-in-out, box-shadow 0.3s ease-in-out;\n outline: 0px solid transparent;\n z-index: 100;\n}\n.genome-spy .tooltip:not(.sticky) {\n pointer-events: none;\n}\n.genome-spy .tooltip.sticky {\n outline: 2px solid black;\n box-shadow: 0px 3px 18px 0px rgba(0, 0, 0, 0.3);\n}\n.genome-spy .tooltip > :last-child {\n margin-bottom: 0;\n}\n.genome-spy .tooltip > .title {\n padding-bottom: 5px;\n margin-bottom: 5px;\n border-bottom: 1px dashed #b6b6b6;\n}\n.genome-spy .tooltip .summary {\n font-size: 12px;\n}\n.genome-spy .tooltip table {\n border-collapse: collapse;\n}\n.genome-spy .tooltip table:first-child {\n margin-top: 0;\n}\n.genome-spy .tooltip table th,\n.genome-spy .tooltip table td {\n padding: 2px 0.4em;\n vertical-align: top;\n}\n.genome-spy .tooltip table th:first-child,\n.genome-spy .tooltip table td:first-child {\n padding-left: 0;\n}\n.genome-spy .tooltip table th {\n text-align: left;\n font-weight: bold;\n}\n.genome-spy .tooltip .color-legend {\n display: inline-block;\n width: 0.8em;\n height: 0.8em;\n margin-left: 0.4em;\n box-shadow: 0px 0px 3px 1px white;\n}\n.genome-spy .tooltip .attributes .hovered {\n background-color: #e0e0e0;\n}\n.genome-spy .tooltip .na {\n color: #aaa;\n font-style: italic;\n font-size: 80%;\n}\n.genome-spy .gene-track-tooltip .summary {\n font-size: 90%;\n}\n.genome-spy .message-box {\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n height: 100%;\n width: 100%;\n}\n.genome-spy .message-box > div {\n border: 1px solid red;\n padding: 10px;\n background: #fff0f0;\n}\n\n.gs-input-binding {\n display: grid;\n grid-template-columns: max-content max-content;\n column-gap: 1em;\n row-gap: 0.3em;\n justify-items: start;\n}\n.gs-input-binding > select,\n.gs-input-binding > input:not([type=checkbox]) {\n width: 100%;\n}\n.gs-input-binding input[type=range] + span {\n display: inline-block;\n margin-left: 0.3em;\n min-width: 2.2em;\n font-variant-numeric: tabular-nums;\n}\n.gs-input-binding input[type=range],\n.gs-input-binding input[type=radio] {\n vertical-align: text-bottom;\n}\n.gs-input-binding .radio-group {\n display: flex;\n align-items: center;\n}\n.gs-input-binding .description {\n max-width: 26em;\n grid-column: 1/-1;\n color: #777;\n font-size: 90%;\n margin-top: -0.5em;\n}\n\n.gs-input-bindings {\n flex-basis: content;\n font-size: 14px;\n padding: 10px;\n}\n";
2
+ declare const css: "\n:root {\n--genome-spy-basic-spacing: 10px;\n--genome-spy-font-family: system-ui, \"Segoe UI\", Roboto, Helvetica, Arial,\nsans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n}\n\n@keyframes genome-spy-blinker {\n50% {\nopacity: 0;\n}\n}\n\n.genome-spy {\nfont-family: var(--genome-spy-font-family);\n\nposition: relative;\n\ndisplay: flex;\nflex-direction: column;\n\n.canvas-wrapper {\nposition: relative;\nflex-grow: 1;\noverflow: hidden;\n}\n\ncanvas {\ndisplay: block;\ntransform: scale(1, 1);\nopacity: 1;\ntransition:\ntransform 0.6s,\nopacity 0.6s;\n\n&:focus,\n&:focus-visible {\noutline: none;\n}\n}\n\n.loading-message {\nposition: absolute;\ninset: 0;\ndisplay: flex;\n\nalign-items: center;\njustify-content: center;\n\n.message {\ncolor: #666;\nopacity: 0;\ntransition: opacity 0.7s;\n}\n}\n\n.loading {\n> canvas {\ntransform: scale(0.95, 0.95);\nopacity: 0;\n}\n\n> .loading-message .message {\nopacity: 1;\n\n.ellipsis {\nanimation: genome-spy-blinker 1s linear infinite;\n}\n}\n}\n\n.loading-indicators {\nposition: absolute;\ninset: 0;\n\nuser-select: none;\npointer-events: none;\n\ndiv {\nposition: absolute;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\n\n> div {\nfont-size: 11px;\ntransition: opacity 0.2s;\nbackground: white;\npadding: 2px 5px;\ndisplay: flex;\nborder-radius: 3px;\ngap: 0.5em;\nopacity: 0;\n\n&.loading {\nopacity: 0.5;\n}\n\n&.error {\nopacity: 0.8;\ncolor: firebrick;\n}\n\n> * {\ndisplay: block;\n}\n\nimg {\nwidth: 1.5em;\nheight: 1.5em;\n}\n}\n}\n}\n\n.tooltip {\nposition: absolute;\n\nmax-width: 450px;\noverflow: hidden;\n\n--background-color: #f6f6f6;\nbackground: var(--background-color);\npadding: var(--genome-spy-basic-spacing);\n\n--font-size: 12px;\nfont-size: var(--font-size);\n\nbox-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.21);\n\n&:not(.sticky) {\npointer-events: none;\n}\n\ntransition:\noutline-color 0.3s ease-in-out,\nbox-shadow 0.3s ease-in-out;\n\noutline: 0px solid transparent;\n&.sticky {\noutline: 2px solid black;\nbox-shadow: 0px 3px 18px 0px rgba(0, 0, 0, 0.3);\n}\n\nz-index: 100;\n\n> :last-child {\nmargin-bottom: 0;\n}\n\n> .title {\npadding-bottom: calc(var(--genome-spy-basic-spacing) / 2);\nmargin-bottom: calc(var(--genome-spy-basic-spacing) / 2);\nborder-bottom: 1px dashed var(--background-color);\nborder-bottom: 1px dashed\ncolor-mix(in srgb, black 25%, var(--background-color));\n}\n\n.summary {\nfont-size: 12px;\n}\n\ntable {\n&:first-child {\nmargin-top: 0;\n}\n\nborder-collapse: collapse;\n\nth,\ntd {\npadding: 2px 0.4em;\nvertical-align: top;\nfont-size: var(--font-size);\n\n&:first-child {\npadding-left: 0;\n}\n}\n\nth {\ntext-align: left;\nfont-weight: bold;\n}\n}\n\n.color-legend {\ndisplay: inline-block;\nwidth: 0.8em;\nheight: 0.8em;\nmargin-left: 0.4em;\nbox-shadow: 0px 0px 3px 1px white;\n}\n\n.attributes {\n.hovered {\nbackground-color: #e0e0e0;\n}\n}\n\n.na {\ncolor: #aaa;\nfont-style: italic;\nfont-size: 80%;\n}\n}\n\n.gene-track-tooltip {\n.summary {\nfont-size: 90%;\n}\n}\n\n.message-box {\ndisplay: flex;\nalign-items: center;\njustify-content: center;\nposition: absolute;\ntop: 0;\nheight: 100%;\nwidth: 100%;\n\n> div {\nborder: 1px solid red;\npadding: 10px;\nbackground: #fff0f0;\n}\n}\n}\n\n.gs-input-binding {\ndisplay: grid;\ngrid-template-columns: max-content max-content;\ncolumn-gap: 1em;\nrow-gap: 0.3em;\njustify-items: start;\n\n> select,\n> input:not([type=\"checkbox\"]) {\nwidth: 100%;\n}\n\ninput[type=\"range\"] + span {\ndisplay: inline-block;\nmargin-left: 0.3em;\nmin-width: 2.2em;\nfont-variant-numeric: tabular-nums;\n}\n\ninput[type=\"range\"],\ninput[type=\"radio\"] {\nvertical-align: text-bottom;\n}\n\n.radio-group {\ndisplay: flex;\nalign-items: center;\n}\n\n.description {\nmax-width: 26em;\ngrid-column: 1 / -1;\ncolor: #777;\nfont-size: 90%;\nmargin-top: -0.5em;\n}\n}\n\n.gs-input-bindings {\nflex-basis: content;\nfont-size: 14px;\npadding: var(--genome-spy-basic-spacing);\n}\n";
3
3
  //# sourceMappingURL=genome-spy.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"genome-spy.css.d.ts","sourceRoot":"","sources":["../../../src/styles/genome-spy.css.js"],"names":[],"mappings":";AAAA,y/IA4ME"}
1
+ {"version":3,"file":"genome-spy.css.d.ts","sourceRoot":"","sources":["../../../src/styles/genome-spy.css.js"],"names":[],"mappings":";AAAA,+5HAiRE"}
@@ -1,206 +1,275 @@
1
1
  const css = `
2
+ :root {
3
+ --genome-spy-basic-spacing: 10px;
4
+ --genome-spy-font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial,
5
+ sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
6
+ }
7
+
8
+ @keyframes genome-spy-blinker {
9
+ 50% {
10
+ opacity: 0;
11
+ }
12
+ }
13
+
2
14
  .genome-spy {
3
- font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
4
- position: relative;
5
- display: flex;
6
- flex-direction: column;
7
- }
8
- .genome-spy .canvas-wrapper {
9
- position: relative;
10
- flex-grow: 1;
11
- overflow: hidden;
12
- }
13
- .genome-spy canvas {
14
- display: block;
15
- transform: scale(1, 1);
16
- opacity: 1;
17
- transition: transform 0.6s, opacity 0.6s;
18
- }
19
- .genome-spy canvas:focus, .genome-spy canvas:focus-visible {
20
- outline: none;
21
- }
22
- .genome-spy .loading-message {
23
- position: absolute;
24
- inset: 0;
25
- display: flex;
26
- align-items: center;
27
- justify-content: center;
28
- }
29
- .genome-spy .loading-message .message {
30
- color: #666;
31
- opacity: 0;
32
- transition: opacity 0.7s;
33
- }
34
- .genome-spy .loading > canvas {
35
- transform: scale(0.95, 0.95);
36
- opacity: 0;
37
- }
38
- .genome-spy .loading > .loading-message .message {
39
- opacity: 1;
40
- }
41
- .genome-spy .loading > .loading-message .message .ellipsis {
42
- animation: blinker 1s linear infinite;
43
- }
44
- @keyframes blinker {
45
- 50% {
46
- opacity: 0;
47
- }
48
- }
49
- .genome-spy .loading-indicators {
50
- position: absolute;
51
- inset: 0;
52
- user-select: none;
53
- pointer-events: none;
54
- }
55
- .genome-spy .loading-indicators div {
56
- position: absolute;
57
- display: flex;
58
- align-items: center;
59
- justify-content: center;
60
- }
61
- .genome-spy .loading-indicators div > div {
62
- font-size: 11px;
63
- transition: opacity 0.2s;
64
- background: white;
65
- padding: 2px 5px;
66
- display: flex;
67
- border-radius: 3px;
68
- gap: 0.5em;
69
- opacity: 0;
70
- }
71
- .genome-spy .loading-indicators div > div.loading {
72
- opacity: 0.5;
73
- }
74
- .genome-spy .loading-indicators div > div.error {
75
- opacity: 0.8;
76
- color: firebrick;
77
- }
78
- .genome-spy .loading-indicators div > div > * {
79
- display: block;
80
- }
81
- .genome-spy .loading-indicators div > div img {
82
- width: 1.5em;
83
- height: 1.5em;
84
- }
85
- .genome-spy .tooltip {
86
- position: absolute;
87
- max-width: 450px;
88
- overflow: hidden;
89
- background: #f6f6f6;
90
- padding: 10px;
91
- font-size: 12px;
92
- box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.21);
93
- transition: outline-color 0.3s ease-in-out, box-shadow 0.3s ease-in-out;
94
- outline: 0px solid transparent;
95
- z-index: 100;
96
- }
97
- .genome-spy .tooltip:not(.sticky) {
98
- pointer-events: none;
99
- }
100
- .genome-spy .tooltip.sticky {
101
- outline: 2px solid black;
102
- box-shadow: 0px 3px 18px 0px rgba(0, 0, 0, 0.3);
103
- }
104
- .genome-spy .tooltip > :last-child {
105
- margin-bottom: 0;
106
- }
107
- .genome-spy .tooltip > .title {
108
- padding-bottom: 5px;
109
- margin-bottom: 5px;
110
- border-bottom: 1px dashed #b6b6b6;
111
- }
112
- .genome-spy .tooltip .summary {
113
- font-size: 12px;
114
- }
115
- .genome-spy .tooltip table {
116
- border-collapse: collapse;
117
- }
118
- .genome-spy .tooltip table:first-child {
119
- margin-top: 0;
120
- }
121
- .genome-spy .tooltip table th,
122
- .genome-spy .tooltip table td {
123
- padding: 2px 0.4em;
124
- vertical-align: top;
125
- }
126
- .genome-spy .tooltip table th:first-child,
127
- .genome-spy .tooltip table td:first-child {
128
- padding-left: 0;
129
- }
130
- .genome-spy .tooltip table th {
131
- text-align: left;
132
- font-weight: bold;
133
- }
134
- .genome-spy .tooltip .color-legend {
135
- display: inline-block;
136
- width: 0.8em;
137
- height: 0.8em;
138
- margin-left: 0.4em;
139
- box-shadow: 0px 0px 3px 1px white;
140
- }
141
- .genome-spy .tooltip .attributes .hovered {
142
- background-color: #e0e0e0;
143
- }
144
- .genome-spy .tooltip .na {
145
- color: #aaa;
146
- font-style: italic;
147
- font-size: 80%;
148
- }
149
- .genome-spy .gene-track-tooltip .summary {
150
- font-size: 90%;
151
- }
152
- .genome-spy .message-box {
153
- display: flex;
154
- align-items: center;
155
- justify-content: center;
156
- position: absolute;
157
- top: 0;
158
- height: 100%;
159
- width: 100%;
160
- }
161
- .genome-spy .message-box > div {
162
- border: 1px solid red;
163
- padding: 10px;
164
- background: #fff0f0;
15
+ font-family: var(--genome-spy-font-family);
16
+
17
+ position: relative;
18
+
19
+ display: flex;
20
+ flex-direction: column;
21
+
22
+ .canvas-wrapper {
23
+ position: relative;
24
+ flex-grow: 1;
25
+ overflow: hidden;
26
+ }
27
+
28
+ canvas {
29
+ display: block;
30
+ transform: scale(1, 1);
31
+ opacity: 1;
32
+ transition:
33
+ transform 0.6s,
34
+ opacity 0.6s;
35
+
36
+ &:focus,
37
+ &:focus-visible {
38
+ outline: none;
39
+ }
40
+ }
41
+
42
+ .loading-message {
43
+ position: absolute;
44
+ inset: 0;
45
+ display: flex;
46
+
47
+ align-items: center;
48
+ justify-content: center;
49
+
50
+ .message {
51
+ color: #666;
52
+ opacity: 0;
53
+ transition: opacity 0.7s;
54
+ }
55
+ }
56
+
57
+ .loading {
58
+ > canvas {
59
+ transform: scale(0.95, 0.95);
60
+ opacity: 0;
61
+ }
62
+
63
+ > .loading-message .message {
64
+ opacity: 1;
65
+
66
+ .ellipsis {
67
+ animation: genome-spy-blinker 1s linear infinite;
68
+ }
69
+ }
70
+ }
71
+
72
+ .loading-indicators {
73
+ position: absolute;
74
+ inset: 0;
75
+
76
+ user-select: none;
77
+ pointer-events: none;
78
+
79
+ div {
80
+ position: absolute;
81
+ display: flex;
82
+ align-items: center;
83
+ justify-content: center;
84
+
85
+ > div {
86
+ font-size: 11px;
87
+ transition: opacity 0.2s;
88
+ background: white;
89
+ padding: 2px 5px;
90
+ display: flex;
91
+ border-radius: 3px;
92
+ gap: 0.5em;
93
+ opacity: 0;
94
+
95
+ &.loading {
96
+ opacity: 0.5;
97
+ }
98
+
99
+ &.error {
100
+ opacity: 0.8;
101
+ color: firebrick;
102
+ }
103
+
104
+ > * {
105
+ display: block;
106
+ }
107
+
108
+ img {
109
+ width: 1.5em;
110
+ height: 1.5em;
111
+ }
112
+ }
113
+ }
114
+ }
115
+
116
+ .tooltip {
117
+ position: absolute;
118
+
119
+ max-width: 450px;
120
+ overflow: hidden;
121
+
122
+ --background-color: #f6f6f6;
123
+ background: var(--background-color);
124
+ padding: var(--genome-spy-basic-spacing);
125
+
126
+ --font-size: 12px;
127
+ font-size: var(--font-size);
128
+
129
+ box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.21);
130
+
131
+ &:not(.sticky) {
132
+ pointer-events: none;
133
+ }
134
+
135
+ transition:
136
+ outline-color 0.3s ease-in-out,
137
+ box-shadow 0.3s ease-in-out;
138
+
139
+ outline: 0px solid transparent;
140
+ &.sticky {
141
+ outline: 2px solid black;
142
+ box-shadow: 0px 3px 18px 0px rgba(0, 0, 0, 0.3);
143
+ }
144
+
145
+ z-index: 100;
146
+
147
+ > :last-child {
148
+ margin-bottom: 0;
149
+ }
150
+
151
+ > .title {
152
+ padding-bottom: calc(var(--genome-spy-basic-spacing) / 2);
153
+ margin-bottom: calc(var(--genome-spy-basic-spacing) / 2);
154
+ border-bottom: 1px dashed var(--background-color);
155
+ border-bottom: 1px dashed
156
+ color-mix(in srgb, black 25%, var(--background-color));
157
+ }
158
+
159
+ .summary {
160
+ font-size: 12px;
161
+ }
162
+
163
+ table {
164
+ &:first-child {
165
+ margin-top: 0;
166
+ }
167
+
168
+ border-collapse: collapse;
169
+
170
+ th,
171
+ td {
172
+ padding: 2px 0.4em;
173
+ vertical-align: top;
174
+ font-size: var(--font-size);
175
+
176
+ &:first-child {
177
+ padding-left: 0;
178
+ }
179
+ }
180
+
181
+ th {
182
+ text-align: left;
183
+ font-weight: bold;
184
+ }
185
+ }
186
+
187
+ .color-legend {
188
+ display: inline-block;
189
+ width: 0.8em;
190
+ height: 0.8em;
191
+ margin-left: 0.4em;
192
+ box-shadow: 0px 0px 3px 1px white;
193
+ }
194
+
195
+ .attributes {
196
+ .hovered {
197
+ background-color: #e0e0e0;
198
+ }
199
+ }
200
+
201
+ .na {
202
+ color: #aaa;
203
+ font-style: italic;
204
+ font-size: 80%;
205
+ }
206
+ }
207
+
208
+ .gene-track-tooltip {
209
+ .summary {
210
+ font-size: 90%;
211
+ }
212
+ }
213
+
214
+ .message-box {
215
+ display: flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+ position: absolute;
219
+ top: 0;
220
+ height: 100%;
221
+ width: 100%;
222
+
223
+ > div {
224
+ border: 1px solid red;
225
+ padding: 10px;
226
+ background: #fff0f0;
227
+ }
228
+ }
165
229
  }
166
230
 
167
231
  .gs-input-binding {
168
- display: grid;
169
- grid-template-columns: max-content max-content;
170
- column-gap: 1em;
171
- row-gap: 0.3em;
172
- justify-items: start;
173
- }
174
- .gs-input-binding > select,
175
- .gs-input-binding > input:not([type=checkbox]) {
176
- width: 100%;
177
- }
178
- .gs-input-binding input[type=range] + span {
179
- display: inline-block;
180
- margin-left: 0.3em;
181
- min-width: 2.2em;
182
- font-variant-numeric: tabular-nums;
183
- }
184
- .gs-input-binding input[type=range],
185
- .gs-input-binding input[type=radio] {
186
- vertical-align: text-bottom;
187
- }
188
- .gs-input-binding .radio-group {
189
- display: flex;
190
- align-items: center;
191
- }
192
- .gs-input-binding .description {
193
- max-width: 26em;
194
- grid-column: 1/-1;
195
- color: #777;
196
- font-size: 90%;
197
- margin-top: -0.5em;
232
+ display: grid;
233
+ grid-template-columns: max-content max-content;
234
+ column-gap: 1em;
235
+ row-gap: 0.3em;
236
+ justify-items: start;
237
+
238
+ > select,
239
+ > input:not([type="checkbox"]) {
240
+ width: 100%;
241
+ }
242
+
243
+ input[type="range"] + span {
244
+ display: inline-block;
245
+ margin-left: 0.3em;
246
+ min-width: 2.2em;
247
+ font-variant-numeric: tabular-nums;
248
+ }
249
+
250
+ input[type="range"],
251
+ input[type="radio"] {
252
+ vertical-align: text-bottom;
253
+ }
254
+
255
+ .radio-group {
256
+ display: flex;
257
+ align-items: center;
258
+ }
259
+
260
+ .description {
261
+ max-width: 26em;
262
+ grid-column: 1 / -1;
263
+ color: #777;
264
+ font-size: 90%;
265
+ margin-top: -0.5em;
266
+ }
198
267
  }
199
268
 
200
269
  .gs-input-bindings {
201
- flex-basis: content;
202
- font-size: 14px;
203
- padding: 10px;
270
+ flex-basis: content;
271
+ font-size: 14px;
272
+ padding: var(--genome-spy-basic-spacing);
204
273
  }
205
274
  `;
206
275
  export default css;