@bcgov/nr-ngx-component-lib 0.0.56 → 0.0.57

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 (26) hide show
  1. package/components/icon/icon.component.d.ts +2 -0
  2. package/components/list-attachments/list-attachments.component.d.ts +1 -1
  3. package/components/list-event-history/list-event-history.component.d.ts +1 -1
  4. package/components/list-select/list-select.component.d.ts +1 -1
  5. package/components/resource-schedule/resource-schedule.component.d.ts +33 -0
  6. package/components/schedule/schedule.component.d.ts +83 -0
  7. package/components/tabs/tab/tab.component.d.ts +1 -1
  8. package/directives/pagination.base.d.ts +47 -0
  9. package/directives/row-list.base.d.ts +5 -36
  10. package/esm2022/components/icon/icon.component.mjs +12 -1
  11. package/esm2022/components/list-attachments/list-attachments.component.mjs +2 -2
  12. package/esm2022/components/list-event-history/list-event-history.component.mjs +2 -2
  13. package/esm2022/components/list-select/list-select.component.mjs +2 -2
  14. package/esm2022/components/resource-schedule/resource-schedule.component.mjs +47 -0
  15. package/esm2022/components/schedule/schedule.component.mjs +168 -0
  16. package/esm2022/components/tabs/tab/tab.component.mjs +1 -1
  17. package/esm2022/directives/pagination.base.mjs +88 -0
  18. package/esm2022/directives/row-list.base.mjs +22 -75
  19. package/esm2022/nr-ngx-component-lib.module.mjs +30 -8
  20. package/esm2022/public-api.mjs +4 -1
  21. package/fesm2022/bcgov-nr-ngx-component-lib.mjs +332 -71
  22. package/fesm2022/bcgov-nr-ngx-component-lib.mjs.map +1 -1
  23. package/nr-ngx-component-lib.module.d.ts +27 -25
  24. package/package.json +1 -1
  25. package/public-api.d.ts +3 -0
  26. package/styles/global.scss +19 -0
@@ -45,9 +45,10 @@ import * as i2$5 from '@angular/material/dialog';
45
45
  import { MatDialogRef, MAT_DIALOG_DATA, MatDialog, MatDialogModule } from '@angular/material/dialog';
46
46
  import * as i2$6 from '@angular/material/tabs';
47
47
  import { MatTabGroup, MatTabsModule } from '@angular/material/tabs';
48
+ import * as i2$7 from '@angular/material/menu';
49
+ import { MatMenuModule } from '@angular/material/menu';
48
50
  import { MatButtonModule } from '@angular/material/button';
49
51
  import { MatCheckboxModule } from '@angular/material/checkbox';
50
- import { MatMenuModule } from '@angular/material/menu';
51
52
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
52
53
  import { RouterModule } from '@angular/router';
53
54
 
@@ -182,6 +183,17 @@ const ICON = {
182
183
  </g>
183
184
  </g>
184
185
  </svg>
186
+ `,
187
+ 'user-clock': `
188
+ <!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) -->
189
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
190
+ <path d="M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z" />
191
+ </svg>
192
+ `,
193
+ 'roster': `
194
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="120 -840 720 720">
195
+ <path d="M120-180v-600q0-24.75 17.625-42.375T180-840h600q24.75 0 42.375 17.625T840-780v600q0 24.75-17.625 42.375T780-120H180q-24.75 0-42.375-17.625T120-180Zm60-440h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z" />
196
+ </svg>
185
197
  `
186
198
  };
187
199
 
@@ -1311,30 +1323,11 @@ class ObservableAborter {
1311
1323
  }
1312
1324
  }
1313
1325
 
1314
- class RowListBase extends NrclBase {
1315
- get isLoading() { return this._isLoading; }
1316
- set isLoading(v) {
1317
- if (v == this._isLoading)
1318
- return;
1319
- this._isLoading = v;
1320
- this.isLoadingChange.emit(v);
1321
- }
1322
- get rows() { return this._rows; }
1323
- get totalRowCount() { return this._totalRowCount; }
1324
- get pageSize() { return this._pageConfig.pageSize; }
1325
- get pageNumber() { return this._pageConfig.pageNumber; }
1326
- get sortActive() { return this._pageConfig.sortActive; }
1327
- get sortDirection() { return this._pageConfig.sortDirection; }
1328
- get filter() {
1329
- return this._filter;
1330
- }
1326
+ class PaginationBase extends NrclBase {
1331
1327
  constructor() {
1332
- super();
1328
+ super(...arguments);
1333
1329
  this.pageStateService = inject(PageStateService);
1334
1330
  this.changeDetectorRef = inject(ChangeDetectorRef);
1335
- this.isLoadingChange = new EventEmitter();
1336
- this._isLoading = false;
1337
- this._rows = [];
1338
1331
  this._totalRowCount = 0;
1339
1332
  this._pageConfig = {
1340
1333
  pageSize: 0,
@@ -1342,49 +1335,26 @@ class RowListBase extends NrclBase {
1342
1335
  sortActive: '',
1343
1336
  sortDirection: 'asc'
1344
1337
  };
1345
- this.loadPageState();
1346
- }
1347
- ngAfterViewInit() {
1348
- this.refreshRowList();
1349
1338
  }
1350
- refreshRowList() {
1351
- this.isLoading = true;
1352
- this.changeDetectorRef.detectChanges();
1353
- if (this._loadRowListRequest)
1354
- this._loadRowListRequest.abort();
1355
- this._loadRowListRequest = new ObservableAborter(() => {
1356
- return this.fetchRowListPage();
1357
- });
1358
- return this._loadRowListRequest.promise
1359
- .then(res => {
1360
- this._totalRowCount = this.parseTotalRowCount(res);
1361
- this._rows = this.parseRows(res);
1362
- })
1363
- .catch((e) => {
1364
- if (e instanceof Aborted)
1365
- return;
1366
- this.loadRowListPageFailed(e);
1367
- })
1368
- .finally(() => {
1369
- this.isLoading = false;
1370
- this.changeDetectorRef.detectChanges();
1371
- });
1339
+ get totalRowCount() { return this._totalRowCount; }
1340
+ get pageSize() { return this._pageConfig.pageSize; }
1341
+ get pageNumber() { return this._pageConfig.pageNumber; }
1342
+ get sortActive() { return this._pageConfig.sortActive; }
1343
+ get sortDirection() { return this._pageConfig.sortDirection; }
1344
+ get filter() {
1345
+ return this._filter;
1372
1346
  }
1373
- parseTotalRowCount(res) {
1374
- if ('totalRowCount' in res)
1375
- return res['totalRowCount'];
1376
- throw 'Missing res.totalRowCount, might need to override RowListBase.parseTotalRowCount';
1347
+ set filter(f) {
1348
+ this._filter = this.clone(f);
1377
1349
  }
1378
- loadRowListPageFailed(error) {
1379
- console.warn(error);
1380
- this._rows = [];
1381
- this._totalRowCount = 0;
1350
+ ngAfterViewInit() {
1351
+ this.loadPageState();
1382
1352
  }
1383
1353
  clone(obj) {
1384
1354
  return JSON.parse(JSON.stringify(obj));
1385
1355
  }
1386
1356
  onFilterChange(ev) {
1387
- this._filter = this.clone(ev);
1357
+ this.filter = ev;
1388
1358
  this.onPageNumberChange(1);
1389
1359
  }
1390
1360
  onSortChange(ev) {
@@ -1398,14 +1368,13 @@ class RowListBase extends NrclBase {
1398
1368
  }
1399
1369
  onPageNumberChange(ev) {
1400
1370
  this._pageConfig.pageNumber = ev;
1401
- this.refreshRowList()
1402
- .then(() => {
1403
- this.savePageState();
1404
- });
1371
+ }
1372
+ get initialPageState() {
1373
+ return this.getInitialPageState();
1405
1374
  }
1406
1375
  loadPageState() {
1407
1376
  let state = this.pageStateService.getPageState(this.constructor, () => this.initialPageState);
1408
- this._filter = state.filter;
1377
+ this.filter = state.filter;
1409
1378
  this._pageConfig.pageSize = state.pageConfig.pageSize;
1410
1379
  this._pageConfig.pageNumber = state.pageConfig.pageNumber;
1411
1380
  this._pageConfig.sortActive = state.pageConfig.sortActive;
@@ -1413,7 +1382,7 @@ class RowListBase extends NrclBase {
1413
1382
  }
1414
1383
  savePageState() {
1415
1384
  let state = this.clone({
1416
- filter: this._filter,
1385
+ filter: this.filter,
1417
1386
  pageConfig: {
1418
1387
  pageSize: this._pageConfig.pageSize,
1419
1388
  pageNumber: this._pageConfig.pageNumber,
@@ -1431,12 +1400,86 @@ class RowListBase extends NrclBase {
1431
1400
  totalItems: this._totalRowCount
1432
1401
  };
1433
1402
  }
1434
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1403
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginationBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1404
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: PaginationBase, usesInheritance: true, ngImport: i0 }); }
1405
+ }
1406
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginationBase, decorators: [{
1407
+ type: Directive
1408
+ }] });
1409
+
1410
+ class RowListBase extends PaginationBase {
1411
+ constructor() {
1412
+ super(...arguments);
1413
+ this.pageStateService = inject(PageStateService);
1414
+ this.changeDetectorRef = inject(ChangeDetectorRef);
1415
+ this.isLoadingChange = new EventEmitter();
1416
+ this._isLoading = false;
1417
+ this._rows = [];
1418
+ }
1419
+ get isLoading() { return this._isLoading; }
1420
+ set isLoading(v) {
1421
+ if (v == this._isLoading)
1422
+ return;
1423
+ this._isLoading = v;
1424
+ this.isLoadingChange.emit(v);
1425
+ }
1426
+ get rows() { return this._rows; }
1427
+ ngAfterViewInit() {
1428
+ super.ngAfterViewInit();
1429
+ this.refreshRowList();
1430
+ }
1431
+ refreshRowList() {
1432
+ return this.loadRowList().then(result => this.parseRowList(result));
1433
+ }
1434
+ loadRowList() {
1435
+ this.isLoading = true;
1436
+ this.changeDetectorRef.detectChanges();
1437
+ if (this._loadRowListRequest)
1438
+ this._loadRowListRequest.abort();
1439
+ this._loadRowListRequest = new ObservableAborter(() => {
1440
+ return this.fetchRowListPage();
1441
+ });
1442
+ return this._loadRowListRequest.promise;
1443
+ }
1444
+ parseRowList(result) {
1445
+ return Promise.resolve(result)
1446
+ .then(res => {
1447
+ this._totalRowCount = this.parseTotalRowCount(res);
1448
+ this._rows = this.parseRows(res);
1449
+ })
1450
+ .catch((e) => {
1451
+ if (e instanceof Aborted)
1452
+ return;
1453
+ this.loadRowListPageFailed(e);
1454
+ })
1455
+ .finally(() => {
1456
+ this.isLoading = false;
1457
+ this.changeDetectorRef.detectChanges();
1458
+ });
1459
+ }
1460
+ parseTotalRowCount(res) {
1461
+ if ('totalRowCount' in res)
1462
+ return res['totalRowCount'];
1463
+ throw 'Missing res.totalRowCount, might need to override RowListBase.parseTotalRowCount';
1464
+ }
1465
+ loadRowListPageFailed(error) {
1466
+ console.warn(error);
1467
+ this._rows = [];
1468
+ this._totalRowCount = 0;
1469
+ }
1470
+ onPageNumberChange(ev) {
1471
+ super.onPageNumberChange(ev);
1472
+ this.refreshRowList()
1473
+ .then(() => {
1474
+ this.savePageState();
1475
+ });
1476
+ }
1477
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1435
1478
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: RowListBase, outputs: { isLoadingChange: "isLoadingChange" }, usesInheritance: true, ngImport: i0 }); }
1436
1479
  }
1437
1480
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListBase, decorators: [{
1438
1481
  type: Directive
1439
- }], ctorParameters: () => [], propDecorators: { isLoadingChange: [{
1482
+ }], propDecorators: { isLoadingChange: [{
1440
1483
  type: Output
1441
1484
  }] } });
1442
1485
 
@@ -1671,7 +1714,7 @@ class ListAttachmentsComponent extends RowListBase {
1671
1714
  ];
1672
1715
  }
1673
1716
  }
1674
- get initialPageState() {
1717
+ getInitialPageState() {
1675
1718
  return {
1676
1719
  filter: {},
1677
1720
  pageConfig: {
@@ -1760,7 +1803,7 @@ class ListEventHistoryComponent extends RowListBase {
1760
1803
  throw Error('no provider for ListEventHistoryComponent.rowListProvider.displayRowListPage');
1761
1804
  return this.rowListProvider.displayRowListPage(res);
1762
1805
  }
1763
- get initialPageState() {
1806
+ getInitialPageState() {
1764
1807
  return {
1765
1808
  filter: {},
1766
1809
  pageConfig: {
@@ -1815,7 +1858,7 @@ class ListSelectComponent extends RowListBase {
1815
1858
  this.displayColumns = this.displayColumnsProvider([...this.defaultDisplayColumns]);
1816
1859
  });
1817
1860
  }
1818
- get initialPageState() {
1861
+ getInitialPageState() {
1819
1862
  return {
1820
1863
  filter: {},
1821
1864
  pageConfig: {
@@ -2248,6 +2291,204 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2248
2291
  args: [{ transform: booleanAttribute }]
2249
2292
  }] } });
2250
2293
 
2294
+ class ScheduleRowHeadingDirective {
2295
+ constructor(template) {
2296
+ this.template = template;
2297
+ }
2298
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleRowHeadingDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
2299
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ScheduleRowHeadingDirective, selector: "[nrclScheduleRowHeading]", ngImport: i0 }); }
2300
+ }
2301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleRowHeadingDirective, decorators: [{
2302
+ type: Directive,
2303
+ args: [{
2304
+ selector: '[nrclScheduleRowHeading]'
2305
+ }]
2306
+ }], ctorParameters: () => [{ type: i0.TemplateRef }] });
2307
+ // ================================================================================
2308
+ class ScheduleItemDirective {
2309
+ constructor(template) {
2310
+ this.template = template;
2311
+ }
2312
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleItemDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
2313
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ScheduleItemDirective, selector: "[nrclScheduleItem]", inputs: { name: ["nrclScheduleItem", "name"] }, ngImport: i0 }); }
2314
+ }
2315
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleItemDirective, decorators: [{
2316
+ type: Directive,
2317
+ args: [{
2318
+ selector: '[nrclScheduleItem]'
2319
+ }]
2320
+ }], ctorParameters: () => [{ type: i0.TemplateRef }], propDecorators: { name: [{
2321
+ type: Input,
2322
+ args: ['nrclScheduleItem']
2323
+ }] } });
2324
+ // --------------------------------------------------------------------------------
2325
+ class ScheduleComponent extends RowListBase {
2326
+ constructor() {
2327
+ super(...arguments);
2328
+ this.weekStart = 0;
2329
+ this._days = [];
2330
+ this._weeks = [];
2331
+ this._templates = [];
2332
+ }
2333
+ ngOnChanges(changes) {
2334
+ this.refreshRowList();
2335
+ }
2336
+ ngAfterViewInit() {
2337
+ setTimeout(() => {
2338
+ super.ngAfterViewInit();
2339
+ });
2340
+ }
2341
+ fetchRowListPage() {
2342
+ if (!this.provider?.fetchSchedule)
2343
+ throw Error('ScheduleComponent.provider.fetchSchedule not set');
2344
+ return this.provider.fetchSchedule({
2345
+ pageNumber: this.pageNumber,
2346
+ pageSize: this.pageSize,
2347
+ sortActive: this.sortActive,
2348
+ sortDirection: this.sortDirection,
2349
+ });
2350
+ }
2351
+ parseRows(res) {
2352
+ if (!this.provider?.parseSchedule)
2353
+ throw Error('ResourceScheduleComponent.provider.parseSchedule not set');
2354
+ let rows = this.provider.parseSchedule(res);
2355
+ return this.makeRows(rows);
2356
+ }
2357
+ getInitialPageState() {
2358
+ if (!this.provider?.getInitialPageState)
2359
+ throw Error('ResourceScheduleComponent.provider.getInitialPageState not set');
2360
+ return this.provider.getInitialPageState();
2361
+ }
2362
+ onSamePageFilterChange(ev) {
2363
+ this.filter = ev;
2364
+ }
2365
+ makeRows(schedule) {
2366
+ let start = moment(this.startDate);
2367
+ let today = moment();
2368
+ this._weeks = Array.from({ length: this.dayCount }).reduce((a, x, i) => {
2369
+ let m = start.clone().add(i, 'day');
2370
+ let date = m.format('MMM D');
2371
+ let day = m.day();
2372
+ if (a.length == 0)
2373
+ return a.concat({
2374
+ start: date,
2375
+ end: date,
2376
+ span: 1
2377
+ });
2378
+ let prev = a[a.length - 1];
2379
+ if (day == this.weekStart)
2380
+ return a.concat({
2381
+ start: date,
2382
+ end: date,
2383
+ span: 1
2384
+ });
2385
+ prev.end = date;
2386
+ prev.span += 1;
2387
+ return a;
2388
+ }, []);
2389
+ this._days = Array.from({ length: this.dayCount }).map((x, i) => {
2390
+ let d = start.clone().add(i, 'day');
2391
+ return {
2392
+ dayName: d.format('ddd'),
2393
+ monthDay: d.date(),
2394
+ date: d.format('Y-MM-DD'),
2395
+ isFirst: d.date() == 1,
2396
+ isWeekend: d.day() == 0 || d.day() == 6,
2397
+ isToday: d.isSame(today, 'day'),
2398
+ };
2399
+ });
2400
+ this._templates = Array.from({ length: schedule.length });
2401
+ return schedule.map((row, i) => {
2402
+ this._templates[i] = Array.from({ length: this.dayCount });
2403
+ return {
2404
+ id: row.id ?? String(i),
2405
+ heading: row.heading,
2406
+ items: row.items
2407
+ .then(rowItems => {
2408
+ return Array.from({ length: this.dayCount }).map((x, j) => {
2409
+ let rowItem = rowItems[j];
2410
+ if (rowItem == null)
2411
+ return {
2412
+ id: String(j),
2413
+ name: 'empty'
2414
+ };
2415
+ this._templates[i][j] = this.itemTemplates?.find(i => i.name == rowItem?.name)?.template;
2416
+ return rowItem;
2417
+ });
2418
+ })
2419
+ };
2420
+ }) || [];
2421
+ }
2422
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2423
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScheduleComponent, selector: "nrcl-schedule", inputs: { provider: "provider", startDate: "startDate", weekStart: ["weekStart", "weekStart", numberAttribute], dayCount: ["dayCount", "dayCount", numberAttribute], menu: "menu" }, host: { properties: { "style.--nrcl-schedule-day-count": "this.dayCount" } }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ScheduleRowHeadingDirective, descendants: true }, { propertyName: "itemTemplates", predicate: ScheduleItemDirective }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"schedule\">\n <div class=\"upper-left\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"row weeks\">\n @for ( week of _weeks; track $index ) {\n @if ( week.span == 1 ) {\n <div class=\"week\">\n {{ week.start }}\n </div>\n }\n @else {\n <div class=\"week\" [style.grid-column]=\"'span ' + week.span\">\n {{ week.start }} - {{ week.end }}\n </div>\n }\n }\n </div>\n\n <div class=\"row days\"> \n @for ( day of _days; track $index ) {\n <div class=\"day\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.first]=\"day.isFirst\"\n >\n <div class=\"day-name\">{{ day.dayName }}</div>\n <div class=\"date\">{{ day.monthDay }}</div>\n </div>\n }\n </div>\n\n @for ( row of rows | paginate: paginateState( 'nrcl-schedule' ); track row.id; let rowIndex = $index ) {\n <div class=\"row items\">\n <div class=\"outer heading\">\n <div class=\"inner heading\">\n <ng-container \n [ngTemplateOutlet]=\"headerTemplate?.template\" \n [ngTemplateOutletContext]=\"{ $implicit: row.heading }\" \n ></ng-container>\n </div>\n </div> \n\n @if ( row.items | async; as rowItems ) {\n @for ( item of rowItems; track item.id; let colIndex = $index ) {\n <div class=\"outer item\"\n [class.menu-open]=\"itemMenu.menuOpen\"\n >\n <div class=\"inner item\" #itemMenu=\"matMenuTrigger\"\n [class]=\"'item-' + item.name\" \n matRipple\n [matMenuTriggerFor]=\"menu\"\n [matMenuTriggerData]=\"{ $implicit: { item: item, heading: row.heading } }\"\n [matTooltip]=\"item?.tooltip?.()\"\n matTooltipClass=\"nrcl-schedule-multiline\"\n [class.travel]=\"item?.travel\"\n >\n <ng-container \n [ngTemplateOutlet]=\"_templates[ rowIndex ][ colIndex ] || empty\" \n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-container>\n \n @let icons = item?.icons?.();\n @if ( icons && icons.length > 0 ) {\n <div class=\"icons\">\n @for ( icon of icons; track icon ) {\n <nrcl-icon small>{{ icon }}</nrcl-icon>\n } \n </div>\n }\n </div>\n </div>\n }\n }\n @else {\n @for ( day of _days; track day ) {\n <div class=\"item item-loading\"></div>\n }\n }\n </div>\n }\n</div>\n\n<nrcl-gap/>\n\n<nrcl-row-list-pagination\n paginationId=\"nrcl-schedule\"\n [pageSize]=\"pageSize\"\n [pageNumber]=\"pageNumber\"\n [rowCount]=\"totalRowCount\"\n (pageNumberChange)=\"onPageNumberChange( $event )\"\n (pageSizeChange)=\"onPageSizeChange( $event )\"\n></nrcl-row-list-pagination>\n\n<ng-template #empty>\n <div class=\"empty\">(empty)</div>\n</ng-template>\n", styles: ["::ng-deep :root{--nrcl-schedule-border-color: #c6c8cb;--nrcl-schedule-background-color: white;--nrcl-schedule-alternate-background-color: #f2f2f2;--nrcl-schedule-hover-background-color: #d7d7d7;--nrcl-schedule-row-weeks-height: 30px;--nrcl-schedule-row-weeks-font-size: 15px;--nrcl-schedule-row-weeks-font-weight: bold;--nrcl-schedule-row-weeks-foreground-color: black;--nrcl-schedule-row-days-height: 45px;--nrcl-schedule-row-days-font-size: 15px;--nrcl-schedule-row-days-font-weight: normal;--nrcl-schedule-row-days-foreground-color: black;--nrcl-schedule-row-days-weekend-background-color: #e0f8fc;--nrcl-schedule-row-days-today-background-color: #fcf8d9;--nrcl-schedule-row-schedule-height: 70px;--nrcl-schedule-heading-width: 300px;--nrcl-schedule-item-width: 100px}:host{display:flex;flex-direction:column;font-family:var(--nrcl-font-family);height:100%}:host .schedule{display:grid;grid-template-columns:var(--nrcl-schedule-heading-width) repeat(var(--nrcl-schedule-day-count),var(--nrcl-schedule-item-width));overflow:auto;height:100%;flex-grow:1}:host .schedule .upper-left{grid-row:1/span 2;grid-column:1;border-right:1px solid var(--nrcl-schedule-border-color);border-bottom:1px solid var(--nrcl-schedule-border-color);position:sticky;top:0;left:0;z-index:2;background:var(--nrcl-schedule-background-color)}:host .schedule .row{display:contents}:host .schedule .row.weeks>*{height:var(--nrcl-schedule-row-weeks-height)}:host .schedule .row.days>*{height:var(--nrcl-schedule-row-days-height)}:host .schedule .row .outer.heading,:host .schedule .row .day,:host .schedule .row .week{border-right:1px solid var(--nrcl-schedule-border-color);border-bottom:1px solid var(--nrcl-schedule-border-color)}:host .schedule .row .outer.heading{border-left:1px solid var(--nrcl-schedule-border-color)}:host .schedule .row .outer.item:last-child{border-right:1px solid var(--nrcl-schedule-border-color)}:host .schedule .row:last-child .outer.item{border-bottom:1px solid var(--nrcl-schedule-border-color)}:host .schedule .row .week{border-top:1px solid var(--nrcl-schedule-border-color);display:flex;justify-content:center;align-items:center;font-size:var(--nrcl-schedule-row-weeks-font-size);font-weight:var(--nrcl-schedule-row-weeks-font-weight);color:var(--nrcl-schedule-row-weeks-foreground-color);position:sticky;top:0;background-color:var(--nrcl-schedule-background-color);z-index:1}:host .schedule .row .day{display:flex;flex-direction:column;justify-content:center;align-items:center;font-size:var(--nrcl-schedule-row-days-font-size);font-weight:var(--nrcl-schedule-row-days-font-weight);color:var(--nrcl-schedule-row-days-foreground-color);position:sticky;top:calc(var(--nrcl-schedule-row-weeks-height) + 2px);background-color:var(--nrcl-schedule-background-color);z-index:1}:host .schedule .row .day .day-name{font-size:13px}:host .schedule .row .day.weekend{background-color:var(--nrcl-schedule-row-days-weekend-background-color)}:host .schedule .row .day.today{background-color:var(--nrcl-schedule-row-days-today-background-color)}:host .schedule .row .day.first:after{content:\"\";position:absolute;top:0;left:0;bottom:0;border-left:2px solid black}:host .schedule .row.items .outer.item{padding:2px;box-sizing:border-box;height:var(--nrcl-schedule-row-schedule-height);display:flex;flex-direction:column;justify-content:stretch;align-items:stretch}:host .schedule .row.items .outer.item.menu-open,:host .schedule .row.items .outer.item:hover{background-color:#000;border-radius:6px}:host .schedule .row.items .outer.item .item{flex-grow:1;cursor:pointer;border-radius:4px;position:relative;padding:4px 4px 8px}:host .schedule .row.items .outer.item .item .icons{position:absolute;right:2px;bottom:2px;display:flex;flex-direction:column;gap:2px;background-color:#f1ebe4;border-radius:4px;padding:3px}:host .schedule .row.items .outer.item .item.travel{position:relative}:host .schedule .row.items .outer.item .item.travel:after{content:\"\";position:absolute;inset:0 0 2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAABAQMAAAD+YPzoAAAABlBMVEX///8AAABVwtN+AAAAAnRSTlP/AOW3MEoAAAAMSURBVHicY+BwEgAAALAAW97nJhUAAAAASUVORK5CYII=);background-repeat:no-repeat;background-size:calc(100% - 8px) 3px;background-position:bottom}:host .schedule .row.items .outer.item .item.travel:hover:after{filter:brightness(0)}:host .schedule .row.items .outer.heading{box-sizing:border-box;cursor:default;position:sticky;left:0;z-index:1;height:var(--nrcl-schedule-row-schedule-height)}:host .schedule .row.items .outer.heading .heading{flex-grow:1;cursor:default;height:100%}:host .schedule .row:nth-child(odd) .outer{background-color:var(--nrcl-schedule-background-color)}:host .schedule .row:nth-child(2n) .outer{background-color:var(--nrcl-schedule-alternate-background-color)}:host .schedule .row:hover .outer{background-color:var(--nrcl-schedule-hover-background-color)}.empty{height:100%;display:flex;justify-content:center;align-items:center;color:#aaa}\n"], dependencies: [{ kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i1$1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: GapComponent, selector: "nrcl-gap", inputs: ["horizontal", "vertical", "divider"] }, { kind: "component", type: RowListPaginationComponent, selector: "nrcl-row-list-pagination", inputs: ["paginationId", "pageSizeOptions", "pageSize", "pageNumber", "rowCount", "showPageSize", "noRowsMessage"], outputs: ["pageSizeChange", "pageNumberChange"] }, { kind: "component", type: IconComponent, selector: "nrcl-icon", inputs: ["small", "large"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$6.PaginatePipe, name: "paginate" }] }); }
2424
+ }
2425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleComponent, decorators: [{
2426
+ type: Component,
2427
+ args: [{ selector: 'nrcl-schedule', host: {
2428
+ '[style.--nrcl-schedule-day-count]': 'this.dayCount'
2429
+ }, template: "<div class=\"schedule\">\n <div class=\"upper-left\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"row weeks\">\n @for ( week of _weeks; track $index ) {\n @if ( week.span == 1 ) {\n <div class=\"week\">\n {{ week.start }}\n </div>\n }\n @else {\n <div class=\"week\" [style.grid-column]=\"'span ' + week.span\">\n {{ week.start }} - {{ week.end }}\n </div>\n }\n }\n </div>\n\n <div class=\"row days\"> \n @for ( day of _days; track $index ) {\n <div class=\"day\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.first]=\"day.isFirst\"\n >\n <div class=\"day-name\">{{ day.dayName }}</div>\n <div class=\"date\">{{ day.monthDay }}</div>\n </div>\n }\n </div>\n\n @for ( row of rows | paginate: paginateState( 'nrcl-schedule' ); track row.id; let rowIndex = $index ) {\n <div class=\"row items\">\n <div class=\"outer heading\">\n <div class=\"inner heading\">\n <ng-container \n [ngTemplateOutlet]=\"headerTemplate?.template\" \n [ngTemplateOutletContext]=\"{ $implicit: row.heading }\" \n ></ng-container>\n </div>\n </div> \n\n @if ( row.items | async; as rowItems ) {\n @for ( item of rowItems; track item.id; let colIndex = $index ) {\n <div class=\"outer item\"\n [class.menu-open]=\"itemMenu.menuOpen\"\n >\n <div class=\"inner item\" #itemMenu=\"matMenuTrigger\"\n [class]=\"'item-' + item.name\" \n matRipple\n [matMenuTriggerFor]=\"menu\"\n [matMenuTriggerData]=\"{ $implicit: { item: item, heading: row.heading } }\"\n [matTooltip]=\"item?.tooltip?.()\"\n matTooltipClass=\"nrcl-schedule-multiline\"\n [class.travel]=\"item?.travel\"\n >\n <ng-container \n [ngTemplateOutlet]=\"_templates[ rowIndex ][ colIndex ] || empty\" \n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-container>\n \n @let icons = item?.icons?.();\n @if ( icons && icons.length > 0 ) {\n <div class=\"icons\">\n @for ( icon of icons; track icon ) {\n <nrcl-icon small>{{ icon }}</nrcl-icon>\n } \n </div>\n }\n </div>\n </div>\n }\n }\n @else {\n @for ( day of _days; track day ) {\n <div class=\"item item-loading\"></div>\n }\n }\n </div>\n }\n</div>\n\n<nrcl-gap/>\n\n<nrcl-row-list-pagination\n paginationId=\"nrcl-schedule\"\n [pageSize]=\"pageSize\"\n [pageNumber]=\"pageNumber\"\n [rowCount]=\"totalRowCount\"\n (pageNumberChange)=\"onPageNumberChange( $event )\"\n (pageSizeChange)=\"onPageSizeChange( $event )\"\n></nrcl-row-list-pagination>\n\n<ng-template #empty>\n <div class=\"empty\">(empty)</div>\n</ng-template>\n", styles: ["::ng-deep :root{--nrcl-schedule-border-color: #c6c8cb;--nrcl-schedule-background-color: white;--nrcl-schedule-alternate-background-color: #f2f2f2;--nrcl-schedule-hover-background-color: #d7d7d7;--nrcl-schedule-row-weeks-height: 30px;--nrcl-schedule-row-weeks-font-size: 15px;--nrcl-schedule-row-weeks-font-weight: bold;--nrcl-schedule-row-weeks-foreground-color: black;--nrcl-schedule-row-days-height: 45px;--nrcl-schedule-row-days-font-size: 15px;--nrcl-schedule-row-days-font-weight: normal;--nrcl-schedule-row-days-foreground-color: black;--nrcl-schedule-row-days-weekend-background-color: #e0f8fc;--nrcl-schedule-row-days-today-background-color: #fcf8d9;--nrcl-schedule-row-schedule-height: 70px;--nrcl-schedule-heading-width: 300px;--nrcl-schedule-item-width: 100px}:host{display:flex;flex-direction:column;font-family:var(--nrcl-font-family);height:100%}:host .schedule{display:grid;grid-template-columns:var(--nrcl-schedule-heading-width) repeat(var(--nrcl-schedule-day-count),var(--nrcl-schedule-item-width));overflow:auto;height:100%;flex-grow:1}:host .schedule .upper-left{grid-row:1/span 2;grid-column:1;border-right:1px solid var(--nrcl-schedule-border-color);border-bottom:1px solid var(--nrcl-schedule-border-color);position:sticky;top:0;left:0;z-index:2;background:var(--nrcl-schedule-background-color)}:host .schedule .row{display:contents}:host .schedule .row.weeks>*{height:var(--nrcl-schedule-row-weeks-height)}:host .schedule .row.days>*{height:var(--nrcl-schedule-row-days-height)}:host .schedule .row .outer.heading,:host .schedule .row .day,:host .schedule .row .week{border-right:1px solid var(--nrcl-schedule-border-color);border-bottom:1px solid var(--nrcl-schedule-border-color)}:host .schedule .row .outer.heading{border-left:1px solid var(--nrcl-schedule-border-color)}:host .schedule .row .outer.item:last-child{border-right:1px solid var(--nrcl-schedule-border-color)}:host .schedule .row:last-child .outer.item{border-bottom:1px solid var(--nrcl-schedule-border-color)}:host .schedule .row .week{border-top:1px solid var(--nrcl-schedule-border-color);display:flex;justify-content:center;align-items:center;font-size:var(--nrcl-schedule-row-weeks-font-size);font-weight:var(--nrcl-schedule-row-weeks-font-weight);color:var(--nrcl-schedule-row-weeks-foreground-color);position:sticky;top:0;background-color:var(--nrcl-schedule-background-color);z-index:1}:host .schedule .row .day{display:flex;flex-direction:column;justify-content:center;align-items:center;font-size:var(--nrcl-schedule-row-days-font-size);font-weight:var(--nrcl-schedule-row-days-font-weight);color:var(--nrcl-schedule-row-days-foreground-color);position:sticky;top:calc(var(--nrcl-schedule-row-weeks-height) + 2px);background-color:var(--nrcl-schedule-background-color);z-index:1}:host .schedule .row .day .day-name{font-size:13px}:host .schedule .row .day.weekend{background-color:var(--nrcl-schedule-row-days-weekend-background-color)}:host .schedule .row .day.today{background-color:var(--nrcl-schedule-row-days-today-background-color)}:host .schedule .row .day.first:after{content:\"\";position:absolute;top:0;left:0;bottom:0;border-left:2px solid black}:host .schedule .row.items .outer.item{padding:2px;box-sizing:border-box;height:var(--nrcl-schedule-row-schedule-height);display:flex;flex-direction:column;justify-content:stretch;align-items:stretch}:host .schedule .row.items .outer.item.menu-open,:host .schedule .row.items .outer.item:hover{background-color:#000;border-radius:6px}:host .schedule .row.items .outer.item .item{flex-grow:1;cursor:pointer;border-radius:4px;position:relative;padding:4px 4px 8px}:host .schedule .row.items .outer.item .item .icons{position:absolute;right:2px;bottom:2px;display:flex;flex-direction:column;gap:2px;background-color:#f1ebe4;border-radius:4px;padding:3px}:host .schedule .row.items .outer.item .item.travel{position:relative}:host .schedule .row.items .outer.item .item.travel:after{content:\"\";position:absolute;inset:0 0 2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAABAQMAAAD+YPzoAAAABlBMVEX///8AAABVwtN+AAAAAnRSTlP/AOW3MEoAAAAMSURBVHicY+BwEgAAALAAW97nJhUAAAAASUVORK5CYII=);background-repeat:no-repeat;background-size:calc(100% - 8px) 3px;background-position:bottom}:host .schedule .row.items .outer.item .item.travel:hover:after{filter:brightness(0)}:host .schedule .row.items .outer.heading{box-sizing:border-box;cursor:default;position:sticky;left:0;z-index:1;height:var(--nrcl-schedule-row-schedule-height)}:host .schedule .row.items .outer.heading .heading{flex-grow:1;cursor:default;height:100%}:host .schedule .row:nth-child(odd) .outer{background-color:var(--nrcl-schedule-background-color)}:host .schedule .row:nth-child(2n) .outer{background-color:var(--nrcl-schedule-alternate-background-color)}:host .schedule .row:hover .outer{background-color:var(--nrcl-schedule-hover-background-color)}.empty{height:100%;display:flex;justify-content:center;align-items:center;color:#aaa}\n"] }]
2430
+ }], propDecorators: { provider: [{
2431
+ type: Input
2432
+ }], startDate: [{
2433
+ type: Input
2434
+ }], weekStart: [{
2435
+ type: Input,
2436
+ args: [{ transform: numberAttribute }]
2437
+ }], dayCount: [{
2438
+ type: Input,
2439
+ args: [{ transform: numberAttribute }]
2440
+ }], menu: [{
2441
+ type: Input
2442
+ }], itemTemplates: [{
2443
+ type: ContentChildren,
2444
+ args: [ScheduleItemDirective]
2445
+ }], headerTemplate: [{
2446
+ type: ContentChild,
2447
+ args: [ScheduleRowHeadingDirective]
2448
+ }] } });
2449
+
2450
+ class ResourceScheduleRowHeadingDirective {
2451
+ constructor(template) {
2452
+ this.template = template;
2453
+ }
2454
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ResourceScheduleRowHeadingDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
2455
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ResourceScheduleRowHeadingDirective, selector: "[nrclResourceScheduleRowHeading]", ngImport: i0 }); }
2456
+ }
2457
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ResourceScheduleRowHeadingDirective, decorators: [{
2458
+ type: Directive,
2459
+ args: [{
2460
+ selector: '[nrclResourceScheduleRowHeading]'
2461
+ }]
2462
+ }], ctorParameters: () => [{ type: i0.TemplateRef }] });
2463
+ class ResourceScheduleComponent {
2464
+ constructor() {
2465
+ this.weekStart = 0;
2466
+ }
2467
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ResourceScheduleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2468
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.14", type: ResourceScheduleComponent, selector: "nrcl-resource-schedule", inputs: { provider: "provider", startDate: "startDate", weekStart: "weekStart", dayCount: ["dayCount", "dayCount", numberAttribute], menu: "menu" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ResourceScheduleRowHeadingDirective, descendants: true }], viewQueries: [{ propertyName: "scheduleComponent", first: true, predicate: ScheduleComponent, descendants: true }], ngImport: i0, template: "<nrcl-schedule #schedule\n [provider]=\"provider\"\n [startDate]=\"startDate\"\n [weekStart]=\"weekStart\"\n [dayCount]=\"dayCount\"\n [menu]=\"menu\"\n>\n <ng-content></ng-content>\n\n <ng-template nrclScheduleRowHeading let-item>\n <ng-container \n [ngTemplateOutlet]=\"headerTemplate.template\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\" \n ></ng-container>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"rostered\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>{{ data.shiftType }}</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"out-of-service\" let-data>\n <h1>Out of Svc</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>{{ data.shiftType }}</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"available-duty-day\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>Duty Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"available-standby-day\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>Standby Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"available-off-day\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>Day Off</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"available-regular-day\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>Regular Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"assigned-duty-day\" let-data>\n <!-- <h1></h1> -->\n <h2>{{ data.assignmentName }}</h2>\n <h3>Duty Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"assigned-standby-day\" let-data>\n <!-- <h1></h1> -->\n <h2>{{ data.assignmentName }}</h2>\n <h3>Standby Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"assigned-off-day\" let-data>\n <!-- <h1></h1> -->\n <h2>{{ data.assignmentName }}</h2>\n <h3>Day Off</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"assigned-regular-day\" let-data>\n <!-- <h1></h1> -->\n <h2>{{ data.assignmentName }}</h2>\n <h3>Regular Day</h3>\n </ng-template>\n</nrcl-schedule>\n\n", styles: ["::ng-deep :root{--nrcl-resource-schedule-item-foregroud-color: black;--nrcl-resource-schedule-item-text-shadow: 1px 0px 5px #ffffffa0, -1px 0px 5px #ffffffa0, 0px 1px 5px #ffffffa0, 0px -1px 5px #ffffffa0;--nrcl-resource-schedule-item-regular-day-background-color: #0AA647;--nrcl-resource-schedule-item-off-day-background-color: #d4d2d2;--nrcl-resource-schedule-item-duty-day-background-color: #2f9fe0;--nrcl-resource-schedule-item-standby-day-background-color: #f6cf43;--nrcl-resource-schedule-item-out-of-service-background-color: #f55353;--nrcl-resource-schedule-item-rostered-background-color: #ba9ef7}:host{height:100%;display:block}.nrcl-schedule ::ng-deep .inner.item{display:flex;flex-direction:column;justify-content:stretch;align-items:stretch;color:var(--nrcl-resource-schedule-item-foregroud-color)}.nrcl-schedule ::ng-deep .inner.item h1,.nrcl-schedule ::ng-deep .inner.item h2,.nrcl-schedule ::ng-deep .inner.item h3{padding:0;margin:0;font-weight:200}.nrcl-schedule ::ng-deep .inner.item h1{font-size:15px;line-height:15px;text-align:center}.nrcl-schedule ::ng-deep .inner.item h2{flex-grow:1;font-size:14px;line-height:14px;text-align:center;display:flex;justify-content:center;align-items:center}.nrcl-schedule ::ng-deep .inner.item h3{font-size:14px;line-height:14px;text-align:center}.nrcl-schedule ::ng-deep .inner.item.item-out-of-service{background-color:var(--nrcl-resource-schedule-item-out-of-service-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-rostered{background-color:var(--nrcl-resource-schedule-item-rostered-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-available-duty-day{background-color:var(--nrcl-resource-schedule-item-duty-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-available-standby-day{background-color:var(--nrcl-resource-schedule-item-standby-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-available-off-day{background-color:var(--nrcl-resource-schedule-item-off-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-available-regular-day{background-color:var(--nrcl-resource-schedule-item-regular-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-assigned-duty-day{background-color:var(--nrcl-resource-schedule-item-duty-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-assigned-standby-day{background-color:var(--nrcl-resource-schedule-item-standby-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-assigned-off-day{background-color:var(--nrcl-resource-schedule-item-off-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-assigned-regular-day{background-color:var(--nrcl-resource-schedule-item-regular-day-background-color)}\n"], dependencies: [{ kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ScheduleComponent, selector: "nrcl-schedule", inputs: ["provider", "startDate", "weekStart", "dayCount", "menu"] }, { kind: "directive", type: ScheduleItemDirective, selector: "[nrclScheduleItem]", inputs: ["nrclScheduleItem"] }, { kind: "directive", type: ScheduleRowHeadingDirective, selector: "[nrclScheduleRowHeading]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2469
+ }
2470
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ResourceScheduleComponent, decorators: [{
2471
+ type: Component,
2472
+ args: [{ selector: "nrcl-resource-schedule", changeDetection: ChangeDetectionStrategy.OnPush, template: "<nrcl-schedule #schedule\n [provider]=\"provider\"\n [startDate]=\"startDate\"\n [weekStart]=\"weekStart\"\n [dayCount]=\"dayCount\"\n [menu]=\"menu\"\n>\n <ng-content></ng-content>\n\n <ng-template nrclScheduleRowHeading let-item>\n <ng-container \n [ngTemplateOutlet]=\"headerTemplate.template\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\" \n ></ng-container>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"rostered\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>{{ data.shiftType }}</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"out-of-service\" let-data>\n <h1>Out of Svc</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>{{ data.shiftType }}</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"available-duty-day\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>Duty Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"available-standby-day\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>Standby Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"available-off-day\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>Day Off</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"available-regular-day\" let-data>\n <h1>Available</h1>\n <h2>{{ data.allocationType }}</h2>\n <h3>Regular Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"assigned-duty-day\" let-data>\n <!-- <h1></h1> -->\n <h2>{{ data.assignmentName }}</h2>\n <h3>Duty Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"assigned-standby-day\" let-data>\n <!-- <h1></h1> -->\n <h2>{{ data.assignmentName }}</h2>\n <h3>Standby Day</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"assigned-off-day\" let-data>\n <!-- <h1></h1> -->\n <h2>{{ data.assignmentName }}</h2>\n <h3>Day Off</h3>\n </ng-template>\n\n <ng-template nrclScheduleItem=\"assigned-regular-day\" let-data>\n <!-- <h1></h1> -->\n <h2>{{ data.assignmentName }}</h2>\n <h3>Regular Day</h3>\n </ng-template>\n</nrcl-schedule>\n\n", styles: ["::ng-deep :root{--nrcl-resource-schedule-item-foregroud-color: black;--nrcl-resource-schedule-item-text-shadow: 1px 0px 5px #ffffffa0, -1px 0px 5px #ffffffa0, 0px 1px 5px #ffffffa0, 0px -1px 5px #ffffffa0;--nrcl-resource-schedule-item-regular-day-background-color: #0AA647;--nrcl-resource-schedule-item-off-day-background-color: #d4d2d2;--nrcl-resource-schedule-item-duty-day-background-color: #2f9fe0;--nrcl-resource-schedule-item-standby-day-background-color: #f6cf43;--nrcl-resource-schedule-item-out-of-service-background-color: #f55353;--nrcl-resource-schedule-item-rostered-background-color: #ba9ef7}:host{height:100%;display:block}.nrcl-schedule ::ng-deep .inner.item{display:flex;flex-direction:column;justify-content:stretch;align-items:stretch;color:var(--nrcl-resource-schedule-item-foregroud-color)}.nrcl-schedule ::ng-deep .inner.item h1,.nrcl-schedule ::ng-deep .inner.item h2,.nrcl-schedule ::ng-deep .inner.item h3{padding:0;margin:0;font-weight:200}.nrcl-schedule ::ng-deep .inner.item h1{font-size:15px;line-height:15px;text-align:center}.nrcl-schedule ::ng-deep .inner.item h2{flex-grow:1;font-size:14px;line-height:14px;text-align:center;display:flex;justify-content:center;align-items:center}.nrcl-schedule ::ng-deep .inner.item h3{font-size:14px;line-height:14px;text-align:center}.nrcl-schedule ::ng-deep .inner.item.item-out-of-service{background-color:var(--nrcl-resource-schedule-item-out-of-service-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-rostered{background-color:var(--nrcl-resource-schedule-item-rostered-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-available-duty-day{background-color:var(--nrcl-resource-schedule-item-duty-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-available-standby-day{background-color:var(--nrcl-resource-schedule-item-standby-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-available-off-day{background-color:var(--nrcl-resource-schedule-item-off-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-available-regular-day{background-color:var(--nrcl-resource-schedule-item-regular-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-assigned-duty-day{background-color:var(--nrcl-resource-schedule-item-duty-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-assigned-standby-day{background-color:var(--nrcl-resource-schedule-item-standby-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-assigned-off-day{background-color:var(--nrcl-resource-schedule-item-off-day-background-color)}.nrcl-schedule ::ng-deep .inner.item.item-assigned-regular-day{background-color:var(--nrcl-resource-schedule-item-regular-day-background-color)}\n"] }]
2473
+ }], propDecorators: { provider: [{
2474
+ type: Input
2475
+ }], startDate: [{
2476
+ type: Input
2477
+ }], weekStart: [{
2478
+ type: Input
2479
+ }], dayCount: [{
2480
+ type: Input,
2481
+ args: [{ transform: numberAttribute }]
2482
+ }], menu: [{
2483
+ type: Input
2484
+ }], scheduleComponent: [{
2485
+ type: ViewChild,
2486
+ args: [ScheduleComponent]
2487
+ }], headerTemplate: [{
2488
+ type: ContentChild,
2489
+ args: [ResourceScheduleRowHeadingDirective]
2490
+ }] } });
2491
+
2251
2492
  class SnackbarUtilService {
2252
2493
  constructor() {
2253
2494
  this.snackbar = inject(MatSnackBar);
@@ -2408,7 +2649,12 @@ class NrNgxComponentLibModule {
2408
2649
  TabComponent,
2409
2650
  TabLabelDirective,
2410
2651
  TabContentDirective,
2411
- LoadingStatusComponent], imports: [BrowserAnimationsModule,
2652
+ LoadingStatusComponent,
2653
+ ScheduleComponent,
2654
+ ScheduleItemDirective,
2655
+ ScheduleRowHeadingDirective,
2656
+ ResourceScheduleComponent,
2657
+ ResourceScheduleRowHeadingDirective], imports: [BrowserAnimationsModule,
2412
2658
  CommonModule,
2413
2659
  FormsModule,
2414
2660
  MatButtonModule,
@@ -2470,7 +2716,12 @@ class NrNgxComponentLibModule {
2470
2716
  TabComponent,
2471
2717
  TabLabelDirective,
2472
2718
  TabContentDirective,
2473
- LoadingStatusComponent] }); }
2719
+ LoadingStatusComponent,
2720
+ ScheduleComponent,
2721
+ ScheduleItemDirective,
2722
+ ScheduleRowHeadingDirective,
2723
+ ResourceScheduleComponent,
2724
+ ResourceScheduleRowHeadingDirective] }); }
2474
2725
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NrNgxComponentLibModule, providers: [
2475
2726
  SnackbarUtilService,
2476
2727
  ConfigurationService,
@@ -2574,6 +2825,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2574
2825
  TabLabelDirective,
2575
2826
  TabContentDirective,
2576
2827
  LoadingStatusComponent,
2828
+ ScheduleComponent,
2829
+ ScheduleItemDirective,
2830
+ ScheduleRowHeadingDirective,
2831
+ ResourceScheduleComponent,
2832
+ ResourceScheduleRowHeadingDirective,
2577
2833
  ],
2578
2834
  exports: [
2579
2835
  ButtonComponent,
@@ -2614,6 +2870,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2614
2870
  TabLabelDirective,
2615
2871
  TabContentDirective,
2616
2872
  LoadingStatusComponent,
2873
+ ScheduleComponent,
2874
+ ScheduleItemDirective,
2875
+ ScheduleRowHeadingDirective,
2876
+ ResourceScheduleComponent,
2877
+ ResourceScheduleRowHeadingDirective,
2617
2878
  ],
2618
2879
  providers: [
2619
2880
  SnackbarUtilService,
@@ -2633,5 +2894,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2633
2894
  * Generated bundle index. Do not edit.
2634
2895
  */
2635
2896
 
2636
- export { Aborted, ButtonComponent, CellContentComponent, CodeTable, ConfigurationService, ConfigurationSubscriberBase, DATE_FORMATS, DesktopViewDirective, DeviceViewComponent, DialogBase, DialogComponent, DialogConfirmComponent, DialogService, ExpansionPanelComponent, ExpansionPanelFooterComponent, ExpansionPanelHeaderComponent, ExpansionPanelSectionComponent, FilterContainerComponent, FilterDateComponent, FilterSearchComponent, FilterSelectComponent, FiltersPanelComponent, FormFieldComponent, FormLayoutComponent, GapComponent, IconComponent, IndicatorComponent, IndicatorSelectComponent, ListAttachmentsComponent, ListEventHistoryComponent, ListSelectComponent, LoadingStatusComponent, MobileViewDirective, NrNgxComponentLibModule, NrclBase, ObservableAborter, PageContainerComponent, PageHeaderComponent, PageStateService, RowListBase, RowListDesktopComponent, RowListMobileComponent, RowListPaginationComponent, RowListSortingComponent, SnackbarComponent, SnackbarUtilService, TabComponent, TabContentDirective, TabGroupComponent, TabLabelDirective, TagListComponent, mapToCodeDescription, unwrapFilterValue, wrapFilterValue };
2897
+ export { Aborted, ButtonComponent, CellContentComponent, CodeTable, ConfigurationService, ConfigurationSubscriberBase, DATE_FORMATS, DesktopViewDirective, DeviceViewComponent, DialogBase, DialogComponent, DialogConfirmComponent, DialogService, ExpansionPanelComponent, ExpansionPanelFooterComponent, ExpansionPanelHeaderComponent, ExpansionPanelSectionComponent, FilterContainerComponent, FilterDateComponent, FilterSearchComponent, FilterSelectComponent, FiltersPanelComponent, FormFieldComponent, FormLayoutComponent, GapComponent, IconComponent, IndicatorComponent, IndicatorSelectComponent, ListAttachmentsComponent, ListEventHistoryComponent, ListSelectComponent, LoadingStatusComponent, MobileViewDirective, NrNgxComponentLibModule, NrclBase, ObservableAborter, PageContainerComponent, PageHeaderComponent, PageStateService, PaginationBase, ResourceScheduleComponent, ResourceScheduleRowHeadingDirective, RowListBase, RowListDesktopComponent, RowListMobileComponent, RowListPaginationComponent, RowListSortingComponent, ScheduleComponent, ScheduleItemDirective, ScheduleRowHeadingDirective, SnackbarComponent, SnackbarUtilService, TabComponent, TabContentDirective, TabGroupComponent, TabLabelDirective, TagListComponent, mapToCodeDescription, unwrapFilterValue, wrapFilterValue };
2637
2898
  //# sourceMappingURL=bcgov-nr-ngx-component-lib.mjs.map