@seniorsistemas/angular-components 16.13.2 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/bundles/seniorsistemas-angular-components.umd.js +1731 -24
  2. package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
  3. package/bundles/seniorsistemas-angular-components.umd.min.js +2 -2
  4. package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
  5. package/components/gantt/components/gantt/arrow.d.ts +16 -0
  6. package/components/gantt/components/gantt/bar.d.ts +43 -0
  7. package/components/gantt/components/gantt/gantt-options.d.ts +2 -0
  8. package/components/gantt/components/gantt/gantt.d.ts +66 -0
  9. package/components/gantt/components/gantt/popup.d.ts +11 -0
  10. package/components/gantt/components/gantt/utils/date-utils.d.ts +13 -0
  11. package/components/gantt/components/gantt/utils/svg-utils.d.ts +11 -0
  12. package/components/gantt/components/side-table/side-table.component.d.ts +7 -0
  13. package/components/gantt/gantt.component.d.ts +21 -0
  14. package/components/gantt/gantt.module.d.ts +2 -0
  15. package/components/gantt/index.d.ts +3 -0
  16. package/components/gantt/models/index.d.ts +3 -0
  17. package/components/gantt/models/options.d.ts +21 -0
  18. package/components/gantt/models/task.d.ts +21 -0
  19. package/components/gantt/models/view-mode.d.ts +9 -0
  20. package/esm2015/components/gantt/components/gantt/arrow.js +82 -0
  21. package/esm2015/components/gantt/components/gantt/bar.js +236 -0
  22. package/esm2015/components/gantt/components/gantt/gantt-options.js +16 -0
  23. package/esm2015/components/gantt/components/gantt/gantt.js +767 -0
  24. package/esm2015/components/gantt/components/gantt/popup.js +68 -0
  25. package/esm2015/components/gantt/components/gantt/utils/date-utils.js +126 -0
  26. package/esm2015/components/gantt/components/gantt/utils/svg-utils.js +119 -0
  27. package/esm2015/components/gantt/components/side-table/side-table.component.js +26 -0
  28. package/esm2015/components/gantt/gantt.component.js +112 -0
  29. package/esm2015/components/gantt/gantt.module.js +19 -0
  30. package/esm2015/components/gantt/index.js +4 -0
  31. package/esm2015/components/gantt/models/index.js +2 -0
  32. package/esm2015/components/gantt/models/options.js +1 -0
  33. package/esm2015/components/gantt/models/task.js +1 -0
  34. package/esm2015/components/gantt/models/view-mode.js +11 -0
  35. package/esm2015/public-api.js +2 -1
  36. package/esm2015/seniorsistemas-angular-components.js +25 -24
  37. package/esm5/components/gantt/components/gantt/arrow.js +81 -0
  38. package/esm5/components/gantt/components/gantt/bar.js +271 -0
  39. package/esm5/components/gantt/components/gantt/gantt-options.js +16 -0
  40. package/esm5/components/gantt/components/gantt/gantt.js +883 -0
  41. package/esm5/components/gantt/components/gantt/popup.js +59 -0
  42. package/esm5/components/gantt/components/gantt/utils/date-utils.js +134 -0
  43. package/esm5/components/gantt/components/gantt/utils/svg-utils.js +121 -0
  44. package/esm5/components/gantt/components/side-table/side-table.component.js +27 -0
  45. package/esm5/components/gantt/gantt.component.js +114 -0
  46. package/esm5/components/gantt/gantt.module.js +22 -0
  47. package/esm5/components/gantt/index.js +4 -0
  48. package/esm5/components/gantt/models/index.js +2 -0
  49. package/esm5/components/gantt/models/options.js +1 -0
  50. package/esm5/components/gantt/models/task.js +1 -0
  51. package/esm5/components/gantt/models/view-mode.js +11 -0
  52. package/esm5/public-api.js +2 -1
  53. package/esm5/seniorsistemas-angular-components.js +25 -24
  54. package/fesm2015/seniorsistemas-angular-components.js +1556 -2
  55. package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
  56. package/fesm5/seniorsistemas-angular-components.js +1706 -2
  57. package/fesm5/seniorsistemas-angular-components.js.map +1 -1
  58. package/package.json +1 -1
  59. package/public-api.d.ts +1 -0
  60. package/seniorsistemas-angular-components.d.ts +24 -23
  61. package/seniorsistemas-angular-components.metadata.json +1 -1
@@ -7975,6 +7975,1560 @@ EditableOverlayModule = __decorate([
7975
7975
  })
7976
7976
  ], EditableOverlayModule);
7977
7977
 
7978
+ const moment$7 = moment_;
7979
+ const YEAR = "year";
7980
+ const MONTH = "month";
7981
+ const DAY = "day";
7982
+ const HOUR = "hour";
7983
+ const MINUTE = "minute";
7984
+ const SECOND = "second";
7985
+ const MILLISECOND = "millisecond";
7986
+ class DateUtils {
7987
+ static parse(date) {
7988
+ return moment$7(date).toDate();
7989
+ }
7990
+ static toString(date, with_time = false) {
7991
+ let result = with_time ? moment$7(date, "YYYY-MM-DD hh:mm:ss.SSS") : moment$7(date, "YYYY-MM-DD");
7992
+ return result.toString();
7993
+ }
7994
+ static format(date, formatString = "YYYY-MM-DD HH:mm:ss.SSS", lang = "en") {
7995
+ const monthName = moment$7(date)
7996
+ .locale(lang)
7997
+ .startOf("month")
7998
+ .format("MMMM");
7999
+ const monthNameCapitalized = monthName.charAt(0).toUpperCase() + monthName.slice(1);
8000
+ const dateToFormat = moment$7(date);
8001
+ const format_map = {
8002
+ YYYY: dateToFormat.format("YYYY"),
8003
+ MM: dateToFormat.format("MM"),
8004
+ DD: dateToFormat.format("DD"),
8005
+ HH: dateToFormat.format("HH"),
8006
+ mm: dateToFormat.format("mm"),
8007
+ ss: dateToFormat.format("ss"),
8008
+ SSS: dateToFormat.format("SSS"),
8009
+ D: dateToFormat.format("D"),
8010
+ MMMM: monthNameCapitalized,
8011
+ MMM: monthNameCapitalized,
8012
+ };
8013
+ let str = formatString;
8014
+ const formattedValues = [];
8015
+ Object.keys(format_map)
8016
+ .sort((a, b) => b.length - a.length)
8017
+ .forEach(key => {
8018
+ if (str.includes(key)) {
8019
+ str = str.replace(key, `$${formattedValues.length}`);
8020
+ formattedValues.push(format_map[key]);
8021
+ }
8022
+ });
8023
+ formattedValues.forEach((value, i) => {
8024
+ str = str.replace(`$${i}`, value);
8025
+ });
8026
+ return str;
8027
+ }
8028
+ static diff(fistDate, secondDate, scale) {
8029
+ const milliseconds = moment$7(fistDate).diff(secondDate, MILLISECOND);
8030
+ const seconds = moment$7(fistDate).diff(secondDate, SECOND);
8031
+ const minutes = moment$7(fistDate).diff(secondDate, MINUTE);
8032
+ const hours = moment$7(fistDate).diff(secondDate, HOUR);
8033
+ const days = moment$7(fistDate).diff(secondDate, DAY);
8034
+ const months = moment$7(fistDate).diff(secondDate, MONTH);
8035
+ const years = moment$7(fistDate).diff(secondDate, YEAR);
8036
+ if (!scale.endsWith("s")) {
8037
+ scale += "s";
8038
+ }
8039
+ return Math.floor({
8040
+ milliseconds,
8041
+ seconds,
8042
+ minutes,
8043
+ hours,
8044
+ days,
8045
+ months,
8046
+ years,
8047
+ }[scale]);
8048
+ }
8049
+ static today() {
8050
+ const dateStr = moment$7().format("YYY-MM-DD");
8051
+ return new Date(dateStr);
8052
+ }
8053
+ static now() {
8054
+ return moment$7().toDate();
8055
+ }
8056
+ static add(date, quantity, scale) {
8057
+ return moment$7(date).add(quantity, scale).toDate();
8058
+ }
8059
+ static startOf(date, scale) {
8060
+ const scores = {
8061
+ [YEAR]: 6,
8062
+ [MONTH]: 5,
8063
+ [DAY]: 4,
8064
+ [HOUR]: 3,
8065
+ [MINUTE]: 2,
8066
+ [SECOND]: 1,
8067
+ [MILLISECOND]: 0,
8068
+ };
8069
+ function shouldReset(_scale) {
8070
+ const max_score = scores[scale];
8071
+ return scores[_scale] <= max_score;
8072
+ }
8073
+ const vals = [
8074
+ date.getFullYear(),
8075
+ shouldReset(YEAR) ? 0 : date.getMonth(),
8076
+ shouldReset(MONTH) ? 1 : date.getDate(),
8077
+ shouldReset(DAY) ? 0 : date.getHours(),
8078
+ shouldReset(HOUR) ? 0 : date.getMinutes(),
8079
+ shouldReset(MINUTE) ? 0 : date.getSeconds(),
8080
+ shouldReset(SECOND) ? 0 : date.getMilliseconds(),
8081
+ ];
8082
+ return new Date(vals[0], vals[1], vals[2], vals[3], vals[4], vals[5], vals[6]);
8083
+ }
8084
+ static clone(date) {
8085
+ return moment$7(date).toDate();
8086
+ }
8087
+ static getDateValues(date) {
8088
+ return [
8089
+ date.getFullYear(),
8090
+ date.getMonth(),
8091
+ date.getDate(),
8092
+ date.getHours(),
8093
+ date.getMinutes(),
8094
+ date.getSeconds(),
8095
+ date.getMilliseconds(),
8096
+ ];
8097
+ }
8098
+ static getDaysInMonth(date) {
8099
+ return moment$7(date, "YYYY-MM").daysInMonth();
8100
+ }
8101
+ }
8102
+
8103
+ const $ = (expr, con) => {
8104
+ return typeof expr === 'string'
8105
+ ? (con || document).querySelector(expr)
8106
+ : expr || null;
8107
+ };
8108
+ const createSVG = (tag, attrs) => {
8109
+ const elem = document.createElementNS("http://www.w3.org/2000/svg", tag);
8110
+ for (let attr in attrs) {
8111
+ if (attr === "append_to") {
8112
+ const parent = attrs.append_to;
8113
+ parent.appendChild(elem);
8114
+ }
8115
+ else if (attr === "innerHTML") {
8116
+ elem.innerHTML = attrs.innerHTML;
8117
+ }
8118
+ else {
8119
+ elem.setAttribute(attr, attrs[attr]);
8120
+ }
8121
+ }
8122
+ return elem;
8123
+ };
8124
+ const animateSVG = (svgElement, attr, from, to) => {
8125
+ const animatedSvgElement = getAnimationElement(svgElement, attr, from, to);
8126
+ if (animatedSvgElement === svgElement) {
8127
+ // triggered 2nd time programmatically
8128
+ // trigger artificial click event
8129
+ const event = document.createEvent("HTMLEvents");
8130
+ event.initEvent("click", true, true);
8131
+ // event.eventName = 'click'; TODO: Ver porque esta propriedade não existe
8132
+ animatedSvgElement.dispatchEvent(event);
8133
+ }
8134
+ };
8135
+ const getAnimationElement = (svgElement, attr, from, to, dur = "0.4s", begin = "0.1s") => {
8136
+ const animEl = svgElement.querySelector("animate");
8137
+ if (animEl) {
8138
+ $.attr(animEl, {
8139
+ attributeName: attr,
8140
+ from,
8141
+ to,
8142
+ dur,
8143
+ begin: "click + " + begin,
8144
+ }, null);
8145
+ return svgElement;
8146
+ }
8147
+ const animateElement = createSVG("animate", {
8148
+ attributeName: attr,
8149
+ from,
8150
+ to,
8151
+ dur,
8152
+ begin,
8153
+ calcMode: "spline",
8154
+ values: from + ";" + to,
8155
+ keyTimes: "0; 1",
8156
+ keySplines: cubic_bezier("ease-out"),
8157
+ });
8158
+ svgElement.appendChild(animateElement);
8159
+ return svgElement;
8160
+ };
8161
+ const ɵ0 = getAnimationElement;
8162
+ const cubic_bezier = (name) => {
8163
+ return {
8164
+ ease: ".25 .1 .25 1",
8165
+ linear: "0 0 1 1",
8166
+ "ease-in": ".42 0 1 1",
8167
+ "ease-out": "0 0 .58 1",
8168
+ "ease-in-out": ".42 0 .58 1",
8169
+ }[name];
8170
+ };
8171
+ const ɵ1 = cubic_bezier;
8172
+ $.on = (element, event, selector, callback) => {
8173
+ if (!callback) {
8174
+ callback = selector;
8175
+ $.bind(element, event, callback);
8176
+ }
8177
+ else {
8178
+ $.delegate(element, event, selector, callback);
8179
+ }
8180
+ };
8181
+ $.off = (element, event, handler) => {
8182
+ element.removeEventListener(event, handler);
8183
+ };
8184
+ $.bind = (element, event, callback) => {
8185
+ event.split(/\s+/).forEach(function (event) {
8186
+ element.addEventListener(event, callback);
8187
+ });
8188
+ };
8189
+ $.delegate = (element, event, selector, callback) => {
8190
+ element.addEventListener(event, function (e) {
8191
+ const delegatedTarget = e.target.closest(selector);
8192
+ if (delegatedTarget) {
8193
+ e.delegatedTarget = delegatedTarget;
8194
+ callback.call(this, e, delegatedTarget);
8195
+ }
8196
+ });
8197
+ };
8198
+ $.closest = (selector, element) => {
8199
+ if (!element) {
8200
+ return null;
8201
+ }
8202
+ if (element.matches(selector)) {
8203
+ return element;
8204
+ }
8205
+ // TODO: Corrigir este problema
8206
+ // return $.closest(selector, element.parentNode);
8207
+ };
8208
+ $.attr = (element, attr, value) => {
8209
+ if (!value && typeof attr === "string") {
8210
+ return element.getAttribute(attr);
8211
+ }
8212
+ if (typeof attr === "object") {
8213
+ for (let key in attr) {
8214
+ $.attr(element, key, attr[key]);
8215
+ }
8216
+ return;
8217
+ }
8218
+ element.setAttribute(attr, value);
8219
+ };
8220
+
8221
+ var ViewMode;
8222
+ (function (ViewMode) {
8223
+ ViewMode["QuarterDay"] = "quarterDay";
8224
+ ViewMode["HalfDay"] = "halfDay";
8225
+ ViewMode["Day"] = "day";
8226
+ ViewMode["Week"] = "week";
8227
+ ViewMode["Month"] = "month";
8228
+ ViewMode["Year"] = "year";
8229
+ ViewMode["Hour"] = "hour";
8230
+ })(ViewMode || (ViewMode = {}));
8231
+
8232
+ class Bar {
8233
+ constructor(gantt, task) {
8234
+ this._setDefaults(gantt, task);
8235
+ this._prepare();
8236
+ this._draw();
8237
+ this._bind();
8238
+ }
8239
+ get arrows() {
8240
+ return this._arrows;
8241
+ }
8242
+ set arrows(arrows) {
8243
+ this._arrows = arrows;
8244
+ }
8245
+ get task() {
8246
+ return this._task;
8247
+ }
8248
+ get element() {
8249
+ return this._element;
8250
+ }
8251
+ get group() {
8252
+ return this._group;
8253
+ }
8254
+ updateBarPosition({ x, width }) {
8255
+ const bar = this.element;
8256
+ if (x) {
8257
+ // get all x values of parent task
8258
+ const xs = this.task.dependencies.map((dep) => {
8259
+ return this._gantt.get_bar(dep).element.getX();
8260
+ });
8261
+ // child task must not go before parent
8262
+ const valid_x = xs.reduce((prev, curr) => {
8263
+ return x >= curr;
8264
+ }, x);
8265
+ if (!valid_x) {
8266
+ width = null;
8267
+ return;
8268
+ }
8269
+ this._updateAttr(bar, "x", x);
8270
+ }
8271
+ if (width && width >= this._gantt.options.columnWidth) {
8272
+ this._updateAttr(bar, "width", width);
8273
+ }
8274
+ this._updateLabelPosition();
8275
+ this._updateArrowPosition();
8276
+ }
8277
+ dateChanged() {
8278
+ let changed = false;
8279
+ const { newStartDate, newEndDate } = this._computeStartEndDate();
8280
+ if (this.task.start !== newStartDate) {
8281
+ changed = true;
8282
+ this.task.start = newStartDate;
8283
+ }
8284
+ if (this.task.end !== newEndDate) {
8285
+ changed = true;
8286
+ this.task.end = newEndDate;
8287
+ }
8288
+ if (changed) {
8289
+ this._gantt.trigger_event("onDateChange", [
8290
+ this.task,
8291
+ newStartDate,
8292
+ DateUtils.add(newEndDate, -1, "second"),
8293
+ ]);
8294
+ }
8295
+ ;
8296
+ }
8297
+ setActionCompleted() {
8298
+ this._actionCompleted = true;
8299
+ setTimeout(() => {
8300
+ this._actionCompleted = false;
8301
+ }, 1000);
8302
+ }
8303
+ _setDefaults(gantt, task) {
8304
+ this._actionCompleted = false;
8305
+ this._gantt = gantt;
8306
+ this._task = task;
8307
+ }
8308
+ _prepare() {
8309
+ this._prepareValues();
8310
+ this._prepareHelpers();
8311
+ }
8312
+ _prepareValues() {
8313
+ this._invalid = this.task.invalid;
8314
+ this._height = this._gantt.options.barHeight;
8315
+ this._x = this._computeX();
8316
+ this._y = this._computeY();
8317
+ this._cornerRadius = this._gantt.options.barCornerRadius;
8318
+ this._duration = DateUtils.diff(this.task.end, this.task.start, "minute") / this._gantt.options.step / 60.0;
8319
+ this._width = this._gantt.options.columnWidth * this._duration;
8320
+ this._group = createSVG("g", {
8321
+ class: "bar-wrapper " + (this.task.custom_class || ""),
8322
+ "data-id": this.task.id,
8323
+ });
8324
+ this._barGroup = createSVG("g", {
8325
+ class: "bar-group",
8326
+ append_to: this.group,
8327
+ });
8328
+ }
8329
+ _prepareHelpers() {
8330
+ SVGElement.prototype.getX = function () {
8331
+ return +this.getAttribute("x");
8332
+ };
8333
+ SVGElement.prototype.getY = function () {
8334
+ return +this.getAttribute("y");
8335
+ };
8336
+ SVGElement.prototype.getWidth = function () {
8337
+ return +this.getAttribute("width");
8338
+ };
8339
+ SVGElement.prototype.getHeight = function () {
8340
+ return +this.getAttribute("height");
8341
+ };
8342
+ SVGElement.prototype.getEndX = function () {
8343
+ return this.getX() + this.getWidth();
8344
+ };
8345
+ }
8346
+ _draw() {
8347
+ this._drawBar();
8348
+ this._drawLabel();
8349
+ }
8350
+ _drawBar() {
8351
+ this._element = createSVG("rect", {
8352
+ x: this._x,
8353
+ y: this._y,
8354
+ width: this._width,
8355
+ height: this._height,
8356
+ rx: this._cornerRadius,
8357
+ ry: this._cornerRadius,
8358
+ class: "bar",
8359
+ append_to: this._barGroup,
8360
+ fill: this.task.color,
8361
+ });
8362
+ animateSVG(this.element, "width", 0, this._width);
8363
+ if (this._invalid) {
8364
+ this.element.classList.add("bar-invalid");
8365
+ }
8366
+ }
8367
+ _drawLabel() {
8368
+ createSVG("text", {
8369
+ x: this._x + this._width / 2,
8370
+ y: this._y + this._height / 2,
8371
+ innerHTML: this.task.showTaskName ? this.task.name : "",
8372
+ class: "bar-label",
8373
+ append_to: this._barGroup,
8374
+ });
8375
+ // labels get BBox in the next tick
8376
+ requestAnimationFrame(() => this._updateLabelPosition());
8377
+ }
8378
+ _bind() {
8379
+ if (!this._invalid) {
8380
+ this._setupClickEvent();
8381
+ }
8382
+ }
8383
+ _setupClickEvent() {
8384
+ $.on(this.group, "focus " + this._gantt.options.popupTrigger, (e) => {
8385
+ // just finished a move action, wait for a few seconds
8386
+ if (!this._actionCompleted) {
8387
+ this._showPopup();
8388
+ this._gantt.unselect_all();
8389
+ this.group.classList.add("active");
8390
+ }
8391
+ }, null);
8392
+ $.on(this.group, "dblclick", (e) => {
8393
+ // just finished a move action, wait for a few seconds
8394
+ if (!this._actionCompleted) {
8395
+ this._gantt.trigger_event("onClick", [this.task]);
8396
+ }
8397
+ }, null);
8398
+ }
8399
+ _showPopup() {
8400
+ if (this._gantt.bar_being_dragged) {
8401
+ return;
8402
+ }
8403
+ const formatString = this._gantt.view_is(ViewMode.Hour)
8404
+ ? "HH:ss"
8405
+ : "MMM D";
8406
+ const start_date = DateUtils.format(this.task.start, formatString, this._gantt.options.language);
8407
+ const end_date = DateUtils.format(DateUtils.add(this.task.end, -1, "second"), formatString, this._gantt.options.language);
8408
+ const subtitle = start_date + " - " + end_date;
8409
+ this._gantt.show_popup({
8410
+ target_element: this.element,
8411
+ title: this.task.name,
8412
+ subtitle: subtitle,
8413
+ task: this.task,
8414
+ });
8415
+ }
8416
+ _computeStartEndDate() {
8417
+ const bar = this.element;
8418
+ const xInUnits = bar.getX() / this._gantt.options.columnWidth;
8419
+ const newStartDate = DateUtils.add(this._gantt.minDate, xInUnits * this._gantt.options.step, "hour");
8420
+ const width_in_units = bar.getWidth() / this._gantt.options.columnWidth;
8421
+ const newEndDate = DateUtils.add(newStartDate, width_in_units * this._gantt.options.step, "hour");
8422
+ return { newStartDate, newEndDate };
8423
+ }
8424
+ _computeX() {
8425
+ const { step, columnWidth } = this._gantt.options;
8426
+ const diff = DateUtils.diff(this.task.start, this._gantt.minDate, "hour");
8427
+ let x = (diff / step) * columnWidth;
8428
+ if (this._gantt.view_is(ViewMode.Month)) {
8429
+ const diff = DateUtils.diff(this.task.start, this._gantt.minDate, "day");
8430
+ x = (diff * columnWidth) / 30;
8431
+ }
8432
+ return x;
8433
+ }
8434
+ _computeY() {
8435
+ return (this._gantt.options.headerHeight +
8436
+ this._gantt.options.padding +
8437
+ this.task._index * (this._height + this._gantt.options.padding));
8438
+ }
8439
+ _updateAttr(element, attr, value) {
8440
+ value = +value;
8441
+ if (!isNaN(value)) {
8442
+ element.setAttribute(attr, value);
8443
+ }
8444
+ return element;
8445
+ }
8446
+ _updateLabelPosition() {
8447
+ const bar = this.element, label = this.group.querySelector(".bar-label");
8448
+ if (label.getBBox().width > bar.getWidth()) {
8449
+ label.classList.add("big");
8450
+ label.setAttribute("x", bar.getX() + bar.getWidth() + 5);
8451
+ }
8452
+ else {
8453
+ label.classList.remove("big");
8454
+ label.setAttribute("x", bar.getX() + bar.getWidth() / 2);
8455
+ }
8456
+ }
8457
+ _updateArrowPosition() {
8458
+ this._arrows = this._arrows || [];
8459
+ for (let arrow of this._arrows) {
8460
+ arrow.update();
8461
+ }
8462
+ }
8463
+ }
8464
+
8465
+ class Popup {
8466
+ constructor(parent, customHtml) {
8467
+ this.parent = parent;
8468
+ this.customHtml = customHtml;
8469
+ this.make();
8470
+ }
8471
+ show(options) {
8472
+ if (!options.target_element) {
8473
+ throw new Error("target_element is required to show popup");
8474
+ }
8475
+ if (!options.position) {
8476
+ options.position = "left";
8477
+ }
8478
+ const target_element = options.target_element;
8479
+ if (this.customHtml) {
8480
+ let html = this.customHtml(options.task);
8481
+ html += '<div class="pointer"></div>';
8482
+ this.parent.innerHTML = html;
8483
+ this.pointer = this.parent.querySelector(".pointer");
8484
+ }
8485
+ else {
8486
+ // set data
8487
+ this.title.innerHTML = options.title;
8488
+ this.subtitle.innerHTML = options.subtitle;
8489
+ this.parent.style.width = this.parent.clientWidth + "px";
8490
+ }
8491
+ // set position
8492
+ let positionMeta;
8493
+ if (target_element instanceof HTMLElement) {
8494
+ positionMeta = target_element.getBoundingClientRect();
8495
+ }
8496
+ else if (target_element instanceof SVGElement) {
8497
+ positionMeta = options.target_element.getBBox();
8498
+ }
8499
+ if (options.position === 'left') {
8500
+ this.parent.style.left = positionMeta.x + (positionMeta.width + 10) + "px";
8501
+ this.parent.style.top = positionMeta.y + "px";
8502
+ this.pointer.style.transform = "rotateZ(90deg)";
8503
+ this.pointer.style.left = "-7px";
8504
+ this.pointer.style.top = "2px";
8505
+ }
8506
+ // show
8507
+ this.parent.style.opacity = 1;
8508
+ }
8509
+ make() {
8510
+ this.parent.innerHTML = `
8511
+ <div class="popup">
8512
+ <div class="wrp-title">
8513
+ <span class="title"></span>
8514
+ </div>
8515
+ <div class="wrp-subtitle">
8516
+ <span class="icon fas fa-calendar-alt"></span>
8517
+ <span class="subtitle"></span>
8518
+ </div>
8519
+ <div class="pointer"></div>
8520
+ </div>
8521
+ `;
8522
+ this.hide();
8523
+ this.title = this.parent.querySelector(".title");
8524
+ this.subtitle = this.parent.querySelector(".subtitle");
8525
+ this.pointer = this.parent.querySelector(".pointer");
8526
+ }
8527
+ hide() {
8528
+ this.parent.style.opacity = 0;
8529
+ this.parent.style.left = 0;
8530
+ }
8531
+ }
8532
+
8533
+ class Arrow {
8534
+ constructor(gantt, fromTask, toTask) {
8535
+ this._gantt = gantt;
8536
+ this._fromTask = fromTask;
8537
+ this._toTask = toTask;
8538
+ this.calculatePath();
8539
+ this.draw();
8540
+ }
8541
+ get fromTask() {
8542
+ return this._fromTask;
8543
+ }
8544
+ get toTask() {
8545
+ return this._toTask;
8546
+ }
8547
+ get element() {
8548
+ return this._element;
8549
+ }
8550
+ update() {
8551
+ this.calculatePath();
8552
+ this._element.setAttribute("d", this._path);
8553
+ }
8554
+ calculatePath() {
8555
+ let startX = this.fromTask.element.getX() + this.fromTask.element.getWidth() / 2;
8556
+ const condition = () => this.toTask.element.getX() < startX + this._gantt.options.padding &&
8557
+ startX > this.fromTask.element.getX() + this._gantt.options.padding;
8558
+ while (condition()) {
8559
+ startX -= 10;
8560
+ }
8561
+ const startY = this._gantt.options.headerHeight +
8562
+ this._gantt.options.barHeight +
8563
+ (this._gantt.options.padding + this._gantt.options.barHeight) *
8564
+ this.fromTask.task._index +
8565
+ this._gantt.options.padding;
8566
+ const endX = this.toTask.element.getX() - this._gantt.options.padding / 2;
8567
+ const endY = this._gantt.options.headerHeight +
8568
+ this._gantt.options.barHeight / 2 +
8569
+ (this._gantt.options.padding + this._gantt.options.barHeight) *
8570
+ this.toTask.task._index +
8571
+ this._gantt.options.padding;
8572
+ const fromIsBelowTo = this.fromTask.task._index > this.toTask.task._index;
8573
+ const curve = this._gantt.options.arrowCurve;
8574
+ const clockwise = fromIsBelowTo ? 1 : 0;
8575
+ const curveY = fromIsBelowTo ? -curve : curve;
8576
+ const offset = fromIsBelowTo
8577
+ ? endY + this._gantt.options.arrowCurve
8578
+ : endY - this._gantt.options.arrowCurve;
8579
+ this._path = `
8580
+ M ${startX} ${startY}
8581
+ V ${offset}
8582
+ a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curveY}
8583
+ L ${endX} ${endY}
8584
+ m -5 -5
8585
+ l 5 5
8586
+ l -5 5`;
8587
+ if (this.toTask.element.getX() < this.fromTask.element.getX() + this._gantt.options.padding) {
8588
+ const down1 = this._gantt.options.padding / 2 - curve;
8589
+ const down2 = this.toTask.element.getY() + this.toTask.element.getHeight() / 2 - curveY;
8590
+ const left = this.toTask.element.getX() - this._gantt.options.padding;
8591
+ this._path = `
8592
+ M ${startX} ${startY}
8593
+ v ${down1}
8594
+ a ${curve} ${curve} 0 0 1 -${curve} ${curve}
8595
+ H ${left}
8596
+ a ${curve} ${curve} 0 0 ${clockwise} -${curve} ${curveY}
8597
+ V ${down2}
8598
+ a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curveY}
8599
+ L ${endX} ${endY}
8600
+ m -5 -5
8601
+ l 5 5
8602
+ l -5 5`;
8603
+ }
8604
+ }
8605
+ draw() {
8606
+ this._element = createSVG("path", {
8607
+ d: this._path,
8608
+ "data-from": this.fromTask.task.id,
8609
+ "data-to": this.toTask.task.id,
8610
+ });
8611
+ }
8612
+ }
8613
+
8614
+ const defaultOptions = {
8615
+ headerHeight: 94,
8616
+ columnWidth: 30,
8617
+ step: 24,
8618
+ barHeight: 20,
8619
+ barCornerRadius: 0,
8620
+ arrowCurve: 4,
8621
+ padding: 24,
8622
+ viewMode: ViewMode.Day,
8623
+ dateFormat: "YYYY-MM-DD",
8624
+ popupTrigger: "click",
8625
+ customPopupHtml: null,
8626
+ language: "en",
8627
+ };
8628
+
8629
+ class Gantt {
8630
+ constructor(wrapper, tasks, options) {
8631
+ this.setup_wrapper(wrapper);
8632
+ this.setup_options(options);
8633
+ this.setup_tasks(tasks);
8634
+ // initialize with default view mode
8635
+ this.change_view_mode();
8636
+ this.bind_events();
8637
+ }
8638
+ get minDate() {
8639
+ return this._minDate;
8640
+ }
8641
+ get maxDate() {
8642
+ return this._maxDate;
8643
+ }
8644
+ setup_wrapper(element) {
8645
+ let svg_element, wrapper_element;
8646
+ // CSS Selector is passed
8647
+ if (typeof element === "string") {
8648
+ element = document.querySelector(element);
8649
+ }
8650
+ // get the SVGElement
8651
+ if (element instanceof HTMLElement) {
8652
+ wrapper_element = element;
8653
+ svg_element = element.querySelector("svg");
8654
+ }
8655
+ else if (element instanceof SVGElement) {
8656
+ svg_element = element;
8657
+ }
8658
+ else {
8659
+ throw new TypeError("Frappé Gantt only supports usage of a string CSS selector, HTML DOM element or SVG DOM element for the \'element\' parameter");
8660
+ }
8661
+ // svg element
8662
+ if (!svg_element) {
8663
+ // create it
8664
+ this.$svg = createSVG("svg", {
8665
+ append_to: wrapper_element,
8666
+ class: "gantt",
8667
+ });
8668
+ }
8669
+ else {
8670
+ this.$svg = svg_element;
8671
+ this.$svg.classList.add("gantt");
8672
+ }
8673
+ // wrapper element
8674
+ this.$container = document.createElement("div");
8675
+ this.$container.classList.add("gantt-container");
8676
+ const parent_element = this.$svg.parentElement;
8677
+ parent_element.appendChild(this.$container);
8678
+ this.$container.appendChild(this.$svg);
8679
+ // popup wrapper
8680
+ this.popup_wrapper = document.createElement("div");
8681
+ this.popup_wrapper.classList.add("popup-wrapper");
8682
+ this.$container.appendChild(this.popup_wrapper);
8683
+ }
8684
+ setup_options(options) {
8685
+ this.options = Object.assign({}, defaultOptions, options);
8686
+ }
8687
+ setup_tasks(tasks) {
8688
+ // prepare tasks
8689
+ this.tasks = tasks.map((task, i) => {
8690
+ //standard colors if needed
8691
+ task.color = task.color || '#7892A1';
8692
+ // convert to Date objects
8693
+ task._start = DateUtils.parse(task.start);
8694
+ task._end = DateUtils.parse(task.end);
8695
+ // make task invalid if duration too large
8696
+ if (DateUtils.diff(task._end, task._start, "year") > 10) {
8697
+ task.end = null;
8698
+ }
8699
+ // cache index
8700
+ task._index = i;
8701
+ if (typeof task._row_id === "number") {
8702
+ task._index = task._row_id;
8703
+ }
8704
+ // invalid dates
8705
+ if (!task.start && !task.end) {
8706
+ const today = DateUtils.today();
8707
+ task._start = today;
8708
+ task._end = DateUtils.add(today, 2, "day");
8709
+ }
8710
+ if (!task.start && task.end) {
8711
+ task._start = DateUtils.add(task._end, -2, 'day');
8712
+ }
8713
+ if (task.start && !task.end) {
8714
+ task._end = DateUtils.add(task._start, 2, "day");
8715
+ }
8716
+ // if hours is not set, assume the last day is full day
8717
+ // e.g: 2018-09-09 becomes 2018-09-09 23:59:59
8718
+ const task_end_values = DateUtils.getDateValues(task._end);
8719
+ if (task_end_values.slice(3).every((d) => d === 0)) {
8720
+ task._end = DateUtils.add(task._end, 24, "hour");
8721
+ }
8722
+ // invalid flag
8723
+ if (!task.start || !task.end) {
8724
+ task.invalid = true;
8725
+ }
8726
+ // dependencies
8727
+ if (typeof task.dependencies === "string" || !task.dependencies) {
8728
+ let deps = [];
8729
+ if (task.dependencies) {
8730
+ deps = task.dependencies
8731
+ .split(',')
8732
+ .map((d) => d.trim())
8733
+ .filter((d) => d);
8734
+ }
8735
+ task.dependencies = deps;
8736
+ }
8737
+ // uids
8738
+ if (!task.id) {
8739
+ task.id = generate_id(task);
8740
+ }
8741
+ return task;
8742
+ });
8743
+ this.setup_dependencies();
8744
+ }
8745
+ setup_dependencies() {
8746
+ this.dependency_map = {};
8747
+ for (let t of this.tasks) {
8748
+ for (let d of t.dependencies) {
8749
+ this.dependency_map[d] = this.dependency_map[d] || [];
8750
+ this.dependency_map[d].push(t.id);
8751
+ }
8752
+ }
8753
+ }
8754
+ refresh(tasks) {
8755
+ this.setup_tasks(tasks);
8756
+ this.change_view_mode();
8757
+ }
8758
+ change_view_mode(mode = this.options.viewMode) {
8759
+ this.update_view_scale(mode);
8760
+ this.setup_dates();
8761
+ this.render();
8762
+ // fire viewmode_change event
8763
+ this.trigger_event("onViewChange", [mode]);
8764
+ }
8765
+ update_view_scale(view_mode) {
8766
+ this.options.viewMode = view_mode;
8767
+ // this.isHourView = false;
8768
+ if (view_mode === ViewMode.Hour) {
8769
+ this.options.step = 24 / 24;
8770
+ this.options.columnWidth = 50;
8771
+ // this.isHourView = true;
8772
+ }
8773
+ else if (view_mode === ViewMode.Day) {
8774
+ this.options.step = 24;
8775
+ this.options.columnWidth = 50;
8776
+ }
8777
+ else if (view_mode === ViewMode.HalfDay) {
8778
+ this.options.step = 24 / 2;
8779
+ this.options.columnWidth = 50;
8780
+ }
8781
+ else if (view_mode === ViewMode.QuarterDay) {
8782
+ this.options.step = 24 / 4;
8783
+ this.options.columnWidth = 50;
8784
+ }
8785
+ else if (view_mode === ViewMode.Week) {
8786
+ this.options.step = 24 * 7;
8787
+ this.options.columnWidth = 140;
8788
+ }
8789
+ else if (view_mode === ViewMode.Month) {
8790
+ this.options.step = 24 * 30;
8791
+ this.options.columnWidth = 120;
8792
+ }
8793
+ else if (view_mode === ViewMode.Year) {
8794
+ this.options.step = 24 * 365;
8795
+ this.options.columnWidth = 120;
8796
+ }
8797
+ }
8798
+ setup_dates() {
8799
+ this.setup_gantt_dates();
8800
+ this.setup_date_values();
8801
+ }
8802
+ setup_gantt_dates() {
8803
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
8804
+ this._minDate = null;
8805
+ this._maxDate = null;
8806
+ for (let task of this.tasks) {
8807
+ // set global start and end date
8808
+ if (!this.minDate || task.start < this.minDate) {
8809
+ this._minDate = task.start;
8810
+ }
8811
+ if (!this.maxDate || task.end > this.maxDate) {
8812
+ this._maxDate = task.end;
8813
+ }
8814
+ }
8815
+ this._realMinDate = this.minDate;
8816
+ this._realMaxDate = this.maxDate;
8817
+ switch (this.options.viewMode) {
8818
+ case ViewMode.Hour:
8819
+ this._minDate = DateUtils.add(this.minDate, -((_a = this.options.marginBeforeStart) !== null && _a !== void 0 ? _a : 1), "hour");
8820
+ this._maxDate = DateUtils.add(this.maxDate, (_b = this.options.marginAfterEnd) !== null && _b !== void 0 ? _b : 1, "hour");
8821
+ break;
8822
+ case ViewMode.QuarterDay:
8823
+ this._minDate = DateUtils.add(this.minDate, -((_c = this.options.marginBeforeStart) !== null && _c !== void 0 ? _c : 12), "hour");
8824
+ this._maxDate = DateUtils.add(this.maxDate, (_d = this.options.marginAfterEnd) !== null && _d !== void 0 ? _d : 12, "hour");
8825
+ break;
8826
+ case ViewMode.HalfDay:
8827
+ this._minDate = DateUtils.add(this.minDate, -((_e = this.options.marginBeforeStart) !== null && _e !== void 0 ? _e : 1), "day");
8828
+ this._maxDate = DateUtils.add(this.maxDate, (_f = this.options.marginAfterEnd) !== null && _f !== void 0 ? _f : 1, "day");
8829
+ break;
8830
+ case ViewMode.Day:
8831
+ this._minDate = DateUtils.add(this.minDate, -((_g = this.options.marginBeforeStart) !== null && _g !== void 0 ? _g : 3), "day");
8832
+ this._maxDate = DateUtils.add(this.maxDate, (_h = this.options.marginAfterEnd) !== null && _h !== void 0 ? _h : 3, "day");
8833
+ break;
8834
+ case ViewMode.Week:
8835
+ this._minDate = DateUtils.add(this.minDate, -((_j = this.options.marginBeforeStart) !== null && _j !== void 0 ? _j : 1), "month");
8836
+ this._maxDate = DateUtils.add(this.maxDate, (_k = this.options.marginAfterEnd) !== null && _k !== void 0 ? _k : 1, "month");
8837
+ break;
8838
+ case ViewMode.Month:
8839
+ this._minDate = DateUtils.add(this.minDate, -((_l = this.options.marginBeforeStart) !== null && _l !== void 0 ? _l : 1), "year");
8840
+ this._maxDate = DateUtils.add(this.maxDate, (_m = this.options.marginAfterEnd) !== null && _m !== void 0 ? _m : 1, "year");
8841
+ break;
8842
+ case ViewMode.Year:
8843
+ this._minDate = DateUtils.add(this.minDate, -((_o = this.options.marginBeforeStart) !== null && _o !== void 0 ? _o : 2), "year");
8844
+ this._maxDate = DateUtils.add(this.maxDate, (_p = this.options.marginAfterEnd) !== null && _p !== void 0 ? _p : 2, "year");
8845
+ break;
8846
+ }
8847
+ }
8848
+ setup_date_values() {
8849
+ this.dates = [];
8850
+ let cur_date = null;
8851
+ while (cur_date === null || cur_date < this.maxDate) {
8852
+ if (!cur_date) {
8853
+ cur_date = DateUtils.clone(this.minDate);
8854
+ }
8855
+ else {
8856
+ if (this.view_is(ViewMode.Year)) {
8857
+ cur_date = DateUtils.add(cur_date, 1, "year");
8858
+ }
8859
+ else if (this.view_is(ViewMode.Month)) {
8860
+ cur_date = DateUtils.add(cur_date, 1, "month");
8861
+ }
8862
+ else {
8863
+ cur_date = DateUtils.add(cur_date, this.options.step, 'hour');
8864
+ }
8865
+ }
8866
+ this.dates.push(cur_date);
8867
+ }
8868
+ console.log("cur_date", cur_date);
8869
+ console.log("dates", this.dates);
8870
+ }
8871
+ bind_events() {
8872
+ this.bind_grid_click();
8873
+ this.bind_bar_events();
8874
+ }
8875
+ render() {
8876
+ this.clear();
8877
+ this.setup_layers();
8878
+ this.make_grid();
8879
+ this.make_dates();
8880
+ this.make_bars();
8881
+ this.make_arrows();
8882
+ this.map_arrows_on_bars();
8883
+ this.set_width();
8884
+ this.set_scroll_position();
8885
+ }
8886
+ setup_layers() {
8887
+ this.layers = {};
8888
+ const layers = ["grid", "date", "arrow", "progress", "bar", "details"];
8889
+ // make group layers
8890
+ for (let layer of layers) {
8891
+ this.layers[layer] = createSVG('g', {
8892
+ class: layer,
8893
+ append_to: this.$svg,
8894
+ });
8895
+ }
8896
+ }
8897
+ make_grid() {
8898
+ this.make_grid_background();
8899
+ this.make_grid_rows();
8900
+ this.make_grid_header();
8901
+ this.make_grid_highlights();
8902
+ this.make_grid_ticks();
8903
+ }
8904
+ make_grid_background() {
8905
+ const grid_width = this.dates.length * this.options.columnWidth;
8906
+ const distinct_rows = [...new Set(this.tasks.map((x) => x._row_id))];
8907
+ const grid_height = this.options.headerHeight +
8908
+ this.options.padding / 2 +
8909
+ (this.options.barHeight + this.options.padding) *
8910
+ distinct_rows.length;
8911
+ createSVG("rect", {
8912
+ x: 0,
8913
+ y: 0,
8914
+ width: grid_width,
8915
+ height: grid_height,
8916
+ class: "grid-background",
8917
+ append_to: this.layers.grid,
8918
+ });
8919
+ $.attr(this.$svg, {
8920
+ height: grid_height,
8921
+ width: "100%",
8922
+ }, null);
8923
+ }
8924
+ make_grid_rows() {
8925
+ const rows_layer = createSVG("g", { append_to: this.layers.grid });
8926
+ const lines_layer = createSVG("g", { append_to: this.layers.grid });
8927
+ const row_width = this.dates.length * this.options.columnWidth;
8928
+ const row_height = this.options.barHeight + this.options.padding;
8929
+ //TODO: ajustar o posicionamento das linhas
8930
+ let row_y = this.options.headerHeight + this.options.padding / 2;
8931
+ this.tasks.forEach(_ => {
8932
+ createSVG("rect", {
8933
+ x: 0,
8934
+ y: row_y,
8935
+ width: row_width,
8936
+ height: row_height,
8937
+ class: "grid-row",
8938
+ append_to: rows_layer,
8939
+ });
8940
+ createSVG("line", {
8941
+ x1: 0,
8942
+ y1: row_y + row_height,
8943
+ x2: row_width,
8944
+ y2: row_y + row_height,
8945
+ class: "row-line",
8946
+ append_to: lines_layer,
8947
+ });
8948
+ row_y += this.options.barHeight + this.options.padding;
8949
+ });
8950
+ }
8951
+ make_grid_header() {
8952
+ // const addIsHourView = this.isHourView ? 25 : 10
8953
+ const header_width = this.dates.length * this.options.columnWidth;
8954
+ const header_height = this.options.headerHeight + 10;
8955
+ createSVG("rect", {
8956
+ x: 0,
8957
+ y: 0,
8958
+ width: header_width,
8959
+ height: header_height,
8960
+ class: "grid-header",
8961
+ append_to: this.layers.grid,
8962
+ });
8963
+ }
8964
+ make_grid_ticks() {
8965
+ let tick_x = 0;
8966
+ let tick_y = this.options.headerHeight + this.options.padding / 2;
8967
+ let tick_height = (this.options.barHeight + this.options.padding) *
8968
+ this.tasks.length;
8969
+ for (let date of this.dates) {
8970
+ let tick_class = "tick";
8971
+ // thick tick for monday
8972
+ if (this.view_is(ViewMode.Day) && date.getDate() === 1) {
8973
+ tick_class += " thick";
8974
+ }
8975
+ // thick tick for first week
8976
+ if (this.view_is(ViewMode.Week) &&
8977
+ date.getDate() >= 1 &&
8978
+ date.getDate() < 8) {
8979
+ tick_class += " thick";
8980
+ }
8981
+ // thick ticks for quarters
8982
+ if (this.view_is(ViewMode.Month) && date.getMonth() % 3 === 0) {
8983
+ tick_class += " thick";
8984
+ }
8985
+ createSVG("path", {
8986
+ d: `M ${tick_x} ${tick_y} v ${tick_height}`,
8987
+ class: tick_class,
8988
+ append_to: this.layers.grid,
8989
+ });
8990
+ if (this.view_is(ViewMode.Month)) {
8991
+ tick_x +=
8992
+ (DateUtils.getDaysInMonth(date) *
8993
+ this.options.columnWidth) /
8994
+ 30;
8995
+ }
8996
+ else {
8997
+ tick_x += this.options.columnWidth;
8998
+ }
8999
+ }
9000
+ }
9001
+ make_grid_highlights() {
9002
+ if (this.view_is(ViewMode.Day)) {
9003
+ const width = this.options.columnWidth;
9004
+ const height = (this.options.barHeight + this.options.padding) *
9005
+ this.tasks.length +
9006
+ this.options.headerHeight +
9007
+ this.options.padding / 2;
9008
+ let x = 0;
9009
+ for (let date of this.dates) {
9010
+ let y = (this.options.headerHeight + this.options.padding) / 2;
9011
+ let isToday = date.toString() == DateUtils.today();
9012
+ let isWeekend = (date.getDay() == 0 || date.getDay() == 6);
9013
+ let className;
9014
+ if (isToday) {
9015
+ className = "today-highlight";
9016
+ y = (this.options.headerHeight + this.options.padding) / 2;
9017
+ }
9018
+ else if (isWeekend) {
9019
+ className = "weekend-highlight";
9020
+ }
9021
+ const rx = 3;
9022
+ const ry = 3;
9023
+ if (isToday || isWeekend) {
9024
+ createSVG("rect", {
9025
+ x,
9026
+ y,
9027
+ rx,
9028
+ ry,
9029
+ width,
9030
+ height,
9031
+ class: className,
9032
+ append_to: this.layers.grid
9033
+ });
9034
+ }
9035
+ x += this.options.columnWidth;
9036
+ }
9037
+ }
9038
+ }
9039
+ make_dates() {
9040
+ const dates = this.get_dates_to_draw();
9041
+ const isHourView = this.view_is([ViewMode.Hour, ViewMode.QuarterDay, ViewMode.HalfDay]);
9042
+ let counter = 0;
9043
+ for (let i = 0; i < dates.length; i++) {
9044
+ const date = dates[i];
9045
+ if (isHourView && date.date >= this._realMinDate && date.date <= this._realMaxDate) {
9046
+ createSVG("text", {
9047
+ x: date.lower_x,
9048
+ y: date.lower_y,
9049
+ innerHTML: `H${counter++ * this.options.step}`,
9050
+ class: "title-1",
9051
+ append_to: this.layers.date,
9052
+ });
9053
+ }
9054
+ createSVG("text", {
9055
+ x: date.lower_x,
9056
+ y: date.lower_y + 20,
9057
+ innerHTML: date.lower_text,
9058
+ class: "title-2",
9059
+ append_to: this.layers.date,
9060
+ });
9061
+ if (date.upper_text) {
9062
+ const $upper_text = createSVG("text", {
9063
+ x: date.upper_x,
9064
+ y: date.upper_y,
9065
+ innerHTML: date.upper_text,
9066
+ class: "upper-text",
9067
+ append_to: this.layers.date,
9068
+ });
9069
+ // remove out-of-bound dates
9070
+ if ($upper_text.getBBox().x2 > this.layers.grid.getBBox().width) {
9071
+ $upper_text.remove();
9072
+ }
9073
+ }
9074
+ }
9075
+ }
9076
+ get_dates_to_draw() {
9077
+ let last_date = null;
9078
+ const dates = this.dates.map((date, i) => {
9079
+ const d = this.get_date_info(date, last_date, i);
9080
+ last_date = date;
9081
+ return d;
9082
+ });
9083
+ return dates;
9084
+ }
9085
+ get_date_info(date, last_date, i) {
9086
+ if (!last_date) {
9087
+ last_date = DateUtils.add(date, 1, "year");
9088
+ }
9089
+ const date_text = {
9090
+ hourLower: DateUtils.format(date, "HH:mm", this.options.language),
9091
+ quarterDayLower: DateUtils.format(date, "HH:mm", this.options.language),
9092
+ halfDayLower: DateUtils.format(date, "HH:mm", this.options.language),
9093
+ dayLower: date.getDate() !== last_date.getDate()
9094
+ ? DateUtils.format(date, "D", this.options.language)
9095
+ : "",
9096
+ weekLower: date.getMonth() !== last_date.getMonth()
9097
+ ? DateUtils.format(date, "D MMM", this.options.language)
9098
+ : DateUtils.format(date, "D", this.options.language),
9099
+ monthLower: DateUtils.format(date, "MMMM", this.options.language),
9100
+ yearLower: DateUtils.format(date, "YYYY", this.options.language),
9101
+ quarterDayUpper: date.getDate() !== last_date.getDate()
9102
+ ? DateUtils.format(date, "D MMM", this.options.language)
9103
+ : "",
9104
+ halfDayUpper: date.getDate() !== last_date.getDate()
9105
+ ? date.getMonth() !== last_date.getMonth()
9106
+ ? DateUtils.format(date, "D MMM", this.options.language)
9107
+ : DateUtils.format(date, "D", this.options.language)
9108
+ : "",
9109
+ dayUpper: date.getMonth() !== last_date.getMonth()
9110
+ ? DateUtils.format(date, "MMMM", this.options.language)
9111
+ : "",
9112
+ weekUpper: date.getMonth() !== last_date.getMonth()
9113
+ ? DateUtils.format(date, "MMMM", this.options.language)
9114
+ : "",
9115
+ monthUpper: date.getFullYear() !== last_date.getFullYear()
9116
+ ? DateUtils.format(date, "YYYY", this.options.language)
9117
+ : "",
9118
+ yearUpper: date.getFullYear() !== last_date.getFullYear()
9119
+ ? DateUtils.format(date, "YYYY", this.options.language)
9120
+ : "",
9121
+ hour: date.getHours() !== last_date.getHours()
9122
+ ? DateUtils.format(date, "HH:mm", this.options.language)
9123
+ : "",
9124
+ };
9125
+ // Descontando 20 para adcionar uma segunda linha de informação no cabeçalho
9126
+ const base_pos = {
9127
+ x: i * this.options.columnWidth,
9128
+ lower_y: this.options.headerHeight - 20,
9129
+ upper_y: this.options.headerHeight - 20 - 25,
9130
+ };
9131
+ const x_pos = {
9132
+ hourLower: this.options.columnWidth / 2,
9133
+ hourUpper: this.options.columnWidth * 24 / 2,
9134
+ quarterDayLower: this.options.columnWidth / 2,
9135
+ quarterDayUpper: this.options.columnWidth * 4 / 2,
9136
+ halfDayLower: this.options.columnWidth / 2,
9137
+ halfDayUpper: this.options.columnWidth * 2 / 2,
9138
+ dayLower: this.options.columnWidth / 2,
9139
+ dayUpper: (this.options.columnWidth * 30) / 2,
9140
+ weekLower: 0,
9141
+ weekUpper: (this.options.columnWidth * 4) / 2,
9142
+ monthLower: this.options.columnWidth / 2,
9143
+ monthUpper: (this.options.columnWidth * 12) / 2,
9144
+ yearLower: this.options.columnWidth / 2,
9145
+ yearUpper: (this.options.columnWidth * 30) / 2,
9146
+ };
9147
+ return {
9148
+ upper_text: date_text[`${this.options.viewMode}Upper`],
9149
+ lower_text: date_text[`${this.options.viewMode}Lower`],
9150
+ upper_x: base_pos.x + x_pos[`${this.options.viewMode}Upper`],
9151
+ upper_y: base_pos.upper_y,
9152
+ lower_x: base_pos.x + x_pos[`${this.options.viewMode}Lower`],
9153
+ lower_y: base_pos.lower_y,
9154
+ date,
9155
+ };
9156
+ }
9157
+ make_bars() {
9158
+ this.bars = this.tasks.map((task) => {
9159
+ const bar = new Bar(this, task);
9160
+ this.layers.bar.appendChild(bar.group);
9161
+ return bar;
9162
+ });
9163
+ }
9164
+ make_arrows() {
9165
+ this.arrows = [];
9166
+ for (let task of this.tasks) {
9167
+ let arrows = [];
9168
+ arrows = task.dependencies
9169
+ .map((task_id) => {
9170
+ const dependency = this.get_task(task_id);
9171
+ if (!dependency)
9172
+ return;
9173
+ const arrow = new Arrow(this, this.bars[dependency._index], // from_task
9174
+ this.bars[task._index] // to_task
9175
+ );
9176
+ this.layers.arrow.appendChild(arrow.element);
9177
+ return arrow;
9178
+ })
9179
+ .filter(Boolean); // filter falsy values
9180
+ this.arrows = this.arrows.concat(arrows);
9181
+ }
9182
+ }
9183
+ map_arrows_on_bars() {
9184
+ for (let bar of this.bars) {
9185
+ bar.arrows = this.arrows.filter((arrow) => {
9186
+ return (arrow.fromTask.task.id === bar.task.id ||
9187
+ arrow.toTask.task.id === bar.task.id);
9188
+ });
9189
+ }
9190
+ }
9191
+ set_width() {
9192
+ const cur_width = this.$svg.getBoundingClientRect().width;
9193
+ const actual_width = this.$svg
9194
+ .querySelector(".grid .grid-row")
9195
+ .getAttribute("width");
9196
+ if (cur_width < actual_width) {
9197
+ this.$svg.setAttribute("width", actual_width);
9198
+ }
9199
+ }
9200
+ set_scroll_position() {
9201
+ const parent_element = this.$svg.parentElement;
9202
+ if (!parent_element)
9203
+ return;
9204
+ const hours_before_first_task = DateUtils.diff(this.get_oldest_starting_date(), this.minDate, "hour");
9205
+ const scroll_pos = (hours_before_first_task / this.options.step) *
9206
+ this.options.columnWidth -
9207
+ this.options.columnWidth;
9208
+ parent_element.scrollLeft = scroll_pos;
9209
+ }
9210
+ bind_grid_click() {
9211
+ $.on(this.$svg, this.options.popupTrigger, ".grid-row, .grid-header", () => {
9212
+ this.unselect_all();
9213
+ this.hide_popup();
9214
+ });
9215
+ }
9216
+ bind_bar_events() {
9217
+ let is_dragging = false;
9218
+ let x_on_start = 0;
9219
+ let is_resizing_left = false;
9220
+ let is_resizing_right = false;
9221
+ let parent_bar_id = null;
9222
+ let bars = [];
9223
+ this.bar_being_dragged = null;
9224
+ function action_in_progress() {
9225
+ return is_dragging || is_resizing_left || is_resizing_right;
9226
+ }
9227
+ $.on(this.$svg, "mousedown", ".bar-wrapper, .handle", (e, element) => {
9228
+ const bar_wrapper = $.closest(".bar-wrapper", element);
9229
+ if (element.classList.contains("left")) {
9230
+ is_resizing_left = true;
9231
+ }
9232
+ else if (element.classList.contains("right")) {
9233
+ is_resizing_right = true;
9234
+ }
9235
+ else if (element.classList.contains("bar-wrapper")) {
9236
+ is_dragging = true;
9237
+ }
9238
+ bar_wrapper.classList.add("active");
9239
+ x_on_start = e.offsetX;
9240
+ parent_bar_id = bar_wrapper.getAttribute("data-id");
9241
+ const ids = [
9242
+ parent_bar_id,
9243
+ ...this.get_all_dependent_tasks(parent_bar_id),
9244
+ ];
9245
+ bars = ids.map((id) => this.get_bar(id));
9246
+ this.bar_being_dragged = parent_bar_id;
9247
+ bars.forEach((bar) => {
9248
+ const $bar = bar.element;
9249
+ $bar.ox = $bar.getX();
9250
+ $bar.oy = $bar.getY();
9251
+ $bar.owidth = $bar.getWidth();
9252
+ $bar.finaldx = 0;
9253
+ });
9254
+ });
9255
+ $.on(this.$svg, "mousemove", (e) => {
9256
+ if (!action_in_progress()) {
9257
+ return;
9258
+ }
9259
+ const dx = e.offsetX - x_on_start;
9260
+ bars.forEach((bar) => {
9261
+ const $bar = bar.element;
9262
+ $bar.finaldx = this.get_snap_position(dx);
9263
+ this.hide_popup();
9264
+ if (is_resizing_left) {
9265
+ if (parent_bar_id === bar.task.id) {
9266
+ bar.updateBarPosition({
9267
+ x: $bar.ox + $bar.finaldx,
9268
+ width: $bar.owidth - $bar.finaldx,
9269
+ });
9270
+ }
9271
+ else {
9272
+ bar.updateBarPosition({
9273
+ x: $bar.ox + $bar.finaldx,
9274
+ });
9275
+ }
9276
+ }
9277
+ else if (is_resizing_right) {
9278
+ if (parent_bar_id === bar.task.id) {
9279
+ bar.updateBarPosition({
9280
+ width: $bar.owidth + $bar.finaldx,
9281
+ });
9282
+ }
9283
+ }
9284
+ else if (is_dragging) {
9285
+ bar.updateBarPosition({ x: $bar.ox + $bar.finaldx });
9286
+ }
9287
+ });
9288
+ }, null);
9289
+ document.addEventListener("mouseup", (e) => {
9290
+ if (is_dragging || is_resizing_left || is_resizing_right) {
9291
+ bars.forEach((bar) => bar.group.classList.remove("active"));
9292
+ }
9293
+ is_dragging = false;
9294
+ is_resizing_left = false;
9295
+ is_resizing_right = false;
9296
+ });
9297
+ $.on(this.$svg, "mouseup", (e) => {
9298
+ this.bar_being_dragged = null;
9299
+ bars.forEach((bar) => {
9300
+ const $bar = bar.element;
9301
+ if (!$bar.finaldx)
9302
+ return;
9303
+ bar.dateChanged();
9304
+ bar.setActionCompleted();
9305
+ });
9306
+ }, null);
9307
+ }
9308
+ get_all_dependent_tasks(task_id) {
9309
+ let out = [];
9310
+ let to_process = [task_id];
9311
+ while (to_process.length) {
9312
+ const deps = to_process.reduce((acc, curr) => {
9313
+ acc = acc.concat(this.dependency_map[curr]);
9314
+ return acc;
9315
+ }, []);
9316
+ out = out.concat(deps);
9317
+ to_process = deps.filter((d) => !to_process.includes(d));
9318
+ }
9319
+ return out.filter(Boolean);
9320
+ }
9321
+ get_snap_position(dx) {
9322
+ let odx = dx, rem, position;
9323
+ if (this.view_is(ViewMode.Hour)) {
9324
+ rem = dx % (this.options.columnWidth / 6);
9325
+ position = odx - rem + (rem < this.options.columnWidth / 12 ? 0 : this.options.columnWidth / 6);
9326
+ }
9327
+ else if (this.view_is(ViewMode.Week)) {
9328
+ rem = dx % (this.options.columnWidth / 7);
9329
+ position = odx - rem + (rem < this.options.columnWidth / 14 ? 0 : this.options.columnWidth / 7);
9330
+ }
9331
+ else if (this.view_is(ViewMode.Month)) {
9332
+ rem = dx % (this.options.columnWidth / 30);
9333
+ position = odx - rem + (rem < this.options.columnWidth / 60 ? 0 : this.options.columnWidth / 30);
9334
+ }
9335
+ else {
9336
+ rem = dx % this.options.columnWidth;
9337
+ position = odx - rem + (rem < this.options.columnWidth / 2 ? 0 : this.options.columnWidth);
9338
+ }
9339
+ return position;
9340
+ }
9341
+ unselect_all() {
9342
+ [...this.$svg.querySelectorAll(".bar-wrapper")].forEach((el) => {
9343
+ el.classList.remove("active");
9344
+ });
9345
+ }
9346
+ view_is(modes) {
9347
+ if (Array.isArray(modes)) {
9348
+ return modes.some((mode) => this.options.viewMode === mode);
9349
+ }
9350
+ return this.options.viewMode === modes;
9351
+ }
9352
+ get_task(id) {
9353
+ return this.tasks.find((task) => {
9354
+ return task.id === id;
9355
+ });
9356
+ }
9357
+ get_bar(id) {
9358
+ return this.bars.find((bar) => {
9359
+ return bar.task.id === id;
9360
+ });
9361
+ }
9362
+ show_popup(options) {
9363
+ if (!this.popup) {
9364
+ this.popup = new Popup(this.popup_wrapper, this.options.customPopupHtml);
9365
+ }
9366
+ this.popup.show(options);
9367
+ }
9368
+ hide_popup() {
9369
+ this.popup && this.popup.hide();
9370
+ }
9371
+ trigger_event(event, args) {
9372
+ if (this.options[event]) {
9373
+ this.options[event].apply(null, args);
9374
+ }
9375
+ }
9376
+ get_oldest_starting_date() {
9377
+ return this.tasks
9378
+ .map((task) => task._start)
9379
+ .reduce((prev_date, cur_date) => cur_date <= prev_date ? cur_date : prev_date);
9380
+ }
9381
+ clear() {
9382
+ this.$svg.innerHTML = '';
9383
+ }
9384
+ }
9385
+ function generate_id(task) {
9386
+ return task.name + "_" + Math.random().toString(36).slice(2, 12);
9387
+ }
9388
+
9389
+ let GanttComponent = class GanttComponent {
9390
+ constructor() {
9391
+ this.multipleTaskPerLine = false;
9392
+ this.showSideTable = true;
9393
+ this.viewMode = ViewMode.Day;
9394
+ this.taskClicked = new EventEmitter();
9395
+ this.taskDateChanged = new EventEmitter();
9396
+ this.viewChanged = new EventEmitter();
9397
+ }
9398
+ ngOnInit() {
9399
+ this._validateViewMode();
9400
+ }
9401
+ ngAfterViewInit() {
9402
+ this._gantt = new Gantt("#gantt", this._filterTask(this.tasks), {
9403
+ viewMode: this.viewMode,
9404
+ marginBeforeStart: this.marginBeforeStart,
9405
+ marginAfterEnd: this.marginAfterEnd,
9406
+ language: "pt-BR",
9407
+ onClick: (task) => this.taskClicked.emit(task),
9408
+ onDateChange: (task, start, end) => this.taskDateChanged.emit({ task, start, end }),
9409
+ onViewChange: (viewMode) => this.viewChanged.emit(viewMode),
9410
+ });
9411
+ }
9412
+ ngOnChanges(changes) {
9413
+ if (!this._gantt) {
9414
+ return;
9415
+ }
9416
+ if (changes.viewMode) {
9417
+ this._gantt.options.viewMode = changes.viewMode.currentValue;
9418
+ this._gantt.change_view_mode();
9419
+ }
9420
+ if (changes.tasks) {
9421
+ this._gantt.refresh(this._filterTask(changes.tasks.currentValue));
9422
+ }
9423
+ }
9424
+ _filterTask(tasksGroups) {
9425
+ const tasks = [];
9426
+ if (this.multipleTaskPerLine) {
9427
+ tasksGroups.forEach((group, index) => {
9428
+ tasks.push(...group.tasks.map((task) => {
9429
+ return Object.assign(Object.assign({}, task), { _row_id: index });
9430
+ }));
9431
+ }, []);
9432
+ }
9433
+ else {
9434
+ let i = 0;
9435
+ tasksGroups.forEach((group) => {
9436
+ tasks.push(...group.tasks.map((task) => {
9437
+ return Object.assign(Object.assign({}, task), { _row_id: i++ });
9438
+ }));
9439
+ }, []);
9440
+ }
9441
+ return tasks;
9442
+ }
9443
+ _validateViewMode() {
9444
+ if (![
9445
+ ViewMode.Hour,
9446
+ ViewMode.QuarterDay,
9447
+ ViewMode.HalfDay,
9448
+ ViewMode.Day,
9449
+ ViewMode.Week,
9450
+ ViewMode.Month,
9451
+ ViewMode.Year,
9452
+ ].includes(this.viewMode)) {
9453
+ throw new Error("Invalid gantt view mode");
9454
+ }
9455
+ }
9456
+ };
9457
+ __decorate([
9458
+ Input()
9459
+ ], GanttComponent.prototype, "columnTitle", void 0);
9460
+ __decorate([
9461
+ Input()
9462
+ ], GanttComponent.prototype, "multipleTaskPerLine", void 0);
9463
+ __decorate([
9464
+ Input()
9465
+ ], GanttComponent.prototype, "showSideTable", void 0);
9466
+ __decorate([
9467
+ Input()
9468
+ ], GanttComponent.prototype, "viewMode", void 0);
9469
+ __decorate([
9470
+ Input()
9471
+ ], GanttComponent.prototype, "tasks", void 0);
9472
+ __decorate([
9473
+ Input()
9474
+ ], GanttComponent.prototype, "marginBeforeStart", void 0);
9475
+ __decorate([
9476
+ Input()
9477
+ ], GanttComponent.prototype, "marginAfterEnd", void 0);
9478
+ __decorate([
9479
+ Output()
9480
+ ], GanttComponent.prototype, "taskClicked", void 0);
9481
+ __decorate([
9482
+ Output()
9483
+ ], GanttComponent.prototype, "taskDateChanged", void 0);
9484
+ __decorate([
9485
+ Output()
9486
+ ], GanttComponent.prototype, "viewChanged", void 0);
9487
+ GanttComponent = __decorate([
9488
+ Component({
9489
+ selector: "s-gantt",
9490
+ template: "<div class=\"outer\">\n <gantt-side-table\n *ngIf=\"showSideTable\"\n [tasks]=\"tasks\"\n [columnTitle]=\"columnTitle\"\n [multipleTaskPerLine]=\"multipleTaskPerLine\">\n </gantt-side-table>\n <svg id=\"gantt\"></svg>\n</div>",
9491
+ encapsulation: ViewEncapsulation.None,
9492
+ styles: [".outer{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:start;align-items:flex-start;-ms-flex-line-pack:center;align-content:center;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row}", ".gantt{border:1px solid #e0e0e0}.gantt .weekend-highlight{fill:#b8c2cc;opacity:.5;stroke:#ebeff2;stroke-width:1}.gantt .grid-background{fill:none}.gantt .grid-header,.gantt .grid-row{fill:#fff}.gantt .grid-row:nth-child(even){fill:#f5f5f5}.gantt .row-line{stroke:#ebeff2}.gantt .tick{stroke:#e0e0e0;stroke-width:.2}.gantt .tick.thick{stroke-width:.4}.gantt .today-highlight{fill:#ffe979;opacity:.5}.gantt .arrow{fill:none;stroke:#666;stroke-width:1.4}.gantt .bar{opacity:.8;stroke:#8d99a6;stroke-width:0;transition:stroke-width .3s;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt .bar-invalid{fill:transparent;stroke:#8d99a6;stroke-dasharray:5;stroke-width:1}.gantt .bar-invalid~.bar-label{fill:#555}.gantt .bar-label{fill:#fff;text-anchor:middle;font-size:12px;font-weight:lighter}.gantt .bar-label.big{fill:#555;text-anchor:start}.gantt .bar-wrapper{cursor:pointer;outline:0}.gantt .bar-wrapper.active .bar,.gantt .bar-wrapper:hover .bar{opacity:1}.gantt .bar-wrapper.active .bar{stroke:#212533;stroke-width:2}.gantt .lower-text,.gantt .upper-text{font-size:12px;text-anchor:middle}.gantt .upper-text{fill:#555}.gantt .lower-text{fill:#333}.gantt .hide{display:none}.gantt-container{border-left:1px solid #e0e0e0;font-size:12px;overflow:auto;position:relative}.gantt-container .title-1{fill:#999;font-size:12px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .title-2{fill:#333;font-size:14px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .popup-wrapper{left:0;position:absolute;top:0}.gantt-container .popup-wrapper .popup{background:#0e1119;border-radius:2px;color:#fff;padding:8px;font-family:\"Open Sans\" sans-serif;line-height:150%;font-weight:400}.gantt-container .popup-wrapper .popup .wrp-title{border-bottom:1px solid #525966;padding-bottom:10px}.gantt-container .popup-wrapper .popup .wrp-title .title{font-size:14px}.gantt-container .popup-wrapper .popup .wrp-subtitle{color:#dfe2e5;padding-top:10px}.gantt-container .popup-wrapper .popup .wrp-subtitle .icon{margin-right:8px}.gantt-container .popup-wrapper .popup .wrp-subtitle .subtitle{font-size:12px}.gantt-container .popup-wrapper .popup .pointer{border:6px solid transparent;border-top-color:#0e1119;height:6px;margin-left:-4px;position:absolute}"]
9493
+ })
9494
+ ], GanttComponent);
9495
+
9496
+ let SideTableComponent = class SideTableComponent {
9497
+ constructor() {
9498
+ this.ROW_HEIGHT = 44;
9499
+ this.multipleTaskPerLine = false;
9500
+ }
9501
+ };
9502
+ __decorate([
9503
+ Input()
9504
+ ], SideTableComponent.prototype, "columnTitle", void 0);
9505
+ __decorate([
9506
+ Input()
9507
+ ], SideTableComponent.prototype, "tasks", void 0);
9508
+ __decorate([
9509
+ Input()
9510
+ ], SideTableComponent.prototype, "multipleTaskPerLine", void 0);
9511
+ SideTableComponent = __decorate([
9512
+ Component({
9513
+ selector: 'gantt-side-table',
9514
+ template: "<div class=\"side-table\">\n <div class=\"column-title\">\n <span>{{ columnTitle }}</span>\n </div>\n <div class=\"tasks\">\n <div *ngFor=\"let task of tasks; let i = index\" class=\"task\" [ngStyle]=\"{'height.px': multipleTaskPerLine\n ? ROW_HEIGHT\n : ROW_HEIGHT * task.tasks.length}\">\n <div class=\"title\">\n {{ task.title }}\n </div>\n <div class=\"subtitle\">\n {{ task.subtitle }}\n </div>\n </div>\n </div>\n</div>",
9515
+ styles: [".side-table{background:#fff;height:100%;min-width:175px}.side-table .column-title{height:106px;border:1px solid #e0e0e0;box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:end;align-items:flex-end;-ms-flex-pack:center;justify-content:center;padding:8px}.side-table .column-title span{font-family:\"Open Sans\" sans-serif;font-size:14px;font-weight:700;line-height:150%}.side-table .task{-ms-flex-align:center;align-items:center;background-color:#fff;border:1px solid #e0e0e0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;font-family:\"Open Sans\" sans-serif;font-weight:400;-ms-flex-pack:center;justify-content:center;line-height:150%;padding:5px}.side-table .task .title{color:#333;font-size:14px}.side-table .task .subtitle{color:#999;font-size:12px}"]
9516
+ })
9517
+ ], SideTableComponent);
9518
+
9519
+ let GanttModule = class GanttModule {
9520
+ };
9521
+ GanttModule = __decorate([
9522
+ NgModule({
9523
+ imports: [CommonModule],
9524
+ declarations: [
9525
+ GanttComponent,
9526
+ SideTableComponent,
9527
+ ],
9528
+ exports: [GanttComponent],
9529
+ })
9530
+ ], GanttModule);
9531
+
7978
9532
  let HeaderComponent = class HeaderComponent {
7979
9533
  };
7980
9534
  HeaderComponent = __decorate([
@@ -10785,7 +12339,7 @@ function getCompletionResults(context) {
10785
12339
  startCompletionResultsSearch(context);
10786
12340
  }
10787
12341
  let cancelLastCompletionSearch = () => { };
10788
- const ɵ0 = cancelLastCompletionSearch;
12342
+ const ɵ0$1 = cancelLastCompletionSearch;
10789
12343
  let codeMirrorViewElement;
10790
12344
  /*
10791
12345
  * Starts a new completionResults's async search.
@@ -11998,5 +13552,5 @@ const fallback = {
11998
13552
  * Generated bundle index. Do not edit.
11999
13553
  */
12000
13554
 
12001
- export { AccordionComponent, AccordionModule, AccordionPanelComponent, AngularComponentsModule, AutocompleteField, BadgeColors, BadgeComponent, BadgeModule, BaseFieldComponent, BignumberField, BignumberInputDirective, BignumberInputModule, BooleanField, BooleanOptionsLabel, BreadcrumbComponent, BreadcrumbModule, Breakpoints, ButtonComponent, ButtonModule, ButtonPriority, ButtonSize, CalendarField, CalendarLocaleOptions, CalendarMaskDirective, CalendarMaskModule, ChipsField, CodeEditorModule, CollapseLinkComponent, CollapseLinkModule, ControlErrorsComponent, ControlErrorsModule, CountryPhonePickerComponent, CountryPhonePickerModule, CurrencyField, CustomFieldsComponent, CustomFieldsModule, CustomFieldsService, DEFAULT_CALENDAR_LOCALE_OPTIONS, DEFAULT_LOCALE_OPTIONS, DEFAULT_NUMBER_LOCALE_OPTIONS, DebounceUtils, DoubleClickDirective, DynamicConfig, DynamicFormComponent, DynamicFormModule, DynamicType, EditableOverlayDirective, EditableOverlayModule, EmptyStateComponent, EmptyStateModule, EnumBadgeColors, EnumColumnFieldType, EnumSeverity, ExportUtils, Field, FieldType, Fieldset, FileUploadComponent, FileUploadModule, FileValidation, FormField, GlobalSearchComponent, GlobalSearchDropdownItemComponent, GlobalSearchModule, GlobalSearchSizeEnum, HostProjectConfigsInjectionToken, ImageCropperComponent, ImageCropperModule, ImageCropperService, InfoSignDirective, InfoSignModule, Languages, LoadingStateComponent, LoadingStateDirective, LoadingStateModule, LocaleModule, LocaleOptions, LocaleService, LocalizedCurrencyPipe, LocalizedCurrencyPipeOptions, LocalizedDateImpurePipe, LocalizedDatePipe, LocalizedNumberInputDirective, LocalizedNumberInputModule, LocalizedNumberPipe, LocalizedTimeImpurePipe, LocalizedTimePipe, LongPressDirective, LookupComponent, LookupField, MaskFormatterModule, MaskFormatterPipe, MouseEventsModule, NavigationDirective, NumberAlignmentOption, NumberField, NumberInputDirective, NumberInputModule, NumberLocaleOptions, ObjectCardComponent, ObjectCardFieldComponent, ObjectCardMainComponent, ObjectCardModule, Option, Ordination, PanelComponent, PanelModule, PasswordField, PasswordStrengthComponent, PasswordStrengthDirective, PasswordStrengthModule, PasswordStrengthPositions, PasswordStrengths, ProductHeaderComponent, ProductHeaderModule, ProfilePicturePickerComponent, ProfilePicturePickerModule, ProgressBarColors, ProgressBarComponent, ProgressBarModule, RadioButtonField, RatingScaleComponent, RatingScaleModule, RationButtonOption, RowTogllerDirective, Section, SelectField, SelectOption, SidebarComponent, SidebarModule, SlidePanelComponent, SlidePanelModule, SplitButtonComponent, SplitButtonModule, SplitButtonType, StatsCardComponent, StatsCardModule, StepState, StepsComponent, StepsModule, Structure, TableFrozenPositionDirective, TableHeaderCheckboxComponent, TableHeaderCheckboxModule, TableModule, TaxCalculationLanguageConfigs, TextAreaField, TextField, Themes, ThumbnailComponent, ThumbnailModule, ThumbnailSize, TileComponent, TileModule, TimelineComponent, TimelineItem, TimelineItemSeverity, TimelineItemSize, TimelineModule, TokenListComponent, TokenListModule, TooltipModule, TooltipPosition, ValidateErrors, WorkspaceSwitchComponent, WorkspaceSwitchModule, countries, fallback, TooltipComponent as ɵa, TooltipDirective as ɵb, SelectFieldComponent as ɵba, TextAreaFieldComponent as ɵbb, TextFieldComponent as ɵbc, BooleanSwitchFieldComponent as ɵbd, PasswordFieldComponent as ɵbe, SliderFieldComponent as ɵbf, DecimalField as ɵbh, StructureModule as ɵbi, HeaderComponent as ɵbj, FooterComponent as ɵbk, NumberLocaleOptions as ɵbl, ThumbnailService as ɵbm, BorderButtonModule as ɵbn, BorderButtonComponent as ɵbo, TimelineItemModule as ɵbp, TimelineIconItemComponent as ɵbq, HorizontalTimelineModule as ɵbr, HorizontalTimelineComponent as ɵbs, VerticalTimelineModule as ɵbt, VerticalTimelineComponent as ɵbu, RangeLineComponent as ɵbv, CollapseOptionComponent as ɵbw, CollapsedItemsComponent as ɵbx, VerticalItemsComponent as ɵby, InfiniteScrollModule as ɵbz, CountryPhonePickerService as ɵc, InfiniteScrollDirective as ɵca, CustomTranslationsModule as ɵcb, CodeEditorComponent as ɵcc, CoreFacade as ɵcd, CodeMirror6Core as ɵce, LocalizedCurrencyImpurePipe as ɵd, LocalizedBignumberPipe as ɵe, LocalizedBignumberImpurePipe as ɵf, EmptyStateGoBackComponent as ɵg, FileUploadService as ɵh, InfoSignComponent as ɵi, TableColumnsComponent as ɵj, TablePagingComponent as ɵk, AutocompleteFieldComponent as ɵl, BooleanFieldComponent as ɵm, CalendarFieldComponent as ɵn, ChipsFieldComponent as ɵo, CurrencyFieldComponent as ɵp, DynamicFieldComponent as ɵq, DynamicFormDirective as ɵr, FieldsetComponent as ɵs, FileUploadComponent$1 as ɵt, LookupFieldComponent as ɵu, NumberFieldComponent as ɵv, BignumberFieldComponent as ɵw, RadioButtonComponent as ɵx, RowComponent as ɵy, SectionComponent as ɵz };
13555
+ export { AccordionComponent, AccordionModule, AccordionPanelComponent, AngularComponentsModule, AutocompleteField, BadgeColors, BadgeComponent, BadgeModule, BaseFieldComponent, BignumberField, BignumberInputDirective, BignumberInputModule, BooleanField, BooleanOptionsLabel, BreadcrumbComponent, BreadcrumbModule, Breakpoints, ButtonComponent, ButtonModule, ButtonPriority, ButtonSize, CalendarField, CalendarLocaleOptions, CalendarMaskDirective, CalendarMaskModule, ChipsField, CodeEditorModule, CollapseLinkComponent, CollapseLinkModule, ControlErrorsComponent, ControlErrorsModule, CountryPhonePickerComponent, CountryPhonePickerModule, CurrencyField, CustomFieldsComponent, CustomFieldsModule, CustomFieldsService, DEFAULT_CALENDAR_LOCALE_OPTIONS, DEFAULT_LOCALE_OPTIONS, DEFAULT_NUMBER_LOCALE_OPTIONS, DebounceUtils, DoubleClickDirective, DynamicConfig, DynamicFormComponent, DynamicFormModule, DynamicType, EditableOverlayDirective, EditableOverlayModule, EmptyStateComponent, EmptyStateModule, EnumBadgeColors, EnumColumnFieldType, EnumSeverity, ExportUtils, Field, FieldType, Fieldset, FileUploadComponent, FileUploadModule, FileValidation, FormField, GanttComponent, GanttModule, GlobalSearchComponent, GlobalSearchDropdownItemComponent, GlobalSearchModule, GlobalSearchSizeEnum, HostProjectConfigsInjectionToken, ImageCropperComponent, ImageCropperModule, ImageCropperService, InfoSignDirective, InfoSignModule, Languages, LoadingStateComponent, LoadingStateDirective, LoadingStateModule, LocaleModule, LocaleOptions, LocaleService, LocalizedCurrencyPipe, LocalizedCurrencyPipeOptions, LocalizedDateImpurePipe, LocalizedDatePipe, LocalizedNumberInputDirective, LocalizedNumberInputModule, LocalizedNumberPipe, LocalizedTimeImpurePipe, LocalizedTimePipe, LongPressDirective, LookupComponent, LookupField, MaskFormatterModule, MaskFormatterPipe, MouseEventsModule, NavigationDirective, NumberAlignmentOption, NumberField, NumberInputDirective, NumberInputModule, NumberLocaleOptions, ObjectCardComponent, ObjectCardFieldComponent, ObjectCardMainComponent, ObjectCardModule, Option, Ordination, PanelComponent, PanelModule, PasswordField, PasswordStrengthComponent, PasswordStrengthDirective, PasswordStrengthModule, PasswordStrengthPositions, PasswordStrengths, ProductHeaderComponent, ProductHeaderModule, ProfilePicturePickerComponent, ProfilePicturePickerModule, ProgressBarColors, ProgressBarComponent, ProgressBarModule, RadioButtonField, RatingScaleComponent, RatingScaleModule, RationButtonOption, RowTogllerDirective, Section, SelectField, SelectOption, SidebarComponent, SidebarModule, SlidePanelComponent, SlidePanelModule, SplitButtonComponent, SplitButtonModule, SplitButtonType, StatsCardComponent, StatsCardModule, StepState, StepsComponent, StepsModule, Structure, TableFrozenPositionDirective, TableHeaderCheckboxComponent, TableHeaderCheckboxModule, TableModule, TaxCalculationLanguageConfigs, TextAreaField, TextField, Themes, ThumbnailComponent, ThumbnailModule, ThumbnailSize, TileComponent, TileModule, TimelineComponent, TimelineItem, TimelineItemSeverity, TimelineItemSize, TimelineModule, TokenListComponent, TokenListModule, TooltipModule, TooltipPosition, ValidateErrors, ViewMode, WorkspaceSwitchComponent, WorkspaceSwitchModule, countries, fallback, TooltipComponent as ɵa, TooltipDirective as ɵb, SelectFieldComponent as ɵba, TextAreaFieldComponent as ɵbb, TextFieldComponent as ɵbc, BooleanSwitchFieldComponent as ɵbd, PasswordFieldComponent as ɵbe, SliderFieldComponent as ɵbf, DecimalField as ɵbh, SideTableComponent as ɵbi, StructureModule as ɵbj, HeaderComponent as ɵbk, FooterComponent as ɵbl, NumberLocaleOptions as ɵbm, ThumbnailService as ɵbn, BorderButtonModule as ɵbo, BorderButtonComponent as ɵbp, TimelineItemModule as ɵbq, TimelineIconItemComponent as ɵbr, HorizontalTimelineModule as ɵbs, HorizontalTimelineComponent as ɵbt, VerticalTimelineModule as ɵbu, VerticalTimelineComponent as ɵbv, RangeLineComponent as ɵbw, CollapseOptionComponent as ɵbx, CollapsedItemsComponent as ɵby, VerticalItemsComponent as ɵbz, CountryPhonePickerService as ɵc, InfiniteScrollModule as ɵca, InfiniteScrollDirective as ɵcb, CustomTranslationsModule as ɵcc, CodeEditorComponent as ɵcd, CoreFacade as ɵce, CodeMirror6Core as ɵcf, LocalizedCurrencyImpurePipe as ɵd, LocalizedBignumberPipe as ɵe, LocalizedBignumberImpurePipe as ɵf, EmptyStateGoBackComponent as ɵg, FileUploadService as ɵh, InfoSignComponent as ɵi, TableColumnsComponent as ɵj, TablePagingComponent as ɵk, AutocompleteFieldComponent as ɵl, BooleanFieldComponent as ɵm, CalendarFieldComponent as ɵn, ChipsFieldComponent as ɵo, CurrencyFieldComponent as ɵp, DynamicFieldComponent as ɵq, DynamicFormDirective as ɵr, FieldsetComponent as ɵs, FileUploadComponent$1 as ɵt, LookupFieldComponent as ɵu, NumberFieldComponent as ɵv, BignumberFieldComponent as ɵw, RadioButtonComponent as ɵx, RowComponent as ɵy, SectionComponent as ɵz };
12002
13556
  //# sourceMappingURL=seniorsistemas-angular-components.js.map