{"version":3,"file":"seniorsistemas-angular-components-gantt.mjs","sources":["../../projects/angular-components/gantt/src/lib/gantt/models/view-mode.ts","../../projects/angular-components/gantt/src/lib/gantt/components/gantt/utils/svg-utils.ts","../../projects/angular-components/gantt/src/lib/gantt/components/gantt/arrow.ts","../../projects/angular-components/gantt/src/lib/gantt/components/gantt/utils/date-utils.ts","../../projects/angular-components/gantt/src/lib/gantt/components/gantt/bar.ts","../../projects/angular-components/gantt/src/lib/gantt/components/gantt/gantt-options.ts","../../projects/angular-components/gantt/src/lib/gantt/components/gantt/popup.ts","../../projects/angular-components/gantt/src/lib/gantt/components/gantt/gantt.ts","../../projects/angular-components/gantt/src/lib/gantt/components/side-table/side-table.component.ts","../../projects/angular-components/gantt/src/lib/gantt/components/side-table/side-table.component.html","../../projects/angular-components/gantt/src/lib/gantt/gantt.component.ts","../../projects/angular-components/gantt/src/lib/gantt/gantt.component.html","../../projects/angular-components/gantt/src/lib/gantt/gantt.module.ts","../../projects/angular-components/gantt/src/seniorsistemas-angular-components-gantt.ts"],"sourcesContent":["export enum ViewMode {\n    QuarterHour = 'quarterHour',\n    Hour = 'hour',\n    QuarterDay = 'quarterDay',\n    HalfDay = 'halfDay',\n    Day = 'day',\n    Week = 'week',\n    Month = 'month',\n    Year = 'year',\n}\n","\n\nexport const $ = (expr: any, con: any) => typeof expr === 'string'\n    ? (con || document).querySelector(expr)\n    : expr || null;\n\nexport const createSVG = (tag: any, attrs: any) => {\n    const elem = document.createElementNS('http://www.w3.org/2000/svg', tag);\n    for (const attr in attrs) {\n        if (attr === 'append_to') {\n            const parent = attrs.append_to;\n            parent.appendChild(elem);\n        } else if (attr === 'innerHTML') {\n            elem.innerHTML = attrs.innerHTML;\n        } else {\n            elem.setAttribute(attr, attrs[attr]);\n        }\n    }\n    return elem;\n};\n\nexport const animateSVG = (svgElement: any, attr: any, from: any, to: any) => {\n    const animatedSvgElement = getAnimationElement(svgElement, attr, from, to);\n\n    if (animatedSvgElement === svgElement) {\n        // triggered 2nd time programmatically\n        // trigger artificial click event\n        const event = new Event('click', { bubbles: true, cancelable: true });\n        animatedSvgElement.dispatchEvent(event);\n    }\n};\n\nconst getAnimationElement = (svgElement: any, attr: any, from: any, to: any, dur = '0.4s', begin = '0.1s') => {\n    const animEl = svgElement.querySelector('animate');\n    if (animEl) {\n        $.attr(animEl, {\n            attributeName: attr,\n            from,\n            to,\n            dur,\n            begin: 'click + ' + begin, // artificial click\n        }, null);\n        return svgElement;\n    }\n\n    const animateElement = createSVG('animate', {\n        attributeName: attr,\n        from,\n        to,\n        dur,\n        begin,\n        calcMode: 'spline',\n        values: from + ';' + to,\n        keyTimes: '0; 1',\n        keySplines: cubicBezier('ease-out'),\n    });\n    svgElement.appendChild(animateElement);\n\n    return svgElement;\n};\n\nconst cubicBezier = (name: 'ease' | 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out') => ({\n    ease: '.25 .1 .25 1',\n    linear: '0 0 1 1',\n    'ease-in': '.42 0 1 1',\n    'ease-out': '0 0 .58 1',\n    'ease-in-out': '.42 0 .58 1',\n}[name]);\n\n$.on = (element: any, event: any, selector: any, callback: any) => {\n    if (!callback) {\n        callback = selector;\n        $.bind(element, event, callback);\n    } else {\n        $.delegate(element, event, selector, callback);\n    }\n};\n\n$.off = (element: any, event: any, handler: any) => {\n    element.removeEventListener(event, handler);\n};\n\n$.bind = (element: any, event: any, callback: any) => {\n    event.split(/\\s+/).forEach(function (currentEvent: any) {\n        element.addEventListener(currentEvent, callback);\n    });\n};\n\n$.delegate = (element: any, event: any, selector: any, callback: any) => {\n    element.addEventListener(event, function (this: HTMLElement, e: any) {\n        const delegatedTarget = e.target.closest(selector);\n        if (delegatedTarget) {\n            e.delegatedTarget = delegatedTarget;\n            callback.call(this, e, delegatedTarget);\n        }\n    });\n};\n\n$.closest = (selector: any, element: any): HTMLElement | null => {\n    if (!element) {\n        return null;\n    }\n\n    if (element.matches(selector)) {\n        return element;\n    }\n\n    return $.closest(selector, element.parentNode);\n};\n\n$.attr = (element: any, attr: any, value: any) => {\n    if (!value && typeof attr === 'string') {\n        return element.getAttribute(attr);\n    }\n\n    if (typeof attr === 'object') {\n        for (const key in attr) {\n            if (attr.hasOwnProperty(key)) {\n                $.attr(element, key, attr[key]);\n            }\n        }\n        return;\n    }\n\n    element.setAttribute(attr, value);\n};\n","import { Bar } from \"./bar\";\nimport { Gantt } from \"./gantt\";\nimport { createSVG } from './utils/svg-utils';\n\nexport class Arrow {\n    private _gantt: Gantt;\n    private _fromTask: Bar;\n    private _toTask: Bar;\n    private _path: any;\n    private _element: any;\n\n    constructor(gantt: Gantt, fromTask: Bar, toTask: Bar) {\n        this._gantt = gantt;\n        this._fromTask = fromTask;\n        this._toTask = toTask;\n\n        this.calculatePath();\n        this.draw();\n    }\n\n    public get fromTask(): Bar {\n        return this._fromTask;\n    }\n\n    public get toTask(): Bar {\n        return this._toTask;\n    }\n\n    public get element() {\n        return this._element;\n    }\n\n    public update() {\n        this.calculatePath();\n        this._element.setAttribute(\"d\", this._path);\n    }\n\n    private calculatePath() {\n        let startX = this.fromTask.element.getX() + this.fromTask.element.getWidth() / 2;\n\n        const condition = () =>\n            this.toTask.element.getX() < startX + this._gantt.options.padding &&\n            startX > this.fromTask.element.getX() + this._gantt.options.padding;\n\n        while (condition()) {\n            startX -= 10;\n        }\n\n        const startY = this._gantt.options.headerHeight +\n            this._gantt.options.barHeight +\n            (this._gantt.options.padding + this._gantt.options.barHeight) *\n            this.fromTask.task._index +\n            this._gantt.options.padding;\n        const endX = this.toTask.element.getX() - this._gantt.options.padding / 2;\n        const endY = this._gantt.options.headerHeight +\n            this._gantt.options.barHeight / 2 +\n            (this._gantt.options.padding + this._gantt.options.barHeight) *\n            this.toTask.task._index +\n            this._gantt.options.padding;\n        const fromIsBelowTo = this.fromTask.task._index > this.toTask.task._index;\n        const curve = this._gantt.options.arrowCurve;\n        const clockwise = fromIsBelowTo ? 1 : 0;\n        const curveY = fromIsBelowTo ? -curve : curve;\n        const offset = fromIsBelowTo\n            ? endY + this._gantt.options.arrowCurve\n            : endY - this._gantt.options.arrowCurve;\n\n        this._path = `\n            M ${startX} ${startY}\n            V ${offset}\n            a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curveY}\n            L ${endX} ${endY}\n            m -5 -5\n            l 5 5\n            l -5 5`;\n\n        if (this.toTask.element.getX() < this.fromTask.element.getX() + this._gantt.options.padding) {\n            const down1 = this._gantt.options.padding / 2 - curve;\n            const down2 = this.toTask.element.getY() + this.toTask.element.getHeight() / 2 - curveY;\n            const left = this.toTask.element.getX() - this._gantt.options.padding;\n\n            this._path = `\n                M ${startX} ${startY}\n                v ${down1}\n                a ${curve} ${curve} 0 0 1 -${curve} ${curve}\n                H ${left}\n                a ${curve} ${curve} 0 0 ${clockwise} -${curve} ${curveY}\n                V ${down2}\n                a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curveY}\n                L ${endX} ${endY}\n                m -5 -5\n                l 5 5\n                l -5 5`;\n        }\n    }\n\n    private draw() {\n        this._element = createSVG(\"path\", {\n            d: this._path,\n            \"data-from\": this.fromTask.task.id,\n            \"data-to\": this.toTask.task.id,\n        });\n    }\n}\n","import moment from 'moment';\n\n\n\nconst YEAR = 'year';\nconst MONTH = 'month';\nconst DAY = 'day';\nconst HOUR = 'hour';\nconst MINUTE = 'minute';\nconst SECOND = 'second';\nconst MILLISECOND = 'millisecond';\n\nexport abstract class DateUtils {\n\tpublic static parse(date: Date | string): Date {\n\t\treturn moment(date).toDate();\n\t}\n\n\tpublic static toString(date: Date, with_time = false) {\n\t\tconst result = with_time ? moment(date, 'YYYY-MM-DD hh:mm:ss.SSS') : moment(date, 'YYYY-MM-DD');\n\n\t\treturn result.toString();\n\t}\n\n\tpublic static format(date: any, formatString: string = 'YYYY-MM-DD HH:mm:ss.SSS', lang: string = 'en'): string {\n\t\tconst monthName = moment(date).locale(lang).startOf('month').format('MMMM');\n\n\t\tconst monthNameCapitalized = monthName.charAt(0).toUpperCase() + monthName.slice(1);\n\t\tconst dateToFormat = moment(date).locale(lang);\n\t\tconst formatMap = {\n\t\t\tYYYY: dateToFormat.format('YYYY'),\n\t\t\tMM: dateToFormat.format('MM'),\n\t\t\tDD: dateToFormat.format('DD'),\n\t\t\t// Removendo alterações nas traduções que acontecem nos diferentes idiomas\n\t\t\tddd: dateToFormat.format('ddd').toUpperCase().replace('.', ''),\n\t\t\tHH: dateToFormat.format('HH'),\n\t\t\tmm: dateToFormat.format('mm'),\n\t\t\tss: dateToFormat.format('ss'),\n\t\t\tSSS: dateToFormat.format('SSS'),\n\t\t\tD: dateToFormat.format('D'),\n\t\t\tMMMM: monthNameCapitalized,\n\t\t\tMMM: monthNameCapitalized,\n\t\t};\n\n\t\tlet str = formatString;\n\t\tconst formattedValues: any[] = [];\n\n\t\tObject.keys(formatMap)\n\t\t\t.sort((a, b) => b.length - a.length)\n\t\t\t.forEach((key) => {\n\t\t\t\tif (str.includes(key)) {\n\t\t\t\t\tstr = str.replace(key, `$${formattedValues.length}`);\n\t\t\t\t\tformattedValues.push((formatMap as any)[key]);\n\t\t\t\t}\n\t\t\t});\n\n\t\tformattedValues.forEach((value, i) => {\n\t\t\tstr = str.replace(`$${i}`, value);\n\t\t});\n\n\t\treturn str;\n\t}\n\n\tpublic static diff(fistDate: Date, secondDate: Date, scale: string) {\n\t\tconst milliseconds = moment(fistDate).diff(secondDate, MILLISECOND);\n\t\tconst seconds = moment(fistDate).diff(secondDate, SECOND);\n\t\tconst minutes = moment(fistDate).diff(secondDate, MINUTE);\n\t\tconst hours = moment(fistDate).diff(secondDate, HOUR);\n\t\tconst days = moment(fistDate).diff(secondDate, DAY);\n\t\tconst months = moment(fistDate).diff(secondDate, MONTH);\n\t\tconst years = moment(fistDate).diff(secondDate, YEAR);\n\n\t\tif (!scale.endsWith('s')) {\n\t\t\tscale += 's';\n\t\t}\n\n\t\treturn Math.floor({ milliseconds, seconds, minutes, hours, days, months, years }[scale] as number);\n\t}\n\n\tpublic static today(): Date {\n\t\tconst dateStr = moment().format('YYY-MM-DD');\n\t\treturn new Date(dateStr);\n\t}\n\n\tpublic static now(): Date {\n\t\treturn moment().toDate();\n\t}\n\n\tpublic static add(date: Date, quantity: any, scale: any): Date {\n\t\treturn moment(date).add(quantity, scale).toDate();\n\t}\n\n\tpublic static startOf(date: Date, scale: string): Date {\n\t\tconst scores = {\n\t\t\t[YEAR]: 6,\n\t\t\t[MONTH]: 5,\n\t\t\t[DAY]: 4,\n\t\t\t[HOUR]: 3,\n\t\t\t[MINUTE]: 2,\n\t\t\t[SECOND]: 1,\n\t\t\t[MILLISECOND]: 0,\n\t\t};\n\n\t\tfunction shouldReset(_scale: any) {\n\t\t\tconst maxScore = (scores as any)[scale];\n\t\t\treturn (scores as any)[_scale] <= maxScore;\n\t\t}\n\n\t\tconst vals: any = [\n\t\t\tdate.getFullYear(),\n\t\t\tshouldReset(YEAR) ? 0 : date.getMonth(),\n\t\t\tshouldReset(MONTH) ? 1 : date.getDate(),\n\t\t\tshouldReset(DAY) ? 0 : date.getHours(),\n\t\t\tshouldReset(HOUR) ? 0 : date.getMinutes(),\n\t\t\tshouldReset(MINUTE) ? 0 : date.getSeconds(),\n\t\t\tshouldReset(SECOND) ? 0 : date.getMilliseconds(),\n\t\t];\n\n\t\treturn new Date(vals[0], vals[1], vals[2], vals[3], vals[4], vals[5], vals[6]);\n\t}\n\n\tpublic static clone(date: Date): Date {\n\t\treturn moment(date).toDate();\n\t}\n\n\tpublic static getDateValues(date: Date) {\n\t\treturn [\n\t\t\tdate.getFullYear(),\n\t\t\tdate.getMonth(),\n\t\t\tdate.getDate(),\n\t\t\tdate.getHours(),\n\t\t\tdate.getMinutes(),\n\t\t\tdate.getSeconds(),\n\t\t\tdate.getMilliseconds(),\n\t\t];\n\t}\n\n\tpublic static getDaysInMonth(date: Date) {\n\t\treturn moment(date, 'YYYY-MM').daysInMonth();\n\t}\n}\n","import { ViewMode } from '../../models/view-mode';\nimport { DateUtils } from './utils/date-utils';\nimport { $, animateSVG, createSVG } from './utils/svg-utils';\nimport { EnrichedTask } from '../../models/task';\nimport { Arrow } from './arrow';\nimport { Gantt } from './gantt';\nimport { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\n\nexport class Bar {\n    private _actionCompleted?: boolean;\n    private _gantt?: Gantt;\n    private _invalid?: boolean;\n    private _height?: number;\n    private _x?: number;\n    private _y?: number;\n    private _cornerRadius?: number;\n    private _duration?: number;\n    private _width?: number;\n    private _barGroup: any;\n\n    private _arrows?: Arrow[];\n    private _group?: any;\n    private _task!: EnrichedTask;\n    private _element: any;\n\n    private _isPopUpOpen = false;\n\n    constructor(gantt: any, task: any) {\n        this._setDefaults(gantt, task);\n        this._prepare();\n        this._draw();\n        this._bind();\n    }\n\n    public get arrows(): Arrow[] | undefined {\n        return this._arrows;\n    }\n\n    public get task(): EnrichedTask {\n        return this._task;\n    }\n\n    public get element() {\n        return this._element;\n    }\n\n    public get group() {\n        return this._group;\n    }\n\n    public set arrows(arrows: Arrow[]) {\n        this._arrows = arrows;\n    }\n\n    public updateBarPosition({ x, width }: any): void {\n        const bar = this.element;\n        if (x) {\n            // get all x values of parent task\n            const xs = this.task?.dependencies?.map((dep: any) => this._gantt?.get_bar(dep)?.element.getX());\n            // child task must not go before parent\n            const validX = xs?.reduce((prev: any, curr: any) => x >= curr, x);\n            if (!validX) {\n                width = null;\n                return;\n            }\n            this._updateAttr(bar, 'x', x);\n        }\n        if (width && width >= (this._gantt?.options?.columnWidth ?? 0)) {\n            this._updateAttr(bar, 'width', width);\n        }\n        this._updateLabelPosition();\n        this._updateArrowPosition();\n    }\n\n    public dateChanged(): void {\n        let changed = false;\n        const computedStartEndDate = this._computeStartEndDate();\n\n        if (isNullOrUndefined(computedStartEndDate)) return;\n\n        const { newStartDate, newEndDate } = computedStartEndDate;\n\n        if (this.task?.start !== newStartDate) {\n            changed = true;\n\n            if (!isNullOrUndefined(this.task)) {\n                this.task.start = newStartDate;\n            }\n        }\n\n        if (this.task?.end !== newEndDate) {\n            changed = true;\n\n            if (!isNullOrUndefined(this.task)) {\n                this.task.end = newEndDate;\n            }\n        }\n\n        if (changed) {\n            this._gantt?.trigger_event('onDateChange', [this.task, newStartDate, DateUtils.add(newEndDate, -1, 'second')]);\n        }\n    }\n\n    public setActionCompleted(): void {\n        this._actionCompleted = true;\n        setTimeout(() => {\n            this._actionCompleted = false;\n        }, 1000);\n    }\n\n    private _setDefaults(gantt: any, task: any): void {\n        this._actionCompleted = false;\n        this._gantt = gantt;\n        this._task = task;\n    }\n\n    private _prepare(): void {\n        this._prepareValues();\n        this._prepareHelpers();\n    }\n\n    private _prepareValues(): void {\n        if (\n            isNullOrUndefined(this.task) ||\n            isNullOrUndefined(this._gantt) ||\n            isNullOrUndefined(this._gantt.options) ||\n            isNullOrUndefined(this._gantt.options.step)\n        )\n            return;\n\n        this._invalid = this.task.invalid;\n        this._height = this._gantt.options.barHeight;\n        this._x = this._computeX();\n        this._y = this._computeY();\n        this._cornerRadius = this._gantt.options.barCornerRadius;\n        this._duration = DateUtils.diff(this.task.end, this.task.start, 'minute') / this._gantt.options.step / 60.0;\n        this._width = (this._gantt.options.columnWidth ?? 0) * this._duration;\n        this._group = createSVG('g', {\n            class: 'bar-wrapper ' + (this.task.custom_class || ''),\n            'data-id': this.task.id,\n        });\n        this._barGroup = createSVG('g', {\n            class: 'bar-group',\n            append_to: this.group,\n        });\n    }\n\n    private _prepareHelpers(): void {\n        (SVGElement.prototype as any).getX = function () {\n            return +this.getAttribute('x');\n        };\n        (SVGElement.prototype as any).getY = function () {\n            return +this.getAttribute('y');\n        };\n        (SVGElement.prototype as any).getWidth = function () {\n            return +this.getAttribute('width');\n        };\n        (SVGElement.prototype as any).getHeight = function () {\n            return +this.getAttribute('height');\n        };\n        (SVGElement.prototype as any).getEndX = function () {\n            return this.getX() + this.getWidth();\n        };\n    }\n\n    private _draw(): void {\n        this._drawBar();\n        this._drawLabel();\n    }\n\n    private _drawBar(): void {\n        this._element = createSVG('rect', {\n            x: this._x,\n            y: this._y,\n            width: this._width,\n            height: this._height,\n            rx: this._cornerRadius,\n            ry: this._cornerRadius,\n            class: 'bar',\n            append_to: this._barGroup,\n            fill: this.task?.color,\n        });\n\n        animateSVG(this.element, 'width', 0, this._width);\n\n        if (this._invalid) {\n            this.element.classList.add('bar-invalid');\n        }\n    }\n\n    private _drawLabel(): void {\n        createSVG('text', {\n            x: (this._x ?? 0) + (this._width ?? 0) / 2,\n            y: (this._y ?? 0) + (this._height ?? 0) / 2,\n            innerHTML: this.task?.showTaskName ? this.task.name : '',\n            class: 'bar-label',\n            append_to: this._barGroup,\n        });\n        // labels get BBox in the next tick\n        requestAnimationFrame(() => this._updateLabelPosition());\n    }\n\n    private _bind(): void {\n        if (!this._invalid) {\n            this._setupClickEvent();\n        }\n    }\n\n    private _setupClickEvent(): void {\n        if (this._gantt?.options?.hasPopup) {\n            $.on(\n                this.group,\n                'focus ' + this._gantt.options.popupTrigger,\n                (e: any) => {\n                    // just finished a move action, wait for a few seconds\n                    if (!this._actionCompleted) {\n                        this._showPopup();\n                        this._gantt?.unselect_all();\n                        this.group.classList.add('active');\n                    }\n                },\n                null,\n            );\n\n            $.on(\n                this.group,\n                'dblclick',\n                (e: any) => {\n                    // just finished a move action, wait for a few seconds\n\n                    if (!this._actionCompleted) {\n                        this._gantt?.trigger_event('onClick', [this.task]);\n                    }\n                },\n                null,\n            );\n        } else {\n            $.on(\n                this.group,\n                'mouseenter',\n                (e: any) => {\n                    if (!this._isPopUpOpen) {\n                        this._showPopup({\n                            x: e.clientX,\n                            y: this.group.getBoundingClientRect().top + 30,\n                            position: 'middle',\n                        });\n                        this._isPopUpOpen = true;\n                    }\n                },\n                null,\n            );\n\n            $.on(\n                this.group,\n                'mouseleave',\n                (e: any) => {\n                    this._gantt?.hide_popup();\n                    this._isPopUpOpen = false;\n                },\n                null,\n            );\n\n            $.on(\n                this.group,\n                'focus click',\n                (e: any) => {\n                    if (!this._actionCompleted) {\n                        this._gantt?.unselect_all();\n                        this.group.classList.add('active');\n                        this._gantt?.trigger_event('onClick', [this.task]);\n                    }\n                },\n                null,\n            );\n        }\n    }\n\n    private _showPopup(args?: any): void {\n        if (this._gantt?.bar_being_dragged) {\n            return;\n        }\n\n        const subtitle: any = {};\n\n        if (!this._gantt?.options?.showOnlyHours) {\n            subtitle.startDate = DateUtils.format(this.task?.start, 'DD/MM/YYYY', this._gantt?.options?.language);\n            subtitle.endDate = DateUtils.format(this.task?.end, 'DD/MM/YYYY', this._gantt?.options?.language);\n        }\n\n        if (!this._gantt?.options?.showOnlyDays) {\n            subtitle.startHour = DateUtils.format(this.task?.start, 'HH:mm:ss', this._gantt?.options?.language);\n            subtitle.endHour = DateUtils.format(this.task?.end, 'HH:mm:ss', this._gantt?.options?.language);\n        }\n\n        this._gantt?.show_popup({\n            target_element: this.element,\n            title: this.task?.name,\n            subtitle: subtitle,\n            task: this.task,\n            ...args,\n        });\n    }\n\n    private _computeStartEndDate(): { newStartDate: Date; newEndDate: Date } | null {\n        if (isNullOrUndefined(this._gantt?.options?.columnWidth) || isNullOrUndefined(this._gantt.minDate)) return null;\n\n        const bar = this.element;\n        const xInUnits = bar.getX() / this._gantt.options.columnWidth;\n        const newStartDate = DateUtils.add(this._gantt.minDate, xInUnits * (this._gantt.options.step ?? 0), 'hour');\n        const widthInUnits = bar.getWidth() / this._gantt.options.columnWidth;\n        const newEndDate = DateUtils.add(newStartDate, widthInUnits * (this._gantt.options.step ?? 0), 'hour');\n\n        return { newStartDate, newEndDate };\n    }\n\n    private _computeX(): number | undefined {\n        if (isNullOrUndefined(this._gantt)) return undefined;\n\n        const options = this._gantt.options;\n\n        if (isNullOrUndefined(options)) return undefined;\n\n        const { step, columnWidth } = options;\n\n        if (isNullOrUndefined(step) || isNullOrUndefined(columnWidth) || isNullOrUndefined(this.task) || isNullOrUndefined(this._gantt.minDate)) return undefined;\n\n        let x;\n        if (this._gantt?.view_is([ViewMode.QuarterHour, ViewMode.Hour, ViewMode.QuarterDay, ViewMode.HalfDay, ViewMode.Day])) {\n            const diff = DateUtils.diff(this.task.start, this._gantt.minDate, 'minutes');\n            x = (diff / step) * (columnWidth / 60);\n        } else {\n            const diff = DateUtils.diff(this.task.start, this._gantt.minDate, 'hour');\n            x = (diff / step) * columnWidth;\n        }\n\n        return x;\n    }\n\n    private _computeY(): number {\n        return (this._gantt?.options?.headerHeight ?? 0) + (this._gantt?.options?.padding ?? 0) + (this.task?._index ?? 0) * ((this._height ?? 0) + (this._gantt?.options?.padding ?? 0));\n    }\n\n    private _updateAttr(element: any, attr: any, value: any) {\n        value = +value;\n        if (!isNaN(value)) {\n            element.setAttribute(attr, value);\n        }\n        return element;\n    }\n\n    private _updateLabelPosition(): void {\n        const bar = this.element,\n            label = this.group.querySelector('.bar-label');\n\n        if (label.getBBox().width > bar.getWidth()) {\n            label.classList.add('big');\n            label.setAttribute('x', bar.getX() + bar.getWidth() + 5);\n        } else {\n            label.classList.remove('big');\n            label.setAttribute('x', bar.getX() + bar.getWidth() / 2);\n        }\n    }\n\n    private _updateArrowPosition(): void {\n        this._arrows = this._arrows || [];\n        for (const arrow of this._arrows) {\n            arrow.update();\n        }\n    }\n}\n","import { Options } from '../../models/options';\nimport { ViewMode } from '../../models/view-mode';\n\nexport const defaultOptions: Partial<Options> = {\n    headerHeight: 94,\n    columnWidth: 30,\n    step: 24,\n    barHeight: 20,\n    barCornerRadius: 0,\n    arrowCurve: 4,\n    padding: 24,\n    viewMode: ViewMode.Day,\n    dateFormat: 'YYYY-MM-DD',\n    popupTrigger: 'click',\n    customPopupHtml: '',\n    language: 'en',\n    allowMovement: true,\n    hasPopup: true,\n    showOnlyHours: false,\n    showOnlyDays: false,\n};\n","export class Popup {\n    private _parent: any;\n    private _customHtml: any;\n    private _title: any;\n    private _startDate: any;\n    private _startHour: any;\n    private _endDate: any;\n    private _endHour: any;\n    private _pointer: any;\n\n    constructor(parent: any, customHtml: any) {\n        this._parent = parent;\n        this._customHtml = customHtml;\n        this._make();\n    }\n\n    public show(options: any) {\n        if (!options.target_element) {\n            throw new Error('target_element is required to show popup');\n        }\n        if (!options.position) {\n            options.position = 'left';\n        }\n        const targetElement = options.target_element;\n        this._parent.style.display = 'block';\n\n        if (this._customHtml) {\n            let html = this._customHtml(options.task);\n            html += '<div class=\"pointer\"></div>';\n            this._parent.innerHTML = html;\n            this._pointer = this._parent.querySelector('.pointer');\n        } else {\n            // set data\n            this._title.innerHTML = options.title;\n            this._startDate.innerHTML = options.subtitle.startDate ?? '';\n            this._startHour.innerHTML = options.subtitle.startHour ?? '';\n            this._endDate.innerHTML = options.subtitle.endDate ?? '';\n            this._endHour.innerHTML = options.subtitle.endHour ?? '';\n\n            this._parent.style.width = this._parent.clientWidth + 'px';\n        }\n\n        // set position\n        let positionMeta;\n        if (targetElement instanceof HTMLElement) {\n            positionMeta = targetElement.getBoundingClientRect();\n        } else if (targetElement instanceof SVGElement) {\n            positionMeta = options.target_element.getBBox();\n        }\n\n        if (options.position === 'middle') {\n            this._parent.style.position = 'fixed';\n            this._parent.style.top = options.y + 'px';\n\n            this._pointer.style.transform = 'rotateZ(180deg)';\n            this._pointer.style.top = '-10px';\n\n            if ((options.x - 17) + this._parent.offsetWidth > window.innerWidth) {\n                this._parent.style.left = (options.x - this._parent.offsetWidth + 17) + 'px';\n                this._pointer.style.right = '16px';\n                this._pointer.style.left = 'auto';\n\n            } else {\n                this._parent.style.left = (options.x - 17) + 'px';\n                this._pointer.style.left = '16px';\n                this._pointer.style.right = 'auto';\n            }\n\n        } else if (options.position === 'left') {\n            this._parent.style.left = positionMeta.x + (positionMeta.width + 10) + 'px';\n            this._parent.style.top = positionMeta.y + 'px';\n\n            this._pointer.style.transform = 'rotateZ(90deg)';\n            this._pointer.style.left = '-7px';\n            this._pointer.style.top = '2px';\n        }\n\n        // show\n        this._parent.style.opacity = 1;\n    }\n\n    private _make() {\n        this._parent.innerHTML = `\n        <div class=\"popup\">\n            <div class=\"wrp-title\">\n                <span class=\"title\"></span>\n            </div>\n            <div class=\"wrp-subtitle\">\n                <span class=\"icon fas fa-calendar-alt\"></span>\n                <div style=\"margin-right: 15px\">\n                    <p class=\"startDate\"></p>\n                    <p class=\"startHour\"></p>\n                </div>\n                <div>\n                    <p class=\"endDate\"></p>\n                    <p class=\"endHour\"></p>\n                </div>\n            </div>\n            <div class=\"pointer\"></div>\n        </div>\n        `;\n\n        this._hide();\n\n        this._title = this._parent.querySelector('.title');\n        this._startDate = this._parent.querySelector('.startDate');\n        this._startHour = this._parent.querySelector('.startHour');\n        this._endDate = this._parent.querySelector('.endDate');\n        this._endHour = this._parent.querySelector('.endHour');\n\n        this._pointer = this._parent.querySelector('.pointer');\n    }\n\n    private _hide() {\n        this._parent.style.opacity = 0;\n        this._parent.style.display = 'none';\n        this._parent.style.left = 0;\n    }\n\n    public hide() {\n        this._hide();\n    }\n}\n","import { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\nimport { EnrichedTask, Task } from '../../models';\nimport { Options } from '../../models/options';\nimport { ViewMode } from '../../models/view-mode';\nimport { Arrow } from './arrow';\nimport { Bar } from './bar';\nimport { defaultOptions } from './gantt-options';\nimport { Popup } from './popup';\nimport { DateUtils } from './utils/date-utils';\nimport { $, createSVG } from './utils/svg-utils';\n\nexport class Gantt {\n    public options: Options = { ...defaultOptions } as Options;\n    public tasks?: EnrichedTask[];\n    public dependency_map: any;\n    public dates?: Date[];\n    public layers: any;\n    public bars?: Bar[];\n    public arrows?: Arrow[];\n    public bar_being_dragged: any;\n    public $svg: any;\n    public $container?: HTMLDivElement;\n    public popup_wrapper?: HTMLDivElement;\n    public popup: Popup | null = null;\n\n    private _minDate?: Date;\n    private _maxDate?: Date;\n\n    constructor(wrapper: any, tasks: Task[], options?: Partial<Options>) {\n        this._setupOptions(options);\n        this._setupWrapper(wrapper);\n        this.setup_tasks(tasks);\n        // initialize with default view mode\n        this.change_view_mode();\n        this._bindEvents();\n    }\n\n    public get minDate(): Date | undefined {\n        return this._minDate;\n    }\n\n    public get maxDate(): Date | undefined {\n        return this._maxDate;\n    }\n\n    public setup_tasks(tasks: any) {\n        // prepare tasks\n        this.tasks = tasks.map((task: any, i: any) => {\n            // standard colors if needed\n            task.color = task.color || '#7892A1';\n\n            // convert to Date objects\n            task._start = DateUtils.parse(task.start);\n            task._end = DateUtils.parse(task.end);\n\n            // make task invalid if duration too large\n            if (DateUtils.diff(task._end, task._start, 'year') > 10) {\n                task.end = null;\n            }\n\n            // cache index\n            task._index = i;\n\n            if (typeof task._row_id === 'number') {\n                task._index = task._row_id;\n            }\n\n            // invalid dates\n            if (!task.start && !task.end) {\n                const today = DateUtils.today();\n                task._start = today;\n                task._end = DateUtils.add(today, 2, 'day');\n            }\n\n            if (!task.start && task.end) {\n                task._start = DateUtils.add(task._end, -2, 'day');\n            }\n\n            if (task.start && !task.end) {\n                task._end = DateUtils.add(task._start, 2, 'day');\n            }\n\n            // if hours is not set, assume the last day is full day\n            // e.g: 2018-09-09 becomes 2018-09-09 23:59:59\n            const taskEndValues = DateUtils.getDateValues(task._end);\n            if (taskEndValues.slice(3).every((d) => d === 0)) {\n                task._end = DateUtils.add(task._end, 24, 'hour');\n            }\n\n            // invalid flag\n            if (!task.start || !task.end) {\n                task.invalid = true;\n            }\n\n            // dependencies\n            if (typeof task.dependencies === 'string' || !task.dependencies) {\n                let deps = [];\n                if (task.dependencies) {\n                    deps = task.dependencies\n                        .split(',')\n                        .map((d: any) => d.trim())\n                        .filter((d: any) => d);\n                }\n                task.dependencies = deps;\n            }\n\n            // uids\n            if (!task.id) {\n                task.id = generate_id(task);\n            }\n\n            return task;\n        });\n\n        this._setupDependencies();\n    }\n\n    public refresh(tasks: Task[]) {\n        this.setup_tasks(tasks);\n        this.change_view_mode();\n    }\n\n    public change_view_mode(mode = this.options?.viewMode) {\n        this._setupGanttDates();\n        this._updateViewScale(mode);\n        this._setupDates();\n        this._render();\n        // fire viewmode_change event\n        this.trigger_event('onViewChange', [mode]);\n    }\n\n    public make_grid_highlights() {\n        if (this.view_is(ViewMode.Day)) {\n            const width = this.options?.columnWidth;\n            const height =\n                ((this.options?.barHeight ?? 0) + (this.options?.padding ?? 0)) * (this.tasks?.length ?? 0) +\n                (this.options?.headerHeight ?? 0) +\n                (this.options?.padding ?? 0) / 2;\n\n            let x = 0;\n\n            if (isNullOrUndefined(this.dates)) return;\n\n            for (const date of this.dates) {\n                let y = ((this.options?.headerHeight ?? 0) + (this.options?.padding ?? 0)) / 2;\n\n                const isToday = date === DateUtils.today();\n                const isWeekend = date.getDay() === 0 || date.getDay() === 6;\n                let className;\n\n                if (isToday) {\n                    className = 'today-highlight';\n                    y = ((this.options?.headerHeight ?? 0) + (this.options?.padding ?? 0)) / 2;\n                } else if (isWeekend) {\n                    className = 'weekend-highlight';\n                }\n\n                const rx = 3;\n                const ry = 3;\n\n                if (isToday || isWeekend) {\n                    createSVG('rect', {\n                        x,\n                        y,\n                        rx,\n                        ry,\n                        width,\n                        height,\n                        class: className,\n                        append_to: this.layers.grid,\n                    });\n                }\n\n                x += this.options?.columnWidth ?? 0;\n            }\n        }\n    }\n\n    public unselect_all() {\n        [...this.$svg.querySelectorAll('.bar-wrapper')].forEach((el) => {\n            el.classList.remove('active');\n        });\n    }\n\n    public view_is(modes: ViewMode | ViewMode[]) {\n        if (Array.isArray(modes)) {\n            return modes.some((mode) => this.options?.viewMode === mode);\n        }\n\n        return this.options?.viewMode === modes;\n    }\n\n    public get_bar(id: any): Bar | undefined {\n        return this.bars?.find((bar: any) => bar.task.id === id);\n    }\n\n    public show_popup(options: any) {\n        if (!this.popup) {\n            this.popup = new Popup(this.popup_wrapper, this.options?.customPopupHtml);\n        }\n        this.popup.show(options);\n    }\n\n    public hide_popup() {\n        this.popup?.hide();\n    }\n\n    public trigger_event(event: keyof Options, args: any) {\n        if (this.options?.[event]) {\n            this.options[event].apply(null, args);\n        }\n    }\n\n    private _setupWrapper(element: any) {\n        let svgElement, wrapperElement;\n\n        // CSS Selector is passed\n        if (typeof element === 'string') {\n            element = document.querySelector(element);\n        } else if (element instanceof SVGElement) {\n            // Se já for SVGElement direto, usar como tal\n            svgElement = element;\n        }\n\n        // get the SVGElement\n        if (!svgElement && element instanceof HTMLElement) {\n            wrapperElement = element;\n            svgElement = element.querySelector('svg');\n        } else if (element instanceof SVGElement) {\n            svgElement = element;\n        } else {\n            throw new TypeError(\n                // eslint-disable-next-line max-len\n                \"Frappé Gantt only supports usage of a string CSS selector, HTML DOM element or SVG DOM element for the 'element' parameter\",\n            );\n        }\n\n        // svg element\n        if (!svgElement) {\n            // create it\n            this.$svg = createSVG('svg', {\n                append_to: wrapperElement,\n                class: 'gantt',\n            });\n        } else {\n            this.$svg = svgElement;\n            this.$svg.classList.add('gantt');\n        }\n\n        // wrapper element\n        this.$container = document.createElement('div');\n        this.$container.classList.add('gantt-container');\n        if (this.options?.containerWidth) {\n            this.$container.style.width = this.options.containerWidth + 'px';\n        }\n\n        const parentElement = this.$svg.parentElement;\n        parentElement.appendChild(this.$container);\n        this.$container.appendChild(this.$svg);\n\n        // popup wrapper\n        this.popup_wrapper = document.createElement('div');\n        this.popup_wrapper.classList.add('popup-wrapper');\n        this.$container.appendChild(this.popup_wrapper);\n    }\n\n    private _setupOptions(options: any) {\n        this.options = Object.assign({}, defaultOptions, options);\n    }\n\n    private _setupDependencies() {\n        this.dependency_map = {};\n        if (isNullOrUndefined(this.tasks)) return;\n        for (const t of this.tasks) {\n            if (isNullOrUndefined(t.dependencies)) continue;\n            for (const d of t.dependencies) {\n                this.dependency_map[d] = this.dependency_map[d] || [];\n                this.dependency_map[d].push(t.id);\n            }\n        }\n    }\n\n    private _updateViewScale(view_mode: any) {\n        if (isNullOrUndefined(this.options)) return;\n\n        this.options.viewMode = view_mode;\n        if (view_mode === ViewMode.QuarterHour) {\n            this.options.step = 24 / 24 / 4;\n            this.options.columnWidth = 50;\n        } else if (view_mode === ViewMode.Hour) {\n            this.options.step = 24 / 24;\n            this.options.columnWidth = 50;\n        } else if (view_mode === ViewMode.Day) {\n            this.options.step = 24;\n            this.options.columnWidth = 50;\n        } else if (view_mode === ViewMode.HalfDay) {\n            this.options.step = 24 / 2;\n            this.options.columnWidth = 50;\n        } else if (view_mode === ViewMode.QuarterDay) {\n            this.options.step = 24 / 4;\n            this.options.columnWidth = 50;\n        } else if (view_mode === ViewMode.Week) {\n            this.options.step = 24 * 7;\n            this.options.columnWidth = 140;\n        } else if (view_mode === ViewMode.Month) {\n            this.options.step = 24 * 30;\n            this.options.columnWidth = 120;\n        } else if (view_mode === ViewMode.Year) {\n            this.options.step = 24 * 365;\n            this.options.columnWidth = 120;\n        }\n    }\n\n    private _setupDates() {\n        this._setupDateValues();\n    }\n\n    private _setupGanttDates() {\n        this._minDate = undefined;\n        this._maxDate = undefined;\n\n        if (!isNullOrUndefined(this.tasks)) {\n            for (const task of this.tasks) {\n                // set global start and end date\n                if (!this.minDate || task.start < this.minDate) {\n                    this._minDate = DateUtils.startOf(task.start, 'day');\n                }\n                if (!this.maxDate || task.end > this.maxDate) {\n                    this._maxDate = task.end;\n                }\n            }\n        }\n\n        if (isNullOrUndefined(this.minDate) || isNullOrUndefined(this.maxDate)) return;\n\n        switch (this.options?.viewMode) {\n            case ViewMode.QuarterHour:\n                this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 15), 'minutes');\n                this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 15, 'minutes');\n                break;\n            case ViewMode.Hour:\n                this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'hour');\n                this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'hour');\n                break;\n            case ViewMode.QuarterDay:\n                this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 6), 'hour');\n                this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 6, 'hour');\n                break;\n            case ViewMode.HalfDay:\n                this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 12), 'hour');\n                this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 12, 'hour');\n                break;\n            case ViewMode.Day:\n                this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'day');\n                this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'day');\n                break;\n            case ViewMode.Week:\n                this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'week');\n                this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'week');\n                break;\n            case ViewMode.Month:\n                this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'month');\n                this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'month');\n                break;\n            case ViewMode.Year:\n                this._minDate = DateUtils.add(this.minDate, -(this.options.marginBeforeStart ?? 1), 'year');\n                this._maxDate = DateUtils.add(this.maxDate, this.options.marginAfterEnd ?? 1, 'year');\n                break;\n        }\n    }\n\n    private _setupDateValues() {\n        this.dates = [];\n        let curDate = null;\n\n        if (!isNullOrUndefined(this.minDate) && !isNullOrUndefined(this.maxDate)) {\n            while (curDate === null || curDate < this.maxDate) {\n                if (!curDate) {\n                    curDate = DateUtils.clone(this.minDate);\n                } else {\n                    if (this.view_is(ViewMode.Year)) {\n                        curDate = DateUtils.add(curDate, 1, 'year');\n                    } else if (this.view_is(ViewMode.Month)) {\n                        curDate = DateUtils.add(curDate, 1, 'month');\n                    } else {\n                        curDate = DateUtils.add(curDate, this.options?.step, 'hour');\n                    }\n                }\n                this.dates.push(curDate);\n            }\n        }\n\n        if (this.options?.containerWidth) {\n            const columnWidth = (this.options.containerWidth - 1) / this.dates.length;\n            this.options.columnWidth = columnWidth < 45 ? 45 : columnWidth;\n        }\n    }\n\n    private _bindEvents() {\n        this._bindGridClick();\n        this._bindBarEvents();\n    }\n\n    private _render() {\n        this._clear();\n        this._setupLayers();\n        this._makeGrid();\n        this._makeDates();\n        this._makeBars();\n        this._makeArrows();\n        this._mapArrowsOnBars();\n        this._setWidth();\n        this._setScrollPosition();\n    }\n\n    private _setupLayers() {\n        this.layers = {};\n        const layers = ['grid', 'date', 'arrow', 'progress', 'bar', 'details'];\n        // make group layers\n        for (const layer of layers) {\n            this.layers[layer] = createSVG('g', {\n                class: layer,\n                append_to: this.$svg,\n            });\n        }\n    }\n\n    private _makeGrid() {\n        this._makeGridBackground();\n        this._makeGridRows();\n        this._makeGridHeader();\n        this.make_grid_highlights();\n        this._makeGridTicks();\n    }\n\n    private _makeGridBackground() {\n        let gridWidth = (this.dates?.length ?? 0) * (this.options?.columnWidth ?? 0);\n\n        if (this.options?.containerWidth) {\n            gridWidth = this.options.containerWidth;\n        }\n\n        const distinctRows = [...new Set(this.tasks?.map((x: any) => x._row_id))];\n        const gridHeight =\n            (this.options?.headerHeight ?? 0) +\n            (this.options?.padding ?? 0) / 2 +\n            ((this.options?.barHeight ?? 0) + (this.options?.padding ?? 0)) * distinctRows.length;\n\n        createSVG('rect', {\n            x: 0,\n            y: 0,\n            width: gridWidth,\n            height: gridHeight,\n            class: 'grid-background',\n            append_to: this.layers.grid,\n        });\n\n        $.attr(\n            this.$svg,\n            {\n                height: gridHeight,\n                width: '100%',\n            },\n            null,\n        );\n    }\n\n    private _makeGridRows() {\n        const rowsLayer = createSVG('g', { append_to: this.layers.grid });\n        const linesLayer = createSVG('g', { append_to: this.layers.grid });\n\n        const rowWidth = (this.dates?.length ?? 0) * (this.options?.columnWidth ?? 0);\n        const rowHeight = (this.options?.barHeight ?? 0) + (this.options?.padding ?? 0);\n        let rowY = (this.options?.headerHeight ?? 0) + (this.options?.padding ?? 0) / 2;\n\n        this.tasks?.forEach((_) => {\n            createSVG('rect', {\n                x: 0,\n                y: rowY,\n                width: rowWidth,\n                height: rowHeight,\n                class: 'grid-row',\n                append_to: rowsLayer,\n            });\n\n            createSVG('line', {\n                x1: 0,\n                y1: rowY + rowHeight,\n                x2: rowWidth,\n                y2: rowY + rowHeight,\n                class: 'row-line',\n                append_to: linesLayer,\n            });\n\n            rowY += (this.options?.barHeight ?? 0) + (this.options?.padding ?? 0);\n        });\n    }\n\n    private _makeGridHeader() {\n        // const addIsHourView = this.isHourView ? 25 : 10\n        const headerWidth = (this.dates?.length ?? 0) * (this.options?.columnWidth ?? 0);\n        const headerHeight = (this.options?.headerHeight ?? 0) + 10;\n        createSVG('rect', {\n            x: 0,\n            y: 0,\n            width: headerWidth,\n            height: headerHeight,\n            class: 'grid-header',\n            append_to: this.layers.grid,\n        });\n    }\n\n    private _makeGridTicks() {\n        let tickX = 0;\n        const tickY = (this.options?.headerHeight ?? 0) + (this.options?.padding ?? 0) / 2;\n        const tickHeight = ((this.options?.barHeight ?? 0) + (this.options?.padding ?? 0)) * (this.tasks?.length ?? 0);\n\n        if (isNullOrUndefined(this.dates)) return;\n\n        for (const date of this.dates) {\n            let tickClass = 'tick';\n\n            if (this.view_is(ViewMode.QuarterHour) && date.getHours() === 0 && date.getMinutes() === 0) {\n                // thick tick for first hour of day.\n                tickClass += ' thick';\n            } else if (this.view_is([ViewMode.Hour, ViewMode.QuarterDay, ViewMode.HalfDay]) && date.getHours() === 0) {\n                // thick tick for first hour of day.\n                tickClass += ' thick';\n            } else if (this.view_is(ViewMode.Day) && date.getDate() === 1) {\n                // thick tick for monday\n                tickClass += ' thick';\n            } else if (this.view_is(ViewMode.Week) && date.getDate() >= 1 && date.getDate() < 8) {\n                // thick tick for first week\n                tickClass += ' thick';\n            } else if (this.view_is(ViewMode.Month) && date.getMonth() % 3 === 0) {\n                // thick ticks for quarters\n                tickClass += ' thick';\n            }\n\n            createSVG('path', {\n                d: `M ${tickX} ${tickY} v ${tickHeight}`,\n                class: tickClass,\n                append_to: this.layers.grid,\n            });\n\n            if (this.view_is(ViewMode.Month)) {\n                tickX += (DateUtils.getDaysInMonth(date) * (this.options?.columnWidth ?? 0)) / 30;\n            } else {\n                tickX += this.options?.columnWidth ?? 0;\n            }\n        }\n    }\n\n    private _makeDates() {\n        const dates = this._getDatesToDraw();\n\n        if (isNullOrUndefined(dates)) return;\n\n        for (let i = 0; i < dates.length; i++) {\n            const date = dates[i];\n\n            createSVG('text', {\n                x: date.lower_x,\n                y: date.lower_y + 20,\n                innerHTML: date.lower_text,\n                class: 'title-2',\n                append_to: this.layers.date,\n            });\n\n            if (date.middle_text) {\n                createSVG('text', {\n                    x: date.middle_x,\n                    y: date.middle_y,\n                    innerHTML: date.middle_text,\n                    class: 'middle-text',\n                    append_to: this.layers.date,\n                });\n            }\n\n            if (date.upper_text) {\n                const $upperText = createSVG('text', {\n                    x: date.upper_x,\n                    y: date.upper_y,\n                    innerHTML: date.upper_text,\n                    class: 'upper-text',\n                    append_to: this.layers.date,\n                });\n\n                // remove out-of-bound dates\n                if ($upperText.getBBox().x2 > this.layers.grid.getBBox().width) {\n                    $upperText.remove();\n                }\n            }\n        }\n    }\n\n    private _getDatesToDraw() {\n        let lastDate: any = null;\n        const dates = this.dates?.map((date: any, i: any) => {\n            const d = this._getDateInfo(date, lastDate, i);\n            lastDate = date;\n            return d;\n        });\n        return dates;\n    }\n\n    private _getDateInfo(date: Date, last_date: Date, i: any) {\n        if (!last_date) {\n            last_date = DateUtils.add(date, 1, 'year');\n        }\n\n        const dateText: any = {\n            // quarter hour\n            quarterHourUpper: date.getDate() !== last_date.getDate() ? DateUtils.format(date, 'D MMM', this.options?.language) : '',\n\n            quarterHourLower: DateUtils.format(date, 'HH:mm', this.options?.language),\n\n            // hour\n            hourUpper: date.getDate() !== last_date.getDate() ? DateUtils.format(date, 'D MMM', this.options?.language) : '',\n\n            hourLower: DateUtils.format(date, 'HH:mm', this.options?.language),\n\n            // quarter day\n            quarterDayUpper: date.getDate() !== last_date.getDate() ? DateUtils.format(date, 'D MMM', this.options?.language) : '',\n\n            quarterDayLower: DateUtils.format(date, 'HH:mm', this.options?.language),\n\n            // half day\n            halfDayUpper:\n                date.getDate() !== last_date.getDate()\n                    ? date.getMonth() !== last_date.getMonth() || i < 2\n                        ? DateUtils.format(date, 'D MMM', this.options?.language)\n                        : DateUtils.format(date, 'D', this.options?.language)\n                    : '',\n\n            halfDayLower: DateUtils.format(date, 'HH:mm', this.options?.language),\n\n            // day\n            dayUpper: date.getMonth() !== last_date.getMonth() || i === 0 ? DateUtils.format(date, 'MMMM', this.options?.language) : '',\n\n            dayMiddle: DateUtils.format(date, 'ddd', this.options?.language),\n\n            dayLower: DateUtils.format(date, 'D', this.options?.language),\n\n            // week\n            weekUpper: date.getMonth() !== last_date.getMonth() ? DateUtils.format(date, 'MMMM', this.options?.language) : '',\n\n            weekLower:\n                date.getMonth() !== last_date.getMonth()\n                    ? DateUtils.format(date, 'D MMM', this.options?.language)\n                    : DateUtils.format(date, 'D', this.options?.language),\n\n            // month\n            monthUpper: date.getFullYear() !== last_date.getFullYear() ? DateUtils.format(date, 'YYYY', this.options?.language) : '',\n\n            monthLower: DateUtils.format(date, 'MMMM', this.options?.language),\n\n            // year\n            yearUpper: date.getFullYear() !== last_date.getFullYear() ? DateUtils.format(date, 'YYYY', this.options?.language) : '',\n\n            yearLower: DateUtils.format(date, 'YYYY', this.options?.language),\n        };\n\n        // Descontando 20 para adcionar uma segunda linha de informação no cabeçalho\n        const basePos = {\n            x: i * (this.options?.columnWidth ?? 0),\n            upper_y: (this.options?.headerHeight ?? 0) - 20 - 25,\n            middle_y: (this.options?.headerHeight ?? 0) - 20,\n            lower_y: (this.options?.headerHeight ?? 0) - 20,\n        };\n        const xPos: any = {\n            quarterHourUpper: (this.dates?.length ?? 0) < 14 ? (this.options?.columnWidth ?? 0) : ((this.options?.columnWidth ?? 0) * 24) / 2,\n            quarterHourMiddle: (this.options?.columnWidth ?? 0) / 2,\n            quarterHourLower: (this.options?.columnWidth ?? 0) / 2,\n\n            hourUpper: (this.dates?.length ?? 0) < 14 ? (this.options?.columnWidth ?? 0) : ((this.options?.columnWidth ?? 0) * 24) / 2,\n            hourMiddle: (this.options?.columnWidth ?? 0) / 2,\n            hourLower: (this.options?.columnWidth ?? 0) / 2,\n\n            quarterDayUpper: ((this.options?.columnWidth ?? 0) * 4) / 2,\n            quarterDayMiddle: (this.options?.columnWidth ?? 0) / 2,\n            quarterDayLower: (this.options?.columnWidth ?? 0) / 2,\n\n            halfDayUpper: ((this.options?.columnWidth ?? 0) * 2) / 2,\n            halfDayMiddle: (this.options?.columnWidth ?? 0) / 2,\n            halfDayLower: (this.options?.columnWidth ?? 0) / 2,\n\n            dayUpper: (this.dates?.length ?? 0) < 15 ? (this.options?.columnWidth ?? 0) : ((this.options?.columnWidth ?? 0) * 30) / 2,\n            dayMiddle: (this.options?.columnWidth ?? 0) / 2 - 12,\n            dayLower: (this.options?.columnWidth ?? 0) / 2,\n\n            weekUpper: ((this.options?.columnWidth ?? 0) * 4) / 2,\n            weekMiddle: 0,\n            weekLower: 0,\n\n            monthUpper: (this.dates?.length ?? 0) < 15 ? (this.options?.columnWidth ?? 0) : ((this.options?.columnWidth ?? 0) * 12) / 2,\n            monthMiddle: 0,\n            monthLower: (this.options?.columnWidth ?? 0) / 2,\n\n            yearUpper: ((this.options?.columnWidth ?? 0) * 30) / 2,\n            yearMiddle: (this.options?.columnWidth ?? 0) / 2,\n            yearLower: (this.options?.columnWidth ?? 0) / 2,\n        };\n\n        return {\n            upper_text: dateText[`${this.options?.viewMode ?? 'day'}Upper`],\n            middle_text: dateText[`${this.options?.viewMode ?? 'day'}Middle`],\n            lower_text: dateText[`${this.options?.viewMode ?? 'day'}Lower`],\n            upper_x: basePos.x + xPos[`${this.options?.viewMode ?? 'day'}Upper`],\n            upper_y: basePos.upper_y,\n            middle_x: basePos.x + xPos[`${this.options?.viewMode ?? 'day'}Middle`],\n            middle_y: basePos.middle_y,\n            lower_x: basePos.x + xPos[`${this.options?.viewMode ?? 'day'}Lower`],\n            lower_y: basePos.lower_y,\n            date,\n        };\n    }\n\n    private _makeBars() {\n        this.bars = this.tasks?.map((task: any) => {\n            const bar = new Bar(this, task);\n            this.layers.bar.appendChild(bar.group);\n            return bar;\n        });\n    }\n\n    private _makeArrows() {\n        this.arrows = [];\n\n        if (isNullOrUndefined(this.tasks)) return;\n\n        for (const task of this.tasks) {\n            if (isNullOrUndefined(task.dependencies)) continue;\n            let arrows: Arrow[] = [];\n            arrows = task.dependencies\n                .map((task_id: any) => {\n                    const dependency = this._getTask(task_id);\n                    if (!dependency || !this.bars) return undefined;\n                    const arrow = new Arrow(\n                        this,\n                        this.bars[dependency._index], // from_task\n                        this.bars[task._index], // to_task\n                    );\n                    this.layers.arrow.appendChild(arrow.element);\n                    return arrow;\n                })\n                .filter((arrow): arrow is Arrow => arrow !== undefined); // filter undefined values\n            this.arrows = this.arrows.concat(arrows);\n        }\n    }\n\n    private _mapArrowsOnBars() {\n        if (isNullOrUndefined(this.bars)) return;\n\n        for (const bar of this.bars) {\n            bar.arrows = this.arrows?.filter((arrow: Arrow) => arrow.fromTask.task?.id === bar.task?.id || arrow.toTask.task?.id === bar.task?.id) ?? [];\n        }\n    }\n\n    private _setWidth() {\n        const curWidth = this.$svg.getBoundingClientRect().width;\n        const actualWidth = this.$svg.querySelector('.grid .grid-row').getAttribute('width');\n        if (curWidth < actualWidth) {\n            this.$svg.setAttribute('width', actualWidth);\n        }\n    }\n\n    private _setScrollPosition() {\n        const parentElement = this.$svg.parentElement;\n        if (!parentElement || !this.minDate) return;\n\n        const hoursBeforeFirstTask = DateUtils.diff(this._getOldestStartingDate(), this.minDate, 'hour');\n\n        const scrollPos = (hoursBeforeFirstTask / (this.options?.step ?? 0)) * (this.options?.columnWidth ?? 0) - (this.options?.columnWidth ?? 0);\n\n        parentElement.scrollLeft = scrollPos;\n    }\n\n    private _bindGridClick() {\n        $.on(this.$svg, this.options?.popupTrigger, '.grid-row, .grid-header', () => {\n            this.unselect_all();\n            this.hide_popup();\n        });\n    }\n\n    private _bindBarEvents() {\n        let isDragging = false;\n        let xOnStart = 0;\n        let isResizingLeft = false;\n        let isResizingRight = false;\n        let parentBarId: any = null;\n        let bars: Bar[] = [];\n        this.bar_being_dragged = null;\n\n        function action_in_progress() {\n            return isDragging || isResizingLeft || isResizingRight;\n        }\n\n        $.on(this.$svg, 'mousedown', '.bar-wrapper, .handle', (e: any, element: any) => {\n            const barWrapper = $.closest('.bar-wrapper', element);\n\n            if (element.classList.contains('left')) {\n                isResizingLeft = true;\n            } else if (element.classList.contains('right')) {\n                isResizingRight = true;\n            } else if (element.classList.contains('bar-wrapper') && this.options?.allowMovement) {\n                isDragging = true;\n            }\n\n            barWrapper?.classList.add('active');\n\n            xOnStart = e.offsetX;\n\n            parentBarId = barWrapper?.getAttribute('data-id');\n            const ids = [parentBarId, ...this._getAllDependentTasks(parentBarId)];\n            bars = ids.map((id) => this.get_bar(id)).filter((bar): bar is Bar => bar !== undefined);\n\n            this.bar_being_dragged = parentBarId;\n\n            bars.forEach((bar) => {\n                const $bar = bar.element;\n                $bar.ox = $bar.getX();\n                $bar.oy = $bar.getY();\n                $bar.owidth = $bar.getWidth();\n                $bar.finaldx = 0;\n            });\n        });\n\n        $.on(\n            this.$svg,\n            'mousemove',\n            (e: any) => {\n                if (!action_in_progress()) {\n                    return;\n                }\n\n                const dx = e.offsetX - xOnStart;\n\n                bars.forEach((bar) => {\n                    const $bar = bar.element;\n                    $bar.finaldx = this._getSnapPosition(dx);\n                    this.hide_popup();\n                    if (isResizingLeft) {\n                        if (parentBarId === bar.task?.id) {\n                            bar.updateBarPosition({\n                                x: $bar.ox + $bar.finaldx,\n                                width: $bar.owidth - $bar.finaldx,\n                            });\n                        } else {\n                            bar.updateBarPosition({\n                                x: $bar.ox + $bar.finaldx,\n                            });\n                        }\n                    } else if (isResizingRight) {\n                        if (parentBarId === bar.task?.id) {\n                            bar.updateBarPosition({\n                                width: $bar.owidth + $bar.finaldx,\n                            });\n                        }\n                    } else if (isDragging) {\n                        bar.updateBarPosition({ x: $bar.ox + $bar.finaldx });\n                    }\n                });\n            },\n            null,\n        );\n\n        document.addEventListener('mouseup', (e: any) => {\n            if (isDragging || isResizingLeft || isResizingRight || !this.options?.allowMovement) {\n                bars.forEach((bar) => bar.group.classList.remove('active'));\n            }\n\n            isDragging = false;\n            isResizingLeft = false;\n            isResizingRight = false;\n        });\n\n        $.on(\n            this.$svg,\n            'mouseup',\n            (e: any) => {\n                this.bar_being_dragged = null;\n                bars.forEach((bar) => {\n                    const $bar = bar.element;\n                    if (!$bar.finaldx) return;\n                    bar.dateChanged();\n                    bar.setActionCompleted();\n                });\n            },\n            null,\n        );\n    }\n\n    private _getAllDependentTasks(task_id: any) {\n        let out: any[] = [];\n        let toProcess = [task_id];\n        while (toProcess.length) {\n            const deps = toProcess.reduce((acc, curr) => {\n                acc = acc.concat(this.dependency_map[curr]);\n                return acc;\n            }, []);\n\n            out = out.concat(deps);\n            toProcess = deps.filter((d: any) => !toProcess.includes(d));\n        }\n\n        return out.filter(Boolean);\n    }\n\n    private _getSnapPosition(dx: any) {\n        const odx = dx;\n        let rem;\n        let position;\n\n        if (this.view_is(ViewMode.Hour)) {\n            rem = dx % ((this.options?.columnWidth ?? 0) / 6);\n            position = odx - rem + (rem < (this.options?.columnWidth ?? 0) / 12 ? 0 : (this.options?.columnWidth ?? 0) / 6);\n        } else if (this.view_is(ViewMode.Week)) {\n            rem = dx % ((this.options?.columnWidth ?? 0) / 7);\n            position = odx - rem + (rem < (this.options?.columnWidth ?? 0) / 14 ? 0 : (this.options?.columnWidth ?? 0) / 7);\n        } else if (this.view_is(ViewMode.Month)) {\n            rem = dx % ((this.options?.columnWidth ?? 0) / 30);\n            position = odx - rem + (rem < (this.options?.columnWidth ?? 0) / 60 ? 0 : (this.options?.columnWidth ?? 0) / 30);\n        } else {\n            rem = dx % (this.options?.columnWidth ?? 0);\n            position = odx - rem + (rem < (this.options?.columnWidth ?? 0) / 2 ? 0 : (this.options?.columnWidth ?? 0));\n        }\n        return position;\n    }\n\n    private _getTask(id: any) {\n        return this.tasks?.find((task: any) => task.id === id);\n    }\n\n    private _getOldestStartingDate() {\n        return this.tasks?.map((task: any) => task._start).reduce((prev_date: any, cur_date: any) => (cur_date <= prev_date ? cur_date : prev_date));\n    }\n\n    private _clear() {\n        this.$svg.innerHTML = '';\n    }\n}\n\nfunction generate_id(task: any) {\n    return task.name + '_' + Math.random().toString(36).slice(2, 12);\n}\n","/* eslint-disable @angular-eslint/component-selector */\nimport { Component, Input, OnInit } from '@angular/core';\n\nimport { TaskGroup } from '../../models/task';\n\n@Component({\n\tselector: 'gantt-side-table',\n\ttemplateUrl: './side-table.component.html',\n\tstyleUrls: ['./side-table.component.scss'],\n})\nexport class SideTableComponent implements OnInit {\n\t@Input({ required: true })\n\tpublic columnTitle!: string;\n\n\t@Input( { required: true } )\n\tpublic tasks!: TaskGroup[];\n\n\t@Input()\n\tpublic multipleTaskPerLine = false;\n\n\tpublic ROW_HEIGHT = 44;\n\n\tpublic ngOnInit(): void {\n\t\tthis._removeEmptyTasks();\n\t}\n\n\tprivate _removeEmptyTasks(): void {\n\t\tthis.tasks = this.tasks.filter((task) => task.tasks.length);\n\t}\n}\n","<div class=\"side-table\">\n    <div class=\"column-title\">\n        <span>{{ columnTitle }}</span>\n    </div>\n    <div class=\"tasks\" >\n        @for(task of tasks; track task.id; let i = $index) {\n            <div\n                class=\"task\"\n                [ngStyle]=\"{'height.px': multipleTaskPerLine\n                        ? ROW_HEIGHT\n                        : ROW_HEIGHT * task.tasks.length}\"\n                [sTooltip]=\"task.title.length > 20 || task.subtitle.length > 20 ? '<span><strong>' + task.title + ' </strong></br><span> ' + task.subtitle + ' </span></span>' : '' \"\n                [escape]=\"false\">\n                    <div class=\"title\">\n                        {{ task.title }}\n                    </div>\n                    <div class=\"subtitle\">\n                        {{ task.subtitle }}\n                    </div>\n            </div>\n        }\n    </div>\n</div>\n","import {\n    AfterViewInit,\n    Component,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    ViewEncapsulation,\n    EventEmitter,\n    SimpleChanges,\n    ElementRef,\n    ViewChild,\n} from '@angular/core';\n\nimport { Gantt } from './components/gantt/gantt';\nimport { TaskGroup, Task, EnrichedTask } from './models/task';\nimport { ViewMode } from './models/view-mode';\nimport { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\n\n/**\n * @description Componente de diagrama de Gantt para visualização e manipulação de tarefas\n * em linha do tempo. Suporta diferentes modos de visualização (dia, semana, mês),\n * movimentação de tarefas via drag e popup de detalhes ao clicar.\n *\n * @example\n * ```html\n * <s-gantt\n *   [tasks]=\"gruposDeTarefas\"\n *   [viewMode]=\"viewMode\"\n *   (taskClicked)=\"onTaskClicada($event)\" />\n * ```\n *\n * @category Data\n */\n@Component({\n    selector: 's-gantt',\n    templateUrl: './gantt.component.html',\n    styleUrls: ['./gantt.component.scss', './components/gantt/gantt.scss'],\n    encapsulation: ViewEncapsulation.None,\n})\nexport class GanttComponent implements AfterViewInit, OnChanges, OnInit {\n    /** @description Título da coluna lateral de identificação das tarefas. */\n    @Input()\n    public columnTitle?: string;\n\n    /** @description Permite renderizar múltiplas tarefas na mesma linha. @default false */\n    @Input()\n    public multipleTaskPerLine = false;\n\n    /** @description Exibe a tabela lateral com os nomes das tarefas. @default true */\n    @Input()\n    public showSideTable = true;\n\n    /** @description Modo de visualização do gantt (dia, semana, mês, etc.). @default ViewMode.Day */\n    @Input()\n    public viewMode = ViewMode.Day;\n\n    /** @description Lista de grupos de tarefas a serem renderizados. Campo obrigatório. */\n    @Input({ required: true })\n    public tasks!: TaskGroup[];\n\n    /** @description Margem em dias antes do início da primeira tarefa. */\n    @Input()\n    public marginBeforeStart?: number;\n\n    /** @description Margem em dias após o fim da última tarefa. */\n    @Input()\n    public marginAfterEnd?: number;\n\n    /** @description Habilita o arrastar de tarefas para alterar datas. @default true */\n    @Input()\n    public allowMovement = true;\n\n    /** @description Exibe popup com detalhes ao clicar em uma tarefa. @default true */\n    @Input()\n    public hasPopup = true;\n\n    /** @description Largura do container em pixels. Se omitido, usa a largura natural. */\n    @Input()\n    public containerWidth?: number;\n\n    /** @description Faz o gantt ocupar 100% da largura disponível. @default false */\n    @Input()\n    public fullWidth = false;\n\n    /** @description Exibe apenas horas na linha do tempo (ignora dias). @default false */\n    @Input()\n    public showOnlyHours = false;\n\n    /** @description Exibe apenas dias na linha do tempo (ignora horas). @default false */\n    @Input()\n    public showOnlyDays = false;\n\n    /** @description Emitido quando o usuário clica em uma tarefa. */\n    @Output()\n    public taskClicked: EventEmitter<Task> = new EventEmitter();\n\n    /** @description Emitido quando o usuário arrasta e modifica as datas de uma tarefa. */\n    @Output()\n    public taskDateChanged: EventEmitter<any> = new EventEmitter();\n\n    /** @description Emitido quando o modo de visualização é alterado. */\n    @Output()\n    public viewChanged: EventEmitter<ViewMode> = new EventEmitter();\n\n    @ViewChild('outer')\n    public outer: ElementRef | null = null;\n\n    @ViewChild('side')\n    public side: ElementRef | null = null;\n\n    @ViewChild('ganttSvg')\n    public ganttSvg: ElementRef | null = null;\n\n    private _gantt?: Gantt;\n\n    public ngOnInit(): void {\n        this._validateViewMode();\n        this._validateTasks();\n    }\n\n    public ngAfterViewInit(): void {\n        if (this.fullWidth) {\n            this.containerWidth = this.outer?.nativeElement.offsetWidth - this.side?.nativeElement.offsetWidth;\n        }\n\n        this._gantt = new Gantt(this.ganttSvg!.nativeElement, this._filterTask(this.tasks), {\n            viewMode: this.viewMode,\n            marginBeforeStart: this.marginBeforeStart,\n            marginAfterEnd: this.marginAfterEnd,\n            language: 'pt-br',\n            allowMovement: this.allowMovement,\n            hasPopup: this.hasPopup,\n            containerWidth: this.containerWidth,\n            showOnlyHours: this.showOnlyHours,\n            showOnlyDays: this.showOnlyDays,\n            onClick: (task: Task) => this.taskClicked.emit(task),\n            onDateChange: (task: Task, start: any, end: any) => this.taskDateChanged.emit({ task, start, end }),\n            onViewChange: (viewMode: ViewMode) => this.viewChanged.emit(viewMode),\n        });\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (!this._gantt) {\n            return;\n        }\n\n        if (changes['viewMode'] && !isNullOrUndefined(this._gantt.options?.viewMode)) {\n            this._gantt.options.viewMode = changes['viewMode'].currentValue;\n            this._gantt.change_view_mode();\n        }\n\n        if (changes['tasks']) {\n            this._gantt.refresh(this._filterTask(changes['tasks'].currentValue));\n        }\n    }\n\n    private _filterTask(tasksGroups: TaskGroup[]): Task[] {\n        const tasks: Task[] = [];\n\n        if (this.multipleTaskPerLine) {\n            tasksGroups.forEach((group: any, index: number) => {\n                tasks.push(...group.tasks.map((task: EnrichedTask) => ({ ...task, _row_id: index })));\n            }, []);\n        } else {\n            let i = 0;\n            tasksGroups.forEach((group: any) => {\n                tasks.push(...group.tasks.map((task: EnrichedTask) => ({ ...task, _row_id: i++ })));\n            }, []);\n        }\n\n        return tasks;\n    }\n\n    private _validateViewMode(): void {\n        if (\n            ![\n                ViewMode.QuarterHour,\n                ViewMode.Hour,\n                ViewMode.QuarterDay,\n                ViewMode.HalfDay,\n                ViewMode.Day,\n                ViewMode.Week,\n                ViewMode.Month,\n                ViewMode.Year,\n            ].includes(this.viewMode)\n        ) {\n            throw new Error('Invalid gantt view mode');\n        }\n    }\n\n    private _validateTasks(): void {\n        this.tasks.forEach((group) => {\n            group.tasks.forEach((task) => {\n                if (task.start > task.end) {\n                    throw new Error('invalid task. The start date must be less than the end date.');\n                }\n            });\n        });\n    }\n}\n\n","<div class=\"outer\" #outer>\n    <div #side>\n        @if(showSideTable) {\n            <gantt-side-table\n                [tasks]=\"tasks\"\n                [columnTitle]=\"columnTitle ?? ''\"\n                [multipleTaskPerLine]=\"multipleTaskPerLine\">\n            </gantt-side-table>\n        }\n    </div>\n    <svg #ganttSvg></svg>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { GanttComponent } from './gantt.component';\nimport { SideTableComponent } from './components/side-table/side-table.component';\nimport { TooltipModule } from '@seniorsistemas/angular-components/tooltip';\n\n@NgModule({\n    imports: [CommonModule, TooltipModule],\n    declarations: [\n        GanttComponent,\n        SideTableComponent,\n    ],\n    exports: [GanttComponent],\n})\nexport class GanttModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SideTableComponent"],"mappings":"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"}