itsm-widget 1.1.2 → 1.1.3

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.
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see itsm-widget.min.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ITSMWidget=t():e.ITSMWidget=t()}(window,()=>(()=>{"use strict";var e={72:(e,t,n)=>{var r,i=function(){return void 0===r&&(r=Boolean(window&&document&&document.all&&!window.atob)),r},o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),s=[];function a(e){for(var t=-1,n=0;n<s.length;n++)if(s[n].identifier===e){t=n;break}return t}function c(e,t){for(var n={},r=[],i=0;i<e.length;i++){var o=e[i],c=t.base?o[0]+t.base:o[0],l=n[c]||0,d="".concat(c," ").concat(l);n[c]=l+1;var u=a(d),f={css:o[1],media:o[2],sourceMap:o[3]};-1!==u?(s[u].references++,s[u].updater(f)):s.push({identifier:d,updater:g(f,t),references:1}),r.push(d)}return r}function l(e){var t=document.createElement("style"),r=e.attributes||{};if(void 0===r.nonce){var i=n.nc;i&&(r.nonce=i)}if(Object.keys(r).forEach(function(e){t.setAttribute(e,r[e])}),"function"==typeof e.insert)e.insert(t);else{var s=o(e.insert||"head");if(!s)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");s.appendChild(t)}return t}var d,u=(d=[],function(e,t){return d[e]=t,d.filter(Boolean).join("\n")});function f(e,t,n,r){var i=n?"":r.media?"@media ".concat(r.media," {").concat(r.css,"}"):r.css;if(e.styleSheet)e.styleSheet.cssText=u(t,i);else{var o=document.createTextNode(i),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(o,s[t]):e.appendChild(o)}}function m(e,t,n){var r=n.css,i=n.media,o=n.sourceMap;if(i?e.setAttribute("media",i):e.removeAttribute("media"),o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}var p=null,h=0;function g(e,t){var n,r,i;if(t.singleton){var o=h++;n=p||(p=l(t)),r=f.bind(null,n,o,!1),i=f.bind(null,n,o,!0)}else n=l(t),r=m.bind(null,n,t),i=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else i()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=i());var n=c(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var r=0;r<n.length;r++){var i=a(n[r]);s[i].references--}for(var o=c(e,t),l=0;l<n.length;l++){var d=a(n[l]);0===s[d].references&&(s[d].updater(),s.splice(d,1))}n=o}}}},314:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n}).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var o=0;o<this.length;o++){var s=this[o][0];null!=s&&(i[s]=!0)}for(var a=0;a<e.length;a++){var c=[].concat(e[a]);r&&i[c[0]]||(n&&(c[2]?c[2]="".concat(n," and ").concat(c[2]):c[2]=n),t.push(c))}},t}},322:(e,t,n)=>{n.r(t),n.d(t,{default:()=>I});var r=n(72),i=n.n(r),o=n(555),s={insert:"head",singleton:!1};i()(o.A,s);o.A.locals;var a=n(890),c=["Bổ sung chương trình","Dữ liệu","Hiệu chỉnh chương trình","Nghiệp vụ","Phần mềm"],l="EVNSPC",d="A - An toàn điện",u="A1 - Phần mềm ứng dụng",f="C - The Business/Customer Service Catalog",m="Máy tính";function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}e=n.hmd(e);var h=["apiBaseUrl","apiITSMUrl"];function g(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var c=r&&r.prototype instanceof a?r:a,l=Object.create(c.prototype);return b(l,"_invoke",function(n,r,i){var o,a,c,l=0,d=i||[],u=!1,f={p:0,n:0,v:e,a:m,f:m.bind(e,4),d:function(t,n){return o=t,a=0,c=e,f.n=n,s}};function m(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],m=f.p,p=o[2];n>3?(i=p===r)&&(c=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=m&&((i=n<2&&m<o[1])?(a=0,f.v=r,f.n=o[1]):m<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,f.n=p,a=0))}if(i||n>1)return s;throw u=!0,r}return function(i,d,p){if(l>1)throw TypeError("Generator is already running");for(u&&1===d&&m(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(f.n=-1),m(a,c)):f.n=c:f.v=c);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,a<2&&(a=0)}else 1===a&&(t=o.return)&&t.call(o),a<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(u=f.n<0)?c:n.call(r,f))!==s)break}catch(t){o=e,a=1,c=t}finally{l=1}}return{value:t,done:u}}}(n,i,o),!0),l}var s={};function a(){}function c(){}function l(){}t=Object.getPrototypeOf;var d=[][r]?t(t([][r]())):(b(t={},r,function(){return this}),t),u=l.prototype=a.prototype=Object.create(d);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,b(e,i,"GeneratorFunction")),e.prototype=Object.create(u),e}return c.prototype=l,b(u,"constructor",l),b(l,"constructor",c),c.displayName="GeneratorFunction",b(l,i,"GeneratorFunction"),b(u),b(u,i,"Generator"),b(u,r,function(){return this}),b(u,"toString",function(){return"[object Generator]"}),(g=function(){return{w:o,m:f}})()}function b(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}b=function(e,t,n,r){function o(t,n){b(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},b(e,t,n,r)}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach(function(t){w(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function w(e,t,n){return(t=k(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function x(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,k(r.key),r)}}function k(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==p(t)?t:t+""}function C(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function T(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){C(o,r,i,s,a,"next",e)}function a(e){C(o,r,i,s,a,"throw",e)}s(void 0)})}}var M=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function A(){return _.apply(this,arguments)}function _(){return(_=T(g().m(function e(){var t;return g().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=M()).cache){e.n=1;break}return e.a(2,t.cache);case 1:if(null===t.loadingPromise){e.n=2;break}return e.a(2,t.loadingPromise);case 2:return t.loadingPromise=T(g().m(function e(){var n,r,i,o,s,a,c,l;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:n=[],r=0,i=["/assets/config/config.json","./assets/config/config.json","assets/config/config.json","/node_modules/itsm-widget/dist/itsm-widget-config.json","./node_modules/itsm-widget/dist/itsm-widget-config.json","node_modules/itsm-widget/dist/itsm-widget-config.json","/assets/itsm-widget-config.json","./assets/itsm-widget-config.json","/itsm-widget-config.json","./itsm-widget-config.json","assets/itsm-widget-config.json","itsm-widget-config.json"];case 1:if(!(r<i.length)){e.n=8;break}return o=i[r],n.push(o),e.p=2,e.n=3,fetch(o);case 3:if(s=e.v,!s.ok){e.n=5;break}return e.n=4,s.json();case 4:return a=e.v,t.cache=a,console.log("[ITSMWidget] ✅ Loaded config from: ".concat(o)),e.a(2,a);case 5:e.n=7;break;case 6:return e.p=6,l=e.v,e.a(3,7);case 7:r++,e.n=1;break;case 8:throw c="File itsm-widget-config.json not found. Đã thử các vị trí: ".concat(n.join(", ")),console.error("[ITSMWidget] ❌ Cannot load itsm-widget-config.json"),console.error("[ITSMWidget] Tried locations:",n),console.error("\n[ITSMWidget] 📖 Hướng dẫn khắc phục:"),console.error("1. Tạo file config tại: src/assets/config/config.json"),console.error("2. Thêm nội dung với một trong các format sau:"),console.error(' - { "url": { "apiITSMUrl": "http://your-api-url" } }'),console.error(' - { "apiITSMUrl": "http://your-api-url" }'),console.error(' - { "apiBaseUrl": "http://your-api-url" }'),console.error("3. Hoặc chỉnh sửa file: node_modules/itsm-widget/dist/itsm-widget-config.json"),console.error("4. Widget hỗ trợ cả cấu trúc lồng nhau (url.apiITSMUrl) và cấu trúc phẳng"),new Error(c);case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var q=function(){return e=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._configPromise=this._initializeConfig(t)},t=[{key:"_initializeConfig",value:(b=T(g().m(function e(t){var n,r,i,o;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,A();case 1:if(n=e.v,r=null,n.url&&(r=n.url.apiITSMUrl||n.url.apiBaseUrl),r||(r=n.apiITSMUrl||n.apiBaseUrl),r){e.n=2;break}throw new Error("File config không có apiITSMUrl hoặc apiBaseUrl. Kiểm tra config.url.apiITSMUrl hoặc config.apiITSMUrl");case 2:t.apiBaseUrl,t.apiITSMUrl,i=S(t,h),this.config=this._buildConfig(v(v({},n),{},{apiBaseUrl:r},i)),this._initWidget(),e.n=4;break;case 3:throw e.p=3,o=e.v,console.error("[ITSMWidget] ❌ Không thể load config:",o.message),new Error("Không thể load config: ".concat(o.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(e){return b.apply(this,arguments)})},{key:"_buildConfig",value:function(e){if(!e.apiBaseUrl)throw new Error("apiBaseUrl is required in itsm-widget-config.json");return v({apiBaseUrl:e.apiBaseUrl,authToken:e.authToken||e.apiToken||"",getAuthToken:e.getAuthToken||null,getRequesterName:e.getRequesterName||null,getSite:e.getSite||null,position:e.position||"bottom-right",iconText:e.iconText||"📝",iconImage:void 0!==e.iconImage?e.iconImage:"data:image/png;base64,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",iconColor:e.iconColor||"#335fb3",title:e.title||"Tạo phiếu yêu cầu ITSM",requesterName:e.requesterName||"",site:e.site||"",udf_fields:e.udf_fields||{}},e)}},{key:"_initWidget",value:function(){this.apiService=new a.A({baseUrl:this.config.apiBaseUrl,authToken:this.config.authToken}),this.isOpen=!1,this.widgetContainer=null,this.modalContainer=null,this.init()}},{key:"init",value:function(){this.createWidgetButton(),this.createModal(),this.attachEvents()}},{key:"createWidgetButton",value:function(){var e=document.createElement("div");e.id="itsm-widget-button",e.className="itsm-widget-button itsm-position-".concat(this.config.position);var t="";t=this.config.iconImage&&null!==this.config.iconImage?'<img src="'.concat(this.config.iconImage,'" alt="ITSM Widget" class="itsm-widget-icon-img" />'):this.config.iconText||"📝";var n=this.config.iconImage&&null!==this.config.iconImage?"":"background-color: ".concat(this.config.iconColor,";");e.style.borderColor=this.config.iconColor,e.innerHTML='\n <div class="itsm-widget-icon" style="'.concat(n,'">\n ').concat(t,"\n </div>\n "),document.body.appendChild(e),this.widgetContainer=e}},{key:"createModal",value:function(){var e=document.createElement("div");e.id="itsm-widget-modal",e.className="itsm-modal-overlay",e.innerHTML='\n <div class="itsm-modal-container" style="width: 50vw; max-width: 90vw;">\n <div class="itsm-modal-header">\n <span class="itsm-modal-title">'.concat(this.config.title,'</span>\n <div class="itsm-modal-header-icons">\n <button class="itsm-modal-close" aria-label="Đóng">\n <span>×</span>\n </button>\n </div>\n </div>\n <div class="itsm-modal-content">\n <form id="itsm-request-form" class="itsm-form">\n \n\n <div class="itsm-form-group">\n <label for="itsm-requester">\n Người yêu cầu <span class="itsm-required">*</span>\n </label>\n <input \n type="text" \n id="itsm-requester" \n name="requester" \n class="itsm-input" \n disabled\n placeholder=""\n value="').concat(this.config.requesterName||"",'"\n />\n </div>\n <div class="itsm-form-group">\n <label for="itsm-site">Đơn vị</label>\n <input \n type="text" \n id="itsm-site" \n name="site" \n class="itsm-input" \n disabled\n placeholder=""\n value="').concat(this.config.site||"",'"\n />\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-category">\n Danh mục dịch vụ <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-category">\n <input type="hidden" id="itsm-category" name="category" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">-- Chọn danh mục --</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm danh mục..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-subcategory">\n Dịch vụ con <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-subcategory" data-disabled="true">\n <input type="hidden" id="itsm-subcategory" name="subcategory" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm dịch vụ con..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-item">\n Chi tiết dịch vụ <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-item" data-disabled="true">\n <input type="hidden" id="itsm-item" name="item" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm chi tiết dịch vụ..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-row">\n <div class="itsm-form-group itsm-form-group-half">\n <label for="itsm-priority">\n Mức độ ưu tiên <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-priority" data-no-filter="true">\n <input type="hidden" id="itsm-priority" name="priority" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group itsm-form-group-half">\n <label for="itsm-udf-pick-305">Loại hỗ trợ</label>\n <div class="itsm-custom-select" data-select-id="itsm-udf-pick-305" data-no-filter="true">\n <input type="hidden" id="itsm-udf-pick-305" name="udf_pick_305">\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n </div>\n \n <div class="itsm-form-group">\n <label for="itsm-udf-pick-306">\n Loại thiết bị sử dụng <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-udf-pick-306" data-no-filter="true">\n <input type="hidden" id="itsm-udf-pick-306" name="udf_pick_306" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-title">\n Tiêu đề <span class="itsm-required">*</span>\n </label>\n <input \n type="text" \n id="itsm-title" \n name="title" \n class="itsm-input" \n required \n placeholder="Nhập tiêu đề phiếu yêu cầu"\n />\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-description-editor">\n Mô tả <span class="itsm-required">*</span>\n </label>\n <div class="itsm-editor-container">\n <div class="itsm-editor-toolbar">\n <button type="button" class="itsm-editor-btn" data-command="bold" title="Bold">\n <strong>B</strong>\n </button>\n <button type="button" class="itsm-editor-btn" data-command="italic" title="Italic">\n <em>I</em>\n </button>\n <button type="button" class="itsm-editor-btn" data-command="underline" title="Underline">\n <u>U</u>\n </button>\n <div class="itsm-editor-separator"></div>\n <button type="button" class="itsm-editor-btn" data-command="insertUnorderedList" title="Bullet List">• List</button>\n <button type="button" class="itsm-editor-btn" data-command="insertOrderedList" title="Numbered List">1. List</button>\n <div class="itsm-editor-separator"></div>\n <label class="itsm-editor-file-btn">\n 📎 Đính kèm file\n <input \n type="file" \n id="itsm-attachment" \n name="attachment" \n multiple\n style="display: none;"\n />\n </label>\n </div>\n <div \n id="itsm-description-editor" \n class="itsm-editor-content"\n contenteditable="true"\n data-placeholder="Nhập mô tả chi tiết yêu cầu..."\n ></div>\n <textarea \n id="itsm-description" \n name="description" \n style="display: none;"\n required\n ></textarea>\n <div id="itsm-file-list" class="itsm-file-list"></div>\n </div>\n </div>\n\n <div class="itsm-modal-footer">\n <button type="button" class="itsm-btn itsm-btn-secondary" id="itsm-cancel-btn">\n Hủy\n </button>\n <button type="submit" class="itsm-btn itsm-btn-primary" id="itsm-submit-btn">\n <span class="itsm-btn-text">Gửi Yêu Cầu</span>\n <span class="itsm-btn-loading" style="display: none;">Đang gửi...</span>\n </button>\n </div>\n </form>\n </div>\n </div>\n '),document.body.appendChild(e),this.modalContainer=e}},{key:"attachEvents",value:function(){var e=this;this.widgetContainer.addEventListener("click",function(){e.toggleModal()});var t=this.modalContainer.querySelector(".itsm-modal-close"),n=this.modalContainer.querySelector("#itsm-cancel-btn"),r=this.modalContainer;t&&t.addEventListener("click",function(){return e.closeModal()}),n&&n.addEventListener("click",function(){return e.closeModal()}),r.addEventListener("click",function(t){t.target===r&&e.closeModal()}),this.modalContainer.querySelector("#itsm-request-form").addEventListener("submit",function(t){return e.handleSubmit(t)}),this.modalContainer.querySelector("#itsm-attachment").addEventListener("change",function(t){return e.handleFileSelect(t)}),this.initEditor(),this.initCategoryDropdowns()}},{key:"initEditor",value:function(){var e=this.modalContainer.querySelector("#itsm-description-editor"),t=this.modalContainer.querySelector("#itsm-description"),n=this.modalContainer.querySelector(".itsm-editor-toolbar");e.addEventListener("input",function(){t.value=e.innerHTML,e.textContent.trim()?t.setCustomValidity(""):t.setCustomValidity("Mô tả là bắt buộc")}),e.addEventListener("focus",function(){""===e.textContent.trim()&&(e.innerHTML="")}),e.addEventListener("blur",function(){""===e.textContent.trim()&&(e.innerHTML="")}),n.querySelectorAll(".itsm-editor-btn[data-command]").forEach(function(n){n.addEventListener("click",function(r){r.preventDefault();var i=n.getAttribute("data-command");e.focus(),document.execCommand(i,!1,null),t.value=e.innerHTML})})}},{key:"initCategoryDropdowns",value:function(){var e=this,t=this.modalContainer.querySelector('[data-select-id="itsm-category"]'),n=this.modalContainer.querySelector('[data-select-id="itsm-subcategory"]'),r=this.modalContainer.querySelector('[data-select-id="itsm-item"]'),i=this.modalContainer.querySelector('[data-select-id="itsm-priority"]'),o=this.modalContainer.querySelector('[data-select-id="itsm-udf-pick-305"]'),s=this.modalContainer.querySelector('[data-select-id="itsm-udf-pick-306"]');this.categoryMap=new Map,this.subcategoryMap=new Map,this.allCategories=[],this.allSubcategories=[],this.allItems=[],this._initCustomSelect(t,"category"),this._initCustomSelect(n,"subcategory"),this._initCustomSelect(r,"item"),this._initCustomSelect(i,"priority"),this._initCustomSelect(o,"udf_pick_305"),this._initCustomSelect(s,"udf_pick_306"),this._populateCustomSelect(i,[{value:"low",text:"Thấp"},{value:"medium",text:"Trung bình"},{value:"high",text:"Cao"}],"Chưa lựa chọn");var a=c.map(function(e){return{value:e,text:e}});this._populateCustomSelect(o,a,"Chưa lựa chọn"),this._populateCustomSelect(s,[{value:"Máy tính",text:"Máy tính"},{value:"Máy tính bảng",text:"Máy tính bảng"},{value:"Điện thoại",text:"Điện thoại"},{value:"Laptop",text:"Laptop"}],"Chưa lựa chọn"),this._loadCategories(t,n,r),t&&t.querySelector('input[type="hidden"]').addEventListener("change",function(){var t=T(g().m(function t(i){var o,s;return g().w(function(t){for(;;)switch(t.n){case 0:if(o=i.target.value,e._resetCustomSelect(n,"Chưa lựa chọn",!0),e._resetCustomSelect(r,"Chưa lựa chọn",!0),!o){t.n=1;break}if(!(s=e.categoryMap.get(o))||!s.id){t.n=1;break}return t.n=1,e._loadSubcategories(s.id,n,r);case 1:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}()),n&&n.querySelector('input[type="hidden"]').addEventListener("change",function(){var t=T(g().m(function t(n){var i,o;return g().w(function(t){for(;;)switch(t.n){case 0:if(i=n.target.value,e._resetCustomSelect(r,"Chưa lựa chọn",!i),!i){t.n=1;break}if(!(o=e.subcategoryMap.get(i))||!o.id){t.n=1;break}return t.n=1,e._loadItems(o.id,r);case 1:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}},{key:"_initCustomSelect",value:function(e,t){var n=this;if(e){var r=e.querySelector(".itsm-select-display"),i=(e.querySelector(".itsm-select-dropdown"),e.querySelector(".itsm-select-filter")),o=e.querySelector(".itsm-select-options"),s=(e.querySelector('input[type="hidden"]'),"true"===e.getAttribute("data-disabled"));s&&(r.classList.add("disabled"),r.setAttribute("tabindex","-1")),r.addEventListener("click",function(t){"true"===e.getAttribute("data-disabled")||(t.stopPropagation(),n._toggleDropdown(e))}),document.addEventListener("click",function(t){e.contains(t.target)||n._closeDropdown(e)}),i&&(i.addEventListener("input",function(e){var t=e.target.value.toLowerCase().trim();n._filterCustomOptions(o,t)}),i.addEventListener("click",function(e){e.stopPropagation()})),r.addEventListener("keydown",function(t){"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),s||n._toggleDropdown(e))})}}},{key:"_toggleDropdown",value:function(e){var t=e.querySelector(".itsm-select-dropdown"),n=t.classList.contains("open");if(this.modalContainer.querySelectorAll(".itsm-select-dropdown.open").forEach(function(e){e!==t&&e.classList.remove("open")}),n)t.classList.remove("open");else{t.classList.add("open");var r=e.querySelector(".itsm-select-filter");r&&setTimeout(function(){return r.focus()},10)}}},{key:"_closeDropdown",value:function(e){e.querySelector(".itsm-select-dropdown").classList.remove("open");var t=e.querySelector(".itsm-select-filter");t&&(t.value="")}},{key:"_resetCustomSelect",value:function(e,t,n){if(e){var r=e.querySelector(".itsm-select-display"),i=r.querySelector(".itsm-select-text"),o=e.querySelector('input[type="hidden"]'),s=e.querySelector(".itsm-select-options"),a=e.querySelector(".itsm-select-filter");i.textContent=t,o.value="",n?(r.classList.add("disabled"),r.setAttribute("tabindex","-1"),e.setAttribute("data-disabled","true")):(r.classList.remove("disabled"),r.setAttribute("tabindex","0"),e.setAttribute("data-disabled","false")),a&&(a.value="",a.disabled=n),s.innerHTML="",this._closeDropdown(e)}}},{key:"_filterCustomOptions",value:function(e,t){Array.from(e.querySelectorAll(".itsm-select-option")).forEach(function(e){var n=e.textContent.toLowerCase();!t||n.includes(t)?e.style.display="":e.style.display="none"})}},{key:"_populateCustomSelect",value:function(e,t,n){var r=this;if(e){var i=e.querySelector(".itsm-select-options"),o=e.querySelector('input[type="hidden"]');if(i){console.log("[ITSMWidget] _populateCustomSelect: populating",t.length,"options"),i.innerHTML="",t.forEach(function(t,n){var s=document.createElement("div");s.className="itsm-select-option",s.textContent=t.text,s.dataset.value=t.value,t.dataset&&Object.keys(t.dataset).forEach(function(e){s.dataset[e]=t.dataset[e]}),s.addEventListener("click",function(t){t.stopPropagation();var n=s.dataset.value,i=s.textContent;o.value=n,e.querySelector(".itsm-select-text").textContent=i,o.dispatchEvent(new Event("change",{bubbles:!0})),r._closeDropdown(e)}),i.appendChild(s)});var s=i.querySelectorAll(".itsm-select-option").length;console.log("[ITSMWidget] _populateCustomSelect: added",s,"options to DOM")}else console.error("[ITSMWidget] _populateCustomSelect: optionsContainer not found")}else console.warn("[ITSMWidget] _populateCustomSelect: customSelectElement is null")}},{key:"_loadCategories",value:(p=T(g().m(function e(t,n,r){var i,o,s,a,c,l=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return e.a(2);case 1:return e.p=1,i=t.querySelector(".itsm-select-display"),(o=i.querySelector(".itsm-select-text")).textContent="Đang tải...",i.classList.add("disabled"),e.n=2,this.apiService.getAllCategories();case 2:(s=e.v)&&s.categories&&Array.isArray(s.categories)?(this.allCategories=[],s.categories.forEach(function(e){e&&e.name&&e.id&&(l.categoryMap.set(e.name,{id:e.id,name:e.name}),l.allCategories.push({value:e.name,text:e.name,dataset:{categoryId:e.id}}))}),this._populateCustomSelect(t,this.allCategories,"-- Chọn danh mục --"),o.textContent="-- Chọn danh mục --"):(o.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid categories response:",s)),e.n=4;break;case 3:e.p=3,c=e.v,console.error("[ITSMWidget] Error loading categories:",c),t.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(a=t.querySelector(".itsm-select-display")).classList.remove("disabled"),a.setAttribute("tabindex","0"),t.setAttribute("data-disabled","false"),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t,n){return p.apply(this,arguments)})},{key:"_loadSubcategories",value:(s=T(g().m(function e(t,n,r){var i,o,s,a,c,l,d,u,f,m,p=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2);case 1:return e.p=1,i=n.querySelector(".itsm-select-display"),(o=i.querySelector(".itsm-select-text")).textContent="Đang tải...",i.classList.add("disabled"),this._resetCustomSelect(r,"Chưa lựa chọn",!0),this.subcategoryMap.clear(),e.n=2,this.apiService.getSubcategoriesByCategoryId(t);case 2:s=e.v,console.log("[ITSMWidget] Subcategories response:",s),s&&s.subcategories&&Array.isArray(s.subcategories)?(this.allSubcategories=[],s.subcategories.forEach(function(e){e&&e.name&&e.id&&(p.subcategoryMap.set(e.name,{id:e.id,name:e.name}),p.allSubcategories.push({value:e.name,text:e.name,dataset:{subcategoryId:e.id}}))}),console.log("[ITSMWidget] Processed subcategories:",this.allSubcategories.length,this.allSubcategories),this.allSubcategories.length>0?(this._populateCustomSelect(n,this.allSubcategories,"Chưa lựa chọn"),(a=n.querySelector(".itsm-select-display")).classList.remove("disabled"),a.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(c=n.querySelector(".itsm-select-filter"))&&(c.disabled=!1),l=n.querySelector(".itsm-select-options"),d=l.querySelectorAll(".itsm-select-option").length,console.log("[ITSMWidget] Options populated:",d,"options in dropdown"),o.textContent="Chưa lựa chọn"):(o.textContent="Không có dữ liệu",console.warn("[ITSMWidget] No subcategories found for category:",t))):(o.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid subcategories response:",s)),e.n=4;break;case 3:e.p=3,m=e.v,console.error("[ITSMWidget] Error loading subcategories:",m),n.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(u=n.querySelector(".itsm-select-display")).classList.contains("disabled")||(u.classList.remove("disabled"),u.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(f=n.querySelector(".itsm-select-filter"))&&(f.disabled=!1)),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t,n){return s.apply(this,arguments)})},{key:"_loadItems",value:(o=T(g().m(function e(t,n){var r,i,o,s,a,c,l,d,u=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2);case 1:return e.p=1,r=n.querySelector(".itsm-select-display"),(i=r.querySelector(".itsm-select-text")).textContent="Đang tải...",r.classList.add("disabled"),e.n=2,this.apiService.getItemsBySubcategoryId(t);case 2:(o=e.v)&&o.items&&Array.isArray(o.items)?(this.allItems=[],o.items.forEach(function(e){if(e&&e.name){var t={};e.id&&(t.itemId=e.id),u.allItems.push({value:e.name,text:e.name,dataset:t})}}),this.allItems.length>0?(this._populateCustomSelect(n,this.allItems,"Chưa lựa chọn"),(s=n.querySelector(".itsm-select-display")).classList.remove("disabled"),s.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(a=n.querySelector(".itsm-select-filter"))&&(a.disabled=!1),i.textContent="Chưa lựa chọn"):(i.textContent="Không có dữ liệu",console.warn("[ITSMWidget] No items found for subcategory:",t))):(i.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid items response:",o)),e.n=4;break;case 3:e.p=3,d=e.v,console.error("[ITSMWidget] Error loading items:",d),n.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(c=n.querySelector(".itsm-select-display")).classList.contains("disabled")||(c.classList.remove("disabled"),c.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(l=n.querySelector(".itsm-select-filter"))&&(l.disabled=!1)),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t){return o.apply(this,arguments)})},{key:"toggleModal",value:function(){this.isOpen?this.closeModal():this.openModal()}},{key:"openModal",value:function(){if(this.config.getAuthToken&&"function"==typeof this.config.getAuthToken){var e=this.config.getAuthToken();e&&this.apiService&&(this.apiService.authToken=e,this.config.authToken=e)}if(this.config.getRequesterName&&"function"==typeof this.config.getRequesterName){var t=this.config.getRequesterName();if(t){this.config.requesterName=t;var n=this.modalContainer.querySelector("#itsm-requester");n&&(n.value=t)}}if(this.config.getSite&&"function"==typeof this.config.getSite){var r=this.config.getSite();if(r){this.config.site=r;var i=this.modalContainer.querySelector("#itsm-site");i&&(i.value=r)}}this.modalContainer.classList.add("itsm-modal-active"),this.modalContainer.style.display="flex",this.isOpen=!0,document.body.style.overflow="hidden"}},{key:"closeModal",value:function(){this.modalContainer.classList.remove("itsm-modal-active"),this.modalContainer.style.display="none",this.isOpen=!1,document.body.style.overflow=""}},{key:"handleFileSelect",value:function(e){var t=this,n=Array.from(e.target.files),r=this.modalContainer.querySelector("#itsm-file-list");0!==n.length?r.innerHTML=n.map(function(e){return'\n <div class="itsm-file-item">\n <span class="itsm-file-name">'.concat(e.name,'</span>\n <span class="itsm-file-size">').concat(t.formatFileSize(e.size),"</span>\n </div>\n ")}).join(""):r.innerHTML=""}},{key:"formatFileSize",value:function(e){if(0===e)return"0 Bytes";var t=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,t)*100)/100+" "+["Bytes","KB","MB","GB"][t]}},{key:"handleSubmit",value:(i=T(g().m(function e(t){var n,r,i,o,s,a,c,l,d,u,f,m,p,h,b,y,v,w,S=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),n=t.target,r=new FormData(n),this.config.getAuthToken&&"function"==typeof this.config.getAuthToken&&(i=this.config.getAuthToken())&&this.apiService&&(this.apiService.authToken=i,this.config.authToken=i),o="",o=this.config.getRequesterName&&"function"==typeof this.config.getRequesterName?this.config.getRequesterName()||"":this.config.requesterName||r.get("requester")||"",s="",s=this.config.getSite&&"function"==typeof this.config.getSite?this.config.getSite()||"":this.config.site||r.get("site")||"",a={title:r.get("title"),description:r.get("description"),requester:o,category:r.get("category"),subcategory:r.get("subcategory"),item:r.get("item"),priority:r.get("priority"),site:s,udf_pick_305:r.get("udf_pick_305"),udf_pick_306:r.get("udf_pick_306"),contact:r.get("contact"),attachments:[]},c=this.modalContainer.querySelector("#itsm-description-editor"),a.description=c?c.innerHTML.trim():a.description,a.title&&a.description&&a.category&&a.subcategory&&a.item&&a.priority&&a.udf_pick_306&&a.requester){e.n=1;break}return this.showMessage("Vui lòng điền đầy đủ thông tin bắt buộc!","error"),e.a(2);case 1:if(c&&c.textContent.trim()){e.n=2;break}return this.showMessage("Mô tả không được để trống!","error"),null==c||c.focus(),e.a(2);case 2:return l=n.querySelector("#itsm-attachment"),d=Array.from(l.files),u=n.querySelector("#itsm-submit-btn"),f=u.querySelector(".itsm-btn-text"),m=u.querySelector(".itsm-btn-loading"),f.style.display="none",m.style.display="inline",u.disabled=!0,e.p=3,e.n=4,this.submitRequest(a,d);case 4:p=e.v,this.showMessage("Phiếu yêu cầu đã được gửi thành công!","success"),n.reset(),(h=this.modalContainer.querySelector("#itsm-description-editor"))&&(h.innerHTML=""),this.modalContainer.querySelector("#itsm-file-list").innerHTML="",b=this.modalContainer.querySelector('[data-select-id="itsm-category"]'),y=this.modalContainer.querySelector('[data-select-id="itsm-subcategory"]'),v=this.modalContainer.querySelector('[data-select-id="itsm-item"]'),b&&this._resetCustomSelect(b,"-- Chọn danh mục --",!1),this._resetCustomSelect(y,"Chưa lựa chọn",!0),this._resetCustomSelect(v,"Chưa lựa chọn",!0),setTimeout(function(){S.closeModal()},1500),this.config.onSuccess&&this.config.onSuccess(p),e.n=6;break;case 5:e.p=5,w=e.v,console.error("Error submitting ITSM request:",w),this.showMessage(w.message||"Có lỗi xảy ra khi gửi yêu cầu. Vui lòng thử lại!","error");case 6:return e.p=6,f.style.display="inline",m.style.display="none",u.disabled=!1,e.f(6);case 7:return e.a(2)}},e,this,[[3,5,6,7]])})),function(e){return i.apply(this,arguments)})},{key:"submitRequest",value:(r=T(g().m(function e(t,n){var r,i,o;return g().w(function(e){for(;;)switch(e.n){case 0:if(r={udf_pick_301:l||"EVNSPC",udf_pick_302:d||"A - An toàn điện",udf_pick_303:u||"A1 - Phần mềm ứng dụng",udf_pick_304:f||"C - The Business/Customer Service Catalog",udf_pick_305:t.udf_pick_305||null,udf_pick_306:t.udf_pick_306||m||null,udf_pick_602:null,udf_mline_603:""},Object.assign(r,this.config.udf_fields||{}),i=this.apiService.buildRequestData(t,{requesterName:this.config.requesterName||t.requester||t.contact||"",site:this.config.site||t.site||null,category:t.category,subcategory:t.subcategory,item:t.item,template:t.category,udf_fields:r,zia_properties:this.config.zia_properties||{}}),!((o=n&&n.length>0?Array.from(n):[]).length>0)){e.n=2;break}return e.n=1,this.apiService.createRequestWithAttachments(i,o);case 1:case 3:return e.a(2,e.v);case 2:return e.n=3,this.apiService.createRequest(i);case 4:return e.a(2)}},e,this)})),function(e,t){return r.apply(this,arguments)})},{key:"showMessage",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info",n=document.querySelector(".itsm-message");n&&n.remove();var r=document.createElement("div");r.className="itsm-message itsm-message-".concat(t),r.textContent=e,document.body.appendChild(r),setTimeout(function(){r.classList.add("itsm-message-show")},10),setTimeout(function(){r.classList.remove("itsm-message-show"),setTimeout(function(){return r.remove()},300)},3e3)}},{key:"destroy",value:function(){this.widgetContainer&&this.widgetContainer.remove(),this.modalContainer&&this.modalContainer.remove(),document.body.style.overflow=""}}],t&&x(e.prototype,t),n&&x(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,i,o,s,p,b}();e.exports&&(e.exports=q,e.exports.default=q);const I=q;"undefined"!=typeof window&&(window.ITSMWidget=q,window.ITSMWidget.default||(window.ITSMWidget.default=q),document.addEventListener("DOMContentLoaded",function(){var e=document.querySelector("script[data-itsm-config]");if(e)try{var t=JSON.parse(e.getAttribute("data-itsm-config"));window.itsmWidgetInstance=new q(t)}catch(e){console.error("Error parsing ITSM widget config:",e)}}))},555:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(314),i=n.n(r)()(function(e){return e[1]});i.push([e.id,'/**\r\n * ITSM Widget Styles\r\n * Native HTML/CSS - No external libraries required\r\n */\r\n\r\n/* Floating Button */\r\n.itsm-widget-button {\r\n position: fixed;\r\n z-index: 9998;\r\n cursor: pointer;\r\n transition: transform 0.3s ease, box-shadow 0.3s ease;\r\n border-radius: 50%;\r\n overflow: visible;\r\n padding: 4px;\r\n border: 3px solid transparent;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #ffffff;\r\n}\r\n\r\n.itsm-widget-button:hover {\r\n transform: scale(1.1);\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n}\r\n\r\n.itsm-position-bottom-right {\r\n bottom: 24px;\r\n right: 24px;\r\n}\r\n\r\n.itsm-position-bottom-left {\r\n bottom: 24px;\r\n left: 24px;\r\n}\r\n\r\n.itsm-widget-icon {\r\n width: 48px;\r\n height: 48px;\r\n padding: 8px;\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: white;\r\n font-size: 18px;\r\n font-weight: bold;\r\n /* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); */\r\n user-select: none;\r\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;\r\n overflow: hidden;\r\n background-color: #ffffff;\r\n}\r\n\r\n.itsm-widget-icon-img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: contain;\r\n filter: brightness(0) saturate(100%) invert(27%) sepia(78%) saturate(1250%) hue-rotate(197deg) brightness(96%) contrast(95%);\r\n /* border-radius: 50%; */\r\n}\r\n\r\n/* Modal Overlay */\r\n.itsm-modal-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n z-index: 9999;\r\n display: none;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n transition: opacity 0.3s ease;\r\n padding: 16px;\r\n}\r\n\r\n.itsm-modal-overlay.itsm-modal-active {\r\n display: flex;\r\n opacity: 1;\r\n}\r\n\r\n/* Modal Container */\r\n.itsm-modal-container {\r\n background: #ffffff;\r\n border-radius: 6px;\r\n box-shadow: 0 11px 15px -7px rgba(0, 0, 0, 0.2), 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12);\r\n width: 100%;\r\n max-width: 50vw;\r\n max-height: 90vh;\r\n display: flex;\r\n flex-direction: column;\r\n transform: scale(0.9);\r\n transition: transform 0.3s ease;\r\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;\r\n}\r\n\r\n.itsm-modal-overlay.itsm-modal-active .itsm-modal-container {\r\n transform: scale(1);\r\n}\r\n\r\n/* Modal Header */\r\n.itsm-modal-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 1.5rem;\r\n border-bottom: 1px solid #e9ecef;\r\n background-color: #ffffff;\r\n border-radius: 6px 6px 0 0;\r\n flex-shrink: 0;\r\n}\r\n\r\n.itsm-modal-title {\r\n margin: 0;\r\n font-size: 1.5rem;\r\n font-weight: 600;\r\n color: #212529;\r\n flex: 1;\r\n}\r\n\r\n.itsm-modal-header-icons {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n}\r\n\r\n.itsm-modal-close {\r\n background: transparent;\r\n border: none;\r\n color: #6c757d;\r\n cursor: pointer;\r\n padding: 0.5rem;\r\n width: 2rem;\r\n height: 2rem;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 50%;\r\n transition: background-color 0.2s ease, color 0.2s ease;\r\n font-size: 1.5rem;\r\n line-height: 1;\r\n}\r\n\r\n.itsm-modal-close:hover {\r\n background-color: #e9ecef;\r\n color: #212529;\r\n}\r\n\r\n.itsm-modal-close span {\r\n font-size: 1.5rem;\r\n line-height: 1;\r\n}\r\n\r\n/* Modal Content */\r\n.itsm-modal-content {\r\n padding: 1.5rem;\r\n overflow-y: auto;\r\n flex: 1;\r\n}\r\n\r\n/* Modal Footer */\r\n.itsm-modal-footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 0.5rem;\r\n padding: 1rem 1.5rem;\r\n border-top: 1px solid #e9ecef;\r\n background-color: #ffffff;\r\n border-radius: 0 0 6px 6px;\r\n flex-shrink: 0;\r\n}\r\n\r\n/* Form Styles */\r\n.itsm-form {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1rem;\r\n}\r\n\r\n.itsm-form-row {\r\n display: flex;\r\n gap: 1rem;\r\n}\r\n\r\n.itsm-form-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.5rem;\r\n}\r\n\r\n.itsm-form-group-half {\r\n flex: 1;\r\n}\r\n\r\n/* Label */\r\n.itsm-form-group label {\r\n font-weight: 500;\r\n color: #495057;\r\n font-size: 0.875rem;\r\n display: block;\r\n margin-bottom: 0.25rem;\r\n}\r\n\r\n.itsm-required {\r\n color: #dc3545;\r\n margin-left: 2px;\r\n}\r\n\r\n/* Input */\r\n.itsm-input {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n}\r\n\r\n.itsm-input:hover {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-input:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-input:disabled {\r\n background-color: #e9ecef;\r\n opacity: 1;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* Textarea */\r\n.itsm-textarea {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n resize: vertical;\r\n min-height: 100px;\r\n}\r\n\r\n.itsm-textarea:hover {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-textarea:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-textarea:disabled {\r\n background-color: #e9ecef;\r\n opacity: 1;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* Rich Text Editor */\r\n.itsm-editor-container {\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n background-color: #ffffff;\r\n transition: border-color 0.2s, box-shadow 0.2s;\r\n}\r\n\r\n.itsm-editor-container:focus-within {\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-editor-toolbar {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n padding: 0.5rem;\r\n border-bottom: 1px solid #e9ecef;\r\n background-color: #f8f9fa;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.itsm-editor-btn {\r\n padding: 0.25rem 0.5rem;\r\n font-size: 0.875rem;\r\n border: 1px solid #ced4da;\r\n border-radius: 3px;\r\n background-color: #ffffff;\r\n color: #495057;\r\n cursor: pointer;\r\n transition: background-color 0.2s, border-color 0.2s;\r\n font-family: inherit;\r\n min-width: 2rem;\r\n height: 2rem;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.itsm-editor-btn:hover {\r\n background-color: #e9ecef;\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-editor-btn:active {\r\n background-color: #dee2e6;\r\n}\r\n\r\n.itsm-editor-separator {\r\n width: 1px;\r\n height: 1.5rem;\r\n background-color: #ced4da;\r\n margin: 0 0.25rem;\r\n}\r\n\r\n.itsm-editor-file-btn {\r\n padding: 0.25rem 0.5rem;\r\n font-size: 0.875rem;\r\n border: 1px solid #ced4da;\r\n border-radius: 3px;\r\n background-color: #ffffff;\r\n color: #495057;\r\n cursor: pointer;\r\n transition: background-color 0.2s, border-color 0.2s;\r\n font-family: inherit;\r\n margin-left: auto;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.itsm-editor-file-btn:hover {\r\n background-color: #e9ecef;\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-editor-content {\r\n min-height: 150px;\r\n max-height: 400px;\r\n overflow-y: auto;\r\n padding: 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n font-family: inherit;\r\n outline: none;\r\n}\r\n\r\n.itsm-editor-content:empty:before {\r\n content: attr(data-placeholder);\r\n color: #6c757d;\r\n pointer-events: none;\r\n}\r\n\r\n.itsm-editor-content:focus:empty:before {\r\n content: \'\';\r\n}\r\n\r\n.itsm-editor-content img {\r\n max-width: 100%;\r\n height: auto;\r\n margin: 0.5rem 0;\r\n}\r\n\r\n.itsm-editor-content ul,\r\n.itsm-editor-content ol {\r\n margin: 0.5rem 0;\r\n padding-left: 1.5rem;\r\n}\r\n\r\n.itsm-editor-content p {\r\n margin: 0.5rem 0;\r\n}\r\n\r\n.itsm-editor-content p:first-child {\r\n margin-top: 0;\r\n}\r\n\r\n.itsm-editor-content p:last-child {\r\n margin-bottom: 0;\r\n}\r\n\r\n/* Filter Input */\r\n.itsm-filter-input {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 0.875rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px 4px 0 0;\r\n border-bottom: none;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n margin-bottom: 0;\r\n}\r\n\r\n.itsm-filter-input:hover {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-filter-input:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n border-bottom-color: #ced4da;\r\n}\r\n\r\n.itsm-filter-input:disabled {\r\n background-color: #e9ecef;\r\n opacity: 1;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* Select */\r\n.itsm-select {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n}\r\n\r\n/* Select with filter input above */\r\n.itsm-form-group:has(.itsm-filter-input) .itsm-select {\r\n border-radius: 0 0 4px 4px;\r\n border-top: none;\r\n}\r\n\r\n.itsm-select:hover {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-select:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-select:disabled {\r\n background-color: #e9ecef;\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* Custom Select Dropdown */\r\n.itsm-custom-select {\r\n position: relative;\r\n width: 100%;\r\n}\r\n\r\n.itsm-select-display {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n user-select: none;\r\n}\r\n\r\n.itsm-select-display:hover:not(.disabled) {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-select-display:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-select-display.disabled {\r\n background-color: #e9ecef;\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n}\r\n\r\n.itsm-select-text {\r\n flex: 1;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.itsm-select-arrow {\r\n margin-left: 0.5rem;\r\n font-size: 0.75rem;\r\n color: #6c757d;\r\n transition: transform 0.2s;\r\n}\r\n\r\n.itsm-custom-select[data-disabled="true"] .itsm-select-arrow {\r\n opacity: 0.5;\r\n}\r\n\r\n.itsm-select-dropdown {\r\n position: absolute;\r\n top: 100%;\r\n left: 0;\r\n right: 0;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n z-index: 1000;\r\n display: none;\r\n margin-top: 0.25rem;\r\n max-height: 300px;\r\n overflow: hidden;\r\n flex-direction: column;\r\n}\r\n\r\n.itsm-select-dropdown.open {\r\n display: flex;\r\n}\r\n\r\n.itsm-select-filter {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 0.875rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: none;\r\n border-bottom: 1px solid #e9ecef;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n outline: none;\r\n}\r\n\r\n.itsm-select-filter:focus {\r\n border-bottom-color: #007bff;\r\n}\r\n\r\n.itsm-select-filter:disabled {\r\n background-color: #f8f9fa;\r\n cursor: not-allowed;\r\n}\r\n\r\n.itsm-select-options {\r\n max-height: 250px;\r\n overflow-y: auto;\r\n padding: 0.25rem 0;\r\n}\r\n\r\n.itsm-select-option {\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n cursor: pointer;\r\n transition: background-color 0.15s;\r\n user-select: none;\r\n}\r\n\r\n.itsm-select-option:hover {\r\n background-color: #f8f9fa;\r\n}\r\n\r\n.itsm-select-option:active {\r\n background-color: #e9ecef;\r\n}\r\n\r\n.itsm-select-option[style*="display: none"] {\r\n display: none !important;\r\n}\r\n\r\n/* Button */\r\n.itsm-btn {\r\n padding: 0.5rem 1rem;\r\n font-size: 1rem;\r\n font-weight: 400;\r\n line-height: 1.5;\r\n border-radius: 4px;\r\n border: 1px solid transparent;\r\n cursor: pointer;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n user-select: none;\r\n font-family: inherit;\r\n position: relative;\r\n overflow: hidden;\r\n}\r\n\r\n.itsm-btn:disabled {\r\n opacity: 0.6;\r\n cursor: default;\r\n}\r\n\r\n.itsm-btn-text {\r\n line-height: inherit;\r\n}\r\n\r\n/* Primary Button */\r\n.itsm-btn-primary {\r\n color: #ffffff;\r\n background-color: #007bff;\r\n border-color: #007bff;\r\n}\r\n\r\n.itsm-btn-primary:hover:not(:disabled) {\r\n background-color: #0056b3;\r\n border-color: #0056b3;\r\n}\r\n\r\n.itsm-btn-primary:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\r\n}\r\n\r\n.itsm-btn-primary:active:not(:disabled) {\r\n background-color: #004085;\r\n border-color: #004085;\r\n}\r\n\r\n/* Secondary Button */\r\n.itsm-btn-secondary {\r\n color: #ffffff;\r\n background-color: #6c757d;\r\n border-color: #6c757d;\r\n}\r\n\r\n.itsm-btn-secondary:hover:not(:disabled) {\r\n background-color: #5a6268;\r\n border-color: #545b62;\r\n}\r\n\r\n.itsm-btn-secondary:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\r\n}\r\n\r\n.itsm-btn-secondary:active:not(:disabled) {\r\n background-color: #545b62;\r\n border-color: #4e555b;\r\n}\r\n\r\n/* File Input */\r\n.itsm-file-list {\r\n margin-top: 0.5rem;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.5rem;\r\n}\r\n\r\n.itsm-file-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 0.5rem;\r\n background-color: #f8f9fa;\r\n border-radius: 4px;\r\n font-size: 0.875rem;\r\n}\r\n\r\n.itsm-file-name {\r\n color: #495057;\r\n flex: 1;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.itsm-file-size {\r\n color: #6c757d;\r\n margin-left: 0.5rem;\r\n}\r\n\r\n/* Message/Toast Styles */\r\n.itsm-message {\r\n position: fixed;\r\n top: 20px;\r\n right: 20px;\r\n z-index: 10000;\r\n padding: 1rem 1.5rem;\r\n border-radius: 4px;\r\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n min-width: 300px;\r\n max-width: 500px;\r\n transform: translateX(400px);\r\n transition: transform 0.3s ease;\r\n font-family: inherit;\r\n font-size: 0.875rem;\r\n}\r\n\r\n.itsm-message.itsm-message-show {\r\n transform: translateX(0);\r\n}\r\n\r\n.itsm-message-success {\r\n background-color: #d4edda;\r\n color: #155724;\r\n border: 1px solid #c3e6cb;\r\n}\r\n\r\n.itsm-message-error {\r\n background-color: #f8d7da;\r\n color: #721c24;\r\n border: 1px solid #f5c6cb;\r\n}\r\n\r\n.itsm-message-info {\r\n background-color: #d1ecf1;\r\n color: #0c5460;\r\n border: 1px solid #bee5eb;\r\n}\r\n\r\n/* Responsive */\r\n@media (max-width: 768px) {\r\n .itsm-modal-container {\r\n max-width: 95%;\r\n max-height: 95vh;\r\n }\r\n\r\n .itsm-form-row {\r\n flex-direction: column;\r\n }\r\n\r\n .itsm-form-group-half {\r\n flex: none;\r\n }\r\n\r\n .itsm-modal-header,\r\n .itsm-modal-content,\r\n .itsm-modal-footer {\r\n padding: 1rem;\r\n }\r\n}',""]);const o=i},890:(e,t,n)=>{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function i(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach(function(t){c(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function c(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var c=r&&r.prototype instanceof a?r:a,l=Object.create(c.prototype);return d(l,"_invoke",function(n,r,i){var o,a,c,l=0,d=i||[],u=!1,f={p:0,n:0,v:e,a:m,f:m.bind(e,4),d:function(t,n){return o=t,a=0,c=e,f.n=n,s}};function m(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],m=f.p,p=o[2];n>3?(i=p===r)&&(c=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=m&&((i=n<2&&m<o[1])?(a=0,f.v=r,f.n=o[1]):m<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,f.n=p,a=0))}if(i||n>1)return s;throw u=!0,r}return function(i,d,p){if(l>1)throw TypeError("Generator is already running");for(u&&1===d&&m(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(f.n=-1),m(a,c)):f.n=c:f.v=c);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,a<2&&(a=0)}else 1===a&&(t=o.return)&&t.call(o),a<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(u=f.n<0)?c:n.call(r,f))!==s)break}catch(t){o=e,a=1,c=t}finally{l=1}}return{value:t,done:u}}}(n,i,o),!0),l}var s={};function a(){}function c(){}function u(){}t=Object.getPrototypeOf;var f=[][r]?t(t([][r]())):(d(t={},r,function(){return this}),t),m=u.prototype=a.prototype=Object.create(f);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,d(e,i,"GeneratorFunction")),e.prototype=Object.create(m),e}return c.prototype=u,d(m,"constructor",u),d(u,"constructor",c),c.displayName="GeneratorFunction",d(u,i,"GeneratorFunction"),d(m),d(m,i,"Generator"),d(m,r,function(){return this}),d(m,"toString",function(){return"[object Generator]"}),(l=function(){return{w:o,m:p}})()}function d(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}d=function(e,t,n,r){function o(t,n){d(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},d(e,t,n,r)}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,f(r.key),r)}}function f(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=r(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==r(t)?t:t+""}function m(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function p(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){m(o,r,i,s,a,"next",e)}function a(e){m(o,r,i,s,a,"throw",e)}s(void 0)})}}n.d(t,{A:()=>v}),e=n.hmd(e);var h=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function g(){return b.apply(this,arguments)}function b(){return(b=p(l().m(function e(){var t;return l().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=h()).cache){e.n=1;break}return e.a(2,t.cache);case 1:if(null===t.loadingPromise){e.n=2;break}return e.a(2,t.loadingPromise);case 2:return t.loadingPromise=p(l().m(function e(){var n,r,i,o,s,a,c,d;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:n=[],r=0,i=["/assets/config/config.json","./assets/config/config.json","assets/config/config.json","/node_modules/itsm-widget/dist/itsm-widget-config.json","./node_modules/itsm-widget/dist/itsm-widget-config.json","node_modules/itsm-widget/dist/itsm-widget-config.json","/assets/itsm-widget-config.json","./assets/itsm-widget-config.json","/itsm-widget-config.json","./itsm-widget-config.json","assets/itsm-widget-config.json","itsm-widget-config.json"];case 1:if(!(r<i.length)){e.n=8;break}return o=i[r],n.push(o),e.p=2,e.n=3,fetch(o);case 3:if(s=e.v,!s.ok){e.n=5;break}return e.n=4,s.json();case 4:return a=e.v,t.cache=a,console.log("[ITSMAPIService] ✅ Loaded config from: ".concat(o)),e.a(2,a);case 5:e.n=7;break;case 6:return e.p=6,d=e.v,e.a(3,7);case 7:r++,e.n=1;break;case 8:throw c="File itsm-widget-config.json not found. Đã thử các vị trí: ".concat(n.join(", ")),console.error("[ITSMAPIService] ❌ Cannot load itsm-widget-config.json"),console.error("[ITSMAPIService] Tried locations:",n),console.error("\n[ITSMAPIService] 📖 Hướng dẫn khắc phục:"),console.error("1. Tạo file config tại: src/assets/config/config.json"),console.error("2. Thêm nội dung với một trong các format sau:"),console.error(' - { "url": { "apiITSMUrl": "http://your-api-url" } }'),console.error(' - { "apiITSMUrl": "http://your-api-url" }'),console.error(' - { "apiBaseUrl": "http://your-api-url" }'),console.error("3. Hoặc chỉnh sửa file: node_modules/itsm-widget/dist/itsm-widget-config.json"),console.error("4. Widget hỗ trợ cả cấu trúc lồng nhau (url.apiITSMUrl) và cấu trúc phẳng"),new Error(c);case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var y=function(){return e=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.authToken=t.authToken||t.apiToken||"",this.baseUrl="",this._baseUrlPromise=this._initializeBaseUrl()},t=[{key:"_initializeBaseUrl",value:(b=p(l().m(function e(){var t,n,r;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,g();case 1:if(t=e.v,n=null,t.url&&(n=t.url.apiITSMUrl||t.url.apiBaseUrl),n||(n=t.apiITSMUrl||t.apiBaseUrl),n){e.n=2;break}throw new Error("File config không có apiITSMUrl hoặc apiBaseUrl. Kiểm tra config.url.apiITSMUrl hoặc config.apiITSMUrl");case 2:return this.baseUrl=n,e.a(2,this.baseUrl);case 3:throw e.p=3,r=e.v,console.error("[ITSMAPIService] ❌ Không thể load apiBaseUrl:",r.message),new Error("Không thể load apiBaseUrl: ".concat(r.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(){return b.apply(this,arguments)})},{key:"_ensureBaseUrl",value:(h=p(l().m(function e(){return l().w(function(e){for(;;)switch(e.n){case 0:if(this.baseUrl||!this._baseUrlPromise){e.n=1;break}return e.n=1,this._baseUrlPromise;case 1:if(this.baseUrl){e.n=2;break}throw new Error("baseUrl is required. Please ensure itsm-widget-config.json exists and contains apiBaseUrl.");case 2:return e.a(2)}},e,this)})),function(){return h.apply(this,arguments)})},{key:"buildHeaders",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"application/json",t={};return this.authToken&&(t.Authorization="Bearer ".concat(this.authToken)),"multipart/form-data"!==e&&(t["Content-Type"]=e),t}},{key:"createRequest",value:(m=p(l().m(function e(t){var n,r,i,o,s;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/send"),r={request:{requester:t.requester||{name:""},assets:t.assets||[],category:t.category||null,group:t.group||null,subcategory:t.subcategory||null,technician:t.technician||null,item:t.item||null,priority:t.priority||null,subject:t.subject||"",description:t.description||"",site:t.site||null,attachments:t.attachments||[],udf_fields:t.udf_fields||{},template:t.template||null,zia_properties:t.zia_properties||{}}},e.p=2,e.n=3,fetch(n,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(r)});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error creating request:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return m.apply(this,arguments)})},{key:"uploadAttachment",value:(f=p(l().m(function e(t,n){var r,i,o,s,a;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return r="".concat(this.baseUrl,"/spcit/").concat(t,"/upload"),i=new FormData,(Array.isArray(n)?n:[n]).forEach(function(e){e instanceof File&&i.append("files",e)}),e.p=2,e.n=3,fetch(r,{method:"PUT",headers:this.buildHeaders("multipart/form-data"),body:i});case 3:return o=e.v,e.n=4,o.json();case 4:if(s=e.v,o.ok){e.n=5;break}throw new Error(s.error||s.message||"HTTP error! status: ".concat(o.status));case 5:return e.a(2,s);case 6:throw e.p=6,a=e.v,console.error("Error uploading attachment:",a),a;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e,t){return f.apply(this,arguments)})},{key:"createRequestWithAttachments",value:(d=p(l().m(function e(t){var n,r,i,o,s,c,d=arguments;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return n=d.length>1&&void 0!==d[1]?d[1]:[],e.p=1,e.n=2,this.createRequest(t);case 2:if(i=e.v,!(n&&n.length>0&&null!==(r=i.request)&&void 0!==r&&r.id)){e.n=6;break}return e.p=3,e.n=4,this.uploadAttachment(i.request.id,n);case 4:return o=e.v,e.a(2,a(a({},i),{},{uploadResponse:o}));case 5:return e.p=5,s=e.v,console.warn("Request created but file upload failed:",s),e.a(2,a(a({},i),{},{uploadError:s.message}));case 6:return e.a(2,i);case 7:throw e.p=7,c=e.v,console.error("Error creating request with attachments:",c),c;case 8:return e.a(2)}},e,this,[[3,5],[1,7]])})),function(e){return d.apply(this,arguments)})},{key:"getRequest",value:(c=p(l().m(function e(t){var n,r,i,o,s;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/ticket/").concat(t),e.p=2,(r=this.buildHeaders("application/json")).Accept="application/json",e.n=3,fetch(n,{method:"POST",headers:r,body:JSON.stringify({request_id:t})});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error getting request:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return c.apply(this,arguments)})},{key:"getAllCategories",value:(s=p(l().m(function e(){var t,n,r,o,s,a,c,d,u,f,m,p,h,g,b;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:t="".concat(this.baseUrl,"/spcit/categories"),n=[],r=null,o=1,s=100,a=!0,c=null,d=null,u=0;case 2:if(!a){e.n=9;break}return u++,f={list_info:{start_index:o,row_count:s,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=3,e.n=4,fetch(t,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(f)});case 4:return m=e.v,e.n=5,m.json();case 5:if(p=e.v,m.ok){e.n=6;break}throw new Error(p.error||p.message||"HTTP error! status: ".concat(m.status));case 6:1===u&&p.list_info&&p.list_info.total_count&&(r=p.list_info.total_count,c=p.list_info,d=p.response_status,console.log("[ITSMAPIService] Total categories: ".concat(r))),p.categories&&Array.isArray(p.categories)&&(n.push.apply(n,i(p.categories)),console.log("[ITSMAPIService] Call #".concat(u," (start_index: ").concat(o,"): Loaded ").concat(p.categories.length," categories. Total so far: ").concat(n.length))),p.list_info?(h=p.list_info.has_more_rows,g=o+s,console.log("[ITSMAPIService] Response row_count: ".concat(p.list_info.row_count,", Using request row_count: ").concat(s," for next start_index calculation")),!1===h?(a=!1,console.log("[ITSMAPIService] No more rows (has_more_rows = false)")):null!==r&&g>r?(a=!1,console.log("[ITSMAPIService] Next start_index (".concat(g,") exceeds total_count (").concat(r,")"))):(o=g,console.log("[ITSMAPIService] Continue with start_index: ".concat(o)))):(a=!1,console.log("[ITSMAPIService] No list_info in response, stopping")),e.n=8;break;case 7:throw e.p=7,b=e.v,console.error("[ITSMAPIService] Error getting categories (call #".concat(u,"):"),b),b;case 8:e.n=2;break;case 9:return console.log("[ITSMAPIService] Successfully fetched ".concat(n.length," categories in ").concat(u," API calls")),e.a(2,{categories:n,list_info:c,response_status:d})}},e,this,[[3,7]])})),function(){return s.apply(this,arguments)})},{key:"getSubcategoriesByCategoryId",value:(o=p(l().m(function e(t){var n,r,i,o,s;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/categories/").concat(t,"/subcategories"),r={list_info:{start_index:0,row_count:100,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=2,e.n=3,fetch(n,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(r)});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error getting subcategories:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return o.apply(this,arguments)})},{key:"getItemsBySubcategoryId",value:(r=p(l().m(function e(t){var n,r,i,o,s;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/subcategories/").concat(t,"/items"),r={list_info:{start_index:0,row_count:100,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=2,e.n=3,fetch(n,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(r)});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error getting items:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return r.apply(this,arguments)})},{key:"mapPriority",value:function(e){return{low:"Thấp",medium:"Trung bình",high:"Cao",none:"Chưa lựa chọn"}[e]||"Chưa lựa chọn"}},{key:"mapCategory",value:function(e){return{hardware:"A01A00 - Quản lý an toàn thông tin",software:"Software Category",network:"Network Category",account:"Account Category",other:"Other Category"}[e]||null}},{key:"buildRequestData",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.category||this.mapCategory(e.category),r=t.subcategory||e.subcategory||null,i=t.item||e.item||null,o=t.template||n||null,s=t.requesterName||e.requester||e.contact||"",a=t.site||e.site||"";return{requester:{name:s},category:n?{name:n}:null,subcategory:r?{name:r}:null,priority:{name:this.mapPriority(e.priority||"none")},subject:e.title||"",description:e.description||"",site:a?{name:a}:null,item:i?{name:i}:null,template:o?{name:o}:null,udf_fields:t.udf_fields||{},zia_properties:t.zia_properties||{},assets:[],attachments:[],group:null,technician:null}}}],t&&u(e.prototype,t),n&&u(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,o,s,c,d,f,m,h,b}();e.exports&&(e.exports=y),"undefined"!=typeof window&&(window.ITSMAPIService=y);const v=y}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r](o,o.exports,n),o.loaded=!0,o.exports}return n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0,n(322)})());
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ITSMWidget=t():e.ITSMWidget=t()}(window,()=>(()=>{"use strict";var e={72:(e,t,n)=>{var r,i=function(){return void 0===r&&(r=Boolean(window&&document&&document.all&&!window.atob)),r},o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),s=[];function a(e){for(var t=-1,n=0;n<s.length;n++)if(s[n].identifier===e){t=n;break}return t}function c(e,t){for(var n={},r=[],i=0;i<e.length;i++){var o=e[i],c=t.base?o[0]+t.base:o[0],l=n[c]||0,d="".concat(c," ").concat(l);n[c]=l+1;var u=a(d),f={css:o[1],media:o[2],sourceMap:o[3]};-1!==u?(s[u].references++,s[u].updater(f)):s.push({identifier:d,updater:h(f,t),references:1}),r.push(d)}return r}function l(e){var t=document.createElement("style"),r=e.attributes||{};if(void 0===r.nonce){var i=n.nc;i&&(r.nonce=i)}if(Object.keys(r).forEach(function(e){t.setAttribute(e,r[e])}),"function"==typeof e.insert)e.insert(t);else{var s=o(e.insert||"head");if(!s)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");s.appendChild(t)}return t}var d,u=(d=[],function(e,t){return d[e]=t,d.filter(Boolean).join("\n")});function f(e,t,n,r){var i=n?"":r.media?"@media ".concat(r.media," {").concat(r.css,"}"):r.css;if(e.styleSheet)e.styleSheet.cssText=u(t,i);else{var o=document.createTextNode(i),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(o,s[t]):e.appendChild(o)}}function m(e,t,n){var r=n.css,i=n.media,o=n.sourceMap;if(i?e.setAttribute("media",i):e.removeAttribute("media"),o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}var p=null,g=0;function h(e,t){var n,r,i;if(t.singleton){var o=g++;n=p||(p=l(t)),r=f.bind(null,n,o,!1),i=f.bind(null,n,o,!0)}else n=l(t),r=m.bind(null,n,t),i=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else i()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=i());var n=c(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var r=0;r<n.length;r++){var i=a(n[r]);s[i].references--}for(var o=c(e,t),l=0;l<n.length;l++){var d=a(n[l]);0===s[d].references&&(s[d].updater(),s.splice(d,1))}n=o}}}},314:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n}).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var o=0;o<this.length;o++){var s=this[o][0];null!=s&&(i[s]=!0)}for(var a=0;a<e.length;a++){var c=[].concat(e[a]);r&&i[c[0]]||(n&&(c[2]?c[2]="".concat(n," and ").concat(c[2]):c[2]=n),t.push(c))}},t}},322:(e,t,n)=>{n.r(t),n.d(t,{default:()=>I});var r=n(72),i=n.n(r),o=n(555),s={insert:"head",singleton:!1};i()(o.A,s);o.A.locals;var a=n(890),c=["Bổ sung chương trình","Dữ liệu","Hiệu chỉnh chương trình","Nghiệp vụ","Phần mềm"],l="EVNSPC",d="A - An toàn điện",u="A1 - Phần mềm ứng dụng",f="C - The Business/Customer Service Catalog",m="Máy tính";function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}e=n.hmd(e);var g=["apiBaseUrl","apiITSMUrl"];function h(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var c=r&&r.prototype instanceof a?r:a,l=Object.create(c.prototype);return b(l,"_invoke",function(n,r,i){var o,a,c,l=0,d=i||[],u=!1,f={p:0,n:0,v:e,a:m,f:m.bind(e,4),d:function(t,n){return o=t,a=0,c=e,f.n=n,s}};function m(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],m=f.p,p=o[2];n>3?(i=p===r)&&(c=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=m&&((i=n<2&&m<o[1])?(a=0,f.v=r,f.n=o[1]):m<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,f.n=p,a=0))}if(i||n>1)return s;throw u=!0,r}return function(i,d,p){if(l>1)throw TypeError("Generator is already running");for(u&&1===d&&m(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(f.n=-1),m(a,c)):f.n=c:f.v=c);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,a<2&&(a=0)}else 1===a&&(t=o.return)&&t.call(o),a<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(u=f.n<0)?c:n.call(r,f))!==s)break}catch(t){o=e,a=1,c=t}finally{l=1}}return{value:t,done:u}}}(n,i,o),!0),l}var s={};function a(){}function c(){}function l(){}t=Object.getPrototypeOf;var d=[][r]?t(t([][r]())):(b(t={},r,function(){return this}),t),u=l.prototype=a.prototype=Object.create(d);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,b(e,i,"GeneratorFunction")),e.prototype=Object.create(u),e}return c.prototype=l,b(u,"constructor",l),b(l,"constructor",c),c.displayName="GeneratorFunction",b(l,i,"GeneratorFunction"),b(u),b(u,i,"Generator"),b(u,r,function(){return this}),b(u,"toString",function(){return"[object Generator]"}),(h=function(){return{w:o,m:f}})()}function b(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}b=function(e,t,n,r){function o(t,n){b(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},b(e,t,n,r)}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach(function(t){w(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function w(e,t,n){return(t=k(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function x(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,k(r.key),r)}}function k(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==p(t)?t:t+""}function C(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function T(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){C(o,r,i,s,a,"next",e)}function a(e){C(o,r,i,s,a,"throw",e)}s(void 0)})}}var M=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function A(){return _.apply(this,arguments)}function _(){return(_=T(h().m(function e(){var t;return h().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=M()).cache){e.n=1;break}return e.a(2,t.cache);case 1:if(null===t.loadingPromise){e.n=2;break}return e.a(2,t.loadingPromise);case 2:return t.loadingPromise=T(h().m(function e(){var n,r,i,o,s,a,c,l;return h().w(function(e){for(;;)switch(e.p=e.n){case 0:n=[],r=0,i=["/assets/config/config.json","./assets/config/config.json","assets/config/config.json","/node_modules/itsm-widget/dist/itsm-widget-config.json","./node_modules/itsm-widget/dist/itsm-widget-config.json","node_modules/itsm-widget/dist/itsm-widget-config.json","/assets/itsm-widget-config.json","./assets/itsm-widget-config.json","/itsm-widget-config.json","./itsm-widget-config.json","assets/itsm-widget-config.json","itsm-widget-config.json"];case 1:if(!(r<i.length)){e.n=8;break}return o=i[r],n.push(o),e.p=2,e.n=3,fetch(o);case 3:if(s=e.v,!s.ok){e.n=5;break}return e.n=4,s.json();case 4:return a=e.v,t.cache=a,console.log("[ITSMWidget] ✅ Loaded config from: ".concat(o)),e.a(2,a);case 5:e.n=7;break;case 6:return e.p=6,l=e.v,e.a(3,7);case 7:r++,e.n=1;break;case 8:throw c="File itsm-widget-config.json not found. Đã thử các vị trí: ".concat(n.join(", ")),console.error("[ITSMWidget] ❌ Cannot load itsm-widget-config.json"),console.error("[ITSMWidget] Tried locations:",n),console.error("\n[ITSMWidget] 📖 Hướng dẫn khắc phục:"),console.error("1. Tạo file config tại: src/assets/config/config.json"),console.error("2. Thêm nội dung với một trong các format sau:"),console.error(' - { "url": { "apiITSMUrl": "http://your-api-url" } }'),console.error(' - { "apiITSMUrl": "http://your-api-url" }'),console.error(' - { "apiBaseUrl": "http://your-api-url" }'),console.error("3. Hoặc chỉnh sửa file: node_modules/itsm-widget/dist/itsm-widget-config.json"),console.error("4. Widget hỗ trợ cả cấu trúc lồng nhau (url.apiITSMUrl) và cấu trúc phẳng"),new Error(c);case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var q=function(){return e=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._configPromise=this._initializeConfig(t)},t=[{key:"_initializeConfig",value:(b=T(h().m(function e(t){var n,r,i,o;return h().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,A();case 1:if(n=e.v,r=null,n.url&&(r=n.url.apiITSMUrl||n.url.apiBaseUrl),r||(r=n.apiITSMUrl||n.apiBaseUrl),r){e.n=2;break}throw new Error("File config không có apiITSMUrl hoặc apiBaseUrl. Kiểm tra config.url.apiITSMUrl hoặc config.apiITSMUrl");case 2:t.apiBaseUrl,t.apiITSMUrl,i=S(t,g),this.config=this._buildConfig(v(v({},n),{},{apiBaseUrl:r},i)),this._initWidget(),e.n=4;break;case 3:throw e.p=3,o=e.v,console.error("[ITSMWidget] ❌ Không thể load config:",o.message),new Error("Không thể load config: ".concat(o.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(e){return b.apply(this,arguments)})},{key:"_buildConfig",value:function(e){if(!e.apiBaseUrl)throw new Error("apiBaseUrl is required in itsm-widget-config.json");return v({apiBaseUrl:e.apiBaseUrl,authToken:e.authToken||e.apiToken||"",getAuthToken:e.getAuthToken||null,getRequesterName:e.getRequesterName||null,getSite:e.getSite||null,position:e.position||"bottom-right",iconText:e.iconText||"📝",iconImage:void 0!==e.iconImage?e.iconImage:"data:image/png;base64,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",iconColor:e.iconColor||"#335fb3",title:e.title||"Tạo phiếu yêu cầu ITSM",requesterName:e.requesterName||"",site:e.site||"",udf_fields:e.udf_fields||{}},e)}},{key:"_initWidget",value:function(){this.apiService=new a.A({baseUrl:this.config.apiBaseUrl,authToken:this.config.authToken}),this.isOpen=!1,this.widgetContainer=null,this.modalContainer=null,this.init()}},{key:"init",value:function(){this.createWidgetButton(),this.createModal(),this.attachEvents()}},{key:"createWidgetButton",value:function(){var e=document.createElement("div");e.id="itsm-widget-button",e.className="itsm-widget-button itsm-position-".concat(this.config.position);var t="";t=this.config.iconImage&&null!==this.config.iconImage?'<img src="'.concat(this.config.iconImage,'" alt="ITSM Widget" class="itsm-widget-icon-img" />'):this.config.iconText||"📝";var n=this.config.iconImage&&null!==this.config.iconImage?"":"background-color: ".concat(this.config.iconColor,";");e.style.borderColor=this.config.iconColor,e.innerHTML='\n <div class="itsm-widget-icon" style="'.concat(n,'">\n ').concat(t,"\n </div>\n "),document.body.appendChild(e),this.widgetContainer=e}},{key:"createModal",value:function(){var e=document.createElement("div");e.id="itsm-widget-modal",e.className="itsm-modal-overlay",e.innerHTML='\n <div class="itsm-modal-container" style="width: 50vw; max-width: 90vw;">\n <div class="itsm-modal-header">\n <span class="itsm-modal-title">'.concat(this.config.title,'</span>\n <div class="itsm-modal-header-icons">\n <button class="itsm-modal-close" aria-label="Đóng">\n <span>×</span>\n </button>\n </div>\n </div>\n <div class="itsm-modal-content">\n <form id="itsm-request-form" class="itsm-form">\n \n\n <div class="itsm-form-group">\n <label for="itsm-requester">\n Người yêu cầu <span class="itsm-required">*</span>\n </label>\n <input \n type="text" \n id="itsm-requester" \n name="requester" \n class="itsm-input" \n disabled\n placeholder=""\n value="').concat(this.config.requesterName||"",'"\n />\n </div>\n <div class="itsm-form-group">\n <label for="itsm-site">Đơn vị</label>\n <input \n type="text" \n id="itsm-site" \n name="site" \n class="itsm-input" \n disabled\n placeholder=""\n value="').concat(this.config.site||"",'"\n />\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-category">\n Danh mục dịch vụ <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-category">\n <input type="hidden" id="itsm-category" name="category" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">-- Chọn danh mục --</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm danh mục..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-subcategory">\n Dịch vụ con <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-subcategory" data-disabled="true">\n <input type="hidden" id="itsm-subcategory" name="subcategory" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm dịch vụ con..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-item">\n Chi tiết dịch vụ <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-item" data-disabled="true">\n <input type="hidden" id="itsm-item" name="item" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm chi tiết dịch vụ..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-row">\n <div class="itsm-form-group itsm-form-group-half">\n <label for="itsm-priority">\n Mức độ ưu tiên <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-priority" data-no-filter="true">\n <input type="hidden" id="itsm-priority" name="priority" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group itsm-form-group-half">\n <label for="itsm-udf-pick-305">Loại hỗ trợ</label>\n <div class="itsm-custom-select" data-select-id="itsm-udf-pick-305" data-no-filter="true">\n <input type="hidden" id="itsm-udf-pick-305" name="udf_pick_305">\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n </div>\n \n <div class="itsm-form-group">\n <label for="itsm-udf-pick-306">\n Loại thiết bị sử dụng <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-udf-pick-306" data-no-filter="true">\n <input type="hidden" id="itsm-udf-pick-306" name="udf_pick_306" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-title">\n Tiêu đề <span class="itsm-required">*</span>\n </label>\n <input \n type="text" \n id="itsm-title" \n name="title" \n class="itsm-input" \n required \n placeholder="Nhập tiêu đề phiếu yêu cầu"\n />\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-description-editor">\n Mô tả <span class="itsm-required">*</span>\n </label>\n <div class="itsm-editor-container">\n <div class="itsm-editor-toolbar">\n <button type="button" class="itsm-editor-btn" data-command="bold" title="Bold">\n <strong>B</strong>\n </button>\n <button type="button" class="itsm-editor-btn" data-command="italic" title="Italic">\n <em>I</em>\n </button>\n <button type="button" class="itsm-editor-btn" data-command="underline" title="Underline">\n <u>U</u>\n </button>\n <div class="itsm-editor-separator"></div>\n <button type="button" class="itsm-editor-btn" data-command="insertUnorderedList" title="Bullet List">• List</button>\n <button type="button" class="itsm-editor-btn" data-command="insertOrderedList" title="Numbered List">1. List</button>\n <div class="itsm-editor-separator"></div>\n <label class="itsm-editor-file-btn">\n 📎 Đính kèm file\n <input \n type="file" \n id="itsm-attachment" \n name="attachment" \n multiple\n style="display: none;"\n />\n </label>\n </div>\n <div \n id="itsm-description-editor" \n class="itsm-editor-content"\n contenteditable="true"\n data-placeholder="Nhập mô tả chi tiết yêu cầu..."\n ></div>\n <textarea \n id="itsm-description" \n name="description" \n style="display: none;"\n required\n ></textarea>\n <div id="itsm-file-list" class="itsm-file-list"></div>\n </div>\n </div>\n\n <div class="itsm-modal-footer">\n <button type="button" class="itsm-btn itsm-btn-secondary" id="itsm-cancel-btn">\n Hủy\n </button>\n <button type="submit" class="itsm-btn itsm-btn-primary" id="itsm-submit-btn">\n <span class="itsm-btn-text">Gửi Yêu Cầu</span>\n <span class="itsm-btn-loading" style="display: none;">Đang gửi...</span>\n </button>\n </div>\n </form>\n </div>\n </div>\n '),document.body.appendChild(e),this.modalContainer=e}},{key:"attachEvents",value:function(){var e=this;this.widgetContainer.addEventListener("click",function(){e.toggleModal()});var t=this.modalContainer.querySelector(".itsm-modal-close"),n=this.modalContainer.querySelector("#itsm-cancel-btn"),r=this.modalContainer;t&&t.addEventListener("click",function(){return e.closeModal()}),n&&n.addEventListener("click",function(){return e.closeModal()}),r.addEventListener("click",function(t){t.target===r&&e.closeModal()}),this.modalContainer.querySelector("#itsm-request-form").addEventListener("submit",function(t){return e.handleSubmit(t)}),this.modalContainer.querySelector("#itsm-attachment").addEventListener("change",function(t){return e.handleFileSelect(t)}),this.initEditor(),this.initCategoryDropdowns()}},{key:"initEditor",value:function(){var e=this.modalContainer.querySelector("#itsm-description-editor"),t=this.modalContainer.querySelector("#itsm-description"),n=this.modalContainer.querySelector(".itsm-editor-toolbar");e.addEventListener("input",function(){t.value=e.innerHTML,e.textContent.trim()?t.setCustomValidity(""):t.setCustomValidity("Mô tả là bắt buộc")}),e.addEventListener("focus",function(){""===e.textContent.trim()&&(e.innerHTML="")}),e.addEventListener("blur",function(){""===e.textContent.trim()&&(e.innerHTML="")}),n.querySelectorAll(".itsm-editor-btn[data-command]").forEach(function(n){n.addEventListener("click",function(r){r.preventDefault();var i=n.getAttribute("data-command");e.focus(),document.execCommand(i,!1,null),t.value=e.innerHTML})})}},{key:"initCategoryDropdowns",value:function(){var e=this,t=this.modalContainer.querySelector('[data-select-id="itsm-category"]'),n=this.modalContainer.querySelector('[data-select-id="itsm-subcategory"]'),r=this.modalContainer.querySelector('[data-select-id="itsm-item"]'),i=this.modalContainer.querySelector('[data-select-id="itsm-priority"]'),o=this.modalContainer.querySelector('[data-select-id="itsm-udf-pick-305"]'),s=this.modalContainer.querySelector('[data-select-id="itsm-udf-pick-306"]');this.categoryMap=new Map,this.subcategoryMap=new Map,this.allCategories=[],this.allSubcategories=[],this.allItems=[],this._initCustomSelect(t,"category"),this._initCustomSelect(n,"subcategory"),this._initCustomSelect(r,"item"),this._initCustomSelect(i,"priority"),this._initCustomSelect(o,"udf_pick_305"),this._initCustomSelect(s,"udf_pick_306"),this._populateCustomSelect(i,[{value:"low",text:"Thấp"},{value:"medium",text:"Trung bình"},{value:"high",text:"Cao"}],"Chưa lựa chọn");var a=c.map(function(e){return{value:e,text:e}});this._populateCustomSelect(o,a,"Chưa lựa chọn"),this._populateCustomSelect(s,[{value:"Máy tính",text:"Máy tính"},{value:"Máy tính bảng",text:"Máy tính bảng"},{value:"Điện thoại",text:"Điện thoại"},{value:"Laptop",text:"Laptop"}],"Chưa lựa chọn"),this._loadCategories(t,n,r),t&&t.querySelector('input[type="hidden"]').addEventListener("change",function(){var t=T(h().m(function t(i){var o,s;return h().w(function(t){for(;;)switch(t.n){case 0:if(o=i.target.value,e._resetCustomSelect(n,"Chưa lựa chọn",!0),e._resetCustomSelect(r,"Chưa lựa chọn",!0),!o){t.n=1;break}if(!(s=e.categoryMap.get(o))||!s.id){t.n=1;break}return t.n=1,e._loadSubcategories(s.id,n,r);case 1:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}()),n&&n.querySelector('input[type="hidden"]').addEventListener("change",function(){var t=T(h().m(function t(n){var i,o;return h().w(function(t){for(;;)switch(t.n){case 0:if(i=n.target.value,e._resetCustomSelect(r,"Chưa lựa chọn",!i),!i){t.n=1;break}if(!(o=e.subcategoryMap.get(i))||!o.id){t.n=1;break}return t.n=1,e._loadItems(o.id,r);case 1:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}},{key:"_initCustomSelect",value:function(e,t){var n=this;if(e){var r=e.querySelector(".itsm-select-display"),i=(e.querySelector(".itsm-select-dropdown"),e.querySelector(".itsm-select-filter")),o=e.querySelector(".itsm-select-options"),s=(e.querySelector('input[type="hidden"]'),"true"===e.getAttribute("data-disabled"));s&&(r.classList.add("disabled"),r.setAttribute("tabindex","-1")),r.addEventListener("click",function(t){"true"===e.getAttribute("data-disabled")||(t.stopPropagation(),n._toggleDropdown(e))}),document.addEventListener("click",function(t){e.contains(t.target)||n._closeDropdown(e)}),i&&(i.addEventListener("input",function(e){var t=e.target.value.toLowerCase().trim();n._filterCustomOptions(o,t)}),i.addEventListener("click",function(e){e.stopPropagation()})),r.addEventListener("keydown",function(t){"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),s||n._toggleDropdown(e))})}}},{key:"_toggleDropdown",value:function(e){var t=e.querySelector(".itsm-select-dropdown"),n=t.classList.contains("open");if(this.modalContainer.querySelectorAll(".itsm-select-dropdown.open").forEach(function(e){e!==t&&e.classList.remove("open")}),n)t.classList.remove("open");else{t.classList.add("open");var r=e.querySelector(".itsm-select-filter");r&&setTimeout(function(){return r.focus()},10)}}},{key:"_closeDropdown",value:function(e){e.querySelector(".itsm-select-dropdown").classList.remove("open");var t=e.querySelector(".itsm-select-filter");t&&(t.value="")}},{key:"_resetCustomSelect",value:function(e,t,n){if(e){var r=e.querySelector(".itsm-select-display"),i=r.querySelector(".itsm-select-text"),o=e.querySelector('input[type="hidden"]'),s=e.querySelector(".itsm-select-options"),a=e.querySelector(".itsm-select-filter");i.textContent=t,o.value="",n?(r.classList.add("disabled"),r.setAttribute("tabindex","-1"),e.setAttribute("data-disabled","true")):(r.classList.remove("disabled"),r.setAttribute("tabindex","0"),e.setAttribute("data-disabled","false")),a&&(a.value="",a.disabled=n),s.innerHTML="",this._closeDropdown(e)}}},{key:"_filterCustomOptions",value:function(e,t){Array.from(e.querySelectorAll(".itsm-select-option")).forEach(function(e){var n=e.textContent.toLowerCase();!t||n.includes(t)?e.style.display="":e.style.display="none"})}},{key:"_populateCustomSelect",value:function(e,t,n){var r=this;if(e){var i=e.querySelector(".itsm-select-options"),o=e.querySelector('input[type="hidden"]');if(i){console.log("[ITSMWidget] _populateCustomSelect: populating",t.length,"options"),i.innerHTML="",t.forEach(function(t,n){var s=document.createElement("div");s.className="itsm-select-option",s.textContent=t.text,s.dataset.value=t.value,t.dataset&&Object.keys(t.dataset).forEach(function(e){s.dataset[e]=t.dataset[e]}),s.addEventListener("click",function(t){t.stopPropagation();var n=s.dataset.value,i=s.textContent;o.value=n,e.querySelector(".itsm-select-text").textContent=i,o.dispatchEvent(new Event("change",{bubbles:!0})),r._closeDropdown(e)}),i.appendChild(s)});var s=i.querySelectorAll(".itsm-select-option").length;console.log("[ITSMWidget] _populateCustomSelect: added",s,"options to DOM")}else console.error("[ITSMWidget] _populateCustomSelect: optionsContainer not found")}else console.warn("[ITSMWidget] _populateCustomSelect: customSelectElement is null")}},{key:"_loadCategories",value:(p=T(h().m(function e(t,n,r){var i,o,s,a,c,l=this;return h().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return e.a(2);case 1:return e.p=1,i=t.querySelector(".itsm-select-display"),(o=i.querySelector(".itsm-select-text")).textContent="Đang tải...",i.classList.add("disabled"),e.n=2,this.apiService.getAllCategories();case 2:(s=e.v)&&s.categories&&Array.isArray(s.categories)?(this.allCategories=[],s.categories.forEach(function(e){e&&e.name&&e.id&&(l.categoryMap.set(e.name,{id:e.id,name:e.name}),l.allCategories.push({value:e.name,text:e.name,dataset:{categoryId:e.id}}))}),this._populateCustomSelect(t,this.allCategories,"-- Chọn danh mục --"),o.textContent="-- Chọn danh mục --"):(o.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid categories response:",s)),e.n=4;break;case 3:e.p=3,c=e.v,console.error("[ITSMWidget] Error loading categories:",c),t.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(a=t.querySelector(".itsm-select-display")).classList.remove("disabled"),a.setAttribute("tabindex","0"),t.setAttribute("data-disabled","false"),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t,n){return p.apply(this,arguments)})},{key:"_loadSubcategories",value:(s=T(h().m(function e(t,n,r){var i,o,s,a,c,l,d,u,f,m,p=this;return h().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2);case 1:return e.p=1,i=n.querySelector(".itsm-select-display"),(o=i.querySelector(".itsm-select-text")).textContent="Đang tải...",i.classList.add("disabled"),this._resetCustomSelect(r,"Chưa lựa chọn",!0),this.subcategoryMap.clear(),e.n=2,this.apiService.getSubcategoriesByCategoryId(t);case 2:s=e.v,console.log("[ITSMWidget] Subcategories response:",s),s&&s.subcategories&&Array.isArray(s.subcategories)?(this.allSubcategories=[],s.subcategories.forEach(function(e){e&&e.name&&e.id&&(p.subcategoryMap.set(e.name,{id:e.id,name:e.name}),p.allSubcategories.push({value:e.name,text:e.name,dataset:{subcategoryId:e.id}}))}),console.log("[ITSMWidget] Processed subcategories:",this.allSubcategories.length,this.allSubcategories),this.allSubcategories.length>0?(this._populateCustomSelect(n,this.allSubcategories,"Chưa lựa chọn"),(a=n.querySelector(".itsm-select-display")).classList.remove("disabled"),a.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(c=n.querySelector(".itsm-select-filter"))&&(c.disabled=!1),l=n.querySelector(".itsm-select-options"),d=l.querySelectorAll(".itsm-select-option").length,console.log("[ITSMWidget] Options populated:",d,"options in dropdown"),o.textContent="Chưa lựa chọn"):(o.textContent="Không có dữ liệu",console.warn("[ITSMWidget] No subcategories found for category:",t))):(o.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid subcategories response:",s)),e.n=4;break;case 3:e.p=3,m=e.v,console.error("[ITSMWidget] Error loading subcategories:",m),n.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(u=n.querySelector(".itsm-select-display")).classList.contains("disabled")||(u.classList.remove("disabled"),u.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(f=n.querySelector(".itsm-select-filter"))&&(f.disabled=!1)),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t,n){return s.apply(this,arguments)})},{key:"_loadItems",value:(o=T(h().m(function e(t,n){var r,i,o,s,a,c,l,d,u=this;return h().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2);case 1:return e.p=1,r=n.querySelector(".itsm-select-display"),(i=r.querySelector(".itsm-select-text")).textContent="Đang tải...",r.classList.add("disabled"),e.n=2,this.apiService.getItemsBySubcategoryId(t);case 2:(o=e.v)&&o.items&&Array.isArray(o.items)?(this.allItems=[],o.items.forEach(function(e){if(e&&e.name){var t={};e.id&&(t.itemId=e.id),u.allItems.push({value:e.name,text:e.name,dataset:t})}}),this.allItems.length>0?(this._populateCustomSelect(n,this.allItems,"Chưa lựa chọn"),(s=n.querySelector(".itsm-select-display")).classList.remove("disabled"),s.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(a=n.querySelector(".itsm-select-filter"))&&(a.disabled=!1),i.textContent="Chưa lựa chọn"):(i.textContent="Không có dữ liệu",console.warn("[ITSMWidget] No items found for subcategory:",t))):(i.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid items response:",o)),e.n=4;break;case 3:e.p=3,d=e.v,console.error("[ITSMWidget] Error loading items:",d),n.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(c=n.querySelector(".itsm-select-display")).classList.contains("disabled")||(c.classList.remove("disabled"),c.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(l=n.querySelector(".itsm-select-filter"))&&(l.disabled=!1)),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t){return o.apply(this,arguments)})},{key:"toggleModal",value:function(){this.isOpen?this.closeModal():this.openModal()}},{key:"openModal",value:function(){if(this.config.getAuthToken&&"function"==typeof this.config.getAuthToken){var e=this.config.getAuthToken();e&&this.apiService&&(this.apiService.authToken=e,this.config.authToken=e)}if(this.config.getRequesterName&&"function"==typeof this.config.getRequesterName){var t=this.config.getRequesterName();if(t){this.config.requesterName=t;var n=this.modalContainer.querySelector("#itsm-requester");n&&(n.value=t)}}if(this.config.getSite&&"function"==typeof this.config.getSite){var r=this.config.getSite();if(r){this.config.site=r;var i=this.modalContainer.querySelector("#itsm-site");i&&(i.value=r)}}this.modalContainer.classList.add("itsm-modal-active"),this.modalContainer.style.display="flex",this.isOpen=!0,document.body.style.overflow="hidden"}},{key:"closeModal",value:function(){this.modalContainer.classList.remove("itsm-modal-active"),this.modalContainer.style.display="none",this.isOpen=!1,document.body.style.overflow=""}},{key:"handleFileSelect",value:function(e){var t=this,n=Array.from(e.target.files),r=this.modalContainer.querySelector("#itsm-file-list");0!==n.length?r.innerHTML=n.map(function(e){return'\n <div class="itsm-file-item">\n <span class="itsm-file-name">'.concat(e.name,'</span>\n <span class="itsm-file-size">').concat(t.formatFileSize(e.size),"</span>\n </div>\n ")}).join(""):r.innerHTML=""}},{key:"formatFileSize",value:function(e){if(0===e)return"0 Bytes";var t=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,t)*100)/100+" "+["Bytes","KB","MB","GB"][t]}},{key:"handleSubmit",value:(i=T(h().m(function e(t){var n,r,i,o,s,a,c,l,d,u,f,m,p,g,b,y,v,w,S=this;return h().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),n=t.target,r=new FormData(n),this.config.getAuthToken&&"function"==typeof this.config.getAuthToken&&(i=this.config.getAuthToken())&&this.apiService&&(this.apiService.authToken=i,this.config.authToken=i),o="",o=this.config.getRequesterName&&"function"==typeof this.config.getRequesterName?this.config.getRequesterName()||"":this.config.requesterName||r.get("requester")||"",s="",s=this.config.getSite&&"function"==typeof this.config.getSite?this.config.getSite()||"":this.config.site||r.get("site")||"",a={title:r.get("title"),description:r.get("description"),requester:o,category:r.get("category"),subcategory:r.get("subcategory"),item:r.get("item"),priority:r.get("priority"),site:s,udf_pick_305:r.get("udf_pick_305"),udf_pick_306:r.get("udf_pick_306"),contact:r.get("contact"),attachments:[]},c=this.modalContainer.querySelector("#itsm-description-editor"),a.description=c?c.innerHTML.trim():a.description,a.title&&a.description&&a.category&&a.subcategory&&a.item&&a.priority&&a.udf_pick_306&&a.requester){e.n=1;break}return this.showMessage("Vui lòng điền đầy đủ thông tin bắt buộc!","error"),e.a(2);case 1:if(c&&c.textContent.trim()){e.n=2;break}return this.showMessage("Mô tả không được để trống!","error"),null==c||c.focus(),e.a(2);case 2:return l=n.querySelector("#itsm-attachment"),d=Array.from(l.files),u=n.querySelector("#itsm-submit-btn"),f=u.querySelector(".itsm-btn-text"),m=u.querySelector(".itsm-btn-loading"),f.style.display="none",m.style.display="inline",u.disabled=!0,e.p=3,e.n=4,this.submitRequest(a,d);case 4:p=e.v,this.showMessage("Phiếu yêu cầu đã được gửi thành công!","success"),n.reset(),(g=this.modalContainer.querySelector("#itsm-description-editor"))&&(g.innerHTML=""),this.modalContainer.querySelector("#itsm-file-list").innerHTML="",b=this.modalContainer.querySelector('[data-select-id="itsm-category"]'),y=this.modalContainer.querySelector('[data-select-id="itsm-subcategory"]'),v=this.modalContainer.querySelector('[data-select-id="itsm-item"]'),b&&this._resetCustomSelect(b,"-- Chọn danh mục --",!1),this._resetCustomSelect(y,"Chưa lựa chọn",!0),this._resetCustomSelect(v,"Chưa lựa chọn",!0),setTimeout(function(){S.closeModal()},1500),this.config.onSuccess&&this.config.onSuccess(p),e.n=6;break;case 5:e.p=5,w=e.v,console.error("Error submitting ITSM request:",w),this.showMessage(w.message||"Có lỗi xảy ra khi gửi yêu cầu. Vui lòng thử lại!","error");case 6:return e.p=6,f.style.display="inline",m.style.display="none",u.disabled=!1,e.f(6);case 7:return e.a(2)}},e,this,[[3,5,6,7]])})),function(e){return i.apply(this,arguments)})},{key:"submitRequest",value:(r=T(h().m(function e(t,n){var r,i,o;return h().w(function(e){for(;;)switch(e.n){case 0:if(r={udf_pick_301:l||"EVNSPC",udf_pick_302:d||"A - An toàn điện",udf_pick_303:u||"A1 - Phần mềm ứng dụng",udf_pick_304:f||"C - The Business/Customer Service Catalog",udf_pick_305:t.udf_pick_305||null,udf_pick_306:t.udf_pick_306||m||null,udf_pick_602:null,udf_mline_603:""},Object.assign(r,this.config.udf_fields||{}),i=this.apiService.buildRequestData(t,{requesterName:this.config.requesterName||t.requester||t.contact||"",site:this.config.site||t.site||null,category:t.category,subcategory:t.subcategory,item:t.item,template:t.category,udf_fields:r,zia_properties:this.config.zia_properties||{}}),!((o=n&&n.length>0?Array.from(n):[]).length>0)){e.n=2;break}return e.n=1,this.apiService.createRequestWithAttachments(i,o);case 1:case 3:return e.a(2,e.v);case 2:return e.n=3,this.apiService.createRequest(i);case 4:return e.a(2)}},e,this)})),function(e,t){return r.apply(this,arguments)})},{key:"showMessage",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info",n=document.querySelector(".itsm-message");n&&n.remove();var r=document.createElement("div");r.className="itsm-message itsm-message-".concat(t),r.textContent=e,document.body.appendChild(r),setTimeout(function(){r.classList.add("itsm-message-show")},10),setTimeout(function(){r.classList.remove("itsm-message-show"),setTimeout(function(){return r.remove()},300)},3e3)}},{key:"destroy",value:function(){this.widgetContainer&&this.widgetContainer.remove(),this.modalContainer&&this.modalContainer.remove(),document.body.style.overflow=""}}],t&&x(e.prototype,t),n&&x(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,i,o,s,p,b}();e.exports&&(e.exports=q,e.exports.default=q);const I=q;"undefined"!=typeof window&&(window.ITSMWidget=q,window.ITSMWidget.default||(window.ITSMWidget.default=q),document.addEventListener("DOMContentLoaded",function(){var e=document.querySelector("script[data-itsm-config]");if(e)try{var t=JSON.parse(e.getAttribute("data-itsm-config"));window.itsmWidgetInstance=new q(t)}catch(e){console.error("Error parsing ITSM widget config:",e)}}))},555:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(314),i=n.n(r)()(function(e){return e[1]});i.push([e.id,'/**\r\n * ITSM Widget Styles\r\n * Native HTML/CSS - No external libraries required\r\n */\r\n\r\n/* Floating Button */\r\n.itsm-widget-button {\r\n position: fixed;\r\n z-index: 9998;\r\n cursor: pointer;\r\n transition: transform 0.3s ease, box-shadow 0.3s ease;\r\n border-radius: 50%;\r\n overflow: visible;\r\n padding: 4px;\r\n border: 3px solid transparent;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #ffffff;\r\n}\r\n\r\n.itsm-widget-button:hover {\r\n transform: scale(1.1);\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n}\r\n\r\n.itsm-position-bottom-right {\r\n bottom: 24px;\r\n right: 24px;\r\n}\r\n\r\n.itsm-position-bottom-left {\r\n bottom: 24px;\r\n left: 24px;\r\n}\r\n\r\n.itsm-widget-icon {\r\n width: 48px;\r\n height: 48px;\r\n padding: 8px;\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: white;\r\n font-size: 18px;\r\n font-weight: bold;\r\n /* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); */\r\n user-select: none;\r\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;\r\n overflow: hidden;\r\n background-color: #ffffff;\r\n}\r\n\r\n.itsm-widget-icon-img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: contain;\r\n filter: brightness(0) saturate(100%) invert(27%) sepia(78%) saturate(1250%) hue-rotate(197deg) brightness(96%) contrast(95%);\r\n /* border-radius: 50%; */\r\n}\r\n\r\n/* Modal Overlay */\r\n.itsm-modal-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n z-index: 9999;\r\n display: none;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n transition: opacity 0.3s ease;\r\n padding: 16px;\r\n}\r\n\r\n.itsm-modal-overlay.itsm-modal-active {\r\n display: flex;\r\n opacity: 1;\r\n}\r\n\r\n/* Modal Container */\r\n.itsm-modal-container {\r\n background: #ffffff;\r\n border-radius: 6px;\r\n box-shadow: 0 11px 15px -7px rgba(0, 0, 0, 0.2), 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12);\r\n width: 100%;\r\n max-width: 50vw;\r\n max-height: 90vh;\r\n display: flex;\r\n flex-direction: column;\r\n transform: scale(0.9);\r\n transition: transform 0.3s ease;\r\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;\r\n}\r\n\r\n.itsm-modal-overlay.itsm-modal-active .itsm-modal-container {\r\n transform: scale(1);\r\n}\r\n\r\n/* Modal Header */\r\n.itsm-modal-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 1.5rem;\r\n border-bottom: 1px solid #e9ecef;\r\n background-color: #ffffff;\r\n border-radius: 6px 6px 0 0;\r\n flex-shrink: 0;\r\n}\r\n\r\n.itsm-modal-title {\r\n margin: 0;\r\n font-size: 1.5rem;\r\n font-weight: 600;\r\n color: #212529;\r\n flex: 1;\r\n}\r\n\r\n.itsm-modal-header-icons {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n}\r\n\r\n.itsm-modal-close {\r\n background: transparent;\r\n border: none;\r\n color: #6c757d;\r\n cursor: pointer;\r\n padding: 0.5rem;\r\n width: 2rem;\r\n height: 2rem;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 50%;\r\n transition: background-color 0.2s ease, color 0.2s ease;\r\n font-size: 1.5rem;\r\n line-height: 1;\r\n}\r\n\r\n.itsm-modal-close:hover {\r\n background-color: #e9ecef;\r\n color: #212529;\r\n}\r\n\r\n.itsm-modal-close span {\r\n font-size: 1.5rem;\r\n line-height: 1;\r\n}\r\n\r\n/* Modal Content */\r\n.itsm-modal-content {\r\n padding: 1.5rem;\r\n overflow-y: auto;\r\n flex: 1;\r\n}\r\n\r\n/* Modal Footer */\r\n.itsm-modal-footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 0.5rem;\r\n padding: 1rem 1.5rem;\r\n border-top: 1px solid #e9ecef;\r\n background-color: #ffffff;\r\n border-radius: 0 0 6px 6px;\r\n flex-shrink: 0;\r\n}\r\n\r\n/* Form Styles */\r\n.itsm-form {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1rem;\r\n}\r\n\r\n.itsm-form-row {\r\n display: flex;\r\n gap: 1rem;\r\n}\r\n\r\n.itsm-form-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.5rem;\r\n}\r\n\r\n.itsm-form-group-half {\r\n flex: 1;\r\n}\r\n\r\n/* Label */\r\n.itsm-form-group label {\r\n font-weight: 500;\r\n color: #495057;\r\n font-size: 0.875rem;\r\n display: block;\r\n margin-bottom: 0.25rem;\r\n}\r\n\r\n.itsm-required {\r\n color: #dc3545;\r\n margin-left: 2px;\r\n}\r\n\r\n/* Input */\r\n.itsm-input {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n}\r\n\r\n.itsm-input:hover {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-input:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-input:disabled {\r\n background-color: #e9ecef;\r\n opacity: 1;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* Textarea */\r\n.itsm-textarea {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n resize: vertical;\r\n min-height: 100px;\r\n}\r\n\r\n.itsm-textarea:hover {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-textarea:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-textarea:disabled {\r\n background-color: #e9ecef;\r\n opacity: 1;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* Rich Text Editor */\r\n.itsm-editor-container {\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n background-color: #ffffff;\r\n transition: border-color 0.2s, box-shadow 0.2s;\r\n}\r\n\r\n.itsm-editor-container:focus-within {\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-editor-toolbar {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n padding: 0.5rem;\r\n border-bottom: 1px solid #e9ecef;\r\n background-color: #f8f9fa;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.itsm-editor-btn {\r\n padding: 0.25rem 0.5rem;\r\n font-size: 0.875rem;\r\n border: 1px solid #ced4da;\r\n border-radius: 3px;\r\n background-color: #ffffff;\r\n color: #495057;\r\n cursor: pointer;\r\n transition: background-color 0.2s, border-color 0.2s;\r\n font-family: inherit;\r\n min-width: 2rem;\r\n height: 2rem;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.itsm-editor-btn:hover {\r\n background-color: #e9ecef;\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-editor-btn:active {\r\n background-color: #dee2e6;\r\n}\r\n\r\n.itsm-editor-separator {\r\n width: 1px;\r\n height: 1.5rem;\r\n background-color: #ced4da;\r\n margin: 0 0.25rem;\r\n}\r\n\r\n.itsm-editor-file-btn {\r\n padding: 0.25rem 0.5rem;\r\n font-size: 0.875rem;\r\n border: 1px solid #ced4da;\r\n border-radius: 3px;\r\n background-color: #ffffff;\r\n color: #495057;\r\n cursor: pointer;\r\n transition: background-color 0.2s, border-color 0.2s;\r\n font-family: inherit;\r\n margin-left: auto;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.itsm-editor-file-btn:hover {\r\n background-color: #e9ecef;\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-editor-content {\r\n min-height: 150px;\r\n max-height: 400px;\r\n overflow-y: auto;\r\n padding: 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n font-family: inherit;\r\n outline: none;\r\n}\r\n\r\n.itsm-editor-content:empty:before {\r\n content: attr(data-placeholder);\r\n color: #6c757d;\r\n pointer-events: none;\r\n}\r\n\r\n.itsm-editor-content:focus:empty:before {\r\n content: \'\';\r\n}\r\n\r\n.itsm-editor-content img {\r\n max-width: 100%;\r\n height: auto;\r\n margin: 0.5rem 0;\r\n}\r\n\r\n.itsm-editor-content ul,\r\n.itsm-editor-content ol {\r\n margin: 0.5rem 0;\r\n padding-left: 1.5rem;\r\n}\r\n\r\n.itsm-editor-content p {\r\n margin: 0.5rem 0;\r\n}\r\n\r\n.itsm-editor-content p:first-child {\r\n margin-top: 0;\r\n}\r\n\r\n.itsm-editor-content p:last-child {\r\n margin-bottom: 0;\r\n}\r\n\r\n/* Filter Input */\r\n.itsm-filter-input {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 0.875rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px 4px 0 0;\r\n border-bottom: none;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n margin-bottom: 0;\r\n}\r\n\r\n.itsm-filter-input:hover {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-filter-input:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n border-bottom-color: #ced4da;\r\n}\r\n\r\n.itsm-filter-input:disabled {\r\n background-color: #e9ecef;\r\n opacity: 1;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* Select */\r\n.itsm-select {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n}\r\n\r\n/* Select with filter input above */\r\n.itsm-form-group:has(.itsm-filter-input) .itsm-select {\r\n border-radius: 0 0 4px 4px;\r\n border-top: none;\r\n}\r\n\r\n.itsm-select:hover {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-select:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-select:disabled {\r\n background-color: #e9ecef;\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* Custom Select Dropdown */\r\n.itsm-custom-select {\r\n position: relative;\r\n width: 100%;\r\n}\r\n\r\n.itsm-select-display {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n user-select: none;\r\n}\r\n\r\n.itsm-select-display:hover:not(.disabled) {\r\n border-color: #adb5bd;\r\n}\r\n\r\n.itsm-select-display:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n border-color: #007bff;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.itsm-select-display.disabled {\r\n background-color: #e9ecef;\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n}\r\n\r\n.itsm-select-text {\r\n flex: 1;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.itsm-select-arrow {\r\n margin-left: 0.5rem;\r\n font-size: 0.75rem;\r\n color: #6c757d;\r\n transition: transform 0.2s;\r\n}\r\n\r\n.itsm-custom-select[data-disabled="true"] .itsm-select-arrow {\r\n opacity: 0.5;\r\n}\r\n\r\n.itsm-select-dropdown {\r\n position: absolute;\r\n top: 100%;\r\n left: 0;\r\n right: 0;\r\n background-color: #ffffff;\r\n border: 1px solid #ced4da;\r\n border-radius: 4px;\r\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n z-index: 1000;\r\n display: none;\r\n margin-top: 0.25rem;\r\n max-height: 300px;\r\n overflow: hidden;\r\n flex-direction: column;\r\n}\r\n\r\n.itsm-select-dropdown.open {\r\n display: flex;\r\n}\r\n\r\n.itsm-select-filter {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 0.875rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n background-color: #ffffff;\r\n border: none;\r\n border-bottom: 1px solid #e9ecef;\r\n font-family: inherit;\r\n box-sizing: border-box;\r\n outline: none;\r\n}\r\n\r\n.itsm-select-filter:focus {\r\n border-bottom-color: #007bff;\r\n}\r\n\r\n.itsm-select-filter:disabled {\r\n background-color: #f8f9fa;\r\n cursor: not-allowed;\r\n}\r\n\r\n.itsm-select-options {\r\n max-height: 250px;\r\n overflow-y: auto;\r\n padding: 0.25rem 0;\r\n}\r\n\r\n.itsm-select-option {\r\n padding: 0.5rem 0.75rem;\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: #495057;\r\n cursor: pointer;\r\n transition: background-color 0.15s;\r\n user-select: none;\r\n}\r\n\r\n.itsm-select-option:hover {\r\n background-color: #f8f9fa;\r\n}\r\n\r\n.itsm-select-option:active {\r\n background-color: #e9ecef;\r\n}\r\n\r\n.itsm-select-option[style*="display: none"] {\r\n display: none !important;\r\n}\r\n\r\n/* Button */\r\n.itsm-btn {\r\n padding: 0.5rem 1rem;\r\n font-size: 1rem;\r\n font-weight: 400;\r\n line-height: 1.5;\r\n border-radius: 4px;\r\n border: 1px solid transparent;\r\n cursor: pointer;\r\n transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n user-select: none;\r\n font-family: inherit;\r\n position: relative;\r\n overflow: hidden;\r\n}\r\n\r\n.itsm-btn:disabled {\r\n opacity: 0.6;\r\n cursor: default;\r\n}\r\n\r\n.itsm-btn-text {\r\n line-height: inherit;\r\n}\r\n\r\n/* Primary Button */\r\n.itsm-btn-primary {\r\n color: #ffffff;\r\n background-color: #007bff;\r\n border-color: #007bff;\r\n}\r\n\r\n.itsm-btn-primary:hover:not(:disabled) {\r\n background-color: #0056b3;\r\n border-color: #0056b3;\r\n}\r\n\r\n.itsm-btn-primary:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\r\n}\r\n\r\n.itsm-btn-primary:active:not(:disabled) {\r\n background-color: #004085;\r\n border-color: #004085;\r\n}\r\n\r\n/* Secondary Button */\r\n.itsm-btn-secondary {\r\n color: #ffffff;\r\n background-color: #6c757d;\r\n border-color: #6c757d;\r\n}\r\n\r\n.itsm-btn-secondary:hover:not(:disabled) {\r\n background-color: #5a6268;\r\n border-color: #545b62;\r\n}\r\n\r\n.itsm-btn-secondary:focus {\r\n outline: 0 none;\r\n outline-offset: 0;\r\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\r\n}\r\n\r\n.itsm-btn-secondary:active:not(:disabled) {\r\n background-color: #545b62;\r\n border-color: #4e555b;\r\n}\r\n\r\n/* File Input */\r\n.itsm-file-list {\r\n margin-top: 0.5rem;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.5rem;\r\n}\r\n\r\n.itsm-file-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 0.5rem;\r\n background-color: #f8f9fa;\r\n border-radius: 4px;\r\n font-size: 0.875rem;\r\n}\r\n\r\n.itsm-file-name {\r\n color: #495057;\r\n flex: 1;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.itsm-file-size {\r\n color: #6c757d;\r\n margin-left: 0.5rem;\r\n}\r\n\r\n/* Message/Toast Styles */\r\n.itsm-message {\r\n position: fixed;\r\n top: 20px;\r\n right: 20px;\r\n z-index: 10000;\r\n padding: 1rem 1.5rem;\r\n border-radius: 4px;\r\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n min-width: 300px;\r\n max-width: 500px;\r\n transform: translateX(400px);\r\n transition: transform 0.3s ease;\r\n font-family: inherit;\r\n font-size: 0.875rem;\r\n}\r\n\r\n.itsm-message.itsm-message-show {\r\n transform: translateX(0);\r\n}\r\n\r\n.itsm-message-success {\r\n background-color: #d4edda;\r\n color: #155724;\r\n border: 1px solid #c3e6cb;\r\n}\r\n\r\n.itsm-message-error {\r\n background-color: #f8d7da;\r\n color: #721c24;\r\n border: 1px solid #f5c6cb;\r\n}\r\n\r\n.itsm-message-info {\r\n background-color: #d1ecf1;\r\n color: #0c5460;\r\n border: 1px solid #bee5eb;\r\n}\r\n\r\n/* Responsive */\r\n@media (max-width: 768px) {\r\n .itsm-modal-container {\r\n max-width: 95%;\r\n max-height: 95vh;\r\n }\r\n\r\n .itsm-form-row {\r\n flex-direction: column;\r\n }\r\n\r\n .itsm-form-group-half {\r\n flex: none;\r\n }\r\n\r\n .itsm-modal-header,\r\n .itsm-modal-content,\r\n .itsm-modal-footer {\r\n padding: 1rem;\r\n }\r\n}',""]);const o=i},890:(e,t,n)=>{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function i(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach(function(t){c(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function c(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var c=r&&r.prototype instanceof a?r:a,l=Object.create(c.prototype);return d(l,"_invoke",function(n,r,i){var o,a,c,l=0,d=i||[],u=!1,f={p:0,n:0,v:e,a:m,f:m.bind(e,4),d:function(t,n){return o=t,a=0,c=e,f.n=n,s}};function m(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],m=f.p,p=o[2];n>3?(i=p===r)&&(c=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=m&&((i=n<2&&m<o[1])?(a=0,f.v=r,f.n=o[1]):m<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,f.n=p,a=0))}if(i||n>1)return s;throw u=!0,r}return function(i,d,p){if(l>1)throw TypeError("Generator is already running");for(u&&1===d&&m(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(f.n=-1),m(a,c)):f.n=c:f.v=c);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,a<2&&(a=0)}else 1===a&&(t=o.return)&&t.call(o),a<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(u=f.n<0)?c:n.call(r,f))!==s)break}catch(t){o=e,a=1,c=t}finally{l=1}}return{value:t,done:u}}}(n,i,o),!0),l}var s={};function a(){}function c(){}function u(){}t=Object.getPrototypeOf;var f=[][r]?t(t([][r]())):(d(t={},r,function(){return this}),t),m=u.prototype=a.prototype=Object.create(f);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,d(e,i,"GeneratorFunction")),e.prototype=Object.create(m),e}return c.prototype=u,d(m,"constructor",u),d(u,"constructor",c),c.displayName="GeneratorFunction",d(u,i,"GeneratorFunction"),d(m),d(m,i,"Generator"),d(m,r,function(){return this}),d(m,"toString",function(){return"[object Generator]"}),(l=function(){return{w:o,m:p}})()}function d(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}d=function(e,t,n,r){function o(t,n){d(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},d(e,t,n,r)}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,f(r.key),r)}}function f(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=r(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==r(t)?t:t+""}function m(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function p(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){m(o,r,i,s,a,"next",e)}function a(e){m(o,r,i,s,a,"throw",e)}s(void 0)})}}n.d(t,{A:()=>v}),e=n.hmd(e);var g=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function h(){return b.apply(this,arguments)}function b(){return(b=p(l().m(function e(){var t;return l().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=g()).cache){e.n=1;break}return e.a(2,t.cache);case 1:if(null===t.loadingPromise){e.n=2;break}return e.a(2,t.loadingPromise);case 2:return t.loadingPromise=p(l().m(function e(){var n,r,i,o,s,a,c,d;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:n=[],r=0,i=["/assets/config/config.json","./assets/config/config.json","assets/config/config.json","/node_modules/itsm-widget/dist/itsm-widget-config.json","./node_modules/itsm-widget/dist/itsm-widget-config.json","node_modules/itsm-widget/dist/itsm-widget-config.json","/assets/itsm-widget-config.json","./assets/itsm-widget-config.json","/itsm-widget-config.json","./itsm-widget-config.json","assets/itsm-widget-config.json","itsm-widget-config.json"];case 1:if(!(r<i.length)){e.n=8;break}return o=i[r],n.push(o),e.p=2,e.n=3,fetch(o);case 3:if(s=e.v,!s.ok){e.n=5;break}return e.n=4,s.json();case 4:return a=e.v,t.cache=a,console.log("[ITSMAPIService] ✅ Loaded config from: ".concat(o)),e.a(2,a);case 5:e.n=7;break;case 6:return e.p=6,d=e.v,e.a(3,7);case 7:r++,e.n=1;break;case 8:throw c="File itsm-widget-config.json not found. Đã thử các vị trí: ".concat(n.join(", ")),console.error("[ITSMAPIService] ❌ Cannot load itsm-widget-config.json"),console.error("[ITSMAPIService] Tried locations:",n),console.error("\n[ITSMAPIService] 📖 Hướng dẫn khắc phục:"),console.error("1. Tạo file config tại: src/assets/config/config.json"),console.error("2. Thêm nội dung với một trong các format sau:"),console.error(' - { "url": { "apiITSMUrl": "http://your-api-url" } }'),console.error(' - { "apiITSMUrl": "http://your-api-url" }'),console.error(' - { "apiBaseUrl": "http://your-api-url" }'),console.error("3. Hoặc chỉnh sửa file: node_modules/itsm-widget/dist/itsm-widget-config.json"),console.error("4. Widget hỗ trợ cả cấu trúc lồng nhau (url.apiITSMUrl) và cấu trúc phẳng"),new Error(c);case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var y=function(){return e=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.authToken=t.authToken||t.apiToken||"",this.baseUrl="",this._baseUrlPromise=this._initializeBaseUrl()},t=[{key:"_initializeBaseUrl",value:(b=p(l().m(function e(){var t,n,r;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,h();case 1:if(t=e.v,n=null,t.url&&(n=t.url.apiITSMUrl||t.url.apiBaseUrl),n||(n=t.apiITSMUrl||t.apiBaseUrl),n){e.n=2;break}throw new Error("File config không có apiITSMUrl hoặc apiBaseUrl. Kiểm tra config.url.apiITSMUrl hoặc config.apiITSMUrl");case 2:return this.baseUrl=n,e.a(2,this.baseUrl);case 3:throw e.p=3,r=e.v,console.error("[ITSMAPIService] ❌ Không thể load apiBaseUrl:",r.message),new Error("Không thể load apiBaseUrl: ".concat(r.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(){return b.apply(this,arguments)})},{key:"_ensureBaseUrl",value:(g=p(l().m(function e(){return l().w(function(e){for(;;)switch(e.n){case 0:if(this.baseUrl||!this._baseUrlPromise){e.n=1;break}return e.n=1,this._baseUrlPromise;case 1:if(this.baseUrl){e.n=2;break}throw new Error("baseUrl is required. Please ensure itsm-widget-config.json exists and contains apiBaseUrl.");case 2:return e.a(2)}},e,this)})),function(){return g.apply(this,arguments)})},{key:"buildHeaders",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"application/json",t={};return this.authToken&&(t.Authorization="Bearer ".concat(this.authToken)),"multipart/form-data"!==e&&(t["Content-Type"]=e),t}},{key:"createRequest",value:(m=p(l().m(function e(t){var n,r,i,o,s;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/send"),r={request:{requester:t.requester||{name:""},assets:t.assets||[],category:t.category||null,group:t.group||null,subcategory:t.subcategory||null,technician:t.technician||null,item:t.item||null,priority:t.priority||null,subject:t.subject||"",description:t.description||"",site:t.site||null,attachments:t.attachments||[],udf_fields:t.udf_fields||{},template:t.template||null,zia_properties:t.zia_properties||{}}},e.p=2,e.n=3,fetch(n,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(r)});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error creating request:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return m.apply(this,arguments)})},{key:"uploadAttachment",value:(f=p(l().m(function e(t,n){var r,i,o,s,a;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return r="".concat(this.baseUrl,"/spcit/").concat(t,"/upload"),i=new FormData,(Array.isArray(n)?n:[n]).forEach(function(e){e instanceof File&&i.append("files",e)}),e.p=2,e.n=3,fetch(r,{method:"PUT",headers:this.buildHeaders("multipart/form-data"),body:i});case 3:return o=e.v,e.n=4,o.json();case 4:if(s=e.v,o.ok){e.n=5;break}throw new Error(s.error||s.message||"HTTP error! status: ".concat(o.status));case 5:return e.a(2,s);case 6:throw e.p=6,a=e.v,console.error("Error uploading attachment:",a),a;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e,t){return f.apply(this,arguments)})},{key:"createRequestWithAttachments",value:(d=p(l().m(function e(t){var n,r,i,o,s,c,d=arguments;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return n=d.length>1&&void 0!==d[1]?d[1]:[],e.p=1,e.n=2,this.createRequest(t);case 2:if(i=e.v,!(n&&n.length>0&&null!==(r=i.request)&&void 0!==r&&r.id)){e.n=6;break}return e.p=3,e.n=4,this.uploadAttachment(i.request.id,n);case 4:return o=e.v,e.a(2,a(a({},i),{},{uploadResponse:o}));case 5:return e.p=5,s=e.v,console.warn("Request created but file upload failed:",s),e.a(2,a(a({},i),{},{uploadError:s.message}));case 6:return e.a(2,i);case 7:throw e.p=7,c=e.v,console.error("Error creating request with attachments:",c),c;case 8:return e.a(2)}},e,this,[[3,5],[1,7]])})),function(e){return d.apply(this,arguments)})},{key:"getRequest",value:(c=p(l().m(function e(t){var n,r,i,o,s;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/ticket/").concat(t),e.p=2,(r=this.buildHeaders("application/json")).Accept="application/json",e.n=3,fetch(n,{method:"POST",headers:r,body:JSON.stringify({request_id:t})});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error getting request:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return c.apply(this,arguments)})},{key:"getAllCategories",value:(s=p(l().m(function e(){var t,n,r,o,s,a,c,d,u,f,m,p,g,h,b,y;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:t="".concat(this.baseUrl,"/spcit/categories"),n=[],r=null,o=1,s=1,a=100,c=!0,d=null,u=null,f=0;case 2:if(!c){e.n=9;break}return f++,m={list_info:{start_index:o,page:s,row_count:a,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=3,e.n=4,fetch(t,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(m)});case 4:return p=e.v,e.n=5,p.json();case 5:if(g=e.v,p.ok){e.n=6;break}throw new Error(g.error||g.message||"HTTP error! status: ".concat(p.status));case 6:1===f&&g.list_info&&g.list_info.total_count&&(r=g.list_info.total_count,d=g.list_info,u=g.response_status,console.log("[ITSMAPIService] Total categories: ".concat(r))),g.categories&&Array.isArray(g.categories)&&(n.push.apply(n,i(g.categories)),console.log("[ITSMAPIService] Call #".concat(f," (start_index: ").concat(o,"): Loaded ").concat(g.categories.length," categories. Total so far: ").concat(n.length))),g.list_info?(h=g.list_info.has_more_rows,b=o+a,console.log("[ITSMAPIService] Response row_count: ".concat(g.list_info.row_count,", Using request row_count: ").concat(a," for next start_index calculation")),!1===h?(c=!1,console.log("[ITSMAPIService] No more rows (has_more_rows = false)")):null!==r&&b>r?(c=!1,console.log("[ITSMAPIService] Next start_index (".concat(b,") exceeds total_count (").concat(r,")"))):(o=b,s++,console.log("[ITSMAPIService] Continue with start_index: ".concat(o,", page: ").concat(s)))):(c=!1,console.log("[ITSMAPIService] No list_info in response, stopping")),e.n=8;break;case 7:throw e.p=7,y=e.v,console.error("[ITSMAPIService] Error getting categories (call #".concat(f,"):"),y),y;case 8:e.n=2;break;case 9:return console.log("[ITSMAPIService] Successfully fetched ".concat(n.length," categories in ").concat(f," API calls")),e.a(2,{categories:n,list_info:d,response_status:u})}},e,this,[[3,7]])})),function(){return s.apply(this,arguments)})},{key:"getSubcategoriesByCategoryId",value:(o=p(l().m(function e(t){var n,r,i,o,s;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/categories/").concat(t,"/subcategories"),r={list_info:{start_index:0,row_count:100,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=2,e.n=3,fetch(n,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(r)});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error getting subcategories:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return o.apply(this,arguments)})},{key:"getItemsBySubcategoryId",value:(r=p(l().m(function e(t){var n,r,i,o,s;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/subcategories/").concat(t,"/items"),r={list_info:{start_index:0,row_count:100,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=2,e.n=3,fetch(n,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(r)});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error getting items:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return r.apply(this,arguments)})},{key:"mapPriority",value:function(e){return{low:"Thấp",medium:"Trung bình",high:"Cao",none:"Chưa lựa chọn"}[e]||"Chưa lựa chọn"}},{key:"mapCategory",value:function(e){return{hardware:"A01A00 - Quản lý an toàn thông tin",software:"Software Category",network:"Network Category",account:"Account Category",other:"Other Category"}[e]||null}},{key:"buildRequestData",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.category||this.mapCategory(e.category),r=t.subcategory||e.subcategory||null,i=t.item||e.item||null,o=t.template||n||null,s=t.requesterName||e.requester||e.contact||"",a=t.site||e.site||"";return{requester:{name:s},category:n?{name:n}:null,subcategory:r?{name:r}:null,priority:{name:this.mapPriority(e.priority||"none")},subject:e.title||"",description:e.description||"",site:a?{name:a}:null,item:i?{name:i}:null,template:o?{name:o}:null,udf_fields:t.udf_fields||{},zia_properties:t.zia_properties||{},assets:[],attachments:[],group:null,technician:null}}}],t&&u(e.prototype,t),n&&u(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,o,s,c,d,f,m,g,b}();e.exports&&(e.exports=y),"undefined"!=typeof window&&(window.ITSMAPIService=y);const v=y}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r](o,o.exports,n),o.loaded=!0,o.exports}return n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0,n(322)})());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "itsm-widget",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "ITSM Request Widget - Standalone HTML plugin với native HTML/CSS, tích hợp vào MVC, Angular, React, Vue, PHP, Java và bất kỳ web project nào",
5
5
  "main": "dist/itsm-widget.min.js",
6
6
  "style": "dist/itsm-widget.min.css",