{"version":3,"sources":["jsdelivr-header.js","/npm/@lemonadejs/timeline@5.0.3/dist/index.js"],"names":[],"mappings":"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","file":"/npm/@lemonadejs/timeline@5.0.3/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@lemonadejs/timeline@5.0.3/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","if (!lemonade && typeof (require) === 'function') {\r\n    var lemonade = require('lemonadejs');\r\n}\r\n\r\n; (function (global, factory) {\r\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n    typeof define === 'function' && define.amd ? define(factory) :\r\n    global.Timeline = factory();\r\n}(this, (function () {\r\n\r\n    let dateSignature = null;\r\n\r\n    // Dispatcher\r\n    const Dispatch = function (type, option) {\r\n        if (typeof this[type] === 'function') {\r\n            this[type](this, option);\r\n        }\r\n    }\r\n\r\n    const extractFromHtml =  function(element) {\r\n        let data = [];\r\n        // Content\r\n        for (let i = 0; i < element.children.length; i++) {\r\n            let e = element.children[i];\r\n            let item = {\r\n                title: e.textContent || e.getAttribute('title') || '',\r\n                date: e.getAttribute('data-date'),\r\n                borderColor: e.getAttribute('data-color') || '',\r\n                borderStyle: e.getAttribute('data-style') || '',\r\n            }\r\n            data.push(item);\r\n        }\r\n\r\n        return data;\r\n    }\r\n\r\n    const extract = function(children) {\r\n        let data = [];\r\n\r\n        if (this.tagName) {\r\n            data = extractFromHtml(this);\r\n\r\n            // Remove all elements\r\n            this.textContent = '';\r\n\r\n            if (!Array.isArray(this.data)) {\r\n                this.data = [];\r\n            }\r\n\r\n            if (data && data.length) {\r\n                // Compatibility legacy jsuites\r\n                data.forEach((v) => {\r\n                    this.data.push(data);\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    const Timeline = function (children, { onload, onchange, track }) {\r\n        let self = this;\r\n\r\n        extract.call(this, children);\r\n\r\n        const toDate = function(d) {\r\n            return d instanceof Date ? d : new Date(d);\r\n        }\r\n\r\n        let date = self.value ? toDate(self.value) : new Date();\r\n\r\n        self.result = [];\r\n\r\n        if (!Array.isArray(self.data)) {\r\n            self.data = [];\r\n        }\r\n\r\n        self.year = date.getFullYear();\r\n        self.month = 1 + date.getMonth();\r\n        self.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n\r\n        // Error message\r\n        if (! self.message) {\r\n            self.message = 'No records found';\r\n        }\r\n\r\n        if (! self.order) {\r\n            self.order = 'asc';\r\n        }\r\n\r\n        // Make sure to align has a default\r\n        if (!['top', 'right', 'bottom', 'left'].includes(self.align)) {\r\n            self.align = 'left';\r\n        }\r\n\r\n        self.next = function () {\r\n            if (self.month === 12) {\r\n                self.year++;\r\n                self.month = 1;\r\n            } else {\r\n                self.month++;\r\n            }\r\n        }\r\n\r\n        self.prev = function () {\r\n            if (self.month === 1) {\r\n                self.year--;\r\n                self.month = 12;\r\n            } else {\r\n                self.month--;\r\n            }\r\n        }\r\n\r\n        const isRemote = function() {\r\n            return self.remote && self.url && self.type === 'monthly';\r\n        }\r\n\r\n        const getDate = function(d) {\r\n            let date = d && d === dateSignature ? '' : d;\r\n            dateSignature = d;\r\n            return date;\r\n        }\r\n\r\n        const updateResult = function () {\r\n            let result = [];\r\n\r\n            if (self.type === 'monthly') {\r\n                for (let i = 0; i < self.data.length; i++) {\r\n                    let d = toDate(self.data[i].date);\r\n                    if ((d.getMonth() + 1) === self.month && d.getFullYear() === self.year) {\r\n                        result.push(self.data[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                result = self.data;\r\n            }\r\n\r\n            result = result.sort((a, b) => (self.order === 'desc' ? -1 : 1) * (toDate(a.date).getTime() - toDate(b.date).getTime()));\r\n\r\n            for (let i = 0; i < result.length; i++) {\r\n                result[i].day = getDate(toDate(result[i].date).toLocaleDateString('en-GB', { year: 'numeric', month: 'short', day: '2-digit' }));\r\n            }\r\n\r\n            self.result = result;\r\n\r\n            // Reset the date signature to avoid interference in the next rendering\r\n            dateSignature = null;\r\n\r\n            // Event\r\n            Dispatch.call(self, 'onupdate', self, result);\r\n        }\r\n\r\n        const fetchRemote = function () {\r\n            const xhr = new XMLHttpRequest();\r\n\r\n            xhr.onreadystatechange = function () {\r\n                if (xhr.readyState === 4) {\r\n                    if (xhr.status === 200) {\r\n                        let res = JSON.parse(xhr.responseText);\r\n\r\n                        let result = [];\r\n                        if (Array.isArray(res.result)) {\r\n                            result = res.result;\r\n                        } else if (Array.isArray(res)) {\r\n                            result = res\r\n                        }\r\n\r\n                        for (let i = 0; i < result.length; i++) {\r\n                            result[i].date = new Date(result[i].date);\r\n                            result[i].day = getDate(result[i].date.toLocaleDateString('en-GB', { year: 'numeric', month: 'short', day: '2-digit' }));\r\n                        }\r\n                        \r\n                        if (isRemote()) {\r\n                            self.result = result;\r\n                        } else {\r\n                            self.data = result;\r\n                        }\r\n                    } else {\r\n                        console.error('Failed to fetch data. Status code: ' + xhr.status);\r\n                    }\r\n                }\r\n            };\r\n\r\n            let url = self.url;\r\n\r\n            if (isRemote()) {\r\n                url += `?year=${self.year}&month=${self.month}`;\r\n                url += `&asc=${self.order === 'asc'}`\r\n            }\r\n\r\n            xhr.open('GET', url, true);\r\n            xhr.setRequestHeader('Content-Type', 'text/json')\r\n            xhr.send();\r\n        }\r\n\r\n        const updateBorders = function() {\r\n            self.result.forEach(entry => {\r\n                if (entry.borderColor) {\r\n                    entry.el.style.setProperty('--lm-border-color', entry.borderColor);\r\n                }\r\n                if (entry.borderStyle) {\r\n                    entry.el.style.setProperty('--lm-border-style', entry.borderStyle);\r\n                }\r\n            });\r\n        }\r\n\r\n        const edition = function(e, s) {\r\n            if (typeof self.onedition === 'function') {\r\n                self.onedition(s);\r\n            }\r\n        }\r\n\r\n        const tagClick = function(e, s) {\r\n            if (s.onclick) {\r\n                s.onclick(e, s);\r\n            }\r\n        }\r\n        onchange((prop) => {\r\n            if (prop === 'value') {\r\n                date = toDate(self.value);\r\n                self.year = date.getFullYear();\r\n                self.month = 1 + date.getMonth();\r\n            } else if (prop === 'data' || prop === 'month' || prop === 'order') {\r\n                if (isRemote()) {\r\n                    fetchRemote();\r\n                } else {\r\n                    updateResult();\r\n                }\r\n            } else if (prop === 'result') {\r\n                updateBorders();\r\n            }\r\n        })\r\n\r\n        onload(() => {\r\n            if (self.url) {\r\n                fetchRemote();\r\n            } else {\r\n                updateResult();\r\n            }\r\n\r\n            if (typeof(self.width) !== 'undefined') {\r\n                self.el.style.width = parseInt(self.width) + 'px';\r\n            }\r\n            if (typeof(self.height) !== 'undefined') {\r\n                self.el.style.height = parseInt(self.height) + 'px';\r\n            }\r\n        });\r\n\r\n        track('data');\r\n        track('order');\r\n\r\n        return render => render`<div class=\"lm-timeline\">\r\n            <div class=\"lm-timeline-header\" data-visible=\"{{self.controls}}\" data-type=\"{{self.type}}\">\r\n                <div class=\"lm-timeline-label\">\r\n                    <div class=\"lm-timeline-month\">${self.months[self.month - 1]}</div>\r\n                    <div class=\"lm-timeline-year\">${self.year}</div>\r\n                </div>\r\n                <div class=\"lm-timeline-navigation\">\r\n                    <button type=\"button\" class=\"lm-timeline-icon lm-ripple\" onclick=\"${self.prev}\" tabindex=\"0\">expand_less</button>\r\n                    <button type=\"button\" class=\"lm-timeline-icon lm-ripple\" onclick=\"${self.next}\" tabindex=\"0\">expand_more</button>\r\n                </div>\r\n            </div>\r\n            <div :loop=\"self.result\" data-message=\"{{self.message}}\" data-mode=\"{{self.position}}\" data-align=\"{{self.align}}\" class=\"lm-timeline-data\">\r\n                <div class=\"lm-timeline-item\" data-bullet=\"{{self.day}}\">\r\n                    <div class=\"lm-timeline-edit\" :render=\"self.editable\"><button type=\"button\" class=\"lm-timeline-icon lm-ripple lm-cursor\" onclick=\"${edition}\" tabindex=\"0\">edit</button></div>\r\n                    <div class=\"lm-timeline-title\">{{self.title}}</div>\r\n                    <div class=\"lm-timeline-subtitle\">{{self.subtitle}}</div>\r\n                    <div class=\"lm-timeline-description\">{{self.description}}</div>\r\n                    <div class=\"lm-timeline-tags\" :loop=\"self.tags\">\r\n                        <span class=\"lm-timeline-tag\" onclick=\"${tagClick}\">{{self.title}}</span>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>`;\r\n    }\r\n\r\n    lemonade.setComponents({ Timeline: Timeline });\r\n\r\n    // Register the web component\r\n    lemonade.createWebComponent('timeline', Timeline);\r\n\r\n    return function (root, options) {\r\n        if (typeof (root) === 'object') {\r\n            lemonade.render(Timeline, root, options);\r\n            return options;\r\n        } else {\r\n            return Timeline.call(this, root);\r\n        }\r\n    }\r\n})));"]}