itsm-widget 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -142,7 +142,31 @@ Thêm scripts và styles vào `angular.json`:
142
142
 
143
143
  **⚠️ QUAN TRỌNG:** File `itsm-widget-config.json` là **BẮT BUỘC** để widget hoạt động. Widget sẽ tự động load `apiBaseUrl` từ file này.
144
144
 
145
- **Cách 1: Copy từ node_modules (nếu dùng npm install)**
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...
149
+
150
+ **Cách 1: Sử dụng trực tiếp từ node_modules (Development - Khuyến nghị)**
151
+
152
+ Trong môi trường development (`ng serve`), widget có thể tự động tìm file từ `node_modules/itsm-widget/dist/itsm-widget-config.json` mà không cần copy.
153
+
154
+ **Chỉ cần chỉnh sửa file trong node_modules:**
155
+ ```bash
156
+ # Mở file để chỉnh sửa
157
+ code node_modules/itsm-widget/dist/itsm-widget-config.json
158
+ # hoặc
159
+ notepad node_modules\itsm-widget\dist\itsm-widget-config.json
160
+ ```
161
+
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`)
166
+
167
+ **Cách 2: Copy vào assets (Production - Khuyến nghị)**
168
+
169
+ Để hoạt động trong production, copy file vào `src/assets/`:
146
170
 
147
171
  ```bash
148
172
  # Copy file config từ package vào assets
@@ -164,12 +188,62 @@ cp node_modules/itsm-widget/dist/itsm-widget-config.json src/assets/itsm-widget-
164
188
  **Lưu ý:**
165
189
  - Thay `http://localhost:2411` bằng URL thực tế của Backend API
166
190
  - File config **PHẢI** nằm trong `src/assets/` để Angular có thể serve
167
- - Widget sẽ tự động tìm file ở: `/assets/itsm-widget-config.json`
191
+ - Widget sẽ tự động tìm file ở: `/assets/itsm-widget-config.json` (ưu tiên nhất)
168
192
  - **KHÔNG** truyền `apiBaseUrl` vào constructor - nó sẽ bị bỏ qua
169
193
 
194
+ **⚠️ QUAN TRỌNG - Kiểm tra file đã được copy đúng:**
195
+
196
+ Sau khi copy file, kiểm tra:
197
+ 1. File có tồn tại tại `src/assets/itsm-widget-config.json` không?
198
+ 2. File có đúng format JSON không?
199
+ 3. Sau khi build (`ng serve` hoặc `ng build`), file có được serve tại `http://localhost:4200/assets/itsm-widget-config.json` không?
200
+
201
+ **Kiểm tra trong browser:**
202
+ - Mở DevTools → Network tab
203
+ - Reload trang
204
+ - Tìm request đến `itsm-widget-config.json`
205
+ - Nếu thấy 404, file chưa được copy đúng hoặc `angular.json` chưa cấu hình assets
206
+
170
207
  ### Đảm bảo assets được copy vào build
171
208
 
172
- Kiểm tra `angular.json` cấu hình assets đúng:
209
+ **Cách 1: Copy thủ công (Đơn giản)**
210
+
211
+ Sau mỗi lần `npm install`, copy file vào `src/assets/`:
212
+ ```bash
213
+ cp node_modules/itsm-widget/dist/itsm-widget-config.json src/assets/itsm-widget-config.json
214
+ ```
215
+
216
+ **Cách 2: Tự động copy khi build (Khuyến nghị)**
217
+
218
+ Cấu hình `angular.json` để tự động copy file từ node_modules vào assets khi build:
219
+
220
+ ```json
221
+ {
222
+ "projects": {
223
+ "your-project-name": {
224
+ "architect": {
225
+ "build": {
226
+ "options": {
227
+ "assets": [
228
+ "src/favicon.ico",
229
+ "src/assets",
230
+ {
231
+ "glob": "itsm-widget-config.json",
232
+ "input": "node_modules/itsm-widget/dist",
233
+ "output": "/assets"
234
+ }
235
+ ]
236
+ }
237
+ }
238
+ }
239
+ }
240
+ }
241
+ }
242
+ ```
243
+
244
+ Với cấu hình này, Angular sẽ tự động copy file `itsm-widget-config.json` từ `node_modules/itsm-widget/dist/` vào `assets/` khi build, không cần copy thủ công.
245
+
246
+ **Kiểm tra `angular.json` có cấu hình assets cơ bản:**
173
247
 
174
248
  ```json
175
249
  {
@@ -516,13 +590,64 @@ declare var ITSMWidget: any;
516
590
 
517
591
  ### Lỗi: Cannot load itsm-widget-config.json
518
592
 
593
+ **Lỗi:** `File itsm-widget-config.json not found. Đã thử các vị trí: ...`
594
+
519
595
  **Nguyên nhân:** File config không tìm thấy hoặc không đúng format.
520
596
 
521
- **Giải pháp:**
522
- 1. Đảm bảo file `itsm-widget-config.json` nằm trong `src/assets/`
523
- 2. Kiểm tra file đúng format JSON không
524
- 3. Kiểm tra `angular.json` có cấu hình assets đúng không
525
- 4. Build lại project: `ng serve` hoặc `ng build`
597
+ **Giải pháp từng bước:**
598
+
599
+ 1. **Kiểm tra file đã được copy chưa:**
600
+ ```bash
601
+ # Kiểm tra file tồn tại không
602
+ ls src/assets/itsm-widget-config.json
603
+ # hoặc trên Windows
604
+ dir src\assets\itsm-widget-config.json
605
+ ```
606
+
607
+ 2. **Kiểm tra file có đúng format JSON không:**
608
+ ```json
609
+ {
610
+ "apiBaseUrl": "http://localhost:2411"
611
+ }
612
+ ```
613
+
614
+ 3. **Kiểm tra `angular.json` có cấu hình assets:**
615
+ ```json
616
+ {
617
+ "projects": {
618
+ "your-project-name": {
619
+ "architect": {
620
+ "build": {
621
+ "options": {
622
+ "assets": [
623
+ "src/favicon.ico",
624
+ "src/assets"
625
+ ]
626
+ }
627
+ }
628
+ }
629
+ }
630
+ }
631
+ }
632
+ ```
633
+
634
+ 4. **Kiểm tra file có được serve không:**
635
+ - Chạy `ng serve`
636
+ - Mở browser: `http://localhost:4200/assets/itsm-widget-config.json`
637
+ - Nếu thấy 404, file chưa được copy hoặc assets chưa được cấu hình
638
+
639
+ 5. **Build lại project:**
640
+ ```bash
641
+ ng serve
642
+ # hoặc
643
+ ng build
644
+ ```
645
+
646
+ 6. **Kiểm tra Network tab trong DevTools:**
647
+ - Mở DevTools → Network tab
648
+ - Reload trang
649
+ - Tìm request đến `itsm-widget-config.json`
650
+ - Xem status code và response
526
651
 
527
652
  ### Lỗi 401 Unauthorized
528
653
 
@@ -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:()=>j});var r=n(72),i=n.n(r),o=n(555),s={insert:"head",singleton:!1};i()(o.A,s);o.A.locals;var a=n(890),c=["Bổ sung chương trình","Dữ liệu","Hiệu chỉnh chương trình","Nghiệp vụ","Phần mềm"],l="EVNSPC",d="A - An toàn điện",u="A1 - Phần mềm ứng dụng",m="C - The Business/Customer Service Catalog",f="Máy tính";function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}e=n.hmd(e);var h=["apiBaseUrl"];function g(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var c=r&&r.prototype instanceof a?r:a,l=Object.create(c.prototype);return b(l,"_invoke",function(n,r,i){var o,a,c,l=0,d=i||[],u=!1,m={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,a=0,c=e,m.n=n,s}};function f(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],f=m.p,p=o[2];n>3?(i=p===r)&&(c=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=f&&((i=n<2&&f<o[1])?(a=0,m.v=r,m.n=o[1]):f<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,m.n=p,a=0))}if(i||n>1)return s;throw u=!0,r}return function(i,d,p){if(l>1)throw TypeError("Generator is already running");for(u&&1===d&&f(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(m.n=-1),f(a,c)):m.n=c:m.v=c);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,a<2&&(a=0)}else 1===a&&(t=o.return)&&t.call(o),a<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(u=m.n<0)?c:n.call(r,m))!==s)break}catch(t){o=e,a=1,c=t}finally{l=1}}return{value:t,done:u}}}(n,i,o),!0),l}var s={};function a(){}function c(){}function l(){}t=Object.getPrototypeOf;var d=[][r]?t(t([][r]())):(b(t={},r,function(){return this}),t),u=l.prototype=a.prototype=Object.create(d);function m(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,b(e,i,"GeneratorFunction")),e.prototype=Object.create(u),e}return c.prototype=l,b(u,"constructor",l),b(l,"constructor",c),c.displayName="GeneratorFunction",b(l,i,"GeneratorFunction"),b(u),b(u,i,"Generator"),b(u,r,function(){return this}),b(u,"toString",function(){return"[object Generator]"}),(g=function(){return{w:o,m}})()}function b(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}b=function(e,t,n,r){function o(t,n){b(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},b(e,t,n,r)}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach(function(t){w(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function w(e,t,n){return(t=k(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function S(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,k(r.key),r)}}function k(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==p(t)?t:t+""}function C(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function q(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){C(o,r,i,s,a,"next",e)}function a(e){C(o,r,i,s,a,"throw",e)}s(void 0)})}}var A=function(){return window.__itsmWidgetConfigCache||(window.__itsmWidgetConfigCache={cache:null,loadingPromise:null}),window.__itsmWidgetConfigCache};function T(){return M.apply(this,arguments)}function M(){return(M=q(g().m(function e(){var t;return g().w(function(e){for(;;)switch(e.n){case 0:if(null===(t=A()).cache){e.n=1;break}return e.a(2,t.cache);case 1:if(null===t.loadingPromise){e.n=2;break}return e.a(2,t.loadingPromise);case 2:return t.loadingPromise=q(g().m(function e(){var n,r,i,o,s,a;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:n=0,r=["/itsm-widget-config.json","./itsm-widget-config.json","/assets/itsm-widget-config.json"];case 1:if(!(n<r.length)){e.n=8;break}return i=r[n],e.p=2,e.n=3,fetch(i);case 3:if(!(o=e.v).ok){e.n=5;break}return e.n=4,o.json();case 4:return s=e.v,t.cache=s,e.a(2,s);case 5:e.n=7;break;case 6:return e.p=6,e.v,e.a(3,7);case 7:n++,e.n=1;break;case 8:throw a=new Error("File itsm-widget-config.json not found"),console.error("[ITSMWidget] ❌ Cannot load itsm-widget-config.json"),a;case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var _=function(){return e=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._configPromise=this._initializeConfig(t)},t=[{key:"_initializeConfig",value:(b=q(g().m(function e(t){var n,r,i;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,T();case 1:if((n=e.v)&&n.apiBaseUrl){e.n=2;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 2:t.apiBaseUrl,r=x(t,h),this.config=this._buildConfig(v(v({},n),r)),this._initWidget(),e.n=4;break;case 3:throw e.p=3,i=e.v,console.error("[ITSMWidget] ❌ Không thể load config:",i.message),new Error("Không thể load config: ".concat(i.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(e){return b.apply(this,arguments)})},{key:"_buildConfig",value:function(e){if(!e.apiBaseUrl)throw new Error("apiBaseUrl is required in itsm-widget-config.json");return v({apiBaseUrl:e.apiBaseUrl,authToken:e.authToken||e.apiToken||"",getAuthToken:e.getAuthToken||null,getRequesterName:e.getRequesterName||null,getSite:e.getSite||null,position:e.position||"bottom-right",iconText:e.iconText||"📝",iconImage:void 0!==e.iconImage?e.iconImage:"data:image/png;base64,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",iconColor:e.iconColor||"#335fb3",title:e.title||"Tạo phiếu yêu cầu ITSM",requesterName:e.requesterName||"",site:e.site||"",udf_fields:e.udf_fields||{}},e)}},{key:"_initWidget",value:function(){this.apiService=new a.A({baseUrl:this.config.apiBaseUrl,authToken:this.config.authToken}),this.isOpen=!1,this.widgetContainer=null,this.modalContainer=null,this.init()}},{key:"init",value:function(){this.createWidgetButton(),this.createModal(),this.attachEvents()}},{key:"createWidgetButton",value:function(){var e=document.createElement("div");e.id="itsm-widget-button",e.className="itsm-widget-button itsm-position-".concat(this.config.position);var t="";t=this.config.iconImage&&null!==this.config.iconImage?'<img src="'.concat(this.config.iconImage,'" alt="ITSM Widget" class="itsm-widget-icon-img" />'):this.config.iconText||"📝";var n=this.config.iconImage&&null!==this.config.iconImage?"":"background-color: ".concat(this.config.iconColor,";");e.style.borderColor=this.config.iconColor,e.innerHTML='\n <div class="itsm-widget-icon" style="'.concat(n,'">\n ').concat(t,"\n </div>\n "),document.body.appendChild(e),this.widgetContainer=e}},{key:"createModal",value:function(){var e=document.createElement("div");e.id="itsm-widget-modal",e.className="itsm-modal-overlay",e.innerHTML='\n <div class="itsm-modal-container" style="width: 50vw; max-width: 90vw;">\n <div class="itsm-modal-header">\n <span class="itsm-modal-title">'.concat(this.config.title,'</span>\n <div class="itsm-modal-header-icons">\n <button class="itsm-modal-close" aria-label="Đóng">\n <span>×</span>\n </button>\n </div>\n </div>\n <div class="itsm-modal-content">\n <form id="itsm-request-form" class="itsm-form">\n \n\n <div class="itsm-form-group">\n <label for="itsm-requester">\n Người yêu cầu <span class="itsm-required">*</span>\n </label>\n <input \n type="text" \n id="itsm-requester" \n name="requester" \n class="itsm-input" \n disabled\n placeholder=""\n value="').concat(this.config.requesterName||"",'"\n />\n </div>\n <div class="itsm-form-group">\n <label for="itsm-site">Đơn vị</label>\n <input \n type="text" \n id="itsm-site" \n name="site" \n class="itsm-input" \n disabled\n placeholder=""\n value="').concat(this.config.site||"",'"\n />\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-category">\n Danh mục dịch vụ <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-category">\n <input type="hidden" id="itsm-category" name="category" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">-- Chọn danh mục --</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm danh mục..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-subcategory">\n Dịch vụ con <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-subcategory" data-disabled="true">\n <input type="hidden" id="itsm-subcategory" name="subcategory" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm dịch vụ con..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-item">\n Chi tiết dịch vụ <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-item" data-disabled="true">\n <input type="hidden" id="itsm-item" name="item" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <input \n type="text" \n class="itsm-select-filter" \n placeholder="Tìm kiếm chi tiết dịch vụ..."\n autocomplete="off"\n />\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-row">\n <div class="itsm-form-group itsm-form-group-half">\n <label for="itsm-priority">\n Mức độ ưu tiên <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-priority" data-no-filter="true">\n <input type="hidden" id="itsm-priority" name="priority" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group itsm-form-group-half">\n <label for="itsm-udf-pick-305">Loại hỗ trợ</label>\n <div class="itsm-custom-select" data-select-id="itsm-udf-pick-305" data-no-filter="true">\n <input type="hidden" id="itsm-udf-pick-305" name="udf_pick_305">\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n </div>\n \n <div class="itsm-form-group">\n <label for="itsm-udf-pick-306">\n Loại thiết bị sử dụng <span class="itsm-required">*</span>\n </label>\n <div class="itsm-custom-select" data-select-id="itsm-udf-pick-306" data-no-filter="true">\n <input type="hidden" id="itsm-udf-pick-306" name="udf_pick_306" required>\n <div class="itsm-select-display" tabindex="0">\n <span class="itsm-select-text">Chưa lựa chọn</span>\n <span class="itsm-select-arrow">▼</span>\n </div>\n <div class="itsm-select-dropdown">\n <div class="itsm-select-options"></div>\n </div>\n </div>\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-title">\n Tiêu đề <span class="itsm-required">*</span>\n </label>\n <input \n type="text" \n id="itsm-title" \n name="title" \n class="itsm-input" \n required \n placeholder="Nhập tiêu đề phiếu yêu cầu"\n />\n </div>\n\n <div class="itsm-form-group">\n <label for="itsm-description-editor">\n Mô tả <span class="itsm-required">*</span>\n </label>\n <div class="itsm-editor-container">\n <div class="itsm-editor-toolbar">\n <button type="button" class="itsm-editor-btn" data-command="bold" title="Bold">\n <strong>B</strong>\n </button>\n <button type="button" class="itsm-editor-btn" data-command="italic" title="Italic">\n <em>I</em>\n </button>\n <button type="button" class="itsm-editor-btn" data-command="underline" title="Underline">\n <u>U</u>\n </button>\n <div class="itsm-editor-separator"></div>\n <button type="button" class="itsm-editor-btn" data-command="insertUnorderedList" title="Bullet List">• List</button>\n <button type="button" class="itsm-editor-btn" data-command="insertOrderedList" title="Numbered List">1. List</button>\n <div class="itsm-editor-separator"></div>\n <label class="itsm-editor-file-btn">\n 📎 Đính kèm file\n <input \n type="file" \n id="itsm-attachment" \n name="attachment" \n multiple\n style="display: none;"\n />\n </label>\n </div>\n <div \n id="itsm-description-editor" \n class="itsm-editor-content"\n contenteditable="true"\n data-placeholder="Nhập mô tả chi tiết yêu cầu..."\n ></div>\n <textarea \n id="itsm-description" \n name="description" \n style="display: none;"\n required\n ></textarea>\n <div id="itsm-file-list" class="itsm-file-list"></div>\n </div>\n </div>\n\n <div class="itsm-modal-footer">\n <button type="button" class="itsm-btn itsm-btn-secondary" id="itsm-cancel-btn">\n Hủy\n </button>\n <button type="submit" class="itsm-btn itsm-btn-primary" id="itsm-submit-btn">\n <span class="itsm-btn-text">Gửi Yêu Cầu</span>\n <span class="itsm-btn-loading" style="display: none;">Đang gửi...</span>\n </button>\n </div>\n </form>\n </div>\n </div>\n '),document.body.appendChild(e),this.modalContainer=e}},{key:"attachEvents",value:function(){var e=this;this.widgetContainer.addEventListener("click",function(){e.toggleModal()});var t=this.modalContainer.querySelector(".itsm-modal-close"),n=this.modalContainer.querySelector("#itsm-cancel-btn"),r=this.modalContainer;t&&t.addEventListener("click",function(){return e.closeModal()}),n&&n.addEventListener("click",function(){return e.closeModal()}),r.addEventListener("click",function(t){t.target===r&&e.closeModal()}),this.modalContainer.querySelector("#itsm-request-form").addEventListener("submit",function(t){return e.handleSubmit(t)}),this.modalContainer.querySelector("#itsm-attachment").addEventListener("change",function(t){return e.handleFileSelect(t)}),this.initEditor(),this.initCategoryDropdowns()}},{key:"initEditor",value:function(){var e=this.modalContainer.querySelector("#itsm-description-editor"),t=this.modalContainer.querySelector("#itsm-description"),n=this.modalContainer.querySelector(".itsm-editor-toolbar");e.addEventListener("input",function(){t.value=e.innerHTML,e.textContent.trim()?t.setCustomValidity(""):t.setCustomValidity("Mô tả là bắt buộc")}),e.addEventListener("focus",function(){""===e.textContent.trim()&&(e.innerHTML="")}),e.addEventListener("blur",function(){""===e.textContent.trim()&&(e.innerHTML="")}),n.querySelectorAll(".itsm-editor-btn[data-command]").forEach(function(n){n.addEventListener("click",function(r){r.preventDefault();var i=n.getAttribute("data-command");e.focus(),document.execCommand(i,!1,null),t.value=e.innerHTML})})}},{key:"initCategoryDropdowns",value:function(){var e=this,t=this.modalContainer.querySelector('[data-select-id="itsm-category"]'),n=this.modalContainer.querySelector('[data-select-id="itsm-subcategory"]'),r=this.modalContainer.querySelector('[data-select-id="itsm-item"]'),i=this.modalContainer.querySelector('[data-select-id="itsm-priority"]'),o=this.modalContainer.querySelector('[data-select-id="itsm-udf-pick-305"]'),s=this.modalContainer.querySelector('[data-select-id="itsm-udf-pick-306"]');this.categoryMap=new Map,this.subcategoryMap=new Map,this.allCategories=[],this.allSubcategories=[],this.allItems=[],this._initCustomSelect(t,"category"),this._initCustomSelect(n,"subcategory"),this._initCustomSelect(r,"item"),this._initCustomSelect(i,"priority"),this._initCustomSelect(o,"udf_pick_305"),this._initCustomSelect(s,"udf_pick_306"),this._populateCustomSelect(i,[{value:"low",text:"Thấp"},{value:"medium",text:"Trung bình"},{value:"high",text:"Cao"}],"Chưa lựa chọn");var a=c.map(function(e){return{value:e,text:e}});this._populateCustomSelect(o,a,"Chưa lựa chọn"),this._populateCustomSelect(s,[{value:"Máy tính",text:"Máy tính"},{value:"Máy tính bảng",text:"Máy tính bảng"},{value:"Điện thoại",text:"Điện thoại"},{value:"Laptop",text:"Laptop"}],"Chưa lựa chọn"),this._loadCategories(t,n,r),t&&t.querySelector('input[type="hidden"]').addEventListener("change",function(){var t=q(g().m(function t(i){var o,s;return g().w(function(t){for(;;)switch(t.n){case 0:if(o=i.target.value,e._resetCustomSelect(n,"Chưa lựa chọn",!0),e._resetCustomSelect(r,"Chưa lựa chọn",!0),!o){t.n=1;break}if(!(s=e.categoryMap.get(o))||!s.id){t.n=1;break}return t.n=1,e._loadSubcategories(s.id,n,r);case 1:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}()),n&&n.querySelector('input[type="hidden"]').addEventListener("change",function(){var t=q(g().m(function t(n){var i,o;return g().w(function(t){for(;;)switch(t.n){case 0:if(i=n.target.value,e._resetCustomSelect(r,"Chưa lựa chọn",!i),!i){t.n=1;break}if(!(o=e.subcategoryMap.get(i))||!o.id){t.n=1;break}return t.n=1,e._loadItems(o.id,r);case 1:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}},{key:"_initCustomSelect",value:function(e,t){var n=this;if(e){var r=e.querySelector(".itsm-select-display"),i=(e.querySelector(".itsm-select-dropdown"),e.querySelector(".itsm-select-filter")),o=e.querySelector(".itsm-select-options"),s=(e.querySelector('input[type="hidden"]'),"true"===e.getAttribute("data-disabled"));s&&(r.classList.add("disabled"),r.setAttribute("tabindex","-1")),r.addEventListener("click",function(t){"true"===e.getAttribute("data-disabled")||(t.stopPropagation(),n._toggleDropdown(e))}),document.addEventListener("click",function(t){e.contains(t.target)||n._closeDropdown(e)}),i&&(i.addEventListener("input",function(e){var t=e.target.value.toLowerCase().trim();n._filterCustomOptions(o,t)}),i.addEventListener("click",function(e){e.stopPropagation()})),r.addEventListener("keydown",function(t){"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),s||n._toggleDropdown(e))})}}},{key:"_toggleDropdown",value:function(e){var t=e.querySelector(".itsm-select-dropdown"),n=t.classList.contains("open");if(this.modalContainer.querySelectorAll(".itsm-select-dropdown.open").forEach(function(e){e!==t&&e.classList.remove("open")}),n)t.classList.remove("open");else{t.classList.add("open");var r=e.querySelector(".itsm-select-filter");r&&setTimeout(function(){return r.focus()},10)}}},{key:"_closeDropdown",value:function(e){e.querySelector(".itsm-select-dropdown").classList.remove("open");var t=e.querySelector(".itsm-select-filter");t&&(t.value="")}},{key:"_resetCustomSelect",value:function(e,t,n){if(e){var r=e.querySelector(".itsm-select-display"),i=r.querySelector(".itsm-select-text"),o=e.querySelector('input[type="hidden"]'),s=e.querySelector(".itsm-select-options"),a=e.querySelector(".itsm-select-filter");i.textContent=t,o.value="",n?(r.classList.add("disabled"),r.setAttribute("tabindex","-1"),e.setAttribute("data-disabled","true")):(r.classList.remove("disabled"),r.setAttribute("tabindex","0"),e.setAttribute("data-disabled","false")),a&&(a.value="",a.disabled=n),s.innerHTML="",this._closeDropdown(e)}}},{key:"_filterCustomOptions",value:function(e,t){Array.from(e.querySelectorAll(".itsm-select-option")).forEach(function(e){var n=e.textContent.toLowerCase();!t||n.includes(t)?e.style.display="":e.style.display="none"})}},{key:"_populateCustomSelect",value:function(e,t,n){var r=this;if(e){var i=e.querySelector(".itsm-select-options"),o=e.querySelector('input[type="hidden"]');if(i){console.log("[ITSMWidget] _populateCustomSelect: populating",t.length,"options"),i.innerHTML="",t.forEach(function(t,n){var s=document.createElement("div");s.className="itsm-select-option",s.textContent=t.text,s.dataset.value=t.value,t.dataset&&Object.keys(t.dataset).forEach(function(e){s.dataset[e]=t.dataset[e]}),s.addEventListener("click",function(t){t.stopPropagation();var n=s.dataset.value,i=s.textContent;o.value=n,e.querySelector(".itsm-select-text").textContent=i,o.dispatchEvent(new Event("change",{bubbles:!0})),r._closeDropdown(e)}),i.appendChild(s)});var s=i.querySelectorAll(".itsm-select-option").length;console.log("[ITSMWidget] _populateCustomSelect: added",s,"options to DOM")}else console.error("[ITSMWidget] _populateCustomSelect: optionsContainer not found")}else console.warn("[ITSMWidget] _populateCustomSelect: customSelectElement is null")}},{key:"_loadCategories",value:(p=q(g().m(function e(t,n,r){var i,o,s,a,c,l=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return e.a(2);case 1:return e.p=1,i=t.querySelector(".itsm-select-display"),(o=i.querySelector(".itsm-select-text")).textContent="Đang tải...",i.classList.add("disabled"),e.n=2,this.apiService.getAllCategories();case 2:(s=e.v)&&s.categories&&Array.isArray(s.categories)?(this.allCategories=[],s.categories.forEach(function(e){e&&e.name&&e.id&&(l.categoryMap.set(e.name,{id:e.id,name:e.name}),l.allCategories.push({value:e.name,text:e.name,dataset:{categoryId:e.id}}))}),this._populateCustomSelect(t,this.allCategories,"-- Chọn danh mục --"),o.textContent="-- Chọn danh mục --"):(o.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid categories response:",s)),e.n=4;break;case 3:e.p=3,c=e.v,console.error("[ITSMWidget] Error loading categories:",c),t.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(a=t.querySelector(".itsm-select-display")).classList.remove("disabled"),a.setAttribute("tabindex","0"),t.setAttribute("data-disabled","false"),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t,n){return p.apply(this,arguments)})},{key:"_loadSubcategories",value:(s=q(g().m(function e(t,n,r){var i,o,s,a,c,l,d,u,m,f,p=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2);case 1:return e.p=1,i=n.querySelector(".itsm-select-display"),(o=i.querySelector(".itsm-select-text")).textContent="Đang tải...",i.classList.add("disabled"),this._resetCustomSelect(r,"Chưa lựa chọn",!0),this.subcategoryMap.clear(),e.n=2,this.apiService.getSubcategoriesByCategoryId(t);case 2:s=e.v,console.log("[ITSMWidget] Subcategories response:",s),s&&s.subcategories&&Array.isArray(s.subcategories)?(this.allSubcategories=[],s.subcategories.forEach(function(e){e&&e.name&&e.id&&(p.subcategoryMap.set(e.name,{id:e.id,name:e.name}),p.allSubcategories.push({value:e.name,text:e.name,dataset:{subcategoryId:e.id}}))}),console.log("[ITSMWidget] Processed subcategories:",this.allSubcategories.length,this.allSubcategories),this.allSubcategories.length>0?(this._populateCustomSelect(n,this.allSubcategories,"Chưa lựa chọn"),(a=n.querySelector(".itsm-select-display")).classList.remove("disabled"),a.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(c=n.querySelector(".itsm-select-filter"))&&(c.disabled=!1),l=n.querySelector(".itsm-select-options"),d=l.querySelectorAll(".itsm-select-option").length,console.log("[ITSMWidget] Options populated:",d,"options in dropdown"),o.textContent="Chưa lựa chọn"):(o.textContent="Không có dữ liệu",console.warn("[ITSMWidget] No subcategories found for category:",t))):(o.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid subcategories response:",s)),e.n=4;break;case 3:e.p=3,f=e.v,console.error("[ITSMWidget] Error loading subcategories:",f),n.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(u=n.querySelector(".itsm-select-display")).classList.contains("disabled")||(u.classList.remove("disabled"),u.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(m=n.querySelector(".itsm-select-filter"))&&(m.disabled=!1)),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t,n){return s.apply(this,arguments)})},{key:"_loadItems",value:(o=q(g().m(function e(t,n){var r,i,o,s,a,c,l,d,u=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2);case 1:return e.p=1,r=n.querySelector(".itsm-select-display"),(i=r.querySelector(".itsm-select-text")).textContent="Đang tải...",r.classList.add("disabled"),e.n=2,this.apiService.getItemsBySubcategoryId(t);case 2:(o=e.v)&&o.items&&Array.isArray(o.items)?(this.allItems=[],o.items.forEach(function(e){if(e&&e.name){var t={};e.id&&(t.itemId=e.id),u.allItems.push({value:e.name,text:e.name,dataset:t})}}),this.allItems.length>0?(this._populateCustomSelect(n,this.allItems,"Chưa lựa chọn"),(s=n.querySelector(".itsm-select-display")).classList.remove("disabled"),s.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(a=n.querySelector(".itsm-select-filter"))&&(a.disabled=!1),i.textContent="Chưa lựa chọn"):(i.textContent="Không có dữ liệu",console.warn("[ITSMWidget] No items found for subcategory:",t))):(i.textContent="Không có dữ liệu",console.error("[ITSMWidget] Invalid items response:",o)),e.n=4;break;case 3:e.p=3,d=e.v,console.error("[ITSMWidget] Error loading items:",d),n.querySelector(".itsm-select-text").textContent="Lỗi tải dữ liệu";case 4:return e.p=4,(c=n.querySelector(".itsm-select-display")).classList.contains("disabled")||(c.classList.remove("disabled"),c.setAttribute("tabindex","0"),n.setAttribute("data-disabled","false"),(l=n.querySelector(".itsm-select-filter"))&&(l.disabled=!1)),e.f(4);case 5:return e.a(2)}},e,this,[[1,3,4,5]])})),function(e,t){return o.apply(this,arguments)})},{key:"toggleModal",value:function(){this.isOpen?this.closeModal():this.openModal()}},{key:"openModal",value:function(){if(this.config.getAuthToken&&"function"==typeof this.config.getAuthToken){var e=this.config.getAuthToken();e&&this.apiService&&(this.apiService.authToken=e,this.config.authToken=e)}if(this.config.getRequesterName&&"function"==typeof this.config.getRequesterName){var t=this.config.getRequesterName();if(t){this.config.requesterName=t;var n=this.modalContainer.querySelector("#itsm-requester");n&&(n.value=t)}}if(this.config.getSite&&"function"==typeof this.config.getSite){var r=this.config.getSite();if(r){this.config.site=r;var i=this.modalContainer.querySelector("#itsm-site");i&&(i.value=r)}}this.modalContainer.classList.add("itsm-modal-active"),this.modalContainer.style.display="flex",this.isOpen=!0,document.body.style.overflow="hidden"}},{key:"closeModal",value:function(){this.modalContainer.classList.remove("itsm-modal-active"),this.modalContainer.style.display="none",this.isOpen=!1,document.body.style.overflow=""}},{key:"handleFileSelect",value:function(e){var t=this,n=Array.from(e.target.files),r=this.modalContainer.querySelector("#itsm-file-list");0!==n.length?r.innerHTML=n.map(function(e){return'\n <div class="itsm-file-item">\n <span class="itsm-file-name">'.concat(e.name,'</span>\n <span class="itsm-file-size">').concat(t.formatFileSize(e.size),"</span>\n </div>\n ")}).join(""):r.innerHTML=""}},{key:"formatFileSize",value:function(e){if(0===e)return"0 Bytes";var t=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,t)*100)/100+" "+["Bytes","KB","MB","GB"][t]}},{key:"handleSubmit",value:(i=q(g().m(function e(t){var n,r,i,o,s,a,c,l,d,u,m,f,p,h,b,y,v,w,x=this;return g().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),n=t.target,r=new FormData(n),this.config.getAuthToken&&"function"==typeof this.config.getAuthToken&&(i=this.config.getAuthToken())&&this.apiService&&(this.apiService.authToken=i,this.config.authToken=i),o="",o=this.config.getRequesterName&&"function"==typeof this.config.getRequesterName?this.config.getRequesterName()||"":this.config.requesterName||r.get("requester")||"",s="",s=this.config.getSite&&"function"==typeof this.config.getSite?this.config.getSite()||"":this.config.site||r.get("site")||"",a={title:r.get("title"),description:r.get("description"),requester:o,category:r.get("category"),subcategory:r.get("subcategory"),item:r.get("item"),priority:r.get("priority"),site:s,udf_pick_305:r.get("udf_pick_305"),udf_pick_306:r.get("udf_pick_306"),contact:r.get("contact"),attachments:[]},c=this.modalContainer.querySelector("#itsm-description-editor"),a.description=c?c.innerHTML.trim():a.description,a.title&&a.description&&a.category&&a.subcategory&&a.item&&a.priority&&a.udf_pick_306&&a.requester){e.n=1;break}return this.showMessage("Vui lòng điền đầy đủ thông tin bắt buộc!","error"),e.a(2);case 1:if(c&&c.textContent.trim()){e.n=2;break}return this.showMessage("Mô tả không được để trống!","error"),null==c||c.focus(),e.a(2);case 2:return l=n.querySelector("#itsm-attachment"),d=Array.from(l.files),u=n.querySelector("#itsm-submit-btn"),m=u.querySelector(".itsm-btn-text"),f=u.querySelector(".itsm-btn-loading"),m.style.display="none",f.style.display="inline",u.disabled=!0,e.p=3,e.n=4,this.submitRequest(a,d);case 4:p=e.v,this.showMessage("Phiếu yêu cầu đã được gửi thành công!","success"),n.reset(),(h=this.modalContainer.querySelector("#itsm-description-editor"))&&(h.innerHTML=""),this.modalContainer.querySelector("#itsm-file-list").innerHTML="",b=this.modalContainer.querySelector('[data-select-id="itsm-category"]'),y=this.modalContainer.querySelector('[data-select-id="itsm-subcategory"]'),v=this.modalContainer.querySelector('[data-select-id="itsm-item"]'),b&&this._resetCustomSelect(b,"-- Chọn danh mục --",!1),this._resetCustomSelect(y,"Chưa lựa chọn",!0),this._resetCustomSelect(v,"Chưa lựa chọn",!0),setTimeout(function(){x.closeModal()},1500),this.config.onSuccess&&this.config.onSuccess(p),e.n=6;break;case 5:e.p=5,w=e.v,console.error("Error submitting ITSM request:",w),this.showMessage(w.message||"Có lỗi xảy ra khi gửi yêu cầu. Vui lòng thử lại!","error");case 6:return e.p=6,m.style.display="inline",f.style.display="none",u.disabled=!1,e.f(6);case 7:return e.a(2)}},e,this,[[3,5,6,7]])})),function(e){return i.apply(this,arguments)})},{key:"submitRequest",value:(r=q(g().m(function e(t,n){var r,i,o;return g().w(function(e){for(;;)switch(e.n){case 0:if(r={udf_pick_301:l||"EVNSPC",udf_pick_302:d||"A - An toàn điện",udf_pick_303:u||"A1 - Phần mềm ứng dụng",udf_pick_304:m||"C - The Business/Customer Service Catalog",udf_pick_305:t.udf_pick_305||null,udf_pick_306:t.udf_pick_306||f||null,udf_pick_602:null,udf_mline_603:""},Object.assign(r,this.config.udf_fields||{}),i=this.apiService.buildRequestData(t,{requesterName:this.config.requesterName||t.requester||t.contact||"",site:this.config.site||t.site||null,category:t.category,subcategory:t.subcategory,item:t.item,template:t.category,udf_fields:r,zia_properties:this.config.zia_properties||{}}),!((o=n&&n.length>0?Array.from(n):[]).length>0)){e.n=2;break}return e.n=1,this.apiService.createRequestWithAttachments(i,o);case 1:case 3:return e.a(2,e.v);case 2:return e.n=3,this.apiService.createRequest(i);case 4:return e.a(2)}},e,this)})),function(e,t){return r.apply(this,arguments)})},{key:"showMessage",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info",n=document.querySelector(".itsm-message");n&&n.remove();var r=document.createElement("div");r.className="itsm-message itsm-message-".concat(t),r.textContent=e,document.body.appendChild(r),setTimeout(function(){r.classList.add("itsm-message-show")},10),setTimeout(function(){r.classList.remove("itsm-message-show"),setTimeout(function(){return r.remove()},300)},3e3)}},{key:"destroy",value:function(){this.widgetContainer&&this.widgetContainer.remove(),this.modalContainer&&this.modalContainer.remove(),document.body.style.overflow=""}}],t&&S(e.prototype,t),n&&S(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,i,o,s,p,b}();e.exports&&(e.exports=_,e.exports.default=_);const j=_;"undefined"!=typeof window&&(window.ITSMWidget=_,window.ITSMWidget.default||(window.ITSMWidget.default=_),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 _(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;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:n=0,r=["/itsm-widget-config.json","./itsm-widget-config.json","/assets/itsm-widget-config.json"];case 1:if(!(n<r.length)){e.n=8;break}return i=r[n],e.p=2,e.n=3,fetch(i);case 3:if(!(o=e.v).ok){e.n=5;break}return e.n=4,o.json();case 4:return s=e.v,t.cache=s,e.a(2,s);case 5:e.n=7;break;case 6:return e.p=6,e.v,e.a(3,7);case 7:n++,e.n=1;break;case 8:throw c=new Error("File itsm-widget-config.json not found"),console.error("[ITSMAPIService] ❌ Cannot load itsm-widget-config.json"),c;case 9:return e.a(2)}},e,null,[[2,6]])}))(),e.a(2,t.loadingPromise)}},e)}))).apply(this,arguments)}var g=function(){return e=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.authToken=t.authToken||t.apiToken||"",this.baseUrl="",this._baseUrlPromise=this._initializeBaseUrl()},t=[{key:"_initializeBaseUrl",value:(g=m(a().m(function e(){var t,n;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,p();case 1:if((t=e.v)&&t.apiBaseUrl){e.n=2;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 2:return this.baseUrl=t.apiBaseUrl,e.a(2,this.baseUrl);case 3:throw e.p=3,n=e.v,console.error("[ITSMAPIService] ❌ Không thể load apiBaseUrl:",n.message),new Error("Không thể load apiBaseUrl: ".concat(n.message));case 4:return e.a(2)}},e,this,[[0,3]])})),function(){return g.apply(this,arguments)})},{key:"_ensureBaseUrl",value:(h=m(a().m(function e(){return a().w(function(e){for(;;)switch(e.n){case 0:if(this.baseUrl||!this._baseUrlPromise){e.n=1;break}return e.n=1,this._baseUrlPromise;case 1:if(this.baseUrl){e.n=2;break}throw new Error("baseUrl is required. Please ensure itsm-widget-config.json exists and contains apiBaseUrl.");case 2:return e.a(2)}},e,this)})),function(){return h.apply(this,arguments)})},{key:"buildHeaders",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"application/json",t={};return this.authToken&&(t.Authorization="Bearer ".concat(this.authToken)),"multipart/form-data"!==e&&(t["Content-Type"]=e),t}},{key:"createRequest",value:(f=m(a().m(function e(t){var n,r,i,o,s;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/send"),r={request:{requester:t.requester||{name:""},assets:t.assets||[],category:t.category||null,group:t.group||null,subcategory:t.subcategory||null,technician:t.technician||null,item:t.item||null,priority:t.priority||null,subject:t.subject||"",description:t.description||"",site:t.site||null,attachments:t.attachments||[],udf_fields:t.udf_fields||{},template:t.template||null,zia_properties:t.zia_properties||{}}},e.p=2,e.n=3,fetch(n,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(r)});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error creating request:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return f.apply(this,arguments)})},{key:"uploadAttachment",value:(u=m(a().m(function e(t,n){var r,i,o,s,c;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return r="".concat(this.baseUrl,"/spcit/").concat(t,"/upload"),i=new FormData,(Array.isArray(n)?n:[n]).forEach(function(e){e instanceof File&&i.append("files",e)}),e.p=2,e.n=3,fetch(r,{method:"PUT",headers:this.buildHeaders("multipart/form-data"),body:i});case 3:return o=e.v,e.n=4,o.json();case 4:if(s=e.v,o.ok){e.n=5;break}throw new Error(s.error||s.message||"HTTP error! status: ".concat(o.status));case 5:return e.a(2,s);case 6:throw e.p=6,c=e.v,console.error("Error uploading attachment:",c),c;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e,t){return u.apply(this,arguments)})},{key:"createRequestWithAttachments",value:(d=m(a().m(function e(t){var n,r,i,s,c,l,d=arguments;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return n=d.length>1&&void 0!==d[1]?d[1]:[],e.p=1,e.n=2,this.createRequest(t);case 2:if(i=e.v,!(n&&n.length>0&&null!==(r=i.request)&&void 0!==r&&r.id)){e.n=6;break}return e.p=3,e.n=4,this.uploadAttachment(i.request.id,n);case 4:return s=e.v,e.a(2,o(o({},i),{},{uploadResponse:s}));case 5:return e.p=5,c=e.v,console.warn("Request created but file upload failed:",c),e.a(2,o(o({},i),{},{uploadError:c.message}));case 6:return e.a(2,i);case 7:throw e.p=7,l=e.v,console.error("Error creating request with attachments:",l),l;case 8:return e.a(2)}},e,this,[[3,5],[1,7]])})),function(e){return d.apply(this,arguments)})},{key:"getRequest",value:(c=m(a().m(function e(t){var n,r,i,o,s;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/ticket/").concat(t),e.p=2,(r=this.buildHeaders("application/json")).Accept="application/json",e.n=3,fetch(n,{method:"POST",headers:r,body:JSON.stringify({request_id:t})});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error getting request:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return c.apply(this,arguments)})},{key:"getAllCategories",value:(s=m(a().m(function e(){var t,n,r,i,o;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return t="".concat(this.baseUrl,"/spcit/categories"),n={list_info:{start_index:1,page:1,row_count:100,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=2,e.n=3,fetch(t,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(n)});case 3:return r=e.v,e.n=4,r.json();case 4:if(i=e.v,r.ok){e.n=5;break}throw new Error(i.error||i.message||"HTTP error! status: ".concat(r.status));case 5:return e.a(2,i);case 6:throw e.p=6,o=e.v,console.error("Error getting categories:",o),o;case 7:return e.a(2)}},e,this,[[2,6]])})),function(){return s.apply(this,arguments)})},{key:"getSubcategoriesByCategoryId",value:(i=m(a().m(function e(t){var n,r,i,o,s;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/categories/").concat(t,"/subcategories"),r={list_info:{start_index:0,row_count:100,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=2,e.n=3,fetch(n,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(r)});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error getting subcategories:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return i.apply(this,arguments)})},{key:"getItemsBySubcategoryId",value:(r=m(a().m(function e(t){var n,r,i,o,s;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this._ensureBaseUrl();case 1:return n="".concat(this.baseUrl,"/spcit/subcategories/").concat(t,"/items"),r={list_info:{start_index:0,row_count:100,sort_field:"name",sort_order:"asc",get_total_count:!0}},e.p=2,e.n=3,fetch(n,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(r)});case 3:return i=e.v,e.n=4,i.json();case 4:if(o=e.v,i.ok){e.n=5;break}throw new Error(o.error||o.message||"HTTP error! status: ".concat(i.status));case 5:return e.a(2,o);case 6:throw e.p=6,s=e.v,console.error("Error getting items:",s),s;case 7:return e.a(2)}},e,this,[[2,6]])})),function(e){return r.apply(this,arguments)})},{key:"mapPriority",value:function(e){return{low:"Thấp",medium:"Trung bình",high:"Cao",none:"Chưa lựa chọn"}[e]||"Chưa lựa chọn"}},{key:"mapCategory",value:function(e){return{hardware:"A01A00 - Quản lý an toàn thông tin",software:"Software Category",network:"Network Category",account:"Account Category",other:"Other Category"}[e]||null}},{key:"buildRequestData",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.category||this.mapCategory(e.category),r=t.subcategory||e.subcategory||null,i=t.item||e.item||null,o=t.template||n||null,s=t.requesterName||e.requester||e.contact||"",a=t.site||e.site||"";return{requester:{name:s},category:n?{name:n}:null,subcategory:r?{name:r}:null,priority:{name:this.mapPriority(e.priority||"none")},subject:e.title||"",description:e.description||"",site:a?{name:a}:null,item:i?{name:i}:null,template:o?{name:o}:null,udf_fields:t.udf_fields||{},zia_properties:t.zia_properties||{},assets:[],attachments:[],group:null,technician:null}}}],t&&l(e.prototype,t),n&&l(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,i,s,c,d,u,f,h,g}();e.exports&&(e.exports=g),"undefined"!=typeof window&&(window.ITSMAPIService=g);const b=g}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r](o,o.exports,n),o.loaded=!0,o.exports}return n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0,n(322)})());
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ITSMWidget=t():e.ITSMWidget=t()}(window,()=>(()=>{"use strict";var e={72:(e,t,n)=>{var r,i=function(){return void 0===r&&(r=Boolean(window&&document&&document.all&&!window.atob)),r},o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),s=[];function a(e){for(var t=-1,n=0;n<s.length;n++)if(s[n].identifier===e){t=n;break}return t}function c(e,t){for(var n={},r=[],i=0;i<e.length;i++){var o=e[i],c=t.base?o[0]+t.base:o[0],l=n[c]||0,d="".concat(c," ").concat(l);n[c]=l+1;var u=a(d),m={css:o[1],media:o[2],sourceMap:o[3]};-1!==u?(s[u].references++,s[u].updater(m)):s.push({identifier:d,updater:g(m,t),references:1}),r.push(d)}return r}function l(e){var t=document.createElement("style"),r=e.attributes||{};if(void 0===r.nonce){var i=n.nc;i&&(r.nonce=i)}if(Object.keys(r).forEach(function(e){t.setAttribute(e,r[e])}),"function"==typeof e.insert)e.insert(t);else{var s=o(e.insert||"head");if(!s)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");s.appendChild(t)}return t}var d,u=(d=[],function(e,t){return d[e]=t,d.filter(Boolean).join("\n")});function m(e,t,n,r){var i=n?"":r.media?"@media ".concat(r.media," {").concat(r.css,"}"):r.css;if(e.styleSheet)e.styleSheet.cssText=u(t,i);else{var o=document.createTextNode(i),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(o,s[t]):e.appendChild(o)}}function f(e,t,n){var r=n.css,i=n.media,o=n.sourceMap;if(i?e.setAttribute("media",i):e.removeAttribute("media"),o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}var p=null,h=0;function g(e,t){var n,r,i;if(t.singleton){var o=h++;n=p||(p=l(t)),r=m.bind(null,n,o,!1),i=m.bind(null,n,o,!0)}else n=l(t),r=f.bind(null,n,t),i=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else i()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=i());var n=c(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var r=0;r<n.length;r++){var i=a(n[r]);s[i].references--}for(var o=c(e,t),l=0;l<n.length;l++){var d=a(n[l]);0===s[d].references&&(s[d].updater(),s.splice(d,1))}n=o}}}},314:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n}).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var o=0;o<this.length;o++){var s=this[o][0];null!=s&&(i[s]=!0)}for(var a=0;a<e.length;a++){var c=[].concat(e[a]);r&&i[c[0]]||(n&&(c[2]?c[2]="".concat(n," and ").concat(c[2]):c[2]=n),t.push(c))}},t}},322:(e,t,n)=>{n.r(t),n.d(t,{default:()=>_});var r=n(72),i=n.n(r),o=n(555),s={insert:"head",singleton:!1};i()(o.A,s);o.A.locals;var a=n(890),c=["Bổ sung chương trình","Dữ liệu","Hiệu chỉnh chương trình","Nghiệp vụ","Phần mềm"],l="EVNSPC",d="A - An toàn điện",u="A1 - Phần mềm ứng dụng",m="C - The Business/Customer Service Catalog",f="Máy tính";function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}e=n.hmd(e);var h=["apiBaseUrl"];function g(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var c=r&&r.prototype instanceof a?r:a,l=Object.create(c.prototype);return b(l,"_invoke",function(n,r,i){var o,a,c,l=0,d=i||[],u=!1,m={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,a=0,c=e,m.n=n,s}};function f(n,r){for(a=n,c=r,t=0;!u&&l&&!i&&t<d.length;t++){var i,o=d[t],f=m.p,p=o[2];n>3?(i=p===r)&&(c=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=f&&((i=n<2&&f<o[1])?(a=0,m.v=r,m.n=o[1]):f<p&&(i=n<3||o[0]>r||r>p)&&(o[4]=n,o[5]=r,m.n=p,a=0))}if(i||n>1)return s;throw u=!0,r}return function(i,d,p){if(l>1)throw TypeError("Generator is already running");for(u&&1===d&&f(d,p),a=d,c=p;(t=a<2?e:c)||!u;){o||(a?a<3?(a>1&&(m.n=-1),f(a,c)):m.n=c:m.v=c);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,a<2&&(a=0)}else 1===a&&(t=o.return)&&t.call(o),a<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(u=m.n<0)?c:n.call(r,m))!==s)break}catch(t){o=e,a=1,c=t}finally{l=1}}return{value:t,done:u}}}(n,i,o),!0),l}var s={};function a(){}function c(){}function l(){}t=Object.getPrototypeOf;var d=[][r]?t(t([][r]())):(b(t={},r,function(){return this}),t),u=l.prototype=a.prototype=Object.create(d);function m(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,b(e,i,"GeneratorFunction")),e.prototype=Object.create(u),e}return c.prototype=l,b(u,"constructor",l),b(l,"constructor",c),c.displayName="GeneratorFunction",b(l,i,"GeneratorFunction"),b(u),b(u,i,"Generator"),b(u,r,function(){return this}),b(u,"toString",function(){return"[object Generator]"}),(g=function(){return{w:o,m}})()}function b(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}b=function(e,t,n,r){function o(t,n){b(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},b(e,t,n,r)}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach(function(t){w(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function w(e,t,n){return(t=k(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function S(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,k(r.key),r)}}function k(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==p(t)?t:t+""}function C(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function q(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){C(o,r,i,s,a,"next",e)}function a(e){C(o,r,i,s,a,"throw",e)}s(void 0)})}}var 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)})());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "itsm-widget",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
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",