@cosla/sensemaking-web-ui 1.0.4 → 1.0.5

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.
@@ -1,34 +1,142 @@
1
1
  [
2
2
  {
3
- "id": "0",
4
- "text": "Comment text",
3
+ "id": "item_24",
4
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
5
5
  "votes": {
6
- "Group-1": {
7
- "agreeCount": 0,
8
- "disagreeCount": 0,
9
- "passCount": 0
10
- },
11
- "Group-2": {
12
- "agreeCount": 0,
13
- "disagreeCount": 0,
14
- "passCount": 0
15
- },
16
- "Group-none": {
17
- "agreeCount": 0,
18
- "disagreeCount": 0,
19
- "passCount": 0
20
- }
6
+ "agreeCount": 1,
7
+ "disagreeCount": 0,
8
+ "passCount": 0
21
9
  },
22
- "topics": "Topic:Subtopic",
10
+ "topics": "Placeholder Content:Generic Content",
23
11
  "passRate": 0,
24
- "agreeRate": 0,
12
+ "agreeRate": 1,
25
13
  "disagreeRate": 0,
26
- "isHighAlignment": true,
27
- "highAlignmentScore": 0,
14
+ "isHighAlignment": false,
15
+ "highAlignmentScore": 1,
28
16
  "isLowAlignment": false,
29
17
  "lowAlignmentScore": 0,
30
18
  "isHighUncertainty": false,
31
19
  "highUncertaintyScore": 0,
32
- "isFilteredOut": false
20
+ "isFilteredOut": true
21
+ },
22
+ {
23
+ "id": "item_51",
24
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
25
+ "votes": {
26
+ "agreeCount": 1,
27
+ "disagreeCount": 0,
28
+ "passCount": 0
29
+ },
30
+ "topics": "Placeholder Content:Generic Content",
31
+ "passRate": 0,
32
+ "agreeRate": 1,
33
+ "disagreeRate": 0,
34
+ "isHighAlignment": false,
35
+ "highAlignmentScore": 1,
36
+ "isLowAlignment": false,
37
+ "lowAlignmentScore": 0,
38
+ "isHighUncertainty": false,
39
+ "highUncertaintyScore": 0,
40
+ "isFilteredOut": true
41
+ },
42
+ {
43
+ "id": "item_54",
44
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
45
+ "votes": {
46
+ "agreeCount": 1,
47
+ "disagreeCount": 0,
48
+ "passCount": 0
49
+ },
50
+ "topics": "Placeholder Content:Generic Content",
51
+ "passRate": 0,
52
+ "agreeRate": 1,
53
+ "disagreeRate": 0,
54
+ "isHighAlignment": false,
55
+ "highAlignmentScore": 1,
56
+ "isLowAlignment": false,
57
+ "lowAlignmentScore": 0,
58
+ "isHighUncertainty": false,
59
+ "highUncertaintyScore": 0,
60
+ "isFilteredOut": true
61
+ },
62
+ {
63
+ "id": "item_59",
64
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
65
+ "votes": {
66
+ "agreeCount": 1,
67
+ "disagreeCount": 0,
68
+ "passCount": 0
69
+ },
70
+ "topics": "Placeholder Content:Generic Content",
71
+ "passRate": 0,
72
+ "agreeRate": 1,
73
+ "disagreeRate": 0,
74
+ "isHighAlignment": false,
75
+ "highAlignmentScore": 1,
76
+ "isLowAlignment": false,
77
+ "lowAlignmentScore": 0,
78
+ "isHighUncertainty": false,
79
+ "highUncertaintyScore": 0,
80
+ "isFilteredOut": true
81
+ },
82
+ {
83
+ "id": "item_60",
84
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
85
+ "votes": {
86
+ "agreeCount": 1,
87
+ "disagreeCount": 0,
88
+ "passCount": 0
89
+ },
90
+ "topics": "Placeholder Content:Generic Content",
91
+ "passRate": 0,
92
+ "agreeRate": 1,
93
+ "disagreeRate": 0,
94
+ "isHighAlignment": false,
95
+ "highAlignmentScore": 1,
96
+ "isLowAlignment": false,
97
+ "lowAlignmentScore": 0,
98
+ "isHighUncertainty": false,
99
+ "highUncertaintyScore": 0,
100
+ "isFilteredOut": true
101
+ },
102
+ {
103
+ "id": "item_65",
104
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
105
+ "votes": {
106
+ "agreeCount": 1,
107
+ "disagreeCount": 0,
108
+ "passCount": 0
109
+ },
110
+ "topics": "Placeholder Content:Generic Content",
111
+ "passRate": 0,
112
+ "agreeRate": 1,
113
+ "disagreeRate": 0,
114
+ "isHighAlignment": false,
115
+ "highAlignmentScore": 1,
116
+ "isLowAlignment": false,
117
+ "lowAlignmentScore": 0,
118
+ "isHighUncertainty": false,
119
+ "highUncertaintyScore": 0,
120
+ "isFilteredOut": true
121
+ },
122
+ {
123
+ "id": "item_92",
124
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
125
+ "votes": {
126
+ "agreeCount": 1,
127
+ "disagreeCount": 0,
128
+ "passCount": 0
129
+ },
130
+ "topics": "Placeholder Content:Generic Content",
131
+ "passRate": 0,
132
+ "agreeRate": 1,
133
+ "disagreeRate": 0,
134
+ "isHighAlignment": false,
135
+ "highAlignmentScore": 1,
136
+ "isLowAlignment": false,
137
+ "lowAlignmentScore": 0,
138
+ "isHighUncertainty": false,
139
+ "highUncertaintyScore": 0,
140
+ "isFilteredOut": true
33
141
  }
34
- ]
142
+ ]
@@ -1,3 +1,3 @@
1
1
  {
2
- "title": "My built report"
3
- }
2
+ "title": "My Titlez"
3
+ }
package/data/summary.json CHANGED
@@ -1,9 +1,202 @@
1
1
  {
2
2
  "contents": [
3
+ {
4
+ "title": "## Introduction",
5
+ "text": "This report summarizes the results of public input, encompassing:\n * __7 statements__\n * __7 votes__\n * 1 topics\n * 1 subtopics\n\nAll voters were anonymous."
6
+ },
7
+ {
8
+ "title": "## Overview",
9
+ "text": "Below is a high level overview of the topics discussed in the conversation, as well as the percentage of statements categorized under each topic. Note that the percentages may add up to greater than 100% when statements fall under more than one topic.\n\n* **Placeholder Content (100%):** The conversation on this topic revealed that all submitted statements were identical, generic placeholder text, specifically \"Title for locale en\" and \"Description for locale en,\" indicating a repetitive structure and a complete absence of concrete details. The consistent reference to \"locale en\" within these statements suggests a system designed for internationalization."
10
+ },
11
+ {
12
+ "title": "## Top 1 Most Discussed Subtopics",
13
+ "text": "1 subtopics of discussion emerged. These 1 subtopics had the most statements submitted.",
14
+ "subContents": [
15
+ {
16
+ "title": "### 1. Generic Content (7 statements)",
17
+ "text": "",
18
+ "subContents": [
19
+ {
20
+ "title": "Prominent themes were:",
21
+ "text": "* Generic content\n* Placeholder text"
22
+ }
23
+ ]
24
+ }
25
+ ]
26
+ },
3
27
  {
4
28
  "title": "## Topics",
5
- "text": "",
6
- "subContents": []
29
+ "text": "From the statements submitted, 1 high level topics were identified, as well as 1 subtopics. Based on voting patterns both points of common ground as well as differences of opinion have been identified and are described below.\n",
30
+ "subContents": [
31
+ {
32
+ "title": "### Placeholder Content (7 statements)",
33
+ "text": "This topic included 1 subtopic, comprising a total of 7 statements.",
34
+ "subContents": [
35
+ {
36
+ "title": "#### Generic Content (7 statements)",
37
+ "text": "This subtopic had high alignment compared to the other subtopics.",
38
+ "subContents": [
39
+ {
40
+ "title": "Prominent themes were: ",
41
+ "text": "* **Generic Placeholder Content**: All statements uniformly present generic placeholder text, specifically \"Title for locale en\" and \"Description for locale en\".\n* **Identical Statement Repetition**: Every single statement provided is an exact duplicate of the others, indicating a repetitive structure or placeholder data.\n* **Absence Of Specific Information**: The statements conspicuously lack any concrete details, proposals, or substantive content beyond their placeholder labels.\n* **Locale-Specific Labeling**: Each statement explicitly references \"locale en\" for both its title and description, suggesting a system designed for internationalization or localization."
42
+ },
43
+ {
44
+ "title": "Common ground: ",
45
+ "text": "No statements met the thresholds necessary to be considered as a point of common ground (at least 20 votes, and at least 70% agreement).",
46
+ "citations": []
47
+ },
48
+ {
49
+ "title": "Differences of opinion: ",
50
+ "text": "No statements met the thresholds necessary to be considered as a significant difference of opinion (at least 20 votes, and both an agreement rate and disagree rate between 40%% and 60%%).",
51
+ "citations": []
52
+ }
53
+ ]
54
+ }
55
+ ]
56
+ }
57
+ ]
58
+ }
59
+ ],
60
+ "comments": [
61
+ {
62
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
63
+ "id": "item_24",
64
+ "voteInfo": {
65
+ "agreeCount": 1,
66
+ "disagreeCount": 0,
67
+ "passCount": 0
68
+ },
69
+ "topics": [
70
+ {
71
+ "name": "Placeholder Content",
72
+ "subtopics": [
73
+ {
74
+ "name": "Generic Content",
75
+ "subtopics": []
76
+ }
77
+ ]
78
+ }
79
+ ]
80
+ },
81
+ {
82
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
83
+ "id": "item_51",
84
+ "voteInfo": {
85
+ "agreeCount": 1,
86
+ "disagreeCount": 0,
87
+ "passCount": 0
88
+ },
89
+ "topics": [
90
+ {
91
+ "name": "Placeholder Content",
92
+ "subtopics": [
93
+ {
94
+ "name": "Generic Content",
95
+ "subtopics": []
96
+ }
97
+ ]
98
+ }
99
+ ]
100
+ },
101
+ {
102
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
103
+ "id": "item_54",
104
+ "voteInfo": {
105
+ "agreeCount": 1,
106
+ "disagreeCount": 0,
107
+ "passCount": 0
108
+ },
109
+ "topics": [
110
+ {
111
+ "name": "Placeholder Content",
112
+ "subtopics": [
113
+ {
114
+ "name": "Generic Content",
115
+ "subtopics": []
116
+ }
117
+ ]
118
+ }
119
+ ]
120
+ },
121
+ {
122
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
123
+ "id": "item_59",
124
+ "voteInfo": {
125
+ "agreeCount": 1,
126
+ "disagreeCount": 0,
127
+ "passCount": 0
128
+ },
129
+ "topics": [
130
+ {
131
+ "name": "Placeholder Content",
132
+ "subtopics": [
133
+ {
134
+ "name": "Generic Content",
135
+ "subtopics": []
136
+ }
137
+ ]
138
+ }
139
+ ]
140
+ },
141
+ {
142
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
143
+ "id": "item_60",
144
+ "voteInfo": {
145
+ "agreeCount": 1,
146
+ "disagreeCount": 0,
147
+ "passCount": 0
148
+ },
149
+ "topics": [
150
+ {
151
+ "name": "Placeholder Content",
152
+ "subtopics": [
153
+ {
154
+ "name": "Generic Content",
155
+ "subtopics": []
156
+ }
157
+ ]
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
163
+ "id": "item_65",
164
+ "voteInfo": {
165
+ "agreeCount": 1,
166
+ "disagreeCount": 0,
167
+ "passCount": 0
168
+ },
169
+ "topics": [
170
+ {
171
+ "name": "Placeholder Content",
172
+ "subtopics": [
173
+ {
174
+ "name": "Generic Content",
175
+ "subtopics": []
176
+ }
177
+ ]
178
+ }
179
+ ]
180
+ },
181
+ {
182
+ "text": "Title for locale en\n\n<p>Description for locale en</p>",
183
+ "id": "item_92",
184
+ "voteInfo": {
185
+ "agreeCount": 1,
186
+ "disagreeCount": 0,
187
+ "passCount": 0
188
+ },
189
+ "topics": [
190
+ {
191
+ "name": "Placeholder Content",
192
+ "subtopics": [
193
+ {
194
+ "name": "Generic Content",
195
+ "subtopics": []
196
+ }
197
+ ]
198
+ }
199
+ ]
7
200
  }
8
201
  ]
9
- }
202
+ }
@@ -1,18 +1,18 @@
1
1
  [
2
2
  {
3
- "name": "Topic 1",
4
- "commentCount": 0,
5
- "voteCount": 0,
6
- "relativeAlignment": "moderately high alignment",
3
+ "name": "Placeholder Content",
4
+ "commentCount": 7,
5
+ "voteCount": 7,
6
+ "relativeAlignment": "high alignment",
7
7
  "relativeEngagement": "high engagement",
8
8
  "subtopicStats": [
9
9
  {
10
- "name": "Subtopic 1",
11
- "commentCount": 0,
12
- "voteCount": 0,
13
- "relativeAlignment": "moderately low alignment",
10
+ "name": "Generic Content",
11
+ "commentCount": 7,
12
+ "voteCount": 7,
13
+ "relativeAlignment": "high alignment",
14
14
  "relativeEngagement": "high engagement"
15
15
  }
16
16
  ]
17
17
  }
18
- ]
18
+ ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosla/sensemaking-web-ui",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Provides interactive visualizations and report from sensemaking-tools output. Fork of Jigsaw's sensemaking-tools web-ui (https://github.com/Jigsaw-Code/sensemaking-tools).",
5
5
  "homepage": "https://github.com/CoslaDigital/sensemaking-tools#readme",
6
6
  "scripts": {
@@ -50,33 +50,32 @@
50
50
  "access": "public"
51
51
  },
52
52
  "dependencies": {
53
- "@angular/animations": "18.2.13",
54
- "@angular/cdk": "18.2.13",
55
- "@angular/common": "18.2.13",
56
- "@angular/compiler": "18.2.13",
57
- "@angular/core": "18.2.13",
58
- "@angular/forms": "18.2.13",
59
- "@angular/material": "18.2.13",
60
- "@angular/platform-browser": "18.2.13",
61
- "@angular/platform-browser-dynamic": "18.2.13",
62
- "@angular/platform-server": "18.2.13",
63
- "@angular/router": "18.2.13",
64
- "@angular/ssr": "18.2.13",
53
+ "@angular/animations": "19.2.18",
54
+ "@angular/cdk": "^19.2.19",
55
+ "@angular/common": "19.2.18",
56
+ "@angular/compiler": "19.2.18",
57
+ "@angular/core": "19.2.18",
58
+ "@angular/forms": "19.2.18",
59
+ "@angular/material": "^19.2.19",
60
+ "@angular/platform-browser": "19.2.18",
61
+ "@angular/platform-browser-dynamic": "19.2.18",
62
+ "@angular/platform-server": "19.2.18",
63
+ "@angular/router": "19.2.18",
64
+ "@angular/ssr": "19.2.19",
65
65
  "@conversationai/sensemaker-visualizations": "^1.0.46",
66
66
  "@sinclair/typebox": "^0.34.27",
67
67
  "esbuild": "^0.23.0",
68
68
  "express": "^4.18.2",
69
- "jsdom": "^26.1.0",
70
- "ngx-markdown": "^18.0.0",
69
+ "ngx-markdown": "^19.1.1",
71
70
  "papaparse": "^5.4.1",
72
71
  "rxjs": "~7.8.0",
73
72
  "tslib": "^2.3.0",
74
- "zone.js": "~0.14.3"
73
+ "zone.js": "~0.15.0"
75
74
  },
76
75
  "devDependencies": {
77
- "@angular-devkit/build-angular": "18.2.13",
78
- "@angular/cli": "18.2.13",
79
- "@angular/compiler-cli": "18.2.13",
76
+ "@angular-devkit/build-angular": "19.2.19",
77
+ "@angular/cli": "19.2.19",
78
+ "@angular/compiler-cli": "19.2.18",
80
79
  "@types/express": "^4.17.17",
81
80
  "@types/jasmine": "~5.1.0",
82
81
  "@types/node": "^18.18.0",
package/server.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { APP_BASE_HREF } from '@angular/common';
2
- import { CommonEngine } from '@angular/ssr';
2
+ import { CommonEngine } from '@angular/ssr/node';
3
3
  import express from 'express';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import { dirname, join, resolve } from 'node:path';
@@ -3,13 +3,12 @@ import { MatIconRegistry } from "@angular/material/icon";
3
3
  import { RouterOutlet } from '@angular/router';
4
4
 
5
5
  @Component({
6
- selector: 'app-root',
7
- standalone: true,
8
- imports: [
9
- RouterOutlet,
10
- ],
11
- templateUrl: './app.component.html',
12
- styleUrl: './app.component.scss',
6
+ selector: 'app-root',
7
+ imports: [
8
+ RouterOutlet,
9
+ ],
10
+ templateUrl: './app.component.html',
11
+ styleUrl: './app.component.scss'
13
12
  })
14
13
  export class AppComponent {
15
14
  constructor(private matIconRegistry: MatIconRegistry) {
@@ -14,6 +14,5 @@ export const appConfig: ApplicationConfig = {
14
14
  provideRouter(routes),
15
15
  provideClientHydration(),
16
16
  provideAnimationsAsync(),
17
- provideAnimationsAsync(),
18
17
  ],
19
18
  };
@@ -12,16 +12,15 @@ type DialogData = {
12
12
  };
13
13
 
14
14
  @Component({
15
- selector: 'app-dialog',
16
- standalone: true,
17
- imports: [
18
- CommonModule,
19
- MatButtonModule,
20
- MatDialogModule,
21
- MatIconModule,
22
- ],
23
- templateUrl: './dialog.component.html',
24
- styleUrl: './dialog.component.scss'
15
+ selector: 'app-dialog',
16
+ imports: [
17
+ CommonModule,
18
+ MatButtonModule,
19
+ MatDialogModule,
20
+ MatIconModule,
21
+ ],
22
+ templateUrl: './dialog.component.html',
23
+ styleUrl: './dialog.component.scss'
25
24
  })
26
25
  export class DialogComponent {
27
26
  constructor(
@@ -10,11 +10,10 @@ import {
10
10
  import '@conversationai/sensemaker-visualizations';
11
11
 
12
12
  @Component({
13
- selector: 'app-sensemaking-chart-wrapper',
14
- standalone: true,
15
- imports: [CommonModule],
16
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
17
- template: `
13
+ selector: 'app-sensemaking-chart-wrapper',
14
+ imports: [CommonModule],
15
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
16
+ template: `
18
17
  <div class="chart-container">
19
18
  <sensemaker-chart
20
19
  #sensemakingChartEl
@@ -26,14 +25,14 @@ import '@conversationai/sensemaker-visualizations';
26
25
  ></sensemaker-chart>
27
26
  </div>
28
27
  `,
29
- styles: [
30
- `
28
+ styles: [
29
+ `
31
30
  .chart-container {
32
31
  width: 100%;
33
32
  height: 100%;
34
33
  }
35
34
  `,
36
- ],
35
+ ]
37
36
  })
38
37
  export class SensemakingChartWrapperComponent implements AfterViewInit {
39
38
  @ViewChild('sensemakingChartEl') chartElementRef!: ElementRef<
@@ -6,15 +6,14 @@ import { CustomTooltipDirective } from "../../directives/custom-tooltip/custom-t
6
6
  import { VoteGroup, Statement } from "../../models/report.model";
7
7
 
8
8
  @Component({
9
- selector: 'app-statement-card',
10
- standalone: true,
11
- imports: [
12
- CommonModule,
13
- CustomTooltipDirective,
14
- OverlayModule,
15
- ],
16
- templateUrl: './statement-card.component.html',
17
- styleUrl: './statement-card.component.scss'
9
+ selector: 'app-statement-card',
10
+ imports: [
11
+ CommonModule,
12
+ CustomTooltipDirective,
13
+ OverlayModule,
14
+ ],
15
+ templateUrl: './statement-card.component.html',
16
+ styleUrl: './statement-card.component.scss'
18
17
  })
19
18
  export class StatementCardComponent implements OnInit {
20
19
  @Input() data?: Statement;
@@ -6,10 +6,11 @@ import { CustomTooltipDirective } from './custom-tooltip.directive';
6
6
 
7
7
  // test host component
8
8
  @Component({
9
- template: `
9
+ template: `
10
10
  <div [customTooltip]="tooltipTemplate">Host element</div>
11
11
  <ng-template #tooltipTemplate>Tooltip content</ng-template>
12
12
  `,
13
+ standalone: false
13
14
  })
14
15
  class TestComponent {
15
16
  @ViewChild('tooltipTemplate') tooltipTemplate!: TemplateRef<any>;
@@ -65,25 +65,24 @@ importedTopicData.forEach((t: Topic) => {
65
65
  });
66
66
 
67
67
  @Component({
68
- selector: 'app-report',
69
- standalone: true,
70
- imports: [
71
- CommonModule,
72
- FormsModule,
73
- MarkdownModule,
74
- MatButtonModule,
75
- MatButtonToggleModule,
76
- MatDialogModule,
77
- MatExpansionModule,
78
- MatIconModule,
79
- MatSidenavModule,
80
- MatTooltipModule,
81
- SensemakingChartWrapperComponent,
82
- StatementCardComponent,
83
- ],
84
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
85
- templateUrl: './report.component.html',
86
- styleUrl: './report.component.scss'
68
+ selector: 'app-report',
69
+ imports: [
70
+ CommonModule,
71
+ FormsModule,
72
+ MarkdownModule,
73
+ MatButtonModule,
74
+ MatButtonToggleModule,
75
+ MatDialogModule,
76
+ MatExpansionModule,
77
+ MatIconModule,
78
+ MatSidenavModule,
79
+ MatTooltipModule,
80
+ SensemakingChartWrapperComponent,
81
+ StatementCardComponent,
82
+ ],
83
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
84
+ templateUrl: './report.component.html',
85
+ styleUrl: './report.component.scss'
87
86
  })
88
87
  export class ReportComponent {
89
88
  // data sources
@@ -1,7 +1,7 @@
1
- import { bootstrapApplication } from '@angular/platform-browser';
1
+ import { bootstrapApplication, BootstrapContext } from '@angular/platform-browser';
2
2
  import { AppComponent } from './app/app.component';
3
3
  import { config } from './app/app.config.server';
4
4
 
5
- const bootstrap = () => bootstrapApplication(AppComponent, config);
5
+ const bootstrap = (context: BootstrapContext) => bootstrapApplication(AppComponent, config, context);
6
6
 
7
7
  export default bootstrap;