itsm-widget 1.0.3 → 1.0.4
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.
- package/ANGULAR-INSTALLATION.md +49 -32
- package/dist/itsm-widget.min.js +1 -1
- package/package.json +1 -1
package/ANGULAR-INSTALLATION.md
CHANGED
|
@@ -88,36 +88,53 @@ Thêm scripts và styles vào `angular.json`:
|
|
|
88
88
|
|
|
89
89
|
## ⚙️ Cấu hình (Áp dụng cho cả 2 cách)
|
|
90
90
|
|
|
91
|
-
### Bước 3:
|
|
91
|
+
### Bước 3: Copy file config (BẮT BUỘC)
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
**File `itsm-widget-config.json` là BẮT BUỘC** để widget hoạt động. Bạn cần copy file này vào `src/assets/`:
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
itsm: {
|
|
100
|
-
apiBaseUrl: 'https://your-api-domain.com',
|
|
101
|
-
apiKey: 'your-api-key',
|
|
102
|
-
tenant: 'your-tenant-name',
|
|
103
|
-
site: 'Your Site Name'
|
|
104
|
-
}
|
|
105
|
-
};
|
|
95
|
+
**Cách 1: Copy từ node_modules (nếu dùng npm install)**
|
|
96
|
+
```bash
|
|
97
|
+
# Copy file config từ package vào assets
|
|
98
|
+
cp node_modules/itsm-widget/dist/itsm-widget-config.json src/assets/itsm-widget-config.json
|
|
106
99
|
```
|
|
107
100
|
|
|
108
|
-
|
|
101
|
+
**Cách 2: Copy thủ công**
|
|
102
|
+
1. Lấy file `itsm-widget-config.json` từ `node_modules/itsm-widget/dist/` hoặc từ package
|
|
103
|
+
2. Copy vào `src/assets/itsm-widget-config.json`
|
|
104
|
+
3. Chỉnh sửa giá trị `apiBaseUrl` theo nhu cầu:
|
|
109
105
|
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"apiBaseUrl": "http://localhost:9998"
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**⚠️ Lưu ý quan trọng:**
|
|
113
|
+
- File config **BẮT BUỘC** phải có trong `src/assets/` để Angular có thể serve file này
|
|
114
|
+
- Widget sẽ tự động tìm file ở: `/assets/itsm-widget-config.json` (ưu tiên nhất)
|
|
115
|
+
- Sau khi copy, nhớ build lại project: `ng serve` hoặc `ng build`
|
|
116
|
+
|
|
117
|
+
### Bước 4: Đảm bảo assets được copy vào build
|
|
118
|
+
|
|
119
|
+
Kiểm tra `angular.json` có cấu hình assets đúng:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"projects": {
|
|
124
|
+
"your-project-name": {
|
|
125
|
+
"architect": {
|
|
126
|
+
"build": {
|
|
127
|
+
"options": {
|
|
128
|
+
"assets": [
|
|
129
|
+
"src/favicon.ico",
|
|
130
|
+
"src/assets"
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
119
136
|
}
|
|
120
|
-
}
|
|
137
|
+
}
|
|
121
138
|
```
|
|
122
139
|
|
|
123
140
|
## 🚀 Khởi tạo widget
|
|
@@ -145,15 +162,15 @@ export class AppComponent implements OnInit, OnDestroy {
|
|
|
145
162
|
// Khởi tạo ITSM Widget
|
|
146
163
|
if (typeof ITSMWidget !== 'undefined') {
|
|
147
164
|
this.itsmWidgetInstance = new ITSMWidget({
|
|
148
|
-
apiBaseUrl
|
|
149
|
-
|
|
150
|
-
|
|
165
|
+
// apiBaseUrl được load tự động từ file itsm-widget-config.json
|
|
166
|
+
// KHÔNG cần truyền apiBaseUrl vào đây
|
|
167
|
+
authToken: 'your-jwt-token-here', // JWT token từ đăng nhập thành công
|
|
151
168
|
position: 'bottom-right',
|
|
152
169
|
iconText: '📝',
|
|
153
170
|
iconColor: '#007bff',
|
|
154
171
|
title: 'Tạo phiếu yêu cầu ITSM',
|
|
155
172
|
requesterName: '', // Optional - có thể lấy từ service
|
|
156
|
-
site:
|
|
173
|
+
site: '', // Optional
|
|
157
174
|
onSuccess: (response: any) => {
|
|
158
175
|
console.log('ITSM Request submitted:', response);
|
|
159
176
|
// Hiển thị thông báo thành công
|
|
@@ -198,15 +215,15 @@ export class ItsmWidgetService implements OnDestroy {
|
|
|
198
215
|
private init(): void {
|
|
199
216
|
if (typeof ITSMWidget !== 'undefined' && !this.widgetInstance) {
|
|
200
217
|
this.widgetInstance = new ITSMWidget({
|
|
201
|
-
apiBaseUrl
|
|
202
|
-
|
|
203
|
-
|
|
218
|
+
// apiBaseUrl được load tự động từ file itsm-widget-config.json
|
|
219
|
+
// KHÔNG cần truyền apiBaseUrl vào đây
|
|
220
|
+
authToken: 'your-jwt-token-here', // JWT token từ đăng nhập thành công
|
|
204
221
|
position: 'bottom-right',
|
|
205
222
|
iconText: '📝',
|
|
206
223
|
iconColor: '#007bff',
|
|
207
224
|
title: 'Tạo phiếu yêu cầu ITSM',
|
|
208
225
|
requesterName: this.getCurrentUser(), // Lấy từ auth service
|
|
209
|
-
site:
|
|
226
|
+
site: '', // Optional
|
|
210
227
|
onSuccess: (response: any) => {
|
|
211
228
|
console.log('ITSM Request submitted:', response);
|
|
212
229
|
// Có thể emit event hoặc hiển thị notification ở đây
|
package/dist/itsm-widget.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see itsm-widget.min.js.LICENSE.txt */
|
|
2
|
-
!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ITSMWidget=e():n.ITSMWidget=e()}(window,()=>(()=>{"use strict";var n={72:(n,e,r)=>{var t,o=function(){return void 0===t&&(t=Boolean(window&&document&&document.all&&!window.atob)),t},i=function(){var n={};return function(e){if(void 0===n[e]){var r=document.querySelector(e);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(n){r=null}n[e]=r}return n[e]}}(),a=[];function s(n){for(var e=-1,r=0;r<a.length;r++)if(a[r].identifier===n){e=r;break}return e}function c(n,e){for(var r={},t=[],o=0;o<n.length;o++){var i=n[o],c=e.base?i[0]+e.base:i[0],l=r[c]||0,u="".concat(c," ").concat(l);r[c]=l+1;var d=s(u),f={css:i[1],media:i[2],sourceMap:i[3]};-1!==d?(a[d].references++,a[d].updater(f)):a.push({identifier:u,updater:g(f,e),references:1}),t.push(u)}return t}function l(n){var e=document.createElement("style"),t=n.attributes||{};if(void 0===t.nonce){var o=r.nc;o&&(t.nonce=o)}if(Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])}),"function"==typeof n.insert)n.insert(e);else{var a=i(n.insert||"head");if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(e)}return e}var u,d=(u=[],function(n,e){return u[n]=e,u.filter(Boolean).join("\n")});function f(n,e,r,t){var o=r?"":t.media?"@media ".concat(t.media," {").concat(t.css,"}"):t.css;if(n.styleSheet)n.styleSheet.cssText=d(e,o);else{var i=document.createTextNode(o),a=n.childNodes;a[e]&&n.removeChild(a[e]),a.length?n.insertBefore(i,a[e]):n.appendChild(i)}}function m(n,e,r){var t=r.css,o=r.media,i=r.sourceMap;if(o?n.setAttribute("media",o):n.removeAttribute("media"),i&&"undefined"!=typeof btoa&&(t+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}var p=null,h=0;function g(n,e){var r,t,o;if(e.singleton){var i=h++;r=p||(p=l(e)),t=f.bind(null,r,i,!1),o=f.bind(null,r,i,!0)}else r=l(e),t=m.bind(null,r,e),o=function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(r)};return t(n),function(e){if(e){if(e.css===n.css&&e.media===n.media&&e.sourceMap===n.sourceMap)return;t(n=e)}else o()}}n.exports=function(n,e){(e=e||{}).singleton||"boolean"==typeof e.singleton||(e.singleton=o());var r=c(n=n||[],e);return function(n){if(n=n||[],"[object Array]"===Object.prototype.toString.call(n)){for(var t=0;t<r.length;t++){var o=s(r[t]);a[o].references--}for(var i=c(n,e),l=0;l<r.length;l++){var u=s(r[l]);0===a[u].references&&(a[u].updater(),a.splice(u,1))}r=i}}}},314:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map(function(e){var r=n(e);return e[2]?"@media ".concat(e[2]," {").concat(r,"}"):r}).join("")},e.i=function(n,r,t){"string"==typeof n&&(n=[[null,n,""]]);var o={};if(t)for(var i=0;i<this.length;i++){var a=this[i][0];null!=a&&(o[a]=!0)}for(var s=0;s<n.length;s++){var c=[].concat(n[s]);t&&o[c[0]]||(r&&(c[2]?c[2]="".concat(r," and ").concat(c[2]):c[2]=r),e.push(c))}},e}},322:(n,e,r)=>{r.r(e),r.d(e,{default:()=>B});var t=r(72),o=r.n(t),i=r(555),a={insert:"head",singleton:!1};o()(i.A,a);i.A.locals;var s=r(890),c=[{category:"A01A00 - Quản lý an toàn điện",subcategories:[{subcategory:"A01A01 - Hệ thống",items:["Danh sách chức năng","Danh sách đơn vị","Danh sách người dùng","Danh sách nhóm","Phân quyền"]},{subcategory:"A01A02 - Giám sát an toàn",items:["Báo cáo","Khởi tạo số phiếu","Lệnh công tác","Phiếu công tác"]},{subcategory:"A01A03 - Quản lý công tác an toàn",items:["An toàn điện","Báo cáo CT ATVSLĐ","BC tháng hành động","Biên bản sinh hoạt AT","Công tác HLuyện ATLĐ","Công tác kiểm tra ATLĐ","Công tác PCCC & CNCH","Danh mục","Dụng cụ An toàn","Kế hoạch công tác AT","Kiến nghị","Lịch công tác tuần","Mạng lưới ATVSV","PCTT-TKCN","Quy trình quy định","Tai nạn lao động","Thi đua - khen thưởng","Thiết bị Hotline","Thiết bị Hotline YCNN","Thiết bị YCNN"]},{subcategory:"A01A04 - Đánh giá rủi ro",items:["Bổ sung","Danh mục DGRR","Định kỳ","Lực lượng làm công tác ATVSLĐ","QĐ thành lập nhóm"]}]}],l=["Bổ sung chương trình","Dữ liệu","Hiệu chỉnh chương trình","Nghiệp vụ","Phần mềm"],u="EVNSPC",d="A - An toàn điện",f="A1 - Phần mềm ứng dụng",m="C - The Business/Customer Service Catalog",p="Máy tính";function h(n){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},h(n)}n=r.hmd(n);var g=["apiBaseUrl"];function b(){var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,t,o,i){var c=t&&t.prototype instanceof s?t:s,l=Object.create(c.prototype);return y(l,"_invoke",function(r,t,o){var i,s,c,l=0,u=o||[],d=!1,f={p:0,n:0,v:n,a:m,f:m.bind(n,4),d:function(e,r){return i=e,s=0,c=n,f.n=r,a}};function m(r,t){for(s=r,c=t,e=0;!d&&l&&!o&&e<u.length;e++){var o,i=u[e],m=f.p,p=i[2];r>3?(o=p===t)&&(c=i[(s=i[4])?5:(s=3,3)],i[4]=i[5]=n):i[0]<=m&&((o=r<2&&m<i[1])?(s=0,f.v=t,f.n=i[1]):m<p&&(o=r<3||i[0]>t||t>p)&&(i[4]=r,i[5]=t,f.n=p,s=0))}if(o||r>1)return a;throw d=!0,t}return function(o,u,p){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&m(u,p),s=u,c=p;(e=s<2?n:c)||!d;){i||(s?s<3?(s>1&&(f.n=-1),m(s,c)):f.n=c:f.v=c);try{if(l=2,i){if(s||(o="next"),e=i[o]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,s<2&&(s=0)}else 1===s&&(e=i.return)&&e.call(i),s<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),s=1);i=n}else if((e=(d=f.n<0)?c:r.call(t,f))!==a)break}catch(e){i=n,s=1,c=e}finally{l=1}}return{value:e,done:d}}}(r,o,i),!0),l}var a={};function s(){}function c(){}function l(){}e=Object.getPrototypeOf;var u=[][t]?e(e([][t]())):(y(e={},t,function(){return this}),e),d=l.prototype=s.prototype=Object.create(u);function f(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,l):(n.__proto__=l,y(n,o,"GeneratorFunction")),n.prototype=Object.create(d),n}return c.prototype=l,y(d,"constructor",l),y(l,"constructor",c),c.displayName="GeneratorFunction",y(l,o,"GeneratorFunction"),y(d),y(d,o,"Generator"),y(d,t,function(){return this}),y(d,"toString",function(){return"[object Generator]"}),(b=function(){return{w:i,m:f}})()}function y(n,e,r,t){var o=Object.defineProperty;try{o({},"",{})}catch(n){o=0}y=function(n,e,r,t){function i(e,r){y(n,e,function(n){return this._invoke(e,r,n)})}e?o?o(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(i("next",0),i("throw",1),i("return",2))},y(n,e,r,t)}function v(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),r.push.apply(r,t)}return r}function w(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?v(Object(r),!0).forEach(function(e){x(n,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):v(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))})}return n}function x(n,e,r){return(e=C(e))in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function k(n,e){if(null==n)return{};var r,t,o=function(n,e){if(null==n)return{};var r={};for(var t in n)if({}.hasOwnProperty.call(n,t)){if(-1!==e.indexOf(t))continue;r[t]=n[t]}return r}(n,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);for(t=0;t<i.length;t++)r=i[t],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(n,r)&&(o[r]=n[r])}return o}function S(n,e){for(var r=0;r<e.length;r++){var t=e[r];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(n,C(t.key),t)}}function C(n){var e=function(n,e){if("object"!=h(n)||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var t=r.call(n,e||"default");if("object"!=h(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==h(e)?e:e+""}function T(n,e,r,t,o,i,a){try{var s=n[i](a),c=s.value}catch(n){return void r(n)}s.done?e(c):Promise.resolve(c).then(t,o)}function A(n){return function(){var e=this,r=arguments;return new Promise(function(t,o){var i=n.apply(e,r);function a(n){T(i,t,o,a,s,"next",n)}function s(n){T(i,t,o,a,s,"throw",n)}a(void 0)})}}var M=null,j=null;function q(){return O.apply(this,arguments)}function O(){return(O=A(b().m(function n(){return b().w(function(n){for(;;)switch(n.n){case 0:if(null===M){n.n=1;break}return n.a(2,M);case 1:if(null===j){n.n=2;break}return n.a(2,j);case 2:return j=A(b().m(function n(){var e,r,t,o,i,a,s,c;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,e=document.querySelectorAll('script[src*="itsm-widget"]'),r="./itsm-widget-config.json",e.length>0&&(t=e[e.length-1].src,o=t.substring(0,t.lastIndexOf("/")),r="".concat(o,"/itsm-widget-config.json")),n.n=1,fetch(r);case 1:if(!(i=n.v).ok){n.n=3;break}return n.n=2,i.json();case 2:return a=n.v,M=a,console.log("[ITSMWidget] ✅ Loaded config from file:",r,"→",a),n.a(2,a);case 3:throw s=new Error("File itsm-widget-config.json not found at: ".concat(r)),console.error("[ITSMWidget] ❌ Cannot load itsm-widget-config.json from:",r),s;case 4:n.n=6;break;case 5:throw n.p=5,c=n.v,console.error("[ITSMWidget] ❌ Error loading itsm-widget-config.json from:",configUrl,"Error:",c.message),c;case 6:return n.p=6,j=null,n.f(6);case 7:return n.a(2)}},n,null,[[0,5,6,7]])}))(),n.a(2,j)}},n)}))).apply(this,arguments)}var I=function(){return n=function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this._configPromise=this._initializeConfig(e)},e=[{key:"_initializeConfig",value:(i=A(b().m(function n(e){var r,t,o;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:return console.log("[ITSMWidget] Đang load apiBaseUrl từ file itsm-widget-config.json..."),n.p=1,n.n=2,q();case 2:if((r=n.v)&&r.apiBaseUrl){n.n=3;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 3:console.log("[ITSMWidget] ✅ Loaded apiBaseUrl từ file:",r.apiBaseUrl),e.apiBaseUrl&&console.warn("[ITSMWidget] ⚠️ apiBaseUrl trong constructor bị bỏ qua. Chỉ sử dụng apiBaseUrl từ file itsm-widget-config.json"),e.apiBaseUrl,t=k(e,g),this.config=this._buildConfig(w(w({},r),t)),this._initWidget(),n.n=5;break;case 4:throw n.p=4,o=n.v,console.error("[ITSMWidget] ❌ Lỗi: Không thể load apiBaseUrl từ file itsm-widget-config.json:",o),console.error("[ITSMWidget] Vui lòng đảm bảo file itsm-widget-config.json tồn tại và có apiBaseUrl"),new Error("Không thể load config: ".concat(o.message));case 5:return n.a(2)}},n,this,[[1,4]])})),function(n){return i.apply(this,arguments)})},{key:"_buildConfig",value:function(n){if(!n.apiBaseUrl)throw new Error("apiBaseUrl is required in itsm-widget-config.json");var e=n.apiBaseUrl;return console.log("[ITSMWidget] Building config with apiBaseUrl:",e,"(từ file itsm-widget-config.json)"),w({apiBaseUrl:e,authToken:n.authToken||n.apiToken||"",position:n.position||"bottom-right",iconText:n.iconText||"📝",iconImage:void 0!==n.iconImage?n.iconImage:"data:image/png;base64,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",iconColor:n.iconColor||"#335fb3",title:n.title||"Tạo phiếu yêu cầu ITSM",requesterName:n.requesterName||"",site:n.site||"",udf_fields:n.udf_fields||{}},n)}},{key:"_initWidget",value:function(){console.log("[ITSMWidget] Initializing widget with config:",{apiBaseUrl:this.config.apiBaseUrl,hasAuthToken:!!this.config.authToken,position:this.config.position}),this.apiService=new s.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 n=document.createElement("div");n.id="itsm-widget-button",n.className="itsm-widget-button itsm-position-".concat(this.config.position);var e="";e=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 r=this.config.iconImage&&null!==this.config.iconImage?"":"background-color: ".concat(this.config.iconColor,";");n.style.borderColor=this.config.iconColor,n.innerHTML='\n <div class="itsm-widget-icon" style="'.concat(r,'">\n ').concat(e,"\n </div>\n "),document.body.appendChild(n),this.widgetContainer=n}},{key:"createModal",value:function(){var n=document.createElement("div");n.id="itsm-widget-modal",n.className="itsm-modal-overlay",n.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 <select id="itsm-category" name="category" class="itsm-select" required>\n <option value="">-- Chọn danh mục --</option>\n </select>\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 <select id="itsm-subcategory" name="subcategory" class="itsm-select" required disabled>\n <option value="">Chưa lựa chọn</option>\n </select>\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 <select id="itsm-item" name="item" class="itsm-select" required disabled>\n <option value="">Chưa lựa chọn</option>\n </select>\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 <select id="itsm-priority" name="priority" class="itsm-select" required>\n <option value="" selected>Chưa lựa chọn</option>\n <option value="low">Thấp</option>\n <option value="medium">Trung bình</option>\n <option value="high">Cao</option>\n </select>\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 <select id="itsm-udf-pick-305" name="udf_pick_305" class="itsm-select">\n <option value="">Chưa lựa chọn</option>\n </select>\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 <select id="itsm-udf-pick-306" name="udf_pick_306" class="itsm-select" required>\n <option value="">Chưa lựa chọn</option>\n <option value="Máy tính">Máy tính</option>\n <option value="Máy tính bảng">Máy tính bảng</option>\n <option value="Điện thoại">Điện thoại</option>\n <option value="Laptop">Laptop</option>\n </select>\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(n),this.modalContainer=n}},{key:"attachEvents",value:function(){var n=this;this.widgetContainer.addEventListener("click",function(){n.toggleModal()});var e=this.modalContainer.querySelector(".itsm-modal-close"),r=this.modalContainer.querySelector("#itsm-cancel-btn"),t=this.modalContainer;e&&e.addEventListener("click",function(){return n.closeModal()}),r&&r.addEventListener("click",function(){return n.closeModal()}),t.addEventListener("click",function(e){e.target===t&&n.closeModal()}),this.modalContainer.querySelector("#itsm-request-form").addEventListener("submit",function(e){return n.handleSubmit(e)}),this.modalContainer.querySelector("#itsm-attachment").addEventListener("change",function(e){return n.handleFileSelect(e)}),this.initEditor(),this.initCategoryDropdowns()}},{key:"initEditor",value:function(){var n=this.modalContainer.querySelector("#itsm-description-editor"),e=this.modalContainer.querySelector("#itsm-description"),r=this.modalContainer.querySelector(".itsm-editor-toolbar");n.addEventListener("input",function(){e.value=n.innerHTML,n.textContent.trim()?e.setCustomValidity(""):e.setCustomValidity("Mô tả là bắt buộc")}),n.addEventListener("focus",function(){""===n.textContent.trim()&&(n.innerHTML="")}),n.addEventListener("blur",function(){""===n.textContent.trim()&&(n.innerHTML="")}),r.querySelectorAll(".itsm-editor-btn[data-command]").forEach(function(r){r.addEventListener("click",function(t){t.preventDefault();var o=r.getAttribute("data-command");n.focus(),document.execCommand(o,!1,null),e.value=n.innerHTML})})}},{key:"initCategoryDropdowns",value:function(){var n=this.modalContainer.querySelector("#itsm-category"),e=this.modalContainer.querySelector("#itsm-subcategory"),r=this.modalContainer.querySelector("#itsm-item"),t=this.modalContainer.querySelector("#itsm-udf-pick-305");c.map(function(n){return n.category}).forEach(function(e){var r=document.createElement("option");r.value=e,r.textContent=e,n.appendChild(r)}),l.forEach(function(n){var e=document.createElement("option");e.value=n,e.textContent=n,t.appendChild(e)}),n&&n.addEventListener("change",function(n){var t,o,i=n.target.value;e&&(e.innerHTML='<option value="">Chưa lựa chọn</option>',e.disabled=!i),r&&(r.innerHTML='<option value="">Chưa lựa chọn</option>',r.disabled=!0),i&&((t=i,(o=c.find(function(n){return n.category===t}))?o.subcategories.map(function(n){return n.subcategory}):[]).forEach(function(n){var r=document.createElement("option");r.value=n,r.textContent=n,e&&e.appendChild(r)}),e&&(e.disabled=!1))}),e&&e.addEventListener("change",function(e){var t=null==n?void 0:n.value,o=e.target.value;r&&(r.innerHTML='<option value="">Chưa lựa chọn</option>',r.disabled=!o),t&&o&&(function(n,e){var r=c.find(function(e){return e.category===n});if(!r)return[];var t=r.subcategories.find(function(n){return n.subcategory===e});return t?t.items:[]}(t,o).forEach(function(n){var e=document.createElement("option");e.value=n,e.textContent=n,r&&r.appendChild(e)}),r&&(r.disabled=!1))})}},{key:"toggleModal",value:function(){this.isOpen?this.closeModal():this.openModal()}},{key:"openModal",value:function(){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(n){var e=this,r=Array.from(n.target.files),t=this.modalContainer.querySelector("#itsm-file-list");0!==r.length?t.innerHTML=r.map(function(n){return'\n <div class="itsm-file-item">\n <span class="itsm-file-name">'.concat(n.name,'</span>\n <span class="itsm-file-size">').concat(e.formatFileSize(n.size),"</span>\n </div>\n ")}).join(""):t.innerHTML=""}},{key:"formatFileSize",value:function(n){if(0===n)return"0 Bytes";var e=Math.floor(Math.log(n)/Math.log(1024));return Math.round(n/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]}},{key:"handleSubmit",value:(o=A(b().m(function n(e){var r,t,o,i,a,s,c,l,u,d,f,m,p,h,g=this;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e.preventDefault(),r=e.target,t=new FormData(r),o={title:t.get("title"),description:t.get("description"),requester:this.config.requesterName||t.get("requester")||"",category:t.get("category"),subcategory:t.get("subcategory"),item:t.get("item"),priority:t.get("priority"),site:this.config.site||t.get("site")||"",udf_pick_305:t.get("udf_pick_305"),udf_pick_306:t.get("udf_pick_306"),contact:t.get("contact"),attachments:[]},i=this.modalContainer.querySelector("#itsm-description-editor"),o.description=i?i.innerHTML.trim():o.description,o.title&&o.description&&o.category&&o.subcategory&&o.item&&o.priority&&o.udf_pick_306&&o.requester){n.n=1;break}return this.showMessage("Vui lòng điền đầy đủ thông tin bắt buộc!","error"),n.a(2);case 1:if(i&&i.textContent.trim()){n.n=2;break}return this.showMessage("Mô tả không được để trống!","error"),null==i||i.focus(),n.a(2);case 2:return a=r.querySelector("#itsm-attachment"),s=Array.from(a.files),c=r.querySelector("#itsm-submit-btn"),l=c.querySelector(".itsm-btn-text"),u=c.querySelector(".itsm-btn-loading"),l.style.display="none",u.style.display="inline",c.disabled=!0,n.p=3,n.n=4,this.submitRequest(o,s);case 4:d=n.v,this.showMessage("Phiếu yêu cầu đã được gửi thành công!","success"),r.reset(),(f=this.modalContainer.querySelector("#itsm-description-editor"))&&(f.innerHTML=""),this.modalContainer.querySelector("#itsm-file-list").innerHTML="",m=this.modalContainer.querySelector("#itsm-subcategory"),p=this.modalContainer.querySelector("#itsm-item"),m&&(m.innerHTML='<option value="">Chưa lựa chọn</option>',m.disabled=!0),p&&(p.innerHTML='<option value="">Chưa lựa chọn</option>',p.disabled=!0),setTimeout(function(){g.closeModal()},1500),this.config.onSuccess&&this.config.onSuccess(d),n.n=6;break;case 5:n.p=5,h=n.v,console.error("Error submitting ITSM request:",h),this.showMessage(h.message||"Có lỗi xảy ra khi gửi yêu cầu. Vui lòng thử lại!","error");case 6:return n.p=6,l.style.display="inline",u.style.display="none",c.disabled=!1,n.f(6);case 7:return n.a(2)}},n,this,[[3,5,6,7]])})),function(n){return o.apply(this,arguments)})},{key:"submitRequest",value:(t=A(b().m(function n(e,r){var t,o,i;return b().w(function(n){for(;;)switch(n.n){case 0:if(t={udf_pick_301:u||"EVNSPC",udf_pick_302:d||"A - An toàn điện",udf_pick_303:f||"A1 - Phần mềm ứng dụng",udf_pick_304:m||"C - The Business/Customer Service Catalog",udf_pick_305:e.udf_pick_305||null,udf_pick_306:e.udf_pick_306||p||null,udf_pick_602:null,udf_mline_603:""},Object.assign(t,this.config.udf_fields||{}),o=this.apiService.buildRequestData(e,{requesterName:this.config.requesterName||e.requester||e.contact||"",site:this.config.site||e.site||null,category:e.category,subcategory:e.subcategory,item:e.item,template:e.category,udf_fields:t,zia_properties:this.config.zia_properties||{}}),!((i=r&&r.length>0?Array.from(r):[]).length>0)){n.n=2;break}return n.n=1,this.apiService.createRequestWithAttachments(o,i);case 1:case 3:return n.a(2,n.v);case 2:return n.n=3,this.apiService.createRequest(o);case 4:return n.a(2)}},n,this)})),function(n,e){return t.apply(this,arguments)})},{key:"showMessage",value:function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info",r=document.querySelector(".itsm-message");r&&r.remove();var t=document.createElement("div");t.className="itsm-message itsm-message-".concat(e),t.textContent=n,document.body.appendChild(t),setTimeout(function(){t.classList.add("itsm-message-show")},10),setTimeout(function(){t.classList.remove("itsm-message-show"),setTimeout(function(){return t.remove()},300)},3e3)}},{key:"destroy",value:function(){this.widgetContainer&&this.widgetContainer.remove(),this.modalContainer&&this.modalContainer.remove(),document.body.style.overflow=""}}],e&&S(n.prototype,e),r&&S(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,e,r,t,o,i}();n.exports&&(n.exports=I,n.exports.default=I);const B=I;"undefined"!=typeof window&&(window.ITSMWidget=I,window.ITSMWidget.default||(window.ITSMWidget.default=I),document.addEventListener("DOMContentLoaded",function(){var n=document.querySelector("script[data-itsm-config]");if(n)try{var e=JSON.parse(n.getAttribute("data-itsm-config"));window.itsmWidgetInstance=new I(e)}catch(n){console.error("Error parsing ITSM widget config:",n)}}))},555:(n,e,r)=>{r.d(e,{A:()=>i});var t=r(314),o=r.n(t)()(function(n){return n[1]});o.push([n.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/* 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.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/* 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 i=o},890:(n,e,r)=>{function t(n){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},t(n)}function o(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),r.push.apply(r,t)}return r}function i(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?o(Object(r),!0).forEach(function(e){a(n,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))})}return n}function a(n,e,r){return(e=u(e))in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function s(){var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,t,o,i){var s=t&&t.prototype instanceof l?t:l,u=Object.create(s.prototype);return c(u,"_invoke",function(r,t,o){var i,s,c,l=0,u=o||[],d=!1,f={p:0,n:0,v:n,a:m,f:m.bind(n,4),d:function(e,r){return i=e,s=0,c=n,f.n=r,a}};function m(r,t){for(s=r,c=t,e=0;!d&&l&&!o&&e<u.length;e++){var o,i=u[e],m=f.p,p=i[2];r>3?(o=p===t)&&(c=i[(s=i[4])?5:(s=3,3)],i[4]=i[5]=n):i[0]<=m&&((o=r<2&&m<i[1])?(s=0,f.v=t,f.n=i[1]):m<p&&(o=r<3||i[0]>t||t>p)&&(i[4]=r,i[5]=t,f.n=p,s=0))}if(o||r>1)return a;throw d=!0,t}return function(o,u,p){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&m(u,p),s=u,c=p;(e=s<2?n:c)||!d;){i||(s?s<3?(s>1&&(f.n=-1),m(s,c)):f.n=c:f.v=c);try{if(l=2,i){if(s||(o="next"),e=i[o]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,s<2&&(s=0)}else 1===s&&(e=i.return)&&e.call(i),s<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),s=1);i=n}else if((e=(d=f.n<0)?c:r.call(t,f))!==a)break}catch(e){i=n,s=1,c=e}finally{l=1}}return{value:e,done:d}}}(r,o,i),!0),u}var a={};function l(){}function u(){}function d(){}e=Object.getPrototypeOf;var f=[][t]?e(e([][t]())):(c(e={},t,function(){return this}),e),m=d.prototype=l.prototype=Object.create(f);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,d):(n.__proto__=d,c(n,o,"GeneratorFunction")),n.prototype=Object.create(m),n}return u.prototype=d,c(m,"constructor",d),c(d,"constructor",u),u.displayName="GeneratorFunction",c(d,o,"GeneratorFunction"),c(m),c(m,o,"Generator"),c(m,t,function(){return this}),c(m,"toString",function(){return"[object Generator]"}),(s=function(){return{w:i,m:p}})()}function c(n,e,r,t){var o=Object.defineProperty;try{o({},"",{})}catch(n){o=0}c=function(n,e,r,t){function i(e,r){c(n,e,function(n){return this._invoke(e,r,n)})}e?o?o(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(i("next",0),i("throw",1),i("return",2))},c(n,e,r,t)}function l(n,e){for(var r=0;r<e.length;r++){var t=e[r];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(n,u(t.key),t)}}function u(n){var e=function(n,e){if("object"!=t(n)||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var o=r.call(n,e||"default");if("object"!=t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==t(e)?e:e+""}function d(n,e,r,t,o,i,a){try{var s=n[i](a),c=s.value}catch(n){return void r(n)}s.done?e(c):Promise.resolve(c).then(t,o)}function f(n){return function(){var e=this,r=arguments;return new Promise(function(t,o){var i=n.apply(e,r);function a(n){d(i,t,o,a,s,"next",n)}function s(n){d(i,t,o,a,s,"throw",n)}a(void 0)})}}r.d(e,{A:()=>y}),n=r.hmd(n);var m=null,p=null;function h(){return g.apply(this,arguments)}function g(){return(g=f(s().m(function n(){return s().w(function(n){for(;;)switch(n.n){case 0:if(null===m){n.n=1;break}return n.a(2,m);case 1:if(null===p){n.n=2;break}return n.a(2,p);case 2:return p=f(s().m(function n(){var e,r,t,o,i,a,c,l;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,e=document.querySelectorAll('script[src*="itsm-widget"]'),r="./itsm-widget-config.json",e.length>0&&(t=e[e.length-1].src,o=t.substring(0,t.lastIndexOf("/")),r="".concat(o,"/itsm-widget-config.json")),console.log("[ITSMAPIService] Đang load apiBaseUrl từ file itsm-widget-config.json..."),n.n=1,fetch(r);case 1:if(!(i=n.v).ok){n.n=3;break}return n.n=2,i.json();case 2:return a=n.v,m=a,console.log("[ITSMAPIService] ✅ Loaded config from file:",r,"→",a),n.a(2,a);case 3:throw c=new Error("File itsm-widget-config.json not found at: ".concat(r)),console.error("[ITSMAPIService] ❌ Cannot load itsm-widget-config.json from:",r),c;case 4:n.n=6;break;case 5:throw n.p=5,l=n.v,console.error("[ITSMAPIService] ❌ Error loading itsm-widget-config.json:",l.message),l;case 6:return n.p=6,p=null,n.f(6);case 7:return n.a(2)}},n,null,[[0,5,6,7]])}))(),n.a(2,p)}},n)}))).apply(this,arguments)}var b=function(){return n=function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.authToken=e.authToken||e.apiToken||"",e.baseUrl&&console.warn("[ITSMAPIService] ⚠️ baseUrl trong constructor bị bỏ qua. Chỉ sử dụng apiBaseUrl từ file itsm-widget-config.json"),this.baseUrl="",this._baseUrlPromise=this._initializeBaseUrl()},e=[{key:"_initializeBaseUrl",value:(d=f(s().m(function n(){var e,r;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,h();case 1:if((e=n.v)&&e.apiBaseUrl){n.n=2;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 2:return this.baseUrl=e.apiBaseUrl,console.log("[ITSMAPIService] ✅ baseUrl đã được load từ file:",this.baseUrl),n.a(2,this.baseUrl);case 3:throw n.p=3,r=n.v,console.error("[ITSMAPIService] ❌ Lỗi: Không thể load apiBaseUrl từ file itsm-widget-config.json:",r),new Error("Không thể load apiBaseUrl: ".concat(r.message));case 4:return n.a(2)}},n,this,[[0,3]])})),function(){return d.apply(this,arguments)})},{key:"_ensureBaseUrl",value:(u=f(s().m(function n(){return s().w(function(n){for(;;)switch(n.n){case 0:if(this.baseUrl||!this._baseUrlPromise){n.n=1;break}return n.n=1,this._baseUrlPromise;case 1:if(this.baseUrl){n.n=2;break}throw new Error("baseUrl is required. Please ensure itsm-widget-config.json exists and contains apiBaseUrl.");case 2:return n.a(2)}},n,this)})),function(){return u.apply(this,arguments)})},{key:"buildHeaders",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"application/json",e={};return this.authToken&&(e.Authorization="Bearer ".concat(this.authToken)),"multipart/form-data"!==n&&(e["Content-Type"]=n),e}},{key:"createRequest",value:(c=f(s().m(function n(e){var r,t,o,i,a;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,this._ensureBaseUrl();case 1:return r="".concat(this.baseUrl,"/spcit/send"),t={request:{requester:e.requester||{name:""},assets:e.assets||[],category:e.category||null,group:e.group||null,subcategory:e.subcategory||null,technician:e.technician||null,item:e.item||null,priority:e.priority||null,subject:e.subject||"",description:e.description||"",site:e.site||null,attachments:e.attachments||[],udf_fields:e.udf_fields||{},template:e.template||null,zia_properties:e.zia_properties||{}}},n.p=2,n.n=3,fetch(r,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(t)});case 3:return o=n.v,n.n=4,o.json();case 4:if(i=n.v,o.ok){n.n=5;break}throw new Error(i.error||i.message||"HTTP error! status: ".concat(o.status));case 5:return n.a(2,i);case 6:throw n.p=6,a=n.v,console.error("Error creating request:",a),a;case 7:return n.a(2)}},n,this,[[2,6]])})),function(n){return c.apply(this,arguments)})},{key:"uploadAttachment",value:(a=f(s().m(function n(e,r){var t,o,i,a,c;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,this._ensureBaseUrl();case 1:return t="".concat(this.baseUrl,"/spcit/").concat(e,"/upload"),o=new FormData,(Array.isArray(r)?r:[r]).forEach(function(n){n instanceof File&&o.append("files",n)}),n.p=2,n.n=3,fetch(t,{method:"PUT",headers:this.buildHeaders("multipart/form-data"),body:o});case 3:return i=n.v,n.n=4,i.json();case 4:if(a=n.v,i.ok){n.n=5;break}throw new Error(a.error||a.message||"HTTP error! status: ".concat(i.status));case 5:return n.a(2,a);case 6:throw n.p=6,c=n.v,console.error("Error uploading attachment:",c),c;case 7:return n.a(2)}},n,this,[[2,6]])})),function(n,e){return a.apply(this,arguments)})},{key:"createRequestWithAttachments",value:(o=f(s().m(function n(e){var r,t,o,a,c,l,u=arguments;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return r=u.length>1&&void 0!==u[1]?u[1]:[],n.p=1,n.n=2,this.createRequest(e);case 2:if(o=n.v,!(r&&r.length>0&&null!==(t=o.request)&&void 0!==t&&t.id)){n.n=6;break}return n.p=3,n.n=4,this.uploadAttachment(o.request.id,r);case 4:return a=n.v,n.a(2,i(i({},o),{},{uploadResponse:a}));case 5:return n.p=5,c=n.v,console.warn("Request created but file upload failed:",c),n.a(2,i(i({},o),{},{uploadError:c.message}));case 6:return n.a(2,o);case 7:throw n.p=7,l=n.v,console.error("Error creating request with attachments:",l),l;case 8:return n.a(2)}},n,this,[[3,5],[1,7]])})),function(n){return o.apply(this,arguments)})},{key:"getRequest",value:(t=f(s().m(function n(e){var r,t,o,i,a;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,this._ensureBaseUrl();case 1:return r="".concat(this.baseUrl,"/spcit/ticket/").concat(e),n.p=2,(t=this.buildHeaders("application/json")).Accept="application/json",n.n=3,fetch(r,{method:"POST",headers:t,body:JSON.stringify({request_id:e})});case 3:return o=n.v,n.n=4,o.json();case 4:if(i=n.v,o.ok){n.n=5;break}throw new Error(i.error||i.message||"HTTP error! status: ".concat(o.status));case 5:return n.a(2,i);case 6:throw n.p=6,a=n.v,console.error("Error getting request:",a),a;case 7:return n.a(2)}},n,this,[[2,6]])})),function(n){return t.apply(this,arguments)})},{key:"mapPriority",value:function(n){return{low:"Thấp",medium:"Trung bình",high:"Cao",none:"Chưa lựa chọn"}[n]||"Chưa lựa chọn"}},{key:"mapCategory",value:function(n){return{hardware:"A01A00 - Quản lý an toàn thông tin",software:"Software Category",network:"Network Category",account:"Account Category",other:"Other Category"}[n]||null}},{key:"buildRequestData",value:function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.category||this.mapCategory(n.category),t=e.subcategory||n.subcategory||null,o=e.item||n.item||null,i=e.template||r||null,a=e.requesterName||n.requester||n.contact||"",s=e.site||n.site||"";return{requester:{name:a},category:r?{name:r}:null,subcategory:t?{name:t}:null,priority:{name:this.mapPriority(n.priority||"none")},subject:n.title||"",description:n.description||"",site:s?{name:s}:null,item:o?{name:o}:null,template:i?{name:i}:null,udf_fields:e.udf_fields||{},zia_properties:e.zia_properties||{},assets:[],attachments:[],group:null,technician:null}}}],e&&l(n.prototype,e),r&&l(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,e,r,t,o,a,c,u,d}();n.exports&&(n.exports=b),"undefined"!=typeof window&&(window.ITSMAPIService=b);const y=b}},e={};function r(t){var o=e[t];if(void 0!==o)return o.exports;var i=e[t]={id:t,loaded:!1,exports:{}};return n[t](i,i.exports,r),i.loaded=!0,i.exports}return r.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return r.d(e,{a:e}),e},r.d=(n,e)=>{for(var t in e)r.o(e,t)&&!r.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:e[t]})},r.hmd=n=>((n=Object.create(n)).children||(n.children=[]),Object.defineProperty(n,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+n.id)}}),n),r.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),r.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},r.nc=void 0,r(322)})());
|
|
2
|
+
!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ITSMWidget=e():n.ITSMWidget=e()}(window,()=>(()=>{"use strict";var n={72:(n,e,r)=>{var t,o=function(){return void 0===t&&(t=Boolean(window&&document&&document.all&&!window.atob)),t},i=function(){var n={};return function(e){if(void 0===n[e]){var r=document.querySelector(e);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(n){r=null}n[e]=r}return n[e]}}(),a=[];function s(n){for(var e=-1,r=0;r<a.length;r++)if(a[r].identifier===n){e=r;break}return e}function c(n,e){for(var r={},t=[],o=0;o<n.length;o++){var i=n[o],c=e.base?i[0]+e.base:i[0],l=r[c]||0,u="".concat(c," ").concat(l);r[c]=l+1;var d=s(u),f={css:i[1],media:i[2],sourceMap:i[3]};-1!==d?(a[d].references++,a[d].updater(f)):a.push({identifier:u,updater:g(f,e),references:1}),t.push(u)}return t}function l(n){var e=document.createElement("style"),t=n.attributes||{};if(void 0===t.nonce){var o=r.nc;o&&(t.nonce=o)}if(Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])}),"function"==typeof n.insert)n.insert(e);else{var a=i(n.insert||"head");if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(e)}return e}var u,d=(u=[],function(n,e){return u[n]=e,u.filter(Boolean).join("\n")});function f(n,e,r,t){var o=r?"":t.media?"@media ".concat(t.media," {").concat(t.css,"}"):t.css;if(n.styleSheet)n.styleSheet.cssText=d(e,o);else{var i=document.createTextNode(o),a=n.childNodes;a[e]&&n.removeChild(a[e]),a.length?n.insertBefore(i,a[e]):n.appendChild(i)}}function m(n,e,r){var t=r.css,o=r.media,i=r.sourceMap;if(o?n.setAttribute("media",o):n.removeAttribute("media"),i&&"undefined"!=typeof btoa&&(t+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}var p=null,h=0;function g(n,e){var r,t,o;if(e.singleton){var i=h++;r=p||(p=l(e)),t=f.bind(null,r,i,!1),o=f.bind(null,r,i,!0)}else r=l(e),t=m.bind(null,r,e),o=function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(r)};return t(n),function(e){if(e){if(e.css===n.css&&e.media===n.media&&e.sourceMap===n.sourceMap)return;t(n=e)}else o()}}n.exports=function(n,e){(e=e||{}).singleton||"boolean"==typeof e.singleton||(e.singleton=o());var r=c(n=n||[],e);return function(n){if(n=n||[],"[object Array]"===Object.prototype.toString.call(n)){for(var t=0;t<r.length;t++){var o=s(r[t]);a[o].references--}for(var i=c(n,e),l=0;l<r.length;l++){var u=s(r[l]);0===a[u].references&&(a[u].updater(),a.splice(u,1))}r=i}}}},314:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map(function(e){var r=n(e);return e[2]?"@media ".concat(e[2]," {").concat(r,"}"):r}).join("")},e.i=function(n,r,t){"string"==typeof n&&(n=[[null,n,""]]);var o={};if(t)for(var i=0;i<this.length;i++){var a=this[i][0];null!=a&&(o[a]=!0)}for(var s=0;s<n.length;s++){var c=[].concat(n[s]);t&&o[c[0]]||(r&&(c[2]?c[2]="".concat(r," and ").concat(c[2]):c[2]=r),e.push(c))}},e}},322:(n,e,r)=>{r.r(e),r.d(e,{default:()=>B});var t=r(72),o=r.n(t),i=r(555),a={insert:"head",singleton:!1};o()(i.A,a);i.A.locals;var s=r(890),c=[{category:"A01A00 - Quản lý an toàn điện",subcategories:[{subcategory:"A01A01 - Hệ thống",items:["Danh sách chức năng","Danh sách đơn vị","Danh sách người dùng","Danh sách nhóm","Phân quyền"]},{subcategory:"A01A02 - Giám sát an toàn",items:["Báo cáo","Khởi tạo số phiếu","Lệnh công tác","Phiếu công tác"]},{subcategory:"A01A03 - Quản lý công tác an toàn",items:["An toàn điện","Báo cáo CT ATVSLĐ","BC tháng hành động","Biên bản sinh hoạt AT","Công tác HLuyện ATLĐ","Công tác kiểm tra ATLĐ","Công tác PCCC & CNCH","Danh mục","Dụng cụ An toàn","Kế hoạch công tác AT","Kiến nghị","Lịch công tác tuần","Mạng lưới ATVSV","PCTT-TKCN","Quy trình quy định","Tai nạn lao động","Thi đua - khen thưởng","Thiết bị Hotline","Thiết bị Hotline YCNN","Thiết bị YCNN"]},{subcategory:"A01A04 - Đánh giá rủi ro",items:["Bổ sung","Danh mục DGRR","Định kỳ","Lực lượng làm công tác ATVSLĐ","QĐ thành lập nhóm"]}]}],l=["Bổ sung chương trình","Dữ liệu","Hiệu chỉnh chương trình","Nghiệp vụ","Phần mềm"],u="EVNSPC",d="A - An toàn điện",f="A1 - Phần mềm ứng dụng",m="C - The Business/Customer Service Catalog",p="Máy tính";function h(n){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},h(n)}n=r.hmd(n);var g=["apiBaseUrl"];function b(){var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,t,o,i){var c=t&&t.prototype instanceof s?t:s,l=Object.create(c.prototype);return y(l,"_invoke",function(r,t,o){var i,s,c,l=0,u=o||[],d=!1,f={p:0,n:0,v:n,a:m,f:m.bind(n,4),d:function(e,r){return i=e,s=0,c=n,f.n=r,a}};function m(r,t){for(s=r,c=t,e=0;!d&&l&&!o&&e<u.length;e++){var o,i=u[e],m=f.p,p=i[2];r>3?(o=p===t)&&(c=i[(s=i[4])?5:(s=3,3)],i[4]=i[5]=n):i[0]<=m&&((o=r<2&&m<i[1])?(s=0,f.v=t,f.n=i[1]):m<p&&(o=r<3||i[0]>t||t>p)&&(i[4]=r,i[5]=t,f.n=p,s=0))}if(o||r>1)return a;throw d=!0,t}return function(o,u,p){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&m(u,p),s=u,c=p;(e=s<2?n:c)||!d;){i||(s?s<3?(s>1&&(f.n=-1),m(s,c)):f.n=c:f.v=c);try{if(l=2,i){if(s||(o="next"),e=i[o]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,s<2&&(s=0)}else 1===s&&(e=i.return)&&e.call(i),s<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),s=1);i=n}else if((e=(d=f.n<0)?c:r.call(t,f))!==a)break}catch(e){i=n,s=1,c=e}finally{l=1}}return{value:e,done:d}}}(r,o,i),!0),l}var a={};function s(){}function c(){}function l(){}e=Object.getPrototypeOf;var u=[][t]?e(e([][t]())):(y(e={},t,function(){return this}),e),d=l.prototype=s.prototype=Object.create(u);function f(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,l):(n.__proto__=l,y(n,o,"GeneratorFunction")),n.prototype=Object.create(d),n}return c.prototype=l,y(d,"constructor",l),y(l,"constructor",c),c.displayName="GeneratorFunction",y(l,o,"GeneratorFunction"),y(d),y(d,o,"Generator"),y(d,t,function(){return this}),y(d,"toString",function(){return"[object Generator]"}),(b=function(){return{w:i,m:f}})()}function y(n,e,r,t){var o=Object.defineProperty;try{o({},"",{})}catch(n){o=0}y=function(n,e,r,t){function i(e,r){y(n,e,function(n){return this._invoke(e,r,n)})}e?o?o(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(i("next",0),i("throw",1),i("return",2))},y(n,e,r,t)}function v(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),r.push.apply(r,t)}return r}function w(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?v(Object(r),!0).forEach(function(e){x(n,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):v(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))})}return n}function x(n,e,r){return(e=S(e))in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function k(n,e){if(null==n)return{};var r,t,o=function(n,e){if(null==n)return{};var r={};for(var t in n)if({}.hasOwnProperty.call(n,t)){if(-1!==e.indexOf(t))continue;r[t]=n[t]}return r}(n,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);for(t=0;t<i.length;t++)r=i[t],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(n,r)&&(o[r]=n[r])}return o}function C(n,e){for(var r=0;r<e.length;r++){var t=e[r];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(n,S(t.key),t)}}function S(n){var e=function(n,e){if("object"!=h(n)||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var t=r.call(n,e||"default");if("object"!=h(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==h(e)?e:e+""}function T(n,e,r,t,o,i,a){try{var s=n[i](a),c=s.value}catch(n){return void r(n)}s.done?e(c):Promise.resolve(c).then(t,o)}function A(n){return function(){var e=this,r=arguments;return new Promise(function(t,o){var i=n.apply(e,r);function a(n){T(i,t,o,a,s,"next",n)}function s(n){T(i,t,o,a,s,"throw",n)}a(void 0)})}}var j=null,M=null;function q(){return O.apply(this,arguments)}function O(){return(O=A(b().m(function n(){return b().w(function(n){for(;;)switch(n.n){case 0:if(null===j){n.n=1;break}return n.a(2,j);case 1:if(null===M){n.n=2;break}return n.a(2,M);case 2:return M=A(b().m(function n(){var e,r,t,o,i,a,s,c,l,u;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:(e=[]).push("/assets/itsm-widget-config.json"),e.push("./assets/itsm-widget-config.json"),e.push("/itsm-widget-config.json"),e.push("./itsm-widget-config.json"),(r=document.querySelectorAll('script[src*="itsm-widget"]')).length>0&&(t=r[r.length-1].src,o=t.substring(0,t.lastIndexOf("/")),e.push("".concat(o,"/itsm-widget-config.json"))),i=0,a=e;case 1:if(!(i<a.length)){n.n=8;break}return s=a[i],n.p=2,n.n=3,fetch(s);case 3:if(!(c=n.v).ok){n.n=5;break}return n.n=4,c.json();case 4:return l=n.v,j=l,console.log("[ITSMWidget] ✅ Loaded config from file:",s,"→",l),n.a(2,l);case 5:n.n=7;break;case 6:return n.p=6,n.v,n.a(3,7);case 7:i++,n.n=1;break;case 8:throw u=new Error("File itsm-widget-config.json not found. Đã thử các vị trí: ".concat(e.join(", "))),console.error("[ITSMWidget] ❌ Cannot load itsm-widget-config.json from any location:",e),u;case 9:return n.a(2)}},n,null,[[2,6]])}))(),n.a(2,M)}},n)}))).apply(this,arguments)}var I=function(){return n=function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this._configPromise=this._initializeConfig(e)},e=[{key:"_initializeConfig",value:(i=A(b().m(function n(e){var r,t,o;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:return console.log("[ITSMWidget] Đang load apiBaseUrl từ file itsm-widget-config.json..."),n.p=1,n.n=2,q();case 2:if((r=n.v)&&r.apiBaseUrl){n.n=3;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 3:console.log("[ITSMWidget] ✅ Loaded apiBaseUrl từ file:",r.apiBaseUrl),e.apiBaseUrl&&console.warn("[ITSMWidget] ⚠️ apiBaseUrl trong constructor bị bỏ qua. Chỉ sử dụng apiBaseUrl từ file itsm-widget-config.json"),e.apiBaseUrl,t=k(e,g),this.config=this._buildConfig(w(w({},r),t)),this._initWidget(),n.n=5;break;case 4:throw n.p=4,o=n.v,console.error("[ITSMWidget] ❌ Lỗi: Không thể load apiBaseUrl từ file itsm-widget-config.json:",o),console.error("[ITSMWidget] Vui lòng đảm bảo file itsm-widget-config.json tồn tại và có apiBaseUrl"),new Error("Không thể load config: ".concat(o.message));case 5:return n.a(2)}},n,this,[[1,4]])})),function(n){return i.apply(this,arguments)})},{key:"_buildConfig",value:function(n){if(!n.apiBaseUrl)throw new Error("apiBaseUrl is required in itsm-widget-config.json");var e=n.apiBaseUrl;return console.log("[ITSMWidget] Building config with apiBaseUrl:",e,"(từ file itsm-widget-config.json)"),w({apiBaseUrl:e,authToken:n.authToken||n.apiToken||"",position:n.position||"bottom-right",iconText:n.iconText||"📝",iconImage:void 0!==n.iconImage?n.iconImage:"data:image/png;base64,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",iconColor:n.iconColor||"#335fb3",title:n.title||"Tạo phiếu yêu cầu ITSM",requesterName:n.requesterName||"",site:n.site||"",udf_fields:n.udf_fields||{}},n)}},{key:"_initWidget",value:function(){console.log("[ITSMWidget] Initializing widget with config:",{apiBaseUrl:this.config.apiBaseUrl,hasAuthToken:!!this.config.authToken,position:this.config.position}),this.apiService=new s.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 n=document.createElement("div");n.id="itsm-widget-button",n.className="itsm-widget-button itsm-position-".concat(this.config.position);var e="";e=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 r=this.config.iconImage&&null!==this.config.iconImage?"":"background-color: ".concat(this.config.iconColor,";");n.style.borderColor=this.config.iconColor,n.innerHTML='\n <div class="itsm-widget-icon" style="'.concat(r,'">\n ').concat(e,"\n </div>\n "),document.body.appendChild(n),this.widgetContainer=n}},{key:"createModal",value:function(){var n=document.createElement("div");n.id="itsm-widget-modal",n.className="itsm-modal-overlay",n.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 <select id="itsm-category" name="category" class="itsm-select" required>\n <option value="">-- Chọn danh mục --</option>\n </select>\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 <select id="itsm-subcategory" name="subcategory" class="itsm-select" required disabled>\n <option value="">Chưa lựa chọn</option>\n </select>\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 <select id="itsm-item" name="item" class="itsm-select" required disabled>\n <option value="">Chưa lựa chọn</option>\n </select>\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 <select id="itsm-priority" name="priority" class="itsm-select" required>\n <option value="" selected>Chưa lựa chọn</option>\n <option value="low">Thấp</option>\n <option value="medium">Trung bình</option>\n <option value="high">Cao</option>\n </select>\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 <select id="itsm-udf-pick-305" name="udf_pick_305" class="itsm-select">\n <option value="">Chưa lựa chọn</option>\n </select>\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 <select id="itsm-udf-pick-306" name="udf_pick_306" class="itsm-select" required>\n <option value="">Chưa lựa chọn</option>\n <option value="Máy tính">Máy tính</option>\n <option value="Máy tính bảng">Máy tính bảng</option>\n <option value="Điện thoại">Điện thoại</option>\n <option value="Laptop">Laptop</option>\n </select>\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(n),this.modalContainer=n}},{key:"attachEvents",value:function(){var n=this;this.widgetContainer.addEventListener("click",function(){n.toggleModal()});var e=this.modalContainer.querySelector(".itsm-modal-close"),r=this.modalContainer.querySelector("#itsm-cancel-btn"),t=this.modalContainer;e&&e.addEventListener("click",function(){return n.closeModal()}),r&&r.addEventListener("click",function(){return n.closeModal()}),t.addEventListener("click",function(e){e.target===t&&n.closeModal()}),this.modalContainer.querySelector("#itsm-request-form").addEventListener("submit",function(e){return n.handleSubmit(e)}),this.modalContainer.querySelector("#itsm-attachment").addEventListener("change",function(e){return n.handleFileSelect(e)}),this.initEditor(),this.initCategoryDropdowns()}},{key:"initEditor",value:function(){var n=this.modalContainer.querySelector("#itsm-description-editor"),e=this.modalContainer.querySelector("#itsm-description"),r=this.modalContainer.querySelector(".itsm-editor-toolbar");n.addEventListener("input",function(){e.value=n.innerHTML,n.textContent.trim()?e.setCustomValidity(""):e.setCustomValidity("Mô tả là bắt buộc")}),n.addEventListener("focus",function(){""===n.textContent.trim()&&(n.innerHTML="")}),n.addEventListener("blur",function(){""===n.textContent.trim()&&(n.innerHTML="")}),r.querySelectorAll(".itsm-editor-btn[data-command]").forEach(function(r){r.addEventListener("click",function(t){t.preventDefault();var o=r.getAttribute("data-command");n.focus(),document.execCommand(o,!1,null),e.value=n.innerHTML})})}},{key:"initCategoryDropdowns",value:function(){var n=this.modalContainer.querySelector("#itsm-category"),e=this.modalContainer.querySelector("#itsm-subcategory"),r=this.modalContainer.querySelector("#itsm-item"),t=this.modalContainer.querySelector("#itsm-udf-pick-305");c.map(function(n){return n.category}).forEach(function(e){var r=document.createElement("option");r.value=e,r.textContent=e,n.appendChild(r)}),l.forEach(function(n){var e=document.createElement("option");e.value=n,e.textContent=n,t.appendChild(e)}),n&&n.addEventListener("change",function(n){var t,o,i=n.target.value;e&&(e.innerHTML='<option value="">Chưa lựa chọn</option>',e.disabled=!i),r&&(r.innerHTML='<option value="">Chưa lựa chọn</option>',r.disabled=!0),i&&((t=i,(o=c.find(function(n){return n.category===t}))?o.subcategories.map(function(n){return n.subcategory}):[]).forEach(function(n){var r=document.createElement("option");r.value=n,r.textContent=n,e&&e.appendChild(r)}),e&&(e.disabled=!1))}),e&&e.addEventListener("change",function(e){var t=null==n?void 0:n.value,o=e.target.value;r&&(r.innerHTML='<option value="">Chưa lựa chọn</option>',r.disabled=!o),t&&o&&(function(n,e){var r=c.find(function(e){return e.category===n});if(!r)return[];var t=r.subcategories.find(function(n){return n.subcategory===e});return t?t.items:[]}(t,o).forEach(function(n){var e=document.createElement("option");e.value=n,e.textContent=n,r&&r.appendChild(e)}),r&&(r.disabled=!1))})}},{key:"toggleModal",value:function(){this.isOpen?this.closeModal():this.openModal()}},{key:"openModal",value:function(){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(n){var e=this,r=Array.from(n.target.files),t=this.modalContainer.querySelector("#itsm-file-list");0!==r.length?t.innerHTML=r.map(function(n){return'\n <div class="itsm-file-item">\n <span class="itsm-file-name">'.concat(n.name,'</span>\n <span class="itsm-file-size">').concat(e.formatFileSize(n.size),"</span>\n </div>\n ")}).join(""):t.innerHTML=""}},{key:"formatFileSize",value:function(n){if(0===n)return"0 Bytes";var e=Math.floor(Math.log(n)/Math.log(1024));return Math.round(n/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]}},{key:"handleSubmit",value:(o=A(b().m(function n(e){var r,t,o,i,a,s,c,l,u,d,f,m,p,h,g=this;return b().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e.preventDefault(),r=e.target,t=new FormData(r),o={title:t.get("title"),description:t.get("description"),requester:this.config.requesterName||t.get("requester")||"",category:t.get("category"),subcategory:t.get("subcategory"),item:t.get("item"),priority:t.get("priority"),site:this.config.site||t.get("site")||"",udf_pick_305:t.get("udf_pick_305"),udf_pick_306:t.get("udf_pick_306"),contact:t.get("contact"),attachments:[]},i=this.modalContainer.querySelector("#itsm-description-editor"),o.description=i?i.innerHTML.trim():o.description,o.title&&o.description&&o.category&&o.subcategory&&o.item&&o.priority&&o.udf_pick_306&&o.requester){n.n=1;break}return this.showMessage("Vui lòng điền đầy đủ thông tin bắt buộc!","error"),n.a(2);case 1:if(i&&i.textContent.trim()){n.n=2;break}return this.showMessage("Mô tả không được để trống!","error"),null==i||i.focus(),n.a(2);case 2:return a=r.querySelector("#itsm-attachment"),s=Array.from(a.files),c=r.querySelector("#itsm-submit-btn"),l=c.querySelector(".itsm-btn-text"),u=c.querySelector(".itsm-btn-loading"),l.style.display="none",u.style.display="inline",c.disabled=!0,n.p=3,n.n=4,this.submitRequest(o,s);case 4:d=n.v,this.showMessage("Phiếu yêu cầu đã được gửi thành công!","success"),r.reset(),(f=this.modalContainer.querySelector("#itsm-description-editor"))&&(f.innerHTML=""),this.modalContainer.querySelector("#itsm-file-list").innerHTML="",m=this.modalContainer.querySelector("#itsm-subcategory"),p=this.modalContainer.querySelector("#itsm-item"),m&&(m.innerHTML='<option value="">Chưa lựa chọn</option>',m.disabled=!0),p&&(p.innerHTML='<option value="">Chưa lựa chọn</option>',p.disabled=!0),setTimeout(function(){g.closeModal()},1500),this.config.onSuccess&&this.config.onSuccess(d),n.n=6;break;case 5:n.p=5,h=n.v,console.error("Error submitting ITSM request:",h),this.showMessage(h.message||"Có lỗi xảy ra khi gửi yêu cầu. Vui lòng thử lại!","error");case 6:return n.p=6,l.style.display="inline",u.style.display="none",c.disabled=!1,n.f(6);case 7:return n.a(2)}},n,this,[[3,5,6,7]])})),function(n){return o.apply(this,arguments)})},{key:"submitRequest",value:(t=A(b().m(function n(e,r){var t,o,i;return b().w(function(n){for(;;)switch(n.n){case 0:if(t={udf_pick_301:u||"EVNSPC",udf_pick_302:d||"A - An toàn điện",udf_pick_303:f||"A1 - Phần mềm ứng dụng",udf_pick_304:m||"C - The Business/Customer Service Catalog",udf_pick_305:e.udf_pick_305||null,udf_pick_306:e.udf_pick_306||p||null,udf_pick_602:null,udf_mline_603:""},Object.assign(t,this.config.udf_fields||{}),o=this.apiService.buildRequestData(e,{requesterName:this.config.requesterName||e.requester||e.contact||"",site:this.config.site||e.site||null,category:e.category,subcategory:e.subcategory,item:e.item,template:e.category,udf_fields:t,zia_properties:this.config.zia_properties||{}}),!((i=r&&r.length>0?Array.from(r):[]).length>0)){n.n=2;break}return n.n=1,this.apiService.createRequestWithAttachments(o,i);case 1:case 3:return n.a(2,n.v);case 2:return n.n=3,this.apiService.createRequest(o);case 4:return n.a(2)}},n,this)})),function(n,e){return t.apply(this,arguments)})},{key:"showMessage",value:function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info",r=document.querySelector(".itsm-message");r&&r.remove();var t=document.createElement("div");t.className="itsm-message itsm-message-".concat(e),t.textContent=n,document.body.appendChild(t),setTimeout(function(){t.classList.add("itsm-message-show")},10),setTimeout(function(){t.classList.remove("itsm-message-show"),setTimeout(function(){return t.remove()},300)},3e3)}},{key:"destroy",value:function(){this.widgetContainer&&this.widgetContainer.remove(),this.modalContainer&&this.modalContainer.remove(),document.body.style.overflow=""}}],e&&C(n.prototype,e),r&&C(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,e,r,t,o,i}();n.exports&&(n.exports=I,n.exports.default=I);const B=I;"undefined"!=typeof window&&(window.ITSMWidget=I,window.ITSMWidget.default||(window.ITSMWidget.default=I),document.addEventListener("DOMContentLoaded",function(){var n=document.querySelector("script[data-itsm-config]");if(n)try{var e=JSON.parse(n.getAttribute("data-itsm-config"));window.itsmWidgetInstance=new I(e)}catch(n){console.error("Error parsing ITSM widget config:",n)}}))},555:(n,e,r)=>{r.d(e,{A:()=>i});var t=r(314),o=r.n(t)()(function(n){return n[1]});o.push([n.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/* 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.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/* 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 i=o},890:(n,e,r)=>{function t(n){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},t(n)}function o(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),r.push.apply(r,t)}return r}function i(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?o(Object(r),!0).forEach(function(e){a(n,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))})}return n}function a(n,e,r){return(e=u(e))in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function s(){var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,t,o,i){var s=t&&t.prototype instanceof l?t:l,u=Object.create(s.prototype);return c(u,"_invoke",function(r,t,o){var i,s,c,l=0,u=o||[],d=!1,f={p:0,n:0,v:n,a:m,f:m.bind(n,4),d:function(e,r){return i=e,s=0,c=n,f.n=r,a}};function m(r,t){for(s=r,c=t,e=0;!d&&l&&!o&&e<u.length;e++){var o,i=u[e],m=f.p,p=i[2];r>3?(o=p===t)&&(c=i[(s=i[4])?5:(s=3,3)],i[4]=i[5]=n):i[0]<=m&&((o=r<2&&m<i[1])?(s=0,f.v=t,f.n=i[1]):m<p&&(o=r<3||i[0]>t||t>p)&&(i[4]=r,i[5]=t,f.n=p,s=0))}if(o||r>1)return a;throw d=!0,t}return function(o,u,p){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&m(u,p),s=u,c=p;(e=s<2?n:c)||!d;){i||(s?s<3?(s>1&&(f.n=-1),m(s,c)):f.n=c:f.v=c);try{if(l=2,i){if(s||(o="next"),e=i[o]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,s<2&&(s=0)}else 1===s&&(e=i.return)&&e.call(i),s<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),s=1);i=n}else if((e=(d=f.n<0)?c:r.call(t,f))!==a)break}catch(e){i=n,s=1,c=e}finally{l=1}}return{value:e,done:d}}}(r,o,i),!0),u}var a={};function l(){}function u(){}function d(){}e=Object.getPrototypeOf;var f=[][t]?e(e([][t]())):(c(e={},t,function(){return this}),e),m=d.prototype=l.prototype=Object.create(f);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,d):(n.__proto__=d,c(n,o,"GeneratorFunction")),n.prototype=Object.create(m),n}return u.prototype=d,c(m,"constructor",d),c(d,"constructor",u),u.displayName="GeneratorFunction",c(d,o,"GeneratorFunction"),c(m),c(m,o,"Generator"),c(m,t,function(){return this}),c(m,"toString",function(){return"[object Generator]"}),(s=function(){return{w:i,m:p}})()}function c(n,e,r,t){var o=Object.defineProperty;try{o({},"",{})}catch(n){o=0}c=function(n,e,r,t){function i(e,r){c(n,e,function(n){return this._invoke(e,r,n)})}e?o?o(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(i("next",0),i("throw",1),i("return",2))},c(n,e,r,t)}function l(n,e){for(var r=0;r<e.length;r++){var t=e[r];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(n,u(t.key),t)}}function u(n){var e=function(n,e){if("object"!=t(n)||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var o=r.call(n,e||"default");if("object"!=t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==t(e)?e:e+""}function d(n,e,r,t,o,i,a){try{var s=n[i](a),c=s.value}catch(n){return void r(n)}s.done?e(c):Promise.resolve(c).then(t,o)}function f(n){return function(){var e=this,r=arguments;return new Promise(function(t,o){var i=n.apply(e,r);function a(n){d(i,t,o,a,s,"next",n)}function s(n){d(i,t,o,a,s,"throw",n)}a(void 0)})}}r.d(e,{A:()=>y}),n=r.hmd(n);var m=null,p=null;function h(){return g.apply(this,arguments)}function g(){return(g=f(s().m(function n(){return s().w(function(n){for(;;)switch(n.n){case 0:if(null===m){n.n=1;break}return n.a(2,m);case 1:if(null===p){n.n=2;break}return n.a(2,p);case 2:return p=f(s().m(function n(){var e,r,t,o,i,a,c,l,u,d;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:(e=[]).push("/assets/itsm-widget-config.json"),e.push("./assets/itsm-widget-config.json"),e.push("/itsm-widget-config.json"),e.push("./itsm-widget-config.json"),(r=document.querySelectorAll('script[src*="itsm-widget"]')).length>0&&(t=r[r.length-1].src,o=t.substring(0,t.lastIndexOf("/")),e.push("".concat(o,"/itsm-widget-config.json"))),console.log("[ITSMAPIService] Đang load apiBaseUrl từ file itsm-widget-config.json..."),i=0,a=e;case 1:if(!(i<a.length)){n.n=8;break}return c=a[i],n.p=2,n.n=3,fetch(c);case 3:if(!(l=n.v).ok){n.n=5;break}return n.n=4,l.json();case 4:return u=n.v,m=u,console.log("[ITSMAPIService] ✅ Loaded config from file:",c,"→",u),n.a(2,u);case 5:n.n=7;break;case 6:return n.p=6,n.v,n.a(3,7);case 7:i++,n.n=1;break;case 8:throw d=new Error("File itsm-widget-config.json not found. Đã thử các vị trí: ".concat(e.join(", "))),console.error("[ITSMAPIService] ❌ Cannot load itsm-widget-config.json from any location:",e),d;case 9:return n.a(2)}},n,null,[[2,6]])}))(),n.a(2,p)}},n)}))).apply(this,arguments)}var b=function(){return n=function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.authToken=e.authToken||e.apiToken||"",e.baseUrl&&console.warn("[ITSMAPIService] ⚠️ baseUrl trong constructor bị bỏ qua. Chỉ sử dụng apiBaseUrl từ file itsm-widget-config.json"),this.baseUrl="",this._baseUrlPromise=this._initializeBaseUrl()},e=[{key:"_initializeBaseUrl",value:(d=f(s().m(function n(){var e,r;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,h();case 1:if((e=n.v)&&e.apiBaseUrl){n.n=2;break}throw new Error("File itsm-widget-config.json không có apiBaseUrl");case 2:return this.baseUrl=e.apiBaseUrl,console.log("[ITSMAPIService] ✅ baseUrl đã được load từ file:",this.baseUrl),n.a(2,this.baseUrl);case 3:throw n.p=3,r=n.v,console.error("[ITSMAPIService] ❌ Lỗi: Không thể load apiBaseUrl từ file itsm-widget-config.json:",r),new Error("Không thể load apiBaseUrl: ".concat(r.message));case 4:return n.a(2)}},n,this,[[0,3]])})),function(){return d.apply(this,arguments)})},{key:"_ensureBaseUrl",value:(u=f(s().m(function n(){return s().w(function(n){for(;;)switch(n.n){case 0:if(this.baseUrl||!this._baseUrlPromise){n.n=1;break}return n.n=1,this._baseUrlPromise;case 1:if(this.baseUrl){n.n=2;break}throw new Error("baseUrl is required. Please ensure itsm-widget-config.json exists and contains apiBaseUrl.");case 2:return n.a(2)}},n,this)})),function(){return u.apply(this,arguments)})},{key:"buildHeaders",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"application/json",e={};return this.authToken&&(e.Authorization="Bearer ".concat(this.authToken)),"multipart/form-data"!==n&&(e["Content-Type"]=n),e}},{key:"createRequest",value:(c=f(s().m(function n(e){var r,t,o,i,a;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,this._ensureBaseUrl();case 1:return r="".concat(this.baseUrl,"/spcit/send"),t={request:{requester:e.requester||{name:""},assets:e.assets||[],category:e.category||null,group:e.group||null,subcategory:e.subcategory||null,technician:e.technician||null,item:e.item||null,priority:e.priority||null,subject:e.subject||"",description:e.description||"",site:e.site||null,attachments:e.attachments||[],udf_fields:e.udf_fields||{},template:e.template||null,zia_properties:e.zia_properties||{}}},n.p=2,n.n=3,fetch(r,{method:"POST",headers:this.buildHeaders("application/json"),body:JSON.stringify(t)});case 3:return o=n.v,n.n=4,o.json();case 4:if(i=n.v,o.ok){n.n=5;break}throw new Error(i.error||i.message||"HTTP error! status: ".concat(o.status));case 5:return n.a(2,i);case 6:throw n.p=6,a=n.v,console.error("Error creating request:",a),a;case 7:return n.a(2)}},n,this,[[2,6]])})),function(n){return c.apply(this,arguments)})},{key:"uploadAttachment",value:(a=f(s().m(function n(e,r){var t,o,i,a,c;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,this._ensureBaseUrl();case 1:return t="".concat(this.baseUrl,"/spcit/").concat(e,"/upload"),o=new FormData,(Array.isArray(r)?r:[r]).forEach(function(n){n instanceof File&&o.append("files",n)}),n.p=2,n.n=3,fetch(t,{method:"PUT",headers:this.buildHeaders("multipart/form-data"),body:o});case 3:return i=n.v,n.n=4,i.json();case 4:if(a=n.v,i.ok){n.n=5;break}throw new Error(a.error||a.message||"HTTP error! status: ".concat(i.status));case 5:return n.a(2,a);case 6:throw n.p=6,c=n.v,console.error("Error uploading attachment:",c),c;case 7:return n.a(2)}},n,this,[[2,6]])})),function(n,e){return a.apply(this,arguments)})},{key:"createRequestWithAttachments",value:(o=f(s().m(function n(e){var r,t,o,a,c,l,u=arguments;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return r=u.length>1&&void 0!==u[1]?u[1]:[],n.p=1,n.n=2,this.createRequest(e);case 2:if(o=n.v,!(r&&r.length>0&&null!==(t=o.request)&&void 0!==t&&t.id)){n.n=6;break}return n.p=3,n.n=4,this.uploadAttachment(o.request.id,r);case 4:return a=n.v,n.a(2,i(i({},o),{},{uploadResponse:a}));case 5:return n.p=5,c=n.v,console.warn("Request created but file upload failed:",c),n.a(2,i(i({},o),{},{uploadError:c.message}));case 6:return n.a(2,o);case 7:throw n.p=7,l=n.v,console.error("Error creating request with attachments:",l),l;case 8:return n.a(2)}},n,this,[[3,5],[1,7]])})),function(n){return o.apply(this,arguments)})},{key:"getRequest",value:(t=f(s().m(function n(e){var r,t,o,i,a;return s().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,this._ensureBaseUrl();case 1:return r="".concat(this.baseUrl,"/spcit/ticket/").concat(e),n.p=2,(t=this.buildHeaders("application/json")).Accept="application/json",n.n=3,fetch(r,{method:"POST",headers:t,body:JSON.stringify({request_id:e})});case 3:return o=n.v,n.n=4,o.json();case 4:if(i=n.v,o.ok){n.n=5;break}throw new Error(i.error||i.message||"HTTP error! status: ".concat(o.status));case 5:return n.a(2,i);case 6:throw n.p=6,a=n.v,console.error("Error getting request:",a),a;case 7:return n.a(2)}},n,this,[[2,6]])})),function(n){return t.apply(this,arguments)})},{key:"mapPriority",value:function(n){return{low:"Thấp",medium:"Trung bình",high:"Cao",none:"Chưa lựa chọn"}[n]||"Chưa lựa chọn"}},{key:"mapCategory",value:function(n){return{hardware:"A01A00 - Quản lý an toàn thông tin",software:"Software Category",network:"Network Category",account:"Account Category",other:"Other Category"}[n]||null}},{key:"buildRequestData",value:function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.category||this.mapCategory(n.category),t=e.subcategory||n.subcategory||null,o=e.item||n.item||null,i=e.template||r||null,a=e.requesterName||n.requester||n.contact||"",s=e.site||n.site||"";return{requester:{name:a},category:r?{name:r}:null,subcategory:t?{name:t}:null,priority:{name:this.mapPriority(n.priority||"none")},subject:n.title||"",description:n.description||"",site:s?{name:s}:null,item:o?{name:o}:null,template:i?{name:i}:null,udf_fields:e.udf_fields||{},zia_properties:e.zia_properties||{},assets:[],attachments:[],group:null,technician:null}}}],e&&l(n.prototype,e),r&&l(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,e,r,t,o,a,c,u,d}();n.exports&&(n.exports=b),"undefined"!=typeof window&&(window.ITSMAPIService=b);const y=b}},e={};function r(t){var o=e[t];if(void 0!==o)return o.exports;var i=e[t]={id:t,loaded:!1,exports:{}};return n[t](i,i.exports,r),i.loaded=!0,i.exports}return r.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return r.d(e,{a:e}),e},r.d=(n,e)=>{for(var t in e)r.o(e,t)&&!r.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:e[t]})},r.hmd=n=>((n=Object.create(n)).children||(n.children=[]),Object.defineProperty(n,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+n.id)}}),n),r.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),r.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},r.nc=void 0,r(322)})());
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "itsm-widget",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
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",
|