Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
b4ce7bc
Add Administration link to user dropdown menu
sei-awelle Feb 27, 2026
1c45824
Add NICE Framework competency import and option list management
sei-awelle Feb 27, 2026
90a5487
Move search boxes into table headers for consistency
sei-awelle Feb 27, 2026
4754fd2
Add clickable link styling for data field option count
sei-awelle Feb 27, 2026
83c0afd
Merge branch 'main' into feature/nice-framework-import
sei-awelle Mar 2, 2026
0344ec5
Merge branch 'main' into feature/nice-framework-import
sei-awelle Mar 2, 2026
7b1219e
Merge branch 'main' into feature/nice-framework-import
sei-awelle Mar 2, 2026
f8a50c0
Fix alignment of data options in Edit Data Field dialog
sei-awelle Mar 2, 2026
b40d976
Merge branch 'main' into feature/nice-framework-import
sei-awelle Mar 12, 2026
fdd2283
Fix duplicate minWidth property in data field dialog
sei-awelle Mar 12, 2026
42a7333
Merge branch 'main' into feature/nice-framework-import
sei-awelle Mar 19, 2026
07958e8
Merge branch 'main' into feature/nice-framework-import
sei-awelle Mar 31, 2026
1e26b15
Merge branch 'main' into feature/nice-framework-import
sei-awelle Apr 1, 2026
58a5c3c
Improve data option dialogs and manage options UX
sei-awelle Apr 1, 2026
d2a1c00
Add dedicated competency options dialog with NICE Framework import
sei-awelle Apr 1, 2026
2007c06
Fix manage options dialog callbacks on data field list page
sei-awelle Apr 1, 2026
2a8e378
Improve option import dialog and manage dialogs
sei-awelle Apr 1, 2026
eefef7d
Add competency framework admin UI with CRUD dialogs
sei-awelle Apr 2, 2026
2820aef
Add competency data field support with framework management
sei-awelle Apr 2, 2026
51e25f4
Add DCWF XLSX import support and improve admin framework UI
sei-awelle Apr 2, 2026
1535341
Merge branch 'main' into feature/nice-framework-import
sei-awelle Apr 6, 2026
d225572
Fix admin sidebar overflow to match MSEL page pattern
sei-awelle Apr 6, 2026
fd6f2eb
Add competency framework CRUD, multi-format import, and relationship …
sei-awelle Apr 6, 2026
2f230c8
Add type filter, type column, and pagination to competency options di…
sei-awelle Apr 7, 2026
c404726
Add search, pagination, and expandable rows to proficiency scales page
sei-awelle Apr 9, 2026
086ef82
Improve competency frameworks admin page
sei-awelle Apr 9, 2026
95e7a48
Add MselCompetency data layer and LMT metadata to generated API
sei-awelle Apr 9, 2026
23daea3
Add LMT metadata fields and competency count to MSEL info page
sei-awelle Apr 9, 2026
27cb12e
Add Competencies tab to MSEL builder
sei-awelle Apr 9, 2026
e677500
Remove version display from admin sidebar
sei-awelle Apr 9, 2026
e39f39b
Add collapsible sidebar to admin container
sei-awelle Apr 9, 2026
e4af3df
Add inline related competency management, category filter, and scroll…
sei-awelle Apr 9, 2026
23ae5ca
Merge remote-tracking branch 'origin/main' into feature/nice-framewor…
sei-awelle Apr 9, 2026
0aa7db9
Rename LMT metadata labels and remove Language field from UI
sei-awelle Apr 9, 2026
2f15e71
Improve proficiency scales levels table layout
sei-awelle Apr 9, 2026
1eec58b
Fix DCWF XLSX import: add categories, fix shortNames, add taxonomies
sei-awelle Apr 9, 2026
b0f9fbc
Improve admin competency frameworks: full-width panels, category supp…
sei-awelle Apr 10, 2026
91cd821
Add context hints, alphabetical sorting, and layout fixes to admin co…
sei-awelle Apr 10, 2026
fb9151b
Redesign MSEL info page: expandable competencies, compact metadata la…
sei-awelle Apr 10, 2026
b609942
Add Metadata section title, tooltips on LMT fields, and align section…
sei-awelle Apr 10, 2026
c97a1ef
Merge remote-tracking branch 'origin/main' into feature/nice-framewor…
sei-awelle Apr 10, 2026
ab028ee
Add MSEL competencies tab with work role browser and team assignment
sei-awelle Apr 10, 2026
6b95409
Fix competencies page scrolling, add children pagination and remove c…
sei-awelle Apr 10, 2026
1f9a57e
Scope competency data field picker to MSEL pool
sei-awelle Apr 10, 2026
0b9705b
Replace competency search input with browseable dropdown select
sei-awelle Apr 10, 2026
c57c580
Save pending competency relationships immediately on add/remove
sei-awelle Apr 13, 2026
bb0f31a
Add competency deletion cascade, event count, and team propagation di…
sei-awelle Apr 13, 2026
7ded2f3
Improve confirm dialog width and competency removal message format
sei-awelle Apr 13, 2026
0b9cc3a
Merge branch 'main' into feature/nice-framework-import
sei-awelle Apr 13, 2026
4e4a31a
Add assessor view page, assessor-visible data field controls, and fir…
sei-awelle Apr 21, 2026
afdbb82
Merge remote-tracking branch 'origin/main' into feature/nice-framewor…
sei-awelle Apr 21, 2026
3b2eab7
Fix assessor view xAPI integration and add platform indicator
sei-awelle Apr 21, 2026
29fa813
Improve assessor view statement display and filtering
sei-awelle Apr 22, 2026
08fb465
Add move+group matching for xAPI statement distribution
sei-awelle Apr 22, 2026
22643c2
Merge remote-tracking branch 'origin/main' into feature/nice-framewor…
sei-awelle Apr 22, 2026
2f87785
Align xAPI evidence columns like a table
sei-awelle Apr 22, 2026
cc4b897
Add move/group header rows with hierarchical xAPI distribution
sei-awelle Apr 22, 2026
4e3d550
Merge branch 'main' into feature/nice-framework-import
sei-awelle Apr 23, 2026
1a6b5b8
Revert unnecessary flex layout on main-content container
sei-awelle Apr 23, 2026
2b2ddeb
Add team/source filters to move/group panels, fix statement duplication
sei-awelle Apr 23, 2026
3724f16
Make team/source filters independent per xAPI evidence section
sei-awelle Apr 23, 2026
50480e7
Move xAPI filters into per-section controls, simplify top bar
sei-awelle Apr 23, 2026
924cad6
Make Team, Source, and Verb all multi-select; auto-default Team from …
sei-awelle Apr 23, 2026
5186baa
Add dynamic data-field filters to assessor view top bar
sei-awelle Apr 23, 2026
efd5bd3
Add competency assessment panel to assessor view
sei-awelle Apr 23, 2026
fa80d6b
Add collapsible JSON sections to xAPI statement display
sei-awelle Apr 23, 2026
36a8635
Add move/group competency assessment and team-scoped filtering
sei-awelle Apr 23, 2026
dfa7ab7
Cache competency lookups to reduce change detection overhead
sei-awelle Apr 23, 2026
f2d9992
Match TLA MOM verb/type IRIs in assertion sync and show framework ver…
sei-awelle Apr 23, 2026
1f7a43b
Add extensions to XApiStatement object definition type
sei-awelle Apr 24, 2026
a9f8c9d
Add collapse/expand all controls to assessor view
sei-awelle Apr 24, 2026
60002d2
Remove per-move and per-group expand/collapse buttons, add disabled s…
sei-awelle Apr 24, 2026
210fdfb
Add role-based permissions for assessor page checkbox editing
sei-awelle Apr 24, 2026
55cbfa6
Fix checkbox editing on assessor page - only enable canEdit for check…
sei-awelle Apr 24, 2026
483f1cb
Fix checkbox state display and editing issues
sei-awelle Apr 24, 2026
bfe99b9
Add console logging to debug assessor page permissions
sei-awelle Apr 24, 2026
339b615
Add console logging for checkbox canEdit debugging
sei-awelle Apr 25, 2026
c9905bd
Add more extensive console logging for permission debugging
sei-awelle Apr 25, 2026
acd91fd
Fix TypeScript compilation errors - use permissionDataService and fix…
sei-awelle Apr 25, 2026
fd4786c
Pass canEditCheckboxes from home-app through msel to assessor-view
sei-awelle Apr 25, 2026
eeb0f8d
Add console logging to home-app and msel components for permission de…
sei-awelle Apr 25, 2026
15b2ea1
Fix import - SystemPermission is in generated API not permission.store
sei-awelle Apr 25, 2026
d7df381
Fix checkbox click event propagation and remove debug console logs
sei-awelle Apr 25, 2026
9bf72cd
Fix checkbox event propagation and add save handler
sei-awelle Apr 25, 2026
369b242
Fix duplicate search field in data-field-list component
sei-awelle Apr 25, 2026
423f33e
Move xAPI logging to UI components and fix assessor checkbox filter
sei-awelle Apr 27, 2026
9ffe020
Merge main into feature/nice-framework-import
sei-awelle Apr 30, 2026
d6dbfb4
Add competency UI improvements for assessor workflows
sei-awelle May 4, 2026
457b933
Merge main into feature/nice-framework-import
sei-awelle May 4, 2026
7e15c37
Reorder data field list columns and move display order number
sei-awelle May 4, 2026
96e8a4c
Add missing document markings
github-actions[bot] May 4, 2026
cc72f4b
Add framework delete dependency check UI
sei-awelle May 4, 2026
302194b
Add missing document markings
github-actions[bot] May 4, 2026
8d3dc0d
Check framework dependencies on page load, disable delete button if i…
sei-awelle May 4, 2026
0ec66e3
Add framework download button
sei-awelle May 4, 2026
4d76260
Fix TypeScript error: use lowercase competencies property
sei-awelle May 4, 2026
44a17c7
Fix API response property name casing to camelCase
sei-awelle May 4, 2026
4f87ae3
Remove debug console logs
sei-awelle May 4, 2026
5765e9b
Add CSS to keep action buttons on same row
sei-awelle May 4, 2026
9e36212
Fix framework version display in MSEL competencies dropdown
sei-awelle May 4, 2026
3068548
Move competency framework file parsing to client-side and improve imp…
sei-awelle May 5, 2026
c800bfa
Add missing document markings
github-actions[bot] May 5, 2026
84ab0b5
Remove xAPI debug console.log statements
sei-awelle May 6, 2026
33d78d5
Fix checkbox visibility and scrollbar issues in MSEL competencies
sei-awelle May 6, 2026
5263a8f
Add select all/remove all checkbox to work role browser
sei-awelle May 6, 2026
74a4b14
Fix horizontal scrollbar in browser children list
sei-awelle May 6, 2026
139464b
Fix swagger:gen-docker to use cross-platform environment variables
sei-awelle May 6, 2026
d0c9e33
Fix duplicate vertical scrollbar on competencies page
sei-awelle May 7, 2026
d500cdd
Fix duplicate scrollbar on competencies page
sei-awelle May 7, 2026
5ee1bfd
update package-lock.json
sei-tspencer May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 130 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"lint": "ESLINT_USE_FLAT_CONFIG=false eslint -c .eslintrc.js --ext .ts src/",
"e2e": "ng e2e",
"swagger:gen": "curl --insecure http://localhost:4300/swagger/v1/swagger.json --output swagger.json && node_modules/@openapitools/openapi-generator-cli/bin/openapi-generator generate -i ./swagger.json -g typescript-angular -o src/app/generated/blueprint-api --additional-properties ngVersion=21 --additional-properties useRxJS6=true --additional-properties modelPropertyNaming=original --type-mappings=DateTime=Date --skip-validate-spec",
"swagger:gen-docker": "docker run --rm -v \"$(pwd)\":/local openapitools/openapi-generator-cli:v7.15.0 generate -i http://host.docker.internal:4724/swagger/v1/swagger.json -g typescript-angular -o /local/src/app/generated/blueprint.api --additional-properties ngVersion=21 --additional-properties useRxJS6=true --additional-properties modelPropertyNaming=original --type-mappings=DateTime=Date --skip-validate-spec",
"swagger:gen-docker": "cross-env-shell docker run --rm -v $INIT_CWD:/local openapitools/openapi-generator-cli:v7.15.0 generate -i http://host.docker.internal:4724/swagger/v1/swagger.json -g typescript-angular -o /local/src/app/generated/blueprint.api --additional-properties ngVersion=21 --additional-properties useRxJS6=true --additional-properties modelPropertyNaming=original --type-mappings=DateTime=Date --skip-validate-spec",
"docker:init": "docker network create identity --driver=overlay",
"docker:stack": "npm run docker:stack:identity && npm run docker:stack:api",
"docker:stack:api": "docker stack deploy -c docker-compose.yml -c docker/compose/api.yml blueprint_stack",
Expand Down Expand Up @@ -59,10 +59,12 @@
"rxjs-compat": "^6.6.7",
"tslib": "^2.4.1",
"uuid": "^14.0.0",
"xlsx": "^0.18.5",
"zone.js": "~0.15.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "^21.2.1",
"cross-env": "^10.1.0",
"@angular-eslint/builder": "21.3.0",
"@angular-eslint/eslint-plugin": "21.3.0",
"@angular-eslint/eslint-plugin-template": "21.3.0",
Expand Down
6 changes: 6 additions & 0 deletions src/app/app-routing.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { JoinComponent } from './components/landing/join/join.component';
import { LaunchComponent } from './components/landing/launch/launch.component';
import { ManageComponent } from './components/landing/manage/manage.component';
import { StarterComponent } from './components/starter/starter.component';
import { AssessorPageComponent } from './components/assessor-page/assessor-page.component';
import { EventDetailPageComponent } from './components/event-detail-page/event-detail-page.component';
import { IntegrationInProgressGuard } from './services/integration-in-progress.guard';

Expand Down Expand Up @@ -50,6 +51,11 @@ export const ROUTES: Routes = [
component: StarterComponent,
canActivate: [ComnAuthGuardService],
},
{
path: 'assess',
component: AssessorPageComponent,
canActivate: [ComnAuthGuardService],
},
{
path: 'msel/:mselid/view',
component: MselViewComponent,
Expand Down
30 changes: 30 additions & 0 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,14 @@ import { AdminCatalogListComponent } from './components/admin/admin-catalog-list
import { AdminContainerComponent } from './components/admin/admin-container/admin-container.component';
import { AdminInjectTypesComponent } from './components/admin/admin-inject-types/admin-inject-types.component';
import { AdminInjectTypeEditDialogComponent } from './components/admin/admin-inject-type-edit-dialog/admin-inject-type-edit-dialog.component';
import { AdminCompetencyFrameworksComponent } from './components/admin/admin-competency-frameworks/admin-competency-frameworks.component';
import { AdminCompetencyFrameworkEditDialogComponent } from './components/admin/admin-competency-framework-edit-dialog/admin-competency-framework-edit-dialog.component';
import { AdminCompetencyEditDialogComponent } from './components/admin/admin-competency-edit-dialog/admin-competency-edit-dialog.component';
import { AdminCompetencyDetailDialogComponent } from './components/admin/admin-competency-detail-dialog/admin-competency-detail-dialog.component';
import { AdminProficiencyScaleEditDialogComponent } from './components/admin/admin-proficiency-scale-edit-dialog/admin-proficiency-scale-edit-dialog.component';
import { AdminProficiencyLevelEditDialogComponent } from './components/admin/admin-proficiency-level-edit-dialog/admin-proficiency-level-edit-dialog.component';
import { AdminCompetencyFrameworkImportDialogComponent } from './components/admin/admin-competency-framework-import-dialog/admin-competency-framework-import-dialog.component';
import { AdminProficiencyScalesComponent } from './components/admin/admin-proficiency-scales/admin-proficiency-scales.component';
import { AdminUnitsComponent } from './components/admin/admin-units/admin-units.component';
import { AdminUnitEditDialogComponent } from './components/admin/admin-unit-edit-dialog/admin-unit-edit-dialog.component';
import { AdminUnitUsersComponent } from './components/admin/admin-unit-users/admin-unit-users.component';
Expand All @@ -86,7 +94,11 @@ import { CiteDutyListComponent } from './components/cite-duty-list/cite-duty-lis
import { DashboardComponent } from './components/landing/dashboard/dashboard.component';
import { DataFieldEditDialogComponent } from './components/data-field-edit-dialog/data-field-edit-dialog.component';
import { DataFieldListComponent } from './components/data-field-list/data-field-list.component';
import { CompetencyOptionsDialogComponent } from './components/competency-options-dialog/competency-options-dialog.component';
import { TeamCompetencyPropagateDialogComponent } from './components/team-competency-propagate-dialog/team-competency-propagate-dialog.component';
import { DataOptionEditDialogComponent } from './components/data-option-edit-dialog/data-option-edit-dialog.component';
import { DataOptionImportDialogComponent } from './components/data-option-import-dialog/data-option-import-dialog.component';
import { DataOptionListDialogComponent } from './components/data-option-list-dialog/data-option-list-dialog.component';
import { HomeAppComponent } from './components/home-app/home-app.component';
import { InjectEditDialogComponent } from './components/inject-edit-dialog/inject-edit-dialog.component';
import { InjectListComponent } from './components/inject-list/inject-list.component';
Expand All @@ -104,6 +116,9 @@ import { MselInfoComponent } from './components/msel-info/msel-info.component';
import { IntegrationStatusComponent } from './components/integration-status/integration-status.component';
import { MselListComponent } from './components/msel-list/msel-list.component';
import { MselPageComponent } from './components/msel-page/msel-page.component';
import { MselCompetenciesComponent } from './components/msel-competencies/msel-competencies.component';
import { AssessorViewComponent } from './components/assessor-view/assessor-view.component';
import { AssessorPageComponent } from './components/assessor-page/assessor-page.component';
import { MselTeamsComponent } from './components/msel-teams/msel-teams.component';
import { MselViewComponent } from './components/msel-view/msel-view.component';
import { OrganizationEditDialogComponent } from './components/organization-edit-dialog/organization-edit-dialog.component';
Expand Down Expand Up @@ -179,7 +194,11 @@ export const appConfig: ApplicationConfig = {
DashboardComponent,
DataFieldEditDialogComponent,
DataFieldListComponent,
CompetencyOptionsDialogComponent,
TeamCompetencyPropagateDialogComponent,
DataOptionEditDialogComponent,
DataOptionImportDialogComponent,
DataOptionListDialogComponent,
HomeAppComponent,
InjectEditDialogComponent,
InjectListComponent,
Expand All @@ -197,6 +216,9 @@ export const appConfig: ApplicationConfig = {
IntegrationStatusComponent,
MselListComponent,
MselPageComponent,
MselCompetenciesComponent,
AssessorViewComponent,
AssessorPageComponent,
MselTeamsComponent,
MselViewComponent,
OrganizationEditDialogComponent,
Expand All @@ -220,6 +242,14 @@ export const appConfig: ApplicationConfig = {
AdminContainerComponent,
AdminInjectTypesComponent,
AdminInjectTypeEditDialogComponent,
AdminCompetencyFrameworksComponent,
AdminCompetencyFrameworkEditDialogComponent,
AdminCompetencyEditDialogComponent,
AdminCompetencyDetailDialogComponent,
AdminProficiencyScaleEditDialogComponent,
AdminProficiencyLevelEditDialogComponent,
AdminCompetencyFrameworkImportDialogComponent,
AdminProficiencyScalesComponent,
AdminUnitsComponent,
AdminUnitEditDialogComponent,
AdminUnitUsersComponent,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!--
Copyright 2026 Carnegie Mellon University. All Rights Reserved.
Released under a MIT (SEI)-style license, please see LICENSE.md in the
project root for license information.
-->
<div mat-dialog-container>
<div mat-dialog-title>
Competency Detail
&nbsp;
<button mat-icon-button (click)="close()" title="Close" class="close-button" tabindex="-1">
<mat-icon class="mdi-24px self-center" fontIcon="mdi-close-circle-outline"></mat-icon>
</button>
</div>
<div mat-dialog-content>
<div class="detail-row">
<span class="detail-label">ID</span>
<span>{{ data.competency.idNumber }}</span>
</div>
<div class="detail-row">
<span class="detail-label">Name</span>
<span>{{ data.competency.shortName }}</span>
</div>
@if (getType()) {
<div class="detail-row">
<span class="detail-label">Type</span>
<span>{{ getType() }}</span>
</div>
}
@if (data.competency.description) {
<div class="detail-row">
<span class="detail-label">Description</span>
<span>{{ data.competency.description }}</span>
</div>
}
</div>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright 2026 Carnegie Mellon University. All Rights Reserved.
// Released under a MIT (SEI)-style license. See LICENSE.md in the
// project root for license information.

.close-button {
float: right;
}

.detail-row {
display: flex;
flex-direction: column;
margin-bottom: 12px;
}

.detail-label {
font-weight: bold;
font-size: 12px;
color: var(--mat-sys-on-surface-variant);
margin-bottom: 2px;
}
Loading
Loading