{"_id":"ch3chi-commons-vue","_rev":"39-f82f082aa60ceeebe35d3871b37a7097","name":"ch3chi-commons-vue","dist-tags":{"latest":"1.20.0"},"versions":{"0.1.0":{"name":"ch3chi-commons-vue","version":"0.1.0","_id":"ch3chi-commons-vue@0.1.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"e3f6fd2c1ce22a67f97bea1e4c5a682c0a7ccb91","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.0.tgz","fileCount":3,"integrity":"sha512-d/dDpM5LAFo2jr+Z1vyYOHrDseyJIRMbO2wOrZcgtPZHURSBCHtQjzHgUeU41K2WIuMr6vueVZprUC2i8YRdpw==","signatures":[{"sig":"MEUCIAQ8ijzG/EC7t5U7fB8IMB+0nY31jRZ3O+QFv3edQx4EAiEAtebsUFwjRF5uaIBxgpqavEKGiuTUN+pj/09dk2U9mJw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1158},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫範例。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.0_1762409950875_0.6015579931860908","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"ch3chi-commons-vue","version":"0.1.1","_id":"ch3chi-commons-vue@0.1.1","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"22dae89e4e4815439567801babe45b91142a5887","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.1.tgz","fileCount":8,"integrity":"sha512-gZFsi7k92yh3h4NQD9rImGd7re3hSW4uha+YRooibnQCmrDl7uRXRcKVi5Yd6+qniVjlTu77n38s527HT+zpmw==","signatures":[{"sig":"MEUCIBkBzJua3SM1ut2ju685M9kklctmInqrEYukJqXh6OFIAiEAwPV5xG7SHxXBCuXB1oM0U6mOC1RalsA0khT1eWulFbw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9428},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫範例。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","dayjs":"^1.11.13","lodash":"^4.17.21","bootstrap":"^5.3.7","typescript":"^5.9.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@types/bootstrap":"^5.2.10"},"peerDependencies":{"vue":"^3.5.18","yup":"^1.7.1","uuid":"^11.1.0","dayjs":"^1.11.13","lodash":"^4.17.21","bootstrap":"^5.3.7","vee-validate":"^4.15.1"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.1_1762412075939_0.21097554463893786","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"ch3chi-commons-vue","version":"0.1.2","_id":"ch3chi-commons-vue@0.1.2","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"5c696589841643af7a6ea5273c7c88db6b375249","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.2.tgz","fileCount":8,"integrity":"sha512-/xypHwgvTtuz334jY91XW0QNkv6+7+4vlIwnXvZehMU7Wa0bS7D9e28MxOvGrUvgT/kEwzBJjyVXg1DeaUFOtg==","signatures":[{"sig":"MEUCIEHKtdbtlVzOf0GabzeQbjk+JNRpYe+0viZWe1fPT4izAiEAyzvzXigZZRCvTGJbDv44sODlG8+X+JaXHfFP7KDZGbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9433},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫範例。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","dayjs":"^1.11.13","lodash":"^4.17.21","bootstrap":"^5.3.7","typescript":"^5.9.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@types/bootstrap":"^5.2.10"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","dayjs":">=1.11.13","lodash":">=4.17.21","bootstrap":"^5.3.7","vee-validate":">=4.15.1"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.2_1762412326921_0.8149891629194717","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"ch3chi-commons-vue","version":"0.1.3","_id":"ch3chi-commons-vue@0.1.3","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"90ef12fa415d46d3dd6427dbf34f310a2e7b0c65","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.3.tgz","fileCount":8,"integrity":"sha512-iSqZ1t3Kvpxv8xgZmr8y/z+SlmmnbB0qFjyD8KknAv4D/urALzlCkDIYBEEpdLo2DpymLfNStsxb4NH21UUePw==","signatures":[{"sig":"MEUCIQCqOuD14L5dyIq9tGw536zDLob/5nUYZDJ+PHblVb/emgIgJuZ8moUeYT2syOvcqBlG/+49NiFyNs/QR8aVX+xJz0M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9433},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫範例。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","dayjs":"^1.11.13","lodash":"^4.17.21","bootstrap":"^5.3.7","typescript":"^5.9.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@types/bootstrap":"^5.2.10"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","dayjs":">=1.11.13","lodash":">=4.17.21","bootstrap":"^5.3.7","vee-validate":">=4.15.1"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.3_1762412430419_0.3265674460212715","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"ch3chi-commons-vue","version":"0.1.4","_id":"ch3chi-commons-vue@0.1.4","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"e1fa4bc5ae2c51765ef918b2fb08734b2ff1a44d","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.4.tgz","fileCount":4,"integrity":"sha512-4jecFHXfYCJ5zkWI5nSq1X2cLTYryK05DdIdo7crnMJCGm+RABA2Aup3+GduBBn4do7BFHQPN+bOWKocmxmmPA==","signatures":[{"sig":"MEUCIQDK99Y0SVMoPpWlE+x0vsdGFS7Du4CzZTCMl2HosrDXBgIgNs57wYWFeIrcmWSlhOW9XMZaYfYvX8pVl4HWYmSMzCw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10108},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prebuild":"rm -rf dist","vite-build":"vite build"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫範例。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","dayjs":"^1.11.13","lodash":"^4.17.21","bootstrap":"^5.3.7","typescript":"^5.9.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@types/bootstrap":"^5.2.10"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","dayjs":">=1.11.13","lodash":">=4.17.21","bootstrap":"^5.3.7","vee-validate":">=4.15.1"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.4_1762413191455_0.5228334765005098","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"ch3chi-commons-vue","version":"0.1.5","_id":"ch3chi-commons-vue@0.1.5","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"257703e0503185d9d6e3497cfd21ba4d9cca1f53","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.5.tgz","fileCount":10,"integrity":"sha512-P2Uy8rBb6bQGBDCyTZPql49rsRIN1ST8yABFhyrm7Ze9i0/py5rNrd8gOPjtHeD/TE7jzv1gJLAtgX04wA5OMA==","signatures":[{"sig":"MEUCICsi1cCfLVz3Bb++IviuAzMnwMaYyr5aqQnz+4/Ck5LXAiEAkiRGN98xQ5QBi+6/DgGxZ8K7Ho6Z9PprL+tsFAETejg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12958},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prebuild":"rm -rf dist","vite-build":"vite build"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫範例。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","dayjs":"^1.11.13","lodash":"^4.17.21","bootstrap":"^5.3.7","typescript":"^5.9.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","dayjs":">=1.11.13","lodash":">=4.17.21","bootstrap":"^5.3.7","vee-validate":">=4.15.1"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.5_1762413533163_0.8671114158558844","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"ch3chi-commons-vue","version":"0.1.7","_id":"ch3chi-commons-vue@0.1.7","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"052f33a01aa948b06137da4463404f809314061b","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.7.tgz","fileCount":10,"integrity":"sha512-pDOFOzth1NszAwRYIham+Pjm5K3cDpVVQkJXpOWbP1TDRHx1kes/MTHdBso3X8Ar+ysj+bVTQfBzTo8whAom5g==","signatures":[{"sig":"MEQCICXh2WyJwiH3zPno1BTezVvG6v9FWfhxD+Qp4Idhr+vAAiBzGa23FGaJ0PjjrvzE7lDgRlmKTNEl2fuv0uo7bgNRHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13075},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"scripts":{"build":"tsc","prebuild":"rm -rf dist","vite-build":"vite build"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫範例。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","dayjs":"^1.11.13","lodash":"^4.17.21","bootstrap":"^5.3.7","typescript":"^5.9.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","dayjs":">=1.11.13","lodash":">=4.17.21","bootstrap":"^5.3.7","vee-validate":">=4.15.1"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.7_1762414207530_0.3830767595690556","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"ch3chi-commons-vue","version":"0.1.10","_id":"ch3chi-commons-vue@0.1.10","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"eb82c2c4dcfb6ebbbbd4420183e4184224bb61a6","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.10.tgz","fileCount":10,"integrity":"sha512-mFXyEWYByDkS08jpatDAMx1q5Ije4ZEPcFxBhWrfcjeZjrNjCCxff12Ydz5nHfsuOeVtZ0Hxbs+sd0b/uBadIA==","signatures":[{"sig":"MEUCIQCVVH4xp6CyIgyds1fv7jOcIgqo+mAcw1+Y2604WIUx4gIgFz2PsGVFHDN2Z4FVPDCgQs43LdRcBjSqpSBqyJJ6MmQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14987},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"aff259045bd4b4972760e0de9004dfa186fbf23f","scripts":{"build":"tsc","prebuild":"rm -rf dist","vite-build":"vite build"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","uuidv4":"^6.2.13","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","@types/mime-types":"^3.0.1","@tinymce/tinymce-vue":"^6.3.0","@fortawesome/vue-fontawesome":"^3.1.2","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.10_1763363242873_0.40927907297893285","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"ch3chi-commons-vue","version":"0.1.11","_id":"ch3chi-commons-vue@0.1.11","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"f8aaaf2ca9a4c56a859651b46ecd5a0fcf00c2dd","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.11.tgz","fileCount":10,"integrity":"sha512-Ua+yxbRgs3QuQ6hbG4ioFRFeZHUcOjeD7kbvg/8I4LhWwfD8M8DRdXUeIdUZZqW3/jKp5h7573QKJSj6q54x9g==","signatures":[{"sig":"MEQCIBCXgPpAdi9EG8n0WBj4HExRlcbfjPsVkbWFgTPhV5VJAiBxsQvHTQroXZ3OxnsnwFRONcKUI5zsMuj3kIAz+pS5HQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14987},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"4e04239f8b8631deb5147b90c0bbcfa2dfe3a347","scripts":{"build":"tsc","prebuild":"rm -rf dist","vite-build":"vite build"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","uuidv4":"^6.2.13","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","@types/mime-types":"^3.0.1","@tinymce/tinymce-vue":"^6.3.0","@fortawesome/vue-fontawesome":"^3.1.2","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.11_1763428763443_0.37288126427923163","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"ch3chi-commons-vue","version":"0.1.12","_id":"ch3chi-commons-vue@0.1.12","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"fa884a4c58a4caf7f6242969f1ea6e704320a9f2","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.12.tgz","fileCount":34,"integrity":"sha512-lPK+gGBU1dhVuiN4ltyBZhFsBacyiENwO3SdztEWUmbJzcSy7uCmG0xGZVFLusDLsY2y0hTnLCyCVSD6MJ23Og==","signatures":[{"sig":"MEYCIQDVnsunqbqngj3SuCwPkWAZf+mONk69U31a2nnitx6mPwIhANz/9nzq8tBlJn/czxGmfJw5CdeglvfQnWwbkXJeqnu0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":489678},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"4e04239f8b8631deb5147b90c0bbcfa2dfe3a347","scripts":{"build":"tsc","prebuild":"rm -rf dist","vite-build":"vite build"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","uuidv4":"^6.2.13","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","@types/mime-types":"^3.0.1","@tinymce/tinymce-vue":"^6.3.0","@fortawesome/vue-fontawesome":"^3.1.2","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.12_1763431389024_0.5209731202040855","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"ch3chi-commons-vue","version":"0.1.13","_id":"ch3chi-commons-vue@0.1.13","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"3af9d236b50b4769557c5d3a450ae235de3425e2","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.13.tgz","fileCount":34,"integrity":"sha512-25X7GjSYhRCqxQvqzqiLg027Zd+YMg97ZypRZMeg8Iu6i68zM68DFJI3QzarI7lqs6NoL3KFpQjLCn61mC1PlA==","signatures":[{"sig":"MEUCIQCXaPojdwbLE37rxcyh8/o7b/28OwPoZZGLet4sBP8F+QIgHWqPCk+vnm8uVwZsCs0FC4gjGBnqLMm0HVcBX6uG1UI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":497043},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"4e04239f8b8631deb5147b90c0bbcfa2dfe3a347","scripts":{"build":"tsc","prebuild":"rm -rf dist","vite-build":"vite build"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","uuidv4":"^6.2.13","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","@types/mime-types":"^3.0.1","@tinymce/tinymce-vue":"^6.3.0","@fortawesome/vue-fontawesome":"^3.1.2","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.13_1763431752499_0.012692737881701888","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"ch3chi-commons-vue","version":"0.1.14","_id":"ch3chi-commons-vue@0.1.14","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"7ab8988cb276b4424f8c4a2224acce2cb07e00eb","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-0.1.14.tgz","fileCount":34,"integrity":"sha512-hLSmjU+qT6k9viDA2fVUQKJVQaufU2NiZTI/kdXaDgbY6ltywA4YzSCauf0ePctXoCSXcjPq4o9JwDi9h9WPCA==","signatures":[{"sig":"MEYCIQDwI9FDVHQyTtTRxsaTwSa6LxbEW2R1Rm+6pfOubWR9lwIhANxhFEYEKtFSIdCPK4MgAgcPwR04PFPK29V+WNyAa/Gj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":632735},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"4e04239f8b8631deb5147b90c0bbcfa2dfe3a347","scripts":{"build":"tsc","prebuild":"rm -rf dist","vite-build":"vite build"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 公用元件/函式庫。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.0","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","@types/mime-types":"^3.0.1","@tinymce/tinymce-vue":"^6.3.0","@fortawesome/vue-fontawesome":"^3.1.2","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_0.1.14_1763434840023_0.5045898867160123","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"ch3chi-commons-vue","version":"1.2.0","_id":"ch3chi-commons-vue@1.2.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"09a07718633d821ee9c3e297616ead3f4d2dcf99","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.2.0.tgz","fileCount":53,"integrity":"sha512-XGT7NvvApn/v9BpOkcSh0SQ2791nlWiyTXOyWg2XcEyXnUzD53hycWl8TkLH669xmF+GSgVLByqfJV5Mc67ZTg==","signatures":[{"sig":"MEYCIQDej0IjWMUu8En6tG+3M+eCjrnHc+i2FbYRlaPRFJCFLwIhAIPzkaDyUr10XAQ3j8oQayu7RZJPAZJuZebvjNIsRJPr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1591804},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"596675d519f3a905df116b18e763c2b25e59419d","scripts":{"build":"tsc --noEmit","release":"standard-version","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","ts-node":"^10.9.2","loglevel":"^1.9.2","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.2.0_1766124621323_0.7629984901268578","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"ch3chi-commons-vue","version":"1.8.0","_id":"ch3chi-commons-vue@1.8.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"144cc1ba413077ab1b887e5e32226f5d7f049eef","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.8.0.tgz","fileCount":2,"integrity":"sha512-2aRcVn5ETyxyxZ23sDlv8ZxGKLUarKDZ0wNCE+s+5Hmx9LaNWBU/bbYCXM3/cAvL/ARFq6M8jTeJqAhKS3ZNag==","signatures":[{"sig":"MEQCIBLliIjiDpwUf1+wy5amLTy6s0+uf4ZUOGVyR7j6fp+YAiB4I29HNiRFa1AR+bqn1KeMP1H4DDh0H8L7nplT9qGA3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7405},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"56c12444a8fde7ee94aa8610dc57c294164f3489","scripts":{"build":"tsc --noEmit","release":"standard-version","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","ts-node":"^10.9.2","loglevel":"^1.9.2","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.8.0_1766915293795_0.32315922705283984","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"ch3chi-commons-vue","version":"1.8.1","_id":"ch3chi-commons-vue@1.8.1","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"b5f485d8973552967d947b35dd8838cbb8d44830","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.8.1.tgz","fileCount":62,"integrity":"sha512-lGvSD86VQTbWHEAbQJGd3/jpDoQiRbCNkQEa+Ocbl0u4Ej4BzYRpDJclKngyNNKigsEZpwV6lqahaWhttIag2A==","signatures":[{"sig":"MEYCIQCqGT+6UsLV6N4dY90C8cMcejMuF2CnssseobXGPIcU4AIhAIwji7d7O4voqGomzciNNMBmy8JyhHI/b6uxyXlveMU/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296189},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"56c12444a8fde7ee94aa8610dc57c294164f3489","scripts":{"build":"tsc --noEmit","release":"standard-version","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","ts-node":"^10.9.2","loglevel":"^1.9.2","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.8.1_1766915763059_0.9674454997341939","host":"s3://npm-registry-packages-npm-production"}},"1.8.2":{"name":"ch3chi-commons-vue","version":"1.8.2","_id":"ch3chi-commons-vue@1.8.2","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"348579c486c8121c37149fc9eef12e5891791dc8","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.8.2.tgz","fileCount":60,"integrity":"sha512-0pzzDeRiFkd2fejMD0QMfw5BYPsvS3vZhT9pqK/l3PEZTgU+63hU5pwjQgQygRQUe18qtERctJi5vOhfUaN9/A==","signatures":[{"sig":"MEUCIAcNhw/8IghcKQXDOC75PIa/tEQ3gXKpeqxQAq2iTRUUAiEAjg64IatFM82CXBauqJgz0OrKo1nymv06dEDcHRA26JU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1630212},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"56c12444a8fde7ee94aa8610dc57c294164f3489","scripts":{"build":"tsc --noEmit","release":"standard-version","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","ts-node":"^10.9.2","loglevel":"^1.9.2","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.8.2_1766916300152_0.6825684856387952","host":"s3://npm-registry-packages-npm-production"}},"1.8.5":{"name":"ch3chi-commons-vue","version":"1.8.5","_id":"ch3chi-commons-vue@1.8.5","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"d719775b05049dda8c0113ae3312436818a168c3","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.8.5.tgz","fileCount":60,"integrity":"sha512-DSHePjvP0KMp04zvjtreMdNFbd/PmIIto0j6k+iwEeRF/pIcLdCj5IsBpm+tfdi9luuijRdr7gGIZGPrfEDSSQ==","signatures":[{"sig":"MEYCIQCk5KA8rZ/7Gm3aCPyZcIzRvrTB9Ni8iq/7d2fmfP3y7QIhAKMNC+RTzwPIh7jwdcFKNSSVYSLCoiwRt/xKQ5B1oT7U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1630218},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"e3cf2632b63949dc3016f5541c4a95b99ea1761e","scripts":{"build":"tsc --noEmit","release":"standard-version","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","ts-node":"^10.9.2","loglevel":"^1.9.2","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.8.5_1767169167791_0.6105241830427683","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"ch3chi-commons-vue","version":"1.9.0","_id":"ch3chi-commons-vue@1.9.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"e91822f120a50a09603d2d352d4223b8594c8e92","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.9.0.tgz","fileCount":60,"integrity":"sha512-lxo3oq8s5OI4awP/hAmbxMkt4pUtzz+9DuHBIXgx4tsgqGlbuMhNLFFWq4c5XzWaVIPOAx7dEi0B59FIboLTCg==","signatures":[{"sig":"MEYCIQCi1DLGvSAmKg8UAl7L/TQnxjhSLJ6mqrQ4+Pp46uS9/QIhALdID+UXj9/c6V//fGlU2qHwFru8lpgkSN5+wl4+FyhC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1630920},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"48582324f60ae5244e58100bc518d7123038a7bd","scripts":{"build":"tsc --noEmit","release":"standard-version","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","ts-node":"^10.9.2","loglevel":"^1.9.2","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.9.0_1767319403115_0.27449319746878453","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"ch3chi-commons-vue","version":"1.9.2","_id":"ch3chi-commons-vue@1.9.2","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"53ccf883dd38fc95312e5d2a83612f7f8d9c5ebd","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.9.2.tgz","fileCount":60,"integrity":"sha512-48qswzZkWzI5aFKhJnFbTqyvK7gYVhH6iAeH8ZY4YORid0kG/qm/4Gy85OXajMcn2vvIGpLiQokKD0znTvgWZQ==","signatures":[{"sig":"MEQCIEoUnSSS8M5dE6vb8TWeT2wyXx9qarIfsQSgDGooQk2MAiB9azqSc6CURIQn0shProixCAxgz5Yo9Ln/xZLkv+WE+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1631805},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"bc1de7e845db5e67ee83ab7fd4f06edc72d003a6","scripts":{"build":"tsc --noEmit","release":"standard-version","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","ts-node":"^10.9.2","loglevel":"^1.9.2","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.9.2_1767778689819_0.9411136756577716","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"ch3chi-commons-vue","version":"1.10.0","_id":"ch3chi-commons-vue@1.10.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"ddcfc26fd607e399a30441e042121753781e37c4","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.10.0.tgz","fileCount":60,"integrity":"sha512-qpxzxQA+99oVKX0YIHmTxeYEIqEpSc0tc7USLLVgjdCHmleGWx3Ocb31VJni7o962u/nG0dzTJT9flcUV1cwEA==","signatures":[{"sig":"MEUCIEi1zh8EEBQRKTdjzJg0GXlIsl1XxKixeBEbMoXQyGHoAiEA+yfbSOJ6oglHVTJO3h+h000cRAhGwDXf12apPuPZJ2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1631886},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"fe1783349549a5b1c7d8ee85448eb64a3183eb49","scripts":{"build":"tsc --noEmit","release":"standard-version","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","ts-node":"^10.9.2","loglevel":"^1.9.2","bootstrap":"^5.3.7","flatpickr":"^4.6.13","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.10.0_1768534125173_0.42553470054925024","host":"s3://npm-registry-packages-npm-production"}},"1.10.5":{"name":"ch3chi-commons-vue","version":"1.10.5","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.10.5","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"ef8a73b7c6b02c5d0fa62c46bb35aa145e5a3eed","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.10.5.tgz","fileCount":61,"integrity":"sha512-8qcVYkZsAVI6E/YM82yKl5bW526L7+qWDYc+aocVg7xeFPHX5peNYqicdsC741ad2MpHhkScOtuO3CVUmFDXbw==","signatures":[{"sig":"MEQCIDnFOr432bBW56F4W3ZBIZqpvBEMTgmwIWeGMf7ZF91gAiAKd4tzaUQaA88bD8jnfiYKxsy08xeycc8faYq/xh2prg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1635971},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"862d5c176edd0d9449f33001987bc0b8b802069e","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.10.5_1769782155371_0.38091414505813725","host":"s3://npm-registry-packages-npm-production"}},"1.10.7":{"name":"ch3chi-commons-vue","version":"1.10.7","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.10.7","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"c7ed79b41118d2970401d83bd8b75902a024cf5b","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.10.7.tgz","fileCount":61,"integrity":"sha512-g3zzutelc7R290AvmyZozmo2/+RYabviVlHOchxypyVw5nZ+RxpDZ+nT7seLyENgMGp0NM0Tx1Bepg4gQqKAuQ==","signatures":[{"sig":"MEYCIQDCAOo+ucjs4SP7Pz/fCCo3JmtTcRgbM9PkUQpoBaRxjQIhAKt5rIINuvdtxU5FsCtLZaXZCuhQ3sOSXur4l93oYa9t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1636554},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"0ecabb6bd6a9e95981724e5804f44855a0c4d041","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.10.7_1770043326964_0.9497855891843894","host":"s3://npm-registry-packages-npm-production"}},"1.10.8":{"name":"ch3chi-commons-vue","version":"1.10.8","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.10.8","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"76cc783d19602c6a92f0c27f5fdadd51418c3fd0","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.10.8.tgz","fileCount":61,"integrity":"sha512-zZZevNfPqWnv/C95GZ/seCp0QjlCtAKc54S5oNSV8ZgrkQfM400/o6cAHTOtg+yEoqY6rP6sev97McJ33wSR5w==","signatures":[{"sig":"MEUCIBt/80K0Ox0Wmjiy13+1mSzJQLv2VdZ7sLp113mQM0Z9AiEAjxyDuGbDj+9RDLEUZT1Su/fKdQSDf96gKQtppTpcpIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1642391},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"e096c8042d8078e1ab7ae0dc6006170e1eee4d04","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.10.8_1770177130271_0.9862141399880349","host":"s3://npm-registry-packages-npm-production"}},"1.10.9":{"name":"ch3chi-commons-vue","version":"1.10.9","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.10.9","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"3ba490f2a7546b72ec40aca30e92efbb911ebbdd","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.10.9.tgz","fileCount":61,"integrity":"sha512-eQdhj3ugmQi5QTuVhw23fug14689jkrveVizluRWxQy4+lM19NCV8WRzYnpYfV8xJ6KdnKobnVieaiAtadT2eA==","signatures":[{"sig":"MEUCIQDSwyBX2hCOomHG/kDge6gHb95kpZWwuqUqE8t3oH8bdgIgDU1F0ie7WtBmdev0cwMPBBJ+vsroOR/VVUWcKx9sGDQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1642491},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"a4ec47a34a0c15cf4ae48597445e8dc774686873","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.10.9_1770183248775_0.8457216012754807","host":"s3://npm-registry-packages-npm-production"}},"1.10.10":{"name":"ch3chi-commons-vue","version":"1.10.10","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.10.10","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"cbb7d4d90a9cbe8dcc23e16a93cedd34ed87fad0","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.10.10.tgz","fileCount":61,"integrity":"sha512-1drnYJA5m1eNQaxjDhZkOIFtRj1AqZEwB3amiWWbJ6IliSMQLhCa0rjpFA+79ki/fYhoj1MMw87GL2kYA0Aw/w==","signatures":[{"sig":"MEYCIQD3FtKIM1MMGTl+anPmjcS09dIWlb1EGK7Aui2qdW5L9wIhAOVIlVVT0jn4GL71dX4TZhuY2Tc0vuzyIr2VxMQyvz9B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1642492},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"ad2e952f7c5a390aa252c47f79e6f4eacf4b9f3e","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"10.9.3","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.10.10_1770195392283_0.7220523403513937","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"ch3chi-commons-vue","version":"1.11.0","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.11.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"14bc820a91a4289e9b1bbd48cc9245a9a83d38e3","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.11.0.tgz","fileCount":61,"integrity":"sha512-8BLsC/4SCwOedpMCP4/Gz7/BgQB/WjuFGkw8DJ19XQkRa6hmLA41kfgaLuIXVRUZ3kmRTMsd+bEEYJZih5lctA==","signatures":[{"sig":"MEQCIER+y2iGiJWgTglf2akIAU39B6Je2Fo2Qygs30f7kS99AiB2iPOFLR+vR4g/T50s3w/+PBtS6u9CVDbnzBHVri0poQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1644048},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"8ca6c5d2dc4032163133ef03cf36c404f8eb2808","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.11.0_1778627223390_0.9536608509559052","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"ch3chi-commons-vue","version":"1.12.0","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.12.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"47014af9887eb9fd6e4b3451d1c08818f7ee87e9","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.12.0.tgz","fileCount":61,"integrity":"sha512-gSZP8m8+ymRmxNKOR4G6H4FCr/JW5zJpl8qF2OzWKODQHTTy2R/mHhKnTPhd8AHTLz3qrWLa6QtHVlenGqfLHg==","signatures":[{"sig":"MEUCIEdukjb+wKrSHSm2hQdDEE5TnzJ3JYQ7YBsApA3pVR5fAiEAlNVZWBP8lTE2yB4oURKHj63opIxz0ZKpjRvdbbxhxJQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1646197},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"3d7b75d39d36c93fcb012da495964eb5588f26ba","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.12.0_1778982191257_0.4471828621909353","host":"s3://npm-registry-packages-npm-production"}},"1.12.1":{"name":"ch3chi-commons-vue","version":"1.12.1","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.12.1","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"e2f0fe8feb312d4405ff6811184b1ad26317760b","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.12.1.tgz","fileCount":61,"integrity":"sha512-vHmPtvw5PJzngeuhCshXj708gg9UJ+0JwLWNFbaY0TK0Ki2dls+ESU6j0En8Q7Mkq8TEuzZ1H4mRQJ4ldHM8Vw==","signatures":[{"sig":"MEYCIQCT7B5QfHg35KRSlvz4EF5xcHIJ7AykKW8mu4EFyd5aGQIhAOY1Euxaj/tLmQR1Lr1bdjEYYPfpz9AyvCDSv2togAkS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1646735},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"8e56419cca5547c6895241a735612bb7d3fd384b","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.12.1_1778985308183_0.563712573273579","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"ch3chi-commons-vue","version":"1.13.0","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.13.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"aab43a58f2661a3d95348acbc3c0e7712832c622","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.13.0.tgz","fileCount":62,"integrity":"sha512-wwLTMlRCfjMinzB8j7St3vO1k2QCMCcLdZ8RBgsl2263pgDnur7jOz2Oa30vsG1aAnHeTML7AGfZZmZynLOV8Q==","signatures":[{"sig":"MEQCIEoiE4o/KJDFgkK4Qqs1BPtRrK4KUfe7NDu6oqzKc5W0AiBNkwTrQ/ngSvZBM1Nnd10oNjL+1sQLzePAEUscM9fjWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1659495},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"8daa50f49a2642c3bbb242c73517bbf58e154d06","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.13.0_1779179782780_0.62720981665417","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"ch3chi-commons-vue","version":"1.16.0","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.16.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"d3d001fc520e6d4bc3ac73e896208144c6563ffb","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.16.0.tgz","fileCount":62,"integrity":"sha512-M4zODkts5gKon17dYla/5PgYtD2Epw7V+8MRZcTJKynf4zgXnvmroy/biL6W7QiQeQu4338JoeLALd7Wg7fCLA==","signatures":[{"sig":"MEYCIQCxsnlHRHm4TFb8FVzDNOryHaYPXvTLBfBLFtkgrWwaIQIhANRGLXAuttVmBCOCW31XVI6NZleeAPMF8q2PNayak+VC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1627679},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"9c15f5bae661262527314a8efeae341108b6a9ec","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件/函式庫，提供常用的 UI 元件、API 服務、權限管理等功能，基於 TypeScript 和 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","pinia":"^3.0.4","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.16.0_1779289230120_0.7461534581844904","host":"s3://npm-registry-packages-npm-production"}},"1.16.1":{"name":"ch3chi-commons-vue","version":"1.16.1","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.16.1","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"ba2523ef5de4af9d29eb5298a865302826f34d6b","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.16.1.tgz","fileCount":62,"integrity":"sha512-HjL9Y9ktm9vMDUFxdZXrkeubK/M3J1SlfjeoalfNlXk63PxvpteSxfyvVSaHP3Pb/0D7m2ZpOwtL8f8zbUQJCg==","signatures":[{"sig":"MEUCICTLROdkD5qv/4+bzFZl1AD4KLyUL6fbdDeFJjZWHu6DAiEAwJDGMDlPCWCucgubRqk+xyU3jzVqIu844Iv4nIhKp+8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1663456},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"b61f4d61b24a6f40ae50639a94e21ea2f6d35539","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","uuidv4":"^6.2.13","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","pinia":"^3.0.4","lodash":">=4.17.21","uuidv4":">=6.2.13","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.16.1_1779331574001_0.5901839490520921","host":"s3://npm-registry-packages-npm-production"}},"1.17.0":{"name":"ch3chi-commons-vue","version":"1.17.0","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.17.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"1eabca61592d8e2e88d01a628b88d3678c49e913","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.17.0.tgz","fileCount":3,"integrity":"sha512-2/Lpuyj7igDBEp9um9QFaDM5ccmsf/zFj+mwjj06/8hd2zP4bpFPI/alpJMoJ3FNWvltZr0QMT0hMSaWG5cziQ==","signatures":[{"sig":"MEQCIHwhplWWM/jxkOuK0QIVjDLM4YNi5WLCo8uf1ACPvV29AiAU+Vdjx15T1GcEiV8KuckZoeBqDF41pX6RxIIhp03+zA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48342},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"c410d6880eb93f0a575198704b96a8ec098f392b","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","pinia":"^3.0.4","lodash":">=4.17.21","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.17.0_1780929775906_0.36206252771874015","host":"s3://npm-registry-packages-npm-production"}},"1.17.1":{"name":"ch3chi-commons-vue","version":"1.17.1","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.17.1","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"4c706796e88b2b17a0db80dc962b31cbc049559f","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.17.1.tgz","fileCount":3,"integrity":"sha512-oAOdifBCjcPkq/8pn7qD0QsJA+okCTzRsjysSNeMZE8iNI2b4+iuhHfoyi9CDDkcPO3WPAJLtJPYovl7Uy47mQ==","signatures":[{"sig":"MEQCIFpwyN7cpMgteVuBohIS8+yQFJzFNaO9FFR2+L1j6gvPAiAv2AJg/oiqpRZUuVfnhd+E5iHg/74xG4QLQnFm5LbcaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48342},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"98c6d52af43c43cdd26ce80ef599dc09b2f1ba4f","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","pinia":"^3.0.4","lodash":">=4.17.21","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.17.1_1780930201206_0.5038415840831914","host":"s3://npm-registry-packages-npm-production"}},"1.17.2":{"name":"ch3chi-commons-vue","version":"1.17.2","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.17.2","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"b6af96ad4d326c14e49cd65a9e215d259ea377f1","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.17.2.tgz","fileCount":62,"integrity":"sha512-T3YwvqE7Ig9yegDEoOm8Q+SxL/NChSEJt8xf9Wp6bx3I3M8OiBoMLIdChP+oGkj5qVyQR70NNPyHeaBYKI6S1Q==","signatures":[{"sig":"MEQCIB0+TgEi16X+Sg0QINwujEd57we0Nlm5UiyEJWLSQMFyAiBQR0Xz9eAnFLNQRjzOkELMwOlz2j34pqESdC3C9Em9vw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1701211},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"ada1c189050394936724ff01e94851c8c8315c72","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","pinia":"^3.0.4","lodash":">=4.17.21","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.17.2_1780930356138_0.9817016055592545","host":"s3://npm-registry-packages-npm-production"}},"1.18.0":{"name":"ch3chi-commons-vue","version":"1.18.0","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.18.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"6c92bd14a857401087c2b5f33dee6c9b993d6bd0","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.18.0.tgz","fileCount":62,"integrity":"sha512-05+XSBzswA0ts/cfndO3Dwj66U6ZPaTf2XFyK2iehkaprvhtXWPcqXe8Zs55GJBceEmM574uNfqMIMxSJHXhcw==","signatures":[{"sig":"MEUCICf20IMP1dORtpyMJ2TFjaz1+CfzCbEEpWiqm3HG0cmQAiEAxUNydfPd78YuXfjjnCfVnQJs+nH9bYcjl+EqkJw4U9A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1705632},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"30e6ed4e2f34b5402d46b6fe015cf5960308154a","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","pinia":"^3.0.4","lodash":">=4.17.21","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.18.0_1781050046649_0.4485157595580411","host":"s3://npm-registry-packages-npm-production"}},"1.18.1":{"name":"ch3chi-commons-vue","version":"1.18.1","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.18.1","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"a9773f94e44b7ecd0b2de0c92f670103090441ae","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.18.1.tgz","fileCount":62,"integrity":"sha512-yQdExFaWpewbirPbol18eTtYpgK2gzm3NNMGbPYDdUwfB4fBP2AZurBbLEAXxKJeNU8VrTea1wRQFKM2W65cwQ==","signatures":[{"sig":"MEUCIQDmRF2dq/iGiHRz+ZtO/OE6W4a3JAgkq4lTDJeoS9ROZwIgLjIU5ArDPUqPKu9pN/68fCiN1TgCNezjRdNa+MmagjI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1706282},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"03d6130bad5811122d3bd8b35e2e4d7e7b655172","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","pinia":"^3.0.4","lodash":">=4.17.21","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.18.1_1781055015311_0.3733008199959227","host":"s3://npm-registry-packages-npm-production"}},"1.18.2":{"name":"ch3chi-commons-vue","version":"1.18.2","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.18.2","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"c630bce4825f5ec998180cdcf6585920abac989c","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.18.2.tgz","fileCount":62,"integrity":"sha512-gB5Zpp1yRZ6g2zDDxGp43PNIXlIlQ6BLEEx59SImDvcr5bfEvguz5/sRBGvBpyxySZhZpp7wwKmaw+bebSTLYw==","signatures":[{"sig":"MEUCIFc3bcPBlQ9nkTyxsfBNN7YYPvbFSmsBgA2jaNlsmhE+AiEAtsL7EHgSBYwMVkv+wN3cW/OTEuNM+mvGlGi0RKBgTlQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1706568},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"344a3f042059cb6387d7e4cefa04e7d00565b1f5","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","pinia":"^3.0.4","lodash":">=4.17.21","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.18.2_1781059524665_0.2808332676465224","host":"s3://npm-registry-packages-npm-production"}},"1.19.0":{"name":"ch3chi-commons-vue","version":"1.19.0","author":{"name":"Ch3Chi"},"license":"MIT","_id":"ch3chi-commons-vue@1.19.0","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"dist":{"shasum":"2289a80f7df3b3e8113cee3983a06faa3d0398fe","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.19.0.tgz","fileCount":62,"integrity":"sha512-LPTsdWD5BHIfFHZBPVD/tuen8wWmOs5Ozv4539ZTxOJVNwTKxRV9zqavvUIvjIVgfmLw7Dj7u4Fgwu+FUqwglg==","signatures":[{"sig":"MEYCIQDZ7gzDejU7M9+xrwSBA3GhRLdAcR+/7W99+NltM89i/wIhAJqKEcZMpicjEn/riEjhCDWTjR3QfWb4ifa+plAFYZTo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1707732},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"gitHead":"71a9624245aeed941a1f5ec49a49cf18d9847908","scripts":{"lint":"eslint .","build":"tsc --noEmit","format":"prettier --write .","release":"standard-version","lint:fix":"eslint . --fix","prebuild":"rm -rf dist","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","yalc-push":"yalc push","vite-build":"vite build","release:dry":"standard-version --dry-run","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","changelog:custom":"tsx scripts/generate-changelog.ts"},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"_npmVersion":"11.12.1","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"prepublishOnly":["npm run build"],"devDependencies":{"tsx":"^4.21.0","vue":"^3.5.23","yup":"^1.7.1","uuid":"^11.1.0","vite":"^7.2.1","axios":"^1.13.2","dayjs":"^1.11.13","pinia":"^3.0.4","eslint":"^9.39.2","lodash":"^4.17.21","terser":"^5.44.1","globals":"^17.1.0","ts-node":"^10.9.2","loglevel":"^1.9.2","prettier":"^3.8.1","bootstrap":"^5.3.7","flatpickr":"^4.6.13","@eslint/js":"^9.39.2","mime-types":"^3.0.1","typescript":"^5.9.3","vue-router":"^4.6.3","@types/node":"^24.10.4","vee-validate":"^4.15.1","@types/lodash":"^4.17.20","@commitlint/cli":"^20.2.0","vite-plugin-dts":"^4.5.4","@types/bootstrap":"^5.2.10","standard-version":"^9.5.0","@types/mime-types":"^3.0.1","eslint-plugin-vue":"^10.7.0","typescript-eslint":"^8.53.1","@vitejs/plugin-vue":"^6.0.2","@tinymce/tinymce-vue":"^6.3.0","eslint-config-prettier":"^10.1.8","conventional-changelog-cli":"^5.0.0","pinia-plugin-persistedstate":"^4.7.1","@fortawesome/vue-fontawesome":"^3.1.2","vite-plugin-css-injected-by-js":"^3.5.2","@commitlint/config-conventional":"^20.2.0","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0"},"peerDependencies":{"vue":"^3.5.18","yup":">=1.7.1","uuid":">=11.1.0","axios":">=1.13.2","dayjs":">=1.11.13","pinia":"^3.0.4","lodash":">=4.17.21","bootstrap":"^5.3.7","flatpickr":">=4.6.13","mime-types":">=3.0.1","vee-validate":">=4.15.1","@fortawesome/vue-fontawesome":">=3.1.2","@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ch3chi-commons-vue_1.19.0_1781115374659_0.6007373882618361","host":"s3://npm-registry-packages-npm-production"}},"1.20.0":{"name":"ch3chi-commons-vue","version":"1.20.0","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","license":"MIT","author":{"name":"Ch3Chi"},"main":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"},"./style.css":"./dist/style.css"},"scripts":{"prebuild":"rm -rf dist","build":"tsc --noEmit","vite-build":"vite build","yalc-push":"yalc push","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","changelog:all":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","changelog:custom":"tsx scripts/generate-changelog.ts","release":"standard-version","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","release:dry":"standard-version --dry-run","lint":"eslint .","lint:fix":"eslint . --fix","format":"prettier --write ."},"peerDependencies":{"@fortawesome/fontawesome-svg-core":">=7.1.0","@fortawesome/free-solid-svg-icons":">=7.1.0","@fortawesome/vue-fontawesome":">=3.1.2","axios":">=1.13.2","bootstrap":"^5.3.7","dayjs":">=1.11.13","flatpickr":">=4.6.13","lodash":">=4.17.21","mime-types":">=3.0.1","pinia":"^3.0.4","uuid":">=11.1.0","vee-validate":">=4.15.1","vue":"^3.5.18","yup":">=1.7.1"},"devDependencies":{"@commitlint/cli":"^20.2.0","@commitlint/config-conventional":"^20.2.0","@eslint/js":"^9.39.2","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0","@fortawesome/vue-fontawesome":"^3.1.2","@tinymce/tinymce-vue":"^6.3.0","@types/bootstrap":"^5.2.10","@types/lodash":"^4.17.20","@types/mime-types":"^3.0.1","@types/node":"^24.10.4","@vitejs/plugin-vue":"^6.0.2","axios":"^1.13.2","bootstrap":"^5.3.7","conventional-changelog-cli":"^5.0.0","dayjs":"^1.11.13","eslint":"^9.39.2","eslint-config-prettier":"^10.1.8","eslint-plugin-vue":"^10.7.0","flatpickr":"^4.6.13","globals":"^17.1.0","lodash":"^4.17.21","loglevel":"^1.9.2","mime-types":"^3.0.1","pinia":"^3.0.4","pinia-plugin-persistedstate":"^4.7.1","prettier":"^3.8.1","standard-version":"^9.5.0","terser":"^5.44.1","ts-node":"^10.9.2","tsx":"^4.21.0","typescript":"^5.9.3","typescript-eslint":"^8.53.1","uuid":"^11.1.0","vee-validate":"^4.15.1","vite":"^7.2.1","vite-plugin-css-injected-by-js":"^3.5.2","vite-plugin-dts":"^4.5.4","vue":"^3.5.23","vue-router":"^4.6.3","yup":"^1.7.1"},"prepublishOnly":["npm run build"],"gitHead":"6c0cf032927401605bc42113524339d8ccda8dd5","_id":"ch3chi-commons-vue@1.20.0","_nodeVersion":"22.18.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-oLZ7Zd2CSt28vff+4+FWRHqj2RCdS0bjwwfNYuLh6dw6cJZkYF8HnCVIZOW2N5SJS/TGbDUE6/bYYP9k9cxS0w==","shasum":"4e998934a827072c983c664e817e1a8f773e4c4a","tarball":"https://registry.npmjs.org/ch3chi-commons-vue/-/ch3chi-commons-vue-1.20.0.tgz","fileCount":62,"unpackedSize":1718652,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCVz3tc7N78Ih/c6BvmG13X5doubrTjzPrEqoxn2fIJKAIgPdajLRXkAH+lqSQ+Zh0FoLwlwiGhglL+iacDKtx4F1o="}]},"_npmUser":{"name":"chi-912","email":"zhuang912@gmail.com"},"directories":{},"maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ch3chi-commons-vue_1.20.0_1786605310386_0.13946257957094077"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-06T06:19:10.874Z","modified":"2026-08-13T07:15:10.849Z","0.1.0":"2025-11-06T06:19:11.113Z","0.1.1":"2025-11-06T06:54:36.126Z","0.1.2":"2025-11-06T06:58:47.155Z","0.1.3":"2025-11-06T07:00:30.601Z","0.1.4":"2025-11-06T07:13:11.654Z","0.1.5":"2025-11-06T07:18:53.412Z","0.1.7":"2025-11-06T07:30:07.710Z","0.1.10":"2025-11-17T07:07:23.082Z","0.1.11":"2025-11-18T01:19:23.657Z","0.1.12":"2025-11-18T02:03:09.235Z","0.1.13":"2025-11-18T02:09:12.707Z","0.1.14":"2025-11-18T03:00:40.220Z","1.2.0":"2025-12-19T06:10:21.520Z","1.8.0":"2025-12-28T09:48:13.924Z","1.8.1":"2025-12-28T09:56:03.217Z","1.8.2":"2025-12-28T10:05:00.340Z","1.8.5":"2025-12-31T08:19:28.011Z","1.9.0":"2026-01-02T02:03:23.333Z","1.9.2":"2026-01-07T09:38:10.020Z","1.10.0":"2026-01-16T03:28:45.385Z","1.10.5":"2026-01-30T14:09:15.587Z","1.10.7":"2026-02-02T14:42:07.162Z","1.10.8":"2026-02-04T03:52:10.509Z","1.10.9":"2026-02-04T05:34:08.962Z","1.10.10":"2026-02-04T08:56:32.428Z","1.11.0":"2026-05-12T23:07:03.639Z","1.12.0":"2026-05-17T01:43:11.466Z","1.12.1":"2026-05-17T02:35:08.386Z","1.13.0":"2026-05-19T08:36:23.002Z","1.16.0":"2026-05-20T15:00:30.342Z","1.16.1":"2026-05-21T02:46:14.133Z","1.17.0":"2026-06-08T14:42:56.096Z","1.17.1":"2026-06-08T14:50:01.330Z","1.17.2":"2026-06-08T14:52:36.319Z","1.18.0":"2026-06-10T00:07:26.880Z","1.18.1":"2026-06-10T01:30:15.457Z","1.18.2":"2026-06-10T02:45:24.925Z","1.19.0":"2026-06-10T18:16:14.843Z","1.20.0":"2026-08-13T07:15:10.539Z"},"author":{"name":"Ch3Chi"},"license":"MIT","description":"這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。","maintainers":[{"name":"chi-912","email":"zhuang912@gmail.com"}],"readme":"# Commons Vue Library\n\n這是一個 Vue 3 公用元件／函式庫，提供常用的 UI 元件、API 服務、權限管理、表單模型與工具函式，基於 TypeScript 與 Bootstrap 5。\n\n## 目錄\n\n1. [功能概述](#功能概述)\n2. [安裝與相依套件](#安裝與相依套件)\n3. [快速開始：應用初始化](#快速開始應用初始化)\n4. [API 與授權](#api-與授權)\n   - [ApiService](#apiservice)\n   - [AuthorizationService](#authorizationservice)\n   - [PermissionDescriptor / PermissionAction](#permissiondescriptor--permissionaction)\n5. [Model 與工具](#model-與工具)\n   - [BaseFormDataModel](#baseformdatamodel)\n   - [BaseListViewModel](#baselistviewmodel)\n   - [QueryParameter / QueryPage](#queryparameter--querypage)\n   - [BSFieldStyleConfig](#bsfieldstyleconfig)\n   - [CFileDataModel / FileUploadProgress](#cfiledatamodel--fileuploadprogress)\n   - [CBSModalViewModel](#cbsmodalviewmodel)\n   - [SessionUser / TokenUser / AccessToken](#sessionuser--tokenuser--accesstoken)\n   - [LoginDataModel / PasswordDataModel / EmailReceiverDataModel](#logindatamodel--passworddatamodel--emailreceiverdatamodel)\n   - [BaseDictionary](#basedictionary)\n   - [ShowMessageDataModel](#showmessagedatamodel)\n   - [FormOptions（COptionItem 與通用選項）](#formoptionscoptionitem-與通用選項)\n   - [CToolUtils 工具函式](#ctoolutils-工具函式)\n6. [Store（Pinia）](#storepinia)\n   - [useViewStore](#useviewstore)\n   - [useUserSessionStore](#useusersessionstore)\n   - [Dictionary Store](#dictionary-store)\n   - [useQueryFormDataStore / backupFormDataStore](#usequeryformdatastore--backupformdatastore)\n   - [VueSessionStoreInstaller](#vuesessionstoreinstaller)\n7. [Vue 指令](#vue-指令)\n8. [UI 元件](#ui-元件)\n   - [CAlert](#calert)\n   - [CBSToast](#cbstoast)\n   - [CGlobalSpinner](#cglobalspinner)\n   - [CImage](#cimage)\n   - [HasPermission](#haspermission)\n9. [表格元件 CTable](#表格元件-ctable)\n10. [Form 欄位元件](#form-欄位元件)\n11. [進階文件索引](#進階文件索引)\n12. [開發與建置](#開發與建置)\n13. [授權](#授權)\n\n---\n\n## 功能概述\n\n- **API 服務**：封裝 Axios，提供統一的 API 呼叫介面，支援 Bearer Token 自動刷新、上下載進度、檔案下載等。\n- **權限管理**：角色權限映射、選單權限過濾、`v-permission` 指令與 `<HasPermission>` 元件。\n- **UI 元件**：表格、表單欄位、Modal Alert、Toast、全域 Spinner、圖片等 Vue 3 元件。\n- **指令**：權限控制、日期格式化、Bootstrap Tooltip／Dropdown／Modal、Cloudflare Turnstile、表單錯誤樣式等。\n- **模型與工具**：表單資料模型（含 vee-validate + yup 整合）、查詢參數模型、字典模型、工具函式。\n\n## 安裝與相依套件\n\n```bash\nnpm install ch3chi-commons-vue\n```\n\n此函式庫採用 peerDependency 設計，請於 host 專案安裝以下套件：\n\n- `vue` ^3.5\n- `pinia` ^3.0.4（自 1.15.0 起改為 peerDependency，host 需自行 install 並 `app.use(pinia)`）\n- `bootstrap` ^5.3\n- `axios` >= 1.13\n- `vee-validate` >= 4.15\n- `yup` >= 1.7\n- `dayjs` >= 1.11\n- `lodash` >= 4.17\n- `uuid` >= 11.1\n- `mime-types` >= 3.0\n- `flatpickr` >= 4.6（若使用 `CDateFormField` / `CDateRangeFormField`）\n- `@fortawesome/fontawesome-svg-core`、`@fortawesome/free-solid-svg-icons`、`@fortawesome/vue-fontawesome`（Font Awesome icons）\n\n其他選用：\n\n- `pinia-plugin-persistedstate`：當啟用 SessionStore / Dictionary Store 的 `persist` 設定時使用。\n- 額外見 `package.json` 的 `peerDependencies`。\n\n樣式檔需另外載入：\n\n```ts\nimport 'ch3chi-commons-vue/style.css';\n```\n\n## 快速開始：應用初始化\n\n下面是建議的應用初始化順序，將 commons-vue 提供的能力一次接齊：\n\n```ts\n// main.ts\nimport { createApp } from 'vue';\nimport { createPinia } from 'pinia';\nimport App from './App.vue';\nimport router from './router';\n\nimport {\n  ApiService,\n  AuthorizationService,\n  BSFieldStyleConfig,\n  CFormFieldErrorOnYupDirective,\n  CFormFieldErrorStyleDirective,\n  CTableConfig,\n  PermissionDirective,\n  QueryParameter,\n  VueSessionStoreInstaller,\n  useUserSessionStore,\n  vdCBSDropdown,\n  vdCBSModal,\n  vdDateFormatter,\n  vdTooltip,\n} from 'ch3chi-commons-vue';\nimport 'ch3chi-commons-vue/style.css';\n\nconst app = createApp(App);\nconst pinia = createPinia();\napp.use(pinia);\napp.use(router);\n\n// 1) ApiService：註冊 baseUrl、context path、端點以及顯示載入動畫的勾子\nApiService.configure({\n  baseUrl: import.meta.env.VITE_API_BASE_URL,\n  contextPath: '/api',\n  createEndpointOptions: {\n    isAuthenticated: true,\n    security: ['bearerAuth'],\n  },\n  endpoints: {\n    me: { path: '/me', method: 'GET' },\n    'Resources-Create': { path: '/resources', method: 'POST' },\n    'Resources-Delete': { path: '/resources/{uid}', method: 'DELETE' },\n  },\n  refreshTokenFunc: async () => useUserSessionStore().currentToken!, // 視專案實際刷新邏輯而定\n});\n\n// 2) AuthorizationService：定義角色 ↔ 權限 ↔ 選單\nAuthorizationService.configure({\n  rolePermissionMap: {\n    admin: ['user:READ', 'user:UPDATE'],\n  },\n  menuDefineMap: {\n    default: [{ id: 'm1', name: '使用者管理', path: '/users', permission: 'user:READ' }],\n  },\n});\n\n// 3) UserSessionStore + 全域權限元件／指令\nconst sessionStore = useUserSessionStore();\napp.use(VueSessionStoreInstaller, { sessionStore });\n\n// 4) 註冊全域指令\napp.directive('tooltip', vdTooltip);\napp.directive('cbs-dropdown', vdCBSDropdown);\napp.directive('cbs-modal', vdCBSModal);\napp.directive('date-formatter', vdDateFormatter);\napp.directive('form-invalid', CFormFieldErrorStyleDirective);\napp.directive('form-invalid-yup', CFormFieldErrorOnYupDirective);\napp.directive('permission', PermissionDirective);\n\n// 5) 全域樣式預設值（可選）\nBSFieldStyleConfig.merge({\n  requiredLabelText: '*',\n  errorClass: 'invalid-feedback d-block mt-1',\n});\nCTableConfig.setPaginationStyle({ activeBackgroundColor: '#E4B445' });\n\n// 6) 全域 toQueryStringParam 版本切換（若後端仍使用 limit/offset）\n// QueryParameter.queryStringVersion = 'v1';\n\napp.mount('#app');\n```\n\n> ⚠️ Pinia 必須由 host 端 install 並 `app.use(pinia)`，commons-vue 內部 store（`useViewStore`、`useUserSessionStore`、`useQueryFormDataStore`、`backupFormDataStore`）會自動跟 host 共用同一份 pinia。\n\n`App.vue` 中再掛載全域 Modal / Toast / Spinner（與 `useViewStore` 串接）：\n\n```vue\n<template>\n  <CAlert ref=\"mainBSModal\" />\n  <CBSToast ref=\"toastView\" :delay=\"5000\" />\n  <CGlobalSpinner ref=\"globalSpinner\" />\n  <RouterView />\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue';\nimport { CAlert, CBSToast, CGlobalSpinner, useViewStore } from 'ch3chi-commons-vue';\n\nconst mainBSModal = ref();\nconst toastView = ref();\nconst globalSpinner = ref();\nconst viewStore = useViewStore();\n\nonMounted(() => {\n  viewStore.mainBSModal = mainBSModal.value;\n  viewStore.toastView = toastView.value;\n  viewStore.globalSpinner = globalSpinner.value;\n});\n</script>\n```\n\n之後就能在任何地方使用 `viewStore.showModalConfirm({...})` 或 `viewStore.addToast({...})`。\n\n---\n\n## API 與授權\n\n### ApiService\n\n`ApiService` 是封裝後的 Axios 入口，支援端點註冊、Bearer Token 自動刷新、檔案下載、上下載進度回呼。\n\n主要 API：\n\n| 方法 | 說明 |\n| --- | --- |\n| `ApiService.configure(config)` | 初始化 base URL、攔截器、預設端點、token 刷新與認證失敗回呼。 |\n| `ApiService.addEndpoints(key, endpoint)` | 動態新增單一端點（已存在則略過）。 |\n| `ApiService.call(request)` | 呼叫 API，回傳 `Promise<ApiResponse>`。 |\n| `ApiService.download(request)` | 以瀏覽器原生方式下載檔案。 |\n| `ApiService.addHeader(key, value)` / `removeHeader(key)` | 操作全域標頭。 |\n| `ApiService.customHeaderProvider(provider)` | 為每次呼叫動態組標頭（例如語系、device id）。 |\n| `ApiService.accessToken` / `accessTokenProvider` | 設定靜態 token 或非同步取得方式。 |\n| `ApiService.refreshToken()` | 手動觸發 token 刷新。 |\n\n`ApiRequest` 重要欄位：\n\n| 欄位 | 型別 | 說明 |\n| --- | --- | --- |\n| `endpointKey` | `string` | 端點識別字（`configure({ endpoints })` 內定義）。 |\n| `pathParam` | `Record<string, any>` | 用來替換 path 上的 `{xxx}` placeholder。 |\n| `queryParam` | `Record<string, any>` | query string 參數。 |\n| `postBody` | `Record<string, any> \\| FormData` | request body；`Date` 會自動序列化成 ISO 字串。 |\n| `headers` | `Record<string, string>` | 額外標頭（不影響全域）。 |\n| `isDownloadMode` / `downloadFileName` | `boolean` / `string` | 觸發下載；檔名可從 `Content-Disposition` 取得。 |\n| `onUploadProgress` | `(e: AxiosProgressEvent) => void` | 上傳進度（FormData / 大檔上傳常用）。 |\n| `onDownloadProgress` | `(e: AxiosProgressEvent) => void` | 下載進度（自 1.15.0 起支援）。 |\n| `axiosConfig` | `AxiosRequestConfig` | 額外覆寫 Axios 設定。 |\n| `noSpinner` | `boolean` | 不顯示全域載入動畫。 |\n\n`ApiResponse` 提供 `isOk()`、`httpStatus`、`data`、`paging`、`blobData`、`headers`、`nativeError` 等欄位。錯誤時可以包成 `ApiRejectError` 並 `.notFound()` 標記類型。\n\n範例：\n\n```ts\nimport { ApiService, ApiRequest } from 'ch3chi-commons-vue';\n\nconst req = new ApiRequest({\n  endpointKey: 'getUser',\n  pathParam: { id: 123 },\n});\nconst resp = await ApiService.call(req);\nif (resp.isOk()) {\n  console.log('使用者：', resp.data);\n}\n\n// 帶下載進度的下載\nawait ApiService.download(\n  new ApiRequest({\n    endpointKey: 'exportUser',\n    queryParam: { id: 123 },\n    downloadFileName: 'user_123.xlsx',\n    onDownloadProgress: (e) => {\n      if (e.total) console.log(`已下載 ${Math.round((e.loaded / e.total) * 100)}%`);\n    },\n  }),\n);\n```\n\n### AuthorizationService\n\n集中管理「角色 → 權限」與「角色 → 選單結構」。\n\n```ts\nimport { AuthorizationService } from 'ch3chi-commons-vue';\n\nAuthorizationService.configure({\n  rolePermissionMap: {\n    admin: ['user:READ', 'user:UPDATE', 'menu:READ'],\n    user: ['user:READ', 'menu:READ'],\n  },\n  menuDefineMap: {\n    default: [\n      { id: 'm1', name: '使用者管理', path: '/users', permission: 'user:READ' },\n      {\n        id: 'm2',\n        name: '系統設定',\n        path: '/settings',\n        permission: ['settings:READ', 'settings:UPDATE'],\n        children: [{ id: 'm2-1', name: '基本參數', path: '/settings/base', permission: 'settings:READ' }],\n      },\n    ],\n  },\n});\n\nconst menu = AuthorizationService.provideMenuByPermission({\n  roleCode: 'user',\n  permissions: ['user:READ', 'menu:READ'],\n});\nconst hasWrite = AuthorizationService.hasPermissionByRole(['user'], 'user:UPDATE');\n```\n\n回傳的 `CMenuItem` 已具備 `hasChildren()`、`checkCurrentPath()`、`useCollapseAttribute()`、`useClassNameForNavLink()` 等可直接在 sidebar 模板使用的輔助方法。\n\n### PermissionDescriptor / PermissionAction\n\n權限字串使用 `module:ACTION` 格式（例如 `user:READ`），由 `PermissionDescriptor` 解析並提供「跨 action 的繼承關係」（例如有 `CREATE`、`UPDATE` 自動視同擁有 `READ`）：\n\n```ts\nimport { PermissionAction, PermissionDescriptor } from 'ch3chi-commons-vue';\n\nconst d = new PermissionDescriptor('user:CREATE');\nd.module;           // 'user'\nd.action;           // PermissionAction.CREATE\nd.supportedActions; // [CREATE, READ]\nd.checkPermission(['user:CREATE']); // true\nd.checkModule(['user:READ']);       // true\n```\n\n`PermissionAction` 提供常用列舉值：`SIGN_IN`、`SIGN_OUT`、`FORGOT_PASSWORD`、`RESET_PASSWORD`、`CHANGE_PASSWORD`、`CREATE`、`SEARCH`、`READ`、`UPDATE`、`DELETE`、`EXPORT`。\n\n---\n\n## Model 與工具\n\n### BaseFormDataModel\n\n繼承後即整合 [vee-validate](https://vee-validate.logaretm.com/) + [yup](https://github.com/jquense/yup)，提供：\n\n- 由 yup schema 自動產生 `formFieldMap`，欄位元件透過 `inject('c-formViewModel', model)` 取得。\n- 自動偵測必填、`maxLength`、巢狀欄位（`address.city`）等屬性。\n- 雙向同步：表單欄位值改變會 mirror 回模型屬性。\n\n最常用的方法：\n\n```ts\nclass UserForm extends BaseFormDataModel {\n  account: string = '';\n  password: string = '';\n\n  dataFieldNameList() {\n    return ['account', 'password'];\n  }\n  initFormSchema() {\n    return yup.object({\n      account: yup.string().required('帳號為必填'),\n      password: yup.string().min(8).required('密碼為必填'),\n    });\n  }\n}\n\nconst model = new UserForm();\nmodel.initForm();                    // 建立 formContext / formFieldMap\nmodel.loadFormData({ account: 'a' }); // 載入既有資料\nconst { valid, errors } = await model.validateForm();\nconst payload = model.toPayload();   // 給 API 用\nmodel.fieldIsRequired('password');   // true\nmodel.fieldMaxLength('account');     // null / number\nmodel.setFieldValue('account', 'x');\n```\n\n`CheckableDataModel` 在 `BaseFormDataModel` 之上加了 `checked: boolean` 與 `toggleChecked()`，搭配 CTable 的 Checkbox 欄位很方便。\n\n`FormDataModelMapper` 可把外部 plain object 自動 wrap 成具備表單能力的 model 實例並雙向同步，特別適合「動態欄位 array」的場景。\n\n### BaseListViewModel\n\n抽象列表頁 view model，整合：\n\n- 查詢參數（`QueryParameter` 系列）\n- 排序、分頁事件\n- 自動呼叫 `ApiService` 取資料、塞 `dataList`\n- 自動計算 `__rowNumber`（行號）與 `__isLastAndLastPage`（刪掉最後一筆時自動往前翻頁）\n- 透過 `useQueryFormDataStore` 把查詢條件存進 Pinia / localStorage\n\n```ts\nclass UserListVM extends BaseListViewModel<QueryParameter, UserModel> {\n  saveOnQueryFormDataStore = true;\n\n  useTableColumnArray() {\n    return [\n      new CTableColumn({ type: CTableColumnType.RowNumber, text: '#', width: '60px' }),\n      new CTableColumn({ type: CTableColumnType.Text, dataName: 'account', text: '帳號',\n        sortConfig: { sortable: true, key: 'account' } }),\n      new CTableColumn({\n        type: CTableColumnType.Action, text: '操作', dataAlign: 'right',\n        actionList: [{ actionType: CTableColumnActionType.Edit }],\n      }),\n    ];\n  }\n  queryListApiEndpointMeta() {\n    return {\n      key: 'getUsers',\n      dataParser: (raw) => new UserModel().load(raw),\n    };\n  }\n  toCreateUrl() { return '/users/new'; }\n  toEditUrl(row: UserModel) { return `/users/${row.uid}`; }\n}\n```\n\n提供的常用方法：`callOnMounted()`、`doSearch()`、`doClear()`、`onSortChange()`、`onPageChange(page)`、`onColumnActionEdit(rowMeta)`、`storeQueryDefaultValues(values)`、`resetToDefaultValues()`、`showConfirm(...)`。\n\n`CheckableListViewModel` 額外提供 `findCheckedData()`、`resetCheckedData()`。\n\n### QueryParameter / QueryPage\n\n`QueryParameter` 封裝清單頁的關鍵字、排序、分頁，並提供轉換為 API payload／query string 的工具。\n\n```ts\nimport { QueryParameter, QueryPage, QueryParamTool } from 'ch3chi-commons-vue';\n\nconst queryParam = new QueryParameter({\n  keyword: 'apple',\n  page: new QueryPage({ pageIndex: 0, pageSize: 20 }),\n  sort: [QueryParamTool.defSort('createdAt', 'DESC')],\n});\n\nqueryParam.toQueryStringParam(); // 預設 v2：{ size: 20, page: 0 }\nqueryParam.toPayload();          // 排除 page / sort 後的 payload\n```\n\n`QueryPage` 提供完整分頁狀態：`pageIndex`、`pageSize`、`totalCount`（自動算 `totalPage`、`offset`）、`hasPreviousPage()`、`hasNextPage()`、`previous()`、`next()`、`pageRange()`（產生 CTable 用的頁碼陣列）。\n\n`DateRangeParam` 是 `QueryParameter` 的子類，多了 `startsAt`、`endsAt` 欄位（`clear()` 會一併清空）。\n\n#### 分頁參數版本（v1 / v2）\n\n`toQueryStringParam()` 支援兩種輸出格式，透過全域靜態屬性 `QueryParameter.queryStringVersion` 切換：\n\n| 版本 | 輸出格式 | 適用情境 |\n| --- | --- | --- |\n| `'v2'`（預設） | `{ size, page }` | 新版 page-based 分頁 API，page index 從 0 開始 |\n| `'v1'` | `{ limit, offset }` | 舊版 offset-based 分頁 API |\n\n```ts\nQueryParameter.queryStringVersion = 'v1';\n```\n\n### BSFieldStyleConfig\n\n集中管理 Form 欄位的 Bootstrap class 名稱與 helper icon 等。所有 form 欄位元件都可透過 `styleConfig` prop 蓋掉預設值。\n\n優先順序：`prop styleConfig` > 全域 `BSFieldStyleConfig.instance` > 元件預設值。\n\n```ts\nimport { BSFieldStyleConfig } from 'ch3chi-commons-vue';\n\nBSFieldStyleConfig.merge({\n  containerClass: 'form-group mb-3',\n  requiredLabelText: ' (必填) ',\n  errorClass: 'text-danger small mt-1',\n  selectPlaceholder: '— 請選擇 —',\n});\n```\n\n可調整的 key 涵蓋：`containerClass`、`labelClass`、`inputClass`、`wrapperClass`、`errorClass`、`requiredLabelClass`、`requiredLabelText`、`plainTextClass`、`selectClass`、`textareaClass`、`textareaRows`、`checkboxClass`、`radioClass`、`fileClass`、`calendarIconClass`、`calendarClearIconClass`、`changePasswordButtonClass`、`changePasswordButtonIcon` 等。完整清單見 `IBSFieldStyleConfig`。\n\n### CFileDataModel / FileUploadProgress\n\n`CFileDataModel` 描述已上傳檔案，並在 `init()` 中根據副檔名自動套用 icon / badge 樣式（圖片、PDF、Word、Excel、影片各自有對應 Font Awesome icon）。\n\n`CPhotoDataModel` 是 `CFileDataModel` 的子類，多了 `width`、`height`、`loaded`。\n\n`FileUploadProgress` 管理上傳狀態：`status: 'ready' | 'uploading' | 'completed' | 'failed'`、`progress: 0~100`。常用方法：`start()`、`complete()`、`fail(message)`、`readyToUpload()`、`isShowProgress()`、`isDone()`。\n\n`CFilePickerFormField` 內部已整合此模型。\n\n### CBSModalViewModel\n\n封裝 Bootstrap 5 Modal 的 view-model，搭配 `v-cbs-modal` 指令。\n\n```ts\nimport { CBSModalViewModel, ICBSModalViewType } from 'ch3chi-commons-vue';\n\nconst modal = new CBSModalViewModel({\n  type: ICBSModalViewType.Form,\n  title: '編輯資料',\n  onOpen: () => console.log('opened'),\n  onClose: () => model.resetFormData(),\n  config: { backdrop: 'static', keyboard: false },\n});\n\nmodal.show();\nmodal.hide();\n```\n\n```vue\n<div class=\"modal fade\" v-cbs-modal=\"modal\" :id=\"modal.modalId\" :aria-labelledby=\"modal.labelId\">\n  ...\n</div>\n```\n\n支援的 `type`：`Info`、`Form`、`Table`（會給定不同預設標題）。\n\n### SessionUser / TokenUser / AccessToken\n\n- `SessionUser`：基本使用者欄位（`userUid`、`account`、`name`、`email`、`roleCode`、`permissions` 等）+ `load()` / `merge()` / `toJSON()` / `loadJSON()`。\n- `TokenUser` extends `SessionUser`，包含 `tokens: AccessToken` 與 `profile`。\n- `AccessToken`：`tokenType`、`accessToken`、`accessTokenExpiresAt`、`refreshToken`、`refreshTokenExpiresAt`、`sessionUid`；提供 `isExpired()`、`isRefreshTokenExpired()` 與 `get bearerToken()`（產生 `\"Bearer xxx\"` 字串）。\n\n### LoginDataModel / PasswordDataModel / EmailReceiverDataModel\n\n開箱即用的 `BaseFormDataModel` 子類：\n\n- `LoginDataModel`：`account`、`password`、`turnstileToken`、`enableCFTurnstile`（搭配 `v-cf-turnstile` 指令）。\n- `PasswordDataModel`：`oldPassword`、`newPassword`、`confirmNewPassword`，內建長度 ≥12、必須含英數加符號等規則。`requiredOldPassword` 控制是否需要舊密碼欄位。\n- `EmailReceiverDataModel`：管理收件人陣列（`receiver` / `cc` / `bcc`），提供 `add()`、`remove(index)`、`clean()`、`dataList()`。\n\n### BaseDictionary\n\n集中管理「下拉選項／代碼表」這類字典資料：\n\n```ts\nclass AppDictionary extends BaseDictionary {\n  init() {\n    this.data = { roleOptions: [], statusOptions: [] };\n    this.dataProvider = async (key) => {\n      const resp = await ApiService.call({ endpointKey: `dict-${key}` });\n      return resp.data;\n    };\n  }\n}\n\nconst dict = new AppDictionary();\nawait dict.loadAll();          // 透過 dataProvider 載入所有 key\nawait dict.loadDictionary('roleOptions');\ndict.val('roleOptions');\n```\n\n可搭配 `createDictionaryStoreOptions` 寫入 Pinia store 並啟用 `persist` 持久化（見 Store 章節）。\n\n### ShowMessageDataModel\n\n集中管理「顯示訊息頁」對應的訊息表（忘記密碼信件送出、認證過期等）。\n\n```ts\nimport { ShowMessageDataModel, ShowMessageType } from 'ch3chi-commons-vue';\n\nShowMessageDataModel.messageMap = {\n  [ShowMessageType.FORGOT_PASSWORD_SENT]: { title: '已寄出', message: '請至信箱收信', showHomeButton: true },\n  [ShowMessageType.RESET_PASSWORD_SUCCESS]: { title: '已重置', message: '請重新登入', showLoginButton: true },\n  [ShowMessageType.AUTH_EXPIRED]: { title: '認證過期', message: '請重新登入', showLoginButton: true },\n};\n\nconst data = ShowMessageDataModel.getMessageData(ShowMessageType.AUTH_EXPIRED);\nconst routeParams = ShowMessageDataModel.toRouteParams(ShowMessageType.AUTH_EXPIRED);\n```\n\n### FormOptions（COptionItem 與通用選項）\n\n```ts\nimport {\n  CCOptionItem,\n  CommonStatusOptions,    // 啟用 / 停用\n  CommonStatusStrOptions, // ENABLED / DISABLED\n  OptionUtils,\n  ToggleStatusOptions,    // 開放 / 關閉\n  YesNoStatusOptions,     // 是 / 否\n} from 'ch3chi-commons-vue';\n\nconst yesNo: CCOptionItem[] = YesNoStatusOptions.map((o) => new CCOptionItem(o));\n\n// 產生狀態徽章 HTML\nconst html = OptionUtils.makeCommonStatusLabelText(true); // 啟用：bg-success\n```\n\n`COptionItem` 欄位：`id`、`text`、`value`、`disabled?`、`selected?`、`children?`、`meta?`。\n\n### CToolUtils 工具函式\n\n| Function | 說明 |\n| --- | --- |\n| `voidFunction` | 空函式，常作為 callback 預設值。 |\n| `delay(ms)` | `await delay(300)`，包裝 `setTimeout` 的 Promise。 |\n| `pickAndAssign(payload, params)` | 把 `params` 中有值的屬性 assign 到 `payload`（忽略 `null`/`undefined`）。 |\n| `writeVueRefValue(ref, value)` | 安全寫入 `Ref` 的 `value`（若不是 ref 則無動作）。 |\n| `lodashExTools.getVal(obj, path, default)` | 包裝 `_.get`，path 為空時直接回 default。 |\n| `checkHasSameFile(list, file)` | 比對檔名／大小／type／lastModified 判斷重複檔案。 |\n| `formatDatesInObject(obj)` | 把物件樹中的 Date／dayjs 全部轉成 `YYYY-MM-DDTHH:mm:ss` 字串（ApiService 已自動使用）。 |\n| `makeDateRangeValidator({ startDateKey, endDateKey, ... })` | 產生 yup `.test()` 用的日期區間檢查器（起 ≤ 迄）。 |\n\n---\n\n## Store（Pinia）\n\n> 自 1.15.0 起，`pinia` 為 peerDependency：host 專案需自行 install 並 `app.use(pinia)`。commons-vue 內部所有 store 都會跟 host 共用同一份 pinia。\n\n### useViewStore\n\n維護全域 UI 狀態，並把 `<CAlert>`、`<CBSToast>`、`<CGlobalSpinner>` 三個元件以 ref 形式注入 store，之後就能從任何地方呼叫：\n\n```ts\nconst viewStore = useViewStore();\n\nviewStore.showModalConfirm({\n  title: '確認刪除',\n  content: '確定要刪除這筆資料嗎？',\n  onOk: async () => { /* ... */ },\n});\nviewStore.addToast({ title: '已儲存', content: '資料更新成功', type: 'success', delay: 3000 });\nviewStore.showSpinner();\nviewStore.hideSpinner();\nviewStore.toggleSidebar();\nviewStore.setVersion('1.15.0');\n```\n\n提供的 actions：`routerNavigationType()`、`toggleSidebar()`、`showModal()`、`showModalError()`、`showModelAlert()`、`showModalConfirm()`、`hideModal()`、`addToast()`、`showSpinner()`、`hideSpinner()`、`setVersion()`。\n\n### useUserSessionStore\n\n預設提供 `SessionUser` 型別的會話 store。需要自訂使用者類別或啟用持久化時，請用工廠：\n\n```ts\nimport { AccessToken, createUserSessionStore, SessionUser } from 'ch3chi-commons-vue';\n\nclass AppUser extends SessionUser {\n  // 自訂屬性\n}\n\nexport const useAppSessionStore = createUserSessionStore<AppUser>('appSession', {\n  enabled: true,\n  key: 'app-session',\n  userConstructor: AppUser,\n  onLogin: (user) => console.log('logged in:', user),\n  onLogout: (user, token) => console.log('logged out:', user, token),\n});\n```\n\nStore 主要動作：\n\n| Action | 說明 |\n| --- | --- |\n| `saveUser(user)` / `saveToken(token)` | 寫入使用者／token。 |\n| `setAuthenticated(true)` | 設定登入狀態。 |\n| `checkSessionIsValid()` | 呼叫 `me` 端點驗證 session（會自動 sync user）。 |\n| `validateSession(helper)` | 委派 helper 取得使用者並更新狀態。 |\n| `refreshToken(helper)` | 委派 helper 刷新 token。 |\n| `startSessionCheck()` / `stopSessionCheck()` | 定時檢查（預設工廠有實作；客製版本可自行覆寫）。 |\n| `hasPermission(need)` | 檢查單一或多個權限字串。 |\n| `logout()` | 清空狀態並派發 `user:before-logout` / `user:after-logout` 自訂事件。 |\n| `triggerManualLogout()` / `triggerAuthFailedRedirect()` | 區分使用者主動登出 vs token 失效；分別把 `shouldRedirectToLogin` / `shouldRedirectToMessage` 設為 true。 |\n\nGetters：`currentUser`、`currentToken`、`isAuthenticated`、`userUid`、`account`、`userName`、`email`、`roleCode`、`permissions`、`menuItems`（自動依權限產生 `CMenuItem[]`）。\n\n### Dictionary Store\n\n`createDictionaryStoreOptions({ dictionary, persistOptions })` 把 `BaseDictionary` 子類包裝成 Pinia store。\n\n```ts\nimport { CBaseDictionary, createDictionaryStoreOptions } from 'ch3chi-commons-vue';\nimport { defineStore } from 'pinia';\n\nconst useDictStore = defineStore(\n  'dictionary',\n  createDictionaryStoreOptions({\n    dictionary: new MyDictionary(),\n    persistOptions: { enabled: true, key: 'dict' },\n  }),\n);\n\nconst dict = useDictStore();\nawait dict.loadAll();\nawait dict.loadDictionary('roleOptions');\ndict.dict?.val('roleOptions');\n```\n\n### useQueryFormDataStore / backupFormDataStore\n\n兩個 commons-vue 自帶的 store，自 1.15.0 起也對外匯出，供 host 直接呼叫：\n\n- `useQueryFormDataStore` (`queryFormData` store id)：儲存清單頁的查詢條件，自動同步到 `localStorage`，可作為「上一次查詢條件還原」用途。`BaseListViewModel.saveQueryParamToStore()` 內部用的就是它。\n- `backupFormDataStore` (`formData` store id)：通用備份 store，提供 `backupData(name, data)` / `getBackupData(name)`。\n\n```ts\nimport { backupFormDataStore, useQueryFormDataStore } from 'ch3chi-commons-vue';\n\nuseQueryFormDataStore().save('userListQuery', { keyword: 'foo', page: { pageIndex: 0 } });\nuseQueryFormDataStore().getQueryParam('userListQuery');\nuseQueryFormDataStore().loadAllFromLocalStorage();\nuseQueryFormDataStore().clearQueryParam('userListQuery');\n\nbackupFormDataStore().backupData('draft.user', { name: 'tmp' });\nbackupFormDataStore().getBackupData('draft.user');\n```\n\n### VueSessionStoreInstaller\n\nVue 插件，把 `sessionStore` 注入 commons-vue 內部的 `SESSION_STORE_KEY`，同時：\n\n- 全域註冊 `<HasPermission>` 元件。\n- 全域註冊 `v-permission` 指令（綁定 `sessionStore.hasPermission`）。\n\n```ts\nimport { VueSessionStoreInstaller, useUserSessionStore } from 'ch3chi-commons-vue';\n\napp.use(VueSessionStoreInstaller, { sessionStore: useUserSessionStore() });\n```\n\n---\n\n## Vue 指令\n\n| 指令 | 用途 | 範例 |\n| --- | --- | --- |\n| `v-tooltip` | 初始化 Bootstrap Tooltip（讀 `title` 屬性）。 | `<button v-tooltip title=\"說明\">i</button>` |\n| `v-cbs-dropdown` | 初始化 Bootstrap Dropdown，點擊外部自動關閉。 | `<button v-cbs-dropdown>...</button>` |\n| `v-cbs-modal` | 綁定 `CBSModalViewModel`，自動處理 init/show/hide/dispose。 | `<div class=\"modal fade\" v-cbs-modal=\"modal\">` |\n| `v-date-formatter` | 把 `Ref<Date>` 或 `Date` 渲染到元素上；可透過 `data-date-format` 屬性指定格式。 | `<span v-date-formatter=\"dateRef\" data-date-format=\"YYYY/MM/DD\" />` |\n| `v-cf-turnstile` | 渲染 Cloudflare Turnstile，token 寫回 vee-validate FieldContext。需先設定 `window.__CLOUDFLARE_TURNSTILE_SITE_KEY__`。 | `<div v-cf-turnstile=\"fieldContext\" />` |\n| `v-form-invalid`（`CFormFieldErrorStyleDirective`） | 偵測 vee-validate `FieldContext.errors`，自動切換 `is-invalid` class。 | `<input v-form-invalid=\"fieldModel\" />` |\n| `v-form-invalid-yup`（`CFormFieldErrorOnYupDirective`） | 直接以 yup Schema 同步驗證 element value。 | `<input v-form-invalid-yup=\"yupSchema\" />` |\n| `v-permission`（`PermissionDirective`） | `need + granted` 模式：自行傳入授權字串陣列做比對。 | `<button v-permission=\"{ need: 'user:UPDATE', granted: perms }\">編輯</button>` |\n| `v-permission`（`createPermissionDirectives`） | 由 `VueSessionStoreInstaller` 自動註冊的版本：只傳權限字串／陣列，內部用 sessionStore 比對。 | `<button v-permission=\"'user:UPDATE'\">編輯</button>` |\n| `v-store-permission`（`StorePermissionDirective`） | 從 binding 帶入 sessionStore：`{ sessionStore, need, enableVisible }`。 | `<button v-store-permission=\"{ sessionStore, need: ['user:UPDATE'] }\">編輯</button>` |\n\n> `enableVisible: true` 會用 `d-none` 隱藏元素，`false` 直接 `el.remove()`。`createPermissionDirectives` 版本則會 replace 成 comment node。\n\n註冊指令的範例已在「快速開始」一章。\n\n---\n\n## UI 元件\n\n### CAlert\n\n全域 Bootstrap Modal 元件。透過 `defineExpose` 提供 `show(data)`、`hide()`，配合 `useViewStore` 使用最方便：\n\n```vue\n<CAlert ref=\"mainBSModal\" />\n```\n\n```ts\nviewStore.mainBSModal = mainBSModal.value;\nviewStore.showModal({ title: '提示', content: '完成', onOk: () => {} });\nviewStore.showModalConfirm({ content: '確認刪除？', onOk: doDelete, onCancel: doCancel });\nviewStore.showModalError({ content: 'API 錯誤' });\nviewStore.showModelAlert({ content: '警告' });\n```\n\n`CAlertModalData` 欄位：\n\n| 欄位 | 說明 |\n| --- | --- |\n| `type` | `CAlertModalType.Info / Error / Alert / Confirm / Success` 控制 header 樣式。 |\n| `title` | 自訂標題；未設定時依 type 取預設（資訊／錯誤／警告／確認）。 |\n| `content` | 內文。 |\n| `onOk` / `onCancel` | 按鈕 callback。`Confirm` 一律顯示取消按鈕；其他 type 則有 `onCancel` 才顯示。 |\n| `nextStep` | （Toast 用）後續動作描述。 |\n| `delay` | （Toast 用）覆寫單筆 toast 的 autohide 毫秒數。 |\n\n| Prop | 預設 | 說明 |\n| --- | --- | --- |\n| `id` | 自動 uuid | Modal element id，需要外部控制時可指定。 |\n\n### CBSToast\n\n右上角訊息推播。`addToast(data)` 透過 ref 呼叫；`useViewStore().addToast(...)` 是同樣的路徑。\n\n```vue\n<CBSToast ref=\"toastView\" :delay=\"5000\" />\n```\n\n```ts\nviewStore.toastView = toastView.value;\nviewStore.addToast({ title: '已儲存', content: '使用者已建立', type: 'success' });\nviewStore.addToast({ title: '錯誤', content: '上傳失敗', type: 'error', delay: 8000 });\n```\n\n| Prop | 預設 | 說明 |\n| --- | --- | --- |\n| `delay` | `5000` | 全域 autohide 毫秒；可被單筆 toast 的 `data.delay` 覆寫（`delay: 0` 也合法）。 |\n\n樣式類別 `.c-toast-success` / `.c-toast-error` / `.c-toast-alert` / `.c-toast-info` 已內建（Bootstrap 5 顏色）。\n\n### CGlobalSpinner\n\n全頁載入動畫，可由 `useViewStore` 或自行 ref 呼叫 `show()` / `hide()`。\n\n| Prop | 預設 | 說明 |\n| --- | --- | --- |\n| `show` | `false` | 初始是否顯示。 |\n| `color` | `#e4b445` | spinner 顏色，會綁定到 `--spinner-color` CSS 變數。 |\n| `isDelay` | `false` | 顯示前是否延遲（避免閃爍）。 |\n| `delayMS` | `300` | 延遲毫秒（`isDelay = true` 時生效）。 |\n\n```vue\n<CGlobalSpinner ref=\"globalSpinner\" color=\"#e4b445\" :is-delay=\"true\" :delay-m-s=\"200\" />\n```\n\n### CImage\n\n包裝 `<img>` 並提供：載入時 fade-in、載入失敗顯示佔位圖、SVG 預設破圖樣式。\n\n| Prop | 說明 |\n| --- | --- |\n| `src` | 圖片 URL；空值時自動使用 1×1 base64 佔位圖。 |\n| `alt` | 替代文字。 |\n| `loading` | `'lazy'` / `'eager'`，預設 `lazy`。 |\n| `className` | 額外 class。 |\n| `onLoad` | `(e: Event) => void`，圖片載入完成。 |\n| `onError` | `(e: Event \\| string) => void`，圖片載入失敗。 |\n\n```vue\n<CImage :src=\"avatarUrl\" alt=\"頭像\" :onError=\"onAvatarError\" />\n```\n\n### HasPermission\n\n根據 `inject('c-sessionStore')` 取得 sessionStore，再用 `hasPermission(need)` 判斷子內容是否渲染。`VueSessionStoreInstaller` 會自動 provide。\n\n```vue\n<HasPermission :need=\"['user:UPDATE']\">\n  <button @click=\"onEdit\">編輯</button>\n</HasPermission>\n```\n\n| Prop | 型別 | 說明 |\n| --- | --- | --- |\n| `need` | `string \\| string[]` | 必須具備的權限（其中一個符合即顯示）。 |\n\n---\n\n## 表格元件 CTable\n\n完整功能：欄位定義（文字／日期／日期區間／行號／Checkbox／TextInput／Action）、排序、分頁、自訂 render（HTML 或 VNode）、Action 過濾、樣式變數。\n\n```vue\n<template>\n  <CTable\n    :columns=\"columns\"\n    :data-list=\"dataList\"\n    :query-param=\"queryParam\"\n    :multi-sort=\"false\"\n    :page-size-options=\"[10, 20, 50]\"\n    @page-change=\"handlePageChange\"\n    @sort-change=\"handleSortChange\"\n    @table-action=\"handleTableAction\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  CTable, CTableColumn, CTableColumnType, CTableColumnActionType,\n  QueryParameter, QueryPage,\n} from 'ch3chi-commons-vue';\n\nconst queryParam = reactive(new QueryParameter({ page: new QueryPage({ pageSize: 20 }) }));\n\nconst columns: CTableColumn[] = [\n  new CTableColumn({ type: CTableColumnType.RowNumber, text: '#', width: '60px' }),\n  new CTableColumn({\n    type: CTableColumnType.Text,\n    dataName: 'name',\n    text: '名稱',\n    sortConfig: { sortable: true, key: 'name' },\n  }),\n  new CTableColumn({ type: CTableColumnType.Date, dataName: 'createdAt', text: '建立日' }),\n  new CTableColumn({\n    type: CTableColumnType.DateRange,\n    dataNameList: ['startAt', 'endAt'],\n    text: '使用期間',\n  }),\n  new CTableColumn({\n    type: CTableColumnType.Action,\n    text: '操作',\n    dataAlign: 'right',\n    actionList: [\n      { actionType: CTableColumnActionType.Edit, title: '編輯', permission: 'user:UPDATE' },\n      { actionType: CTableColumnActionType.Delete, title: '刪除' },\n    ],\n    actionFilter: (action, row) => {\n      if (action.actionType === CTableColumnActionType.Delete) return !row.isProtected;\n      return true;\n    },\n  }),\n];\n\nfunction handleTableAction(actionType, rowData, event) {\n  // table-action: 由 actionList 點擊時觸發\n}\n</script>\n```\n\n`CTableColumn` 重要設定：\n\n| 欄位 | 說明 |\n| --- | --- |\n| `type` | `RowNumber / Text / TextInput / Date / DateRange / DateTime / Action / Checkbox`。 |\n| `dataName` | 對應 `dataList` 中的屬性名（單欄）。 |\n| `dataNameList` | `DateRange` 專用（兩個欄位）。 |\n| `formatPattern` | `Date` / `DateTime` 的 dayjs 格式字串。 |\n| `sortConfig` | `{ sortable, key, direction }`，搭配 `queryParam.sort` 同步。 |\n| `width` / `align` / `dataAlign` | th / td 對齊與寬度。 |\n| `actionList` | Action 欄位的按鈕清單，可指定 `actionType`、`text`、`title`、`cls`、`icon`、`onClick`、`permission`、`href` / `target` / `rel`。 |\n| `actionFilter` | 單一函式或陣列，用來動態過濾 actionList（搭配 `BaseListViewModel.tableActionFilter` 自動串接權限過濾）。 |\n| `customRender(rowData)` | 完全自訂 render，可回傳 string／HTMLElement／VNode；搭配 `useHtml` 或 `useVNode`。 |\n\n全域樣式：`CTableConfig.setPaginationStyle(...)`、`CTableConfig.setTableStyleConfig(...)`、`CTableConfig.pageSizeOptions = [10, 20, 50]`，`CTableColumn.configure({ iconMap, btnClassMap, actionInnerCls, safeHrefProtocols })` 可調整 action 欄位的預設 icon / class 與 href 允許的 URL scheme。\n\n#### Action 按鈕支援 Ctrl / Cmd + 點擊開新頁\n\nAction 按鈕預設渲染為 `<button>`，無法取得瀏覽器原生的開新分頁行為。若該操作對應到一個可導覽的網址，加上 `href` 即會改渲染為 `<a>`：\n\n```js\nactionList: [\n  {\n    actionType: CTableColumnActionType.Edit,\n    title: '編輯',\n    href: (row) => router.resolve({ name: 'UserEdit', params: { id: row.id } }).href,\n    onClick: ({ rowData }) => router.push({ name: 'UserEdit', params: { id: rowData.id } }),\n  },\n  { actionType: CTableColumnActionType.Delete, title: '刪除' }, // 無 href，維持 <button>\n];\n```\n\n一般左鍵點擊仍走 `onClick` / `table-action`（SPA 導覽）；按下 Ctrl / Cmd / Shift / Alt、中鍵點擊或使用右鍵選單時，交由瀏覽器原生處理並**不會**觸發 `onClick` / `table-action`，避免重複導覽。`target: '_blank'` 會自動補上 `rel=\"noopener noreferrer\"`，且一般點擊也直接走原生導覽（適合純外部連結）。`href` 為函式且回傳空值時，該按鈕自動回退為 `<button>`。\n\n`onClick` 與 `table-action` 也會帶入原始 `MouseEvent`（第三個參數 `event`），可用於自行判斷修飾鍵。\n\n**安全性**：`href` 常直接取自 API 回傳欄位，屬不可信輸入，因此渲染前會檢查 URL scheme，預設只允許 `http:` / `https:` / `mailto:` / `tel:` 與無 scheme 的相對路徑（含 protocol-relative）。`javascript:`、`data:`、`vbscript:` 等會被拒絕並回退為 `<button>`（比對前會剝除控制字元與空白，避免 `java\\tscript:` 之類的繞過）。可透過 `CTableColumn.configure({ safeHrefProtocols: [...] })` 調整白名單。詳見 [doc/CTable-Usage-Guide.md](doc/CTable-Usage-Guide.md)。\n\n事件：\n\n- `@page-change` (`QueryPage`)：分頁或每頁筆數變更。\n- `@sort-change` (`{ column, sort }`)：點擊可排序欄位。\n- `@table-action` (`actionType`, `rowData`, `event`)：Action 欄位按鈕點擊。\n\n---\n\n## Form 欄位元件\n\n> **使用前提**：所有 Form 欄位元件都會 `inject('c-formViewModel', model)` 取得 `BaseFormDataModel` 子類別。請在父層元件 `provide('c-formViewModel', model)`，並先呼叫 `model.initForm()`。\n\n```vue\n<script setup lang=\"ts\">\nimport { provide } from 'vue';\nconst model = new UserForm();\nmodel.initForm();\nprovide('c-formViewModel', model);\n</script>\n```\n\n共通的可選 prop（多數元件都有）：`id`、`label`、`name`（**必填**，對應 yup field key）、`required` / `requiredReactive`（後者為響應式版本，當 yup schema 用 `.when()` 動態判斷時建議使用）、`placeholder`、`readMode`（轉為純文字顯示模式）、`styleConfig`（`IBSFieldStyleConfig`）。\n\n### CTextInputFormField\n\n文字／密碼／數字輸入欄位。\n\n| Prop | 說明 |\n| --- | --- |\n| `type` | 預設 `'text'`，常見 `password` / `number`。 |\n| `min` / `max` | `number` type 時生效。 |\n| `autocomplete` | 預設 `'off'`。 |\n| `disabledState` | `ComputedRef<boolean>`，動態 disable。 |\n| `readMode` | 純文字顯示。 |\n\n`maxlength` 會自動從 yup schema 的 `.max(n)` 推導。\n\n```vue\n<CTextInputFormField name=\"account\" label=\"帳號\" placeholder=\"請輸入帳號\" />\n<CTextInputFormField name=\"password\" label=\"密碼\" type=\"password\" autocomplete=\"new-password\" />\n```\n\n### CTextAreaFormField\n\n多行文字輸入。`rows`（預設 3）、`maxlength` 可自行指定，未填時會嘗試從 schema 推導。\n\n```vue\n<CTextAreaFormField name=\"description\" label=\"說明\" :rows=\"5\" :maxlength=\"500\" />\n```\n\n### CSelectFormField\n\n下拉選單。`optionList` 可為陣列或 `Promise<COptionItem[]>`；若有 `dependentField` + `fetchOptions(value)`，會在父欄位變動時自動重新載入並清掉現值（首次載入不清）。\n\n```vue\n<CSelectFormField\n  name=\"cityCode\"\n  label=\"城市\"\n  :optionList=\"cityOptions\"\n  dependentField=\"countryCode\"\n  :fetchOptions=\"(country) => fetchCityOptions(country)\"\n/>\n```\n\n### CCheckBoxFormField / CCheckBoxPlatFormField\n\n複選框群組（綁定到陣列欄位）。Plat 版本把整個 row 變成 label，視覺上更像「卡片式」選項，並支援 helper icon。\n\n```vue\n<CCheckBoxFormField name=\"tags\" label=\"興趣\" :optionList=\"tagOptions\" />\n<CCheckBoxPlatFormField name=\"permissions\" label=\"權限\" :optionList=\"permOptions\" />\n```\n\n### CRadioFormField / CRadioPlatFormField\n\n單選 radio 群組。Plat 版本同樣是「整個 row 為 label」風格。\n\n```vue\n<CRadioFormField name=\"gender\" label=\"性別\" :optionList=\"genderOptions\" />\n<CRadioPlatFormField name=\"role\" label=\"角色\" :optionList=\"roleOptions\" />\n```\n\n### CDateFormField\n\nflatpickr 單日選擇器（中文 locale 內建）。\n\n| Prop | 說明 |\n| --- | --- |\n| `timeType` | `'startOfDay'` 將時間補到 `00:00:00.000`；`'endOfDay'` 補到 `23:59:59.999`。 |\n\n```vue\n<CDateFormField name=\"birthDate\" label=\"生日\" />\n<CDateFormField name=\"startAt\" label=\"生效日\" timeType=\"startOfDay\" />\n```\n\n### CNDateFormField\n\nHTML5 `<input type=\"date\">` 原生版本，外觀依瀏覽器，但零第三方依賴、支援 `min` / `max`。\n\n| Prop | 說明 |\n| --- | --- |\n| `min` / `max` | `'YYYY-MM-DD'` 格式字串。 |\n| `timeType` | 同上。 |\n\n```vue\n<CNDateFormField name=\"effectiveAt\" label=\"生效日期\" timeType=\"startOfDay\" min=\"2026-01-01\" max=\"2026-12-31\" />\n```\n\n**選用建議**：\n\n| 元件 | 底層 | 適用情境 |\n| --- | --- | --- |\n| `CDateFormField` | flatpickr | 跨瀏覽器外觀一致、中文 locale。 |\n| `CNDateFormField` | HTML5 `<input type=\"date\">` | 零第三方依賴、`min`／`max` 範圍限制。 |\n\n### CDateRangeFormField\n\nflatpickr 日期區間（同時綁兩個 field）。\n\n| Prop | 說明 |\n| --- | --- |\n| `startDateFieldName` | yup 中的開始日期 field 名（預設 `'startDate'`）。 |\n| `endDateFieldName` | 結束日期 field 名（預設 `'endDate'`）。 |\n\n```vue\n<CDateRangeFormField startDateFieldName=\"startAt\" endDateFieldName=\"endAt\" />\n```\n\n### CDateQueryField\n\n不依賴 `BaseFormDataModel` 的單日選擇器，直接綁 `model[name]`（適合查詢列表用）。\n\n| Prop | 說明 |\n| --- | --- |\n| `model` | 任意物件（會用 `_.get/set`）。 |\n| `name` | 物件屬性 path。 |\n| `timeType` | 同上。 |\n\n```vue\n<CDateQueryField :model=\"queryParam\" name=\"startsAt\" label=\"起始日\" timeType=\"startOfDay\" />\n```\n\n### CFilePickerFormField\n\n整合上傳 API、進度條、已上傳列表。會自動呼叫 `Resources-Create` / `Resources-Delete` 端點（請在 `ApiService.configure` 時註冊）。\n\n| Prop | 預設 | 說明 |\n| --- | --- | --- |\n| `name` | — | 對應 dataModel 屬性名（值為 `CFileDataModel` 或 `CFileDataModel[]`）。 |\n| `dataModel` | — | 父層的資料模型（含 `formFieldMap`）。 |\n| `validationDataKey` | `name` | 驗證對應的 field key（單／多重欄位場景可分開）。 |\n| `accept` | `*` | `<input>` accept 值。 |\n| `multiple` | `false` | 多檔上傳。 |\n| `fileCountLimit` | — | 多檔模式下的最多檔案數。 |\n| `fileSizeLimit` | `2MB`（或 `VITE_MAX_FILE_SIZE`） | 單檔上限（bytes）。 |\n| `tip` | — | label 旁的 tooltip 提示文字。 |\n\n`defineExpose({ addSavedFiles })`：可從父元件主動塞入已存在的檔案清單。\n\n```vue\n<CFilePickerFormField\n  ref=\"picker\"\n  name=\"attachments\"\n  label=\"附件\"\n  :data-model=\"model\"\n  multiple\n  :file-count-limit=\"5\"\n  accept=\"image/*,application/pdf\"\n  tip=\"最多 5 個檔案，單檔 2MB\"\n/>\n```\n\n### CChangePasswordFormField\n\n包含「編輯密碼」按鈕 + Bootstrap Modal 表單，內建 `PasswordDataModel` 驗證規則（長度、英數加符號、新／確認新密碼一致）。\n\n| Prop | 預設 | 說明 |\n| --- | --- | --- |\n| `userUid` | — | 使用者 uid。 |\n| `requireOldPassword` | `true` | 是否顯示舊密碼欄位。 |\n| `dataModelConstructor` | `PasswordDataModel` | 自訂 model（需繼承 `PasswordDataModel`）。 |\n| `callApi(model)` | — | 送出時呼叫的 API 函式，回傳 `Promise<ApiResponse>`。 |\n\n```vue\n<CChangePasswordFormField\n  :user-uid=\"userUid\"\n  :require-old-password=\"true\"\n  :call-api=\"(m) => ApiService.call({ endpointKey: 'changePassword', postBody: m.toPayload() })\"\n/>\n```\n\n### CTinyMCEEditorFormField\n\nTinyMCE Editor 整合，需在 `.env` 設定 `VITE_TINYMCE_API_KEY`。\n\n```vue\n<CTinyMCEEditorFormField name=\"content\" label=\"內容\" required />\n```\n\n### SCTextInputFormField（slot-based 客製版本）\n\n跟 `CTextInputFormField` 同樣的 props，但把 `componentId / fieldRef / fieldModel / isRequired / isReadMode / maxLengthAttr / inputAttrs` 透過 slot 暴露出來，方便自訂外觀。提供 `default` / `label` / `input` / `error` 四個具名 slot。\n\n```vue\n<SCTextInputFormField name=\"email\" label=\"信箱\" type=\"email\">\n  <template #input=\"{ inputAttrs, fieldRef, fieldModel }\">\n    <div class=\"input-group\">\n      <span class=\"input-group-text\">@</span>\n      <input class=\"form-control\" v-bind=\"inputAttrs\" v-model=\"fieldRef\" v-form-invalid=\"fieldModel\" />\n    </div>\n  </template>\n</SCTextInputFormField>\n```\n\n---\n\n## 進階文件索引\n\n- [API Service Bearer Token 機制](doc/ApiService-BearerAuth-Mechanism.md)\n- [BSFieldStyleConfig 指南](doc/BSFieldStyleConfig-Guide.md)\n- [CTable 使用指南](doc/CTable-Usage-Guide.md)\n- [CTable 樣式配置](doc/CTableStyleConfig-Usage-Guide.md)\n- [CTable scrollbar 樣式](doc/CTable-ScrollbarStyle-Guide.md)\n- [SCTextInputFormField 使用範例](doc/SCTextInputFormField-usage.md)\n- [UserSession Store 泛型用法](doc/UserSession-Store-Generic-Guide.md)\n- [UserSession Logout 事件](doc/UserSession-Logout-Event-Guide.md)\n- [Permission 使用](doc/permission-usage.md)\n- 其他文件請參考 `doc/` 目錄\n\n## 開發與建置\n\n```bash\n# 安裝依賴\nnpm install\n\n# Type check\nnpm run build\n\n# Bundle\nnpm run vite-build\n\n# 發行\nnpm run release           # 依 Conventional Commits 自動 bump\nnpm run release:minor     # 強制 minor\n\n# 程式碼品質\nnpm run lint\nnpm run lint:fix\nnpm run format\n```\n\n**程式碼規範**：\n\n- ESLint：Flat Config + Google Style（2 space indent、單引號、強制分號）。\n- Prettier：與 ESLint 整合，避免格式衝突。\n- Commit Message：Conventional Commits（`feat:` / `fix:` / `chore:` / `refactor:` / `docs:` / `feat!:` 等），由 `standard-version` 自動產生 CHANGELOG。\n\n## 授權\n\n此專案採用 MIT 授權。","readmeFilename":"README.md"}