@algoux/standard-ranklist-renderer-component-angular 0.6.3 → 0.6.4

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.
package/README.md CHANGED
@@ -16,6 +16,7 @@ npm i -S @algoux/standard-ranklist-renderer-component-angular @algoux/standard-r
16
16
  - `ModalComponent`
17
17
  - `DefaultUserModalComponent`
18
18
  - `DefaultSolutionModalComponent`
19
+ - `SrkProblemHeaderCellTemplateDirective`
19
20
  - `SrkUserCellTemplateDirective`
20
21
  - `SrkStatusCellTemplateDirective`
21
22
 
@@ -97,8 +98,18 @@ export class BoardComponent {
97
98
  }
98
99
  ```
99
100
 
101
+ ## Advanced Usage
102
+
100
103
  Use `ModalComponent` directly when you want custom modal content. `SrkUserCellTemplateDirective` and `SrkStatusCellTemplateDirective` let you replace selected ranklist table cells with Angular templates.
101
104
 
105
+ For custom interaction flows, `RanklistComponent` exposes three semantic outputs:
106
+
107
+ - `(userClick)`: receives `UserClickPayload` when a user cell is clicked.
108
+ - `(problemClick)`: receives `ProblemClickPayload` when a problem header is clicked. When observed, default problem headers are always clickable and problem links are not rendered as anchors.
109
+ - `(solutionClick)`: receives `SolutionClickPayload` when a status cell with submissions is clicked.
110
+
111
+ `SrkProblemHeaderCellTemplateDirective` contexts receive `ranklist` and an `onClick` helper so they can opt into the same problem-click payload path.
112
+
102
113
  ## Ranklist Render Options
103
114
 
104
115
  `RanklistComponent` includes optional render inputs for changing the table structure and status presentation while keeping the default behavior unchanged:
package/dist/README.md CHANGED
@@ -16,6 +16,7 @@ npm i -S @algoux/standard-ranklist-renderer-component-angular @algoux/standard-r
16
16
  - `ModalComponent`
17
17
  - `DefaultUserModalComponent`
18
18
  - `DefaultSolutionModalComponent`
19
+ - `SrkProblemHeaderCellTemplateDirective`
19
20
  - `SrkUserCellTemplateDirective`
20
21
  - `SrkStatusCellTemplateDirective`
21
22
 
@@ -97,8 +98,18 @@ export class BoardComponent {
97
98
  }
98
99
  ```
99
100
 
101
+ ## Advanced Usage
102
+
100
103
  Use `ModalComponent` directly when you want custom modal content. `SrkUserCellTemplateDirective` and `SrkStatusCellTemplateDirective` let you replace selected ranklist table cells with Angular templates.
101
104
 
105
+ For custom interaction flows, `RanklistComponent` exposes three semantic outputs:
106
+
107
+ - `(userClick)`: receives `UserClickPayload` when a user cell is clicked.
108
+ - `(problemClick)`: receives `ProblemClickPayload` when a problem header is clicked. When observed, default problem headers are always clickable and problem links are not rendered as anchors.
109
+ - `(solutionClick)`: receives `SolutionClickPayload` when a status cell with submissions is clicked.
110
+
111
+ `SrkProblemHeaderCellTemplateDirective` contexts receive `ranklist` and an `onClick` helper so they can opt into the same problem-click payload path.
112
+
102
113
  ## Ranklist Render Options
103
114
 
104
115
  `RanklistComponent` includes optional render inputs for changing the table structure and status presentation while keeping the default behavior unchanged:
@@ -3,6 +3,7 @@ export { DefaultUserModalComponent, } from './modal/default-user-modal.component
3
3
  export { ModalComponent, } from './modal/modal.component';
4
4
  export { ProgressBarComponent } from './progress/progress-bar.component';
5
5
  export { RanklistComponent } from './ranklist/ranklist.component';
6
+ export { SrkProblemHeaderCellTemplateDirective, } from './ranklist/problem-header-cell-template.directive';
6
7
  export { SrkStatusCellTemplateDirective, } from './ranklist/status-cell-template.directive';
7
8
  export { SrkUserCellTemplateDirective, } from './ranklist/user-cell-template.directive';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCw2QkFBNkIsR0FDOUIsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQ0wseUJBQXlCLEdBQzFCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsR0FFZixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFDTCw4QkFBOEIsR0FFL0IsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsNEJBQTRCLEdBRTdCLE1BQU0seUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBEZWZhdWx0U29sdXRpb25Nb2RhbENvbXBvbmVudCxcbn0gZnJvbSAnLi9tb2RhbC9kZWZhdWx0LXNvbHV0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5leHBvcnQge1xuICBEZWZhdWx0VXNlck1vZGFsQ29tcG9uZW50LFxufSBmcm9tICcuL21vZGFsL2RlZmF1bHQtdXNlci1tb2RhbC5jb21wb25lbnQnO1xuZXhwb3J0IHtcbiAgTW9kYWxDb21wb25lbnQsXG4gIHR5cGUgTW9kYWxDbG9zZVJlYXNvbixcbn0gZnJvbSAnLi9tb2RhbC9tb2RhbC5jb21wb25lbnQnO1xuZXhwb3J0IHsgUHJvZ3Jlc3NCYXJDb21wb25lbnQgfSBmcm9tICcuL3Byb2dyZXNzL3Byb2dyZXNzLWJhci5jb21wb25lbnQnO1xuZXhwb3J0IHsgUmFua2xpc3RDb21wb25lbnQgfSBmcm9tICcuL3JhbmtsaXN0L3JhbmtsaXN0LmNvbXBvbmVudCc7XG5leHBvcnQge1xuICBTcmtTdGF0dXNDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gIHR5cGUgU3RhdHVzQ2VsbFRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9yYW5rbGlzdC9zdGF0dXMtY2VsbC10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0IHtcbiAgU3JrVXNlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgdHlwZSBVc2VyQ2VsbFRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9yYW5rbGlzdC91c2VyLWNlbGwtdGVtcGxhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCB0eXBlIHtcbiAgUmFua2xpc3RDb2x1bW5UaXRsZXMsXG4gIFJhbmtsaXN0U3RhdHVzQ2VsbFByZXNldCxcbiAgUmFua2xpc3RVc2VyQXZhdGFyUGxhY2VtZW50LFxuICBSYW5rVmFsdWUsXG4gIFNvbHV0aW9uQ2xpY2tQYXlsb2FkLFxuICBTdGF0aWNSYW5rbGlzdCxcbiAgVXNlckNsaWNrUGF5bG9hZCxcbn0gZnJvbSAnLi90eXBlcyc7XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCw2QkFBNkIsR0FDOUIsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQ0wseUJBQXlCLEdBQzFCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsR0FFZixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFDTCxxQ0FBcUMsR0FFdEMsTUFBTSxtREFBbUQsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsOEJBQThCLEdBRS9CLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxFQUNMLDRCQUE0QixHQUU3QixNQUFNLHlDQUF5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgRGVmYXVsdFNvbHV0aW9uTW9kYWxDb21wb25lbnQsXG59IGZyb20gJy4vbW9kYWwvZGVmYXVsdC1zb2x1dGlvbi1tb2RhbC5jb21wb25lbnQnO1xuZXhwb3J0IHtcbiAgRGVmYXVsdFVzZXJNb2RhbENvbXBvbmVudCxcbn0gZnJvbSAnLi9tb2RhbC9kZWZhdWx0LXVzZXItbW9kYWwuY29tcG9uZW50JztcbmV4cG9ydCB7XG4gIE1vZGFsQ29tcG9uZW50LFxuICB0eXBlIE1vZGFsQ2xvc2VSZWFzb24sXG59IGZyb20gJy4vbW9kYWwvbW9kYWwuY29tcG9uZW50JztcbmV4cG9ydCB7IFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9ncmVzcy9wcm9ncmVzcy1iYXIuY29tcG9uZW50JztcbmV4cG9ydCB7IFJhbmtsaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9yYW5rbGlzdC9yYW5rbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0IHtcbiAgU3JrUHJvYmxlbUhlYWRlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgdHlwZSBQcm9ibGVtSGVhZGVyQ2VsbFRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9yYW5rbGlzdC9wcm9ibGVtLWhlYWRlci1jZWxsLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQge1xuICBTcmtTdGF0dXNDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gIHR5cGUgU3RhdHVzQ2VsbFRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9yYW5rbGlzdC9zdGF0dXMtY2VsbC10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0IHtcbiAgU3JrVXNlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgdHlwZSBVc2VyQ2VsbFRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9yYW5rbGlzdC91c2VyLWNlbGwtdGVtcGxhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCB0eXBlIHtcbiAgUmFua2xpc3RDb2x1bW5UaXRsZXMsXG4gIFJhbmtsaXN0U3RhdHVzQ2VsbFByZXNldCxcbiAgUmFua2xpc3RVc2VyQXZhdGFyUGxhY2VtZW50LFxuICBSYW5rVmFsdWUsXG4gIFByb2JsZW1DbGlja1BheWxvYWQsXG4gIFNvbHV0aW9uQ2xpY2tQYXlsb2FkLFxuICBTdGF0aWNSYW5rbGlzdCxcbiAgVXNlckNsaWNrUGF5bG9hZCxcbn0gZnJvbSAnLi90eXBlcyc7XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { Directive, TemplateRef, inject } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SrkProblemHeaderCellTemplateDirective {
4
+ templateRef = inject(TemplateRef);
5
+ static ngTemplateContextGuard(_directive, context) {
6
+ return true;
7
+ }
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SrkProblemHeaderCellTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: SrkProblemHeaderCellTemplateDirective, isStandalone: true, selector: "ng-template[srkProblemHeaderCell]", ngImport: i0 });
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SrkProblemHeaderCellTemplateDirective, decorators: [{
12
+ type: Directive,
13
+ args: [{
14
+ selector: 'ng-template[srkProblemHeaderCell]',
15
+ standalone: true,
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvYmxlbS1oZWFkZXItY2VsbC10ZW1wbGF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JhbmtsaXN0L3Byb2JsZW0taGVhZGVyLWNlbGwtdGVtcGxhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFvQi9ELE1BQU0sT0FBTyxxQ0FBcUM7SUFDdkMsV0FBVyxHQUFHLE1BQU0sQ0FBZ0QsV0FBVyxDQUFDLENBQUM7SUFFMUYsTUFBTSxDQUFDLHNCQUFzQixDQUMzQixVQUFpRCxFQUNqRCxPQUFnQjtRQUVoQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7d0dBUlUscUNBQXFDOzRGQUFyQyxxQ0FBcUM7OzRGQUFyQyxxQ0FBcUM7a0JBSmpELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1DQUFtQztvQkFDN0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBzcmsgZnJvbSAnQGFsZ291eC9zdGFuZGFyZC1yYW5rbGlzdCc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtcbiAgUHJvYmxlbUNsaWNrUGF5bG9hZCxcbiAgU3RhdGljUmFua2xpc3QsXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9ibGVtSGVhZGVyQ2VsbFRlbXBsYXRlQ29udGV4dCB7XG4gICRpbXBsaWNpdDogc3JrLlByb2JsZW07XG4gIHByb2JsZW06IHNyay5Qcm9ibGVtO1xuICBwcm9ibGVtSW5kZXg6IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbiAgcmFua2xpc3Q6IFN0YXRpY1JhbmtsaXN0O1xuICBsYW5ndWFnZXM/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgb25DbGljazogKGV2ZW50PzogTW91c2VFdmVudCkgPT4gdm9pZDtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbc3JrUHJvYmxlbUhlYWRlckNlbGxdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU3JrUHJvYmxlbUhlYWRlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gIHJlYWRvbmx5IHRlbXBsYXRlUmVmID0gaW5qZWN0PFRlbXBsYXRlUmVmPFByb2JsZW1IZWFkZXJDZWxsVGVtcGxhdGVDb250ZXh0Pj4oVGVtcGxhdGVSZWYpO1xuXG4gIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKFxuICAgIF9kaXJlY3RpdmU6IFNya1Byb2JsZW1IZWFkZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgY29udGV4dDogdW5rbm93bixcbiAgKTogY29udGV4dCBpcyBQcm9ibGVtSGVhZGVyQ2VsbFRlbXBsYXRlQ29udGV4dCB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgeyBQcm9ibGVtQ2xpY2tQYXlsb2FkIH07XG4iXX0=