@udi-organization/udi-package 1.0.32 → 1.0.34

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/README.md ADDED
@@ -0,0 +1,127 @@
1
+ # UDI Package
2
+
3
+ 一個UDI內部使用的套件。
4
+
5
+ ## 安裝
6
+
7
+ ```bash
8
+ npm install udi-package
9
+ ```
10
+
11
+ ## 使用方法
12
+
13
+ ### ES6 模組匯入
14
+
15
+ ```javascript
16
+ import UdiPackage from 'udi-package';
17
+
18
+
19
+ // 使用輔助功能
20
+ const isObj = UdiPackage.isObject({}); // true
21
+ await UdiPackage.sleep(1000); // 延遲 1 秒
22
+
23
+ // 使用 Token 功能
24
+ const token = UdiPackage.getToken();
25
+ const plainToken = UdiPackage.getPlainToken();
26
+
27
+ // 使用通知功能
28
+ UdiPackage.notify('這是一則通知', 'success');
29
+ ```
30
+
31
+ ### 具名匯入
32
+
33
+ ```javascript
34
+ import { isObject, sleep, getToken, notify } from 'udi-package';
35
+
36
+
37
+ const isObj = isObject({});
38
+ const token = getToken();
39
+ notify('通知訊息', 'info');
40
+ ```
41
+
42
+ ## Webpack 打包
43
+
44
+ 本專案已配置 webpack 打包功能,可以生成適用於瀏覽器的 UMD 模組。
45
+
46
+ ### 打包指令
47
+
48
+ ```bash
49
+ # 生產環境打包
50
+ npm run build
51
+
52
+ # 開發環境打包
53
+ npm run build:dev
54
+
55
+ # 啟動開發伺服器
56
+ npm run dev
57
+ ```
58
+
59
+ ### 打包輸出
60
+
61
+ 打包後的檔案位於 `dist/` 目錄:
62
+
63
+ - `udi-package.js` - 生產環境版本(已壓縮)
64
+ - `udi-package.dev.js` - 開發環境版本(包含 source map)
65
+
66
+ ### 瀏覽器使用
67
+
68
+ ```html
69
+ <!DOCTYPE html>
70
+ <html>
71
+ <head>
72
+ <title>UDI Package 測試</title>
73
+ </head>
74
+ <body>
75
+ <script src="dist/udi-package.js"></script>
76
+ <script>
77
+ // 全域變數 UdiPackage 可用
78
+ console.log(UdiPackage.add(5, 3));
79
+ UdiPackage.notify('測試通知', 'success');
80
+ </script>
81
+ </body>
82
+ </html>
83
+ ```
84
+
85
+ ## 功能說明
86
+
87
+ ### 數學功能
88
+ - `add(a, b)` - 加法運算
89
+ - `subtract(a, b)` - 減法運算
90
+
91
+ ### 輔助功能
92
+ - `isObject(value)` - 檢查是否為物件
93
+ - `sleep(ms)` - 延遲執行
94
+
95
+ ### Token 功能
96
+ - `getToken()` - 取得儲存的 token
97
+ - `getPlainToken()` - 取得解碼後的 token
98
+
99
+ ### 通知功能
100
+ - `notify(message, type, options)` - 顯示通知
101
+
102
+ ## 開發
103
+
104
+ ### 安裝依賴
105
+
106
+ ```bash
107
+ npm install
108
+ ```
109
+
110
+ ### 執行測試
111
+
112
+ ```bash
113
+ npm test
114
+ ```
115
+
116
+ ### 打包測試
117
+
118
+ ```bash
119
+ # 打包
120
+ npm run build
121
+
122
+ # 在瀏覽器中開啟 dist/index.html 進行測試
123
+ ```
124
+
125
+ ## 授權
126
+
127
+ MIT
@@ -0,0 +1,2 @@
1
+ /*! For license information please see udi-package.js.LICENSE.txt */
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("jsonwebtoken"),require("store2"),require("reactHotToast"),require("React")):"function"==typeof define&&define.amd?define(["jsonwebtoken","store2","reactHotToast","React"],t):"object"==typeof exports?exports.UdiPackage=t(require("jsonwebtoken"),require("store2"),require("reactHotToast"),require("React")):e.UdiPackage=t(e.jsonwebtoken,e.store2,e.reactHotToast,e.React)}(this,(e,t,n,r)=>(()=>{"use strict";var i={56:(e,t,n)=>{e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},72:e=>{var t=[];function n(e){for(var n=-1,r=0;r<t.length;r++)if(t[r].identifier===e){n=r;break}return n}function r(e,r){for(var o={},a=[],l=0;l<e.length;l++){var c=e[l],u=r.base?c[0]+r.base:c[0],s=o[u]||0,d="".concat(u," ").concat(s);o[u]=s+1;var f=n(d),p={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==f)t[f].references++,t[f].updater(p);else{var b=i(p,r);r.byIndex=l,t.splice(l,0,{identifier:d,updater:b,references:1})}a.push(d)}return a}function i(e,t){var n=t.domAPI(t);return n.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,i){var o=r(e=e||[],i=i||{});return function(e){e=e||[];for(var a=0;a<o.length;a++){var l=n(o[a]);t[l].references--}for(var c=r(e,i),u=0;u<o.length;u++){var s=n(o[u]);0===t[s].references&&(t[s].updater(),t.splice(s,1))}o=c}}},113:e=>{e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},141:e=>{e.exports=n},169:t=>{t.exports=e},314:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n}).join("")},t.i=function(e,n,r,i,o){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(r)for(var l=0;l<this.length;l++){var c=this[l][0];null!=c&&(a[c]=!0)}for(var u=0;u<e.length;u++){var s=[].concat(e[u]);r&&a[s[0]]||(void 0!==o&&(void 0===s[5]||(s[1]="@layer".concat(s[5].length>0?" ".concat(s[5]):""," {").concat(s[1],"}")),s[5]=o),n&&(s[2]?(s[1]="@media ".concat(s[2]," {").concat(s[1],"}"),s[2]=n):s[2]=n),i&&(s[4]?(s[1]="@supports (".concat(s[4],") {").concat(s[1],"}"),s[4]=i):s[4]="".concat(i)),t.push(s))}},t}},540:e=>{e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},549:e=>{e.exports=t},601:e=>{e.exports=function(e){return e[1]}},659:e=>{var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},745:(e,t,n)=>{n.d(t,{A:()=>l});var r=n(601),i=n.n(r),o=n(314),a=n.n(o)()(i());a.push([e.id,"/* UdiTable 樣式 */\n\n/* 移除所有表格隔線 */\n.udi-table {\n border-collapse: collapse;\n}\n\n.udi-table th,\n.udi-table td {\n border-right: none !important;\n border-left: none !important;\n}\n\n/* 或者只移除底部隔線 */\n.udi-table th,\n.udi-table td {\n /* border-bottom: none !important; */\n}\n\n.udi-table-container {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n width: 100%;\n}\n\n/* 錯誤訊息樣式 */\n.udi-table-container .error-message {\n background: #f8d7da;\n color: #721c24;\n padding: 12px 16px;\n border-left: 4px solid #dc3545;\n margin-bottom: 16px;\n border-radius: 4px;\n font-weight: 500;\n}\n\n@media (max-width: 768px) {\n .udi-table-container .error-message {\n margin: 8px;\n font-size: 14px;\n }\n}\n\n/* 篩選器樣式 */\n.udi-table-filter {\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.udi-table-filter .filter-section .basic-filter {\n padding: 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n white-space: nowrap;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector label {\n font-weight: 500;\n color: #495057;\n font-size: 14px;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n background: white;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n transition: border-color 0.15s ease-in-out;\n min-width: 120px;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select:hover {\n border-color: #adb5bd;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-input {\n flex: 1;\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.15s ease-in-out;\n min-width: 200px;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-input:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.udi-table-filter .filter-section .basic-filter .advanced-filter-toggle {\n padding: 8px 16px;\n background: #007bff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: background-color 0.15s ease-in-out;\n white-space: nowrap;\n}\n\n.udi-table-filter .filter-section .basic-filter .advanced-filter-toggle:hover {\n background: #0056b3;\n}\n\n.udi-table-filter .filter-section .basic-filter .reset-button {\n padding: 8px 16px;\n background: #6c757d;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: background-color 0.15s ease-in-out;\n white-space: nowrap;\n}\n\n.udi-table-filter .filter-section .basic-filter .reset-button:hover {\n background: #5a6268;\n}\n\n.udi-table-filter .filter-section .advanced-filter {\n padding: 16px;\n background: #f1f3f4;\n border-top: 1px solid #e9ecef;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-header h4 {\n margin: 0;\n color: #495057;\n font-size: 16px;\n font-weight: 600;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-header .clear-advanced-button {\n padding: 6px 12px;\n background: #dc3545;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n transition: background-color 0.15s ease-in-out;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-header .clear-advanced-button:hover {\n background: #c82333;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 12px;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item label {\n font-weight: 500;\n color: #495057;\n font-size: 13px;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.15s ease-in-out;\n background: white;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input:hover {\n border-color: #adb5bd;\n}\n\n/* 滾動位置顯示器 */\n.scroll-position-indicator {\n padding: 8px 16px;\n background: #e3f2fd;\n border-bottom: 1px solid #bbdefb;\n font-size: 12px;\n color: #1565c0;\n font-family: 'Courier New', monospace;\n text-align: center;\n}\n\n/* 表格包裝器 */\n.udi-table-wrapper {\n overflow-x: auto;\n height: 300px;\n overflow-y: auto;\n border: 1px solid #e9ecef;\n -webkit-overflow-scrolling: touch;\n}\n\n.udi-table-wrapper::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.udi-table-wrapper::-webkit-scrollbar-track {\n background: #f8f9fa;\n border-radius: 4px;\n}\n\n.udi-table-wrapper::-webkit-scrollbar-thumb {\n background: #cbd5e0;\n border-radius: 4px;\n}\n\n.udi-table-wrapper::-webkit-scrollbar-thumb:hover {\n background: #a0aec0;\n}\n\n/* 表格樣式 */\n.udi-table {\n min-width: 800px;\n border-collapse: collapse;\n font-size: 14px;\n}\n\n.udi-table th,\n.udi-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid #e9ecef;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n}\n\n.udi-table th {\n background: #f8f9fa;\n font-weight: 600;\n color: #495057;\n position: sticky;\n top: 0;\n z-index: 10;\n border-bottom: 2px solid #dee2e6;\n}\n\n.udi-table th.sortable {\n cursor: pointer;\n user-select: none;\n transition: background-color 0.15s ease-in-out;\n}\n\n.udi-table th.sortable:hover {\n background: #e9ecef;\n}\n\n.udi-table th.sortable .sort-icon {\n opacity: 0.4;\n}\n\n.udi-table th.sorted {\n background: #e3f2fd;\n color: #1976d2;\n}\n\n.udi-table th.sorted .sort-icon {\n opacity: 1;\n}\n\n.udi-table th .th-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-width: 0;\n}\n\n.udi-table th .sort-icon {\n margin-left: 8px;\n font-size: 12px;\n opacity: 0.7;\n flex-shrink: 0;\n}\n\n.udi-table tbody tr {\n transition: background-color 0.15s ease-in-out;\n}\n\n.udi-table tbody tr:hover {\n background: #f8f9fa;\n}\n\n.udi-table tbody tr:nth-child(even) {\n background: #fdfdfe;\n}\n\n.udi-table tbody tr:nth-child(even):hover {\n background: #f8f9fa;\n}\n\n.udi-table tbody td:first-child {\n left: 0;\n background: inherit;\n z-index: 5;\n border-right: 1px solid #e9ecef;\n}\n\n.udi-table .no-data {\n text-align: center;\n color: #6c757d;\n font-style: italic;\n padding: 32px;\n}\n\n.udi-table .loading-state {\n text-align: center;\n padding: 40px 20px;\n}\n\n.udi-table .loading-state .loading-spinner {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.udi-table .loading-state .loading-spinner .spinner {\n width: 32px;\n height: 32px;\n border: 3px solid #f3f3f3;\n border-top: 3px solid #007bff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n.udi-table .loading-state .loading-spinner span {\n color: #868e96;\n font-size: 14px;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n/* 分頁樣式 */\n.udi-table-pagination {\n padding: 16px;\n background: #f8f9fa;\n border-top: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.udi-table-pagination .pagination-info {\n display: flex;\n flex-direction: column;\n gap: 8px;\n color: #6c757d;\n font-size: 14px;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector label {\n font-weight: 500;\n color: #495057;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector .page-size-select {\n padding: 4px 8px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n background: white;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n transition: border-color 0.15s ease-in-out;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector .page-size-select:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.udi-table-pagination .pagination-info .page-size-selector .page-size-select:hover {\n border-color: #adb5bd;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector span {\n color: #495057;\n}\n\n.udi-table-pagination .pagination-info .pagination-summary {\n font-size: 13px;\n}\n\n.udi-table-pagination .pagination-controls {\n display: flex;\n gap: 4px;\n align-items: center;\n}\n\n.udi-table-pagination .pagination-controls .current-page-mobile {\n padding: 8px 12px;\n background: #007bff;\n color: white;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n min-width: 60px;\n text-align: center;\n border: 1px solid #007bff;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button {\n padding: 6px 12px;\n border: 1px solid #ced4da;\n background: white;\n color: #495057;\n cursor: pointer;\n border-radius: 4px;\n font-size: 14px;\n transition: all 0.15s ease-in-out;\n min-width: 40px;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button:hover:not(:disabled) {\n background: #e9ecef;\n border-color: #adb5bd;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button:disabled {\n background: #f8f9fa;\n color: #6c757d;\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button.disabled {\n background: #f1f3f4;\n color: #9aa0a6;\n cursor: not-allowed;\n opacity: 0.5;\n border-color: #dadce0;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button.disabled:hover {\n background: #f1f3f4;\n border-color: #dadce0;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button.active {\n background: #007bff;\n border-color: #007bff;\n color: white;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button.active:hover {\n background: #0056b3;\n border-color: #0056b3;\n}\n\n/* 響應式設計 */\n\n/* 大螢幕 (1200px+) - 桌面 */\n@media (min-width: 1200px) {\n .udi-table-wrapper {\n height: 400px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n/* 中等螢幕 (992px - 1199px) - 桌面/平板橫向 */\n@media (max-width: 1199px) and (min-width: 992px) {\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n/* 小螢幕 (768px - 991px) - 平板 */\n@media (max-width: 991px) and (min-width: 768px) {\n .udi-table-container {\n border-radius: 6px;\n }\n\n .udi-table-wrapper {\n height: 350px;\n }\n\n .udi-table {\n min-width: 600px;\n }\n \n .udi-table th,\n .udi-table td {\n padding: 10px 12px;\n font-size: 13px;\n max-width: 200px;\n }\n\n .udi-table-filter .filter-section .basic-filter {\n flex-wrap: wrap;\n gap: 10px;\n }\n \n .udi-table-filter .filter-section .basic-filter .filter-input {\n min-width: 180px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n grid-template-columns: repeat(2, 1fr);\n gap: 10px;\n }\n\n .udi-table-pagination {\n padding: 12px;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector {\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n }\n}\n\n/* 手機螢幕 (481px - 767px) */\n@media (max-width: 767px) and (min-width: 481px) {\n .udi-table-container {\n border-radius: 4px;\n margin: 0 4px;\n }\n\n .udi-table-wrapper {\n height: 300px;\n }\n\n .udi-table {\n min-width: 500px;\n }\n \n .udi-table th,\n .udi-table td {\n padding: 8px 10px;\n font-size: 12px;\n max-width: 150px;\n }\n \n .udi-table th:first-child,\n .udi-table tbody td:first-child {\n position: sticky;\n left: 0;\n background: inherit;\n z-index: 5;\n border-right: 2px solid #e9ecef;\n font-weight: 600;\n }\n\n .scroll-position-indicator {\n padding: 6px 12px;\n font-size: 11px;\n }\n\n .udi-table-filter .filter-section .basic-filter {\n padding: 12px;\n flex-direction: column;\n align-items: stretch;\n gap: 8px;\n }\n\n .udi-table-filter .filter-section .basic-filter .filter-column-selector {\n justify-content: flex-start;\n }\n \n .udi-table-filter .filter-section .basic-filter .filter-column-selector label {\n font-size: 13px;\n }\n \n .udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select {\n min-width: 100px;\n flex: 1;\n font-size: 14px;\n }\n\n .udi-table-filter .filter-section .basic-filter .filter-input {\n min-width: auto;\n font-size: 16px;\n }\n\n .udi-table-filter .filter-section .basic-filter .advanced-filter-toggle,\n .udi-table-filter .filter-section .basic-filter .reset-button {\n align-self: stretch;\n font-size: 14px;\n }\n\n .udi-table-filter .filter-section .advanced-filter {\n padding: 12px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header {\n flex-direction: column;\n align-items: stretch;\n gap: 8px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header h4 {\n font-size: 14px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header .clear-advanced-button {\n align-self: flex-end;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n grid-template-columns: 1fr;\n gap: 8px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item label {\n font-size: 12px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input {\n font-size: 16px;\n }\n\n .udi-table-pagination {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n gap: 8px;\n }\n\n .udi-table-pagination .pagination-info {\n text-align: center;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector {\n justify-content: center;\n flex-wrap: wrap;\n }\n\n .udi-table-pagination .pagination-controls {\n justify-content: center;\n }\n \n .udi-table-pagination .pagination-controls .pagination-button {\n padding: 8px 12px;\n font-size: 13px;\n min-width: 36px;\n }\n}\n\n/* 極小螢幕 (320px - 480px) */\n@media (max-width: 480px) {\n .udi-table-container {\n border-radius: 0;\n margin: 0;\n box-shadow: none;\n border-left: 1px solid #e9ecef;\n border-right: 1px solid #e9ecef;\n }\n\n .udi-table-wrapper {\n height: 250px;\n border: none;\n }\n\n .udi-table {\n min-width: 400px;\n font-size: 11px;\n }\n \n .udi-table th,\n .udi-table td {\n padding: 6px 8px;\n font-size: 11px;\n max-width: 120px;\n }\n \n .udi-table th:first-child,\n .udi-table tbody td:first-child {\n min-width: 60px;\n }\n\n .scroll-position-indicator {\n padding: 4px 8px;\n font-size: 10px;\n }\n\n .udi-table-filter .filter-section .basic-filter {\n padding: 8px;\n gap: 6px;\n }\n\n .udi-table-filter .filter-section .basic-filter .filter-column-selector label {\n font-size: 12px;\n }\n \n .udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select {\n font-size: 13px;\n padding: 6px 8px;\n }\n\n .udi-table-filter .filter-section .basic-filter .filter-input {\n padding: 8px 10px;\n font-size: 16px;\n }\n\n .udi-table-filter .filter-section .basic-filter .advanced-filter-toggle,\n .udi-table-filter .filter-section .basic-filter .reset-button {\n padding: 8px 12px;\n font-size: 13px;\n }\n\n .udi-table-filter .filter-section .advanced-filter {\n padding: 8px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header h4 {\n font-size: 13px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header .clear-advanced-button {\n padding: 4px 8px;\n font-size: 11px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n gap: 6px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item label {\n font-size: 11px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input {\n padding: 6px 8px;\n font-size: 16px;\n }\n\n .udi-table-pagination {\n padding: 8px;\n gap: 6px;\n }\n\n .udi-table-pagination .pagination-info {\n font-size: 12px;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector {\n gap: 4px;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector label {\n font-size: 11px;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector .page-size-select {\n padding: 4px 6px;\n font-size: 12px;\n }\n \n .udi-table-pagination .pagination-info .pagination-summary {\n font-size: 11px;\n }\n\n .udi-table-pagination .pagination-controls {\n flex-wrap: wrap;\n gap: 2px;\n }\n\n .udi-table-pagination .pagination-controls .pagination-button {\n padding: 6px 8px;\n font-size: 11px;\n min-width: 28px;\n }\n}\n\n\n/* ===========.udi-table-free-action====== */\n/* 自由操作按鈕容器 */\n/* 表格名稱容器 */\n\n.udi-table-header{\n margin:30px 8px;\n}\n.udi-table-name {\n display: inline-block;\n vertical-align: middle;\n margin-right: auto;\n}\n\n.udi-table-name h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n line-height: 1.4;\n}\n\n/* 自由操作按鈕容器 */\n.udi-table-free-actions {\n display: inline-flex !important;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n vertical-align: middle;\n margin-left: auto;\n}\n\n/* 當兩者都存在時,創建左右佈局 */\n.udi-table-name + .udi-table-free-actions {\n float: right;\n}\n\n/* 單個自由操作按鈕 */\n.udi-table-free-action-button {\n /* 基本樣式 */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n \n /* 尺寸 */\n min-width: 36px;\n min-height: 36px;\n padding: 8px 12px;\n \n /* 邊框與圓角 */\n border: 1px solid #d1d5db;\n border-radius: 6px;\n \n /* 背景與顏色 */\n background-color: #ffffff;\n color: #374151;\n \n /* 字型 */\n font-size: 14px;\n font-weight: 500;\n \n /* 游標與過渡效果 */\n cursor: pointer;\n transition: all 0.2s ease;\n \n /* 移除預設樣式 */\n outline: none;\n}\n\n/* 懸停效果 */\n.udi-table-free-action-button:hover {\n background-color: #f3f4f6;\n border-color: #9ca3af;\n color: #1f2937;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n/* 按下效果 */\n.udi-table-free-action-button:active {\n transform: translateY(0);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n background-color: #e5e7eb;\n}\n\n/* 焦點效果 (鍵盤操作時) */\n.udi-table-free-action-button:focus-visible {\n outline: 2px solid #3b82f6;\n outline-offset: 2px;\n}\n\n/* 禁用狀態 */\n.udi-table-free-action-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n background-color: #f9fafb;\n border-color: #e5e7eb;\n color: #9ca3af;\n}\n\n.udi-table-free-action-button:disabled:hover {\n transform: none;\n box-shadow: none;\n background-color: #f9fafb;\n border-color: #e5e7eb;\n}\n\n/* 圖標樣式 */\n.udi-table-free-action-button svg {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n}\n\n/* 只有圖標的按鈕 */\n.udi-table-free-action-button:has(svg:only-child) {\n padding: 8px;\n min-width: 36px;\n}\n\n/* ===== 主題變化樣式 ===== */\n\n/* 主要操作按鈕 (藍色主題) */\n.udi-table-free-action-button.primary {\n background-color: #3b82f6;\n border-color: #3b82f6;\n color: #ffffff;\n}\n\n.udi-table-free-action-button.primary:hover {\n background-color: #2563eb;\n border-color: #2563eb;\n}\n\n/* 成功操作按鈕 (綠色主題) */\n.udi-table-free-action-button.success {\n background-color: #10b981;\n border-color: #10b981;\n color: #ffffff;\n}\n\n.udi-table-free-action-button.success:hover {\n background-color: #059669;\n border-color: #059669;\n}\n\n/* 警告操作按鈕 (黃色主題) */\n.udi-table-free-action-button.warning {\n background-color: #f59e0b;\n border-color: #f59e0b;\n color: #ffffff;\n}\n\n.udi-table-free-action-button.warning:hover {\n background-color: #d97706;\n border-color: #d97706;\n}\n\n/* 危險操作按鈕 (紅色主題) */\n.udi-table-free-action-button.danger {\n background-color: #ef4444;\n border-color: #ef4444;\n color: #ffffff;\n}\n\n.udi-table-free-action-button.danger:hover {\n background-color: #dc2626;\n border-color: #dc2626;\n}\n\n/* 幽靈按鈕 (只有邊框) */\n.udi-table-free-action-button.ghost {\n background-color: transparent;\n border-color: transparent;\n}\n\n.udi-table-free-action-button.ghost:hover {\n background-color: #f3f4f6;\n border-color: #e5e7eb;\n}\n\n/* ===== 響應式設計 ===== */\n@media (max-width: 768px) {\n .udi-table-free-actions-container {\n gap: 6px;\n }\n \n .udi-table-free-action-button {\n min-width: 32px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 13px;\n }\n \n .udi-table-free-action-button svg {\n width: 16px;\n height: 16px;\n }\n}\n\n/* ========================= */\n\n/* ===== 響應式設計 ===== */\n@media (max-width: 768px) {\n .udi-table-free-actions-container {\n gap: 6px;\n }\n \n .udi-table-free-action-button {\n min-width: 32px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 13px;\n }\n \n .udi-table-free-action-button svg {\n width: 16px;\n height: 16px;\n }\n}\n\n/* 橫向模式優化 */\n@media (orientation: landscape) and (max-height: 500px) {\n .udi-table-wrapper {\n height: 200px;\n }\n \n .udi-table-filter .filter-section .basic-filter {\n flex-direction: row;\n flex-wrap: wrap;\n }\n}\n\n/* 高DPI螢幕優化 */\n@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\n .udi-table th,\n .udi-table td {\n border-width: 0.5px;\n }\n}\n",""]);const l=a},825:e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var i=void 0!==n.layer;i&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,i&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},883:e=>{e.exports=r}},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={id:e,exports:{}};return i[e](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nc=void 0;var l={};function c(e,t){if("number"!=typeof e||"number"!=typeof t)throw new Error("參數必須是數字");return e+t}function u(e,t){if("number"!=typeof e||"number"!=typeof t)throw new Error("參數必須是數字");return e-t}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}a.r(l),a.d(l,{UdiTable:()=>at,add:()=>c,default:()=>lt,getPlainToken:()=>m,getToken:()=>g,isObject:()=>d,notify:()=>S,sleep:()=>f,subtract:()=>u});var d=function(e){return null!==e&&"object"===s(e)&&!Array.isArray(e)};function f(e){return new Promise(function(t){return setTimeout(t,e)})}var p=a(169),b=a(549);function g(){return b.session.has("token")?b.session.get("token"):null}function m(){if(b.session.has("token")){var e=b.session.get("token");return p.decode(e,{complete:!0})}return null}var v=a(141);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function x(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach(function(t){w(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function w(e,t,n){return(t=function(e){var t=function(e){if("object"!=h(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=h(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==h(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var S=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=m(),i=n.mulNotify,o=void 0===i?[]:i,a=n.styles,l=void 0===a?{}:a,c=(n.time,x({fontSize:r.payload.noticeFontSize||"1rem",fontWeight:"900"},l));o.unshift({msg:e,iconFeature:t}),v.remove(),o.forEach(function(e){e.msg&&(e.iconFeature||(e.iconFeature=t),v(e.msg,{icon:e.iconFeature,style:x({},c),duration:n.time||3e3}))})},O=a(883),P=a.n(O),j=a(72),k=a.n(j),C=a(825),E=a.n(C),F=a(659),z=a.n(F),A=a(56),T=a.n(A),D=a(540),N=a.n(D),M=a(113),W=a.n(M),I=a(745),H={};H.styleTagTransform=W(),H.setAttributes=T(),H.insert=z().bind(null,"head"),H.domAPI=E(),H.insertStyleElement=N(),k()(I.A,H),I.A&&I.A.locals&&I.A.locals;var R=function(e){var t=e.currentPage,n=e.totalPages,r=e.onPageChange;return P().createElement(P().Fragment,null,P().createElement("button",{onClick:function(){return r(t-1)},disabled:0===t,className:"pagination-button"},"‹"),P().createElement("span",{className:"current-page-mobile"},t+1," / ",n),P().createElement("button",{onClick:function(){return r(t+1)},disabled:t+1===n,className:"pagination-button"},"›"))},L=function(e){var t=e.currentPage,n=e.totalPages,r=e.onPageChange,i=e.tr;return P().createElement(P().Fragment,null,P().createElement("button",{onClick:function(){return r(0)},disabled:0===t,className:"pagination-button"},i("First Page")),P().createElement("button",{onClick:function(){return r(t-1)},disabled:0===t,className:"pagination-button"},i("Previous Page")),function(){var e,i=[],o=t+1;e=n<=3||1===o?1:o===n?n-2:o-1,e=Math.max(1,e);for(var a=function(){var t=e+l,a=t<=n,c=a&&o===t;i.push(P().createElement("button",{key:"page-btn-".concat(l),onClick:function(){return a?r(t-1):null},disabled:!a,className:"pagination-button ".concat(c?"active":""," ").concat(a?"":"disabled")},a?t:"-"))},l=0;l<3;l++)a();return i}(),P().createElement("button",{onClick:function(){return r(t+1)},disabled:t===n-1,className:"pagination-button"},i("Next Page")),P().createElement("button",{onClick:function(){return r(n-1)},disabled:t===n-1,className:"pagination-button"},i("Last Page")))};const B=function(e){var t=e.currentPage,n=e.totalPages,r=e.currentPageSize,i=e.onPageChange,o=e.onPageSizeChange,a=e.isMobile,l=e.onDropdownFocus,c=e.onDropdownBlur,u=e.onMouseEnter;return P().createElement("div",{className:"udi-table-pagination"},P().createElement("div",{className:"pagination-info"},P().createElement("div",{className:"page-size-selector"},P().createElement("div",{className:"page-size-container",onMouseEnter:u},P().createElement("select",{id:"pageSize",value:r,onChange:function(e){return o(Number(e.target.value))},onFocus:l,onBlur:c,className:"page-size-select"},P().createElement("option",{value:5},"5"),P().createElement("option",{value:10},"10"),P().createElement("option",{value:20},"20"),P().createElement("option",{value:50},"50"),P().createElement("option",{value:100},"100"))))),n>1&&P().createElement("div",{className:"pagination-controls"},a?P().createElement(R,{currentPage:t,totalPages:n,onPageChange:i}):P().createElement(L,{currentPage:t,totalPages:n,onPageChange:i,tr})))};var q={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},U=O.createContext&&O.createContext(q),G=["attr","size","title"];function _(){return _=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_.apply(this,arguments)}function V(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function $(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?V(Object(n),!0).forEach(function(t){var r,i,o,a;r=e,i=t,o=n[t],(i="symbol"==typeof(a=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(i))?a:a+"")in r?Object.defineProperty(r,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[i]=o}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):V(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Y(e){return e&&e.map((e,t)=>O.createElement(e.tag,$({key:t},e.attr),Y(e.child)))}function J(e){return t=>O.createElement(K,_({attr:$({},e.attr)},t),Y(e.child))}function K(e){var t=t=>{var n,{attr:r,size:i,title:o}=e,a=function(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,G),l=i||t.size||"1em";return t.className&&(n=t.className),e.className&&(n=(n?n+" ":"")+e.className),O.createElement("svg",_({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},t.attr,r,a,{className:n,style:$($({color:e.color||t.color},t.style),e.style),height:l,width:l,xmlns:"http://www.w3.org/2000/svg"}),o&&O.createElement("title",null,o),e.children)};return void 0!==U?O.createElement(U.Consumer,null,e=>t(e)):t(q)}function Q(e){return J({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"},child:[]},{tag:"path",attr:{d:"M21 5c-1.11-.35-2.33-.5-3.5-.5-1.95 0-4.05.4-5.5 1.5-1.45-1.1-3.55-1.5-5.5-1.5S2.45 4.9 1 6v14.65c0 .25.25.5.5.5.1 0 .15-.05.25-.05C3.1 20.45 5.05 20 6.5 20c1.95 0 4.05.4 5.5 1.5 1.35-.85 3.8-1.5 5.5-1.5 1.65 0 3.35.3 4.75 1.05.1.05.15.05.25.05.25 0 .5-.25.5-.5V6c-.6-.45-1.25-.75-2-1zm0 13.5c-1.1-.35-2.3-.5-3.5-.5-1.7 0-4.15.65-5.5 1.5V8c1.35-.85 3.8-1.5 5.5-1.5 1.2 0 2.4.15 3.5.5v11.5z"},child:[]},{tag:"path",attr:{d:"M17.5 10.5c.88 0 1.73.09 2.5.26V9.24c-.79-.15-1.64-.24-2.5-.24-1.7 0-3.24.29-4.5.83v1.66c1.13-.64 2.7-.99 4.5-.99zM13 12.49v1.66c1.13-.64 2.7-.99 4.5-.99.88 0 1.73.09 2.5.26V11.9c-.79-.15-1.64-.24-2.5-.24-1.7 0-3.24.3-4.5.83zM17.5 14.33c-1.7 0-3.24.29-4.5.83v1.66c1.13-.64 2.7-.99 4.5-.99.88 0 1.73.09 2.5.26v-1.52c-.79-.16-1.64-.24-2.5-.24z"},child:[]}]})(e)}function X(e){return X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},X(e)}function Z(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ee(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z(Object(n),!0).forEach(function(t){te(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Z(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function te(e,t,n){return(t=function(e){var t=function(e){if("object"!=X(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=X(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==X(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const ne=function(e){var t=e.name,n=e.freeActions,r=void 0===n?[]:n,i=e.getState,o=r.length>0;return t||o?P().createElement("div",{className:"udi-table-header"},t&&P().createElement("div",{className:"udi-table-name",style:{display:o?"inline-block":"block"}},P().createElement("h3",null,t)),o&&P().createElement("div",{className:"udi-table-free-actions",style:{display:t?"inline-block":"block"}},r.map(function(e,t){return!0!==e.isFreeAction?null:P().createElement("button",{key:t,onClick:function(){e.onClick&&e.onClick({getState:i})},title:e.title||"Action",className:"udi-table-free-action-button",style:ee({},e.style),disabled:e.disabled},e.icon?e.icon:e.label?e.label:P().createElement(Q,null))}))):null},re=function(e){var t=e.columns,n=e.filterColumn,r=e.filterText,i=e.showAdvancedFilter,o=e.advancedFilters,a=e.onFilterColumnChange,l=e.onFilterTextChange,c=e.onToggleAdvancedFilter,u=e.onResetFilter,s=r||"all"!==n||Object.keys(o).length>0;return P().createElement("div",{className:"basic-filter"},P().createElement("div",{className:"filter-column-selector"},P().createElement("label",{htmlFor:"filterColumn"},tr("Search")+tr("Fields"),":"),P().createElement("select",{id:"filterColumn",value:n,onChange:function(e){return a(e.target.value)},className:"filter-column-select"},P().createElement("option",{value:"all"},tr("All Fields")),t.map(function(e){return P().createElement("option",{key:e.dataField,value:e.dataField},e.title)}))),P().createElement("input",{type:"text",placeholder:function(){if("all"===n)return"".concat(tr("Search")).concat(tr("All Fields"),"...");var e=t.find(function(e){return e.key===n});return"".concat(tr("Search")," ").concat((null==e?void 0:e.title)||"","...")}(),value:r,onChange:function(e){return l(e.target.value)},className:"filter-input"}),P().createElement("button",{onClick:c,className:"advanced-filter-toggle"},i?tr("Hide advanced search"):tr("Advanced search")),s&&P().createElement("button",{onClick:u,className:"reset-button"},tr("Reset all filters")))},ie=function(e){var t=e.columns,n=e.advancedFilters,r=e.onFilterChange,i=e.onClearFilters,o=Object.keys(n).length>0;return P().createElement("div",{className:"advanced-filter"},P().createElement("div",{className:"advanced-filter-header"},P().createElement("h4",null,tr("Advanced search")," - ",tr("Multiple filters search")),o&&P().createElement("button",{onClick:i,className:"clear-advanced-button"},tr("Clear advance filters"))),P().createElement("div",{className:"advanced-filter-grid"},t.map(function(e){return P().createElement("div",{key:e.dataField,className:"advanced-filter-item"},P().createElement("label",{htmlFor:"advanced-".concat(e.dataField)},e.title,":"),P().createElement("input",{id:"advanced-".concat(e.dataField),type:"text",placeholder:"".concat(tr("Filter")," ").concat(e.title,"..."),value:n[e.dataField]||"",onChange:function(t){return r(e.dataField,t.target.value)},className:"advanced-filter-input"}))})))},oe=function(e){var t=e.scrollPosition,n=e.currentPage,r=e.totalPages,i=e.totalCount,o=e.scrollbarInfo,a=e.isMobile,l=e.isTablet;return P().createElement("div",{className:"scroll-position-indicator"},P().createElement("div",null,"滾動位置: 垂直 ",t.verticalPercent.toFixed(1),"% | 水平"," ",t.horizontalPercent.toFixed(1),"%"),P().createElement("div",null,"分頁: ",n+1,"/",r," | 總筆數: ",i),P().createElement("div",null,"滾動條: ",o.hasVertical?"垂直✓":"垂直✗"," |"," ",o.hasHorizontal?"水平✓":"水平✗"),P().createElement("div",null,"螢幕: ",a?"手機":l?"平板":"桌面"," (",window.innerWidth,"x",window.innerHeight,")"))};function ae(e){return ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ae(e)}function le(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ce(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?le(Object(n),!0).forEach(function(t){ue(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):le(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ue(e,t,n){return(t=function(e){var t=function(e){if("object"!=ae(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ae(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ae(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const se=function(e){var t=e.columns,n=e.sortable,r=e.sortConfig,i=e.onSort,o=e.getGridSize,a=e.actions,l=void 0===a?[]:a,c=e.actionFirst,u=void 0!==c&&c;return P().createElement("thead",null,P().createElement("tr",null,u&&l.length>0&&P().createElement("th",null),t.map(function(e){return P().createElement("th",{key:e.dataField,onClick:function(){return i(e.dataField)},className:(t=e.dataField,a=[],n&&a.push("sortable"),r.key===t&&(a.push("sorted"),a.push(r.direction)),a.join(" ")),style:ce({},o(e,{isTitle:!0}))},P().createElement("div",{className:"th-content"},P().createElement("span",null,e.title),n&&P().createElement("span",{className:"sort-icon"},function(e){return r.key===e?"asc"===r.direction?"↑":"↓":"↕"}(e.dataField))));var t,a}),!u&&l.length>0&&P().createElement("th",null)))},de=function(e){var t=e.colSpan;return P().createElement("tr",null,P().createElement("td",{colSpan:t,className:"loading-state"},P().createElement("div",{className:"loading-spinner"},P().createElement("div",{className:"spinner"}),P().createElement("span",null,"loading..."))))},fe=function(e){var t=e.colSpan,n=e.message,r=void 0===n?"No Data":n;return P().createElement("tr",null,P().createElement("td",{colSpan:t,className:"no-data"},r))};var pe=function(e){var t=e.action,n=e.row,r=e.actionIndex;return!0===t.isFreeAction?null:t.render?t.render(n):t.skip?null:P().createElement("button",{key:"action-".concat(r),onClick:function(){return t.onClick(n)},className:t.className||"action-button",title:t.title||"Action",style:{all:"unset",cursor:"pointer",fontSize:"26px"},disabled:t.disabled},t.icon)};const be=function(e){var t=e.actions,n=e.row;return P().createElement("td",{style:{width:"".concat(26*t.length,"px")}},t.map(function(e,t){return P().createElement(pe,{key:"action-".concat(t),action:e,row:n,actionIndex:t})}))};function ge(e){return ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ge(e)}function me(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ve(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?me(Object(n),!0).forEach(function(t){he(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):me(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function he(e,t,n){return(t=function(e){var t=function(e){if("object"!=ge(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ge(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ge(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const ye=function(e){var t=e.row,n=e.rowIndex,r=e.columns,i=e.actions,o=void 0===i?[]:i,a=e.actionFirst,l=void 0!==a&&a,c=e.getGridSize,u=e.tableName;return P().createElement("tr",{key:"row-".concat(n,"-").concat(t.id||"")},l&&o.length>0&&P().createElement(be,{actions:o,row:t}),r.map(function(e,r){return P().createElement("td",{key:"cell-".concat(n,"-").concat(r,"-").concat(e.dataField),title:t[e.dataField],style:ve(ve({},c(e)),e.style)},e.render?e.render(t[e.dataField],t,n+1,e.dataField,u):t[e.dataField])}),!l&&o.length>0&&P().createElement(be,{actions:o,row:t}))};function xe(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function o(n,r,i,o){var c=r&&r.prototype instanceof l?r:l,u=Object.create(c.prototype);return we(u,"_invoke",function(n,r,i){var o,l,c,u=0,s=i||[],d=!1,f={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return o=t,l=0,c=e,f.n=n,a}};function p(n,r){for(l=n,c=r,t=0;!d&&u&&!i&&t<s.length;t++){var i,o=s[t],p=f.p,b=o[2];n>3?(i=b===r)&&(c=o[(l=o[4])?5:(l=3,3)],o[4]=o[5]=e):o[0]<=p&&((i=n<2&&p<o[1])?(l=0,f.v=r,f.n=o[1]):p<b&&(i=n<3||o[0]>r||r>b)&&(o[4]=n,o[5]=r,f.n=b,l=0))}if(i||n>1)return a;throw d=!0,r}return function(i,s,b){if(u>1)throw TypeError("Generator is already running");for(d&&1===s&&p(s,b),l=s,c=b;(t=l<2?e:c)||!d;){o||(l?l<3?(l>1&&(f.n=-1),p(l,c)):f.n=c:f.v=c);try{if(u=2,o){if(l||(i="next"),t=o[i]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,l<2&&(l=0)}else 1===l&&(t=o.return)&&t.call(o),l<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),l=1);o=e}else if((t=(d=f.n<0)?c:n.call(r,f))!==a)break}catch(t){o=e,l=1,c=t}finally{u=1}}return{value:t,done:d}}}(n,i,o),!0),u}var a={};function l(){}function c(){}function u(){}t=Object.getPrototypeOf;var s=[][r]?t(t([][r]())):(we(t={},r,function(){return this}),t),d=u.prototype=l.prototype=Object.create(s);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,we(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return c.prototype=u,we(d,"constructor",u),we(u,"constructor",c),c.displayName="GeneratorFunction",we(u,i,"GeneratorFunction"),we(d),we(d,i,"Generator"),we(d,r,function(){return this}),we(d,"toString",function(){return"[object Generator]"}),(xe=function(){return{w:o,m:f}})()}function we(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}we=function(e,t,n,r){function o(t,n){we(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},we(e,t,n,r)}function Se(e){return function(e){if(Array.isArray(e))return ke(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||je(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Oe(e,t,n,r,i,o,a){try{var l=e[o](a),c=l.value}catch(e){return void n(e)}l.done?t(c):Promise.resolve(c).then(r,i)}function Pe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||je(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function je(e,t){if(e){if("string"==typeof e)return ke(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ke(e,t):void 0}}function ke(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Ce(e){return Ce="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ce(e)}function Ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Fe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ee(Object(n),!0).forEach(function(t){ze(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ee(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ze(e,t,n){return(t=function(e){var t=function(e){if("object"!=Ce(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Ce(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Ce(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Te(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Te(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function De(e){return De="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},De(e)}function Ne(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Me(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ne(Object(n),!0).forEach(function(t){We(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ne(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function We(e,t,n){return(t=function(e){var t=function(e){if("object"!=De(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=De(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==De(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ie(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return He(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?He(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function He(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Re(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Le(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Le(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Le(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Be(e){return Be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Be(e)}function qe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qe(Object(n),!0).forEach(function(t){Ge(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qe(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ge(e,t,n){return(t=function(e){var t=function(e){if("object"!=Be(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Be(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Be(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Ve(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.sortable,i=void 0===r||r,o=n.onSortChange,a=(e=(0,O.useState)({key:null,direction:"asc"}),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return _e(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_e(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),l=a[0],c=a[1],u=(0,O.useCallback)(function(e){i&&(c(function(t){var n="asc";return t.key===e&&"asc"===t.direction&&(n="desc"),{key:e,direction:n}}),null==o||o())},[i,o]),s=(0,O.useCallback)(function(){c({key:null,direction:"asc"}),null==o||o()},[o]),d=(0,O.useCallback)(function(e){c({key:e,direction:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"asc"}),null==o||o()},[o]),f=(0,O.useCallback)(function(){c(function(e){return Ue(Ue({},e),{},{direction:"asc"===e.direction?"desc":"asc"})}),null==o||o()},[o]),p=null!==l.key,b=l.key,g=l.direction,m=(0,O.useCallback)(function(){return{sortConfig:l,sortBy:b,sortOrder:g,isSorted:p}},[l,b,g,p]);return{sortConfig:l,sortBy:b,sortOrder:g,isSorted:p,setSortConfig:c,handleSort:u,resetSort:s,setSort:d,toggleSortDirection:f,getSortState:m}}function $e(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Ye(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ye(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ye(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function Ke(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Qe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ke(Object(n),!0).forEach(function(t){Xe(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ke(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Xe(e,t,n){return(t=function(e){var t=function(e){if("object"!=Je(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Je(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Je(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ze(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return et(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?et(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function et(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tt(e){return tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tt(e)}function nt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function rt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?nt(Object(n),!0).forEach(function(t){it(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):nt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function it(e,t,n){return(t=function(e){var t=function(e){if("object"!=tt(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=tt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==tt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ot=(0,O.forwardRef)(function(e,t){var n,r=e.onDataRequest,i=void 0===r?null:r,o=e.columns,a=void 0===o?[]:o,l=e.pageSize,c=void 0===l?10:l,u=e.sortable,s=void 0===u||u,d=e.filterable,f=void 0===d||d,p=e.className,b=void 0===p?"":p,g=e.isDev,m=void 0!==g&&g,v=e.syncTableControl,h=void 0!==v&&v,y=e.currentTableRef,x=void 0===y?{currentTableRef:x}:y,w=e.name,S=void 0===w?null:w,j=e.setTablePage,k=e.actions,C=void 0===k?[]:k,E=e.actionFirst,F=void 0!==E&&E,z=e.paginationEnabled,A=void 0===z||z,T=e.tableHeight,D=void 0===T?"60px":T,N=e.tableWidth,M=void 0===N?"200%":N,W=e.mainRowHeight,I=e.mainColumnWidth,H=e.enableAutoWidth,R=void 0!==H&&H,L=e.tableContainerWidth,q=void 0===L?1e3:L,U=function(e){var t=e.onDataRequest,n=(e.pageSize,e.isDev),r=void 0!==n&&n,i=Pe((0,O.useState)([]),2),o=i[0],a=i[1],l=Pe((0,O.useState)(!1),2),c=l[0],u=l[1],s=Pe((0,O.useState)(0),2),d=s[0],f=s[1],p=Pe((0,O.useState)(null),2),b=p[0],g=p[1],m=Pe((0,O.useState)(!1),2),v=m[0],h=m[1],y=(0,O.useCallback)(function(){var e,n=(e=xe().m(function e(n){var i,o,l;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return e.a(2);case 1:return u(!0),g(null),e.p=2,e.n=3,t(n);case 3:i=e.v,o=Array.isArray(null==i?void 0:i.data)?i.data:[],a(v?function(e){return[].concat(Se(e),Se(o))}:o),f(i.totalCount||0),e.n=5;break;case 4:e.p=4,l=e.v,r&&console.error("❌ Callback Error:",l),g(l.message),a([]),f(0);case 5:return e.p=5,u(!1),e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}),function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function a(e){Oe(o,r,i,a,l,"next",e)}function l(e){Oe(o,r,i,a,l,"throw",e)}a(void 0)})});return function(e){return n.apply(this,arguments)}}(),[t,v,r]),x=(0,O.useMemo)(function(){var e;return function(t){clearTimeout(e),e=setTimeout(function(){y(t)},300)}},[y]),w=(0,O.useCallback)(function(e){t&&y({page:0,pageSize:e,search:"",searchColumn:"all",advancedFilters:{},sortBy:null,sortOrder:"asc"})},[t,y]),S=(0,O.useCallback)(function(){a([]),f(0),g(null)},[]);return{data:o,setData:a,loading:c,setLoading:u,totalCount:d,setTotalCount:f,error:b,setError:g,isInfiniteScroll:v,setIsInfiniteScroll:h,executeDataRequest:y,debouncedDataRequest:x,initialLoad:w,resetData:S}}({onDataRequest:i,pageSize:c,isDev:m}),G=U.data,_=U.loading,V=U.totalCount,$=U.error,Y=(U.isInfiniteScroll,U.executeDataRequest),J=U.debouncedDataRequest,K=U.initialLoad,Q=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?[]:e,n=Ae((0,O.useState)({top:0,left:0,verticalPercent:0,horizontalPercent:0}),2),r=n[0],i=n[1],o=Ae((0,O.useState)({hasHorizontal:!1,hasVertical:!1,maxScrollLeft:0,maxScrollTop:0}),2),a=o[0],l=o[1],c=(0,O.useRef)(null);(0,O.useEffect)(function(){var e=c.current;if(e){var t=function(){var t=e.scrollWidth>e.clientWidth,n=e.scrollHeight>e.clientHeight,r=Math.max(0,e.scrollWidth-e.clientWidth),i=Math.max(0,e.scrollHeight-e.clientHeight);l({hasHorizontal:t,hasVertical:n,maxScrollLeft:r,maxScrollTop:i,scrollWidth:e.scrollWidth,scrollHeight:e.scrollHeight,clientWidth:e.clientWidth,clientHeight:e.clientHeight})};t();var n,r=!1,o=function(e){r||(r=!0,requestAnimationFrame(function(){var n=e.target,o=n.scrollTop,a=n.scrollLeft,l=n.scrollHeight,c=n.clientHeight,u=n.scrollWidth,s=n.clientWidth,d=u>s?a/(u-s)*100:0;i({top:o,left:a,verticalPercent:parseFloat((l>c?o/(l-c)*100:0).toFixed(1)),horizontalPercent:parseFloat(d.toFixed(1))}),t(),r=!1}))},a=function(){t()};return e.addEventListener("scroll",o,{passive:!0}),window.addEventListener("resize",a),window.ResizeObserver&&(n=new ResizeObserver(function(){t()})).observe(e),function(){e.removeEventListener("scroll",o),window.removeEventListener("resize",a),n&&n.disconnect()}}},[t]);var u=(0,O.useCallback)(function(e,t){var n=c.current;if(n){var r=n.scrollHeight-n.clientHeight,i=n.scrollWidth-n.clientWidth,o="top"===e?Math.min(t,r):Math.min(t,i);"top"===e?n.scrollTop=o:n.scrollLeft=o}},[]),s=(0,O.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.top,n=e.left;void 0!==t&&u("top",t),void 0!==n&&u("left",n)},[u]),d=(0,O.useCallback)(function(){u("top",0)},[u]),f=(0,O.useCallback)(function(){var e=c.current;e&&u("top",e.scrollHeight)},[u]),p=(0,O.useCallback)(function(){u("left",0)},[u]),b=(0,O.useCallback)(function(){var e=c.current;e&&u("left",e.scrollWidth)},[u]),g=(0,O.useCallback)(function(){return Fe(Fe(Fe({},r),a),{},{isAtTop:0===r.verticalPercent,isAtBottom:100===r.verticalPercent,isAtLeft:0===r.horizontalPercent,isAtRight:100===r.horizontalPercent})},[r,a]);return{scrollPosition:r,scrollbarInfo:a,tableWrapperRef:c,scrollControl:u,scrollTo:s,scrollToTop:d,scrollToBottom:f,scrollToLeft:p,scrollToRight:b,getScrollState:g}}({data:G}),X=Q.scrollPosition,Z=Q.scrollbarInfo,ee=Q.tableWrapperRef,te=Q.scrollControl,ae=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.mobileBreakpoint,n=void 0===t?768:t,r=e.tabletBreakpoint,i=void 0===r?992:r,o=Re((0,O.useState)(!1),2),a=o[0],l=o[1],c=Re((0,O.useState)(!1),2),u=c[0],s=c[1],d=Re((0,O.useState)("undefined"!=typeof window?window.innerWidth:0),2),f=d[0],p=d[1],b=Re((0,O.useState)("undefined"!=typeof window?window.innerHeight:0),2),g=b[0],m=b[1];(0,O.useEffect)(function(){var e=function(){var e=window.innerWidth,t=window.innerHeight;p(e),m(t),l(e<n),s(e>=n&&e<i)};return e(),window.addEventListener("resize",e),function(){return window.removeEventListener("resize",e)}},[n,i]);var v=!a&&!u,h=(0,O.useCallback)(function(){return{isMobile:a,isTablet:u,isDesktop:v,screenWidth:f,screenHeight:g}},[a,u,v,f,g]);return{isMobile:a,isTablet:u,isDesktop:v,screenWidth:f,screenHeight:g,getResponsiveState:h}}(),le=ae.isMobile,ce=ae.isTablet,ue=(ae.isDesktop,ae.screenWidth,ae.screenHeight,function(e){var t=e.pageSize,n=void 0===t?10:t,r=e.totalCount,i=void 0===r?0:r,o=$e((0,O.useState)(0),2),a=o[0],l=o[1],c=$e((0,O.useState)(n),2),u=c[0],s=c[1],d=(0,O.useMemo)(function(){return Math.ceil(i/u)},[i,u]),f=(0,O.useCallback)(function(e){l(e)},[]),p=(0,O.useCallback)(function(e){s(e),l(0)},[]),b=(0,O.useCallback)(function(){l(0)},[]),g=(0,O.useMemo)(function(){return{currentPage:a,currentPageSize:u,totalPages:d,totalCount:i,hasNextPage:a<d-1,hasPreviousPage:a>0,startIndex:a*u+1,endIndex:Math.min((a+1)*u,i),isFirstPage:0===a,isLastPage:a===d-1}},[a,u,d,i]);return{currentPage:a,setCurrentPage:l,currentPageSize:u,setCurrentPageSize:s,totalPages:d,handlePageChange:f,handlePageSizeChange:p,resetToFirstPage:b,paginationInfo:g}}({pageSize:c,totalCount:V})),pe=ue.currentPage,be=ue.setCurrentPage,ge=ue.currentPageSize,me=ue.setCurrentPageSize,ve=ue.totalPages,he=ue.handlePageChange,we=ue.handlePageSizeChange,je=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).onFilterChange,t=Ie((0,O.useState)(""),2),n=t[0],r=t[1],i=Ie((0,O.useState)("all"),2),o=i[0],a=i[1],l=Ie((0,O.useState)(!1),2),c=l[0],u=l[1],s=Ie((0,O.useState)({}),2),d=s[0],f=s[1],p=(0,O.useCallback)(function(t){r(t),null==e||e()},[e]),b=(0,O.useCallback)(function(t){a(t),null==e||e()},[e]),g=(0,O.useCallback)(function(){r(""),a("all"),f({}),null==e||e()},[e]),m=(0,O.useCallback)(function(t,n){f(function(e){return Me(Me({},e),{},We({},t,n))}),null==e||e()},[e]),v=(0,O.useCallback)(function(){f({}),null==e||e()},[e]),h=(0,O.useCallback)(function(){u(function(e){return!e})},[]),y=""!==n||"all"!==o,x=Object.keys(d).length>0,w=y||x,S=Object.keys(d).filter(function(e){return d[e]}).length+(n?1:0),P=(0,O.useCallback)(function(){return{filterText:n,filterColumn:o,advancedFilters:d,showAdvancedFilter:c,hasBasicFilter:y,hasAdvancedFilter:x,hasAnyFilter:w,activeFiltersCount:S}},[n,o,d,c,y,x,w,S]);return{filterText:n,filterColumn:o,showAdvancedFilter:c,advancedFilters:d,setFilterText:r,setFilterColumn:a,setShowAdvancedFilter:u,setAdvancedFilters:f,updateFilterText:p,updateFilterColumn:b,resetFilter:g,handleAdvancedFilterChange:m,clearAdvancedFilters:v,toggleAdvancedFilter:h,hasBasicFilter:y,hasAdvancedFilter:x,hasAnyFilter:w,activeFiltersCount:S,getFilterState:P}}({onFilterChange:function(){return be(0)}}),ke=je.filterText,Ce=je.filterColumn,Ee=je.showAdvancedFilter,ze=je.advancedFilters,Te=je.setFilterText,De=je.setFilterColumn,Ne=je.setAdvancedFilters,He=je.resetFilter,Le=je.handleAdvancedFilterChange,Be=je.clearAdvancedFilters,qe=je.toggleAdvancedFilter,Ue=Ve({sortable:s,onSortChange:function(){return be(0)}}),Ge=Ue.sortConfig,_e=(Ue.setSortConfig,Ue.handleSort),Ye=Ue.resetSort,Je=function(e){var t=e.columns,n=void 0===t?[]:t,r=e.enableAutoWidth,i=void 0!==r&&r,o=e.tableWidth,a=void 0===o?"200%":o,l=e.tableContainerWidth,c=void 0===l?1e3:l,u=e.mainRowHeight,s=e.mainColumnWidth,d=e.isDev,f=void 0!==d&&d,p=(0,O.useMemo)(function(){if(!i)return null;var e="string"==typeof a&&a.endsWith("%")?parseFloat(a):200,t=c*e/100,r=0,o=0,l={};n.forEach(function(e){if(e.width&&"number"==typeof e.width)r+=e.width,l[e.dataField]={type:"fixed",value:e.width};else{var t=e.flexRatio||1;o+=t,l[e.dataField]={type:"flex",ratio:t}}});var u=t-r,s={};return n.forEach(function(e){var t=l[e.dataField];"fixed"===t.type?s[e.dataField]=t.value:s[e.dataField]=o>0?u*t.ratio/o:0}),f&&console.log("📊 自動寬度計算:",{totalWidth:t,totalFixedWidth:r,remainingWidth:u,totalFlexRatio:o,result:s}),s},[n,i,a,c,f]),b=(0,O.useCallback)(function(e,t){return t?"".concat(t,"px"):e?"".concat(e,"px"):"auto"},[]),g=(0,O.useCallback)(function(e){return b(u,e)},[u,b]),m=(0,O.useCallback)(function(e){return b(s,e)},[s,b]),v=(0,O.useCallback)(function(e){var t,n,r,o=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).isTitle,a=void 0!==o&&o,l=e.width,c=e.height,u=e.minWidth,s=void 0===u?l:u,d=e.maxWidth,f=void 0===d?l:d,b=e.minHeight,v=void 0===b?c:b,h=e.maxHeight,y=void 0===h?c:h;if(i&&p){var x=p[e.dataField];x?(t="".concat(x,"px"),n="".concat(s||.5*x,"px"),r="".concat(f||1.5*x,"px")):(t=m(l),n=m(s),r=m(f))}else t=m(l),n=m(s),r=m(f);var w={width:t,minWidth:n,maxWidth:r};if(!a){var S=g(c),O=g(v),P=g(y);w.height=S,w.minHeight=O,w.maxHeight=P}return w},[i,p,m,g]);return{getGridSize:v,calculateColumnWidths:p,rowHeight:g,columnWidth:m}}({columns:a,enableAutoWidth:R,tableWidth:M,tableContainerWidth:q,mainRowHeight:W,mainColumnWidth:I,isDev:m}),Ke=Je.getGridSize,Xe=function(e){var t=e.syncTableControl,n=void 0!==t&&t,r=e.currentTableRef,i=void 0===r?null:r,o=e.tableWrapperRef,a=void 0===o?null:o,l=Ze((0,O.useState)(!1),2),c=l[0],u=l[1],s=Ze((0,O.useState)(!1),2),d=s[0],f=s[1];return{isHovered:c,isDropdownOpen:d,handleMouseEnter:(0,O.useCallback)(function(){u(!0),n&&i&&a&&(i.current=a.current)},[n,i,a]),handleMouseLeave:(0,O.useCallback)(function(){setTimeout(function(){u(!1)},200)},[]),handleDropdownFocus:(0,O.useCallback)(function(){f(!0)},[]),handleDropdownBlur:(0,O.useCallback)(function(){f(!1)},[])}}({syncTableControl:h,currentTableRef:x,tableWrapperRef:ee}),et=Xe.isHovered,tt=(Xe.isDropdownOpen,Xe.handleMouseEnter),nt=Xe.handleMouseLeave,ot=Xe.handleDropdownFocus,at=Xe.handleDropdownBlur;(0,O.useEffect)(function(){null==j||j(function(e){return rt(rt({},e),{},it(it({},"".concat(S,"Page"),pe),"".concat(S,"PageSize"),ge))})},[ge,pe]),function(e){var t=e.ref,n=e.dataState,r=n.data,i=n.loading,o=n.error,a=n.totalCount,l=n.executeDataRequest,c=e.paginationState,u=c.currentPage,s=c.setCurrentPage,d=c.currentPageSize,f=c.setCurrentPageSize,p=c.totalPages,b=e.filterState,g=b.filterText,m=b.setFilterText,v=b.filterColumn,h=b.setFilterColumn,y=b.advancedFilters,x=b.setAdvancedFilters,w=b.showAdvancedFilter,S=e.sortState,P=S.sortConfig,j=S.resetSort,k=e.scrollState,C=k.scrollPosition,E=k.scrollbarInfo,F=k.tableWrapperRef,z=k.scrollControl,A=e.responsiveState,T=A.isMobile,D=A.isTablet,N=e.config,M=N.sortable,W=N.filterable,I=N.className,H=N.enableAutoWidth,R=N.isDev,L=N.columns,B=N.name,q=e.interactionState.isHovered;(0,O.useImperativeHandle)(t,function(){return{executeRequest:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Qe({page:u,pageSize:d,search:g,searchColumn:v,advancedFilters:y,sortBy:P.key,sortOrder:P.direction},e);l(t)},reload:function(){var e={page:u,pageSize:d,search:g,searchColumn:v,advancedFilters:y,sortBy:P.key,sortOrder:P.direction};l(e)},resetFilters:function(){m(""),h("all"),x({}),s(0),j(),l({page:0,pageSize:d,search:"",searchColumn:"all",advancedFilters:{},sortBy:null,sortOrder:"asc"})},setPage:function(e){s(e)},setPageSize:function(e){f(e),s(0)},getState:function(){return{data:r,loading:i,error:o,totalCount:a,tableWrapperRef:F.current,tableName:B,pagination:{currentPage:u,pageSize:d,totalPages:Math.ceil(a/d),hasNextPage:u<Math.ceil(a/d),hasPreviousPage:u>1,startIndex:(u-1)*d+1,endIndex:Math.min(u*d,a),isFirstPage:1===u,isLastPage:u===Math.ceil(a/d)},scroll:{position:C,scrollbar:E,isAtTop:0===C.verticalPercent,isAtBottom:100===C.verticalPercent,isAtLeft:0===C.horizontalPercent,isAtRight:100===C.horizontalPercent,canScrollVertically:E.hasVertical,canScrollHorizontally:E.hasHorizontal},sort:{sortConfig:P,sortBy:P.key,sortOrder:P.direction,isSorted:null!==P.key},filter:{filterText:g,filterColumn:v,advancedFilters:y,showAdvancedFilter:w,hasBasicFilter:""!==g||"all"!==v,hasAdvancedFilter:Object.keys(y).length>0,hasAnyFilter:""!==g||"all"!==v||Object.keys(y).length>0,activeFiltersCount:Object.keys(y).filter(function(e){return y[e]}).length+(g?1:0)},config:{sortable:M,filterable:W,className:I,enableAutoWidth:H,isDev:R,columnsCount:L.length,columns:L.map(function(e){return{dataField:e.dataField,title:e.title,width:e.width,sortable:M}})},responsive:{isMobile:T,isTablet:D,isDesktop:!T&&!D,screenWidth:window.innerWidth,screenHeight:window.innerHeight},meta:{timestamp:(new Date).toISOString(),version:"1.0.0",componentName:"UdiTable"},isHovered:q}},getCoreState:function(){return{currentPage:u,totalPages:Math.ceil(a/d),totalCount:a,pageSize:d,loading:i,error:o,scrollPosition:C,hasData:r.length>0}},getScrollState:function(){return Qe(Qe(Qe({},C),E),{},{isAtTop:0===C.verticalPercent,isAtBottom:100===C.verticalPercent,isAtLeft:0===C.horizontalPercent,isAtRight:100===C.horizontalPercent})},getPaginationState:function(){return{currentPage:u+1,totalPages:Math.ceil(a/d),pageSize:d,totalCount:a,hasNextPage:u<Math.ceil(a/d)-1,hasPreviousPage:u>0,startIndex:u*d+1,endIndex:Math.min((u+1)*d,a)}},getFilterState:function(){return{filterText:g,filterColumn:v,advancedFilters:y,showAdvancedFilter:w,hasAnyFilter:""!==g||"all"!==v||Object.keys(y).length>0}},getSortState:function(){return Qe(Qe({},P),{},{isSorted:null!==P.key})},scrollControl:z,tableWrapperRef:F.current}},[r,i,a,o,u,d,P,g,v,y,w,C,E,H,T,D,M,W,I,R,L,l,m,h,x,s,f,j,z,F,p,B,q])}({ref:t,dataState:{data:G,loading:_,error:$,totalCount:V,executeDataRequest:Y},paginationState:{currentPage:pe,setCurrentPage:be,currentPageSize:ge,setCurrentPageSize:me,totalPages:ve},filterState:{filterText:ke,setFilterText:Te,filterColumn:Ce,setFilterColumn:De,advancedFilters:ze,setAdvancedFilters:Ne,showAdvancedFilter:Ee},sortState:{sortConfig:Ge,resetSort:Ye},scrollState:{scrollPosition:X,scrollbarInfo:Z,tableWrapperRef:ee,scrollControl:te},responsiveState:{isMobile:le,isTablet:ce},config:{sortable:s,filterable:f,className:b,enableAutoWidth:R,isDev:m,columns:a,name:S},interactionState:{isHovered:et}}),(0,O.useEffect)(function(){K(ge)},[]),(0,O.useEffect)(function(){if(i){var e={page:pe,pageSize:ge,search:ke,searchColumn:Ce,advancedFilters:ze,sortBy:Ge.key,sortOrder:Ge.direction};J(e)}},[pe,ge,ke,Ce,ze,Ge]);var lt=(0,O.useMemo)(function(){return C.filter(function(e){return!0===e.isFreeAction})},[C]);return P().createElement(P().Fragment,null,P().createElement(ne,{name:S,freeActions:lt,getState:null===(n=t.current)||void 0===n?void 0:n.getState}),P().createElement("div",{className:"udi-table-container ".concat(b),onMouseEnter:tt,onMouseLeave:nt},$&&P().createElement("div",{className:"error-message"},"❌ ",tr("Fetch Failed"),": ",$),f&&P().createElement("div",{className:"udi-table-filter"},P().createElement("div",{className:"filter-section"},P().createElement(re,{columns:a,filterColumn:Ce,filterText:ke,showAdvancedFilter:Ee,advancedFilters:ze,onFilterColumnChange:function(e){De(e),be(0)},onFilterTextChange:function(e){Te(e),be(0)},onToggleAdvancedFilter:qe,onResetFilter:He}),Ee&&P().createElement(ie,{columns:a,advancedFilters:ze,onFilterChange:Le,onClearFilters:Be}))),m&&P().createElement(oe,{scrollPosition:X,currentPage:pe,totalPages:ve,totalCount:V,scrollbarInfo:Z,isMobile:le,isTablet:ce}),P().createElement("div",{className:"udi-table-wrapper-container",style:{position:"relative"}},P().createElement("div",{className:"udi-table-wrapper",ref:ee,style:D?{height:"".concat(D,"px")}:{}},P().createElement("table",{className:"udi-table",style:{width:"".concat(M)}},P().createElement(se,{columns:a,sortable:s,sortConfig:Ge,onSort:_e,getGridSize:Ke,actions:C,actionFirst:F}),P().createElement("tbody",null,_?P().createElement(de,{colSpan:a.length}):G.length>0?G.map(function(e,t){return P().createElement(ye,{key:"row-".concat(t,"-").concat(e.id||""),row:e,rowIndex:t,columns:a,actions:C,actionFirst:F,getGridSize:Ke,tableName:S})}):P().createElement(fe,{colSpan:a.length}))))),A&&P().createElement(B,{currentPage:pe,totalPages:ve,currentPageSize:ge,onPageChange:he,onPageSizeChange:we,isMobile:le,onDropdownFocus:ot,onDropdownBlur:at,onMouseEnter:tt})))});ot.displayName="UdiTable";const at=ot,lt={add:c,subtract:u,isObject:d,sleep:f,getToken:g,getPlainToken:m,notify:S,UdiTable:at};return l})());
package/package.json CHANGED
@@ -1,50 +1,84 @@
1
1
  {
2
2
  "name": "@udi-organization/udi-package",
3
- "version": "1.0.32",
4
- "description": "Reusable React components and utilities for UDI system",
5
- "main": "dist/index.js",
6
- "module": "dist/index.js",
3
+ "version": "1.0.34",
4
+ "description": "UDI package for utils purposes",
5
+ "type": "module",
6
+ "main": "dist/udi-package.js",
7
+ "files": [
8
+ "dist",
9
+ "README.md"
10
+ ],
7
11
  "exports": {
8
- "import": "./dist/index.js"
12
+ ".": "./dist/udi-package.js"
13
+ },
14
+ "scripts": {
15
+ "test": "jest",
16
+ "clean": "rm -rf dist *.tgz test-pack",
17
+ "prepack": "npm run clean && npm run build",
18
+ "pack-test": "npm run prepack && npm pack && mkdir -p test-pack && tar -xzf *.tgz -C test-pack && tree -I 'node_modules'",
19
+ "preview-pack": "npm run pack-test && code test-pack/package",
20
+ "build": "webpack --mode production",
21
+ "build:dev": "webpack --mode development",
22
+ "dev": "webpack serve --mode development --open",
23
+ "release": "npm version patch && npm publish --access public --non-interactive && git push --follow-tags"
9
24
  },
10
- "author": "Danny Xiao",
25
+ "author": "danny",
11
26
  "license": "MIT",
12
27
  "keywords": [
13
- "react",
14
- "components",
15
- "utils",
16
28
  "udi",
17
- "frontend"
29
+ "utils"
18
30
  ],
19
- "scripts": {
20
- "build": "webpack --config webpack.config.cjs --mode production",
21
- "build:dev": "webpack --config webpack.config.cjs --mode development",
22
- "test": "echo \"Error: no test specified\" && exit 1",
23
- "release": "npm version patch && yarn publish --access public --non-interactive && git push --follow-tags",
24
- "pack-test": "bash ./scripts/pack-test.sh"
25
- },
26
- "dependencies": {
27
- "prop-types": "^15.8.1"
28
- },
29
31
  "peerDependencies": {
30
- "jsonwebtoken": "^9.0.2",
31
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
32
- "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
33
- "react-hot-toast": "^2.5.2",
34
- "store2": "^2.14.4"
32
+ "jsonwebtoken": "^8.5.1",
33
+ "react": "^18.0.0",
34
+ "react-dom": "^18.0.0",
35
+ "react-hot-toast": "^2.2.0",
36
+ "react-icons": "^4.0.0 || ^5.0.0",
37
+ "store2": "^2.10.0"
38
+ },
39
+ "peerDependenciesMeta": {
40
+ "react": {
41
+ "optional": false
42
+ },
43
+ "react-dom": {
44
+ "optional": false
45
+ },
46
+ "react-hot-toast": {
47
+ "optional": false
48
+ },
49
+ "react-icons": {
50
+ "optional": false
51
+ },
52
+ "store2": {
53
+ "optional": false
54
+ },
55
+ "jsonwebtoken": {
56
+ "optional": false
57
+ }
35
58
  },
36
59
  "devDependencies": {
37
60
  "@babel/core": "^7.28.0",
61
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
38
62
  "@babel/preset-env": "^7.28.0",
39
63
  "@babel/preset-react": "^7.27.1",
64
+ "@testing-library/dom": "^10.4.0",
65
+ "@testing-library/jest-dom": "^6.6.3",
66
+ "@testing-library/react": "^16.3.0",
67
+ "babel-jest": "^29.7.0",
40
68
  "babel-loader": "^10.0.0",
41
- "buffer": "^6.0.3",
42
- "crypto-browserify": "^3.12.1",
43
69
  "css-loader": "^7.1.2",
44
- "stream-browserify": "^3.0.0",
70
+ "jest": "^29.7.0",
71
+ "jest-environment-jsdom": "^30.0.4",
72
+ "jsonwebtoken": "^8.5.1",
73
+ "react": "^18.2.0",
74
+ "react-dom": "^18.2.0",
75
+ "react-hot-toast": "^2.2.0",
76
+ "react-icons": "^5.5.0",
77
+ "store2": "^2.10.0",
45
78
  "style-loader": "^4.0.0",
46
- "util": "^0.12.5",
47
- "webpack": "^5.101.0",
48
- "webpack-cli": "^6.0.1"
79
+ "webpack": "^5.100.2",
80
+ "webpack-bundle-analyzer": "^4.10.2",
81
+ "webpack-cli": "^6.0.1",
82
+ "webpack-dev-server": "^5.2.2"
49
83
  }
50
84
  }
package/dist/index.js DELETED
@@ -1,2 +0,0 @@
1
- /*! For license information please see index.js.LICENSE.txt */
2
- import{default as n,forwardRef as e,useCallback as t,useEffect as i,useImperativeHandle as r,useMemo as a,useRef as o,useState as l}from"react";var c={56:(n,e,t)=>{n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},72:n=>{var e=[];function t(n){for(var t=-1,i=0;i<e.length;i++)if(e[i].identifier===n){t=i;break}return t}function i(n,i){for(var a={},o=[],l=0;l<n.length;l++){var c=n[l],d=i.base?c[0]+i.base:c[0],s=a[d]||0,u="".concat(d," ").concat(s);a[d]=s+1;var f=t(u),p={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==f)e[f].references++,e[f].updater(p);else{var b=r(p,i);i.byIndex=l,e.splice(l,0,{identifier:u,updater:b,references:1})}o.push(u)}return o}function r(n,e){var t=e.domAPI(e);return t.update(n),function(e){if(e){if(e.css===n.css&&e.media===n.media&&e.sourceMap===n.sourceMap&&e.supports===n.supports&&e.layer===n.layer)return;t.update(n=e)}else t.remove()}}n.exports=function(n,r){var a=i(n=n||[],r=r||{});return function(n){n=n||[];for(var o=0;o<a.length;o++){var l=t(a[o]);e[l].references--}for(var c=i(n,r),d=0;d<a.length;d++){var s=t(a[d]);0===e[s].references&&(e[s].updater(),e.splice(s,1))}a=c}}},113:n=>{n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},314:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map(function(e){var t="",i=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),i&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),i&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t}).join("")},e.i=function(n,t,i,r,a){"string"==typeof n&&(n=[[null,n,void 0]]);var o={};if(i)for(var l=0;l<this.length;l++){var c=this[l][0];null!=c&&(o[c]=!0)}for(var d=0;d<n.length;d++){var s=[].concat(n[d]);i&&o[s[0]]||(void 0!==a&&(void 0===s[5]||(s[1]="@layer".concat(s[5].length>0?" ".concat(s[5]):""," {").concat(s[1],"}")),s[5]=a),t&&(s[2]?(s[1]="@media ".concat(s[2]," {").concat(s[1],"}"),s[2]=t):s[2]=t),r&&(s[4]?(s[1]="@supports (".concat(s[4],") {").concat(s[1],"}"),s[4]=r):s[4]="".concat(r)),e.push(s))}},e}},540:n=>{n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},601:n=>{n.exports=function(n){return n[1]}},659:n=>{var e={};n.exports=function(n,t){var i=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(t)}},745:(n,e,t)=>{t.d(e,{A:()=>l});var i=t(601),r=t.n(i),a=t(314),o=t.n(a)()(r());o.push([n.id,"/* UdiTable 樣式 */\n\n.udi-table-container {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n width: 100%;\n}\n\n/* 錯誤訊息樣式 */\n.udi-table-container .error-message {\n background: #f8d7da;\n color: #721c24;\n padding: 12px 16px;\n border-left: 4px solid #dc3545;\n margin-bottom: 16px;\n border-radius: 4px;\n font-weight: 500;\n}\n\n@media (max-width: 768px) {\n .udi-table-container .error-message {\n margin: 8px;\n font-size: 14px;\n }\n}\n\n/* 篩選器樣式 */\n.udi-table-filter {\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.udi-table-filter .filter-section .basic-filter {\n padding: 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n white-space: nowrap;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector label {\n font-weight: 500;\n color: #495057;\n font-size: 14px;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n background: white;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n transition: border-color 0.15s ease-in-out;\n min-width: 120px;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select:hover {\n border-color: #adb5bd;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-input {\n flex: 1;\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.15s ease-in-out;\n min-width: 200px;\n}\n\n.udi-table-filter .filter-section .basic-filter .filter-input:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.udi-table-filter .filter-section .basic-filter .advanced-filter-toggle {\n padding: 8px 16px;\n background: #007bff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: background-color 0.15s ease-in-out;\n white-space: nowrap;\n}\n\n.udi-table-filter .filter-section .basic-filter .advanced-filter-toggle:hover {\n background: #0056b3;\n}\n\n.udi-table-filter .filter-section .basic-filter .reset-button {\n padding: 8px 16px;\n background: #6c757d;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: background-color 0.15s ease-in-out;\n white-space: nowrap;\n}\n\n.udi-table-filter .filter-section .basic-filter .reset-button:hover {\n background: #5a6268;\n}\n\n.udi-table-filter .filter-section .advanced-filter {\n padding: 16px;\n background: #f1f3f4;\n border-top: 1px solid #e9ecef;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-header h4 {\n margin: 0;\n color: #495057;\n font-size: 16px;\n font-weight: 600;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-header .clear-advanced-button {\n padding: 6px 12px;\n background: #dc3545;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n transition: background-color 0.15s ease-in-out;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-header .clear-advanced-button:hover {\n background: #c82333;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 12px;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item label {\n font-weight: 500;\n color: #495057;\n font-size: 13px;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.15s ease-in-out;\n background: white;\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input:hover {\n border-color: #adb5bd;\n}\n\n/* 滾動位置顯示器 */\n.scroll-position-indicator {\n padding: 8px 16px;\n background: #e3f2fd;\n border-bottom: 1px solid #bbdefb;\n font-size: 12px;\n color: #1565c0;\n font-family: 'Courier New', monospace;\n text-align: center;\n}\n\n/* 表格包裝器 */\n.udi-table-wrapper {\n overflow-x: auto;\n height: 300px;\n overflow-y: auto;\n border: 1px solid #e9ecef;\n -webkit-overflow-scrolling: touch;\n}\n\n.udi-table-wrapper::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.udi-table-wrapper::-webkit-scrollbar-track {\n background: #f8f9fa;\n border-radius: 4px;\n}\n\n.udi-table-wrapper::-webkit-scrollbar-thumb {\n background: #cbd5e0;\n border-radius: 4px;\n}\n\n.udi-table-wrapper::-webkit-scrollbar-thumb:hover {\n background: #a0aec0;\n}\n\n/* 表格樣式 */\n.udi-table {\n width: 200%;\n min-width: 800px;\n border-collapse: collapse;\n font-size: 14px;\n}\n\n.udi-table th,\n.udi-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid #e9ecef;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n}\n\n.udi-table th {\n background: #f8f9fa;\n font-weight: 600;\n color: #495057;\n position: sticky;\n top: 0;\n z-index: 10;\n border-bottom: 2px solid #dee2e6;\n}\n\n.udi-table th.sortable {\n cursor: pointer;\n user-select: none;\n transition: background-color 0.15s ease-in-out;\n}\n\n.udi-table th.sortable:hover {\n background: #e9ecef;\n}\n\n.udi-table th.sortable .sort-icon {\n opacity: 0.4;\n}\n\n.udi-table th.sorted {\n background: #e3f2fd;\n color: #1976d2;\n}\n\n.udi-table th.sorted .sort-icon {\n opacity: 1;\n}\n\n.udi-table th .th-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-width: 0;\n}\n\n.udi-table th .sort-icon {\n margin-left: 8px;\n font-size: 12px;\n opacity: 0.7;\n flex-shrink: 0;\n}\n\n.udi-table tbody tr {\n transition: background-color 0.15s ease-in-out;\n}\n\n.udi-table tbody tr:hover {\n background: #f8f9fa;\n}\n\n.udi-table tbody tr:nth-child(even) {\n background: #fdfdfe;\n}\n\n.udi-table tbody tr:nth-child(even):hover {\n background: #f8f9fa;\n}\n\n.udi-table tbody td:first-child {\n left: 0;\n background: inherit;\n z-index: 5;\n border-right: 1px solid #e9ecef;\n}\n\n.udi-table .no-data {\n text-align: center;\n color: #6c757d;\n font-style: italic;\n padding: 32px;\n}\n\n.udi-table .loading-state {\n text-align: center;\n padding: 40px 20px;\n}\n\n.udi-table .loading-state .loading-spinner {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.udi-table .loading-state .loading-spinner .spinner {\n width: 32px;\n height: 32px;\n border: 3px solid #f3f3f3;\n border-top: 3px solid #007bff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n.udi-table .loading-state .loading-spinner span {\n color: #868e96;\n font-size: 14px;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n/* 分頁樣式 */\n.udi-table-pagination {\n padding: 16px;\n background: #f8f9fa;\n border-top: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.udi-table-pagination .pagination-info {\n display: flex;\n flex-direction: column;\n gap: 8px;\n color: #6c757d;\n font-size: 14px;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector label {\n font-weight: 500;\n color: #495057;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector .page-size-select {\n padding: 4px 8px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n background: white;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n transition: border-color 0.15s ease-in-out;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector .page-size-select:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.udi-table-pagination .pagination-info .page-size-selector .page-size-select:hover {\n border-color: #adb5bd;\n}\n\n.udi-table-pagination .pagination-info .page-size-selector span {\n color: #495057;\n}\n\n.udi-table-pagination .pagination-info .pagination-summary {\n font-size: 13px;\n}\n\n.udi-table-pagination .pagination-controls {\n display: flex;\n gap: 4px;\n align-items: center;\n}\n\n.udi-table-pagination .pagination-controls .current-page-mobile {\n padding: 8px 12px;\n background: #007bff;\n color: white;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n min-width: 60px;\n text-align: center;\n border: 1px solid #007bff;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button {\n padding: 6px 12px;\n border: 1px solid #ced4da;\n background: white;\n color: #495057;\n cursor: pointer;\n border-radius: 4px;\n font-size: 14px;\n transition: all 0.15s ease-in-out;\n min-width: 40px;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button:hover:not(:disabled) {\n background: #e9ecef;\n border-color: #adb5bd;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button:disabled {\n background: #f8f9fa;\n color: #6c757d;\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button.disabled {\n background: #f1f3f4;\n color: #9aa0a6;\n cursor: not-allowed;\n opacity: 0.5;\n border-color: #dadce0;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button.disabled:hover {\n background: #f1f3f4;\n border-color: #dadce0;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button.active {\n background: #007bff;\n border-color: #007bff;\n color: white;\n}\n\n.udi-table-pagination .pagination-controls .pagination-button.active:hover {\n background: #0056b3;\n border-color: #0056b3;\n}\n\n/* 響應式設計 */\n\n/* 大螢幕 (1200px+) - 桌面 */\n@media (min-width: 1200px) {\n .udi-table-wrapper {\n height: 400px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n/* 中等螢幕 (992px - 1199px) - 桌面/平板橫向 */\n@media (max-width: 1199px) and (min-width: 992px) {\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n/* 小螢幕 (768px - 991px) - 平板 */\n@media (max-width: 991px) and (min-width: 768px) {\n .udi-table-container {\n border-radius: 6px;\n }\n\n .udi-table-wrapper {\n height: 350px;\n }\n\n .udi-table {\n min-width: 600px;\n }\n \n .udi-table th,\n .udi-table td {\n padding: 10px 12px;\n font-size: 13px;\n max-width: 200px;\n }\n\n .udi-table-filter .filter-section .basic-filter {\n flex-wrap: wrap;\n gap: 10px;\n }\n \n .udi-table-filter .filter-section .basic-filter .filter-input {\n min-width: 180px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n grid-template-columns: repeat(2, 1fr);\n gap: 10px;\n }\n\n .udi-table-pagination {\n padding: 12px;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector {\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n }\n}\n\n/* 手機螢幕 (481px - 767px) */\n@media (max-width: 767px) and (min-width: 481px) {\n .udi-table-container {\n border-radius: 4px;\n margin: 0 4px;\n }\n\n .udi-table-wrapper {\n height: 300px;\n }\n\n .udi-table {\n min-width: 500px;\n }\n \n .udi-table th,\n .udi-table td {\n padding: 8px 10px;\n font-size: 12px;\n max-width: 150px;\n }\n \n .udi-table th:first-child,\n .udi-table tbody td:first-child {\n position: sticky;\n left: 0;\n background: inherit;\n z-index: 5;\n border-right: 2px solid #e9ecef;\n font-weight: 600;\n }\n\n .scroll-position-indicator {\n padding: 6px 12px;\n font-size: 11px;\n }\n\n .udi-table-filter .filter-section .basic-filter {\n padding: 12px;\n flex-direction: column;\n align-items: stretch;\n gap: 8px;\n }\n\n .udi-table-filter .filter-section .basic-filter .filter-column-selector {\n justify-content: flex-start;\n }\n \n .udi-table-filter .filter-section .basic-filter .filter-column-selector label {\n font-size: 13px;\n }\n \n .udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select {\n min-width: 100px;\n flex: 1;\n font-size: 14px;\n }\n\n .udi-table-filter .filter-section .basic-filter .filter-input {\n min-width: auto;\n font-size: 16px;\n }\n\n .udi-table-filter .filter-section .basic-filter .advanced-filter-toggle,\n .udi-table-filter .filter-section .basic-filter .reset-button {\n align-self: stretch;\n font-size: 14px;\n }\n\n .udi-table-filter .filter-section .advanced-filter {\n padding: 12px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header {\n flex-direction: column;\n align-items: stretch;\n gap: 8px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header h4 {\n font-size: 14px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header .clear-advanced-button {\n align-self: flex-end;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n grid-template-columns: 1fr;\n gap: 8px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item label {\n font-size: 12px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input {\n font-size: 16px;\n }\n\n .udi-table-pagination {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n gap: 8px;\n }\n\n .udi-table-pagination .pagination-info {\n text-align: center;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector {\n justify-content: center;\n flex-wrap: wrap;\n }\n\n .udi-table-pagination .pagination-controls {\n justify-content: center;\n }\n \n .udi-table-pagination .pagination-controls .pagination-button {\n padding: 8px 12px;\n font-size: 13px;\n min-width: 36px;\n }\n}\n\n/* 極小螢幕 (320px - 480px) */\n@media (max-width: 480px) {\n .udi-table-container {\n border-radius: 0;\n margin: 0;\n box-shadow: none;\n border-left: 1px solid #e9ecef;\n border-right: 1px solid #e9ecef;\n }\n\n .udi-table-wrapper {\n height: 250px;\n border: none;\n }\n\n .udi-table {\n min-width: 400px;\n font-size: 11px;\n }\n \n .udi-table th,\n .udi-table td {\n padding: 6px 8px;\n font-size: 11px;\n max-width: 120px;\n }\n \n .udi-table th:first-child,\n .udi-table tbody td:first-child {\n min-width: 60px;\n }\n\n .scroll-position-indicator {\n padding: 4px 8px;\n font-size: 10px;\n }\n\n .udi-table-filter .filter-section .basic-filter {\n padding: 8px;\n gap: 6px;\n }\n\n .udi-table-filter .filter-section .basic-filter .filter-column-selector label {\n font-size: 12px;\n }\n \n .udi-table-filter .filter-section .basic-filter .filter-column-selector .filter-column-select {\n font-size: 13px;\n padding: 6px 8px;\n }\n\n .udi-table-filter .filter-section .basic-filter .filter-input {\n padding: 8px 10px;\n font-size: 16px;\n }\n\n .udi-table-filter .filter-section .basic-filter .advanced-filter-toggle,\n .udi-table-filter .filter-section .basic-filter .reset-button {\n padding: 8px 12px;\n font-size: 13px;\n }\n\n .udi-table-filter .filter-section .advanced-filter {\n padding: 8px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header h4 {\n font-size: 13px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-header .clear-advanced-button {\n padding: 4px 8px;\n font-size: 11px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid {\n gap: 6px;\n }\n\n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item label {\n font-size: 11px;\n }\n \n .udi-table-filter .filter-section .advanced-filter .advanced-filter-grid .advanced-filter-item .advanced-filter-input {\n padding: 6px 8px;\n font-size: 16px;\n }\n\n .udi-table-pagination {\n padding: 8px;\n gap: 6px;\n }\n\n .udi-table-pagination .pagination-info {\n font-size: 12px;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector {\n gap: 4px;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector label {\n font-size: 11px;\n }\n \n .udi-table-pagination .pagination-info .page-size-selector .page-size-select {\n padding: 4px 6px;\n font-size: 12px;\n }\n \n .udi-table-pagination .pagination-info .pagination-summary {\n font-size: 11px;\n }\n\n .udi-table-pagination .pagination-controls {\n flex-wrap: wrap;\n gap: 2px;\n }\n\n .udi-table-pagination .pagination-controls .pagination-button {\n padding: 6px 8px;\n font-size: 11px;\n min-width: 28px;\n }\n}\n\n/* 橫向模式優化 */\n@media (orientation: landscape) and (max-height: 500px) {\n .udi-table-wrapper {\n height: 200px;\n }\n \n .udi-table-filter .filter-section .basic-filter {\n flex-direction: row;\n flex-wrap: wrap;\n }\n}\n\n/* 高DPI螢幕優化 */\n@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\n .udi-table th,\n .udi-table td {\n border-width: 0.5px;\n }\n}\n",""]);const l=o},825:n=>{n.exports=function(n){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var i="";t.supports&&(i+="@supports (".concat(t.supports,") {")),t.media&&(i+="@media ".concat(t.media," {"));var r=void 0!==t.layer;r&&(i+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),i+=t.css,r&&(i+="}"),t.media&&(i+="}"),t.supports&&(i+="}");var a=t.sourceMap;a&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),e.styleTagTransform(i,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}}},d={};function s(n){var e=d[n];if(void 0!==e)return e.exports;var t=d[n]={id:n,exports:{}};return c[n](t,t.exports,s),t.exports}s.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return s.d(e,{a:e}),e},s.d=(n,e)=>{for(var t in e)s.o(e,t)&&!s.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:e[t]})},s.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),s.nc=void 0;var u=s(72),f=s.n(u),p=s(825),b=s.n(p),g=s(659),m=s.n(g),h=s(56),v=s.n(h),x=s(540),y=s.n(x),w=s(113),E=s.n(w),k=s(745),z={};function S(n){return S="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},S(n)}function P(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,i)}return t}function N(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?P(Object(t),!0).forEach(function(e){F(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):P(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function F(n,e,t){return(e=function(n){var e=function(n){if("object"!=S(n)||!n)return n;var e=n[Symbol.toPrimitive];if(void 0!==e){var t=e.call(n,"string");if("object"!=S(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(n)}(n);return"symbol"==S(e)?e:e+""}(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function O(){var n,e,t="function"==typeof Symbol?Symbol:{},i=t.iterator||"@@iterator",r=t.toStringTag||"@@toStringTag";function a(t,i,r,a){var c=i&&i.prototype instanceof l?i:l,d=Object.create(c.prototype);return C(d,"_invoke",function(t,i,r){var a,l,c,d=0,s=r||[],u=!1,f={p:0,n:0,v:n,a:p,f:p.bind(n,4),d:function(e,t){return a=e,l=0,c=n,f.n=t,o}};function p(t,i){for(l=t,c=i,e=0;!u&&d&&!r&&e<s.length;e++){var r,a=s[e],p=f.p,b=a[2];t>3?(r=b===i)&&(c=a[(l=a[4])?5:(l=3,3)],a[4]=a[5]=n):a[0]<=p&&((r=t<2&&p<a[1])?(l=0,f.v=i,f.n=a[1]):p<b&&(r=t<3||a[0]>i||i>b)&&(a[4]=t,a[5]=i,f.n=b,l=0))}if(r||t>1)return o;throw u=!0,i}return function(r,s,b){if(d>1)throw TypeError("Generator is already running");for(u&&1===s&&p(s,b),l=s,c=b;(e=l<2?n:c)||!u;){a||(l?l<3?(l>1&&(f.n=-1),p(l,c)):f.n=c:f.v=c);try{if(d=2,a){if(l||(r="next"),e=a[r]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,l<2&&(l=0)}else 1===l&&(e=a.return)&&e.call(a),l<2&&(c=TypeError("The iterator does not provide a '"+r+"' method"),l=1);a=n}else if((e=(u=f.n<0)?c:t.call(i,f))!==o)break}catch(e){a=n,l=1,c=e}finally{d=1}}return{value:e,done:u}}}(t,r,a),!0),d}var o={};function l(){}function c(){}function d(){}e=Object.getPrototypeOf;var s=[][i]?e(e([][i]())):(C(e={},i,function(){return this}),e),u=d.prototype=l.prototype=Object.create(s);function f(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,d):(n.__proto__=d,C(n,r,"GeneratorFunction")),n.prototype=Object.create(u),n}return c.prototype=d,C(u,"constructor",d),C(d,"constructor",c),c.displayName="GeneratorFunction",C(d,r,"GeneratorFunction"),C(u),C(u,r,"Generator"),C(u,i,function(){return this}),C(u,"toString",function(){return"[object Generator]"}),(O=function(){return{w:a,m:f}})()}function C(n,e,t,i){var r=Object.defineProperty;try{r({},"",{})}catch(n){r=0}C=function(n,e,t,i){function a(e,t){C(n,e,function(n){return this._invoke(e,t,n)})}e?r?r(n,e,{value:t,enumerable:!i,configurable:!i,writable:!i}):n[e]=t:(a("next",0),a("throw",1),a("return",2))},C(n,e,t,i)}function j(n){return function(n){if(Array.isArray(n))return H(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||M(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(n,e,t,i,r,a,o){try{var l=n[a](o),c=l.value}catch(n){return void t(n)}l.done?e(c):Promise.resolve(c).then(i,r)}function A(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var i,r,a,o,l=[],c=!0,d=!1;try{if(a=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(i=a.call(t)).done)&&(l.push(i.value),l.length!==e);c=!0);}catch(n){d=!0,r=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(d)throw r}}return l}}(n,e)||M(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function M(n,e){if(n){if("string"==typeof n)return H(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?H(n,e):void 0}}function H(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,i=Array(e);t<e;t++)i[t]=n[t];return i}z.styleTagTransform=E(),z.setAttributes=v(),z.insert=m().bind(null,"head"),z.domAPI=b(),z.insertStyleElement=y(),f()(k.A,z),k.A&&k.A.locals&&k.A.locals;var W=e(function(e,c){var d,s=e.onDataRequest,u=void 0===s?null:s,f=e.columns,p=void 0===f?[]:f,b=e.pageSize,g=void 0===b?10:b,m=e.sortable,h=void 0===m||m,v=e.filterable,x=void 0===v||v,y=e.className,w=void 0===y?"":y,E=e.isDev,k=void 0!==E&&E,z=e.syncTableControl,S=void 0!==z&&z,P=e.currentTableRef,C=void 0===P?{currentTableRef:C}:P,M=e.name,H=void 0===M?null:M,W=e.setTablePage,L=A(l([]),2),I=L[0],D=L[1],R=A(l(!1),2),B=R[0],U=R[1],_=A(l(0),2),G=_[0],V=_[1],q=A(l(null),2),J=q[0],$=q[1],K=A(l({key:null,direction:"asc"}),2),Q=K[0],X=K[1],Y=A(l(""),2),Z=Y[0],nn=Y[1],en=A(l("all"),2),tn=en[0],rn=en[1],an=A(l(!1),2),on=an[0],ln=an[1],cn=A(l({}),2),dn=cn[0],sn=cn[1],un=A(l(1),2),fn=un[0],pn=un[1],bn=A(l(g),2),gn=bn[0],mn=bn[1],hn=A(l({top:0,left:0,verticalPercent:0,horizontalPercent:0}),2),vn=hn[0],xn=hn[1],yn=A(l({hasHorizontal:!1,hasVertical:!1,maxScrollLeft:0,maxScrollTop:0}),2),wn=yn[0],En=yn[1],kn=o(null),zn=A(l(!1),2),Sn=zn[0],Pn=zn[1],Nn=A(l(!1),2),Fn=Nn[0],On=Nn[1],Cn=A(l(!1),2),jn=Cn[0],Tn=Cn[1],An=A(l(!1),2),Mn=An[0],Hn=An[1],Wn=t(function(){var n,e=(n=O().m(function n(e){var t,i,r;return O().w(function(n){for(;;)switch(n.p=n.n){case 0:if(u&&!Mn){n.n=1;break}return n.a(2);case 1:return U(!0),$(null),n.p=2,n.n=3,u(e);case 3:t=n.v,i=Array.isArray(t.data)?t.data:[],D(Fn?function(n){return[].concat(j(n),j(i))}:i),V(t.totalCount||0),Hn(!0),n.n=5;break;case 4:n.p=4,r=n.v,console.error("❌ Callback Error:",r),$(r.message),D([]),V(0);case 5:return n.p=5,U(!1),n.f(5);case 6:return n.a(2)}},n,null,[[2,4,5,6]])}),function(){var e=this,t=arguments;return new Promise(function(i,r){var a=n.apply(e,t);function o(n){T(a,i,r,o,l,"next",n)}function l(n){T(a,i,r,o,l,"throw",n)}o(void 0)})});return function(n){return e.apply(this,arguments)}}(),[u,Fn,Mn]),Ln=a(function(){var n;return function(e){clearTimeout(n),n=setTimeout(function(){Wn(e)},300)}},[Wn]);i(function(){W(function(n){return N(N({},n),{},F(F({},"".concat(H,"Page"),fn),"".concat(H,"PageSize"),gn))})},[gn,fn]),r(c,function(){return{executeRequest:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=N({page:fn,pageSize:gn,search:Z,searchColumn:tn,advancedFilters:dn,sortBy:Q.key,sortOrder:Q.direction},n);Wn(e)},reload:function(){var n={page:fn,pageSize:gn,search:Z,searchColumn:tn,advancedFilters:dn,sortBy:Q.key,sortOrder:Q.direction};Wn(n)},resetFilters:function(){nn(""),rn("all"),sn({}),pn(1),X({key:null,direction:"asc"}),Wn({page:1,pageSize:gn,search:"",searchColumn:"all",advancedFilters:{},sortBy:null,sortOrder:"asc"})},setPage:function(n){pn(n)},setPageSize:function(n){mn(n),pn(1)},getState:function(){return{data:I,loading:B,error:J,totalCount:G,tableWrapperRef:kn.current,tableName:H,pagination:{currentPage:fn,pageSize:gn,totalPages:Math.ceil(G/gn),hasNextPage:fn<Math.ceil(G/gn),hasPreviousPage:fn>1,startIndex:(fn-1)*gn+1,endIndex:Math.min(fn*gn,G),isFirstPage:1===fn,isLastPage:fn===Math.ceil(G/gn)},scroll:{position:vn,scrollbar:wn,isAtTop:0===vn.verticalPercent,isAtBottom:100===vn.verticalPercent,isAtLeft:0===vn.horizontalPercent,isAtRight:100===vn.horizontalPercent,canScrollVertically:wn.hasVertical,canScrollHorizontally:wn.hasHorizontal},sort:{sortConfig:Q,sortBy:Q.key,sortOrder:Q.direction,isSorted:null!==Q.key},filter:{filterText:Z,filterColumn:tn,advancedFilters:dn,showAdvancedFilter:on,hasBasicFilter:""!==Z||"all"!==tn,hasAdvancedFilter:Object.keys(dn).length>0,hasAnyFilter:""!==Z||"all"!==tn||Object.keys(dn).length>0,activeFiltersCount:Object.keys(dn).filter(function(n){return dn[n]}).length+(Z?1:0)},config:{sortable:h,filterable:x,className:w,isDev:k,columnsCount:p.length,columns:p.map(function(n){return{dataField:n.dataField,title:n.title,width:n.width,sortable:h}})},responsive:{isMobile:Rn,isTablet:_n,isDesktop:!Rn&&!_n,screenWidth:window.innerWidth,screenHeight:window.innerHeight},meta:{timestamp:(new Date).toISOString(),version:"1.0.0",componentName:"UdiTable"},isHovered:Sn}},getCoreState:function(){return{currentPage:fn,totalPages:Math.ceil(G/gn),totalCount:G,pageSize:gn,loading:B,error:J,scrollPosition:vn,hasData:I.length>0}},getScrollState:function(){return N(N(N({},vn),wn),{},{isAtTop:0===vn.verticalPercent,isAtBottom:100===vn.verticalPercent,isAtLeft:0===vn.horizontalPercent,isAtRight:100===vn.horizontalPercent})},getPaginationState:function(){return{currentPage:fn,totalPages:Math.ceil(G/gn),pageSize:gn,totalCount:G,hasNextPage:fn<Math.ceil(G/gn),hasPreviousPage:fn>1,startIndex:(fn-1)*gn+1,endIndex:Math.min(fn*gn,G)}},getFilterState:function(){return{filterText:Z,filterColumn:tn,advancedFilters:dn,showAdvancedFilter:on,hasAnyFilter:""!==Z||"all"!==tn||Object.keys(dn).length>0}},getSortState:function(){return N(N({},Q),{},{isSorted:null!==Q.key})},scrollControl:Yn,tableWrapperRef:kn.current}},[I,B,G,J,fn,gn,Q,Z,tn,dn,on,vn,wn,Rn,_n,h,x,w,k,p,Wn]),i(function(){u&&Wn({page:1,pageSize:gn,search:"",searchColumn:"all",advancedFilters:{},sortBy:null,sortOrder:"asc"})},[u,Wn]),i(function(){if(u){var n={page:fn,pageSize:gn,search:Z,searchColumn:tn,advancedFilters:dn,sortBy:Q.key,sortOrder:Q.direction};Ln(n)}},[u,fn,gn,Z,tn,dn,Q,Ln]);var In=Math.ceil(G/gn),Dn=A(l(!1),2),Rn=Dn[0],Bn=Dn[1],Un=A(l(!1),2),_n=Un[0],Gn=Un[1];i(function(){var n=function(){var n=window.innerWidth;Bn(n<768),Gn(n>=768&&n<992)};return n(),window.addEventListener("resize",n),function(){return window.removeEventListener("resize",n)}},[]),i(function(){var n=kn.current;if(n){var e=function(){var e=n.scrollWidth>n.clientWidth,t=n.scrollHeight>n.clientHeight,i=Math.max(0,n.scrollWidth-n.clientWidth),r=Math.max(0,n.scrollHeight-n.clientHeight);En({hasHorizontal:e,hasVertical:t,maxScrollLeft:i,maxScrollTop:r,scrollWidth:n.scrollWidth,scrollHeight:n.scrollHeight,clientWidth:n.clientWidth,clientHeight:n.clientHeight})};e();var t,i=!1,r=function(n){i||(i=!0,requestAnimationFrame(function(){var t=n.target,r=t.scrollTop,a=t.scrollLeft,o=t.scrollHeight,l=t.clientHeight,c=t.scrollWidth,d=t.clientWidth,s=c>d?a/(c-d)*100:0;xn({top:r,left:a,verticalPercent:parseFloat((o>l?r/(o-l)*100:0).toFixed(1)),horizontalPercent:parseFloat(s.toFixed(1))}),e(),i=!1}))},a=function(){e()};return n.addEventListener("scroll",r,{passive:!0}),window.addEventListener("resize",a),window.ResizeObserver&&(t=new ResizeObserver(function(){e()})).observe(n),function(){n.removeEventListener("scroll",r),window.removeEventListener("resize",a),t&&t.disconnect()}}},[I]);var Vn=t(function(n){h&&(X(function(e){var t="asc";return e.key===n&&"asc"===e.direction&&(t="desc"),{key:n,direction:t}}),pn(1))},[h]),qn=t(function(n){pn(n)},[]),Jn=t(function(){nn(""),rn("all"),sn({}),pn(1)},[]),$n=t(function(n,e){sn(function(t){return N(N({},t),{},F({},n,e))}),pn(1)},[]),Kn=t(function(){sn({}),pn(1)},[]),Qn=t(function(){ln(function(n){return!n})},[]),Xn=t(function(n){mn(n),pn(1)},[]),Yn=t(function(n,e){var t=kn.current;if(t){var i=t.scrollHeight-t.clientHeight,r=t.scrollWidth-t.clientWidth,a="top"===n?Math.min(e,i):Math.min(e,r);"top"===n?t.scrollTop=a:t.scrollLeft=a}},[]),Zn=function(){Pn(!0),S&&C&&(C.current=kn.current)},ne=t(function(){On(function(n){return!n})},[]),ee=a(function(){var n;return function(e){clearTimeout(n),n=setTimeout(function(){e<=In&&qn(e)},300)}},[qn,In]);return i(function(){if(Fn){var n=kn.current;if(!n)return;var e=function(){var e=n.scrollTop,t=n.scrollHeight,i=n.clientHeight;(t>i?e/(t-i)*100:0)>=80&&fn<In&&ee(fn+1)};return n.addEventListener("scroll",e),function(){n.removeEventListener("scroll",e)}}},[Fn,fn,In,ee]),n.createElement(n.Fragment,null,H&&n.createElement("div",{className:"udi-table-name"},n.createElement("h3",null,H)),n.createElement("div",{className:"udi-table-container ".concat(w),onMouseEnter:Zn,onMouseLeave:function(){jn||Pn(!1)}},J&&n.createElement("div",{className:"error-message"},"❌ 載入失敗: ",J),x&&n.createElement("div",{className:"udi-table-filter"},n.createElement("div",{className:"filter-section"},n.createElement("div",{className:"basic-filter"},n.createElement("div",{className:"filter-column-selector"},n.createElement("label",{htmlFor:"filterColumn"},"搜尋欄位:"),n.createElement("select",{id:"filterColumn",value:tn,onChange:function(n){rn(n.target.value),pn(1)},className:"filter-column-select"},n.createElement("option",{value:"all"},"全部欄位"),p.map(function(e){return n.createElement("option",{key:e.dataField,value:e.dataField},e.title)}))),n.createElement("input",{type:"text",placeholder:"all"===tn?"搜尋所有欄位...":"搜尋 ".concat((null===(d=p.find(function(n){return n.key===tn}))||void 0===d?void 0:d.title)||"","..."),value:Z,onChange:function(n){nn(n.target.value),pn(1)},className:"filter-input"}),n.createElement("button",{onClick:Qn,className:"advanced-filter-toggle"},on?"隱藏進階篩選":"進階篩選"),(Z||"all"!==tn||Object.keys(dn).length>0)&&n.createElement("button",{onClick:Jn,className:"reset-button"},"重置所有篩選")),on&&n.createElement("div",{className:"advanced-filter"},n.createElement("div",{className:"advanced-filter-header"},n.createElement("h4",null,"進階篩選 - 多欄位同時篩選"),Object.keys(dn).length>0&&n.createElement("button",{onClick:Kn,className:"clear-advanced-button"},"清除進階篩選")),n.createElement("div",{className:"advanced-filter-grid"},p.map(function(e){return n.createElement("div",{key:e.dataField,className:"advanced-filter-item"},n.createElement("label",{htmlFor:"advanced-".concat(e.dataField)},e.title,":"),n.createElement("input",{id:"advanced-".concat(e.dataField),type:"text",placeholder:"篩選 ".concat(e.title,"..."),value:dn[e.dataField]||"",onChange:function(n){return $n(e.dataField,n.target.value)},className:"advanced-filter-input"}))}))))),k&&n.createElement("div",{className:"scroll-position-indicator"},n.createElement("div",null,"滾動位置: 垂直 ",vn.verticalPercent.toFixed(1),"% | 水平 ",vn.horizontalPercent.toFixed(1),"%"),n.createElement("div",null,"分頁: ",fn,"/",Math.ceil(G/gn)," | 總筆數: ",G),n.createElement("div",null,"滾動條: ",wn.hasVertical?"垂直✓":"垂直✗"," | ",wn.hasHorizontal?"水平✓":"水平✗"),n.createElement("div",null,"螢幕: ",Rn?"手機":_n?"平板":"桌面"," (",window.innerWidth,"x",window.innerHeight,")")),n.createElement("div",{className:"udi-table-wrapper-container",style:{position:"relative"}},n.createElement("div",{className:"udi-table-wrapper",ref:kn},n.createElement("table",{className:"udi-table"},n.createElement("thead",null,n.createElement("tr",null,p.map(function(e){return n.createElement("th",{key:e.dataField,onClick:function(){return Vn(e.dataField)},className:"\n ".concat(h?"sortable":"","\n ").concat(Q.key===e.dataField?"sorted":"","\n ").concat(Q.key===e.dataField?Q.direction:"","\n "),style:{width:e.width,minWidth:e.minWidth}},n.createElement("div",{className:"th-content"},n.createElement("span",null,e.title),h&&n.createElement("span",{className:"sort-icon"},Q.key===e.dataField?"asc"===Q.direction?"↑":"↓":"↕")))}))),n.createElement("tbody",null,B?n.createElement("tr",null,n.createElement("td",{colSpan:p.length,className:"loading-state"},n.createElement("div",{className:"loading-spinner"},n.createElement("div",{className:"spinner"}),n.createElement("span",null,"loading...")))):I.length>0?I.map(function(e,t){return n.createElement("tr",{key:"row-".concat(t,"-").concat(e.id||"")},p.map(function(i,r){return n.createElement("td",{key:"cell-".concat(t,"-").concat(r,"-").concat(i.dataField),title:e[i.dataField]},i.render?i.render(e[i.dataField],e,t+1,i.dataField,H):e[i.dataField])}))}):n.createElement("tr",null,n.createElement("td",{colSpan:p.length,className:"no-data"},"沒有資料")))))),n.createElement("div",{className:"udi-table-pagination"},n.createElement("div",{className:"pagination-info"},n.createElement("div",{className:"page-size-selector"},n.createElement("label",{htmlFor:"pageSize"},"每頁顯示:"),n.createElement("div",{className:"page-size-container",onMouseEnter:Zn},n.createElement("select",{id:"pageSize",value:gn,onChange:function(n){return Xn(Number(n.target.value))},onFocus:function(){Tn(!0)},onBlur:function(){Tn(!1)},className:"page-size-select"},n.createElement("option",{value:5},"5"),n.createElement("option",{value:10},"10"),n.createElement("option",{value:20},"20"),n.createElement("option",{value:50},"50"),n.createElement("option",{value:100},"100"))),n.createElement("span",null,"筆")),n.createElement("div",{className:"pagination-summary"},"共 ",G," 筆資料",In>1?",第 ".concat(fn," / ").concat(In," 頁"):"")),In>1&&n.createElement("div",{className:"pagination-controls"},Rn?n.createElement(n.Fragment,null,n.createElement("button",{onClick:function(){return qn(fn-1)},disabled:1===fn,className:"pagination-button"},"‹"),n.createElement("span",{className:"current-page-mobile"},fn," / ",In),n.createElement("button",{onClick:function(){return qn(fn+1)},disabled:fn===In,className:"pagination-button"},"›")):n.createElement(n.Fragment,null,n.createElement("button",{onClick:function(){return qn(1)},disabled:1===fn,className:"pagination-button"},"首頁"),n.createElement("button",{onClick:function(){return qn(fn-1)},disabled:1===fn,className:"pagination-button"},"上一頁"),function(){var e=[],t=fn,i=Math.max(1,t-1),r=Math.min(In,i+2);r-i<2&&(i=Math.max(1,r-2));for(var a=function(){var t=i+o,r=t<=In;e.push(n.createElement("button",{key:"page-btn-".concat(o),onClick:function(){return r?qn(t):null},disabled:!r,className:"pagination-button ".concat(r&&fn===t?"active":""," ").concat(r?"":"disabled")},r?t:"-"))},o=0;o<3;o++)a();return e}(),n.createElement("button",{onClick:function(){return qn(fn+1)},disabled:fn===In,className:"pagination-button"},"下一頁"),n.createElement("button",{onClick:function(){return qn(In)},disabled:fn===In,className:"pagination-button"},"末頁")))),k&&n.createElement("button",{onClick:ne,className:"toggle-infinite-scroll-button"},Fn?"切換到手動分頁":"切換到無限滾動")))});W.displayName="UdiTable";const L=W;function I(n){return new Date(n).toLocaleDateString("zh-TW")}function D(n){return D="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},D(n)}var R=function(n){return null!==n&&"object"===D(n)&&!Array.isArray(n)};function B(n){return new Promise(function(e){return setTimeout(e,n)})}function U(n,e){if("number"!=typeof n||"number"!=typeof e)throw new Error("參數必須是數字");return n+e}function _(n,e){if("number"!=typeof n||"number"!=typeof e)throw new Error("參數必須是數字");return n-e}function G(){console.log("Hello from Udi Package!")}export{L as UdiTable,U as add,I as formatDate,R as isObject,B as sleep,_ as subtract,G as test0821};