verben-ng-ui 1.2.67 → 1.2.69

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.
@@ -68,14 +68,11 @@ export class DataImportService {
68
68
  // });
69
69
  // console.time('Begin');
70
70
  let imported = [];
71
- const wb = read(event.target.result, { raw: true });
71
+ const wb = read(event.target.result, { cellDates: true });
72
72
  const sheets = wb.SheetNames;
73
73
  if (sheets.length) {
74
74
  const rows = utils.sheet_to_json(wb.Sheets[sheets[0]], {
75
- raw: false,
76
- // defval: '',
77
- // rawNumbers: true,
78
- // dateNF: 'dd/mm/yyyy',
75
+ defval: null,
79
76
  });
80
77
  imported = this.transformImportData(rows, columnDefinitions);
81
78
  // console.log('TRANSFORMED', imported);
@@ -129,4 +126,4 @@ export class DataImportService {
129
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataImportService, decorators: [{
130
127
  type: Injectable
131
128
  }], ctorParameters: () => [] });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1pbXBvcnQvZGF0YS1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFbkUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQVksR0FBd0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLGdCQUFnQixDQUFDO0lBRWpCLG9FQUFvRTtJQUNwRSxtQkFBbUIsQ0FDakIsWUFBbUMsRUFDbkMsaUJBQXdDO1FBRXhDLHdEQUF3RDtRQUN4RCxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBQ3hELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBR2hDLENBQUM7UUFFSiwyRkFBMkY7UUFDM0YsaUJBQWlCO2FBQ2QsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUM7YUFDOUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FDVixPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFDNUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO2dCQUNaLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWhDLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFB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LE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILG9DQUFvQztJQUN0QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCLEVBQUUsS0FBbUIsRUFBRSxXQUFxQjtRQUN2RSxPQUFPLENBQ0wsS0FBSyxDQUFDLE1BQU0sQ0FDVixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3RCLFdBQVcsQ0FBQyxLQUFLLENBQ2YsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxVQUFxQixDQUFDO2dCQUM1QixLQUFLLENBQUMsVUFBcUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxVQUFxQixDQUFDLENBQzlELENBQ0osQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7d0dBekpVLGlCQUFpQjs0R0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbiB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZSc7XG5pbXBvcnQgeyByZWFkLCB1dGlscywgd3JpdGVGaWxlIH0gZnJvbSAneGxzeCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhSW1wb3J0U2VydmljZTxUPiB7XG4gIGltcG9ydGVkRGF0YTogV3JpdGFibGVTaWduYWw8VFtdPiA9IHNpZ25hbChbXSk7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICAvLyBGdW5jdGlvbiB0byB0cmFuc2Zvcm0gaW1wb3J0ZWQgZGF0YSB0byBtYXRjaCB5b3VyIG1vZGVsIHN0cnVjdHVyZVxuICB0cmFuc2Zvcm1JbXBvcnREYXRhPFQ+KFxuICAgIGltcG9ydGVkRGF0YTogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIGNvbHVtbkRlZmluaXRpb25zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W11cbiAgKTogUGFydGlhbDxUPltdIHtcbiAgICAvLyBDcmVhdGUgbWFwcGluZ3MgZnJvbSBoZWFkZXIgdG8gaW1wb3J0S2V5IGFuZCBpbXBvcnRCeVxuICAgIGNvbnN0IGhlYWRlclRvSW1wb3J0S2V5TWFwID0gbmV3IE1hcDxzdHJpbmcsIGtleW9mIFQ+KCk7XG4gICAgY29uc3QgaGVhZGVyVG9JbXBvcnRCeU1hcCA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBrZXlvZiBUIHwgKChpbXBvcnRlZFJvdzogYW55KSA9PiBUW2tleW9mIFRdKVxuICAgID4oKTtcblxuICAgIC8vIEZpbHRlciBjb2x1bW4gZGVmaW5pdGlvbnMgdG8gb25seSB0aG9zZSB3aXRoIGltcG9ydEtleSBvciBpbXBvcnRCeSBhbmQgcG9wdWxhdGUgdGhlIG1hcHNcbiAgICBjb2x1bW5EZWZpbml0aW9uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuaW1wb3J0S2V5IHx8IGNvbC5pbXBvcnRCeSlcbiAgICAgIC5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGVyID1cbiAgICAgICAgICB0eXBlb2YgY29sLmhlYWRlciA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gY29sLmhlYWRlclxuICAgICAgICAgICAgOiBjb2wuaGVhZGVyKHt9KS50b1N0cmluZygpO1xuXG4gICAgICAgIGlmIChjb2wuaW1wb3J0S2V5KSB7XG4gICAgICAgICAgaGVhZGVyVG9JbXBvcnRLZXlNYXAuc2V0KGhlYWRlciwgY29sLmltcG9ydEtleSBhcyBrZXlvZiBUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wuaW1wb3J0QnkpIHtcbiAgICAgICAgICBoZWFkZXJUb0ltcG9ydEJ5TWFwLnNldChoZWFkZXIsIGNvbC5pbXBvcnRCeSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIGVhY2ggcm93IGluIHRoZSBpbXBvcnRlZCBkYXRhXG4gICAgcmV0dXJuIGltcG9ydGVkRGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRSb3c6IFBhcnRpYWw8VD4gPSB7fTtcblxuICAgICAgLy8gUHJvY2VzcyBlYWNoIGtleSBpbiB0aGUgcm93XG4gICAgICBPYmplY3QuZW50cmllcyhyb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGltcG9ydEJ5IHRyYW5zZm9ybWF0aW9uIGZpcnN0ICh0YWtlcyBwcmlvcml0eSlcbiAgICAgICAgY29uc3QgaW1wb3J0QnkgPSBoZWFkZXJUb0ltcG9ydEJ5TWFwLmdldChrZXkpO1xuXG4gICAgICAgIGlmIChpbXBvcnRCeSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0QnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgaW1wb3J0QnkgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBlbnRpcmUgaW1wb3J0ZWQgcm93XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRLZXkgPSBoZWFkZXJUb0ltcG9ydEtleU1hcC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChpbXBvcnRLZXkpIHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbaW1wb3J0S2V5XSA9IGltcG9ydEJ5KHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGltcG9ydEJ5IGlzIGEgZGlyZWN0IGtleSByZWZlcmVuY2VcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkUm93W2ltcG9ydEJ5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gaW1wb3J0S2V5IGlmIG5vIGltcG9ydEJ5IGlzIGRlZmluZWRcbiAgICAgICAgICBjb25zdCBpbXBvcnRLZXkgPSBoZWFkZXJUb0ltcG9ydEtleU1hcC5nZXQoa2V5KTtcbiAgICAgICAgICBpZiAoaW1wb3J0S2V5KSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1tpbXBvcnRLZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUm93O1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlSW1wb3J0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgLy8gcHJldmlld2VyPzogKGRhdGE6IGFueVtdKSA9PiB2b2lkLFxuICAgIGNvbHVtbkRlZmluaXRpb25zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10sXG4gICAgcGFyc2VJbXBvcnQ/OiAoZGF0YTogYW55KSA9PiBQYXJ0aWFsPFQ+W11cbiAgKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIC8vIGNvbnN0IHdiID0gcmVhZChldmVudC50YXJnZXQucmVzdWx0LCB7XG4gICAgICAvLyAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgLy8gICByYXc6IHRydWUsXG4gICAgICAvLyAgIGNlbGxUZXh0OiB0cnVlLFxuICAgICAgLy8gICBjZWxsRm9ybXVsYTogZmFsc2UsXG4gICAgICAvLyAgIGNlbGxORjogZmFsc2UsXG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGNvbnNvbGUudGltZSgnQmVnaW4nKTtcbiAgICAgIGxldCBpbXBvcnRlZDogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHdiID0gcmVhZChldmVudC50YXJnZXQucmVzdWx0LCB7IHJhdzogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHNoZWV0cyA9IHdiLlNoZWV0TmFtZXM7XG4gICAgICBpZiAoc2hlZXRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCByb3dzID0gdXRpbHMuc2hlZXRfdG9fanNvbih3Yi5TaGVldHNbc2hlZXRzWzBdXSwge1xuICAgICAgICAgIHJhdzogZmFsc2UsXG4gICAgICAgICAgLy8gZGVmdmFsOiAnJyxcbiAgICAgICAgICAvLyByYXdOdW1iZXJzOiB0cnVlLFxuICAgICAgICAgIC8vIGRhdGVORjogJ2RkL21tL3l5eXknLFxuICAgICAgICB9KSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG5cbiAgICAgICAgaW1wb3J0ZWQgPSB0aGlzLnRyYW5zZm9ybUltcG9ydERhdGEocm93cywgY29sdW1uRGVmaW5pdGlvbnMpIGFzIFRbXTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1RSQU5TRk9STUVEJywgaW1wb3J0ZWQpO1xuXG4gICAgICAgIGlmIChwYXJzZUltcG9ydCkge1xuICAgICAgICAgIGltcG9ydGVkID0gcGFyc2VJbXBvcnQoaW1wb3J0ZWQpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdQQVJTRUQnLCBpbXBvcnRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmlld2VyKGltcG9ydGVkKTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbXBvcnRlZCBkYXRhOicsIEpTT04uc3RyaW5naWZ5KGltcG9ydGVkLCBudWxsLCAyKSk7XG4gICAgICAvLyBjb25zb2xlLnRpbWUoJ1N0YXJ0IFByb2Nlc3MnKTtcbiAgICAgIHRoaXMuaW1wb3J0ZWREYXRhLnNldChpbXBvcnRlZCk7XG4gICAgICAvLyBjb25zb2xlLnRpbWVFbmQoJ0JlZ2luJyk7XG4gICAgICByZXR1cm4gaW1wb3J0ZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xuICB9XG5cbiAgaGFuZGxlVGVtcGxhdGVFeHBvcnQoZmllbGRzOiBzdHJpbmdbXSwgdGl0bGU6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKGZpZWxkcyk7XG4gICAgY29uc3Qgd2IgPSB1dGlscy5ib29rX25ldygpO1xuICAgIGNvbnN0IHdzOiBhbnkgPSB1dGlscy5qc29uX3RvX3NoZWV0KFtdKTtcbiAgICB1dGlscy5zaGVldF9hZGRfYW9hKHdzLCBbZmllbGRzXSk7XG4gICAgLy8gdXRpbHMuc2hlZXRfYWRkX2pzb24od3MsIHRoaXMuX2RhdGEsIHsgb3JpZ2luOiAnQTInLCBza2lwSGVhZGVyOiB0cnVlIH0pO1xuICAgIHV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdiLCB3cywgdGl0bGUpO1xuICAgIHdyaXRlRmlsZSh3YiwgdGl0bGUgKyAnLXRlbXBsYXRlLicgKyAneGxzeCcpO1xuICB9XG5cbiAgYWRkUm93KGV2ZW50OiB7IGluZGV4OiBudW1iZXI7IGtleTogc3RyaW5nIHwgbnVtYmVyOyBkYXRhOiBQYXJ0aWFsPFQ+IH0pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgdGhpcy5pbXBvcnRlZERhdGEudXBkYXRlKChkYXQpID0+IHtcbiAgICAgIC8vIGRhdFtldmVudC5pbmRleF0gPSB7IC4uLmRhdFtldmVudC5pbmRleF0sIC4uLmV2ZW50LmRhdGEgfTtcbiAgICAgIHJldHVybiBkYXQubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIGlmIChpID09PSBldmVudC5pbmRleCkge1xuICAgICAgICAgIHJldHVybiB7IC4uLmQsIC4uLmV2ZW50LmRhdGEgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaW1wb3J0ZWREYXRhKCkpO1xuICB9XG5cbiAgaXNEdXBsaWNhdGUoZGF0dW06IFBhcnRpYWw8VD4sIGFycmF5OiBQYXJ0aWFsPFQ+W10sIGlkZW50aWZpZXJzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiAoXG4gICAgICBhcnJheS5maWx0ZXIoXG4gICAgICAgIChkYXQpID0+XG4gICAgICAgICAgaWRlbnRpZmllcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGlkZW50aWZpZXJzLmV2ZXJ5KFxuICAgICAgICAgICAgKGlkZW50aWZpZXIpID0+XG4gICAgICAgICAgICAgIGRhdHVtW2lkZW50aWZpZXIgYXMga2V5b2YgVF0gJiZcbiAgICAgICAgICAgICAgZGF0dW1baWRlbnRpZmllciBhcyBrZXlvZiBUXSA9PT0gZGF0W2lkZW50aWZpZXIgYXMga2V5b2YgVF1cbiAgICAgICAgICApXG4gICAgICApLmxlbmd0aCA+IDFcbiAgICApO1xuICB9XG5cbiAgY2xlYXJEYXRhKCkge1xuICAgIHRoaXMuaW1wb3J0ZWREYXRhLnNldChbXSk7XG4gIH1cbn1cbiJdfQ==
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1pbXBvcnQvZGF0YS1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFbkUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQVksR0FBd0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLGdCQUFnQixDQUFDO0lBRWpCLG9FQUFvRTtJQUNwRSxtQkFBbUIsQ0FDakIsWUFBbUMsRUFDbkMsaUJBQXdDO1FBRXhDLHdEQUF3RDtRQUN4RCxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBQ3hELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBR2hDLENBQUM7UUFFSiwyRkFBMkY7UUFDM0YsaUJBQWlCO2FBQ2QsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUM7YUFDOUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FDVixPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFDNUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO2dCQUNaLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWhDLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxTQUFvQixDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUVELElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCwwQ0FBMEM7UUFDMUMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDOUIsTUFBTSxjQUFjLEdBQWUsRUFBRSxDQUFDO1lBRXRDLDhCQUE4QjtZQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLHFFQUFxRTtnQkFDckUsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUU5QyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNiLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7d0JBQ25DLGlFQUFpRTt3QkFDakUsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNoRCxJQUFJLFNBQVMsRUFBRSxDQUFDOzRCQUNkLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzVDLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLHFDQUFxQzt3QkFDckMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDbkMsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sbURBQW1EO29CQUNuRCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2hELElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ2QsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDcEMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQ1YsSUFBVTtJQUNWLHFDQUFxQztJQUNyQyxpQkFBd0MsRUFDeEMsV0FBeUM7UUFFekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDN0IseUNBQXlDO1lBQ3pDLG9CQUFvQjtZQUNwQixlQUFlO1lBQ2Ysb0JBQW9CO1lBQ3BCLHdCQUF3QjtZQUN4QixtQkFBbUI7WUFDbkIsTUFBTTtZQUNOLHlCQUF5QjtZQUN6QixJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7WUFDekIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDMUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztZQUM3QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNyRCxNQUFNLEVBQUUsSUFBSTtpQkFDYixDQUEwQixDQUFDO2dCQUU1QixRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBUSxDQUFDO2dCQUNwRSx3Q0FBd0M7Z0JBRXhDLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2pDLG1DQUFtQztnQkFDckMsQ0FBQztnQkFDRCx1QkFBdUI7WUFDekIsQ0FBQztZQUNELG9FQUFvRTtZQUNwRSxpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEMsNEJBQTRCO1lBQzVCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFnQixFQUFFLEtBQWE7UUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsTUFBTSxFQUFFLEdBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbEMsNEVBQTRFO1FBQzVFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWdFO1FBQ3JFLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQy9CLDZEQUE2RDtZQUM3RCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDdEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILG9DQUFvQztJQUN0QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCLEVBQUUsS0FBbUIsRUFBRSxXQUFxQjtRQUN2RSxPQUFPLENBQ0wsS0FBSyxDQUFDLE1BQU0sQ0FDVixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3RCLFdBQVcsQ0FBQyxLQUFLLENBQ2YsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxVQUFxQixDQUFDO2dCQUM1QixLQUFLLENBQUMsVUFBcUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxVQUFxQixDQUFDLENBQzlELENBQ0osQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7d0dBdEpVLGlCQUFpQjs0R0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbiB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZSc7XG5pbXBvcnQgeyByZWFkLCB1dGlscywgd3JpdGVGaWxlIH0gZnJvbSAneGxzeCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhSW1wb3J0U2VydmljZTxUPiB7XG4gIGltcG9ydGVkRGF0YTogV3JpdGFibGVTaWduYWw8VFtdPiA9IHNpZ25hbChbXSk7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICAvLyBGdW5jdGlvbiB0byB0cmFuc2Zvcm0gaW1wb3J0ZWQgZGF0YSB0byBtYXRjaCB5b3VyIG1vZGVsIHN0cnVjdHVyZVxuICB0cmFuc2Zvcm1JbXBvcnREYXRhPFQ+KFxuICAgIGltcG9ydGVkRGF0YTogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIGNvbHVtbkRlZmluaXRpb25zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W11cbiAgKTogUGFydGlhbDxUPltdIHtcbiAgICAvLyBDcmVhdGUgbWFwcGluZ3MgZnJvbSBoZWFkZXIgdG8gaW1wb3J0S2V5IGFuZCBpbXBvcnRCeVxuICAgIGNvbnN0IGhlYWRlclRvSW1wb3J0S2V5TWFwID0gbmV3IE1hcDxzdHJpbmcsIGtleW9mIFQ+KCk7XG4gICAgY29uc3QgaGVhZGVyVG9JbXBvcnRCeU1hcCA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBrZXlvZiBUIHwgKChpbXBvcnRlZFJvdzogYW55KSA9PiBUW2tleW9mIFRdKVxuICAgID4oKTtcblxuICAgIC8vIEZpbHRlciBjb2x1bW4gZGVmaW5pdGlvbnMgdG8gb25seSB0aG9zZSB3aXRoIGltcG9ydEtleSBvciBpbXBvcnRCeSBhbmQgcG9wdWxhdGUgdGhlIG1hcHNcbiAgICBjb2x1bW5EZWZpbml0aW9uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuaW1wb3J0S2V5IHx8IGNvbC5pbXBvcnRCeSlcbiAgICAgIC5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGVyID1cbiAgICAgICAgICB0eXBlb2YgY29sLmhlYWRlciA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gY29sLmhlYWRlclxuICAgICAgICAgICAgOiBjb2wuaGVhZGVyKHt9KS50b1N0cmluZygpO1xuXG4gICAgICAgIGlmIChjb2wuaW1wb3J0S2V5KSB7XG4gICAgICAgICAgaGVhZGVyVG9JbXBvcnRLZXlNYXAuc2V0KGhlYWRlciwgY29sLmltcG9ydEtleSBhcyBrZXlvZiBUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wuaW1wb3J0QnkpIHtcbiAgICAgICAgICBoZWFkZXJUb0ltcG9ydEJ5TWFwLnNldChoZWFkZXIsIGNvbC5pbXBvcnRCeSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIGVhY2ggcm93IGluIHRoZSBpbXBvcnRlZCBkYXRhXG4gICAgcmV0dXJuIGltcG9ydGVkRGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRSb3c6IFBhcnRpYWw8VD4gPSB7fTtcblxuICAgICAgLy8gUHJvY2VzcyBlYWNoIGtleSBpbiB0aGUgcm93XG4gICAgICBPYmplY3QuZW50cmllcyhyb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGltcG9ydEJ5IHRyYW5zZm9ybWF0aW9uIGZpcnN0ICh0YWtlcyBwcmlvcml0eSlcbiAgICAgICAgY29uc3QgaW1wb3J0QnkgPSBoZWFkZXJUb0ltcG9ydEJ5TWFwLmdldChrZXkpO1xuXG4gICAgICAgIGlmIChpbXBvcnRCeSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0QnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgaW1wb3J0QnkgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBlbnRpcmUgaW1wb3J0ZWQgcm93XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRLZXkgPSBoZWFkZXJUb0ltcG9ydEtleU1hcC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChpbXBvcnRLZXkpIHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSb3dbaW1wb3J0S2V5XSA9IGltcG9ydEJ5KHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGltcG9ydEJ5IGlzIGEgZGlyZWN0IGtleSByZWZlcmVuY2VcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkUm93W2ltcG9ydEJ5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gaW1wb3J0S2V5IGlmIG5vIGltcG9ydEJ5IGlzIGRlZmluZWRcbiAgICAgICAgICBjb25zdCBpbXBvcnRLZXkgPSBoZWFkZXJUb0ltcG9ydEtleU1hcC5nZXQoa2V5KTtcbiAgICAgICAgICBpZiAoaW1wb3J0S2V5KSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1tpbXBvcnRLZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUm93O1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlSW1wb3J0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgLy8gcHJldmlld2VyPzogKGRhdGE6IGFueVtdKSA9PiB2b2lkLFxuICAgIGNvbHVtbkRlZmluaXRpb25zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10sXG4gICAgcGFyc2VJbXBvcnQ/OiAoZGF0YTogYW55KSA9PiBQYXJ0aWFsPFQ+W11cbiAgKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIC8vIGNvbnN0IHdiID0gcmVhZChldmVudC50YXJnZXQucmVzdWx0LCB7XG4gICAgICAvLyAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgLy8gICByYXc6IHRydWUsXG4gICAgICAvLyAgIGNlbGxUZXh0OiB0cnVlLFxuICAgICAgLy8gICBjZWxsRm9ybXVsYTogZmFsc2UsXG4gICAgICAvLyAgIGNlbGxORjogZmFsc2UsXG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGNvbnNvbGUudGltZSgnQmVnaW4nKTtcbiAgICAgIGxldCBpbXBvcnRlZDogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHdiID0gcmVhZChldmVudC50YXJnZXQucmVzdWx0LCB7IGNlbGxEYXRlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHNoZWV0cyA9IHdiLlNoZWV0TmFtZXM7XG4gICAgICBpZiAoc2hlZXRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCByb3dzID0gdXRpbHMuc2hlZXRfdG9fanNvbih3Yi5TaGVldHNbc2hlZXRzWzBdXSwge1xuICAgICAgICAgIGRlZnZhbDogbnVsbCxcbiAgICAgICAgfSkgYXMgUmVjb3JkPHN0cmluZywgYW55PltdO1xuXG4gICAgICAgIGltcG9ydGVkID0gdGhpcy50cmFuc2Zvcm1JbXBvcnREYXRhKHJvd3MsIGNvbHVtbkRlZmluaXRpb25zKSBhcyBUW107XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdUUkFOU0ZPUk1FRCcsIGltcG9ydGVkKTtcblxuICAgICAgICBpZiAocGFyc2VJbXBvcnQpIHtcbiAgICAgICAgICBpbXBvcnRlZCA9IHBhcnNlSW1wb3J0KGltcG9ydGVkKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnUEFSU0VEJywgaW1wb3J0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZpZXdlcihpbXBvcnRlZCk7XG4gICAgICB9XG4gICAgICAvLyBjb25zb2xlLmxvZygnSW1wb3J0ZWQgZGF0YTonLCBKU09OLnN0cmluZ2lmeShpbXBvcnRlZCwgbnVsbCwgMikpO1xuICAgICAgLy8gY29uc29sZS50aW1lKCdTdGFydCBQcm9jZXNzJyk7XG4gICAgICB0aGlzLmltcG9ydGVkRGF0YS5zZXQoaW1wb3J0ZWQpO1xuICAgICAgLy8gY29uc29sZS50aW1lRW5kKCdCZWdpbicpO1xuICAgICAgcmV0dXJuIGltcG9ydGVkO1xuICAgIH07XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgfVxuXG4gIGhhbmRsZVRlbXBsYXRlRXhwb3J0KGZpZWxkczogc3RyaW5nW10sIHRpdGxlOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZyhmaWVsZHMpO1xuICAgIGNvbnN0IHdiID0gdXRpbHMuYm9va19uZXcoKTtcbiAgICBjb25zdCB3czogYW55ID0gdXRpbHMuanNvbl90b19zaGVldChbXSk7XG4gICAgdXRpbHMuc2hlZXRfYWRkX2FvYSh3cywgW2ZpZWxkc10pO1xuICAgIC8vIHV0aWxzLnNoZWV0X2FkZF9qc29uKHdzLCB0aGlzLl9kYXRhLCB7IG9yaWdpbjogJ0EyJywgc2tpcEhlYWRlcjogdHJ1ZSB9KTtcbiAgICB1dGlscy5ib29rX2FwcGVuZF9zaGVldCh3Yiwgd3MsIHRpdGxlKTtcbiAgICB3cml0ZUZpbGUod2IsIHRpdGxlICsgJy10ZW1wbGF0ZS4nICsgJ3hsc3gnKTtcbiAgfVxuXG4gIGFkZFJvdyhldmVudDogeyBpbmRleDogbnVtYmVyOyBrZXk6IHN0cmluZyB8IG51bWJlcjsgZGF0YTogUGFydGlhbDxUPiB9KSB7XG4gICAgLy8gY29uc29sZS5sb2coZXZlbnQpO1xuICAgIHRoaXMuaW1wb3J0ZWREYXRhLnVwZGF0ZSgoZGF0KSA9PiB7XG4gICAgICAvLyBkYXRbZXZlbnQuaW5kZXhdID0geyAuLi5kYXRbZXZlbnQuaW5kZXhdLCAuLi5ldmVudC5kYXRhIH07XG4gICAgICByZXR1cm4gZGF0Lm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gZXZlbnQuaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5kLCAuLi5ldmVudC5kYXRhIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmltcG9ydGVkRGF0YSgpKTtcbiAgfVxuXG4gIGlzRHVwbGljYXRlKGRhdHVtOiBQYXJ0aWFsPFQ+LCBhcnJheTogUGFydGlhbDxUPltdLCBpZGVudGlmaWVyczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXJyYXkuZmlsdGVyKFxuICAgICAgICAoZGF0KSA9PlxuICAgICAgICAgIGlkZW50aWZpZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBpZGVudGlmaWVycy5ldmVyeShcbiAgICAgICAgICAgIChpZGVudGlmaWVyKSA9PlxuICAgICAgICAgICAgICBkYXR1bVtpZGVudGlmaWVyIGFzIGtleW9mIFRdICYmXG4gICAgICAgICAgICAgIGRhdHVtW2lkZW50aWZpZXIgYXMga2V5b2YgVF0gPT09IGRhdFtpZGVudGlmaWVyIGFzIGtleW9mIFRdXG4gICAgICAgICAgKVxuICAgICAgKS5sZW5ndGggPiAxXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyRGF0YSgpIHtcbiAgICB0aGlzLmltcG9ydGVkRGF0YS5zZXQoW10pO1xuICB9XG59XG4iXX0=
@@ -203,11 +203,13 @@ export class DatePickerComponent {
203
203
  confirm() {
204
204
  if (!this.tempSelectedDate)
205
205
  return;
206
- if (this.isDisabled(this.tempSelectedDate))
207
- return;
208
206
  const hours = Number(this.selectedHour);
209
207
  const minutes = Number(this.selectedMinute);
208
+ // Apply selected time FIRST
210
209
  this.tempSelectedDate.setHours(hours, minutes, 0, 0);
210
+ // THEN validate
211
+ if (this.isDisabled(this.tempSelectedDate))
212
+ return;
211
213
  this.selectedDate = new Date(this.tempSelectedDate);
212
214
  this.date = this.selectedDate;
213
215
  const pad = (n) => n.toString().padStart(2, '0');
@@ -303,11 +305,19 @@ export class DatePickerComponent {
303
305
  sanitizeDateString(value) {
304
306
  return value?.endsWith('Z') ? value.slice(0, -1) : value;
305
307
  }
308
+ // isDisabled(day: Date | string): boolean {
309
+ // const dayDate = this.toDate(day);
310
+ // if (this.minDate && dayDate < this.stripTime(this.toDate(this.minDate)))
311
+ // return true;
312
+ // if (this.maxDate && dayDate > this.stripTime(this.toDate(this.maxDate)))
313
+ // return true;
314
+ // return false;
315
+ // }
306
316
  isDisabled(day) {
307
- const dayDate = this.toDate(day);
308
- if (this.minDate && dayDate < this.stripTime(this.toDate(this.minDate)))
317
+ const dayDate = this.stripTime(day);
318
+ if (this.minDate && dayDate < this.stripTime(this.minDate))
309
319
  return true;
310
- if (this.maxDate && dayDate > this.stripTime(this.toDate(this.maxDate)))
320
+ if (this.maxDate && dayDate > this.stripTime(this.maxDate))
311
321
  return true;
312
322
  return false;
313
323
  }
@@ -320,6 +330,24 @@ export class DatePickerComponent {
320
330
  return value;
321
331
  return new Date(this.sanitizeDateString(value));
322
332
  }
333
+ // toDate(value: Date | string): Date {
334
+ // if (value instanceof Date) return value;
335
+ // const sanitized = this.sanitizeDateString(value);
336
+ // const [datePart, timePart] = sanitized.split('T');
337
+ // const [year, month, day] = datePart.split('-').map(Number);
338
+ // if (!timePart) {
339
+ // return new Date(year, month - 1, day);
340
+ // }
341
+ // const [hours, minutes, seconds] = timePart.split(':').map(Number);
342
+ // return new Date(
343
+ // year,
344
+ // month - 1,
345
+ // day,
346
+ // hours || 0,
347
+ // minutes || 0,
348
+ // seconds || 0,
349
+ // );
350
+ // }
323
351
  is24Hour = true;
324
352
  selectTemporaryDate(day) {
325
353
  if (!this.tempSelectedDate)
@@ -443,4 +471,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
443
471
  type: HostListener,
444
472
  args: ['document:click', ['$event.target']]
445
473
  }] } });
446
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQWN6RSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsTUFBTSxHQUFHLFlBQVksQ0FBQztJQUN0QixPQUFPLENBQVE7SUFDZixPQUFPLENBQVE7SUFDZixRQUFRLEdBQWEsS0FBSyxDQUFDO0lBQzNCLE9BQU8sR0FBWSxNQUFNLENBQUM7SUFDMUIsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzdCLGVBQWUsR0FBVyxlQUFlLENBQUM7SUFDMUMsZ0JBQWdCLEdBQVcsZ0JBQWdCLENBQUM7SUFDNUMsSUFBSSxHQUF5QixJQUFJLENBQUM7SUFDbEMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixZQUFZLEdBQWtCLEdBQUcsQ0FBQztJQUVsQyxlQUFlLEdBQVcsT0FBTyxDQUFDO0lBQ2xDLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFL0IsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFFdkQsbUJBQW1C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c0JBQW5CLE1BQU07Z0JBRVAsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHbEQsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkEwY25ELGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEcm9wZG93bkNoYW5nZUV2ZW50IH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kcm9wLWRvd24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGF0ZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgZGF0ZSc7XG4gIEBJbnB1dCgpIGZvcm1hdCA9ICdNTS9ERC9ZWVlZJztcbiAgQElucHV0KCkgbWluRGF0ZT86IERhdGU7XG4gIEBJbnB1dCgpIG1heERhdGU/OiBEYXRlO1xuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYmdDb2xvcj86IHN0cmluZyA9ICcjZmZmJztcbiAgQElucHV0KCkgYm9yZGVyPzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHVzZURyb3Bkb3duczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHllYXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBhIHllYXInO1xuICBASW5wdXQoKSBtb250aFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGEgbW9udGgnO1xuICBASW5wdXQoKSBkYXRlOiBEYXRlIHwgbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gIEBJbnB1dCgpIHNob3dUaW1lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG92ZXJsYXlXaWR0aDogbnVtYmVyIHwgbnVsbCA9IDQwMDtcblxuICBASW5wdXQoKSBkYXRlUGlja2VyV2lkdGg6IHN0cmluZyA9ICc0MDBweCc7XG4gIEBJbnB1dCgpIHVzZURlZmF1bHREYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZGF0ZVBpY2tlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXJFeHBhbnNpb24nLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZGF0ZVBpY2tlckV4cGFuc2lvbiE6IEVsZW1lbnRSZWY7XG5cbiAgeWVhclJhbmdlOiBudW1iZXJbXSA9IFtdO1xuICBmaWx0ZXJlZFllYXJSYW5nZTogbnVtYmVyW10gPSBbXTtcblxuICBzZWxlY3RlZERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgdGVtcFNlbGVjdGVkRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHNob3dDYWxlbmRhciA9IGZhbHNlO1xuXG4gIHdlZWtEYXlzID0gWydNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsICdTdW4nXTtcbiAgbW9udGhzID0gW1xuICAgICdKYW51YXJ5JyxcbiAgICAnRmVicnVhcnknLFxuICAgICdNYXJjaCcsXG4gICAgJ0FwcmlsJyxcbiAgICAnTWF5JyxcbiAgICAnSnVuZScsXG4gICAgJ0p1bHknLFxuICAgICdBdWd1c3QnLFxuICAgICdTZXB0ZW1iZXInLFxuICAgICdPY3RvYmVyJyxcbiAgICAnTm92ZW1iZXInLFxuICAgICdEZWNlbWJlcicsXG4gIF07XG5cbiAgc2VsZWN0ZWRNb250aDogbnVtYmVyID0gMTtcbiAgc2VsZWN0ZWRNb250aFN0cmluZzogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkWWVhcjogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuXG4gIGRheXNJbk1vbnRoOiAoRGF0ZSB8IG51bGwpW10gPSBbXTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgIHRoaXMuZGF0ZSA9IHBhcnNlZERhdGU7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgIHRoaXMuaW5pdFRpbWVGcm9tRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5kYXRlKSB7XG4gICAgICBsZXQgZCA9IHRoaXMuZGF0ZTtcbiAgICAgIGlmICh0eXBlb2YgZCA9PT0gJ3N0cmluZycpIGQgPSB0aGlzLnNhbml0aXplRGF0ZVN0cmluZyhkKTtcblxuICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGQpO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICBpc1NhbWVEYXRlKGQxOiBEYXRlLCBkMjogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBkMS5nZXRGdWxsWWVhcigpID09PSBkMi5nZXRGdWxsWWVhcigpICYmXG4gICAgICBkMS5nZXRNb250aCgpID09PSBkMi5nZXRNb250aCgpICYmXG4gICAgICBkMS5nZXREYXRlKCkgPT09IGQyLmdldERhdGUoKVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBlbmRZZWFyID0gY3VycmVudFllYXIgKyAxMDtcbiAgICB0aGlzLnllYXJSYW5nZSA9IEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogZW5kWWVhciAtIDE5NjAgKyAxIH0sXG4gICAgICAoXywgaSkgPT4gMTk2MCArIGksXG4gICAgKTtcbiAgICB0aGlzLnllYXJSYW5nZS5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0ZSAmJiB0aGlzLnVzZURlZmF1bHREYXRlKSB7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgcGFkID0gKG46IG51bWJlcikgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0ZVN0cmluZyA9IGAke25vdy5nZXRGdWxsWWVhcigpfS0ke3BhZChcbiAgICAgICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgICAgKX0tJHtwYWQobm93LmdldERhdGUoKSl9VCR7cGFkKG5vdy5nZXRIb3VycygpKX06JHtwYWQoXG4gICAgICAgIG5vdy5nZXRNaW51dGVzKCksXG4gICAgICApfToke3BhZChub3cuZ2V0U2Vjb25kcygpKX1gO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGxvY2FsRGF0ZVN0cmluZyk7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShsb2NhbERhdGVTdHJpbmcpO1xuICAgICAgdGhpcy5kYXRlID0gdGhpcy5zZWxlY3RlZERhdGU7XG5cbiAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gbm93LmdldEhvdXJzKCk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBub3cuZ2V0TWludXRlcygpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UobG9jYWxEYXRlU3RyaW5nKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZURheXNJbk1vbnRoKCk7XG4gIH1cblxuICBnZXQgZGlzcGxheURhdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJzZWREYXRlID1cbiAgICAgIHR5cGVvZiB0aGlzLmRhdGUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUodGhpcy5kYXRlKSA6IHRoaXMuZGF0ZTtcbiAgICByZXR1cm4gcGFyc2VkRGF0ZSA/IHRoaXMuZm9ybWF0RGF0ZShwYXJzZWREYXRlLCB0aGlzLmZvcm1hdCkgOiAnJztcbiAgfVxuXG4gIHRlbXBUaW1lOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRIb3VyID0gJzAwJztcbiAgc2VsZWN0ZWRNaW51dGUgPSAnMDAnO1xuXG4gIHNob3dIb3VyT3B0aW9ucyA9IGZhbHNlO1xuICBzaG93TWludXRlT3B0aW9ucyA9IGZhbHNlO1xuXG4gIGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IFN0cmluZyhpKS5wYWRTdGFydCgyLCAnMCcpKTtcbiAgbWludXRlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDYwIH0sIChfLCBpKSA9PiBTdHJpbmcoaSkucGFkU3RhcnQoMiwgJzAnKSk7XG5cbiAgdG9nZ2xlSG91ckRyb3Bkb3duKCkge1xuICAgIHRoaXMuc2hvd0hvdXJPcHRpb25zID0gIXRoaXMuc2hvd0hvdXJPcHRpb25zO1xuICAgIHRoaXMuc2hvd01pbnV0ZU9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHRvZ2dsZU1pbnV0ZURyb3Bkb3duKCkge1xuICAgIHRoaXMuc2hvd01pbnV0ZU9wdGlvbnMgPSAhdGhpcy5zaG93TWludXRlT3B0aW9ucztcbiAgICB0aGlzLnNob3dIb3VyT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgc2VsZWN0SG91cihoOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGg7XG4gICAgdGhpcy5zaG93SG91ck9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHNlbGVjdE1pbnV0ZShtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbTtcbiAgICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVDYWxlbmRhcigpIHtcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9ICF0aGlzLnNob3dDYWxlbmRhcjtcblxuICAgIGlmICh0aGlzLmRhdGUpIHtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IHRoaXMudXNlRGVmYXVsdERhdGUgPyBuZXcgRGF0ZSgpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZW1wU2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aFN0cmluZyA9IHRoaXMubW9udGhzW3RoaXMuc2VsZWN0ZWRNb250aF07XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIHRoaXMuZ2VuZXJhdGVEYXlzSW5Nb250aCgpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1RpbWUgJiYgIXRoaXMudGVtcFRpbWUpIHtcbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGlzVG9kYXkgPVxuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgJiYgdGhpcy5pc1NhbWVEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSwgdG9kYXkpO1xuXG4gICAgICBjb25zdCBob3VycyA9IGlzVG9kYXkgPyB0b2RheS5nZXRIb3VycygpIDogMDtcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0TWludXRlcygpIDogMDtcblxuICAgICAgaWYgKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSkge1xuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIH1cbiAgfVxuXG4gIGluaXRUaW1lRnJvbURhdGUoZGF0ZTogRGF0ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZT8uc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICB9XG4gIGNsZWFyRGF0ZSgpIHtcbiAgICB0aGlzLmRhdGUgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBudWxsO1xuICAgIHRoaXMudGVtcFRpbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICcwMCc7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICcwMCc7XG5cbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChudWxsKTtcblxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcblxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gIH1cblxuICBmaXhUb1VUQyhkYXRlVmFsdWU6IGFueSkge1xuICAgIGlmICghZGF0ZVZhbHVlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGRhdGUgPSBkYXRlVmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVZhbHVlIDogbmV3IERhdGUoZGF0ZVZhbHVlKTtcbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgIERhdGUuVVRDKFxuICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgZGF0ZS5nZXREYXRlKCksXG4gICAgICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgIGRhdGUuZ2V0U2Vjb25kcygpLFxuICAgICAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29uZmlybSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQodGhpcy50ZW1wU2VsZWN0ZWREYXRlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaG91cnMgPSBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBOdW1iZXIodGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG5cbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUpO1xuICAgIHRoaXMuZGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlO1xuXG4gICAgY29uc3QgcGFkID0gKG46IG51bWJlcikgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbG9jYWxEYXRlU3RyaW5nID0gYCR7dGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKX0tJHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICApfS0ke3BhZCh0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCkpfVQke3BhZChcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmdldEhvdXJzKCksXG4gICAgKX06JHtwYWQodGhpcy5zZWxlY3RlZERhdGUuZ2V0TWludXRlcygpKX06JHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgKX1gO1xuXG4gICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgIHRoaXMub25DaGFuZ2UobG9jYWxEYXRlU3RyaW5nKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgfVxuXG4gIHNldFRvU3RhcnRPZkRheSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5zZWxlY3RlZEhvdXIgPSAnMDAnO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAnMDAnO1xuXG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gIH1cblxuICBzZXRUb0VuZE9mRGF5KCkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm47XG5cbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICcyMyc7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICc1OSc7XG5cbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUpO1xuICB9XG5cbiAgcHJldmlvdXNNb250aCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGgtLTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE1vbnRoIDwgMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gMTE7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhci0tO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlRGF5c0luTW9udGgoKTtcbiAgfVxuXG4gIG5leHRNb250aCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGgrKztcbiAgICBpZiAodGhpcy5zZWxlY3RlZE1vbnRoID4gMTEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IDA7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhcisrO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlRGF5c0luTW9udGgoKTtcbiAgfVxuXG4gIG9uRHJvcGRvd25ZZWFyQ2hhbmdlKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFllYXIgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlRGF5c0luTW9udGgoKTtcbiAgfVxuXG4gIG9uRHJvcGRvd25Nb250aENoYW5nZShldmVudDogRHJvcGRvd25DaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMubW9udGhzLmluZGV4T2YoZXZlbnQudmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpO1xuICAgIHRoaXMuZ2VuZXJhdGVEYXlzSW5Nb250aCgpO1xuICB9XG5cbiAgdXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRNb250aCh0aGlzLnNlbGVjdGVkTW9udGgpO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRGdWxsWWVhcih0aGlzLnNlbGVjdGVkWWVhcik7XG4gIH1cblxuICBnZW5lcmF0ZURheXNJbk1vbnRoKCkge1xuICAgIGNvbnN0IGRheXM6IChEYXRlIHwgbnVsbClbXSA9IFtdO1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLnNlbGVjdGVkWWVhcjtcbiAgICBjb25zdCBtb250aCA9IHRoaXMuc2VsZWN0ZWRNb250aDtcblxuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKTtcbiAgICBjb25zdCBvZmZzZXQgPSBmaXJzdERheU9mTW9udGggPT09IDAgPyA2IDogZmlyc3REYXlPZk1vbnRoIC0gMTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgIGRheXMucHVzaChudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbERheXMgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbERheXM7IGkrKykge1xuICAgICAgZGF5cy5wdXNoKG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXlzSW5Nb250aCA9IGRheXM7XG4gIH1cblxuICAvLyBnZXREYXlzSW5Nb250aCgpOiAoRGF0ZSB8IG51bGwpW10ge1xuICAvLyAgIGNvbnN0IGRheXM6IChEYXRlIHwgbnVsbClbXSA9IFtdO1xuICAvLyAgIGNvbnN0IHllYXIgPSB0aGlzLnNlbGVjdGVkWWVhcjtcbiAgLy8gICBjb25zdCBtb250aCA9IHRoaXMuc2VsZWN0ZWRNb250aDtcblxuICAvLyAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKTtcbiAgLy8gICBjb25zdCBvZmZzZXQgPSBmaXJzdERheU9mTW9udGggPT09IDAgPyA2IDogZmlyc3REYXlPZk1vbnRoIC0gMTtcblxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgLy8gICAgIGRheXMucHVzaChudWxsKTtcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zdCB0b3RhbERheXMgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbERheXM7IGkrKykge1xuICAvLyAgICAgY29uc3QgZGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpO1xuICAvLyAgICAgZGF5cy5wdXNoKGRheSk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBkYXlzO1xuICAvLyB9XG5cbiAgc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZT8uZW5kc1dpdGgoJ1onKSA/IHZhbHVlLnNsaWNlKDAsIC0xKSA6IHZhbHVlO1xuICB9XG5cbiAgaXNEaXNhYmxlZChkYXk6IERhdGUgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXlEYXRlID0gdGhpcy50b0RhdGUoZGF5KTtcblxuICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgZGF5RGF0ZSA8IHRoaXMuc3RyaXBUaW1lKHRoaXMudG9EYXRlKHRoaXMubWluRGF0ZSkpKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMubWF4RGF0ZSAmJiBkYXlEYXRlID4gdGhpcy5zdHJpcFRpbWUodGhpcy50b0RhdGUodGhpcy5tYXhEYXRlKSkpXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaXBUaW1lKGRhdGU6IERhdGUgfCBzdHJpbmcpOiBEYXRlIHtcbiAgICBjb25zdCBkID0gdGhpcy50b0RhdGUoZGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgZC5nZXRNb250aCgpLCBkLmdldERhdGUoKSk7XG4gIH1cblxuICB0b0RhdGUodmFsdWU6IERhdGUgfCBzdHJpbmcpOiBEYXRlIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBpczI0SG91cjogYm9vbGVhbiA9IHRydWU7XG5cbiAgc2VsZWN0VGVtcG9yYXJ5RGF0ZShkYXk6IERhdGUpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUoZGF5KTtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKGRheSkpIHJldHVybjtcblxuICAgIGNvbnN0IGlzTmV3RGF0ZSA9ICF0aGlzLmlzU2FtZURhdGUodGhpcy50ZW1wU2VsZWN0ZWREYXRlLCBkYXkpO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRheSk7XG5cbiAgICBpZiAodGhpcy5zaG93VGltZSkge1xuICAgICAgaWYgKGlzTmV3RGF0ZSkge1xuICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPVxuICAgICAgICAgIGRheS5nZXRGdWxsWWVhcigpID09PSB0b2RheS5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgZGF5LmdldE1vbnRoKCkgPT09IHRvZGF5LmdldE1vbnRoKCkgJiZcbiAgICAgICAgICBkYXkuZ2V0RGF0ZSgpID09PSB0b2RheS5nZXREYXRlKCk7XG5cbiAgICAgICAgY29uc3QgaG91cnMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0SG91cnMoKSA6IDA7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0TWludXRlcygpIDogMDtcblxuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbaCwgbV0gPSB0aGlzLnRlbXBUaW1lLnNwbGl0KCc6Jyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChkYXk6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGRheS5nZXREYXRlKCkgPT09IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXREYXRlKCkgJiZcbiAgICAgIGRheS5nZXRNb250aCgpID09PSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0TW9udGgoKSAmJlxuICAgICAgZGF5LmdldEZ1bGxZZWFyKCkgPT09IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgKTtcbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblxuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdERC9NTS9ZWVlZJzpcbiAgICAgICAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XG4gICAgICBjYXNlICdNTS9ERC9ZWVlZJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgJHttb250aH0vJHtkYXl9LyR7eWVhcn1gO1xuICAgIH1cbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25DbGlja091dHNpZGUodGFyZ2V0RWxlbWVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLnNob3dDYWxlbmRhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0luc2lkZVBhbmUgPSB0YXJnZXRFbGVtZW50LmNsb3Nlc3QoJy5jZGstb3ZlcmxheS1wYW5lJykgIT09IG51bGw7XG5cbiAgICAvLyAhdGhpcy5kYXRlUGlja2VyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudClcbiAgICBpZiAoXG4gICAgICB0aGlzLnNob3dDYWxlbmRhciAmJlxuICAgICAgdGhpcy5kYXRlUGlja2VyRXhwYW5zaW9uICYmXG4gICAgICAhdGhpcy5kYXRlUGlja2VyRXhwYW5zaW9uLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCkgJiZcbiAgICAgICFpc0luc2lkZVBhbmVcbiAgICApIHtcbiAgICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICNkYXRlUGlja2VyQ29udGFpbmVyIGNsYXNzPVwiZGF0ZS1waWNrZXJcIj5cbiAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNvbnRhaW5lclwiPlxuICAgIDxpbnB1dFxuICAgICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbdmFsdWVdPVwiZGlzcGxheURhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCIhZGlzYWJsZWQgJiYgdG9nZ2xlQ2FsZW5kYXIoKVwiXG4gICAgICBjbGFzcz1cInctZnVsbCBibG9ja1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJiZ0NvbG9yXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiYm9yZGVyXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2N1cnNvci1ub3QtYWxsb3dlZCc6IGRpc2FibGVkID09PSB0cnVlLFxuICAgICAgICAnY3Vyc29yLXBvaW50ZXInOiBkaXNhYmxlZCA9PT0gZmFsc2UsXG4gICAgICB9XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgLz5cbiAgICA8dmVyYmVuLXN2Z1xuICAgICAgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiB0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgIGNsYXNzPVwiaWNvblwiXG4gICAgICBbaWNvbl09XCInY2FsZW5kYXInXCJcbiAgICA+PC92ZXJiZW4tc3ZnPlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGVcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aF09XCJcbiAgICAgIG92ZXJsYXlXaWR0aCA/IG92ZXJsYXlXaWR0aCA6IGRhdGVQaWNrZXJDb250YWluZXIub2Zmc2V0V2lkdGhcbiAgICBcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uXT1cImZhbHNlXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJbXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICB9LFxuICAgIF1cIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJzaG93Q2FsZW5kYXJcIlxuICAgIChkZXRhY2gpPVwic2hvd0NhbGVuZGFyID0gZmFsc2VcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyXCIgW3N0eWxlLndpZHRoXT1cImRhdGVQaWNrZXJXaWR0aFwiICNkYXRlUGlja2VyRXhwYW5zaW9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWhlYWRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXVzZURyb3Bkb3duczsgZWxzZSBkcm9wZG93bnNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJwcmV2aW91c01vbnRoKClcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIyMFwiIFtpY29uXT1cIidjaGV2cm9uLWxlZnQnXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuPnt7IG1vbnRoc1tzZWxlY3RlZE1vbnRoXSB9fSB7eyBzZWxlY3RlZFllYXIgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmV4dE1vbnRoKClcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIyMFwiIFtpY29uXT1cIidjaGV2cm9uLXJpZ2h0J1wiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bnM+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ5ZWFyUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRHJvcGRvd25ZZWFyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwieWVhclJhbmdlXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRZZWFyXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCInOTBweCdcIlxuICAgICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1vbnRoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRHJvcGRvd25Nb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cIm1vbnRoc1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3AtZG93blwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTW9udGhTdHJpbmdcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIic5MHB4J1wiXG4gICAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXIgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIiAqbmdJZj1cInNob3dUaW1lXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgYm94IHJvdW5kZWQgcHgtMiBweS0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUhvdXJEcm9wZG93bigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRIb3VyIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dIb3VyT3B0aW9uc1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGggb2YgaG91cnNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaCA9PT0gc2VsZWN0ZWRIb3VyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SG91cihoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBoIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8c3Bhbj46PC9zcGFuPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgYm94IHJvdW5kZWQgcHgtMiBweS0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1pbnV0ZURyb3Bkb3duKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZE1pbnV0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93TWludXRlT3B0aW9uc1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG0gb2YgbWludXRlc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJtID09PSBzZWxlY3RlZE1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE1pbnV0ZShtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBtIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHZlcmJlbi10b29sdGlwXG4gICAgICAgICAgICAgIFt0b3BdPVwiJy00MHB4J1wiXG4gICAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJyMwMDAnXCJcbiAgICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCInI0QzRDNEMydcIlxuICAgICAgICAgICAgICBbbGVmdF09XCInMCdcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiJzEwMHB4J1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwQ29udGVudF09XCJ0b29sdGlwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAjdG9vbHRpcFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUb1N0YXJ0T2ZEYXkoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE0XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE0XCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCInc3VuJ1wiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L3ZlcmJlbi10b29sdGlwPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzXCI+U2V0IHN0YXJ0IG9mIGRheTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8dmVyYmVuLXRvb2x0aXBcbiAgICAgICAgICAgICAgW3RvcF09XCInLTQwcHgnXCJcbiAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCInIzAwMCdcIlxuICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIicjRDNEM0QzJ1wiXG4gICAgICAgICAgICAgIFtsZWZ0XT1cIicwJ1wiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCInMTAwcHgnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBDb250ZW50XT1cImVuZE9mRGF5VG9vbHRpcFwiXG4gICAgICAgICAgICAgICNlbmRPZkRheVRpcFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUb0VuZE9mRGF5KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNFwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ21vb24nXCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW5kT2ZEYXlUb29sdGlwPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14c1wiPlNldCBlbmQgb2YgZGF5PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHZlcmJlbi10b29sdGlwXG4gICAgICAgICAgICBbdG9wXT1cIictNDBweCdcIlxuICAgICAgICAgICAgW3RleHRDb2xvcl09XCInIzAwMCdcIlxuICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCInI0QzRDNEMydcIlxuICAgICAgICAgICAgW2xlZnRdPVwiJzAnXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCInMTAwcHgnXCJcbiAgICAgICAgICAgIFt0b29sdGlwQ29udGVudF09XCJjbGVhclRvb2x0aXBcIlxuICAgICAgICAgICAgI2NsZWFyRGF0ZVRpcFxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRhdGUoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTRcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE0XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiJ2Nsb3NlJ1wiXG4gICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NsZWFyVG9vbHRpcD5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14c1wiPmNsZWFyIGRhdGU8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwid2Vla2RheXNcIj5cbiAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtEYXlzXCI+e3sgZGF5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c0luTW9udGhcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXk7IGVsc2UgZW1wdHlcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChkYXkpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoZGF5KVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWRheSc6IGlzRGlzYWJsZWQoZGF5KSB9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFRlbXBvcmFyeURhdGUoZGF5KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGRheS5nZXREYXRlKCkgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbXB0eS1kYXRlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWZvb3RlclwiPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjb25maXJtKClcIj5PSzwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQWN6RSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsTUFBTSxHQUFHLFlBQVksQ0FBQztJQUN0QixPQUFPLENBQVE7SUFDZixPQUFPLENBQVE7SUFDZixRQUFRLEdBQWEsS0FBSyxDQUFDO0lBQzNCLE9BQU8sR0FBWSxNQUFNLENBQUM7SUFDMUIsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzdCLGVBQWUsR0FBVyxlQUFlLENBQUM7SUFDMUMsZ0JBQWdCLEdBQVcsZ0JBQWdCLENBQUM7SUFDNUMsSUFBSSxHQUF5QixJQUFJLENBQUM7SUFDbEMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixZQUFZLEdBQWtCLEdBQUcsQ0FBQztJQUVsQyxlQUFlLEdBQVcsT0FBTyxDQUFDO0lBQ2xDLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFL0IsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFFdkQsbUJBQW1C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O3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRVAsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHbEQsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFnZm5ELGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEcm9wZG93bkNoYW5nZUV2ZW50IH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kcm9wLWRvd24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGF0ZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgZGF0ZSc7XG4gIEBJbnB1dCgpIGZvcm1hdCA9ICdNTS9ERC9ZWVlZJztcbiAgQElucHV0KCkgbWluRGF0ZT86IERhdGU7XG4gIEBJbnB1dCgpIG1heERhdGU/OiBEYXRlO1xuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYmdDb2xvcj86IHN0cmluZyA9ICcjZmZmJztcbiAgQElucHV0KCkgYm9yZGVyPzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHVzZURyb3Bkb3duczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHllYXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBhIHllYXInO1xuICBASW5wdXQoKSBtb250aFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGEgbW9udGgnO1xuICBASW5wdXQoKSBkYXRlOiBEYXRlIHwgbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gIEBJbnB1dCgpIHNob3dUaW1lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG92ZXJsYXlXaWR0aDogbnVtYmVyIHwgbnVsbCA9IDQwMDtcblxuICBASW5wdXQoKSBkYXRlUGlja2VyV2lkdGg6IHN0cmluZyA9ICc0MDBweCc7XG4gIEBJbnB1dCgpIHVzZURlZmF1bHREYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZGF0ZVBpY2tlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXJFeHBhbnNpb24nLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZGF0ZVBpY2tlckV4cGFuc2lvbiE6IEVsZW1lbnRSZWY7XG5cbiAgeWVhclJhbmdlOiBudW1iZXJbXSA9IFtdO1xuICBmaWx0ZXJlZFllYXJSYW5nZTogbnVtYmVyW10gPSBbXTtcblxuICBzZWxlY3RlZERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgdGVtcFNlbGVjdGVkRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHNob3dDYWxlbmRhciA9IGZhbHNlO1xuXG4gIHdlZWtEYXlzID0gWydNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsICdTdW4nXTtcbiAgbW9udGhzID0gW1xuICAgICdKYW51YXJ5JyxcbiAgICAnRmVicnVhcnknLFxuICAgICdNYXJjaCcsXG4gICAgJ0FwcmlsJyxcbiAgICAnTWF5JyxcbiAgICAnSnVuZScsXG4gICAgJ0p1bHknLFxuICAgICdBdWd1c3QnLFxuICAgICdTZXB0ZW1iZXInLFxuICAgICdPY3RvYmVyJyxcbiAgICAnTm92ZW1iZXInLFxuICAgICdEZWNlbWJlcicsXG4gIF07XG5cbiAgc2VsZWN0ZWRNb250aDogbnVtYmVyID0gMTtcbiAgc2VsZWN0ZWRNb250aFN0cmluZzogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkWWVhcjogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuXG4gIGRheXNJbk1vbnRoOiAoRGF0ZSB8IG51bGwpW10gPSBbXTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgIHRoaXMuZGF0ZSA9IHBhcnNlZERhdGU7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgIHRoaXMuaW5pdFRpbWVGcm9tRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5kYXRlKSB7XG4gICAgICBsZXQgZCA9IHRoaXMuZGF0ZTtcbiAgICAgIGlmICh0eXBlb2YgZCA9PT0gJ3N0cmluZycpIGQgPSB0aGlzLnNhbml0aXplRGF0ZVN0cmluZyhkKTtcblxuICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGQpO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICBpc1NhbWVEYXRlKGQxOiBEYXRlLCBkMjogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBkMS5nZXRGdWxsWWVhcigpID09PSBkMi5nZXRGdWxsWWVhcigpICYmXG4gICAgICBkMS5nZXRNb250aCgpID09PSBkMi5nZXRNb250aCgpICYmXG4gICAgICBkMS5nZXREYXRlKCkgPT09IGQyLmdldERhdGUoKVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBlbmRZZWFyID0gY3VycmVudFllYXIgKyAxMDtcbiAgICB0aGlzLnllYXJSYW5nZSA9IEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogZW5kWWVhciAtIDE5NjAgKyAxIH0sXG4gICAgICAoXywgaSkgPT4gMTk2MCArIGksXG4gICAgKTtcbiAgICB0aGlzLnllYXJSYW5nZS5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0ZSAmJiB0aGlzLnVzZURlZmF1bHREYXRlKSB7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgcGFkID0gKG46IG51bWJlcikgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0ZVN0cmluZyA9IGAke25vdy5nZXRGdWxsWWVhcigpfS0ke3BhZChcbiAgICAgICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgICAgKX0tJHtwYWQobm93LmdldERhdGUoKSl9VCR7cGFkKG5vdy5nZXRIb3VycygpKX06JHtwYWQoXG4gICAgICAgIG5vdy5nZXRNaW51dGVzKCksXG4gICAgICApfToke3BhZChub3cuZ2V0U2Vjb25kcygpKX1gO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGxvY2FsRGF0ZVN0cmluZyk7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShsb2NhbERhdGVTdHJpbmcpO1xuICAgICAgdGhpcy5kYXRlID0gdGhpcy5zZWxlY3RlZERhdGU7XG5cbiAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gbm93LmdldEhvdXJzKCk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBub3cuZ2V0TWludXRlcygpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UobG9jYWxEYXRlU3RyaW5nKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZURheXNJbk1vbnRoKCk7XG4gIH1cblxuICBnZXQgZGlzcGxheURhdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJzZWREYXRlID1cbiAgICAgIHR5cGVvZiB0aGlzLmRhdGUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUodGhpcy5kYXRlKSA6IHRoaXMuZGF0ZTtcbiAgICByZXR1cm4gcGFyc2VkRGF0ZSA/IHRoaXMuZm9ybWF0RGF0ZShwYXJzZWREYXRlLCB0aGlzLmZvcm1hdCkgOiAnJztcbiAgfVxuXG4gIHRlbXBUaW1lOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRIb3VyID0gJzAwJztcbiAgc2VsZWN0ZWRNaW51dGUgPSAnMDAnO1xuXG4gIHNob3dIb3VyT3B0aW9ucyA9IGZhbHNlO1xuICBzaG93TWludXRlT3B0aW9ucyA9IGZhbHNlO1xuXG4gIGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IFN0cmluZyhpKS5wYWRTdGFydCgyLCAnMCcpKTtcbiAgbWludXRlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDYwIH0sIChfLCBpKSA9PiBTdHJpbmcoaSkucGFkU3RhcnQoMiwgJzAnKSk7XG5cbiAgdG9nZ2xlSG91ckRyb3Bkb3duKCkge1xuICAgIHRoaXMuc2hvd0hvdXJPcHRpb25zID0gIXRoaXMuc2hvd0hvdXJPcHRpb25zO1xuICAgIHRoaXMuc2hvd01pbnV0ZU9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHRvZ2dsZU1pbnV0ZURyb3Bkb3duKCkge1xuICAgIHRoaXMuc2hvd01pbnV0ZU9wdGlvbnMgPSAhdGhpcy5zaG93TWludXRlT3B0aW9ucztcbiAgICB0aGlzLnNob3dIb3VyT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgc2VsZWN0SG91cihoOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGg7XG4gICAgdGhpcy5zaG93SG91ck9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHNlbGVjdE1pbnV0ZShtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbTtcbiAgICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVDYWxlbmRhcigpIHtcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9ICF0aGlzLnNob3dDYWxlbmRhcjtcblxuICAgIGlmICh0aGlzLmRhdGUpIHtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IHRoaXMudXNlRGVmYXVsdERhdGUgPyBuZXcgRGF0ZSgpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZW1wU2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aFN0cmluZyA9IHRoaXMubW9udGhzW3RoaXMuc2VsZWN0ZWRNb250aF07XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIHRoaXMuZ2VuZXJhdGVEYXlzSW5Nb250aCgpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1RpbWUgJiYgIXRoaXMudGVtcFRpbWUpIHtcbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGlzVG9kYXkgPVxuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgJiYgdGhpcy5pc1NhbWVEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSwgdG9kYXkpO1xuXG4gICAgICBjb25zdCBob3VycyA9IGlzVG9kYXkgPyB0b2RheS5nZXRIb3VycygpIDogMDtcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0TWludXRlcygpIDogMDtcblxuICAgICAgaWYgKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSkge1xuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIH1cbiAgfVxuXG4gIGluaXRUaW1lRnJvbURhdGUoZGF0ZTogRGF0ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZT8uc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICB9XG4gIGNsZWFyRGF0ZSgpIHtcbiAgICB0aGlzLmRhdGUgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBudWxsO1xuICAgIHRoaXMudGVtcFRpbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICcwMCc7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICcwMCc7XG5cbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChudWxsKTtcblxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcblxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gIH1cblxuICBmaXhUb1VUQyhkYXRlVmFsdWU6IGFueSkge1xuICAgIGlmICghZGF0ZVZhbHVlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGRhdGUgPSBkYXRlVmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVZhbHVlIDogbmV3IERhdGUoZGF0ZVZhbHVlKTtcbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgIERhdGUuVVRDKFxuICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgZGF0ZS5nZXREYXRlKCksXG4gICAgICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgIGRhdGUuZ2V0U2Vjb25kcygpLFxuICAgICAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29uZmlybSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaG91cnMgPSBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBOdW1iZXIodGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG5cbiAgICAvLyBBcHBseSBzZWxlY3RlZCB0aW1lIEZJUlNUXG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCAwLCAwKTtcblxuICAgIC8vIFRIRU4gdmFsaWRhdGVcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSkpIHJldHVybjtcblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy50ZW1wU2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLmRhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcblxuICAgIGNvbnN0IHBhZCA9IChuOiBudW1iZXIpID0+IG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuXG4gICAgY29uc3QgbG9jYWxEYXRlU3RyaW5nID0gYCR7dGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKX0tJHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICApfS0ke3BhZCh0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCkpfVQke3BhZChcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmdldEhvdXJzKCksXG4gICAgKX06JHtwYWQodGhpcy5zZWxlY3RlZERhdGUuZ2V0TWludXRlcygpKX06JHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgKX1gO1xuXG4gICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgIHRoaXMub25DaGFuZ2UobG9jYWxEYXRlU3RyaW5nKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgfVxuXG4gIHNldFRvU3RhcnRPZkRheSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5zZWxlY3RlZEhvdXIgPSAnMDAnO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAnMDAnO1xuXG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gIH1cblxuICBzZXRUb0VuZE9mRGF5KCkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm47XG5cbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICcyMyc7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICc1OSc7XG5cbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUpO1xuICB9XG5cbiAgcHJldmlvdXNNb250aCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGgtLTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE1vbnRoIDwgMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gMTE7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhci0tO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlRGF5c0luTW9udGgoKTtcbiAgfVxuXG4gIG5leHRNb250aCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGgrKztcbiAgICBpZiAodGhpcy5zZWxlY3RlZE1vbnRoID4gMTEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IDA7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhcisrO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlRGF5c0luTW9udGgoKTtcbiAgfVxuXG4gIG9uRHJvcGRvd25ZZWFyQ2hhbmdlKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFllYXIgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlRGF5c0luTW9udGgoKTtcbiAgfVxuXG4gIG9uRHJvcGRvd25Nb250aENoYW5nZShldmVudDogRHJvcGRvd25DaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMubW9udGhzLmluZGV4T2YoZXZlbnQudmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpO1xuICAgIHRoaXMuZ2VuZXJhdGVEYXlzSW5Nb250aCgpO1xuICB9XG5cbiAgdXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRNb250aCh0aGlzLnNlbGVjdGVkTW9udGgpO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRGdWxsWWVhcih0aGlzLnNlbGVjdGVkWWVhcik7XG4gIH1cblxuICBnZW5lcmF0ZURheXNJbk1vbnRoKCkge1xuICAgIGNvbnN0IGRheXM6IChEYXRlIHwgbnVsbClbXSA9IFtdO1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLnNlbGVjdGVkWWVhcjtcbiAgICBjb25zdCBtb250aCA9IHRoaXMuc2VsZWN0ZWRNb250aDtcblxuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKTtcbiAgICBjb25zdCBvZmZzZXQgPSBmaXJzdERheU9mTW9udGggPT09IDAgPyA2IDogZmlyc3REYXlPZk1vbnRoIC0gMTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgIGRheXMucHVzaChudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbERheXMgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbERheXM7IGkrKykge1xuICAgICAgZGF5cy5wdXNoKG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXlzSW5Nb250aCA9IGRheXM7XG4gIH1cblxuICAvLyBnZXREYXlzSW5Nb250aCgpOiAoRGF0ZSB8IG51bGwpW10ge1xuICAvLyAgIGNvbnN0IGRheXM6IChEYXRlIHwgbnVsbClbXSA9IFtdO1xuICAvLyAgIGNvbnN0IHllYXIgPSB0aGlzLnNlbGVjdGVkWWVhcjtcbiAgLy8gICBjb25zdCBtb250aCA9IHRoaXMuc2VsZWN0ZWRNb250aDtcblxuICAvLyAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKTtcbiAgLy8gICBjb25zdCBvZmZzZXQgPSBmaXJzdERheU9mTW9udGggPT09IDAgPyA2IDogZmlyc3REYXlPZk1vbnRoIC0gMTtcblxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgLy8gICAgIGRheXMucHVzaChudWxsKTtcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zdCB0b3RhbERheXMgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbERheXM7IGkrKykge1xuICAvLyAgICAgY29uc3QgZGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpO1xuICAvLyAgICAgZGF5cy5wdXNoKGRheSk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBkYXlzO1xuICAvLyB9XG5cbiAgc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZT8uZW5kc1dpdGgoJ1onKSA/IHZhbHVlLnNsaWNlKDAsIC0xKSA6IHZhbHVlO1xuICB9XG5cbiAgLy8gaXNEaXNhYmxlZChkYXk6IERhdGUgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gICBjb25zdCBkYXlEYXRlID0gdGhpcy50b0RhdGUoZGF5KTtcblxuICAvLyAgIGlmICh0aGlzLm1pbkRhdGUgJiYgZGF5RGF0ZSA8IHRoaXMuc3RyaXBUaW1lKHRoaXMudG9EYXRlKHRoaXMubWluRGF0ZSkpKVxuICAvLyAgICAgcmV0dXJuIHRydWU7XG4gIC8vICAgaWYgKHRoaXMubWF4RGF0ZSAmJiBkYXlEYXRlID4gdGhpcy5zdHJpcFRpbWUodGhpcy50b0RhdGUodGhpcy5tYXhEYXRlKSkpXG4gIC8vICAgICByZXR1cm4gdHJ1ZTtcblxuICAvLyAgIHJldHVybiBmYWxzZTtcbiAgLy8gfVxuXG4gIGlzRGlzYWJsZWQoZGF5OiBEYXRlIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF5RGF0ZSA9IHRoaXMuc3RyaXBUaW1lKGRheSk7XG5cbiAgICBpZiAodGhpcy5taW5EYXRlICYmIGRheURhdGUgPCB0aGlzLnN0cmlwVGltZSh0aGlzLm1pbkRhdGUpKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmICh0aGlzLm1heERhdGUgJiYgZGF5RGF0ZSA+IHRoaXMuc3RyaXBUaW1lKHRoaXMubWF4RGF0ZSkpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpcFRpbWUoZGF0ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xuICAgIGNvbnN0IGQgPSB0aGlzLnRvRGF0ZShkYXRlKTtcbiAgICByZXR1cm4gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5zYW5pdGl6ZURhdGVTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIC8vIHRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xuICAvLyAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZTtcblxuICAvLyAgIGNvbnN0IHNhbml0aXplZCA9IHRoaXMuc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlKTtcblxuICAvLyAgIGNvbnN0IFtkYXRlUGFydCwgdGltZVBhcnRdID0gc2FuaXRpemVkLnNwbGl0KCdUJyk7XG4gIC8vICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gZGF0ZVBhcnQuc3BsaXQoJy0nKS5tYXAoTnVtYmVyKTtcblxuICAvLyAgIGlmICghdGltZVBhcnQpIHtcbiAgLy8gICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gIC8vICAgfVxuXG4gIC8vICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IHRpbWVQYXJ0LnNwbGl0KCc6JykubWFwKE51bWJlcik7XG5cbiAgLy8gICByZXR1cm4gbmV3IERhdGUoXG4gIC8vICAgICB5ZWFyLFxuICAvLyAgICAgbW9udGggLSAxLFxuICAvLyAgICAgZGF5LFxuICAvLyAgICAgaG91cnMgfHwgMCxcbiAgLy8gICAgIG1pbnV0ZXMgfHwgMCxcbiAgLy8gICAgIHNlY29uZHMgfHwgMCxcbiAgLy8gICApO1xuICAvLyB9XG5cbiAgaXMyNEhvdXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHNlbGVjdFRlbXBvcmFyeURhdGUoZGF5OiBEYXRlKSB7XG4gICAgaWYgKCF0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRheSk7XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZChkYXkpKSByZXR1cm47XG5cbiAgICBjb25zdCBpc05ld0RhdGUgPSAhdGhpcy5pc1NhbWVEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSwgZGF5KTtcbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkYXkpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgIGlmIChpc05ld0RhdGUpIHtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBpc1RvZGF5ID1cbiAgICAgICAgICBkYXkuZ2V0RnVsbFllYXIoKSA9PT0gdG9kYXkuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICAgIGRheS5nZXRNb250aCgpID09PSB0b2RheS5nZXRNb250aCgpICYmXG4gICAgICAgICAgZGF5LmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpO1xuXG4gICAgICAgIGNvbnN0IGhvdXJzID0gaXNUb2RheSA/IHRvZGF5LmdldEhvdXJzKCkgOiAwO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gaXNUb2RheSA/IHRvZGF5LmdldE1pbnV0ZXMoKSA6IDA7XG5cbiAgICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCAwLCAwKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgW2gsIG1dID0gdGhpcy50ZW1wVGltZS5zcGxpdCgnOicpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGg7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU2VsZWN0ZWQoZGF5OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiAoXG4gICAgICBkYXkuZ2V0RGF0ZSgpID09PSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0RGF0ZSgpICYmXG4gICAgICBkYXkuZ2V0TW9udGgoKSA9PT0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgJiZcbiAgICAgIGRheS5nZXRGdWxsWWVhcigpID09PSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKVxuICAgICk7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbW9udGggPSAoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnREQvTU0vWVlZWSc6XG4gICAgICAgIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gO1xuICAgICAgY2FzZSAnTU0vREQvWVlZWSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXJ9YDtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIG9uQ2xpY2tPdXRzaWRlKHRhcmdldEVsZW1lbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5zaG93Q2FsZW5kYXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNJbnNpZGVQYW5lID0gdGFyZ2V0RWxlbWVudC5jbG9zZXN0KCcuY2RrLW92ZXJsYXktcGFuZScpICE9PSBudWxsO1xuXG4gICAgLy8gIXRoaXMuZGF0ZVBpY2tlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpXG4gICAgaWYgKFxuICAgICAgdGhpcy5zaG93Q2FsZW5kYXIgJiZcbiAgICAgIHRoaXMuZGF0ZVBpY2tlckV4cGFuc2lvbiAmJlxuICAgICAgIXRoaXMuZGF0ZVBpY2tlckV4cGFuc2lvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpICYmXG4gICAgICAhaXNJbnNpZGVQYW5lXG4gICAgKSB7XG4gICAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAjZGF0ZVBpY2tlckNvbnRhaW5lciBjbGFzcz1cImRhdGUtcGlja2VyXCI+XG4gIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1jb250YWluZXJcIj5cbiAgICA8aW5wdXRcbiAgICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAgICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3ZhbHVlXT1cImRpc3BsYXlEYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwiIWRpc2FibGVkICYmIHRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgY2xhc3M9XCJ3LWZ1bGwgYmxvY2tcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmdDb2xvclwiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cImJvcmRlclwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdjdXJzb3Itbm90LWFsbG93ZWQnOiBkaXNhYmxlZCA9PT0gdHJ1ZSxcbiAgICAgICAgJ2N1cnNvci1wb2ludGVyJzogZGlzYWJsZWQgPT09IGZhbHNlLFxuICAgICAgfVwiXG4gICAgICByZWFkb25seVxuICAgIC8+XG4gICAgPHZlcmJlbi1zdmdcbiAgICAgIChjbGljayk9XCIhZGlzYWJsZWQgJiYgdG9nZ2xlQ2FsZW5kYXIoKVwiXG4gICAgICBjbGFzcz1cImljb25cIlxuICAgICAgW2ljb25dPVwiJ2NhbGVuZGFyJ1wiXG4gICAgPjwvdmVyYmVuLXN2Zz5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGhdPVwiXG4gICAgICBvdmVybGF5V2lkdGggPyBvdmVybGF5V2lkdGggOiBkYXRlUGlja2VyQ29udGFpbmVyLm9mZnNldFdpZHRoXG4gICAgXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiW1xuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgfSxcbiAgICBdXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwic2hvd0NhbGVuZGFyXCJcbiAgICAoZGV0YWNoKT1cInNob3dDYWxlbmRhciA9IGZhbHNlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhclwiIFtzdHlsZS53aWR0aF09XCJkYXRlUGlja2VyV2lkdGhcIiAjZGF0ZVBpY2tlckV4cGFuc2lvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1oZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1c2VEcm9wZG93bnM7IGVsc2UgZHJvcGRvd25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicHJldmlvdXNNb250aCgpXCI+XG4gICAgICAgICAgICA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMjBcIiBbaWNvbl09XCInY2hldnJvbi1sZWZ0J1wiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3Bhbj57eyBtb250aHNbc2VsZWN0ZWRNb250aF0gfX0ge3sgc2VsZWN0ZWRZZWFyIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5leHRNb250aCgpXCI+XG4gICAgICAgICAgICA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMjBcIiBbaWNvbl09XCInY2hldnJvbi1yaWdodCdcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25zPlxuICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwieWVhclBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkRyb3Bkb3duWWVhckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInllYXJSYW5nZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkWWVhclwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzkwcHgnXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtb250aFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkRyb3Bkb3duTW9udGhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJtb250aHNcIlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wLWRvd25cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1vbnRoU3RyaW5nXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCInOTBweCdcIlxuICAgICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCIgKm5nSWY9XCJzaG93VGltZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGJveCByb3VuZGVkIHB4LTIgcHktMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVIb3VyRHJvcGRvd24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkSG91ciB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93SG91ck9wdGlvbnNcIiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoIG9mIGhvdXJzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImggPT09IHNlbGVjdGVkSG91clwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEhvdXIoaClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgaCB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGJveCByb3VuZGVkIHB4LTIgcHktMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNaW51dGVEcm9wZG93bigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRNaW51dGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd01pbnV0ZU9wdGlvbnNcIiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtIG9mIG1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwibSA9PT0gc2VsZWN0ZWRNaW51dGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RNaW51dGUobSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgbSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDx2ZXJiZW4tdG9vbHRpcFxuICAgICAgICAgICAgICBbdG9wXT1cIictNDBweCdcIlxuICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjMDAwJ1wiXG4gICAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJyNEM0QzRDMnXCJcbiAgICAgICAgICAgICAgW2xlZnRdPVwiJzAnXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIicxMDBweCdcIlxuICAgICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwidG9vbHRpcFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgI3Rvb2x0aXBcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VG9TdGFydE9mRGF5KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNFwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ3N1bidcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgPC92ZXJiZW4tdG9vbHRpcD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14c1wiPlNldCBzdGFydCBvZiBkYXk8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHZlcmJlbi10b29sdGlwXG4gICAgICAgICAgICAgIFt0b3BdPVwiJy00MHB4J1wiXG4gICAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJyMwMDAnXCJcbiAgICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCInI0QzRDNEMydcIlxuICAgICAgICAgICAgICBbbGVmdF09XCInMCdcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiJzEwMHB4J1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwQ29udGVudF09XCJlbmRPZkRheVRvb2x0aXBcIlxuICAgICAgICAgICAgICAjZW5kT2ZEYXlUaXBcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VG9FbmRPZkRheSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTRcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTRcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cIidtb29uJ1wiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L3ZlcmJlbi10b29sdGlwPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VuZE9mRGF5VG9vbHRpcD5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHNcIj5TZXQgZW5kIG9mIGRheTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx2ZXJiZW4tdG9vbHRpcFxuICAgICAgICAgICAgW3RvcF09XCInLTQwcHgnXCJcbiAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJyMwMDAnXCJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJyNEM0QzRDMnXCJcbiAgICAgICAgICAgIFtsZWZ0XT1cIicwJ1wiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzEwMHB4J1wiXG4gICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwiY2xlYXJUb29sdGlwXCJcbiAgICAgICAgICAgICNjbGVhckRhdGVUaXBcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEYXRlKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIjE0XCJcbiAgICAgICAgICAgICAgW2hlaWdodF09XCIxNFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cIidjbG9zZSdcIlxuICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8L3ZlcmJlbi10b29sdGlwPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjbGVhclRvb2x0aXA+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHNcIj5jbGVhciBkYXRlPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndlZWtkYXlzXCI+XG4gICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrRGF5c1wiPnt7IGRheSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNJbk1vbnRoXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF5OyBlbHNlIGVtcHR5XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzU2VsZWN0ZWQoZGF5KVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKGRheSlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkaXNhYmxlZC1kYXknOiBpc0Rpc2FibGVkKGRheSkgfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUZW1wb3JhcnlEYXRlKGRheSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBkYXkuZ2V0RGF0ZSgpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHk+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZW1wdHktZGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1mb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29uZmlybSgpXCI+T0s8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
@@ -84,14 +84,11 @@ class DataImportService {
84
84
  // });
85
85
  // console.time('Begin');
86
86
  let imported = [];
87
- const wb = read(event.target.result, { raw: true });
87
+ const wb = read(event.target.result, { cellDates: true });
88
88
  const sheets = wb.SheetNames;
89
89
  if (sheets.length) {
90
90
  const rows = utils.sheet_to_json(wb.Sheets[sheets[0]], {
91
- raw: false,
92
- // defval: '',
93
- // rawNumbers: true,
94
- // dateNF: 'dd/mm/yyyy',
91
+ defval: null,
95
92
  });
96
93
  imported = this.transformImportData(rows, columnDefinitions);
97
94
  // console.log('TRANSFORMED', imported);
@@ -1 +1 @@
1
- {"version":3,"file":"verben-ng-ui-src-lib-components-data-import.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/data-import/data-import.service.ts","../../../projects/verben-ng-ui/src/lib/components/data-import/data-import.component.ts","../../../projects/verben-ng-ui/src/lib/components/data-import/data-import.component.html","../../../projects/verben-ng-ui/src/lib/components/data-import/data-import.module.ts","../../../projects/verben-ng-ui/src/lib/components/data-import/verben-ng-ui-src-lib-components-data-import.ts"],"sourcesContent":["import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { ColumnDefinition } from 'verben-ng-ui/src/lib/components/data-table';\nimport { read, utils, writeFile } from 'xlsx';\n\n@Injectable()\nexport class DataImportService<T> {\n importedData: WritableSignal<T[]> = signal([]);\n\n constructor() { }\n\n // Function to transform imported data to match your model structure\n transformImportData<T>(\n importedData: Record<string, any>[],\n columnDefinitions: ColumnDefinition<T>[]\n ): Partial<T>[] {\n // Create mappings from header to importKey and importBy\n const headerToImportKeyMap = new Map<string, keyof T>();\n const headerToImportByMap = new Map<\n string,\n keyof T | ((importedRow: any) => T[keyof T])\n >();\n\n // Filter column definitions to only those with importKey or importBy and populate the maps\n columnDefinitions\n .filter((col) => col.importKey || col.importBy)\n .forEach((col) => {\n const header =\n typeof col.header === 'string'\n ? col.header\n : col.header({}).toString();\n\n if (col.importKey) {\n headerToImportKeyMap.set(header, col.importKey as keyof T);\n }\n\n if (col.importBy) {\n headerToImportByMap.set(header, col.importBy);\n }\n });\n\n // Transform each row in the imported data\n return importedData.map((row) => {\n const transformedRow: Partial<T> = {};\n\n // Process each key in the row\n Object.entries(row).forEach(([key, value]) => {\n // Check if there's an importBy transformation first (takes priority)\n const importBy = headerToImportByMap.get(key);\n\n if (importBy) {\n if (typeof importBy === 'function') {\n // Use the importBy function to transform the entire imported row\n const importKey = headerToImportKeyMap.get(key);\n if (importKey) {\n transformedRow[importKey] = importBy(row);\n }\n } else {\n // importBy is a direct key reference\n transformedRow[importBy] = value;\n }\n } else {\n // Fall back to importKey if no importBy is defined\n const importKey = headerToImportKeyMap.get(key);\n if (importKey) {\n transformedRow[importKey] = value;\n }\n }\n });\n\n return transformedRow;\n });\n }\n\n handleImport(\n file: File,\n // previewer?: (data: any[]) => void,\n columnDefinitions: ColumnDefinition<T>[],\n parseImport?: (data: any) => Partial<T>[]\n ) {\n const reader = new FileReader();\n reader.onload = (event: any) => {\n // const wb = read(event.target.result, {\n // type: 'string',\n // raw: true,\n // cellText: true,\n // cellFormula: false,\n // cellNF: false,\n // });\n // console.time('Begin');\n let imported: any[] = [];\n const wb = read(event.target.result, { raw: true });\n const sheets = wb.SheetNames;\n if (sheets.length) {\n const rows = utils.sheet_to_json(wb.Sheets[sheets[0]], {\n raw: false,\n // defval: '',\n // rawNumbers: true,\n // dateNF: 'dd/mm/yyyy',\n }) as Record<string, any>[];\n\n imported = this.transformImportData(rows, columnDefinitions) as T[];\n // console.log('TRANSFORMED', imported);\n\n if (parseImport) {\n imported = parseImport(imported);\n // console.log('PARSED', imported);\n }\n // previewer(imported);\n }\n // console.log('Imported data:', JSON.stringify(imported, null, 2));\n // console.time('Start Process');\n this.importedData.set(imported);\n // console.timeEnd('Begin');\n return imported;\n };\n return reader.readAsArrayBuffer(file);\n }\n\n handleTemplateExport(fields: string[], title: string) {\n console.log(fields);\n const wb = utils.book_new();\n const ws: any = utils.json_to_sheet([]);\n utils.sheet_add_aoa(ws, [fields]);\n // utils.sheet_add_json(ws, this._data, { origin: 'A2', skipHeader: true });\n utils.book_append_sheet(wb, ws, title);\n writeFile(wb, title + '-template.' + 'xlsx');\n }\n\n addRow(event: { index: number; key: string | number; data: Partial<T> }) {\n // console.log(event);\n this.importedData.update((dat) => {\n // dat[event.index] = { ...dat[event.index], ...event.data };\n return dat.map((d, i) => {\n if (i === event.index) {\n return { ...d, ...event.data };\n }\n return d;\n });\n });\n // console.log(this.importedData());\n }\n\n isDuplicate(datum: Partial<T>, array: Partial<T>[], identifiers: string[]) {\n return (\n array.filter(\n (dat) =>\n identifiers.length > 0 &&\n identifiers.every(\n (identifier) =>\n datum[identifier as keyof T] &&\n datum[identifier as keyof T] === dat[identifier as keyof T]\n )\n ).length > 1\n );\n }\n\n clearData() {\n this.importedData.set([]);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n output,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport {\n AbstractControl,\n FormArray,\n FormGroup\n} from '@angular/forms';\nimport {\n ColumnDefinition,\n ColumnDirective,\n FormGroupConfig,\n} from 'verben-ng-ui/src/lib/components/data-table';\nimport { DataImportService } from './data-import.service';\n\n@Component({\n selector: 'lib-data-import',\n templateUrl: './data-import.component.html',\n styleUrl: './data-import.component.css',\n providers: [DataImportService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataImportComponent<T extends {}> {\n previewColumns = input.required<ColumnDefinition<T>[]>();\n formGroupConfig = input<\n FormGroupConfig<{\n [K in keyof T]: AbstractControl;\n }>\n >();\n /**\n * @deprecated Use importKey of previewColumns instead\n */\n fields = input<string[]>();\n title = input<string>('export-template');\n columnTemplates = input<readonly ColumnDirective[]>([]);\n parser = input<(data: any) => Partial<T>[]>();\n /**\n * @deprecated Please remove, now handled internally\n */\n previewData = input<T[]>();\n /**\n * Pass the method to use the imported data,\n * and eventually returns true if successfully used\n */\n onImportComplete = input<(data: Partial<T>[]) => Promise<boolean>>();\n /**\n * @deprecated Please remove, now handled internally\n */\n exportTemplateEvent = output<string[]>();\n /**\n * @deprecated Please remove, now handled internally\n */\n importEvent = output<File>();\n /**\n * @deprecated Use the onImportComplete input instead\n */\n importEventData = output<Partial<T>[]>();\n /**\n * @deprecated Please remove, now handled internally\n */\n rowSave = output<{\n index: number;\n key: number | string;\n data: Partial<T>;\n }>();\n\n // data: Signal<(T & { isDuplicate: boolean })[]>;\n previewColumnsList: Signal<ColumnDefinition<T>[]>;\n forms = new FormArray<FormGroup>([]);\n uniqueIdentifiers: WritableSignal<string[]> = signal([]);\n // duplicateDataMap: Map<string, number> = new Map();\n duplicateIndexSet = new Set<number>();\n invalidIndexSet = new Map<number, ColumnDirective['columnId'][]>();\n\n headers: Signal<string[]>;\n\n private _ext: 'xlsx' | 'xls' | 'csv' = 'xlsx';\n\n files: File[] = [];\n isDragging = false;\n showPreview = false;\n\n constructor(public service: DataImportService<T>) {\n effect(() => {\n // const columns = this.previewColumnsList();\n\n const identifiers = this.uniqueIdentifiers();\n\n this.service.importedData()?.forEach((d, i, arr) => {\n if (service.isDuplicate(d, arr, identifiers)) {\n this.duplicateIndexSet.add(i);\n }\n\n // columns\n // .filter(({ validatorFn }) => validatorFn !== undefined)\n // .forEach((column) => {\n // const invalidFields = Object.entries(d).reduce<string[]>(\n // (f, [k, v], i) => {\n // if (\n // column.validatorFn &&\n // !column.validatorFn(v as T[keyof T])\n // ) {\n // f.push(column.id);\n // }\n // return f;\n // },\n // []\n // );\n\n // if (invalidFields.length > 0) {\n // this.invalidIndexSet.set(i, invalidFields);\n // }\n // });\n });\n });\n\n this.previewColumnsList = computed(() => {\n return this.previewColumns()\n .filter((col) => col.importKey || col.importBy || col.formControlName)\n .map((column) => {\n const matchingTemplate = this.columnTemplates().find(\n (t) => t.columnId === column.id\n );\n if (matchingTemplate) {\n return {\n ...column,\n // accessorKey: column.importKey,\n cellTemplate: matchingTemplate.cellTemplate,\n cellEditTemplate: matchingTemplate.cellEditTemplate,\n headerTemplate: matchingTemplate.headerTemplate,\n footerTemplate: matchingTemplate.footerTemplate,\n };\n }\n return column;\n })\n .concat([\n {\n id: 'actions',\n header: 'Actions',\n },\n ]);\n });\n\n this.headers = computed(() => {\n return (\n this.fields() ??\n this.previewColumnsList()\n .filter((col) => col.importKey || col.importBy)\n .map((col) => col.header.toString())\n );\n });\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n this.isDragging = true;\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n this.isDragging = false;\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n this.isDragging = false;\n this.files = Array.from(event.dataTransfer!.files);\n\n this.service.handleImport(\n this.files[0],\n this.previewColumnsList(),\n this.parser()\n );\n // this.importEvent.emit(this.files[0]);\n this.showPreview = true;\n }\n\n onFileSelected(event: any) {\n this.files = Array.from(event.target.files);\n this.service.handleImport(\n this.files[0],\n this.previewColumnsList(),\n this.parser()\n );\n\n event.target.value = '';\n\n // this.importEvent.emit(this.files[0]);\n this.showPreview = true;\n }\n\n reset() {\n this.files = [];\n this.showPreview = false;\n this.service.clearData();\n }\n\n save() {\n // console.log('PREVDATA', this.service.importedData());\n const onComplete = this.onImportComplete();\n if (onComplete) {\n onComplete(this.service.importedData()).then((success) => {\n if (success) {\n this.showPreview = false;\n }\n });\n } else {\n this.importEventData.emit(this.service.importedData() || []);\n this.showPreview = false;\n }\n }\n\n getControlNames() {\n const controls = this.formGroupConfig()?.controls;\n if (controls) {\n return Object.keys(controls);\n }\n return [];\n }\n\n handleTemplateExport() {\n this.service.handleTemplateExport(this.headers(), this.title());\n // this.exportTemplateEvent.emit(this.headers());\n }\n\n // getFormControl(index: number, field: string) {\n // const control = this..get(index)?.get(field) as FormControl<any>;\n // console.log(control);\n // return control;\n // }\n}\n","<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\" [style.color]=\"'#3479E9'\"\n >click to browse</label\n >\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n [disabled]=\"service.importedData().length < 1\"\n class=\"export-button\"\n (click)=\"save()\"\n >\n Import\n </button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: {} }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ service.importedData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ invalidIndexSet.size }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"headers()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <div style=\"max-height: min(75vh, 780px); overflow: auto\">\n <lib-data-table\n [data]=\"service.importedData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n [useVirtualScroll]=\"true\"\n (rowSave)=\"service.addRow($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataImportComponent } from './data-import.component';\nimport { CardModule } from 'verben-ng-ui/src/lib/components/card';\nimport { VerbenDialogueModule } from 'verben-ng-ui/src/lib/components/verben-dialogue';\nimport { DataTableModule } from 'verben-ng-ui/src/lib/components/data-table';\nimport { VerbenaInputModule } from 'verben-ng-ui/src/lib/verbena-input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\n\n@NgModule({\n declarations: [DataImportComponent],\n imports: [\n CommonModule,\n CardModule,\n VerbenDialogueModule,\n DataTableModule,\n VerbenaInputModule,\n DropDownModule,\n ReactiveFormsModule,\n FormsModule,\n SvgModule,\n ],\n exports: [DataImportComponent],\n})\nexport class DataImportModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DataImportService"],"mappings":"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"}
1
+ {"version":3,"file":"verben-ng-ui-src-lib-components-data-import.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/data-import/data-import.service.ts","../../../projects/verben-ng-ui/src/lib/components/data-import/data-import.component.ts","../../../projects/verben-ng-ui/src/lib/components/data-import/data-import.component.html","../../../projects/verben-ng-ui/src/lib/components/data-import/data-import.module.ts","../../../projects/verben-ng-ui/src/lib/components/data-import/verben-ng-ui-src-lib-components-data-import.ts"],"sourcesContent":["import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { ColumnDefinition } from 'verben-ng-ui/src/lib/components/data-table';\nimport { read, utils, writeFile } from 'xlsx';\n\n@Injectable()\nexport class DataImportService<T> {\n importedData: WritableSignal<T[]> = signal([]);\n\n constructor() { }\n\n // Function to transform imported data to match your model structure\n transformImportData<T>(\n importedData: Record<string, any>[],\n columnDefinitions: ColumnDefinition<T>[]\n ): Partial<T>[] {\n // Create mappings from header to importKey and importBy\n const headerToImportKeyMap = new Map<string, keyof T>();\n const headerToImportByMap = new Map<\n string,\n keyof T | ((importedRow: any) => T[keyof T])\n >();\n\n // Filter column definitions to only those with importKey or importBy and populate the maps\n columnDefinitions\n .filter((col) => col.importKey || col.importBy)\n .forEach((col) => {\n const header =\n typeof col.header === 'string'\n ? col.header\n : col.header({}).toString();\n\n if (col.importKey) {\n headerToImportKeyMap.set(header, col.importKey as keyof T);\n }\n\n if (col.importBy) {\n headerToImportByMap.set(header, col.importBy);\n }\n });\n\n // Transform each row in the imported data\n return importedData.map((row) => {\n const transformedRow: Partial<T> = {};\n\n // Process each key in the row\n Object.entries(row).forEach(([key, value]) => {\n // Check if there's an importBy transformation first (takes priority)\n const importBy = headerToImportByMap.get(key);\n\n if (importBy) {\n if (typeof importBy === 'function') {\n // Use the importBy function to transform the entire imported row\n const importKey = headerToImportKeyMap.get(key);\n if (importKey) {\n transformedRow[importKey] = importBy(row);\n }\n } else {\n // importBy is a direct key reference\n transformedRow[importBy] = value;\n }\n } else {\n // Fall back to importKey if no importBy is defined\n const importKey = headerToImportKeyMap.get(key);\n if (importKey) {\n transformedRow[importKey] = value;\n }\n }\n });\n\n return transformedRow;\n });\n }\n\n handleImport(\n file: File,\n // previewer?: (data: any[]) => void,\n columnDefinitions: ColumnDefinition<T>[],\n parseImport?: (data: any) => Partial<T>[]\n ) {\n const reader = new FileReader();\n reader.onload = (event: any) => {\n // const wb = read(event.target.result, {\n // type: 'string',\n // raw: true,\n // cellText: true,\n // cellFormula: false,\n // cellNF: false,\n // });\n // console.time('Begin');\n let imported: any[] = [];\n const wb = read(event.target.result, { cellDates: true });\n const sheets = wb.SheetNames;\n if (sheets.length) {\n const rows = utils.sheet_to_json(wb.Sheets[sheets[0]], {\n defval: null,\n }) as Record<string, any>[];\n\n imported = this.transformImportData(rows, columnDefinitions) as T[];\n // console.log('TRANSFORMED', imported);\n\n if (parseImport) {\n imported = parseImport(imported);\n // console.log('PARSED', imported);\n }\n // previewer(imported);\n }\n // console.log('Imported data:', JSON.stringify(imported, null, 2));\n // console.time('Start Process');\n this.importedData.set(imported);\n // console.timeEnd('Begin');\n return imported;\n };\n return reader.readAsArrayBuffer(file);\n }\n\n handleTemplateExport(fields: string[], title: string) {\n console.log(fields);\n const wb = utils.book_new();\n const ws: any = utils.json_to_sheet([]);\n utils.sheet_add_aoa(ws, [fields]);\n // utils.sheet_add_json(ws, this._data, { origin: 'A2', skipHeader: true });\n utils.book_append_sheet(wb, ws, title);\n writeFile(wb, title + '-template.' + 'xlsx');\n }\n\n addRow(event: { index: number; key: string | number; data: Partial<T> }) {\n // console.log(event);\n this.importedData.update((dat) => {\n // dat[event.index] = { ...dat[event.index], ...event.data };\n return dat.map((d, i) => {\n if (i === event.index) {\n return { ...d, ...event.data };\n }\n return d;\n });\n });\n // console.log(this.importedData());\n }\n\n isDuplicate(datum: Partial<T>, array: Partial<T>[], identifiers: string[]) {\n return (\n array.filter(\n (dat) =>\n identifiers.length > 0 &&\n identifiers.every(\n (identifier) =>\n datum[identifier as keyof T] &&\n datum[identifier as keyof T] === dat[identifier as keyof T]\n )\n ).length > 1\n );\n }\n\n clearData() {\n this.importedData.set([]);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n output,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport {\n AbstractControl,\n FormArray,\n FormGroup\n} from '@angular/forms';\nimport {\n ColumnDefinition,\n ColumnDirective,\n FormGroupConfig,\n} from 'verben-ng-ui/src/lib/components/data-table';\nimport { DataImportService } from './data-import.service';\n\n@Component({\n selector: 'lib-data-import',\n templateUrl: './data-import.component.html',\n styleUrl: './data-import.component.css',\n providers: [DataImportService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataImportComponent<T extends {}> {\n previewColumns = input.required<ColumnDefinition<T>[]>();\n formGroupConfig = input<\n FormGroupConfig<{\n [K in keyof T]: AbstractControl;\n }>\n >();\n /**\n * @deprecated Use importKey of previewColumns instead\n */\n fields = input<string[]>();\n title = input<string>('export-template');\n columnTemplates = input<readonly ColumnDirective[]>([]);\n parser = input<(data: any) => Partial<T>[]>();\n /**\n * @deprecated Please remove, now handled internally\n */\n previewData = input<T[]>();\n /**\n * Pass the method to use the imported data,\n * and eventually returns true if successfully used\n */\n onImportComplete = input<(data: Partial<T>[]) => Promise<boolean>>();\n /**\n * @deprecated Please remove, now handled internally\n */\n exportTemplateEvent = output<string[]>();\n /**\n * @deprecated Please remove, now handled internally\n */\n importEvent = output<File>();\n /**\n * @deprecated Use the onImportComplete input instead\n */\n importEventData = output<Partial<T>[]>();\n /**\n * @deprecated Please remove, now handled internally\n */\n rowSave = output<{\n index: number;\n key: number | string;\n data: Partial<T>;\n }>();\n\n // data: Signal<(T & { isDuplicate: boolean })[]>;\n previewColumnsList: Signal<ColumnDefinition<T>[]>;\n forms = new FormArray<FormGroup>([]);\n uniqueIdentifiers: WritableSignal<string[]> = signal([]);\n // duplicateDataMap: Map<string, number> = new Map();\n duplicateIndexSet = new Set<number>();\n invalidIndexSet = new Map<number, ColumnDirective['columnId'][]>();\n\n headers: Signal<string[]>;\n\n private _ext: 'xlsx' | 'xls' | 'csv' = 'xlsx';\n\n files: File[] = [];\n isDragging = false;\n showPreview = false;\n\n constructor(public service: DataImportService<T>) {\n effect(() => {\n // const columns = this.previewColumnsList();\n\n const identifiers = this.uniqueIdentifiers();\n\n this.service.importedData()?.forEach((d, i, arr) => {\n if (service.isDuplicate(d, arr, identifiers)) {\n this.duplicateIndexSet.add(i);\n }\n\n // columns\n // .filter(({ validatorFn }) => validatorFn !== undefined)\n // .forEach((column) => {\n // const invalidFields = Object.entries(d).reduce<string[]>(\n // (f, [k, v], i) => {\n // if (\n // column.validatorFn &&\n // !column.validatorFn(v as T[keyof T])\n // ) {\n // f.push(column.id);\n // }\n // return f;\n // },\n // []\n // );\n\n // if (invalidFields.length > 0) {\n // this.invalidIndexSet.set(i, invalidFields);\n // }\n // });\n });\n });\n\n this.previewColumnsList = computed(() => {\n return this.previewColumns()\n .filter((col) => col.importKey || col.importBy || col.formControlName)\n .map((column) => {\n const matchingTemplate = this.columnTemplates().find(\n (t) => t.columnId === column.id\n );\n if (matchingTemplate) {\n return {\n ...column,\n // accessorKey: column.importKey,\n cellTemplate: matchingTemplate.cellTemplate,\n cellEditTemplate: matchingTemplate.cellEditTemplate,\n headerTemplate: matchingTemplate.headerTemplate,\n footerTemplate: matchingTemplate.footerTemplate,\n };\n }\n return column;\n })\n .concat([\n {\n id: 'actions',\n header: 'Actions',\n },\n ]);\n });\n\n this.headers = computed(() => {\n return (\n this.fields() ??\n this.previewColumnsList()\n .filter((col) => col.importKey || col.importBy)\n .map((col) => col.header.toString())\n );\n });\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n this.isDragging = true;\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n this.isDragging = false;\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n this.isDragging = false;\n this.files = Array.from(event.dataTransfer!.files);\n\n this.service.handleImport(\n this.files[0],\n this.previewColumnsList(),\n this.parser()\n );\n // this.importEvent.emit(this.files[0]);\n this.showPreview = true;\n }\n\n onFileSelected(event: any) {\n this.files = Array.from(event.target.files);\n this.service.handleImport(\n this.files[0],\n this.previewColumnsList(),\n this.parser()\n );\n\n event.target.value = '';\n\n // this.importEvent.emit(this.files[0]);\n this.showPreview = true;\n }\n\n reset() {\n this.files = [];\n this.showPreview = false;\n this.service.clearData();\n }\n\n save() {\n // console.log('PREVDATA', this.service.importedData());\n const onComplete = this.onImportComplete();\n if (onComplete) {\n onComplete(this.service.importedData()).then((success) => {\n if (success) {\n this.showPreview = false;\n }\n });\n } else {\n this.importEventData.emit(this.service.importedData() || []);\n this.showPreview = false;\n }\n }\n\n getControlNames() {\n const controls = this.formGroupConfig()?.controls;\n if (controls) {\n return Object.keys(controls);\n }\n return [];\n }\n\n handleTemplateExport() {\n this.service.handleTemplateExport(this.headers(), this.title());\n // this.exportTemplateEvent.emit(this.headers());\n }\n\n // getFormControl(index: number, field: string) {\n // const control = this..get(index)?.get(field) as FormControl<any>;\n // console.log(control);\n // return control;\n // }\n}\n","<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\" [style.color]=\"'#3479E9'\"\n >click to browse</label\n >\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n [disabled]=\"service.importedData().length < 1\"\n class=\"export-button\"\n (click)=\"save()\"\n >\n Import\n </button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: {} }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ service.importedData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ invalidIndexSet.size }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"headers()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <div style=\"max-height: min(75vh, 780px); overflow: auto\">\n <lib-data-table\n [data]=\"service.importedData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n [useVirtualScroll]=\"true\"\n (rowSave)=\"service.addRow($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataImportComponent } from './data-import.component';\nimport { CardModule } from 'verben-ng-ui/src/lib/components/card';\nimport { VerbenDialogueModule } from 'verben-ng-ui/src/lib/components/verben-dialogue';\nimport { DataTableModule } from 'verben-ng-ui/src/lib/components/data-table';\nimport { VerbenaInputModule } from 'verben-ng-ui/src/lib/verbena-input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\n\n@NgModule({\n declarations: [DataImportComponent],\n imports: [\n CommonModule,\n CardModule,\n VerbenDialogueModule,\n DataTableModule,\n VerbenaInputModule,\n DropDownModule,\n ReactiveFormsModule,\n FormsModule,\n SvgModule,\n ],\n exports: [DataImportComponent],\n})\nexport class DataImportModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DataImportService"],"mappings":"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"}
@@ -211,11 +211,13 @@ class DatePickerComponent {
211
211
  confirm() {
212
212
  if (!this.tempSelectedDate)
213
213
  return;
214
- if (this.isDisabled(this.tempSelectedDate))
215
- return;
216
214
  const hours = Number(this.selectedHour);
217
215
  const minutes = Number(this.selectedMinute);
216
+ // Apply selected time FIRST
218
217
  this.tempSelectedDate.setHours(hours, minutes, 0, 0);
218
+ // THEN validate
219
+ if (this.isDisabled(this.tempSelectedDate))
220
+ return;
219
221
  this.selectedDate = new Date(this.tempSelectedDate);
220
222
  this.date = this.selectedDate;
221
223
  const pad = (n) => n.toString().padStart(2, '0');
@@ -311,11 +313,19 @@ class DatePickerComponent {
311
313
  sanitizeDateString(value) {
312
314
  return value?.endsWith('Z') ? value.slice(0, -1) : value;
313
315
  }
316
+ // isDisabled(day: Date | string): boolean {
317
+ // const dayDate = this.toDate(day);
318
+ // if (this.minDate && dayDate < this.stripTime(this.toDate(this.minDate)))
319
+ // return true;
320
+ // if (this.maxDate && dayDate > this.stripTime(this.toDate(this.maxDate)))
321
+ // return true;
322
+ // return false;
323
+ // }
314
324
  isDisabled(day) {
315
- const dayDate = this.toDate(day);
316
- if (this.minDate && dayDate < this.stripTime(this.toDate(this.minDate)))
325
+ const dayDate = this.stripTime(day);
326
+ if (this.minDate && dayDate < this.stripTime(this.minDate))
317
327
  return true;
318
- if (this.maxDate && dayDate > this.stripTime(this.toDate(this.maxDate)))
328
+ if (this.maxDate && dayDate > this.stripTime(this.maxDate))
319
329
  return true;
320
330
  return false;
321
331
  }
@@ -328,6 +338,24 @@ class DatePickerComponent {
328
338
  return value;
329
339
  return new Date(this.sanitizeDateString(value));
330
340
  }
341
+ // toDate(value: Date | string): Date {
342
+ // if (value instanceof Date) return value;
343
+ // const sanitized = this.sanitizeDateString(value);
344
+ // const [datePart, timePart] = sanitized.split('T');
345
+ // const [year, month, day] = datePart.split('-').map(Number);
346
+ // if (!timePart) {
347
+ // return new Date(year, month - 1, day);
348
+ // }
349
+ // const [hours, minutes, seconds] = timePart.split(':').map(Number);
350
+ // return new Date(
351
+ // year,
352
+ // month - 1,
353
+ // day,
354
+ // hours || 0,
355
+ // minutes || 0,
356
+ // seconds || 0,
357
+ // );
358
+ // }
331
359
  is24Hour = true;
332
360
  selectTemporaryDate(day) {
333
361
  if (!this.tempSelectedDate)
@@ -1 +1 @@
1
- {"version":3,"file":"verben-ng-ui-src-lib-components-date-picker.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.component.ts","../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.component.html","../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.module.ts","../../../projects/verben-ng-ui/src/lib/components/date-picker/verben-ng-ui-src-lib-components-date-picker.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport { DropdownChangeEvent } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'app-date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n ],\n})\nexport class DatePickerComponent implements ControlValueAccessor {\n @Input() placeholder = 'Select date';\n @Input() format = 'MM/DD/YYYY';\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n @Input() disabled?: boolean = false;\n @Input() bgColor?: string = '#fff';\n @Input() border?: string = '';\n @Input() useDropdowns: boolean = true;\n @Input() yearPlaceholder: string = 'Select a year';\n @Input() monthPlaceholder: string = 'Select a month';\n @Input() date: Date | null | string = null;\n @Input() showTime: boolean = false;\n @Input() overlayWidth: number | null = 400;\n\n @Input() datePickerWidth: string = '400px';\n @Input() useDefaultDate: boolean = false;\n\n @Output() dateChange = new EventEmitter<Date | null>();\n @ViewChild('datePickerContainer', { static: true })\n datePickerContainer!: ElementRef;\n @ViewChild('datePickerExpansion', { static: false })\n datePickerExpansion!: ElementRef;\n\n yearRange: number[] = [];\n filteredYearRange: number[] = [];\n\n selectedDate: Date | null = null;\n tempSelectedDate: Date | null = null;\n\n showCalendar = false;\n\n weekDays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n selectedMonth: number = 1;\n selectedMonthString: string = '';\n selectedYear: number = new Date().getFullYear();\n\n daysInMonth: (Date | null)[] = [];\n\n private onChange: any = () => {};\n private onTouched: any = () => {};\n\n writeValue(value: Date | string | null): void {\n if (value) {\n if (typeof value === 'string') {\n value = this.sanitizeDateString(value);\n }\n\n const parsedDate = typeof value === 'string' ? new Date(value) : value;\n this.date = parsedDate;\n\n this.selectedDate = new Date(parsedDate);\n this.tempSelectedDate = new Date(parsedDate);\n this.selectedMonth = this.selectedDate.getMonth();\n this.selectedYear = this.selectedDate.getFullYear();\n\n if (this.showTime) {\n this.initTimeFromDate(this.selectedDate);\n }\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnChanges() {\n if (this.date) {\n let d = this.date;\n if (typeof d === 'string') d = this.sanitizeDateString(d);\n\n const parsedDate = new Date(d);\n this.selectedDate = new Date(parsedDate);\n this.tempSelectedDate = new Date(parsedDate);\n this.selectedMonth = this.selectedDate.getMonth();\n this.selectedYear = this.selectedDate.getFullYear();\n }\n }\n\n isSameDate(d1: Date, d2: Date): boolean {\n return (\n d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate()\n );\n }\n\n ngOnInit() {\n const currentYear = new Date().getFullYear();\n const endYear = currentYear + 10;\n this.yearRange = Array.from(\n { length: endYear - 1960 + 1 },\n (_, i) => 1960 + i,\n );\n this.yearRange.sort((a, b) => b - a);\n\n if (!this.date && this.useDefaultDate) {\n const now = new Date();\n const pad = (n: number) => n.toString().padStart(2, '0');\n\n const localDateString = `${now.getFullYear()}-${pad(\n now.getMonth() + 1,\n )}-${pad(now.getDate())}T${pad(now.getHours())}:${pad(\n now.getMinutes(),\n )}:${pad(now.getSeconds())}`;\n\n this.selectedDate = new Date(localDateString);\n this.tempSelectedDate = new Date(localDateString);\n this.date = this.selectedDate;\n\n if (this.showTime) {\n const hours = now.getHours();\n const minutes = now.getMinutes();\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n }\n\n this.dateChange.emit(this.selectedDate);\n this.onChange(localDateString);\n }\n this.generateDaysInMonth();\n }\n\n get displayDate(): string {\n const parsedDate =\n typeof this.date === 'string' ? new Date(this.date) : this.date;\n return parsedDate ? this.formatDate(parsedDate, this.format) : '';\n }\n\n tempTime: string = '';\n selectedHour = '00';\n selectedMinute = '00';\n\n showHourOptions = false;\n showMinuteOptions = false;\n\n hours = Array.from({ length: 24 }, (_, i) => String(i).padStart(2, '0'));\n minutes = Array.from({ length: 60 }, (_, i) => String(i).padStart(2, '0'));\n\n toggleHourDropdown() {\n this.showHourOptions = !this.showHourOptions;\n this.showMinuteOptions = false;\n }\n\n toggleMinuteDropdown() {\n this.showMinuteOptions = !this.showMinuteOptions;\n this.showHourOptions = false;\n }\n\n selectHour(h: string) {\n this.selectedHour = h;\n this.showHourOptions = false;\n }\n\n selectMinute(m: string) {\n this.selectedMinute = m;\n this.showMinuteOptions = false;\n }\n\n toggleCalendar() {\n this.showCalendar = !this.showCalendar;\n\n if (this.date) {\n this.tempSelectedDate = new Date(this.date);\n } else {\n this.tempSelectedDate = this.useDefaultDate ? new Date() : null;\n }\n\n if (this.tempSelectedDate) {\n this.selectedMonth = this.tempSelectedDate.getMonth();\n this.selectedMonthString = this.months[this.selectedMonth];\n this.selectedYear = this.tempSelectedDate.getFullYear();\n }\n\n this.generateDaysInMonth();\n\n if (this.showTime && !this.tempTime) {\n const today = new Date();\n const isToday =\n this.tempSelectedDate && this.isSameDate(this.tempSelectedDate, today);\n\n const hours = isToday ? today.getHours() : 0;\n const minutes = isToday ? today.getMinutes() : 0;\n\n if (this.tempSelectedDate) {\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n }\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n }\n }\n\n initTimeFromDate(date: Date) {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n this.tempSelectedDate?.setHours(hours, minutes, 0, 0);\n }\n clearDate() {\n this.date = null;\n this.selectedDate = null;\n this.tempSelectedDate = null;\n this.tempTime = '';\n this.selectedHour = '00';\n this.selectedMinute = '00';\n\n this.dateChange.emit(null);\n\n this.onChange(null);\n this.onTouched();\n\n this.showCalendar = false;\n }\n\n fixToUTC(dateValue: any) {\n if (!dateValue) return null;\n\n const date = dateValue instanceof Date ? dateValue : new Date(dateValue);\n if (isNaN(date.getTime())) return null;\n\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n ),\n );\n }\n\n confirm() {\n if (!this.tempSelectedDate) return;\n if (this.isDisabled(this.tempSelectedDate)) return;\n\n const hours = Number(this.selectedHour);\n const minutes = Number(this.selectedMinute);\n\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n\n this.selectedDate = new Date(this.tempSelectedDate);\n this.date = this.selectedDate;\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n const localDateString = `${this.selectedDate.getFullYear()}-${pad(\n this.selectedDate.getMonth() + 1,\n )}-${pad(this.selectedDate.getDate())}T${pad(\n this.selectedDate.getHours(),\n )}:${pad(this.selectedDate.getMinutes())}:${pad(\n this.selectedDate.getSeconds(),\n )}`;\n\n this.dateChange.emit(this.selectedDate);\n this.onChange(localDateString);\n this.onTouched();\n\n this.showCalendar = false;\n }\n\n setToStartOfDay() {\n if (!this.tempSelectedDate) return;\n\n this.selectedHour = '00';\n this.selectedMinute = '00';\n\n this.tempSelectedDate.setHours(0, 0, 0, 0);\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n\n this.selectedDate = new Date(this.tempSelectedDate);\n }\n\n setToEndOfDay() {\n if (!this.tempSelectedDate) return;\n\n this.selectedHour = '23';\n this.selectedMinute = '59';\n\n this.tempSelectedDate.setHours(23, 59, 59, 999);\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n\n this.selectedDate = new Date(this.tempSelectedDate);\n }\n\n previousMonth() {\n this.selectedMonth--;\n if (this.selectedMonth < 0) {\n this.selectedMonth = 11;\n this.selectedYear--;\n }\n this.updateTempSelectedDate();\n this.generateDaysInMonth();\n }\n\n nextMonth() {\n this.selectedMonth++;\n if (this.selectedMonth > 11) {\n this.selectedMonth = 0;\n this.selectedYear++;\n }\n this.updateTempSelectedDate();\n this.generateDaysInMonth();\n }\n\n onDropdownYearChange(event: DropdownChangeEvent): void {\n this.selectedYear = event.value;\n this.updateTempSelectedDate();\n this.generateDaysInMonth();\n }\n\n onDropdownMonthChange(event: DropdownChangeEvent): void {\n this.selectedMonth = this.months.indexOf(event.value);\n this.updateTempSelectedDate();\n this.generateDaysInMonth();\n }\n\n updateTempSelectedDate() {\n if (!this.tempSelectedDate) return;\n this.tempSelectedDate.setMonth(this.selectedMonth);\n this.tempSelectedDate.setFullYear(this.selectedYear);\n }\n\n generateDaysInMonth() {\n const days: (Date | null)[] = [];\n const year = this.selectedYear;\n const month = this.selectedMonth;\n\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const offset = firstDayOfMonth === 0 ? 6 : firstDayOfMonth - 1;\n\n for (let i = 0; i < offset; i++) {\n days.push(null);\n }\n\n const totalDays = new Date(year, month + 1, 0).getDate();\n for (let i = 1; i <= totalDays; i++) {\n days.push(new Date(year, month, i));\n }\n\n this.daysInMonth = days;\n }\n\n // getDaysInMonth(): (Date | null)[] {\n // const days: (Date | null)[] = [];\n // const year = this.selectedYear;\n // const month = this.selectedMonth;\n\n // const firstDayOfMonth = new Date(year, month, 1).getDay();\n // const offset = firstDayOfMonth === 0 ? 6 : firstDayOfMonth - 1;\n\n // for (let i = 0; i < offset; i++) {\n // days.push(null);\n // }\n\n // const totalDays = new Date(year, month + 1, 0).getDate();\n // for (let i = 1; i <= totalDays; i++) {\n // const day = new Date(year, month, i);\n // days.push(day);\n // }\n // return days;\n // }\n\n sanitizeDateString(value: string): string {\n return value?.endsWith('Z') ? value.slice(0, -1) : value;\n }\n\n isDisabled(day: Date | string): boolean {\n const dayDate = this.toDate(day);\n\n if (this.minDate && dayDate < this.stripTime(this.toDate(this.minDate)))\n return true;\n if (this.maxDate && dayDate > this.stripTime(this.toDate(this.maxDate)))\n return true;\n\n return false;\n }\n\n private stripTime(date: Date | string): Date {\n const d = this.toDate(date);\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n\n toDate(value: Date | string): Date {\n if (value instanceof Date) return value;\n return new Date(this.sanitizeDateString(value));\n }\n\n is24Hour: boolean = true;\n\n selectTemporaryDate(day: Date) {\n if (!this.tempSelectedDate) this.tempSelectedDate = new Date(day);\n if (this.isDisabled(day)) return;\n\n const isNewDate = !this.isSameDate(this.tempSelectedDate, day);\n this.tempSelectedDate = new Date(day);\n\n if (this.showTime) {\n if (isNewDate) {\n const today = new Date();\n const isToday =\n day.getFullYear() === today.getFullYear() &&\n day.getMonth() === today.getMonth() &&\n day.getDate() === today.getDate();\n\n const hours = isToday ? today.getHours() : 0;\n const minutes = isToday ? today.getMinutes() : 0;\n\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n } else {\n const [h, m] = this.tempTime.split(':');\n this.selectedHour = h;\n this.selectedMinute = m;\n }\n }\n }\n\n isSelected(day: Date): boolean {\n if (!this.tempSelectedDate) return false;\n\n return (\n day.getDate() === this.tempSelectedDate.getDate() &&\n day.getMonth() === this.tempSelectedDate.getMonth() &&\n day.getFullYear() === this.tempSelectedDate.getFullYear()\n );\n }\n\n formatDate(date: Date, format: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n\n switch (format) {\n case 'DD/MM/YYYY':\n return `${day}/${month}/${year}`;\n case 'MM/DD/YYYY':\n default:\n return `${month}/${day}/${year}`;\n }\n }\n\n cancel() {\n this.showCalendar = false;\n }\n\n @HostListener('document:click', ['$event.target'])\n onClickOutside(targetElement: any) {\n if (!this.showCalendar) {\n return;\n }\n const isInsidePane = targetElement.closest('.cdk-overlay-pane') !== null;\n\n // !this.datePickerContainer.nativeElement.contains(targetElement)\n if (\n this.showCalendar &&\n this.datePickerExpansion &&\n !this.datePickerExpansion.nativeElement.contains(targetElement) &&\n !isInsidePane\n ) {\n this.showCalendar = false;\n }\n }\n}\n","<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false,\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"\n overlayWidth ? overlayWidth : datePickerContainer.offsetWidth\n \"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of daysInMonth\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { DatePickerComponent } from './date-picker.component';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { VerbenPopUpModule } from 'verben-ng-ui/src/lib/components/pop-up';\nimport { OutSideClickDirective } from 'verben-ng-ui/src/lib/components/data-view';\nimport { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';\nimport { OverlayModule } from '@angular/cdk/overlay';\n@NgModule({\n declarations: [DatePickerComponent],\n imports: [\n FormsModule,\n CommonModule,\n SvgModule,\n DropDownModule,\n VerbenPopUpModule,\n OutSideClickDirective,\n TooltipModule,\n OverlayModule,\n ],\n exports: [DatePickerComponent],\n})\nexport class DatePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verben-ng-ui-src-lib-components-date-picker.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.component.ts","../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.component.html","../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.module.ts","../../../projects/verben-ng-ui/src/lib/components/date-picker/verben-ng-ui-src-lib-components-date-picker.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport { DropdownChangeEvent } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'app-date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n ],\n})\nexport class DatePickerComponent implements ControlValueAccessor {\n @Input() placeholder = 'Select date';\n @Input() format = 'MM/DD/YYYY';\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n @Input() disabled?: boolean = false;\n @Input() bgColor?: string = '#fff';\n @Input() border?: string = '';\n @Input() useDropdowns: boolean = true;\n @Input() yearPlaceholder: string = 'Select a year';\n @Input() monthPlaceholder: string = 'Select a month';\n @Input() date: Date | null | string = null;\n @Input() showTime: boolean = false;\n @Input() overlayWidth: number | null = 400;\n\n @Input() datePickerWidth: string = '400px';\n @Input() useDefaultDate: boolean = false;\n\n @Output() dateChange = new EventEmitter<Date | null>();\n @ViewChild('datePickerContainer', { static: true })\n datePickerContainer!: ElementRef;\n @ViewChild('datePickerExpansion', { static: false })\n datePickerExpansion!: ElementRef;\n\n yearRange: number[] = [];\n filteredYearRange: number[] = [];\n\n selectedDate: Date | null = null;\n tempSelectedDate: Date | null = null;\n\n showCalendar = false;\n\n weekDays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n selectedMonth: number = 1;\n selectedMonthString: string = '';\n selectedYear: number = new Date().getFullYear();\n\n daysInMonth: (Date | null)[] = [];\n\n private onChange: any = () => {};\n private onTouched: any = () => {};\n\n writeValue(value: Date | string | null): void {\n if (value) {\n if (typeof value === 'string') {\n value = this.sanitizeDateString(value);\n }\n\n const parsedDate = typeof value === 'string' ? new Date(value) : value;\n this.date = parsedDate;\n\n this.selectedDate = new Date(parsedDate);\n this.tempSelectedDate = new Date(parsedDate);\n this.selectedMonth = this.selectedDate.getMonth();\n this.selectedYear = this.selectedDate.getFullYear();\n\n if (this.showTime) {\n this.initTimeFromDate(this.selectedDate);\n }\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnChanges() {\n if (this.date) {\n let d = this.date;\n if (typeof d === 'string') d = this.sanitizeDateString(d);\n\n const parsedDate = new Date(d);\n this.selectedDate = new Date(parsedDate);\n this.tempSelectedDate = new Date(parsedDate);\n this.selectedMonth = this.selectedDate.getMonth();\n this.selectedYear = this.selectedDate.getFullYear();\n }\n }\n\n isSameDate(d1: Date, d2: Date): boolean {\n return (\n d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate()\n );\n }\n\n ngOnInit() {\n const currentYear = new Date().getFullYear();\n const endYear = currentYear + 10;\n this.yearRange = Array.from(\n { length: endYear - 1960 + 1 },\n (_, i) => 1960 + i,\n );\n this.yearRange.sort((a, b) => b - a);\n\n if (!this.date && this.useDefaultDate) {\n const now = new Date();\n const pad = (n: number) => n.toString().padStart(2, '0');\n\n const localDateString = `${now.getFullYear()}-${pad(\n now.getMonth() + 1,\n )}-${pad(now.getDate())}T${pad(now.getHours())}:${pad(\n now.getMinutes(),\n )}:${pad(now.getSeconds())}`;\n\n this.selectedDate = new Date(localDateString);\n this.tempSelectedDate = new Date(localDateString);\n this.date = this.selectedDate;\n\n if (this.showTime) {\n const hours = now.getHours();\n const minutes = now.getMinutes();\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n }\n\n this.dateChange.emit(this.selectedDate);\n this.onChange(localDateString);\n }\n this.generateDaysInMonth();\n }\n\n get displayDate(): string {\n const parsedDate =\n typeof this.date === 'string' ? new Date(this.date) : this.date;\n return parsedDate ? this.formatDate(parsedDate, this.format) : '';\n }\n\n tempTime: string = '';\n selectedHour = '00';\n selectedMinute = '00';\n\n showHourOptions = false;\n showMinuteOptions = false;\n\n hours = Array.from({ length: 24 }, (_, i) => String(i).padStart(2, '0'));\n minutes = Array.from({ length: 60 }, (_, i) => String(i).padStart(2, '0'));\n\n toggleHourDropdown() {\n this.showHourOptions = !this.showHourOptions;\n this.showMinuteOptions = false;\n }\n\n toggleMinuteDropdown() {\n this.showMinuteOptions = !this.showMinuteOptions;\n this.showHourOptions = false;\n }\n\n selectHour(h: string) {\n this.selectedHour = h;\n this.showHourOptions = false;\n }\n\n selectMinute(m: string) {\n this.selectedMinute = m;\n this.showMinuteOptions = false;\n }\n\n toggleCalendar() {\n this.showCalendar = !this.showCalendar;\n\n if (this.date) {\n this.tempSelectedDate = new Date(this.date);\n } else {\n this.tempSelectedDate = this.useDefaultDate ? new Date() : null;\n }\n\n if (this.tempSelectedDate) {\n this.selectedMonth = this.tempSelectedDate.getMonth();\n this.selectedMonthString = this.months[this.selectedMonth];\n this.selectedYear = this.tempSelectedDate.getFullYear();\n }\n\n this.generateDaysInMonth();\n\n if (this.showTime && !this.tempTime) {\n const today = new Date();\n const isToday =\n this.tempSelectedDate && this.isSameDate(this.tempSelectedDate, today);\n\n const hours = isToday ? today.getHours() : 0;\n const minutes = isToday ? today.getMinutes() : 0;\n\n if (this.tempSelectedDate) {\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n }\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n }\n }\n\n initTimeFromDate(date: Date) {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n this.tempSelectedDate?.setHours(hours, minutes, 0, 0);\n }\n clearDate() {\n this.date = null;\n this.selectedDate = null;\n this.tempSelectedDate = null;\n this.tempTime = '';\n this.selectedHour = '00';\n this.selectedMinute = '00';\n\n this.dateChange.emit(null);\n\n this.onChange(null);\n this.onTouched();\n\n this.showCalendar = false;\n }\n\n fixToUTC(dateValue: any) {\n if (!dateValue) return null;\n\n const date = dateValue instanceof Date ? dateValue : new Date(dateValue);\n if (isNaN(date.getTime())) return null;\n\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n ),\n );\n }\n\n confirm() {\n if (!this.tempSelectedDate) return;\n\n const hours = Number(this.selectedHour);\n const minutes = Number(this.selectedMinute);\n\n // Apply selected time FIRST\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n\n // THEN validate\n if (this.isDisabled(this.tempSelectedDate)) return;\n\n this.selectedDate = new Date(this.tempSelectedDate);\n this.date = this.selectedDate;\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n\n const localDateString = `${this.selectedDate.getFullYear()}-${pad(\n this.selectedDate.getMonth() + 1,\n )}-${pad(this.selectedDate.getDate())}T${pad(\n this.selectedDate.getHours(),\n )}:${pad(this.selectedDate.getMinutes())}:${pad(\n this.selectedDate.getSeconds(),\n )}`;\n\n this.dateChange.emit(this.selectedDate);\n this.onChange(localDateString);\n this.onTouched();\n\n this.showCalendar = false;\n }\n\n setToStartOfDay() {\n if (!this.tempSelectedDate) return;\n\n this.selectedHour = '00';\n this.selectedMinute = '00';\n\n this.tempSelectedDate.setHours(0, 0, 0, 0);\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n\n this.selectedDate = new Date(this.tempSelectedDate);\n }\n\n setToEndOfDay() {\n if (!this.tempSelectedDate) return;\n\n this.selectedHour = '23';\n this.selectedMinute = '59';\n\n this.tempSelectedDate.setHours(23, 59, 59, 999);\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n\n this.selectedDate = new Date(this.tempSelectedDate);\n }\n\n previousMonth() {\n this.selectedMonth--;\n if (this.selectedMonth < 0) {\n this.selectedMonth = 11;\n this.selectedYear--;\n }\n this.updateTempSelectedDate();\n this.generateDaysInMonth();\n }\n\n nextMonth() {\n this.selectedMonth++;\n if (this.selectedMonth > 11) {\n this.selectedMonth = 0;\n this.selectedYear++;\n }\n this.updateTempSelectedDate();\n this.generateDaysInMonth();\n }\n\n onDropdownYearChange(event: DropdownChangeEvent): void {\n this.selectedYear = event.value;\n this.updateTempSelectedDate();\n this.generateDaysInMonth();\n }\n\n onDropdownMonthChange(event: DropdownChangeEvent): void {\n this.selectedMonth = this.months.indexOf(event.value);\n this.updateTempSelectedDate();\n this.generateDaysInMonth();\n }\n\n updateTempSelectedDate() {\n if (!this.tempSelectedDate) return;\n this.tempSelectedDate.setMonth(this.selectedMonth);\n this.tempSelectedDate.setFullYear(this.selectedYear);\n }\n\n generateDaysInMonth() {\n const days: (Date | null)[] = [];\n const year = this.selectedYear;\n const month = this.selectedMonth;\n\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const offset = firstDayOfMonth === 0 ? 6 : firstDayOfMonth - 1;\n\n for (let i = 0; i < offset; i++) {\n days.push(null);\n }\n\n const totalDays = new Date(year, month + 1, 0).getDate();\n for (let i = 1; i <= totalDays; i++) {\n days.push(new Date(year, month, i));\n }\n\n this.daysInMonth = days;\n }\n\n // getDaysInMonth(): (Date | null)[] {\n // const days: (Date | null)[] = [];\n // const year = this.selectedYear;\n // const month = this.selectedMonth;\n\n // const firstDayOfMonth = new Date(year, month, 1).getDay();\n // const offset = firstDayOfMonth === 0 ? 6 : firstDayOfMonth - 1;\n\n // for (let i = 0; i < offset; i++) {\n // days.push(null);\n // }\n\n // const totalDays = new Date(year, month + 1, 0).getDate();\n // for (let i = 1; i <= totalDays; i++) {\n // const day = new Date(year, month, i);\n // days.push(day);\n // }\n // return days;\n // }\n\n sanitizeDateString(value: string): string {\n return value?.endsWith('Z') ? value.slice(0, -1) : value;\n }\n\n // isDisabled(day: Date | string): boolean {\n // const dayDate = this.toDate(day);\n\n // if (this.minDate && dayDate < this.stripTime(this.toDate(this.minDate)))\n // return true;\n // if (this.maxDate && dayDate > this.stripTime(this.toDate(this.maxDate)))\n // return true;\n\n // return false;\n // }\n\n isDisabled(day: Date | string): boolean {\n const dayDate = this.stripTime(day);\n\n if (this.minDate && dayDate < this.stripTime(this.minDate)) return true;\n\n if (this.maxDate && dayDate > this.stripTime(this.maxDate)) return true;\n\n return false;\n }\n\n private stripTime(date: Date | string): Date {\n const d = this.toDate(date);\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n\n toDate(value: Date | string): Date {\n if (value instanceof Date) return value;\n return new Date(this.sanitizeDateString(value));\n }\n\n // toDate(value: Date | string): Date {\n // if (value instanceof Date) return value;\n\n // const sanitized = this.sanitizeDateString(value);\n\n // const [datePart, timePart] = sanitized.split('T');\n // const [year, month, day] = datePart.split('-').map(Number);\n\n // if (!timePart) {\n // return new Date(year, month - 1, day);\n // }\n\n // const [hours, minutes, seconds] = timePart.split(':').map(Number);\n\n // return new Date(\n // year,\n // month - 1,\n // day,\n // hours || 0,\n // minutes || 0,\n // seconds || 0,\n // );\n // }\n\n is24Hour: boolean = true;\n\n selectTemporaryDate(day: Date) {\n if (!this.tempSelectedDate) this.tempSelectedDate = new Date(day);\n if (this.isDisabled(day)) return;\n\n const isNewDate = !this.isSameDate(this.tempSelectedDate, day);\n this.tempSelectedDate = new Date(day);\n\n if (this.showTime) {\n if (isNewDate) {\n const today = new Date();\n const isToday =\n day.getFullYear() === today.getFullYear() &&\n day.getMonth() === today.getMonth() &&\n day.getDate() === today.getDate();\n\n const hours = isToday ? today.getHours() : 0;\n const minutes = isToday ? today.getMinutes() : 0;\n\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n } else {\n const [h, m] = this.tempTime.split(':');\n this.selectedHour = h;\n this.selectedMinute = m;\n }\n }\n }\n\n isSelected(day: Date): boolean {\n if (!this.tempSelectedDate) return false;\n\n return (\n day.getDate() === this.tempSelectedDate.getDate() &&\n day.getMonth() === this.tempSelectedDate.getMonth() &&\n day.getFullYear() === this.tempSelectedDate.getFullYear()\n );\n }\n\n formatDate(date: Date, format: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n\n switch (format) {\n case 'DD/MM/YYYY':\n return `${day}/${month}/${year}`;\n case 'MM/DD/YYYY':\n default:\n return `${month}/${day}/${year}`;\n }\n }\n\n cancel() {\n this.showCalendar = false;\n }\n\n @HostListener('document:click', ['$event.target'])\n onClickOutside(targetElement: any) {\n if (!this.showCalendar) {\n return;\n }\n const isInsidePane = targetElement.closest('.cdk-overlay-pane') !== null;\n\n // !this.datePickerContainer.nativeElement.contains(targetElement)\n if (\n this.showCalendar &&\n this.datePickerExpansion &&\n !this.datePickerExpansion.nativeElement.contains(targetElement) &&\n !isInsidePane\n ) {\n this.showCalendar = false;\n }\n }\n}\n","<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false,\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"\n overlayWidth ? overlayWidth : datePickerContainer.offsetWidth\n \"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of daysInMonth\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { DatePickerComponent } from './date-picker.component';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { VerbenPopUpModule } from 'verben-ng-ui/src/lib/components/pop-up';\nimport { OutSideClickDirective } from 'verben-ng-ui/src/lib/components/data-view';\nimport { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';\nimport { OverlayModule } from '@angular/cdk/overlay';\n@NgModule({\n declarations: [DatePickerComponent],\n imports: [\n FormsModule,\n CommonModule,\n SvgModule,\n DropDownModule,\n VerbenPopUpModule,\n OutSideClickDirective,\n TooltipModule,\n OverlayModule,\n ],\n exports: [DatePickerComponent],\n})\nexport class DatePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "verben-ng-ui",
3
- "version": "1.2.67",
3
+ "version": "1.2.69",
4
4
  "author": "Verbena Logic",
5
5
  "repository": {
6
6
  "type": "git",
@@ -87,6 +87,18 @@
87
87
  "esm": "./esm2022/src/lib/theme-switcher/verben-ng-ui-src-lib-theme-switcher.mjs",
88
88
  "default": "./fesm2022/verben-ng-ui-src-lib-theme-switcher.mjs"
89
89
  },
90
+ "./src/lib/phone-number": {
91
+ "types": "./src/lib/phone-number/index.d.ts",
92
+ "esm2022": "./esm2022/src/lib/phone-number/verben-ng-ui-src-lib-phone-number.mjs",
93
+ "esm": "./esm2022/src/lib/phone-number/verben-ng-ui-src-lib-phone-number.mjs",
94
+ "default": "./fesm2022/verben-ng-ui-src-lib-phone-number.mjs"
95
+ },
96
+ "./src/lib/required-input": {
97
+ "types": "./src/lib/required-input/index.d.ts",
98
+ "esm2022": "./esm2022/src/lib/required-input/verben-ng-ui-src-lib-required-input.mjs",
99
+ "esm": "./esm2022/src/lib/required-input/verben-ng-ui-src-lib-required-input.mjs",
100
+ "default": "./fesm2022/verben-ng-ui-src-lib-required-input.mjs"
101
+ },
90
102
  "./src/lib/validate-input": {
91
103
  "types": "./src/lib/validate-input/index.d.ts",
92
104
  "esm2022": "./esm2022/src/lib/validate-input/verben-ng-ui-src-lib-validate-input.mjs",
@@ -99,12 +111,6 @@
99
111
  "esm": "./esm2022/src/lib/validate/verben-ng-ui-src-lib-validate.mjs",
100
112
  "default": "./fesm2022/verben-ng-ui-src-lib-validate.mjs"
101
113
  },
102
- "./src/lib/verbena-button": {
103
- "types": "./src/lib/verbena-button/index.d.ts",
104
- "esm2022": "./esm2022/src/lib/verbena-button/verben-ng-ui-src-lib-verbena-button.mjs",
105
- "esm": "./esm2022/src/lib/verbena-button/verben-ng-ui-src-lib-verbena-button.mjs",
106
- "default": "./fesm2022/verben-ng-ui-src-lib-verbena-button.mjs"
107
- },
108
114
  "./src/lib/verbena-badge": {
109
115
  "types": "./src/lib/verbena-badge/index.d.ts",
110
116
  "esm2022": "./esm2022/src/lib/verbena-badge/verben-ng-ui-src-lib-verbena-badge.mjs",
@@ -117,17 +123,11 @@
117
123
  "esm": "./esm2022/src/lib/verbena-input/verben-ng-ui-src-lib-verbena-input.mjs",
118
124
  "default": "./fesm2022/verben-ng-ui-src-lib-verbena-input.mjs"
119
125
  },
120
- "./src/lib/phone-number": {
121
- "types": "./src/lib/phone-number/index.d.ts",
122
- "esm2022": "./esm2022/src/lib/phone-number/verben-ng-ui-src-lib-phone-number.mjs",
123
- "esm": "./esm2022/src/lib/phone-number/verben-ng-ui-src-lib-phone-number.mjs",
124
- "default": "./fesm2022/verben-ng-ui-src-lib-phone-number.mjs"
125
- },
126
- "./src/lib/required-input": {
127
- "types": "./src/lib/required-input/index.d.ts",
128
- "esm2022": "./esm2022/src/lib/required-input/verben-ng-ui-src-lib-required-input.mjs",
129
- "esm": "./esm2022/src/lib/required-input/verben-ng-ui-src-lib-required-input.mjs",
130
- "default": "./fesm2022/verben-ng-ui-src-lib-required-input.mjs"
126
+ "./src/lib/verbena-button": {
127
+ "types": "./src/lib/verbena-button/index.d.ts",
128
+ "esm2022": "./esm2022/src/lib/verbena-button/verben-ng-ui-src-lib-verbena-button.mjs",
129
+ "esm": "./esm2022/src/lib/verbena-button/verben-ng-ui-src-lib-verbena-button.mjs",
130
+ "default": "./fesm2022/verben-ng-ui-src-lib-verbena-button.mjs"
131
131
  },
132
132
  "./src/lib/components/card": {
133
133
  "types": "./src/lib/components/card/index.d.ts",
@@ -141,17 +141,11 @@
141
141
  "esm": "./esm2022/src/lib/components/card-data-view/verben-ng-ui-src-lib-components-card-data-view.mjs",
142
142
  "default": "./fesm2022/verben-ng-ui-src-lib-components-card-data-view.mjs"
143
143
  },
144
- "./src/lib/verbena-switch": {
145
- "types": "./src/lib/verbena-switch/index.d.ts",
146
- "esm2022": "./esm2022/src/lib/verbena-switch/verben-ng-ui-src-lib-verbena-switch.mjs",
147
- "esm": "./esm2022/src/lib/verbena-switch/verben-ng-ui-src-lib-verbena-switch.mjs",
148
- "default": "./fesm2022/verben-ng-ui-src-lib-verbena-switch.mjs"
149
- },
150
- "./src/lib/verbena-textarea": {
151
- "types": "./src/lib/verbena-textarea/index.d.ts",
152
- "esm2022": "./esm2022/src/lib/verbena-textarea/verben-ng-ui-src-lib-verbena-textarea.mjs",
153
- "esm": "./esm2022/src/lib/verbena-textarea/verben-ng-ui-src-lib-verbena-textarea.mjs",
154
- "default": "./fesm2022/verben-ng-ui-src-lib-verbena-textarea.mjs"
144
+ "./src/lib/components/chip": {
145
+ "types": "./src/lib/components/chip/index.d.ts",
146
+ "esm2022": "./esm2022/src/lib/components/chip/verben-ng-ui-src-lib-components-chip.mjs",
147
+ "esm": "./esm2022/src/lib/components/chip/verben-ng-ui-src-lib-components-chip.mjs",
148
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-chip.mjs"
155
149
  },
156
150
  "./src/lib/components/data-columns": {
157
151
  "types": "./src/lib/components/data-columns/index.d.ts",
@@ -159,11 +153,11 @@
159
153
  "esm": "./esm2022/src/lib/components/data-columns/verben-ng-ui-src-lib-components-data-columns.mjs",
160
154
  "default": "./fesm2022/verben-ng-ui-src-lib-components-data-columns.mjs"
161
155
  },
162
- "./src/lib/components/chip": {
163
- "types": "./src/lib/components/chip/index.d.ts",
164
- "esm2022": "./esm2022/src/lib/components/chip/verben-ng-ui-src-lib-components-chip.mjs",
165
- "esm": "./esm2022/src/lib/components/chip/verben-ng-ui-src-lib-components-chip.mjs",
166
- "default": "./fesm2022/verben-ng-ui-src-lib-components-chip.mjs"
156
+ "./src/lib/verbena-switch": {
157
+ "types": "./src/lib/verbena-switch/index.d.ts",
158
+ "esm2022": "./esm2022/src/lib/verbena-switch/verben-ng-ui-src-lib-verbena-switch.mjs",
159
+ "esm": "./esm2022/src/lib/verbena-switch/verben-ng-ui-src-lib-verbena-switch.mjs",
160
+ "default": "./fesm2022/verben-ng-ui-src-lib-verbena-switch.mjs"
167
161
  },
168
162
  "./src/lib/components/data-extend": {
169
163
  "types": "./src/lib/components/data-extend/index.d.ts",
@@ -171,6 +165,12 @@
171
165
  "esm": "./esm2022/src/lib/components/data-extend/verben-ng-ui-src-lib-components-data-extend.mjs",
172
166
  "default": "./fesm2022/verben-ng-ui-src-lib-components-data-extend.mjs"
173
167
  },
168
+ "./src/lib/verbena-textarea": {
169
+ "types": "./src/lib/verbena-textarea/index.d.ts",
170
+ "esm2022": "./esm2022/src/lib/verbena-textarea/verben-ng-ui-src-lib-verbena-textarea.mjs",
171
+ "esm": "./esm2022/src/lib/verbena-textarea/verben-ng-ui-src-lib-verbena-textarea.mjs",
172
+ "default": "./fesm2022/verben-ng-ui-src-lib-verbena-textarea.mjs"
173
+ },
174
174
  "./src/lib/components/data-import": {
175
175
  "types": "./src/lib/components/data-import/index.d.ts",
176
176
  "esm2022": "./esm2022/src/lib/components/data-import/verben-ng-ui-src-lib-components-data-import.mjs",
@@ -249,29 +249,17 @@
249
249
  "esm": "./esm2022/src/lib/components/icons/verben-ng-ui-src-lib-components-icons.mjs",
250
250
  "default": "./fesm2022/verben-ng-ui-src-lib-components-icons.mjs"
251
251
  },
252
- "./src/lib/components/sort-table": {
253
- "types": "./src/lib/components/sort-table/index.d.ts",
254
- "esm2022": "./esm2022/src/lib/components/sort-table/verben-ng-ui-src-lib-components-sort-table.mjs",
255
- "esm": "./esm2022/src/lib/components/sort-table/verben-ng-ui-src-lib-components-sort-table.mjs",
256
- "default": "./fesm2022/verben-ng-ui-src-lib-components-sort-table.mjs"
257
- },
258
252
  "./src/lib/components/shared": {
259
253
  "types": "./src/lib/components/shared/index.d.ts",
260
254
  "esm2022": "./esm2022/src/lib/components/shared/verben-ng-ui-src-lib-components-shared.mjs",
261
255
  "esm": "./esm2022/src/lib/components/shared/verben-ng-ui-src-lib-components-shared.mjs",
262
256
  "default": "./fesm2022/verben-ng-ui-src-lib-components-shared.mjs"
263
257
  },
264
- "./src/lib/components/pop-up": {
265
- "types": "./src/lib/components/pop-up/index.d.ts",
266
- "esm2022": "./esm2022/src/lib/components/pop-up/verben-ng-ui-src-lib-components-pop-up.mjs",
267
- "esm": "./esm2022/src/lib/components/pop-up/verben-ng-ui-src-lib-components-pop-up.mjs",
268
- "default": "./fesm2022/verben-ng-ui-src-lib-components-pop-up.mjs"
269
- },
270
- "./src/lib/components/table-filter": {
271
- "types": "./src/lib/components/table-filter/index.d.ts",
272
- "esm2022": "./esm2022/src/lib/components/table-filter/verben-ng-ui-src-lib-components-table-filter.mjs",
273
- "esm": "./esm2022/src/lib/components/table-filter/verben-ng-ui-src-lib-components-table-filter.mjs",
274
- "default": "./fesm2022/verben-ng-ui-src-lib-components-table-filter.mjs"
258
+ "./src/lib/components/sort-table": {
259
+ "types": "./src/lib/components/sort-table/index.d.ts",
260
+ "esm2022": "./esm2022/src/lib/components/sort-table/verben-ng-ui-src-lib-components-sort-table.mjs",
261
+ "esm": "./esm2022/src/lib/components/sort-table/verben-ng-ui-src-lib-components-sort-table.mjs",
262
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-sort-table.mjs"
275
263
  },
276
264
  "./src/lib/components/svg": {
277
265
  "types": "./src/lib/components/svg/index.d.ts",
@@ -279,12 +267,24 @@
279
267
  "esm": "./esm2022/src/lib/components/svg/verben-ng-ui-src-lib-components-svg.mjs",
280
268
  "default": "./fesm2022/verben-ng-ui-src-lib-components-svg.mjs"
281
269
  },
270
+ "./src/lib/components/table-filter": {
271
+ "types": "./src/lib/components/table-filter/index.d.ts",
272
+ "esm2022": "./esm2022/src/lib/components/table-filter/verben-ng-ui-src-lib-components-table-filter.mjs",
273
+ "esm": "./esm2022/src/lib/components/table-filter/verben-ng-ui-src-lib-components-table-filter.mjs",
274
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-table-filter.mjs"
275
+ },
282
276
  "./src/lib/components/tooltip": {
283
277
  "types": "./src/lib/components/tooltip/index.d.ts",
284
278
  "esm2022": "./esm2022/src/lib/components/tooltip/verben-ng-ui-src-lib-components-tooltip.mjs",
285
279
  "esm": "./esm2022/src/lib/components/tooltip/verben-ng-ui-src-lib-components-tooltip.mjs",
286
280
  "default": "./fesm2022/verben-ng-ui-src-lib-components-tooltip.mjs"
287
281
  },
282
+ "./src/lib/components/pop-up": {
283
+ "types": "./src/lib/components/pop-up/index.d.ts",
284
+ "esm2022": "./esm2022/src/lib/components/pop-up/verben-ng-ui-src-lib-components-pop-up.mjs",
285
+ "esm": "./esm2022/src/lib/components/pop-up/verben-ng-ui-src-lib-components-pop-up.mjs",
286
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-pop-up.mjs"
287
+ },
288
288
  "./src/lib/components/verben-dialogue": {
289
289
  "types": "./src/lib/components/verben-dialogue/index.d.ts",
290
290
  "esm2022": "./esm2022/src/lib/components/verben-dialogue/verben-ng-ui-src-lib-components-verben-dialogue.mjs",
@@ -303,18 +303,18 @@
303
303
  "esm": "./esm2022/src/lib/components/verben-time-picker/verben-ng-ui-src-lib-components-verben-time-picker.mjs",
304
304
  "default": "./fesm2022/verben-ng-ui-src-lib-components-verben-time-picker.mjs"
305
305
  },
306
- "./src/lib/components/verbena-tab": {
307
- "types": "./src/lib/components/verbena-tab/index.d.ts",
308
- "esm2022": "./esm2022/src/lib/components/verbena-tab/verben-ng-ui-src-lib-components-verbena-tab.mjs",
309
- "esm": "./esm2022/src/lib/components/verbena-tab/verben-ng-ui-src-lib-components-verbena-tab.mjs",
310
- "default": "./fesm2022/verben-ng-ui-src-lib-components-verbena-tab.mjs"
311
- },
312
306
  "./src/lib/components/verbena-icon": {
313
307
  "types": "./src/lib/components/verbena-icon/index.d.ts",
314
308
  "esm2022": "./esm2022/src/lib/components/verbena-icon/verben-ng-ui-src-lib-components-verbena-icon.mjs",
315
309
  "esm": "./esm2022/src/lib/components/verbena-icon/verben-ng-ui-src-lib-components-verbena-icon.mjs",
316
310
  "default": "./fesm2022/verben-ng-ui-src-lib-components-verbena-icon.mjs"
317
311
  },
312
+ "./src/lib/components/verbena-tab": {
313
+ "types": "./src/lib/components/verbena-tab/index.d.ts",
314
+ "esm2022": "./esm2022/src/lib/components/verbena-tab/verben-ng-ui-src-lib-components-verbena-tab.mjs",
315
+ "esm": "./esm2022/src/lib/components/verbena-tab/verben-ng-ui-src-lib-components-verbena-tab.mjs",
316
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-verbena-tab.mjs"
317
+ },
318
318
  "./src/lib/components/visible-column": {
319
319
  "types": "./src/lib/components/visible-column/index.d.ts",
320
320
  "esm2022": "./esm2022/src/lib/components/visible-column/verben-ng-ui-src-lib-components-visible-column.mjs",