itsm-widget 1.0.7 → 1.0.8

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.
@@ -142,31 +142,43 @@ Thêm scripts và styles vào `angular.json`:
142
142
 
143
143
  **⚠️ QUAN TRỌNG:** File `itsm-widget-config.json` là **BẮT BUỘC** để widget hoạt động. Widget sẽ tự động load `apiBaseUrl` từ file này.
144
144
 
145
- **Widget sẽ tự động tìm file ở các vị trí sau (theo thứ tự ưu tiên):**
146
- 1. `/assets/itsm-widget-config.json` - Angular assets folder (khuyến nghị cho production)
147
- 2. `/node_modules/itsm-widget/dist/itsm-widget-config.json` - node_modules (hoạt động trong development)
148
- 3. Các vị trí khác...
145
+ **✅ Cách đơn giản nhất (Khuyến nghị):**
149
146
 
150
- **Cách 1: Sử dụng trực tiếp từ node_modules (Development - Khuyến nghị)**
147
+ Sau khi `npm install itsm-widget`, widget sẽ **tự động tìm file** tại `node_modules/itsm-widget/dist/itsm-widget-config.json`.
151
148
 
152
- Trong môi trường development (`ng serve`), widget có thể tự động tìm file từ `node_modules/itsm-widget/dist/itsm-widget-config.json` mà không cần copy.
149
+ **Chỉ cần:**
153
150
 
154
- **Chỉ cần chỉnh sửa file trong node_modules:**
155
- ```bash
156
- # Mở file để chỉnh sửa
157
- code node_modules/itsm-widget/dist/itsm-widget-config.json
158
- # hoặc
159
- notepad node_modules\itsm-widget\dist\itsm-widget-config.json
160
- ```
151
+ 1. **Chỉnh sửa file config trong node_modules:**
152
+ ```bash
153
+ # Mở file để chỉnh sửa
154
+ code node_modules/itsm-widget/dist/itsm-widget-config.json
155
+ # hoặc trên Windows
156
+ notepad node_modules\itsm-widget\dist\itsm-widget-config.json
157
+ ```
158
+
159
+ 2. **Cập nhật `apiBaseUrl`:**
160
+ ```json
161
+ {
162
+ "apiBaseUrl": "http://localhost:2411"
163
+ }
164
+ ```
165
+
166
+ 3. **Chạy `ng serve`** - Widget sẽ tự động tìm và load file!
161
167
 
162
- **Lưu ý:**
163
- - File trong `node_modules` sẽ bị mất khi chạy `npm install` lại
164
- - Chỉ hoạt động trong development mode (`ng serve`)
165
- - **Không hoạt động trong production build** (`ng build --prod`)
168
+ **Lưu ý:**
169
+ - Hoạt động ngay trong development mode (`ng serve`)
170
+ - Không cần copy file hay cấu hình gì thêm
171
+ - ⚠️ File trong `node_modules` sẽ bị reset khi chạy `npm install` lại (cần chỉnh sửa lại)
172
+ - ⚠️ Để hoạt động trong production, xem "Cách 2" bên dưới
173
+
174
+ **Widget sẽ tự động tìm file ở các vị trí sau (theo thứ tự ưu tiên):**
175
+ 1. `/node_modules/itsm-widget/dist/itsm-widget-config.json` - **Ưu tiên nhất** (development)
176
+ 2. `/assets/itsm-widget-config.json` - Angular assets folder (production)
177
+ 3. Các vị trí khác...
166
178
 
167
- **Cách 2: Copy vào assets (Production - Khuyến nghị)**
179
+ **Cách 2: Copy vào assets (Chỉ cần cho Production)**
168
180
 
169
- Để hoạt động trong production, copy file vào `src/assets/`:
181
+ Nếu muốn hoạt động trong production build (`ng build --prod`), copy file vào `src/assets/`:
170
182
 
171
183
  ```bash
172
184
  # Copy file config từ package vào assets
@@ -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),m={css:o[1],media:o[2],sourceMap:o[3]};-1!==u?(s[u].references++,s[u].updater(m)):s.push({identifier:d,updater:g(m,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 m(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 f(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=m.bind(null,n,o,!1),i=m.bind(null,n,o,!0)}else n=l(t),r=f.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:()=>_});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",m="C - The Business/Customer Service Catalog",f="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"];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,m={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,a=0,c=e,m.n=n,s}};function f(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],f=m.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]<=f&&((i=n<2&&f<o[1])?(a=0,m.v=r,m.n=o[1]):f<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,m.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&&f(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(m.n=-1),f(a,c)):m.n=c:m.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=m.n<0)?c:n.call(r,m))!==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 m(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}})()}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 x(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 S(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 q(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 T=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function A(){return M.apply(this,arguments)}function M(){return(M=q(g().m(function e(){var t;return g().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=T()).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=q(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/itsm-widget-config.json","./assets/itsm-widget-config.json","/node_modules/itsm-widget/dist/itsm-widget-config.json","./node_modules/itsm-widget/dist/itsm-widget-config.json","/itsm-widget-config.json","./itsm-widget-config.json","assets/itsm-widget-config.json","node_modules/itsm-widget/dist/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).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),new Error(c);case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var j=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=q(g().m(function e(t){var n,r,i;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)&&n.apiBaseUrl){e.n=2;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 2:t.apiBaseUrl,r=x(t,h),this.config=this._buildConfig(v(v({},n),r)),this._initWidget(),e.n=4;break;case 3:throw e.p=3,i=e.v,console.error("[ITSMWidget] ❌ Không thể load config:",i.message),new Error("Không thể load config: ".concat(i.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=q(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=q(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=q(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=q(g().m(function e(t,n,r){var i,o,s,a,c,l,d,u,m,f,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,f=e.v,console.error("[ITSMWidget] Error loading subcategories:",f),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"),(m=n.querySelector(".itsm-select-filter"))&&(m.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=q(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=q(g().m(function e(t){var n,r,i,o,s,a,c,l,d,u,m,f,p,h,b,y,v,w,x=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"),m=u.querySelector(".itsm-btn-text"),f=u.querySelector(".itsm-btn-loading"),m.style.display="none",f.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(){x.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,m.style.display="inline",f.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=q(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:m||"C - The Business/Customer Service Catalog",udf_pick_305:t.udf_pick_305||null,udf_pick_306:t.udf_pick_306||f||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&&S(e.prototype,t),n&&S(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,i,o,s,p,b}();e.exports&&(e.exports=j,e.exports.default=j);const _=j;"undefined"!=typeof window&&(window.ITSMWidget=j,window.ITSMWidget.default||(window.ITSMWidget.default=j),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 j(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,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 o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach(function(t){s(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function s(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var a=r&&r.prototype instanceof l?r:l,d=Object.create(a.prototype);return c(d,"_invoke",function(n,r,i){var o,a,c,l=0,d=i||[],u=!1,m={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,a=0,c=e,m.n=n,s}};function f(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],f=m.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]<=f&&((i=n<2&&f<o[1])?(a=0,m.v=r,m.n=o[1]):f<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,m.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&&f(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(m.n=-1),f(a,c)):m.n=c:m.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=m.n<0)?c:n.call(r,m))!==s)break}catch(t){o=e,a=1,c=t}finally{l=1}}return{value:t,done:u}}}(n,i,o),!0),d}var s={};function l(){}function d(){}function u(){}t=Object.getPrototypeOf;var m=[][r]?t(t([][r]())):(c(t={},r,function(){return this}),t),f=u.prototype=l.prototype=Object.create(m);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,c(e,i,"GeneratorFunction")),e.prototype=Object.create(f),e}return d.prototype=u,c(f,"constructor",u),c(u,"constructor",d),d.displayName="GeneratorFunction",c(u,i,"GeneratorFunction"),c(f),c(f,i,"Generator"),c(f,r,function(){return this}),c(f,"toString",function(){return"[object Generator]"}),(a=function(){return{w:o,m:p}})()}function c(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}c=function(e,t,n,r){function o(t,n){c(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))},c(e,t,n,r)}function l(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,d(r.key),r)}}function d(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 u(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 m(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){u(o,r,i,s,a,"next",e)}function a(e){u(o,r,i,s,a,"throw",e)}s(void 0)})}}n.d(t,{A:()=>b}),e=n.hmd(e);var f=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function p(){return h.apply(this,arguments)}function h(){return(h=m(a().m(function e(){var t;return a().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=f()).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=m(a().m(function e(){var n,r,i,o,s,c,l,d;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:n=[],r=0,i=["/assets/itsm-widget-config.json","./assets/itsm-widget-config.json","/node_modules/itsm-widget/dist/itsm-widget-config.json","./node_modules/itsm-widget/dist/itsm-widget-config.json","/itsm-widget-config.json","./itsm-widget-config.json","assets/itsm-widget-config.json","node_modules/itsm-widget/dist/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).ok){e.n=5;break}return e.n=4,s.json();case 4:return c=e.v,t.cache=c,console.log("[ITSMAPIService] ✅ Loaded config from: ".concat(o)),e.a(2,c);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 l="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),new Error(l);case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var g=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:(g=m(a().m(function e(){var t,n;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,p();case 1:if((t=e.v)&&t.apiBaseUrl){e.n=2;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 2:return this.baseUrl=t.apiBaseUrl,e.a(2,this.baseUrl);case 3:throw e.p=3,n=e.v,console.error("[ITSMAPIService] ❌ Không thể load apiBaseUrl:",n.message),new Error("Không thể load apiBaseUrl: ".concat(n.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(){return g.apply(this,arguments)})},{key:"_ensureBaseUrl",value:(h=m(a().m(function e(){return a().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:(f=m(a().m(function e(t){var n,r,i,o,s;return a().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 f.apply(this,arguments)})},{key:"uploadAttachment",value:(u=m(a().m(function e(t,n){var r,i,o,s,c;return a().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,c=e.v,console.error("Error uploading attachment:",c),c;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e,t){return u.apply(this,arguments)})},{key:"createRequestWithAttachments",value:(d=m(a().m(function e(t){var n,r,i,s,c,l,d=arguments;return a().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 s=e.v,e.a(2,o(o({},i),{},{uploadResponse:s}));case 5:return e.p=5,c=e.v,console.warn("Request created but file upload failed:",c),e.a(2,o(o({},i),{},{uploadError:c.message}));case 6:return e.a(2,i);case 7:throw e.p=7,l=e.v,console.error("Error creating request with attachments:",l),l;case 8:return e.a(2)}},e,this,[[3,5],[1,7]])})),function(e){return d.apply(this,arguments)})},{key:"getRequest",value:(c=m(a().m(function e(t){var n,r,i,o,s;return a().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=m(a().m(function e(){var t,n,r,i,o;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return t="".concat(this.baseUrl,"/spcit/categories"),n={list_info:{start_index:1,page:1,row_count:100,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=2,e.n=3,fetch(t,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(n)});case 3:return r=e.v,e.n=4,r.json();case 4:if(i=e.v,r.ok){e.n=5;break}throw new Error(i.error||i.message||"HTTP error! status: ".concat(r.status));case 5:return e.a(2,i);case 6:throw e.p=6,o=e.v,console.error("Error getting categories:",o),o;case 7:return e.a(2)}},e,this,[[2,6]])})),function(){return s.apply(this,arguments)})},{key:"getSubcategoriesByCategoryId",value:(i=m(a().m(function e(t){var n,r,i,o,s;return a().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 i.apply(this,arguments)})},{key:"getItemsBySubcategoryId",value:(r=m(a().m(function e(t){var n,r,i,o,s;return a().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&&l(e.prototype,t),n&&l(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,i,s,c,d,u,f,h,g}();e.exports&&(e.exports=g),"undefined"!=typeof window&&(window.ITSMAPIService=g);const b=g}},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),m={css:o[1],media:o[2],sourceMap:o[3]};-1!==u?(s[u].references++,s[u].updater(m)):s.push({identifier:d,updater:g(m,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 m(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 f(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=m.bind(null,n,o,!1),i=m.bind(null,n,o,!0)}else n=l(t),r=f.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:()=>_});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",m="C - The Business/Customer Service Catalog",f="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"];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,m={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,a=0,c=e,m.n=n,s}};function f(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],f=m.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]<=f&&((i=n<2&&f<o[1])?(a=0,m.v=r,m.n=o[1]):f<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,m.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&&f(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(m.n=-1),f(a,c)):m.n=c:m.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=m.n<0)?c:n.call(r,m))!==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 m(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}})()}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 x(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 S(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 q(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 A=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function T(){return M.apply(this,arguments)}function M(){return(M=q(g().m(function e(){var t;return g().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=A()).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=q(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=["/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. Đảm bảo đã chạy: npm install itsm-widget"),console.error("2. File config sẽ tự động được tìm tại: node_modules/itsm-widget/dist/itsm-widget-config.json"),console.error("3. Chỉnh sửa file đó để cập nhật apiBaseUrl"),console.error("4. Nếu vẫn lỗi, kiểm tra Angular có serve file từ node_modules không"),console.error(" (Trong development mode, Angular thường serve file từ node_modules)"),new Error(c);case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var j=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=q(g().m(function e(t){var n,r,i;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,T();case 1:if((n=e.v)&&n.apiBaseUrl){e.n=2;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 2:t.apiBaseUrl,r=x(t,h),this.config=this._buildConfig(v(v({},n),r)),this._initWidget(),e.n=4;break;case 3:throw e.p=3,i=e.v,console.error("[ITSMWidget] ❌ Không thể load config:",i.message),new Error("Không thể load config: ".concat(i.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=q(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=q(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=q(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=q(g().m(function e(t,n,r){var i,o,s,a,c,l,d,u,m,f,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,f=e.v,console.error("[ITSMWidget] Error loading subcategories:",f),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"),(m=n.querySelector(".itsm-select-filter"))&&(m.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=q(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=q(g().m(function e(t){var n,r,i,o,s,a,c,l,d,u,m,f,p,h,b,y,v,w,x=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"),m=u.querySelector(".itsm-btn-text"),f=u.querySelector(".itsm-btn-loading"),m.style.display="none",f.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(){x.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,m.style.display="inline",f.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=q(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:m||"C - The Business/Customer Service Catalog",udf_pick_305:t.udf_pick_305||null,udf_pick_306:t.udf_pick_306||f||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&&S(e.prototype,t),n&&S(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,i,o,s,p,b}();e.exports&&(e.exports=j,e.exports.default=j);const _=j;"undefined"!=typeof window&&(window.ITSMWidget=j,window.ITSMWidget.default||(window.ITSMWidget.default=j),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 j(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,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 o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach(function(t){s(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function s(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var a=r&&r.prototype instanceof l?r:l,d=Object.create(a.prototype);return c(d,"_invoke",function(n,r,i){var o,a,c,l=0,d=i||[],u=!1,m={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,a=0,c=e,m.n=n,s}};function f(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],f=m.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]<=f&&((i=n<2&&f<o[1])?(a=0,m.v=r,m.n=o[1]):f<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,m.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&&f(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(m.n=-1),f(a,c)):m.n=c:m.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=m.n<0)?c:n.call(r,m))!==s)break}catch(t){o=e,a=1,c=t}finally{l=1}}return{value:t,done:u}}}(n,i,o),!0),d}var s={};function l(){}function d(){}function u(){}t=Object.getPrototypeOf;var m=[][r]?t(t([][r]())):(c(t={},r,function(){return this}),t),f=u.prototype=l.prototype=Object.create(m);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,c(e,i,"GeneratorFunction")),e.prototype=Object.create(f),e}return d.prototype=u,c(f,"constructor",u),c(u,"constructor",d),d.displayName="GeneratorFunction",c(u,i,"GeneratorFunction"),c(f),c(f,i,"Generator"),c(f,r,function(){return this}),c(f,"toString",function(){return"[object Generator]"}),(a=function(){return{w:o,m:p}})()}function c(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}c=function(e,t,n,r){function o(t,n){c(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))},c(e,t,n,r)}function l(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,d(r.key),r)}}function d(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 u(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 m(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){u(o,r,i,s,a,"next",e)}function a(e){u(o,r,i,s,a,"throw",e)}s(void 0)})}}n.d(t,{A:()=>b}),e=n.hmd(e);var f=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function p(){return h.apply(this,arguments)}function h(){return(h=m(a().m(function e(){var t;return a().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=f()).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=m(a().m(function e(){var n,r,i,o,s,c,l,d;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:n=[],r=0,i=["/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 c=e.v,t.cache=c,console.log("[ITSMAPIService] ✅ Loaded config from: ".concat(o)),e.a(2,c);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 l="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. Đảm bảo đã chạy: npm install itsm-widget"),console.error("2. File config sẽ tự động được tìm tại: node_modules/itsm-widget/dist/itsm-widget-config.json"),console.error("3. Chỉnh sửa file đó để cập nhật apiBaseUrl"),console.error("4. Nếu vẫn lỗi, kiểm tra Angular có serve file từ node_modules không"),console.error(" (Trong development mode, Angular thường serve file từ node_modules)"),new Error(l);case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var g=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:(g=m(a().m(function e(){var t,n;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,p();case 1:if((t=e.v)&&t.apiBaseUrl){e.n=2;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 2:return this.baseUrl=t.apiBaseUrl,e.a(2,this.baseUrl);case 3:throw e.p=3,n=e.v,console.error("[ITSMAPIService] ❌ Không thể load apiBaseUrl:",n.message),new Error("Không thể load apiBaseUrl: ".concat(n.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(){return g.apply(this,arguments)})},{key:"_ensureBaseUrl",value:(h=m(a().m(function e(){return a().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:(f=m(a().m(function e(t){var n,r,i,o,s;return a().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 f.apply(this,arguments)})},{key:"uploadAttachment",value:(u=m(a().m(function e(t,n){var r,i,o,s,c;return a().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,c=e.v,console.error("Error uploading attachment:",c),c;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e,t){return u.apply(this,arguments)})},{key:"createRequestWithAttachments",value:(d=m(a().m(function e(t){var n,r,i,s,c,l,d=arguments;return a().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 s=e.v,e.a(2,o(o({},i),{},{uploadResponse:s}));case 5:return e.p=5,c=e.v,console.warn("Request created but file upload failed:",c),e.a(2,o(o({},i),{},{uploadError:c.message}));case 6:return e.a(2,i);case 7:throw e.p=7,l=e.v,console.error("Error creating request with attachments:",l),l;case 8:return e.a(2)}},e,this,[[3,5],[1,7]])})),function(e){return d.apply(this,arguments)})},{key:"getRequest",value:(c=m(a().m(function e(t){var n,r,i,o,s;return a().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=m(a().m(function e(){var t,n,r,i,o;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return t="".concat(this.baseUrl,"/spcit/categories"),n={list_info:{start_index:1,page:1,row_count:100,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=2,e.n=3,fetch(t,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(n)});case 3:return r=e.v,e.n=4,r.json();case 4:if(i=e.v,r.ok){e.n=5;break}throw new Error(i.error||i.message||"HTTP error! status: ".concat(r.status));case 5:return e.a(2,i);case 6:throw e.p=6,o=e.v,console.error("Error getting categories:",o),o;case 7:return e.a(2)}},e,this,[[2,6]])})),function(){return s.apply(this,arguments)})},{key:"getSubcategoriesByCategoryId",value:(i=m(a().m(function e(t){var n,r,i,o,s;return a().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 i.apply(this,arguments)})},{key:"getItemsBySubcategoryId",value:(r=m(a().m(function e(t){var n,r,i,o,s;return a().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&&l(e.prototype,t),n&&l(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,i,s,c,d,u,f,h,g}();e.exports&&(e.exports=g),"undefined"!=typeof window&&(window.ITSMAPIService=g);const b=g}},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.0.7",
3
+ "version": "1.0.8",
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",