itsm-widget 1.0.7 → 1.0.9

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.
@@ -138,39 +138,62 @@ Thêm scripts và styles vào `angular.json`:
138
138
 
139
139
  ## ⚙️ Cấu hình
140
140
 
141
- ### Bước quan trọng: Cấu hình `itsm-widget-config.json` (BẮT BUỘC)
141
+ ### Bước quan trọng: Cấu hình API URL (BẮT BUỘC)
142
142
 
143
- **⚠️ QUAN TRỌNG:** File `itsm-widget-config.json` **BẮT BUỘC** để widget hoạt động. Widget sẽ tự động load `apiBaseUrl` từ file này.
143
+ **⚠️ QUAN TRỌNG:** Widget cần file config để lấy API URL. Widget sẽ tự động tìm file và hỗ trợ cả `apiITSMUrl` (ưu tiên) và `apiBaseUrl` (tương thích ngược).
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 1: Sử dụng file config riêng của bạn (Khuyến nghị)**
146
+
147
+ Tạo file `src/assets/config/config.json` với nội dung:
148
+
149
+ ```json
150
+ {
151
+ "apiITSMUrl": "http://localhost:2411"
152
+ }
153
+ ```
154
+
155
+ Widget sẽ tự động tìm và load file này (ưu tiên nhất).
149
156
 
150
- **Cách 1: Sử dụng trực tiếp từ node_modules (Development - Khuyến nghị)**
157
+ **✅ Cách 2: Sử dụng file config mặc định**
151
158
 
152
- Trong môi trường development (`ng serve`), widget thể tự động tìm file từ `node_modules/itsm-widget/dist/itsm-widget-config.json` mà không cần copy.
159
+ Sau khi `npm install itsm-widget`, widget sẽ tự động tìm file tại `node_modules/itsm-widget/dist/itsm-widget-config.json`.
153
160
 
154
- **Chỉ cần chỉnh sửa file trong node_modules:**
161
+ **Chỉnh sửa file config trong node_modules:**
155
162
  ```bash
156
163
  # Mở file để chỉnh sửa
157
164
  code node_modules/itsm-widget/dist/itsm-widget-config.json
158
- # hoặc
165
+ # hoặc trên Windows
159
166
  notepad node_modules\itsm-widget\dist\itsm-widget-config.json
160
167
  ```
161
168
 
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`)
169
+ **Cập nhật `apiBaseUrl`:**
170
+ ```json
171
+ {
172
+ "apiBaseUrl": "http://localhost:2411"
173
+ }
174
+ ```
166
175
 
167
- **Cách 2: Copy vào assets (Production - Khuyến nghị)**
176
+ **Widget sẽ tự động tìm file ở các vị trí sau (theo thứ tự ưu tiên):**
177
+ 1. `/assets/config/config.json` - **Ưu tiên nhất** (Angular custom config)
178
+ 2. `/node_modules/itsm-widget/dist/itsm-widget-config.json` - node_modules (development)
179
+ 3. `/assets/itsm-widget-config.json` - Angular assets folder
180
+ 4. Các vị trí khác...
168
181
 
169
- Để hoạt động trong production, copy file vào `src/assets/`:
182
+ **Hỗ trợ cả hai key:**
183
+ - `apiITSMUrl` - Ưu tiên sử dụng (khuyến nghị)
184
+ - `apiBaseUrl` - Tương thích ngược
170
185
 
171
- ```bash
172
- # Copy file config từ package vào assets
173
- cp node_modules/itsm-widget/dist/itsm-widget-config.json src/assets/itsm-widget-config.json
186
+ **Ví dụ file config:**
187
+ ```json
188
+ {
189
+ "apiITSMUrl": "http://10.170.210.202:2411"
190
+ }
191
+ ```
192
+ hoặc
193
+ ```json
194
+ {
195
+ "apiBaseUrl": "http://10.170.210.202:2411"
196
+ }
174
197
  ```
175
198
 
176
199
  **Cách 2: Copy thủ công**
@@ -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","apiITSMUrl"];function g(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var c=r&&r.prototype instanceof a?r:a,l=Object.create(c.prototype);return b(l,"_invoke",function(n,r,i){var o,a,c,l=0,d=i||[],u=!1,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 T(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){C(o,r,i,s,a,"next",e)}function a(e){C(o,r,i,s,a,"throw",e)}s(void 0)})}}var q=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function M(){return A.apply(this,arguments)}function A(){return(A=T(g().m(function e(){var t;return g().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=q()).cache){e.n=1;break}return e.a(2,t.cache);case 1:if(null===t.loadingPromise){e.n=2;break}return e.a(2,t.loadingPromise);case 2:return t.loadingPromise=T(g().m(function e(){var n,r,i,o,s,a,c,l;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:n=[],r=0,i=["/assets/config/config.json","./assets/config/config.json","assets/config/config.json","/node_modules/itsm-widget/dist/itsm-widget-config.json","./node_modules/itsm-widget/dist/itsm-widget-config.json","node_modules/itsm-widget/dist/itsm-widget-config.json","/assets/itsm-widget-config.json","./assets/itsm-widget-config.json","/itsm-widget-config.json","./itsm-widget-config.json","assets/itsm-widget-config.json","itsm-widget-config.json"];case 1:if(!(r<i.length)){e.n=8;break}return o=i[r],n.push(o),e.p=2,e.n=3,fetch(o);case 3:if(s=e.v,!s.ok){e.n=5;break}return e.n=4,s.json();case 4:return a=e.v,t.cache=a,console.log("[ITSMWidget] ✅ Loaded config from: ".concat(o)),e.a(2,a);case 5:e.n=7;break;case 6:return e.p=6,l=e.v,e.a(3,7);case 7:r++,e.n=1;break;case 8:throw c="File itsm-widget-config.json not found. Đã thử các vị trí: ".concat(n.join(", ")),console.error("[ITSMWidget] ❌ Cannot load itsm-widget-config.json"),console.error("[ITSMWidget] Tried locations:",n),console.error("\n[ITSMWidget] 📖 Hướng dẫn khắc phục:"),console.error("1. Tạo file config tại: src/assets/config/config.json"),console.error('2. Thêm nội dung: { "apiITSMUrl": "http://your-api-url" }'),console.error("3. Hoặc chỉnh sửa file: node_modules/itsm-widget/dist/itsm-widget-config.json"),console.error("4. Widget hỗ trợ cả apiITSMUrl (ưu tiên) và apiBaseUrl (tương thích ngược)"),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=T(g().m(function e(t){var n,r,i,o;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,M();case 1:if(n=e.v,r=n.apiITSMUrl||n.apiBaseUrl){e.n=2;break}throw new Error("File config không có apiITSMUrl hoặc apiBaseUrl");case 2:t.apiBaseUrl,t.apiITSMUrl,i=x(t,h),this.config=this._buildConfig(v(v({},n),{},{apiBaseUrl:r},i)),this._initWidget(),e.n=4;break;case 3:throw e.p=3,o=e.v,console.error("[ITSMWidget] ❌ Không thể load config:",o.message),new Error("Không thể load config: ".concat(o.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(e){return b.apply(this,arguments)})},{key:"_buildConfig",value:function(e){if(!e.apiBaseUrl)throw new Error("apiBaseUrl is required in itsm-widget-config.json");return v({apiBaseUrl:e.apiBaseUrl,authToken:e.authToken||e.apiToken||"",getAuthToken:e.getAuthToken||null,getRequesterName:e.getRequesterName||null,getSite:e.getSite||null,position:e.position||"bottom-right",iconText:e.iconText||"📝",iconImage:void 0!==e.iconImage?e.iconImage:"data:image/png;base64,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",iconColor:e.iconColor||"#335fb3",title:e.title||"Tạo phiếu yêu cầu ITSM",requesterName:e.requesterName||"",site:e.site||"",udf_fields:e.udf_fields||{}},e)}},{key:"_initWidget",value:function(){this.apiService=new a.A({baseUrl:this.config.apiBaseUrl,authToken:this.config.authToken}),this.isOpen=!1,this.widgetContainer=null,this.modalContainer=null,this.init()}},{key:"init",value:function(){this.createWidgetButton(),this.createModal(),this.attachEvents()}},{key:"createWidgetButton",value:function(){var e=document.createElement("div");e.id="itsm-widget-button",e.className="itsm-widget-button itsm-position-".concat(this.config.position);var t="";t=this.config.iconImage&&null!==this.config.iconImage?'<img src="'.concat(this.config.iconImage,'" alt="ITSM Widget" class="itsm-widget-icon-img" />'):this.config.iconText||"📝";var n=this.config.iconImage&&null!==this.config.iconImage?"":"background-color: ".concat(this.config.iconColor,";");e.style.borderColor=this.config.iconColor,e.innerHTML='\n <div class="itsm-widget-icon" style="'.concat(n,'">\n ').concat(t,"\n </div>\n "),document.body.appendChild(e),this.widgetContainer=e}},{key:"createModal",value:function(){var e=document.createElement("div");e.id="itsm-widget-modal",e.className="itsm-modal-overlay",e.innerHTML='\n <div class="itsm-modal-container" style="width: 50vw; max-width: 90vw;">\n <div class="itsm-modal-header">\n <span class="itsm-modal-title">'.concat(this.config.title,'</span>\n <div class="itsm-modal-header-icons">\n <button class="itsm-modal-close" aria-label="Đóng">\n <span>×</span>\n </button>\n </div>\n </div>\n <div class="itsm-modal-content">\n <form id="itsm-request-form" class="itsm-form">\n \n\n <div class="itsm-form-group">\n <label for="itsm-requester">\n Người yêu cầu <span class="itsm-required">*</span>\n </label>\n <input \n type="text" \n id="itsm-requester" \n name="requester" \n class="itsm-input" \n disabled\n placeholder=""\n value="').concat(this.config.requesterName||"",'"\n />\n </div>\n <div class="itsm-form-group">\n <label for="itsm-site">Đơn vị</label>\n <input \n type="text" \n id="itsm-site" \n name="site" \n class="itsm-input" \n disabled\n placeholder=""\n value="').concat(this.config.site||"",'"\n />\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-category">\n Danh mục dịch vụ <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-category">\n <input type="hidden" id="itsm-category" name="category" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">-- Chọn danh mục --</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm danh mục..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-subcategory">\n Dịch vụ con <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-subcategory" data-disabled="true">\n <input type="hidden" id="itsm-subcategory" name="subcategory" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm dịch vụ con..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-item">\n Chi tiết dịch vụ <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-item" data-disabled="true">\n <input type="hidden" id="itsm-item" name="item" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm chi tiết dịch vụ..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-row">\n <div class="itsm-form-group itsm-form-group-half">\n <label for="itsm-priority">\n Mức độ ưu tiên <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-priority" data-no-filter="true">\n <input type="hidden" id="itsm-priority" name="priority" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group itsm-form-group-half">\n <label for="itsm-udf-pick-305">Loại hỗ trợ</label>\n <div class="itsm-custom-select" data-select-id="itsm-udf-pick-305" data-no-filter="true">\n <input type="hidden" id="itsm-udf-pick-305" name="udf_pick_305">\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n </div>\n \n <div class="itsm-form-group">\n <label for="itsm-udf-pick-306">\n Loại thiết bị sử dụng <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-udf-pick-306" data-no-filter="true">\n <input type="hidden" id="itsm-udf-pick-306" name="udf_pick_306" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-title">\n Tiêu đề <span class="itsm-required">*</span>\n </label>\n <input \n type="text" \n id="itsm-title" \n name="title" \n class="itsm-input" \n required \n placeholder="Nhập tiêu đề phiếu yêu cầu"\n />\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-description-editor">\n Mô tả <span class="itsm-required">*</span>\n </label>\n <div class="itsm-editor-container">\n <div class="itsm-editor-toolbar">\n <button type="button" class="itsm-editor-btn" data-command="bold" title="Bold">\n <strong>B</strong>\n </button>\n <button type="button" class="itsm-editor-btn" data-command="italic" title="Italic">\n <em>I</em>\n </button>\n <button type="button" class="itsm-editor-btn" data-command="underline" title="Underline">\n <u>U</u>\n </button>\n <div class="itsm-editor-separator"></div>\n <button type="button" class="itsm-editor-btn" data-command="insertUnorderedList" title="Bullet List">• List</button>\n <button type="button" class="itsm-editor-btn" data-command="insertOrderedList" title="Numbered List">1. List</button>\n <div class="itsm-editor-separator"></div>\n <label class="itsm-editor-file-btn">\n 📎 Đính kèm file\n <input \n type="file" \n id="itsm-attachment" \n name="attachment" \n multiple\n style="display: none;"\n />\n </label>\n </div>\n <div \n id="itsm-description-editor" \n class="itsm-editor-content"\n contenteditable="true"\n data-placeholder="Nhập mô tả chi tiết yêu cầu..."\n ></div>\n <textarea \n id="itsm-description" \n name="description" \n style="display: none;"\n required\n ></textarea>\n <div id="itsm-file-list" class="itsm-file-list"></div>\n </div>\n </div>\n\n <div class="itsm-modal-footer">\n <button type="button" class="itsm-btn itsm-btn-secondary" id="itsm-cancel-btn">\n Hủy\n </button>\n <button type="submit" class="itsm-btn itsm-btn-primary" id="itsm-submit-btn">\n <span class="itsm-btn-text">Gửi Yêu Cầu</span>\n <span class="itsm-btn-loading" style="display: none;">Đang gửi...</span>\n </button>\n </div>\n </form>\n </div>\n </div>\n '),document.body.appendChild(e),this.modalContainer=e}},{key:"attachEvents",value:function(){var e=this;this.widgetContainer.addEventListener("click",function(){e.toggleModal()});var t=this.modalContainer.querySelector(".itsm-modal-close"),n=this.modalContainer.querySelector("#itsm-cancel-btn"),r=this.modalContainer;t&&t.addEventListener("click",function(){return e.closeModal()}),n&&n.addEventListener("click",function(){return e.closeModal()}),r.addEventListener("click",function(t){t.target===r&&e.closeModal()}),this.modalContainer.querySelector("#itsm-request-form").addEventListener("submit",function(t){return e.handleSubmit(t)}),this.modalContainer.querySelector("#itsm-attachment").addEventListener("change",function(t){return e.handleFileSelect(t)}),this.initEditor(),this.initCategoryDropdowns()}},{key:"initEditor",value:function(){var e=this.modalContainer.querySelector("#itsm-description-editor"),t=this.modalContainer.querySelector("#itsm-description"),n=this.modalContainer.querySelector(".itsm-editor-toolbar");e.addEventListener("input",function(){t.value=e.innerHTML,e.textContent.trim()?t.setCustomValidity(""):t.setCustomValidity("Mô tả là bắt buộc")}),e.addEventListener("focus",function(){""===e.textContent.trim()&&(e.innerHTML="")}),e.addEventListener("blur",function(){""===e.textContent.trim()&&(e.innerHTML="")}),n.querySelectorAll(".itsm-editor-btn[data-command]").forEach(function(n){n.addEventListener("click",function(r){r.preventDefault();var i=n.getAttribute("data-command");e.focus(),document.execCommand(i,!1,null),t.value=e.innerHTML})})}},{key:"initCategoryDropdowns",value:function(){var e=this,t=this.modalContainer.querySelector('[data-select-id="itsm-category"]'),n=this.modalContainer.querySelector('[data-select-id="itsm-subcategory"]'),r=this.modalContainer.querySelector('[data-select-id="itsm-item"]'),i=this.modalContainer.querySelector('[data-select-id="itsm-priority"]'),o=this.modalContainer.querySelector('[data-select-id="itsm-udf-pick-305"]'),s=this.modalContainer.querySelector('[data-select-id="itsm-udf-pick-306"]');this.categoryMap=new Map,this.subcategoryMap=new Map,this.allCategories=[],this.allSubcategories=[],this.allItems=[],this._initCustomSelect(t,"category"),this._initCustomSelect(n,"subcategory"),this._initCustomSelect(r,"item"),this._initCustomSelect(i,"priority"),this._initCustomSelect(o,"udf_pick_305"),this._initCustomSelect(s,"udf_pick_306"),this._populateCustomSelect(i,[{value:"low",text:"Thấp"},{value:"medium",text:"Trung bình"},{value:"high",text:"Cao"}],"Chưa lựa chọn");var a=c.map(function(e){return{value:e,text:e}});this._populateCustomSelect(o,a,"Chưa lựa chọn"),this._populateCustomSelect(s,[{value:"Máy tính",text:"Máy tính"},{value:"Máy tính bảng",text:"Máy tính bảng"},{value:"Điện thoại",text:"Điện thoại"},{value:"Laptop",text:"Laptop"}],"Chưa lựa chọn"),this._loadCategories(t,n,r),t&&t.querySelector('input[type="hidden"]').addEventListener("change",function(){var t=T(g().m(function t(i){var o,s;return g().w(function(t){for(;;)switch(t.n){case 0:if(o=i.target.value,e._resetCustomSelect(n,"Chưa lựa chọn",!0),e._resetCustomSelect(r,"Chưa lựa chọn",!0),!o){t.n=1;break}if(!(s=e.categoryMap.get(o))||!s.id){t.n=1;break}return t.n=1,e._loadSubcategories(s.id,n,r);case 1:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}()),n&&n.querySelector('input[type="hidden"]').addEventListener("change",function(){var t=T(g().m(function t(n){var i,o;return g().w(function(t){for(;;)switch(t.n){case 0:if(i=n.target.value,e._resetCustomSelect(r,"Chưa lựa chọn",!i),!i){t.n=1;break}if(!(o=e.subcategoryMap.get(i))||!o.id){t.n=1;break}return t.n=1,e._loadItems(o.id,r);case 1:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}},{key:"_initCustomSelect",value:function(e,t){var n=this;if(e){var r=e.querySelector(".itsm-select-display"),i=(e.querySelector(".itsm-select-dropdown"),e.querySelector(".itsm-select-filter")),o=e.querySelector(".itsm-select-options"),s=(e.querySelector('input[type="hidden"]'),"true"===e.getAttribute("data-disabled"));s&&(r.classList.add("disabled"),r.setAttribute("tabindex","-1")),r.addEventListener("click",function(t){"true"===e.getAttribute("data-disabled")||(t.stopPropagation(),n._toggleDropdown(e))}),document.addEventListener("click",function(t){e.contains(t.target)||n._closeDropdown(e)}),i&&(i.addEventListener("input",function(e){var t=e.target.value.toLowerCase().trim();n._filterCustomOptions(o,t)}),i.addEventListener("click",function(e){e.stopPropagation()})),r.addEventListener("keydown",function(t){"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),s||n._toggleDropdown(e))})}}},{key:"_toggleDropdown",value:function(e){var t=e.querySelector(".itsm-select-dropdown"),n=t.classList.contains("open");if(this.modalContainer.querySelectorAll(".itsm-select-dropdown.open").forEach(function(e){e!==t&&e.classList.remove("open")}),n)t.classList.remove("open");else{t.classList.add("open");var r=e.querySelector(".itsm-select-filter");r&&setTimeout(function(){return r.focus()},10)}}},{key:"_closeDropdown",value:function(e){e.querySelector(".itsm-select-dropdown").classList.remove("open");var t=e.querySelector(".itsm-select-filter");t&&(t.value="")}},{key:"_resetCustomSelect",value:function(e,t,n){if(e){var r=e.querySelector(".itsm-select-display"),i=r.querySelector(".itsm-select-text"),o=e.querySelector('input[type="hidden"]'),s=e.querySelector(".itsm-select-options"),a=e.querySelector(".itsm-select-filter");i.textContent=t,o.value="",n?(r.classList.add("disabled"),r.setAttribute("tabindex","-1"),e.setAttribute("data-disabled","true")):(r.classList.remove("disabled"),r.setAttribute("tabindex","0"),e.setAttribute("data-disabled","false")),a&&(a.value="",a.disabled=n),s.innerHTML="",this._closeDropdown(e)}}},{key:"_filterCustomOptions",value:function(e,t){Array.from(e.querySelectorAll(".itsm-select-option")).forEach(function(e){var n=e.textContent.toLowerCase();!t||n.includes(t)?e.style.display="":e.style.display="none"})}},{key:"_populateCustomSelect",value:function(e,t,n){var r=this;if(e){var i=e.querySelector(".itsm-select-options"),o=e.querySelector('input[type="hidden"]');if(i){console.log("[ITSMWidget] _populateCustomSelect: populating",t.length,"options"),i.innerHTML="",t.forEach(function(t,n){var s=document.createElement("div");s.className="itsm-select-option",s.textContent=t.text,s.dataset.value=t.value,t.dataset&&Object.keys(t.dataset).forEach(function(e){s.dataset[e]=t.dataset[e]}),s.addEventListener("click",function(t){t.stopPropagation();var n=s.dataset.value,i=s.textContent;o.value=n,e.querySelector(".itsm-select-text").textContent=i,o.dispatchEvent(new Event("change",{bubbles:!0})),r._closeDropdown(e)}),i.appendChild(s)});var s=i.querySelectorAll(".itsm-select-option").length;console.log("[ITSMWidget] _populateCustomSelect: added",s,"options to DOM")}else console.error("[ITSMWidget] _populateCustomSelect: optionsContainer not found")}else console.warn("[ITSMWidget] _populateCustomSelect: customSelectElement is null")}},{key:"_loadCategories",value:(p=T(g().m(function e(t,n,r){var i,o,s,a,c,l=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return e.a(2);case 1:return e.p=1,i=t.querySelector(".itsm-select-display"),(o=i.querySelector(".itsm-select-text")).textContent="Đang tải...",i.classList.add("disabled"),e.n=2,this.apiService.getAllCategories();case 2:(s=e.v)&&s.categories&&Array.isArray(s.categories)?(this.allCategories=[],s.categories.forEach(function(e){e&&e.name&&e.id&&(l.categoryMap.set(e.name,{id:e.id,name:e.name}),l.allCategories.push({value:e.name,text:e.name,dataset:{categoryId:e.id}}))}),this._populateCustomSelect(t,this.allCategories,"-- Chọn danh mục --"),o.textContent="-- Chọn danh mục --"):(o.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid categories response:",s)),e.n=4;break;case 3:e.p=3,c=e.v,console.error("[ITSMWidget] Error loading categories:",c),t.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(a=t.querySelector(".itsm-select-display")).classList.remove("disabled"),a.setAttribute("tabindex","0"),t.setAttribute("data-disabled","false"),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t,n){return p.apply(this,arguments)})},{key:"_loadSubcategories",value:(s=T(g().m(function e(t,n,r){var i,o,s,a,c,l,d,u,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=T(g().m(function e(t,n){var r,i,o,s,a,c,l,d,u=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2);case 1:return e.p=1,r=n.querySelector(".itsm-select-display"),(i=r.querySelector(".itsm-select-text")).textContent="Đang tải...",r.classList.add("disabled"),e.n=2,this.apiService.getItemsBySubcategoryId(t);case 2:(o=e.v)&&o.items&&Array.isArray(o.items)?(this.allItems=[],o.items.forEach(function(e){if(e&&e.name){var t={};e.id&&(t.itemId=e.id),u.allItems.push({value:e.name,text:e.name,dataset:t})}}),this.allItems.length>0?(this._populateCustomSelect(n,this.allItems,"Chưa lựa chọn"),(s=n.querySelector(".itsm-select-display")).classList.remove("disabled"),s.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(a=n.querySelector(".itsm-select-filter"))&&(a.disabled=!1),i.textContent="Chưa lựa chọn"):(i.textContent="Không có dữ liệu",console.warn("[ITSMWidget] No items found for subcategory:",t))):(i.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid items response:",o)),e.n=4;break;case 3:e.p=3,d=e.v,console.error("[ITSMWidget] Error loading items:",d),n.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(c=n.querySelector(".itsm-select-display")).classList.contains("disabled")||(c.classList.remove("disabled"),c.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(l=n.querySelector(".itsm-select-filter"))&&(l.disabled=!1)),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t){return o.apply(this,arguments)})},{key:"toggleModal",value:function(){this.isOpen?this.closeModal():this.openModal()}},{key:"openModal",value:function(){if(this.config.getAuthToken&&"function"==typeof this.config.getAuthToken){var e=this.config.getAuthToken();e&&this.apiService&&(this.apiService.authToken=e,this.config.authToken=e)}if(this.config.getRequesterName&&"function"==typeof this.config.getRequesterName){var t=this.config.getRequesterName();if(t){this.config.requesterName=t;var n=this.modalContainer.querySelector("#itsm-requester");n&&(n.value=t)}}if(this.config.getSite&&"function"==typeof this.config.getSite){var r=this.config.getSite();if(r){this.config.site=r;var i=this.modalContainer.querySelector("#itsm-site");i&&(i.value=r)}}this.modalContainer.classList.add("itsm-modal-active"),this.modalContainer.style.display="flex",this.isOpen=!0,document.body.style.overflow="hidden"}},{key:"closeModal",value:function(){this.modalContainer.classList.remove("itsm-modal-active"),this.modalContainer.style.display="none",this.isOpen=!1,document.body.style.overflow=""}},{key:"handleFileSelect",value:function(e){var t=this,n=Array.from(e.target.files),r=this.modalContainer.querySelector("#itsm-file-list");0!==n.length?r.innerHTML=n.map(function(e){return'\n <div class="itsm-file-item">\n <span class="itsm-file-name">'.concat(e.name,'</span>\n <span class="itsm-file-size">').concat(t.formatFileSize(e.size),"</span>\n </div>\n ")}).join(""):r.innerHTML=""}},{key:"formatFileSize",value:function(e){if(0===e)return"0 Bytes";var t=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,t)*100)/100+" "+["Bytes","KB","MB","GB"][t]}},{key:"handleSubmit",value:(i=T(g().m(function e(t){var n,r,i,o,s,a,c,l,d,u,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=T(g().m(function e(t,n){var r,i,o;return g().w(function(e){for(;;)switch(e.n){case 0:if(r={udf_pick_301:l||"EVNSPC",udf_pick_302:d||"A - An toàn điện",udf_pick_303:u||"A1 - Phần mềm ứng dụng",udf_pick_304: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/config/config.json","./assets/config/config.json","assets/config/config.json","/node_modules/itsm-widget/dist/itsm-widget-config.json","./node_modules/itsm-widget/dist/itsm-widget-config.json","node_modules/itsm-widget/dist/itsm-widget-config.json","/assets/itsm-widget-config.json","./assets/itsm-widget-config.json","/itsm-widget-config.json","./itsm-widget-config.json","assets/itsm-widget-config.json","itsm-widget-config.json"];case 1:if(!(r<i.length)){e.n=8;break}return o=i[r],n.push(o),e.p=2,e.n=3,fetch(o);case 3:if(s=e.v,!s.ok){e.n=5;break}return e.n=4,s.json();case 4:return 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. Tạo file config tại: src/assets/config/config.json"),console.error('2. Thêm nội dung: { "apiITSMUrl": "http://your-api-url" }'),console.error("3. Hoặc chỉnh sửa file: node_modules/itsm-widget/dist/itsm-widget-config.json"),console.error("4. Widget hỗ trợ cả apiITSMUrl (ưu tiên) và apiBaseUrl (tương thích ngược)"),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,r;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,n=t.apiITSMUrl||t.apiBaseUrl){e.n=2;break}throw new Error("File config không có apiITSMUrl hoặc apiBaseUrl");case 2:return this.baseUrl=n,e.a(2,this.baseUrl);case 3:throw e.p=3,r=e.v,console.error("[ITSMAPIService] ❌ Không thể load apiBaseUrl:",r.message),new Error("Không thể load apiBaseUrl: ".concat(r.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(){return 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.9",
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",