@datagrok/hit-triage 1.0.1

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 (51) hide show
  1. package/.eslintignore +1 -0
  2. package/.eslintrc.json +44 -0
  3. package/CHANGELOG.md +3 -0
  4. package/README.md +26 -0
  5. package/README_HD.md +114 -0
  6. package/README_HT.md +63 -0
  7. package/README_OLD.md +130 -0
  8. package/css/hit-triage.css +98 -0
  9. package/dist/package.js +2 -0
  10. package/dist/package.js.map +1 -0
  11. package/files/Hit Design/campaigns/DMT1-1/campaign.json +1 -0
  12. package/files/Hit Design/campaigns/DMT1-1/enriched_table.csv +7 -0
  13. package/files/Hit Design/campaigns/DMT2-1/campaign.json +1 -0
  14. package/files/Hit Design/campaigns/DMT2-1/enriched_table.csv +7 -0
  15. package/files/Hit Design/templates/Demo Template 1.json +1 -0
  16. package/files/Hit Design/templates/Demo Template 2.json +1 -0
  17. package/files/Hit Triage/campaigns/DMT-1/campaign.json +1 -0
  18. package/files/Hit Triage/campaigns/DMT-1/enriched_table.csv +101 -0
  19. package/files/Hit Triage/templates/Demo template.json +1 -0
  20. package/files/README.md +128 -0
  21. package/files/samples/hits.csv +10001 -0
  22. package/images/hit-triage-filtering.png +0 -0
  23. package/images/hit-triage-workflow.gif +0 -0
  24. package/images/icons/hit-design-icon.png +0 -0
  25. package/package.json +62 -0
  26. package/package.png +0 -0
  27. package/src/app/accordeons/new-campaign-accordeon.ts +137 -0
  28. package/src/app/accordeons/new-hit-design-campaign-accordeon.ts +67 -0
  29. package/src/app/accordeons/new-hit-design-template-accordeon.ts +170 -0
  30. package/src/app/accordeons/new-template-accordeon.ts +203 -0
  31. package/src/app/base-view.ts +33 -0
  32. package/src/app/consts.ts +29 -0
  33. package/src/app/dialogs/functions-dialog.ts +115 -0
  34. package/src/app/dialogs/save-campaign-dialog.ts +21 -0
  35. package/src/app/hit-app-base.ts +60 -0
  36. package/src/app/hit-design-app.ts +340 -0
  37. package/src/app/hit-design-views/info-view.ts +204 -0
  38. package/src/app/hit-design-views/submit-view.ts +44 -0
  39. package/src/app/hit-design-views/tiles-view.ts +75 -0
  40. package/src/app/hit-design-views/utils.css +3 -0
  41. package/src/app/hit-triage-app.ts +285 -0
  42. package/src/app/hit-triage-views/info-view.ts +193 -0
  43. package/src/app/hit-triage-views/submit-view.ts +44 -0
  44. package/src/app/index.ts +2 -0
  45. package/src/app/types.ts +103 -0
  46. package/src/app/utils/calculate-single-cell.ts +40 -0
  47. package/src/app/utils.ts +78 -0
  48. package/src/package.ts +100 -0
  49. package/src/pngRenderers.ts +40 -0
  50. package/tsconfig.json +71 -0
  51. package/webpack.config.js +33 -0
package/.eslintignore ADDED
@@ -0,0 +1 @@
1
+ src/**/*.d.ts*
package/.eslintrc.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "env": {
3
+ "browser": true,
4
+ "es2022": true
5
+ },
6
+ "extends": [
7
+ "google"
8
+ ],
9
+ "parser": "@typescript-eslint/parser",
10
+ "parserOptions": {
11
+ "ecmaVersion": 12,
12
+ "sourceType": "module"
13
+ },
14
+ "plugins": [
15
+ "@typescript-eslint"
16
+ ],
17
+ "rules": {
18
+ "no-unused-vars": "off",
19
+ "@typescript-eslint/no-unused-vars": ["warn", { "varsIgnorePattern": "^(_|ui$|grok$|DG$)", "argsIgnorePattern": "^_"}],
20
+ "indent": [
21
+ "error",
22
+ 2
23
+ ],
24
+ "max-len": [
25
+ "error",
26
+ 120
27
+ ],
28
+ "require-jsdoc": "off",
29
+ "spaced-comment": "off",
30
+ "linebreak-style": "off",
31
+ "curly": [
32
+ "error",
33
+ "multi-or-nest"
34
+ ],
35
+ "brace-style": [
36
+ "error",
37
+ "1tbs",
38
+ {
39
+ "allowSingleLine": true
40
+ }
41
+ ],
42
+ "block-spacing": 2
43
+ }
44
+ }
package/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ # HitTriage changelog
2
+
3
+ ## 0.0.5 (WIP)
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # HitTriage
2
+
3
+ The HitTriage package is a powerful tool designed for molecule analysis and campaign management within the Datagrok environment. It consists of two applications: HitTriage and HitDesign. This README provides an overview of the package's functionalities, and subsequent readmes will dive deeper into each application's usage.
4
+
5
+ ## Features
6
+
7
+ Common Workflow
8
+
9
+ 1. **Template Creation:**
10
+
11
+ Define a template specifying the data source for molecules, name, key, additional needed information and compute functions. This source can be a file upload or a query in any other package tagged with `HitTriageDataSource` tag.
12
+ The Compute functions are collected from any package with a tag `HitTriageFunction`.
13
+
14
+ ![template](https://github.com/datagrok-ai/public/blob/master/help/uploads/hittriage/template.png?raw=true)
15
+
16
+ 2. **Campaign Building**:
17
+
18
+ Create campaigns based on the template.
19
+ Provide a campaign name, select the data source, provide additional information and initiate the campaign.
20
+ During the campaign run, the specified compute functions are executed, and their results are appended to the dataframe. For example, you can compute molecular descriptors, toxicity risks, structural alerts and more.
21
+
22
+ ![template](https://github.com/datagrok-ai/public/blob/master/help/uploads/hittriage/campaign.png?raw=true)
23
+
24
+ After running a campaign, you can submit the dataframe to any chosen function or query. or
25
+ save the campaign for later use. Saved campaigns can be reloaded and run again by any user on the platform usign the link or the campaigns table on the first page.
26
+
package/README_HD.md ADDED
@@ -0,0 +1,114 @@
1
+ # HitDesign
2
+
3
+ HitDesign streamlines the process of designing new molecules and collaborating on molecular ideas.
4
+ You can sketch molecules,
5
+ calculate or predict chemical and biological properties, enrich data with information
6
+ from the proprietary databases, filter based on these properties or substructure search, select hits,
7
+ move hits to different stages, save campaigns, and share your work with others.
8
+
9
+ The application is built around templates and campaigns, providing a structured yet flexible approach to
10
+ hit design process. In addition to the built-in functions for data ingestion, property calculation, and
11
+ data submission, you can define functions specific to your company or use case, allowing for the
12
+ seamless integration.
13
+
14
+ ## Templates
15
+
16
+ Templates in HitDesign contain essential configurations for conducting a campaign. Template configuration includes:
17
+
18
+ - **Name** : Identifies the template.
19
+
20
+ - **Campaign Prefix** : A code used as a prefix for campaign names (e.g., TMP-1, TMP-2).
21
+
22
+ - **Additional fields** : Configure additional fields for the template, which will be prompted for input during campaign creation. These fields include name, type, and whether they are required or not. For example, additional field for a campaign can be a target protein name, Head scientist name, deadlile, etc.
23
+
24
+ - **Stages** : Define stages for the campaign. Tiles view provides a versatile way to organize molecules in the campaign. Users can drag and drop molecules between stages. For example, stages can be used to organize molecules by their readiness for synthesis.
25
+
26
+ - **Compute functions** : HitDesign aggregates compute functions tagged with `HitTriageFunction` from Datagrok packages. Users can select from these functions to perform calculations (e.g., mass, solubility, mutagenicity, partial charges, toxicity risks, etc.) on the dataset.
27
+ Every time user changes given molecule or adds new molecule to a dataframe, compute functions are executed automatically for that row.
28
+
29
+ - **Submit function** : Define custom submit functions (tagged with `HitTriageSubmitFunction`) to further process or save the filtered and computed dataset. This could include saving to a private database or additional calculations.
30
+
31
+ ![hitDesignReadmeImg](https://github.com/datagrok-ai/public/blob/master/help/uploads/hittriage/template-HD.png?raw=true)
32
+
33
+ ## Campaigns
34
+
35
+ Campaigns are built based on templates and encompass the actual hit design process.
36
+
37
+ - **Creation** : Select a template, fill out additional information and data source, and start the campaign.
38
+
39
+ - **Collaboration** : Campaigns are automatically shared. Users can copy and share URLs for seamless collaboration.
40
+
41
+ - **Functionality**: Once a campaign starts, you can add extra calculated columns, add new rows to dataframe and sketch molecules, apply changes, fileter, save or submit the campaign.
42
+
43
+ ![hitDesignReadmeImg](https://github.com/datagrok-ai/public/blob/master/help/uploads/hittriage/campaign-HD.png?raw=true)
44
+
45
+ ## Getting started
46
+
47
+ Continue ongoing campaigns either directly by a link or by selecting it from the campaigns table.
48
+
49
+ ![hitDesignReadmeImg](https://github.com/datagrok-ai/public/blob/master/help/uploads/hittriage/continue_campaign_HD.gif?raw=true)
50
+
51
+ Create a new template by clicking on the `New Template` button in the `Templates` dropdown.
52
+
53
+ ![hitDesignReadmeImg](https://github.com/datagrok-ai/public/blob/master/help/uploads/hittriage/create-template-HD.gif?raw=true)
54
+
55
+ Start a new campaign by choosing a template and filling out the required information. Once a new campaign starts, an empty dataframe will be added, where you can add new molecules. Upon adding or changing molecules, all compute functions will be executed on that row and the results in coresponding columns will be updated.
56
+
57
+ ![hitDesignReadmeImg](https://github.com/datagrok-ai/public/blob/master/help/uploads/hittriage/HD-start-campaign.gif?raw=true)
58
+
59
+ After the campaign starts, users can sketch new molecules, filter, modify or add viewers to the campaign and then save them. Once saved, reloading the campaign will restore the saved state.
60
+
61
+ ![hitDesignReadmeImg](https://github.com/datagrok-ai/public/blob/master/help/uploads/hittriage/HD-save-campaign.gif?raw=true)
62
+
63
+ Hit design campaign consists of two views, a main design view and a tiles view. You can access the tiles view from the views list. Tiles view provides a versatile way to organize molecules in the campaign. Users can drag and drop molecules between stages, which were defined in the template.
64
+
65
+ ![hitDesignReadmeImg](https://github.com/datagrok-ai/public/blob/master/help/uploads/hittriage/HD-tiles.gif?raw=true)
66
+
67
+ ## Adding custom compute and submit functions
68
+
69
+ HitDesign allows users to define custom compute and submit functions, and these functions can be written in any Datagrok package that is installed in the environment.
70
+
71
+ ** Compute functions **
72
+
73
+ Compute functions are used to calculate molecular properties. For example, mass, solubility, mutagenicity, partial charges, toxicity risks, etc. By default, Hit design will include compute functions from `Chem` package, which are molecular descriptors, Structural alerts, Toxicity risks and Chemical properties. Users can add additional compute functions by tagging them with `HitDesignFunction` tag and writing them in normal datagrok style. The First two inputs of these functions should be `Dataframe` `table` and `Column` `molecule`, and rest can be any other input. Function should perform a certain task, modify the dataframe in desired way and return the modified dataframe. For example, we can create a function that retrieves the `Chembl` mol registration number by smiles string:
74
+
75
+ ```
76
+ //name: Chembl molregno
77
+ //tags: HitTriageFunction
78
+ //input: dataframe table [Input data table] {caption: Table}
79
+ //input: column molecules {caption: Molecules; semType: Molecule}
80
+ //output: dataframe result
81
+ export async function chemblMolregno(table: DG.DataFrame, molecules: DG.Column): Promise<DG.DataFrame> {
82
+ const name = table.columns.getUnusedName('CHEMBL molregno');
83
+ table.columns.addNewInt(name);
84
+ for (let i = 0; i < molecules.length; i++) {
85
+ const smile = molecules.get(i);
86
+ if (!smile) {
87
+ table.set(name, i, null);
88
+ continue;
89
+ }
90
+ const canonical = grok.chem.convert(smile, DG.chem.Notation.Unknown, DG.chem.Notation.Smiles);
91
+ const resDf: DG.DataFrame = await grok.data.query('Chembl:ChemblMolregNoBySmiles', {smiles: canonical});
92
+ const res: number = resDf.getCol('molregno').toList()[0];
93
+ table.set(name, i, res);
94
+ }
95
+ return table;
96
+ }
97
+ ```
98
+
99
+ This function will go through every molecule in the dataframe, convert them to canonical smiles and call the query from Chembl database, that will retrieve the molregno number. The result will be added as a new column to the dataframe. If this function is defined in the `Chembl` package, after building and deploying it to stand, it will be automatically added to the compute functions list in HitDesign.
100
+
101
+ ** Submit functions **
102
+
103
+ Submit functions are used to save or submit the filtered and computed dataset. This could include saving to a private database or additional calculations. Submit functions are defined in the same way as compute functions, but they are tagged with `HitTriageSubmitFunction` tag. The function should accept only two inputs, `Dataframe` `df` and `String` `molecules`, which are the resulting dataframe and name of molecules column respectively. For example, we can create a function that saves the filtered and computed dataset to a database:
104
+
105
+ ```
106
+ //name: Sample File Submit
107
+ //tags: HitTriageSubmitFunction
108
+ //input: dataframe df [dataframe]
109
+ //input: string molecules [molecules column name]
110
+ export async function demoFileSubmit(df: DG.DataFrame, molecules: string): Promise<void> {
111
+ const smiles = df.getCol(molecules).toList();
112
+ myCustomDatabase.add(smiles) // template function which could for example save the smiles to a database
113
+ }
114
+ ```
package/README_HT.md ADDED
@@ -0,0 +1,63 @@
1
+ # HitTriage
2
+
3
+ HitTriage is a dynamic application designed for chemists and biologists to streamline the process of selecting molecular hits. It facilitates collaboration by allowing users to load datasets, calculate molecular properties, filter based on these properties or substructure search, select hits, save campaigns, and share their work with others. The application is built around templates and campaigns, providing a structured yet flexible approach to hit triage process.
4
+
5
+ ## Templates
6
+
7
+ Templates in HitTriage contain essential configurations for conducting a campaign. template configuration includes:
8
+
9
+ - **Name** : Identifies the template.
10
+
11
+ - **Campaign Prefix** : A code used as a prefix for campaign names (e.g., TMP-1, TMP-2).
12
+
13
+ - **Data Ingestion Settings** : Controls how molecular data is ingested into the template. Users can choose between file upload or a query option. For the query, HitTriage searches for functions in any Datagrok package tagged with `HitTriageDataSource`. For example:
14
+
15
+ ```//name: Demo File Ingestion
16
+ //input: int numberOfMolecules [Molecules count]
17
+ //tags: HitTriageDataSource
18
+ //output: dataframe result
19
+ export async function demoFileIngest(numberOfMolecules: number): Promise<DG.DataFrame> {
20
+ const df = grok.data.demo.molecules(numberOfMolecules);
21
+ df.name = 'Variable Molecules number';
22
+ return df;
23
+ }
24
+ ```
25
+ The application will detect that the function requeires an input parameter and will prompt the user to provide it in campaigns form. The function must return a dataframe with a column containing molecules
26
+
27
+ - **Additional fields** : Users can configure additional fields for the template, which will be prompted for input during campaign creation. These fields include name, type, and whether they are required or not. For example, additional field for a campaign can be a target protein name, Head scientist name, deadlile, etc.
28
+
29
+ - **Compute functions** : HitTriage aggregates compute functions tagged with `HitTriageFunction` from Datagrok packages. Users can select from these functions to perform calculations (e.g., mass, solubility, mutagenicity, partial charges, toxicity risks, etc.) on the dataset.
30
+
31
+ - **Submit function** : Users can define custom submit functions (tagged with `HitTriageSubmitFunction`) to further process or save the filtered and computed dataset. This could include saving to a private database or additional calculations.
32
+
33
+ ![template](https://datagrok.ai/help/uploads/hittriage/files/images/template.png)
34
+
35
+ ## Campaigns
36
+
37
+ Campaigns are built based on templates and encompass the actual hit triage process.
38
+
39
+ - **Creation** : Users select a template, fill out additional information and data source, and start the campaign.
40
+
41
+ - **Collaboration** : Campaigns are automatically shared. Users can copy and share URLs for seamless collaboration.
42
+
43
+ - **Functionality**: Once a campaign starts, you can add extra calculated columns, apply changes, fileter, save or submit the campaign.
44
+
45
+ ![template](https://datagrok.ai/help/uploads/hittriage/files/images/campaign.png)
46
+
47
+ ## Getting started
48
+
49
+ Users can continue ongoing campaigns either directly by a link or by selecting it from the campaigns table.
50
+
51
+ ![template](https://datagrok.ai/help/uploads/hittriage/files/images/HT_Continue_campaign.gif)
52
+
53
+ Users can create a new template by clicking on the `New Template` button in the `Templates` dropdown.
54
+
55
+ ![template](https://datagrok.ai/help/uploads/hittriage/files/images/HT_create_template.gif)
56
+
57
+ Users can start a new campaign by choosing a template and filling out the required information.
58
+
59
+ ![template](https://datagrok.ai/help/uploads/hittriage/files/images/HT_create_campaign.gif)
60
+
61
+ After the campaign starts, users can filter, modify or add viewers to the campaign and then save them. once saved, reloading the campaign will restore the saved state.
62
+
63
+ ![template](https://datagrok.ai/help/uploads/hittriage/files/images/HT_save_campaign.gif)
package/README_OLD.md ADDED
@@ -0,0 +1,130 @@
1
+ # HitTriage
2
+
3
+ HitTriage helps chemists assess the quality of hits and decide which compounds should make it to the next stage. It does
4
+ it in a managed, reproducible manner, with the triage template consisting of separate steps.
5
+
6
+ ![hit-triage-workflow](images/hit-triage-workflow.gif)
7
+
8
+ Technically, HitTriage is a [package](https://datagrok.ai/help/develop/#packages)
9
+ for the [Datagrok](https://datagrok.ai) platform that contains the the `HitTriage` application. There are multiple ways
10
+ to start it:
11
+
12
+ * Open the `Apps` pane and double-click on the `HitTriage` app
13
+ * Open it via the direct link: [https://public.datagrok.ai/apps/HitTriage](https://public.datagrok.ai/apps/HitTriage)
14
+
15
+ There are two outcomes for each project:
16
+
17
+ 1. Compounds that proceed to the next steps
18
+ 2. Rules used to filter out compounds
19
+
20
+ ## Project Template
21
+
22
+ Project template defines the structure associated with the following:
23
+
24
+ * Data Ingestion
25
+ * Data query + pre-processing
26
+ * Data Expansion
27
+ * Calculated Properties
28
+ * Data from External Sources
29
+ * Property Filters
30
+ * Outcome Report Format
31
+ * Actions and Triggers (notifications, etc)
32
+
33
+ The project template is structured and persisted in a way that allows capturing of decision and "replaying" the whole
34
+ pipeline on demand, should any step change and new source data appear.
35
+
36
+ ## Data Access
37
+
38
+ Datagrok's built-in [data query](../../help/access/access.md#data-query) framework is used as a foundation for data access.
39
+ Out-of-the box, it provides the following capabilities that are relevant to this project:
40
+
41
+ 1. Ability to access any data source (db, files, web service) efficiently
42
+ 1. Managed connection
43
+ 2. Parameterization
44
+ 3. Reproducibility
45
+ 4. Audit and data lineage
46
+
47
+ ## Data Expansion
48
+
49
+ During the data expansion step, the system brings in additional information necessary to make a decision on the
50
+ compound. Depending on the nature of this information, it would be either calculated, or retrieved from external
51
+ sources.
52
+
53
+ For calculated data, Datagrok's functions framework is used. It allows to define operations (such as computing RDKit
54
+ descriptors) that would be executed on the set of molecules.
55
+
56
+ For retrieving additional information from external sources, the system uses
57
+ [parameterized queries](../../help/access/access.md#data-query).
58
+
59
+ ## Data Storage
60
+
61
+ The data is stored in the Postgres database. RDKit cartridge is used for efficient searches. Templates are stored in the
62
+ same database.
63
+
64
+ ## User Interactions
65
+
66
+ Users would use the built-in Datagrok facilities for filtering that allow interactive filtering for both compounds and
67
+ calculated properties. The UI would look like that:
68
+
69
+ ![hit-triage-filtering](images/hit-triage-filtering.png)
70
+
71
+ Users will be able to filter out compounds manually, with an optional explanation.
72
+
73
+ Once the filters are setup, a user clicks the "Submit" button, at which point both hits and decisions get stored in the
74
+ database, a report is generated, and a notification is sent to the project team.
75
+
76
+ ## Capturing Results
77
+
78
+ There are two kinds of results: hits and decisions. Both are stored in the database.
79
+
80
+ ## Advanced Analytics
81
+
82
+ The following HitTriage-related advanced analytics functionality is available out-of-the-box:
83
+
84
+ * Structure rendering (RDKit or OpenChemLib)
85
+ * Substructure search (either server-side or client-side)
86
+ * Interactive data exploration
87
+ * Clustering
88
+ * Property Calculators
89
+ * Chemical Space Exploration
90
+ * Dimensionality Reduction (t-SNE, SPE)
91
+ * Multivariate Analysis
92
+
93
+ In addition, the solution takes advantage of the built-in data augmentation system. Whenever a user clicks on a
94
+ structure, the relevant information (assays, projects, dose-response curves, etc)
95
+ gets shown in the context panel on the right.
96
+
97
+ ## Visualization and Reporting Outcomes
98
+
99
+ * Built-in [viewers](../../help/visualize/viewers/viewers.md)
100
+ * Export to Excel / PDF
101
+ * Share outcomes as URLs
102
+
103
+ ## Security and Privileges
104
+
105
+ Datagrok's built-in [privileges system](https://datagrok.ai/help/govern/security)
106
+ is used for authentication and authorization within HitTriage. With some app-specific customizations, it allows to
107
+
108
+ * Define groups and associate them with privileges for objects (HitTriage projects, templates, etc)
109
+ and corresponding actions (create, delete, submit, etc)
110
+
111
+ ## Notifications and Statuses
112
+
113
+ In the context of HitTriage, the built-in notification system is used for the following:
114
+
115
+ * Requests for action (review, sign-off, etc)
116
+ * Requests for privileges and group memberships (routed to group admins)
117
+
118
+ Each notification
119
+
120
+ ## External APIs, integration and extension points
121
+
122
+ While the system fit for the purpose of hit triage, it is also designed in a way that allows to easily customize it in
123
+ order to integrate with different systems and processes within enterprises. Here are some of the integration and
124
+ extension points:
125
+
126
+ * Postgres DB: could be directly accessed for integration purposes
127
+ * Data Ingestion - ability to define company-specific data ingestion routines
128
+ * Data Expansion - ability to define custom calculations (including Python/RDKit, R, etc)
129
+ * Datagrok REST API - programmatically access exposed functions
130
+ * Datagrok events: ability to customize app behavior (potentially with other packages)
@@ -0,0 +1,98 @@
1
+ .grok-hit-triage-view .d4-grid {
2
+ width: initial !important;
3
+ height: initial !important;
4
+ }
5
+
6
+ .hit-triage-compute-dialog-pane-header {
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: end;
10
+ }
11
+
12
+ .hit-triage-compute-dialog-host>.d4-tab-host.d4-tab-vertical>.d4-tab-header-stripe>.d4-tab-header.hit-triage-compute-dialog-pane-header {
13
+ border: none;
14
+ border-left: 4px solid transparent;
15
+ border-radius: 1px;
16
+ padding: 4px 8px;
17
+ min-height: 28px;
18
+ justify-content: flex-end;
19
+ flex-direction: row-reverse;
20
+ }
21
+
22
+ .hit-triage-compute-dialog-host>.d4-tab-host.d4-tab-vertical>.d4-tab-header-stripe>.d4-tab-header.hit-triage-compute-dialog-pane-header.selected {
23
+ border-left: 4px solid var(--blue-1);
24
+ background-color: #f2f2f5;
25
+ }
26
+
27
+ .hit-triage-compute-dialog-host>.d4-tab-host.d4-tab-vertical>.d4-tab-header-stripe>.d4-tab-header.hit-triage-compute-dialog-pane-header>span {
28
+ padding: 0 4px;
29
+ }
30
+
31
+ table.hit-triage-table {
32
+ margin: 10px;
33
+ width: calc(100% - 20px);
34
+ }
35
+
36
+ .hit-triage-table-container {
37
+ max-width: 600px;
38
+ max-height: 500px;
39
+ overflow-y: scroll;
40
+ }
41
+
42
+ .hit-triage-error-div {
43
+ color: red;
44
+ text-align: start;
45
+ }
46
+
47
+ .mx-5 {
48
+ margin-left: 5px;
49
+ margin-right: 5px;
50
+ }
51
+
52
+ .hit-triage-new-template-functions-input > .ui-box {
53
+ height: unset !important;
54
+ }
55
+
56
+ .hit-triage-new-template-functions-input {
57
+ max-height: 200px;
58
+ max-width: unset !important;
59
+ overflow-y: scroll;
60
+ }
61
+
62
+
63
+ .hit-triage-new-template-functions-input > .d4-tab-host {
64
+ width: 100% !important;
65
+ }
66
+
67
+ .hit-triage-compute-dialog-host {
68
+ max-height: 550px;
69
+ max-width: 500px;
70
+ }
71
+
72
+ .hit-triage-compute-dialog-descriptors-group {
73
+ margin-left: 16px;
74
+ }
75
+
76
+ .oy-scroll {
77
+ overflow-y: scroll;
78
+ }
79
+
80
+ .d4-ribbon-name .ui-breadcrumbs {
81
+ overflow: hidden;
82
+ white-space: nowrap;
83
+ text-overflow: ellipsis;
84
+ flex-wrap: nowrap;
85
+ padding: 0;
86
+ }
87
+
88
+ .d4-ribbon-name .ui-breadcrumbs i {
89
+ padding: 0 6px;
90
+ font-size: 10px;
91
+ font-weight: bold;
92
+ }
93
+
94
+ .d4-ribbon-name .ui-breadcrumbs-element:first-child {
95
+ white-space: nowrap;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ }