@genome-spy/app 0.75.0 → 0.77.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 (71) hide show
  1. package/dist/AbortablePromiseCache-beUIcZcW.js +96 -0
  2. package/dist/agentApi-ClsLtELB.js +26994 -0
  3. package/dist/agentApi.es.js +11145 -0
  4. package/dist/agentShared.es.js +4742 -0
  5. package/dist/{blosc-oa0DlI6G.js → blosc-BX4BJ8sR.js} +1 -1
  6. package/dist/blosc-DL1kZHdE.js +692 -0
  7. package/dist/chunk-INHXZS53-Dx2aFznx.js +13 -0
  8. package/dist/componentStyles-CIXoKEp0.js +2182 -0
  9. package/dist/dialog.es.js +377 -0
  10. package/dist/esm-CHVYSGF2.js +1084 -0
  11. package/dist/esm-CZvS2Ldm.js +155 -0
  12. package/dist/esm-C_XrKaCY.js +137 -0
  13. package/dist/{esm-DCCYNvaz.js → esm-CqrZuhTF.js} +50 -50
  14. package/dist/{esm-D-WfYOx7.js → esm-Cz4iCfzF.js} +25 -25
  15. package/dist/esm-D-y0Ce1M.js +573 -0
  16. package/dist/esm-D2-C5ZzN.js +1084 -0
  17. package/dist/esm-DPS6pYKF.js +1248 -0
  18. package/dist/esm-Dfo2M18m.js +461 -0
  19. package/dist/esm-DjF6pKy5.js +369 -0
  20. package/dist/{esm-n0auOe11.js → esm-Q6nrd9vJ.js} +1 -1
  21. package/dist/esm-aOLxLL7A.js +121 -0
  22. package/dist/esm-id9DWBZW.js +137 -0
  23. package/dist/esm-kXhrPIYy.js +1426 -0
  24. package/dist/esm-s_SlArJ8.js +298 -0
  25. package/dist/index.es.js +15272 -37563
  26. package/dist/index.js +1202 -741
  27. package/dist/lit-ymUSmGBw.js +510 -0
  28. package/dist/{lz4-jZ0zyLBa.js → lz4-BSYl80V8.js} +1 -1
  29. package/dist/lz4-Csz5aoFA.js +626 -0
  30. package/dist/parquetRead-m8-8_SpH.js +1609 -0
  31. package/dist/schema.json +489 -85
  32. package/dist/style.css +1 -1
  33. package/dist/viewUtils-3_xHIxmy.js +14292 -0
  34. package/dist/{zstd-C6ksIG9r.js → zstd-BAfRM3IH.js} +1 -1
  35. package/dist/zstd-dJuUp1fl.js +583 -0
  36. package/package.json +30 -5
  37. package/src/agentApi/index.d.ts +147 -0
  38. package/src/agentShared/index.d.ts +97 -0
  39. package/src/agentShared/types.d.ts +8 -0
  40. package/src/appTypes.d.ts +75 -0
  41. package/src/bookmark/databaseSchema.d.ts +33 -0
  42. package/src/charts/boxplotTypes.d.ts +15 -0
  43. package/src/charts/sampleAttributePlotTypes.d.ts +149 -0
  44. package/src/coreSpecAugmentation.d.ts +29 -0
  45. package/src/dialog/index.d.ts +5 -0
  46. package/src/embedTypes.d.ts +9 -0
  47. package/src/index.d.ts +16 -0
  48. package/src/sampleView/sampleViewTypes.d.ts +176 -0
  49. package/src/sampleView/state/payloadTypes.d.ts +484 -0
  50. package/src/sampleView/state/sampleState.d.ts +76 -0
  51. package/src/sampleView/types.d.ts +128 -0
  52. package/src/spec/appSpec.d.ts +54 -0
  53. package/src/spec/sampleView.d.ts +545 -0
  54. package/src/spec/view.d.ts +124 -0
  55. package/src/state/paramProvenanceTypes.d.ts +215 -0
  56. package/src/state/selectionExpansionTypes.d.ts +77 -0
  57. package/src/state.d.ts +97 -0
  58. package/src/types/lz-string.d.ts +24 -0
  59. package/src/types/vega-loader.d.ts +1 -0
  60. package/src/utils/colorScaleSummary.d.ts +15 -0
  61. package/src/utils/statistics/fieldSummary.d.ts +49 -0
  62. package/src/vite-env.d.ts +6 -0
  63. package/dist/browser-Dvlo92rx.js +0 -126
  64. package/dist/esm-Cmo4qEPr.js +0 -1015
  65. /package/dist/{AbortablePromiseCache-3gHJdF3E.js → AbortablePromiseCache-BDH1cqFl.js} +0 -0
  66. /package/dist/{chunk-INHXZS53-fPMmEwMt.js → chunk-INHXZS53-DwEV9sMh.js} +0 -0
  67. /package/dist/{esm-BygJiwh0.js → esm-BL9SNSnj.js} +0 -0
  68. /package/dist/{esm-B8-vSu-c.js → esm-BwW--bVV.js} +0 -0
  69. /package/dist/{esm-CGX-qz1d.js → esm-Bz_92nH0.js} +0 -0
  70. /package/dist/{esm-CuMSzCHy.js → esm-D2_c7lXY.js} +0 -0
  71. /package/dist/{parquetRead-CJe1UPsz.js → parquetRead-C33mgLEo.js} +0 -0
@@ -0,0 +1,377 @@
1
+ import { a as e, n as t, o as n, t as r } from "./lit-ymUSmGBw.js";
2
+ import { n as i, r as a, t as o } from "./componentStyles-CIXoKEp0.js";
3
+ //#region src/components/generic/baseDialog.js
4
+ var s = new Set([
5
+ "text",
6
+ "search",
7
+ "email",
8
+ "url",
9
+ "password",
10
+ "tel",
11
+ "number",
12
+ "date",
13
+ "time",
14
+ "datetime-local",
15
+ "month",
16
+ "week"
17
+ ]), c = class extends r {
18
+ static properties = {
19
+ dialogTitle: {},
20
+ modal: { type: Boolean }
21
+ };
22
+ #e;
23
+ static styles = [
24
+ i,
25
+ o,
26
+ n`
27
+ dialog {
28
+ font-family: var(--gs-font-family, sans-serif);
29
+ font-size: var(--gs-font-size, 14px);
30
+ padding: 0;
31
+
32
+ box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.21);
33
+ background: white;
34
+ border-radius: 3px;
35
+ border: none;
36
+ min-width: 300px;
37
+
38
+ opacity: 1;
39
+ transform: translate(0, 0);
40
+ transition:
41
+ opacity 0.2s ease-in-out,
42
+ transform 0.2s ease-in-out;
43
+
44
+ @starting-style {
45
+ opacity: 0;
46
+ transform: translate(0, -15px);
47
+ }
48
+ }
49
+
50
+ dialog.closing {
51
+ opacity: 0;
52
+ transform: translate(0, -15px);
53
+ }
54
+
55
+ dialog::backdrop {
56
+ background-color: rgb(75, 75, 75);
57
+ opacity: 0.4;
58
+ transition: opacity 0.3s ease-in-out;
59
+
60
+ @starting-style {
61
+ opacity: 0;
62
+ }
63
+ }
64
+
65
+ dialog.closing::backdrop {
66
+ opacity: 0;
67
+ }
68
+
69
+ header,
70
+ section,
71
+ footer {
72
+ padding: var(--gs-basic-spacing, 10px);
73
+ }
74
+
75
+ header {
76
+ font-weight: bold;
77
+ padding-bottom: 0;
78
+ }
79
+
80
+ section {
81
+ > :first-child {
82
+ margin-top: 0;
83
+ }
84
+
85
+ > :last-child {
86
+ margin-bottom: 0;
87
+ }
88
+ }
89
+
90
+ footer {
91
+ border-top: 1px solid var(--gs-dialog-stroke-color, #d0d0d0);
92
+ padding: var(--gs-basic-spacing, 10px);
93
+
94
+ > div {
95
+ display: flex;
96
+ justify-content: flex-end;
97
+ gap: var(--gs-basic-spacing, 10px);
98
+ }
99
+ }
100
+
101
+ footer .btn.btn-primary {
102
+ --gs-dialog-primary-bg: var(--gs-theme-primary, #6c82ab);
103
+ --gs-dialog-primary-bg-hi: oklch(
104
+ from var(--gs-dialog-primary-bg) calc(l + 0.07) c h
105
+ );
106
+ --gs-dialog-primary-bg-lo: oklch(
107
+ from var(--gs-dialog-primary-bg) calc(l - 0.07) c h
108
+ );
109
+ background-color: var(--gs-dialog-primary-bg);
110
+ background-image: linear-gradient(
111
+ to bottom,
112
+ var(--gs-dialog-primary-bg-hi),
113
+ var(--gs-dialog-primary-bg-lo)
114
+ );
115
+ border-color: oklch(
116
+ from var(--gs-dialog-primary-bg) calc(l - 0.08) c h
117
+ );
118
+ color: var(--gs-theme-on-primary, #ffffff);
119
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
120
+ }
121
+
122
+ footer .btn.btn-primary:hover:not(:disabled) {
123
+ background-image: linear-gradient(
124
+ to bottom,
125
+ oklch(from var(--gs-dialog-primary-bg) calc(l + 0.1) c h),
126
+ oklch(from var(--gs-dialog-primary-bg) calc(l - 0.04) c h)
127
+ );
128
+ }
129
+
130
+ footer .btn.btn-primary svg {
131
+ filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.2));
132
+ }
133
+
134
+ footer .btn.btn-primary:disabled {
135
+ background-color: oklch(
136
+ from var(--gs-dialog-primary-bg) calc(l + 0.08) c h
137
+ );
138
+ background-image: none;
139
+ border-color: oklch(
140
+ from var(--gs-dialog-primary-bg) calc(l - 0.02) c h
141
+ );
142
+ color: oklch(
143
+ from var(--gs-theme-on-primary, #ffffff) l c h / 0.6
144
+ );
145
+ text-shadow: none;
146
+ }
147
+
148
+ footer .btn.btn-primary:disabled svg {
149
+ filter: none;
150
+ }
151
+ `
152
+ ];
153
+ constructor() {
154
+ super(), this.dialogTitle = null, this.modal = !0, this.addEventListener("keydown", (e) => {
155
+ this.#t(e), e.stopPropagation();
156
+ });
157
+ }
158
+ #t(e) {
159
+ if (!e.defaultPrevented && e.key == "Enter" && !e.isComposing && !e.altKey && !e.ctrlKey && !e.metaKey) {
160
+ let t = e.composedPath().find((e) => e instanceof HTMLElement);
161
+ if (this.#n(t)) {
162
+ let t = this.#r();
163
+ t && (e.preventDefault(), t.click());
164
+ }
165
+ }
166
+ }
167
+ #n(e) {
168
+ let t = this.renderRoot instanceof ShadowRoot ? this.renderRoot : null, n = e ?? t?.activeElement;
169
+ if (!n) return !0;
170
+ let r = n.closest("input");
171
+ if (!r) return !1;
172
+ let i = (r.type || "text").toLowerCase();
173
+ return s.has(i);
174
+ }
175
+ #r() {
176
+ return this.renderRoot.querySelector("footer button[data-primary]:not(:disabled)");
177
+ }
178
+ firstUpdated() {
179
+ this.#e = this.renderRoot.querySelector("dialog"), this.modal ? this.#e.showModal() : this.#e.show(), this.#i();
180
+ }
181
+ #i() {
182
+ let e = this.renderRoot.querySelector("[autofocus]");
183
+ e && (queueMicrotask(() => {
184
+ this.isConnected && e.focus();
185
+ }), requestAnimationFrame(() => {
186
+ this.isConnected && e.focus();
187
+ }));
188
+ }
189
+ finish(e) {
190
+ this.dispatchEvent(new CustomEvent("gs-dialog-finished", {
191
+ detail: e,
192
+ bubbles: !0,
193
+ composed: !0
194
+ }));
195
+ }
196
+ #a(e) {
197
+ e.preventDefault(), this.finish({
198
+ ok: !1,
199
+ reason: "cancel"
200
+ }), this.triggerClose();
201
+ }
202
+ triggerClose() {
203
+ this.#e.addEventListener("transitionend", () => {
204
+ this.#e.close(), this.dispatchEvent(new CustomEvent("gs-dialog-closed", {
205
+ bubbles: !0,
206
+ composed: !0
207
+ }));
208
+ }), this.#e.classList.add("closing"), this.renderRoot.querySelector(".non-modal-backdrop")?.classList.add("closing");
209
+ }
210
+ onCloseButtonClick() {
211
+ "requestClose" in this.#e ? this.#e.requestClose() : (this.finish({
212
+ ok: !1,
213
+ reason: "cancel"
214
+ }), this.triggerClose());
215
+ }
216
+ renderHeader() {
217
+ return e`${this.dialogTitle ? e`${this.dialogTitle}` : t}`;
218
+ }
219
+ renderBody() {
220
+ return e``;
221
+ }
222
+ renderFooter() {
223
+ let n = this.renderButtons();
224
+ return n?.length ? e`<div>${n}</div>` : t;
225
+ }
226
+ renderButtons() {
227
+ return [this.makeCloseButton()];
228
+ }
229
+ makeButton(n, r, i = {}) {
230
+ let { iconDef: o, disabled: s = !1, preventMouseDown: c = !1, isPrimary: l = !1 } = i, u = n == "Next", d = ["btn"];
231
+ return u && d.push("reverse"), l && d.push("btn-primary"), e`<button
232
+ class=${d.join(" ")}
233
+ type="button"
234
+ title=${n}
235
+ ?disabled=${s}
236
+ ?data-primary=${l}
237
+ @mousedown=${c ? (e) => e.preventDefault() : void 0}
238
+ @click=${async () => {
239
+ await r() || this.triggerClose();
240
+ }}
241
+ >
242
+ ${o ? a(o).node[0] : t} ${n}
243
+ </button>`;
244
+ }
245
+ makeCloseButton(e = "Close") {
246
+ return this.makeButton(e, () => this.onCloseButtonClick(), { preventMouseDown: !0 });
247
+ }
248
+ render() {
249
+ let n = this.renderHeader(), r = this.renderFooter();
250
+ return e`
251
+ ${this.modal ? t : e`<div class="non-modal-backdrop"></div>`}
252
+ <dialog
253
+ @cancel=${(e) => this.#a(e)}
254
+ >
255
+ ${n ? e`<header>${n}</header>` : t}
256
+ <section>${this.renderBody()}</section>
257
+ ${r ? e`<footer>${r}</footer>` : t}
258
+ </dialog>
259
+ `;
260
+ }
261
+ };
262
+ function l(e, t) {
263
+ return f(e, t).promise;
264
+ }
265
+ function u(e, t, n) {
266
+ return l(e, t).then(n);
267
+ }
268
+ function d(e, t) {
269
+ return u(e, t, (e) => !!e.ok);
270
+ }
271
+ function f(e, t) {
272
+ let n = document.createElement(e);
273
+ t && t(n);
274
+ let r = new Promise((e) => {
275
+ n.addEventListener("gs-dialog-finished", (t) => {
276
+ e(t.detail);
277
+ }, { once: !0 });
278
+ });
279
+ return n.addEventListener("gs-dialog-closed", () => {
280
+ n.remove();
281
+ }), document.body.appendChild(n), {
282
+ element: n,
283
+ promise: r
284
+ };
285
+ }
286
+ //#endregion
287
+ //#region src/components/generic/messageDialog.js
288
+ var p = {
289
+ warning: {
290
+ prefix: "fas",
291
+ iconName: "triangle-exclamation",
292
+ icon: [
293
+ 512,
294
+ 512,
295
+ [
296
+ 9888,
297
+ "exclamation-triangle",
298
+ "warning"
299
+ ],
300
+ "f071",
301
+ "M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"
302
+ ]
303
+ },
304
+ error: {
305
+ prefix: "fas",
306
+ iconName: "circle-xmark",
307
+ icon: [
308
+ 512,
309
+ 512,
310
+ [
311
+ 61532,
312
+ "times-circle",
313
+ "xmark-circle"
314
+ ],
315
+ "f057",
316
+ "M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"
317
+ ]
318
+ },
319
+ info: {
320
+ prefix: "fas",
321
+ iconName: "circle-info",
322
+ icon: [
323
+ 512,
324
+ 512,
325
+ ["info-circle"],
326
+ "f05a",
327
+ "M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"
328
+ ]
329
+ }
330
+ }, m = class extends c {
331
+ static properties = {
332
+ ...super.properties,
333
+ message: {},
334
+ type: { type: String },
335
+ confirm: { type: Boolean }
336
+ };
337
+ static styles = [...super.styles, n`
338
+ .message-flex {
339
+ display: flex;
340
+ flex-direction: row;
341
+ align-items: center;
342
+ gap: calc(var(--gs-basic-spacing) * 2);
343
+ padding: var(--gs-basic-spacing);
344
+ box-sizing: border-box;
345
+ max-width: 400px;
346
+ }
347
+
348
+ .icon svg {
349
+ height: 3em;
350
+ }
351
+ `];
352
+ constructor() {
353
+ super(), this.message = "", this.type = "info", this.confirm = !1;
354
+ }
355
+ renderButtons() {
356
+ return this.confirm ? [this.makeCloseButton("Cancel"), this.makeButton("OK", () => {
357
+ this.finish({ ok: !0 }), this.triggerClose();
358
+ }, { isPrimary: !0 })] : super.renderButtons();
359
+ }
360
+ renderBody() {
361
+ if (this.type) {
362
+ let n = p[this.type];
363
+ return e`<div class="message-flex">
364
+ ${n ? e`<div class="icon">${a(n).node[0]}</div>` : t}
365
+ <div class="message">${this.message}</div>
366
+ </div>`;
367
+ } else return e`${this.message}`;
368
+ }
369
+ };
370
+ customElements.define("gs-message-dialog", m);
371
+ function h(e, t = {}) {
372
+ return d("gs-message-dialog", (n) => {
373
+ n.message = e, n.dialogTitle = t.title, n.type = t.type, n.confirm = t.confirm;
374
+ });
375
+ }
376
+ //#endregion
377
+ export { c as BaseDialog, l as showDialog, h as showMessageDialog };