@jbrowse/plugin-config 1.7.11 → 2.1.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 (133) hide show
  1. package/dist/ConfigurationEditorWidget/components/CallbackEditor.d.ts +10 -7
  2. package/dist/ConfigurationEditorWidget/components/CallbackEditor.js +117 -115
  3. package/dist/ConfigurationEditorWidget/components/CallbackEditor.js.map +1 -0
  4. package/dist/ConfigurationEditorWidget/components/ColorEditor.d.ts +9 -33
  5. package/dist/ConfigurationEditorWidget/components/ColorEditor.js +68 -117
  6. package/dist/ConfigurationEditorWidget/components/ColorEditor.js.map +1 -0
  7. package/dist/ConfigurationEditorWidget/components/ConfigurationEditor.d.ts +7 -3
  8. package/dist/ConfigurationEditorWidget/components/ConfigurationEditor.js +117 -160
  9. package/dist/ConfigurationEditorWidget/components/ConfigurationEditor.js.map +1 -0
  10. package/dist/ConfigurationEditorWidget/components/JsonEditor.d.ts +9 -7
  11. package/dist/ConfigurationEditorWidget/components/JsonEditor.js +92 -77
  12. package/dist/ConfigurationEditorWidget/components/JsonEditor.js.map +1 -0
  13. package/dist/ConfigurationEditorWidget/components/SlotEditor.d.ts +17 -5
  14. package/dist/ConfigurationEditorWidget/components/SlotEditor.js +240 -374
  15. package/dist/ConfigurationEditorWidget/components/SlotEditor.js.map +1 -0
  16. package/dist/ConfigurationEditorWidget/components/StringArrayEditor.js +76 -105
  17. package/dist/ConfigurationEditorWidget/components/StringArrayEditor.js.map +1 -0
  18. package/dist/ConfigurationEditorWidget/components/TypeSelector.d.ts +8 -6
  19. package/dist/ConfigurationEditorWidget/components/TypeSelector.js +16 -46
  20. package/dist/ConfigurationEditorWidget/components/TypeSelector.js.map +1 -0
  21. package/dist/ConfigurationEditorWidget/index.d.ts +10 -3
  22. package/dist/ConfigurationEditorWidget/index.js +26 -42
  23. package/dist/ConfigurationEditorWidget/index.js.map +1 -0
  24. package/dist/ConfigurationEditorWidget/model.d.ts +3 -2
  25. package/dist/ConfigurationEditorWidget/model.js +19 -26
  26. package/dist/ConfigurationEditorWidget/model.js.map +1 -0
  27. package/dist/FromConfigAdapter/FromConfigAdapter.js +172 -204
  28. package/dist/FromConfigAdapter/FromConfigAdapter.js.map +1 -0
  29. package/dist/FromConfigAdapter/FromConfigRegionsAdapter.js +151 -142
  30. package/dist/FromConfigAdapter/FromConfigRegionsAdapter.js.map +1 -0
  31. package/dist/FromConfigAdapter/FromConfigSequenceAdapter.d.ts +2 -1
  32. package/dist/FromConfigAdapter/FromConfigSequenceAdapter.js +174 -181
  33. package/dist/FromConfigAdapter/FromConfigSequenceAdapter.js.map +1 -0
  34. package/dist/FromConfigAdapter/configSchema.js +33 -49
  35. package/dist/FromConfigAdapter/configSchema.js.map +1 -0
  36. package/dist/FromConfigAdapter/index.js +16 -50
  37. package/dist/FromConfigAdapter/index.js.map +1 -0
  38. package/dist/RefNameAliasAdapter/RefNameAliasAdapter.js +111 -125
  39. package/dist/RefNameAliasAdapter/RefNameAliasAdapter.js.map +1 -0
  40. package/dist/RefNameAliasAdapter/configSchema.js +16 -25
  41. package/dist/RefNameAliasAdapter/configSchema.js.map +1 -0
  42. package/dist/RefNameAliasAdapter/index.js +10 -22
  43. package/dist/RefNameAliasAdapter/index.js.map +1 -0
  44. package/dist/index.d.ts +9 -3
  45. package/dist/index.js +129 -144
  46. package/dist/index.js.map +1 -0
  47. package/esm/ConfigurationEditorWidget/components/CallbackEditor.d.ts +12 -0
  48. package/esm/ConfigurationEditorWidget/components/CallbackEditor.js +80 -0
  49. package/esm/ConfigurationEditorWidget/components/CallbackEditor.js.map +1 -0
  50. package/esm/ConfigurationEditorWidget/components/ColorEditor.d.ts +20 -0
  51. package/esm/ConfigurationEditorWidget/components/ColorEditor.js +22 -0
  52. package/esm/ConfigurationEditorWidget/components/ColorEditor.js.map +1 -0
  53. package/esm/ConfigurationEditorWidget/components/ConfigurationEditor.d.ts +8 -0
  54. package/esm/ConfigurationEditorWidget/components/ConfigurationEditor.js +87 -0
  55. package/esm/ConfigurationEditorWidget/components/ConfigurationEditor.js.map +1 -0
  56. package/esm/ConfigurationEditorWidget/components/JsonEditor.d.ts +11 -0
  57. package/esm/ConfigurationEditorWidget/components/JsonEditor.js +55 -0
  58. package/esm/ConfigurationEditorWidget/components/JsonEditor.js.map +1 -0
  59. package/esm/ConfigurationEditorWidget/components/SlotEditor.d.ts +18 -0
  60. package/esm/ConfigurationEditorWidget/components/SlotEditor.js +182 -0
  61. package/esm/ConfigurationEditorWidget/components/SlotEditor.js.map +1 -0
  62. package/esm/ConfigurationEditorWidget/components/StringArrayEditor.d.ts +12 -0
  63. package/esm/ConfigurationEditorWidget/components/StringArrayEditor.js +36 -0
  64. package/esm/ConfigurationEditorWidget/components/StringArrayEditor.js.map +1 -0
  65. package/esm/ConfigurationEditorWidget/components/TypeSelector.d.ts +9 -0
  66. package/esm/ConfigurationEditorWidget/components/TypeSelector.js +12 -0
  67. package/esm/ConfigurationEditorWidget/components/TypeSelector.js.map +1 -0
  68. package/esm/ConfigurationEditorWidget/index.d.ts +10 -0
  69. package/esm/ConfigurationEditorWidget/index.js +21 -0
  70. package/esm/ConfigurationEditorWidget/index.js.map +1 -0
  71. package/esm/ConfigurationEditorWidget/model.d.ts +9 -0
  72. package/esm/ConfigurationEditorWidget/model.js +17 -0
  73. package/esm/ConfigurationEditorWidget/model.js.map +1 -0
  74. package/esm/FromConfigAdapter/FromConfigAdapter.d.ts +24 -0
  75. package/esm/FromConfigAdapter/FromConfigAdapter.js +63 -0
  76. package/esm/FromConfigAdapter/FromConfigAdapter.js.map +1 -0
  77. package/esm/FromConfigAdapter/FromConfigRegionsAdapter.d.ts +23 -0
  78. package/esm/FromConfigAdapter/FromConfigRegionsAdapter.js +50 -0
  79. package/esm/FromConfigAdapter/FromConfigRegionsAdapter.js.map +1 -0
  80. package/esm/FromConfigAdapter/FromConfigSequenceAdapter.d.ts +26 -0
  81. package/esm/FromConfigAdapter/FromConfigSequenceAdapter.js +65 -0
  82. package/esm/FromConfigAdapter/FromConfigSequenceAdapter.js.map +1 -0
  83. package/esm/FromConfigAdapter/configSchema.d.ts +3 -0
  84. package/esm/FromConfigAdapter/configSchema.js +32 -0
  85. package/esm/FromConfigAdapter/configSchema.js.map +1 -0
  86. package/esm/FromConfigAdapter/index.d.ts +4 -0
  87. package/esm/FromConfigAdapter/index.js +5 -0
  88. package/esm/FromConfigAdapter/index.js.map +1 -0
  89. package/esm/RefNameAliasAdapter/RefNameAliasAdapter.d.ts +8 -0
  90. package/esm/RefNameAliasAdapter/RefNameAliasAdapter.js +24 -0
  91. package/esm/RefNameAliasAdapter/RefNameAliasAdapter.js.map +1 -0
  92. package/esm/RefNameAliasAdapter/configSchema.d.ts +2 -0
  93. package/esm/RefNameAliasAdapter/configSchema.js +15 -0
  94. package/esm/RefNameAliasAdapter/configSchema.js.map +1 -0
  95. package/esm/RefNameAliasAdapter/index.d.ts +2 -0
  96. package/esm/RefNameAliasAdapter/index.js +3 -0
  97. package/esm/RefNameAliasAdapter/index.js.map +1 -0
  98. package/esm/index.d.ts +18 -0
  99. package/esm/index.js +72 -0
  100. package/esm/index.js.map +1 -0
  101. package/package.json +21 -15
  102. package/src/ConfigurationEditorWidget/components/CallbackEditor.tsx +126 -0
  103. package/src/ConfigurationEditorWidget/components/ColorEditor.tsx +13 -60
  104. package/src/ConfigurationEditorWidget/components/{ConfigurationEditor.test.js → ConfigurationEditor.test.tsx} +0 -0
  105. package/src/ConfigurationEditorWidget/components/ConfigurationEditor.tsx +173 -0
  106. package/src/ConfigurationEditorWidget/components/JsonEditor.tsx +84 -0
  107. package/src/ConfigurationEditorWidget/components/SlotEditor.tsx +484 -0
  108. package/src/ConfigurationEditorWidget/components/StringArrayEditor.tsx +2 -2
  109. package/src/ConfigurationEditorWidget/components/{TypeSelector.js → TypeSelector.tsx} +15 -7
  110. package/src/ConfigurationEditorWidget/components/__snapshots__/ConfigurationEditor.test.tsx.snap +2024 -0
  111. package/src/ConfigurationEditorWidget/index.tsx +25 -0
  112. package/src/ConfigurationEditorWidget/{model.js → model.ts} +4 -2
  113. package/src/FromConfigAdapter/FromConfigSequenceAdapter.ts +6 -10
  114. package/src/index.ts +20 -14
  115. package/dist/ConfigurationEditorWidget/components/CodeEditor.d.ts +0 -4
  116. package/dist/ConfigurationEditorWidget/components/CodeEditor.js +0 -80
  117. package/dist/ConfigurationEditorWidget/components/ColorEditor.test.js +0 -31
  118. package/dist/ConfigurationEditorWidget/components/ColorPicker.d.ts +0 -14
  119. package/dist/ConfigurationEditorWidget/components/ColorPicker.js +0 -72
  120. package/dist/ConfigurationEditorWidget/components/ConfigurationEditor.test.js +0 -121
  121. package/dist/FromConfigAdapter/FromConfigAdapter.test.js +0 -100
  122. package/dist/FromConfigAdapter/FromConfigRegionsAdapter.test.js +0 -200
  123. package/dist/FromConfigAdapter/FromConfigSequenceAdapter.test.js +0 -110
  124. package/dist/RefNameAliasAdapter/RefNameAliasAdapter.test.js +0 -41
  125. package/dist/index.test.js +0 -41
  126. package/src/ConfigurationEditorWidget/components/CallbackEditor.js +0 -112
  127. package/src/ConfigurationEditorWidget/components/CodeEditor.js +0 -60
  128. package/src/ConfigurationEditorWidget/components/ColorPicker.tsx +0 -52
  129. package/src/ConfigurationEditorWidget/components/ConfigurationEditor.js +0 -154
  130. package/src/ConfigurationEditorWidget/components/JsonEditor.js +0 -56
  131. package/src/ConfigurationEditorWidget/components/SlotEditor.js +0 -377
  132. package/src/ConfigurationEditorWidget/components/__snapshots__/ConfigurationEditor.test.js.snap +0 -1753
  133. package/src/ConfigurationEditorWidget/index.js +0 -20
@@ -0,0 +1,65 @@
1
+ import SimpleFeature from '@jbrowse/core/util/simpleFeature';
2
+ import { ObservableCreate } from '@jbrowse/core/util/rxjs';
3
+ import { toArray } from 'rxjs/operators';
4
+ import FromConfigAdapter from './FromConfigAdapter';
5
+ export default class FromConfigSequenceAdapter extends FromConfigAdapter {
6
+ /**
7
+ * Fetch features for a certain region
8
+ * @param region - Region
9
+ * @returns Observable of Feature objects in the region
10
+ */
11
+ getFeatures(region) {
12
+ return ObservableCreate(async (observer) => {
13
+ const feats = await super.getFeatures(region).pipe(toArray()).toPromise();
14
+ const feat = feats[0];
15
+ observer.next(new SimpleFeature({
16
+ ...feat.toJSON(),
17
+ uniqueId: `${feat.id()}:${region.start}-${region.end}`,
18
+ end: region.end,
19
+ start: region.start,
20
+ seq: feat
21
+ .get('seq')
22
+ .slice(Math.max(region.start - feat.get('start'), 0), Math.max(region.end - feat.get('start'), 0)),
23
+ }));
24
+ observer.complete();
25
+ });
26
+ }
27
+ /**
28
+ * Get refName, start, and end for all features after collapsing any overlaps
29
+ */
30
+ async getRegions() {
31
+ const regions = [];
32
+ // recall: features are stored in this object sorted by start coordinate
33
+ for (const [refName, features] of this.features) {
34
+ let currentRegion;
35
+ for (const feature of features) {
36
+ if (currentRegion &&
37
+ currentRegion.end >= feature.get('start') &&
38
+ currentRegion.start <= feature.get('end')) {
39
+ currentRegion.end = feature.get('end');
40
+ }
41
+ else {
42
+ if (currentRegion) {
43
+ regions.push(currentRegion);
44
+ }
45
+ currentRegion = {
46
+ refName,
47
+ start: feature.get('start'),
48
+ end: feature.get('end'),
49
+ };
50
+ }
51
+ }
52
+ if (currentRegion) {
53
+ regions.push(currentRegion);
54
+ }
55
+ }
56
+ return regions;
57
+ }
58
+ /**
59
+ * called to provide a hint that data tied to a certain region
60
+ * will not be needed for the forseeable future and can be purged
61
+ * from caches, etc
62
+ */
63
+ freeResources( /* { region } */) { }
64
+ }
65
+ //# sourceMappingURL=FromConfigSequenceAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FromConfigSequenceAdapter.js","sourceRoot":"","sources":["../../src/FromConfigAdapter/FromConfigSequenceAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,aAA0B,MAAM,kCAAkC,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AAGnD,MAAM,CAAC,OAAO,OAAO,yBACnB,SAAQ,iBAAiB;IAGzB;;;;OAIG;IACH,WAAW,CAAC,MAAwB;QAClC,OAAO,gBAAgB,CAAU,KAAK,EAAC,QAAQ,EAAC,EAAE;YAChD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;YACzE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACrB,QAAQ,CAAC,IAAI,CACX,IAAI,aAAa,CAAC;gBAChB,GAAG,IAAI,CAAC,MAAM,EAAE;gBAChB,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,EAAE;gBACtD,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,EAAE,IAAI;qBACN,GAAG,CAAC,KAAK,CAAC;qBACV,KAAK,CACJ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAC7C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAC5C;aACJ,CAAC,CACH,CAAA;YAED,QAAQ,CAAC,QAAQ,EAAE,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAG,EAAE,CAAA;QAElB,wEAAwE;QACxE,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/C,IAAI,aAAa,CAAA;YACjB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,IACE,aAAa;oBACb,aAAa,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;oBACzC,aAAa,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EACzC;oBACA,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;iBACvC;qBAAM;oBACL,IAAI,aAAa,EAAE;wBACjB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;qBAC5B;oBACD,aAAa,GAAG;wBACd,OAAO;wBACP,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;wBAC3B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;qBACxB,CAAA;iBACF;aACF;YACD,IAAI,aAAa,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;aAC5B;SACF;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,aAAa,EAAC,gBAAgB,IAAS,CAAC;CACzC"}
@@ -0,0 +1,3 @@
1
+ export declare const configSchema: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
2
+ export declare const regionsConfigSchema: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
3
+ export declare const sequenceConfigSchema: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
@@ -0,0 +1,32 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ export const configSchema = ConfigurationSchema('FromConfigAdapter', {
3
+ features: {
4
+ type: 'frozen',
5
+ defaultValue: [],
6
+ },
7
+ featureClass: {
8
+ type: 'string',
9
+ defaultValue: 'SimpleFeature',
10
+ },
11
+ }, { explicitlyTyped: true, implicitIdentifier: 'adapterId' });
12
+ export const regionsConfigSchema = ConfigurationSchema('FromConfigRegionsAdapter', {
13
+ features: {
14
+ type: 'frozen',
15
+ defaultValue: [],
16
+ },
17
+ featureClass: {
18
+ type: 'string',
19
+ defaultValue: 'SimpleFeature',
20
+ },
21
+ }, { explicitlyTyped: true, implicitIdentifier: 'adapterId' });
22
+ export const sequenceConfigSchema = ConfigurationSchema('FromConfigSequenceAdapter', {
23
+ features: {
24
+ type: 'frozen',
25
+ defaultValue: [],
26
+ },
27
+ featureClass: {
28
+ type: 'string',
29
+ defaultValue: 'SimpleFeature',
30
+ },
31
+ }, { explicitlyTyped: true, implicitIdentifier: 'adapterId' });
32
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/FromConfigAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAC7C,mBAAmB,EACnB;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,EAAE;KACjB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,eAAe;KAC9B;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAC3D,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CACpD,0BAA0B,EAC1B;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,EAAE;KACjB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,eAAe;KAC9B;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAC3D,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CACrD,2BAA2B,EAC3B;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,EAAE;KACjB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,eAAe;KAC9B;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAC3D,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { default as AdapterClass } from './FromConfigAdapter';
2
+ export { default as RegionsAdapterClass } from './FromConfigRegionsAdapter';
3
+ export { default as SequenceAdapterClass } from './FromConfigSequenceAdapter';
4
+ export { configSchema, regionsConfigSchema, sequenceConfigSchema, } from './configSchema';
@@ -0,0 +1,5 @@
1
+ export { default as AdapterClass } from './FromConfigAdapter';
2
+ export { default as RegionsAdapterClass } from './FromConfigRegionsAdapter';
3
+ export { default as SequenceAdapterClass } from './FromConfigSequenceAdapter';
4
+ export { configSchema, regionsConfigSchema, sequenceConfigSchema, } from './configSchema';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/FromConfigAdapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { BaseRefNameAliasAdapter, BaseAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
2
+ export default class RefNameAliasAdapter extends BaseAdapter implements BaseRefNameAliasAdapter {
3
+ getRefNameAliases(): Promise<{
4
+ refName: string;
5
+ aliases: string[];
6
+ }[]>;
7
+ freeResources(): Promise<void>;
8
+ }
@@ -0,0 +1,24 @@
1
+ import { BaseAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
2
+ import { openLocation } from '@jbrowse/core/util/io';
3
+ import { readConfObject } from '@jbrowse/core/configuration';
4
+ export default class RefNameAliasAdapter extends BaseAdapter {
5
+ async getRefNameAliases() {
6
+ const loc = readConfObject(this.config, 'location');
7
+ if (loc.uri === '' || loc.uri === '/path/to/my/aliases.txt') {
8
+ return [];
9
+ }
10
+ const results = await openLocation(loc).readFile('utf8');
11
+ const refColumn = readConfObject(this.config, 'refNameColumn');
12
+ return results
13
+ .trim()
14
+ .split('\n')
15
+ .filter(f => !!f && !f.startsWith('#'))
16
+ .map(row => {
17
+ const aliases = row.split('\t');
18
+ const [refName] = aliases.splice(refColumn, 1);
19
+ return { refName, aliases: aliases.filter(f => !!f.trim()) };
20
+ });
21
+ }
22
+ async freeResources() { }
23
+ }
24
+ //# sourceMappingURL=RefNameAliasAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RefNameAliasAdapter.js","sourceRoot":"","sources":["../../src/RefNameAliasAdapter/RefNameAliasAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,GACZ,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,CAAC,OAAO,OAAO,mBACnB,SAAQ,WAAW;IAGnB,KAAK,CAAC,iBAAiB;QACrB,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QACnD,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,yBAAyB,EAAE;YAC3D,OAAO,EAAE,CAAA;SACV;QACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACxD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;QAC9D,OAAO,OAAO;aACX,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACtC,GAAG,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAA;QAC9D,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,aAAa,KAAI,CAAC;CACzB"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
2
+ export default _default;
@@ -0,0 +1,15 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ export default ConfigurationSchema('RefNameAliasAdapter', {
3
+ location: {
4
+ type: 'fileLocation',
5
+ defaultValue: {
6
+ uri: '/path/to/my/aliases.txt',
7
+ locationType: 'UriLocation',
8
+ },
9
+ },
10
+ refNameColumn: {
11
+ type: 'number',
12
+ defaultValue: 0,
13
+ },
14
+ }, { explicitlyTyped: true });
15
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/RefNameAliasAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,eAAe,mBAAmB,CAChC,qBAAqB,EACrB;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE;YACZ,GAAG,EAAE,yBAAyB;YAC9B,YAAY,EAAE,aAAa;SAC5B;KACF;IACD,aAAa,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,CAAC;KAChB;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { default as AdapterClass } from './RefNameAliasAdapter';
2
+ export { default as configSchema } from './configSchema';
@@ -0,0 +1,3 @@
1
+ export { default as AdapterClass } from './RefNameAliasAdapter';
2
+ export { default as configSchema } from './configSchema';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/RefNameAliasAdapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
package/esm/index.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ /// <reference types="react" />
2
+ import Plugin from '@jbrowse/core/Plugin';
3
+ import PluginManager from '@jbrowse/core/PluginManager';
4
+ declare const LazyConfigurationEditorComponent: import("react").LazyExoticComponent<({ model }: {
5
+ model: {
6
+ target: {
7
+ [x: string]: any;
8
+ } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
9
+ setSubschema(slotName: string, data: unknown): any;
10
+ } & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
11
+ };
12
+ }) => JSX.Element>;
13
+ export default class extends Plugin {
14
+ name: string;
15
+ install(pluginManager: PluginManager): void;
16
+ }
17
+ export { default as JsonEditor } from './ConfigurationEditorWidget/components/JsonEditor';
18
+ export { LazyConfigurationEditorComponent as ConfigurationEditor };
package/esm/index.js ADDED
@@ -0,0 +1,72 @@
1
+ import { lazy } from 'react';
2
+ import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType';
3
+ import WidgetType from '@jbrowse/core/pluggableElementTypes/WidgetType';
4
+ import Plugin from '@jbrowse/core/Plugin';
5
+ import { configSchema as ConfigurationEditorConfigSchema, HeadingComponent as ConfigurationEditorHeadingComponent, stateModelFactory as ConfigurationEditorStateModelFactory, } from './ConfigurationEditorWidget';
6
+ import { configSchema as fromConfigAdapterConfigSchema, regionsConfigSchema as fromConfigRegionsAdapterConfigSchema, sequenceConfigSchema as fromConfigSequenceAdapterConfigSchema, } from './FromConfigAdapter';
7
+ import { configSchema as refNameAliasAdapterConfigSchema } from './RefNameAliasAdapter';
8
+ const LazyConfigurationEditorComponent = lazy(() => import('./ConfigurationEditorWidget/components/ConfigurationEditor'));
9
+ export default class extends Plugin {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.name = 'ConfigurationPlugin';
13
+ }
14
+ install(pluginManager) {
15
+ pluginManager.addAdapterType(() => new AdapterType({
16
+ name: 'FromConfigAdapter',
17
+ configSchema: fromConfigAdapterConfigSchema,
18
+ getAdapterClass: () => import('./FromConfigAdapter/FromConfigAdapter').then(r => r.default),
19
+ adapterMetadata: {
20
+ category: null,
21
+ hiddenFromGUI: true,
22
+ displayName: null,
23
+ description: null,
24
+ },
25
+ }));
26
+ pluginManager.addAdapterType(() => new AdapterType({
27
+ name: 'FromConfigRegionsAdapter',
28
+ configSchema: fromConfigRegionsAdapterConfigSchema,
29
+ getAdapterClass: () => import('./FromConfigAdapter/FromConfigRegionsAdapter').then(r => r.default),
30
+ adapterMetadata: {
31
+ category: null,
32
+ hiddenFromGUI: true,
33
+ displayName: null,
34
+ description: null,
35
+ },
36
+ }));
37
+ pluginManager.addAdapterType(() => new AdapterType({
38
+ name: 'FromConfigSequenceAdapter',
39
+ configSchema: fromConfigSequenceAdapterConfigSchema,
40
+ getAdapterClass: () => import('./FromConfigAdapter/FromConfigSequenceAdapter').then(r => r.default),
41
+ adapterMetadata: {
42
+ category: null,
43
+ hiddenFromGUI: true,
44
+ displayName: null,
45
+ description: null,
46
+ },
47
+ }));
48
+ pluginManager.addAdapterType(() => new AdapterType({
49
+ name: 'RefNameAliasAdapter',
50
+ configSchema: refNameAliasAdapterConfigSchema,
51
+ getAdapterClass: () => import('./RefNameAliasAdapter/RefNameAliasAdapter').then(r => r.default),
52
+ adapterMetadata: {
53
+ category: null,
54
+ hiddenFromGUI: true,
55
+ displayName: null,
56
+ description: null,
57
+ },
58
+ }));
59
+ pluginManager.addWidgetType(() => {
60
+ return new WidgetType({
61
+ name: 'ConfigurationEditorWidget',
62
+ HeadingComponent: ConfigurationEditorHeadingComponent,
63
+ configSchema: ConfigurationEditorConfigSchema,
64
+ stateModel: ConfigurationEditorStateModelFactory(pluginManager),
65
+ ReactComponent: LazyConfigurationEditorComponent,
66
+ });
67
+ });
68
+ }
69
+ }
70
+ export { default as JsonEditor } from './ConfigurationEditorWidget/components/JsonEditor';
71
+ export { LazyConfigurationEditorComponent as ConfigurationEditor };
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-config",
3
- "version": "1.7.11",
3
+ "version": "2.1.0",
4
4
  "description": "JBrowse 2 config utilities",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -20,38 +20,44 @@
20
20
  "main": "dist/index.js",
21
21
  "files": [
22
22
  "dist",
23
- "src"
23
+ "src",
24
+ "esm"
24
25
  ],
25
26
  "scripts": {
26
- "build": "babel src --root-mode upward --out-dir dist --extensions .ts,.js,.tsx,.jsx",
27
+ "build": "npm-run-all build:*",
27
28
  "test": "cd ../..; jest plugins/config",
28
29
  "prepublishOnly": "yarn test",
29
30
  "prepack": "yarn build; yarn useDist",
30
31
  "postpack": "yarn useSrc",
31
32
  "useDist": "node ../../scripts/useDist.js",
32
33
  "useSrc": "node ../../scripts/useSrc.js",
33
- "postbuild": "tsc --build tsconfig.build.json"
34
+ "prebuild": "npm run clean",
35
+ "build:esm": "tsc --build tsconfig.build.esm.json",
36
+ "build:es5": "tsc --build tsconfig.build.es5.json",
37
+ "clean": "rimraf dist esm *.tsbuildinfo"
34
38
  },
35
39
  "dependencies": {
36
40
  "@babel/runtime": "^7.17.9",
37
- "@material-ui/icons": "^4.9.1",
38
- "pluralize": "^8.0.0",
39
- "react-color": "^2.19.3",
40
- "react-simple-code-editor": "0.9.3",
41
- "react-syntax-highlighter": "^14.0.0"
41
+ "@mui/icons-material": "^5.0.1",
42
+ "pluralize": "^8.0.0"
42
43
  },
43
44
  "peerDependencies": {
44
- "@jbrowse/core": "^1.0.0",
45
- "@material-ui/core": "^4.12.2",
46
- "mobx-react": "^6.0.0",
47
- "mobx-state-tree": "3.14.1",
45
+ "@jbrowse/core": "^2.0.0",
46
+ "@mui/material": "^5.0.0",
47
+ "mobx": "^6.0.0",
48
+ "mobx-react": "^7.0.0",
49
+ "mobx-state-tree": "^5.0.0",
48
50
  "prop-types": "^15.0.0",
49
51
  "react": ">=16.8.0",
50
52
  "react-dom": ">=16.8.0",
51
- "rxjs": "^6.0.0"
53
+ "rxjs": "^6.0.0",
54
+ "tss-react": "^3.0.0"
52
55
  },
53
56
  "publishConfig": {
54
57
  "access": "public"
55
58
  },
56
- "gitHead": "5c21beb48a21f08b0091d293f09ac99174c48f77"
59
+ "distModule": "esm/index.js",
60
+ "srcModule": "src/index.ts",
61
+ "module": "esm/index.js",
62
+ "gitHead": "0db0462fa1f9f15ab4869da085bcab032b9483c3"
57
63
  }
@@ -0,0 +1,126 @@
1
+ import React, { useEffect, useState } from 'react'
2
+ import { Tooltip, IconButton, TextField } from '@mui/material'
3
+ import { useDebounce } from '@jbrowse/core/util'
4
+ import { stringToJexlExpression } from '@jbrowse/core/util/jexlStrings'
5
+ import { getEnv } from 'mobx-state-tree'
6
+ import { observer } from 'mobx-react'
7
+ import { makeStyles } from 'tss-react/mui'
8
+
9
+ // icons
10
+ import HelpIcon from '@mui/icons-material/Help'
11
+
12
+ // Optimize by using system default fonts:
13
+ // https://css-tricks.com/snippets/css/font-stacks/
14
+ const fontFamily =
15
+ 'Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace'
16
+
17
+ const useStyles = makeStyles()(theme => ({
18
+ callbackEditor: {
19
+ marginTop: '16px',
20
+ borderBottom: `1px solid ${theme.palette.divider}`,
21
+ width: '100%',
22
+ fontFamily,
23
+ },
24
+ textAreaFont: {
25
+ fontFamily,
26
+ },
27
+ callbackContainer: {
28
+ width: '100%',
29
+ overflowX: 'auto',
30
+ },
31
+
32
+ error: {
33
+ color: 'red',
34
+ fontSize: '0.8em',
35
+ },
36
+ }))
37
+
38
+ function CallbackEditor({
39
+ slot,
40
+ }: {
41
+ slot: {
42
+ set: (arg: string) => void
43
+ description: string
44
+ name: string
45
+ value: string
46
+ contextVariable: string
47
+ }
48
+ }) {
49
+ const { classes } = useStyles()
50
+
51
+ const [code, setCode] = useState(slot.value)
52
+ const [error, setCodeError] = useState<unknown>()
53
+ const debouncedCode = useDebounce(code, 400)
54
+
55
+ useEffect(() => {
56
+ try {
57
+ const jexlDebouncedCode = debouncedCode.startsWith('jexl:')
58
+ ? debouncedCode
59
+ : `jexl:${debouncedCode}`
60
+
61
+ if (jexlDebouncedCode === 'jexl:') {
62
+ throw new Error('Empty jexl expression is not valid')
63
+ }
64
+ stringToJexlExpression(
65
+ jexlDebouncedCode,
66
+ getEnv(slot).pluginManager?.jexl,
67
+ )
68
+ slot.set(jexlDebouncedCode)
69
+ setCodeError(undefined)
70
+ } catch (e) {
71
+ console.error({ e })
72
+ setCodeError(e)
73
+ }
74
+ }, [debouncedCode, slot])
75
+
76
+ // if default value is a callback, will have to remove jexl:
77
+ // do this last
78
+ return (
79
+ <>
80
+ {error ? <p className={classes.error}>{`${error}`}</p> : null}
81
+ <div className={classes.callbackContainer}>
82
+ <TextField
83
+ multiline
84
+ className={classes.callbackEditor}
85
+ value={code.startsWith('jexl:') ? code.split('jexl:')[1] : code}
86
+ onChange={event => setCode(event.target.value)}
87
+ style={{ background: error ? '#fdd' : undefined }}
88
+ InputProps={{
89
+ classes: {
90
+ input: classes.textAreaFont,
91
+ },
92
+ }}
93
+ />
94
+
95
+ <p>{slot.description}</p>
96
+ <Tooltip
97
+ title={
98
+ <div>
99
+ Callbacks are written in Jexl format. Click to learn more.
100
+ <br /> Names of available context items: {slot.contextVariable}
101
+ </div>
102
+ }
103
+ arrow
104
+ >
105
+ <IconButton
106
+ color="primary"
107
+ onClick={() => {
108
+ const newWindow = window.open(
109
+ 'https://github.com/TomFrost/Jexl',
110
+ '_blank',
111
+ 'noopener,noreferrer',
112
+ )
113
+ if (newWindow) {
114
+ newWindow.opener = null
115
+ }
116
+ }}
117
+ >
118
+ <HelpIcon />
119
+ </IconButton>
120
+ </Tooltip>
121
+ </div>
122
+ </>
123
+ )
124
+ }
125
+
126
+ export default observer(CallbackEditor)
@@ -1,76 +1,38 @@
1
1
  import React, { lazy, useState } from 'react'
2
2
  import { observer } from 'mobx-react'
3
- import ReactPropTypes from 'prop-types'
4
- import TextField from '@material-ui/core/TextField'
5
- import { Color, RGBColor } from 'react-color'
3
+ import { TextField } from '@mui/material'
6
4
 
7
- const ColorPicker = lazy(() => import('./ColorPicker'))
8
-
9
- // this is needed because passing a entire color object into the react-color
10
- // for alpha, can't pass in an rgba string for example
11
- function serializeColor(color: Color) {
12
- if (color instanceof Object) {
13
- const { r, g, b, a } = color as RGBColor
14
- return a === undefined ? `rgb(${r},${g},${b})` : `rgba(${r},${g},${b},${a})`
15
- }
16
- return color
17
- }
5
+ const ColorPicker = lazy(() => import('@jbrowse/core/ui/ColorPicker'))
18
6
 
19
7
  export const ColorSlot = (props: {
20
8
  value: string
21
- label: string
22
- TextFieldProps: {
9
+ label?: string
10
+ TextFieldProps?: {
23
11
  helperText: string
24
12
  fullWidth: boolean
25
13
  }
26
14
  onChange: (arg: string) => void
27
15
  }) => {
28
- const { value, label, TextFieldProps, onChange } = props
16
+ const { value = '#000', label = '', TextFieldProps = {}, onChange } = props
29
17
  const [displayed, setDisplayed] = useState(false)
30
18
 
31
19
  return (
32
- <>
20
+ <div style={{ display: 'flex' }}>
33
21
  <TextField
34
22
  value={value}
35
23
  label={label}
36
- InputProps={{
37
- style: {
38
- color: value,
39
- borderRightWidth: '25px',
40
- borderRightStyle: 'solid',
41
- borderRightColor: value,
42
- },
43
- }}
44
24
  onClick={() => setDisplayed(!displayed)}
45
- onChange={event => {
46
- onChange(event.target.value)
47
- }}
25
+ onChange={event => onChange(event.target.value)}
48
26
  {...TextFieldProps}
49
27
  />
50
- {displayed ? (
28
+ <div style={{ marginTop: 10 }}>
51
29
  <React.Suspense fallback={<div />}>
52
- <ColorPicker
53
- color={value}
54
- onChange={event => {
55
- onChange(serializeColor(event.rgb))
56
- }}
57
- />
30
+ <ColorPicker color={value} onChange={event => onChange(event)} />
58
31
  </React.Suspense>
59
- ) : null}
60
- </>
32
+ </div>
33
+ </div>
61
34
  )
62
35
  }
63
- ColorSlot.propTypes = {
64
- onChange: ReactPropTypes.func.isRequired,
65
- label: ReactPropTypes.string,
66
- TextFieldProps: ReactPropTypes.shape({}),
67
- value: ReactPropTypes.string,
68
- }
69
- ColorSlot.defaultProps = {
70
- label: '',
71
- value: '#000',
72
- TextFieldProps: {},
73
- }
74
36
 
75
37
  function ColorEditorSlot(props: {
76
38
  slot: {
@@ -85,9 +47,7 @@ function ColorEditorSlot(props: {
85
47
  <ColorSlot
86
48
  label={slot.name}
87
49
  value={slot.value}
88
- onChange={(color: string) => {
89
- slot.set(color)
90
- }}
50
+ onChange={color => slot.set(color)}
91
51
  TextFieldProps={{
92
52
  helperText: slot.description,
93
53
  fullWidth: true,
@@ -95,12 +55,5 @@ function ColorEditorSlot(props: {
95
55
  />
96
56
  )
97
57
  }
98
- ColorEditorSlot.propTypes = {
99
- slot: ReactPropTypes.shape({
100
- name: ReactPropTypes.string.isRequired,
101
- description: ReactPropTypes.string,
102
- value: ReactPropTypes.string.isRequired,
103
- set: ReactPropTypes.func.isRequired,
104
- }).isRequired,
105
- }
58
+
106
59
  export default observer(ColorEditorSlot)