vome-core 0.1.53 → 0.1.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/admin/config/plugin-dev.js +1 -1
  2. package/dist/admin/crud/components/vm-date-calendar-panel.vue +96 -83
  3. package/dist/admin/crud/components/vm-date-picker.vue +21 -17
  4. package/dist/admin/crud/components/vm-date-range.vue +8 -11
  5. package/dist/admin/crud/components/vm-datetime-field.vue +20 -37
  6. package/dist/admin/crud/components/vm-richtext-extensions.js +1 -1
  7. package/dist/admin/crud/config.d.ts +0 -1
  8. package/dist/admin/crud/config.js +1 -1
  9. package/dist/admin/crud/confirm.js +1 -1
  10. package/dist/admin/crud/dict.js +1 -1
  11. package/dist/admin/crud/key.d.ts +0 -2
  12. package/dist/admin/crud/key.js +1 -1
  13. package/dist/admin/crud/plugins.js +1 -1
  14. package/dist/admin/crud/registry.d.ts +0 -2
  15. package/dist/admin/crud/registry.js +0 -2
  16. package/dist/admin/crud/span.js +1 -1
  17. package/dist/admin/crud/style.d.ts +2 -2
  18. package/dist/admin/crud/style.js +1 -1
  19. package/dist/admin/crud/validate.d.ts +0 -10
  20. package/dist/admin/crud/validate.js +1 -1
  21. package/dist/admin/crud/vm-crud.vue +1 -9
  22. package/dist/admin/directives/perm.js +1 -1
  23. package/dist/admin/hooks/useUpload.js +1 -1
  24. package/dist/admin/lib/browser.js +1 -1
  25. package/dist/admin/lib/cn.js +1 -1
  26. package/dist/admin/lib/dialog-float.js +1 -1
  27. package/dist/admin/lib/export-excel.d.ts +0 -2
  28. package/dist/admin/lib/export-excel.js +1 -1
  29. package/dist/admin/lib/file-preview.d.ts +2 -4
  30. package/dist/admin/lib/file-preview.js +11 -11
  31. package/dist/admin/lib/import-excel.d.ts +3 -2
  32. package/dist/admin/lib/import-excel.js +1 -1
  33. package/dist/admin/lib/json.js +1 -1
  34. package/dist/admin/lib/menu.js +1 -1
  35. package/dist/admin/lib/tree.js +1 -1
  36. package/dist/admin/lib/upload.d.ts +0 -1
  37. package/dist/admin/lib/upload.js +1 -1
  38. package/dist/admin/lib/video-frame.d.ts +0 -3
  39. package/dist/admin/lib/video-frame.js +1 -1
  40. package/dist/agent/constants.d.ts +0 -7
  41. package/dist/agent/index.d.ts +0 -1
  42. package/dist/agent/index.js +2 -25
  43. package/dist/agent/protocol.d.ts +0 -2
  44. package/dist/ai/adapters/auth-headers.d.ts +2 -2
  45. package/dist/ai/adapters/openai-compatible.d.ts +1 -2
  46. package/dist/ai/index.js +0 -7
  47. package/dist/ai/transport.d.ts +0 -6
  48. package/dist/ai/types.d.ts +0 -2
  49. package/dist/client/vite-admin.d.ts +0 -5
  50. package/dist/client/vite-admin.js +0 -6
  51. package/dist/client/vite-plugin-eps.d.ts +0 -23
  52. package/dist/client/vite-plugin-eps.js +1 -1
  53. package/dist/comm/daily-log.d.ts +0 -2
  54. package/dist/comm/format-time.d.ts +0 -1
  55. package/dist/core/context/index.d.ts +0 -8
  56. package/dist/ext/load-plugin.d.ts +0 -4
  57. package/dist/index.js +1 -1
  58. package/dist/ioc/metadata.d.ts +0 -1
  59. package/dist/orm/column-comments.d.ts +2 -1
  60. package/dist/orm/field-ref.d.ts +2 -1
  61. package/dist/orm/import-excel.d.ts +2 -6
  62. package/dist/orm/join-tables.d.ts +0 -3
  63. package/dist/server/index.js +1 -1
  64. package/dist/shared/datetime-picker.d.ts +5 -22
  65. package/dist/shared/datetime-picker.js +1 -1
  66. package/dist/shared/excel.js +1 -1
  67. package/dist/shared/index.d.ts +1 -1
  68. package/dist/shared/index.js +1 -1
  69. package/dist/shared/locale-json.js +1 -1
  70. package/dist/shared/tree.js +1 -1
  71. package/dist/typings/routing/crud.d.ts +1 -1
  72. package/package.json +1 -1
  73. package/typings/admin/comm/crud.d.ts +1 -1
  74. package/typings/admin/comm/crud.ts +1 -3
  75. package/typings/routing/crud.ts +1 -3
  76. package/dist/admin/crud/mitt.d.ts +0 -10
  77. package/dist/admin/crud/mitt.js +0 -1
  78. package/dist/agent/types.d.ts +0 -14
@@ -1 +1 @@
1
- function _0x38f8(_0xdf2bc2,_0x23ddb8){_0xdf2bc2=_0xdf2bc2-0xc6;const _0x586795=_0x5867();let _0x38f8cc=_0x586795[_0xdf2bc2];if(_0x38f8['plPkeC']===undefined){var _0x7d085d=function(_0x3a4c8d){const _0x2a055a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2eb79d='',_0x52a583='';for(let _0x1c0324=0x0,_0x3c347c,_0x5becc4,_0x3c85ba=0x0;_0x5becc4=_0x3a4c8d['charAt'](_0x3c85ba++);~_0x5becc4&&(_0x3c347c=_0x1c0324%0x4?_0x3c347c*0x40+_0x5becc4:_0x5becc4,_0x1c0324++%0x4)?_0x2eb79d+=String['fromCharCode'](0xff&_0x3c347c>>(-0x2*_0x1c0324&0x6)):0x0){_0x5becc4=_0x2a055a['indexOf'](_0x5becc4);}for(let _0x195798=0x0,_0xfbc53e=_0x2eb79d['length'];_0x195798<_0xfbc53e;_0x195798++){_0x52a583+='%'+('00'+_0x2eb79d['charCodeAt'](_0x195798)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x52a583);};_0x38f8['GfvMFo']=_0x7d085d,_0x38f8['TAqynS']={},_0x38f8['plPkeC']=!![];}const _0x31f86e=_0x586795[0x0],_0xcec40f=_0xdf2bc2+_0x31f86e,_0x3f21b9=_0x38f8['TAqynS'][_0xcec40f];return!_0x3f21b9?(_0x38f8cc=_0x38f8['GfvMFo'](_0x38f8cc),_0x38f8['TAqynS'][_0xcec40f]=_0x38f8cc):_0x38f8cc=_0x3f21b9,_0x38f8cc;}const _0x24cbdc=_0x38f8;(function(_0x9cdf5f,_0x3526d9){const _0x58b36c=_0x38f8,_0x20dacd=_0x9cdf5f();while(!![]){try{const _0x42f7da=-parseInt(_0x58b36c(0xce))/0x1*(-parseInt(_0x58b36c(0xe0))/0x2)+parseInt(_0x58b36c(0xc8))/0x3+-parseInt(_0x58b36c(0xcf))/0x4+parseInt(_0x58b36c(0xdc))/0x5+-parseInt(_0x58b36c(0xd4))/0x6*(parseInt(_0x58b36c(0xde))/0x7)+parseInt(_0x58b36c(0xd3))/0x8*(-parseInt(_0x58b36c(0xdd))/0x9)+-parseInt(_0x58b36c(0xd1))/0xa;if(_0x42f7da===_0x3526d9)break;else _0x20dacd['push'](_0x20dacd['shift']());}catch(_0x39d4ff){_0x20dacd['push'](_0x20dacd['shift']());}}}(_0x5867,0x1a1d2));const ORG=_0x24cbdc(0xd8);export function serviceUrlFromDocs(_0x2eb79d){const _0x420bb0=_0x24cbdc,_0x52a583=new URL(_0x2eb79d),_0x1c0324=_0x52a583[_0x420bb0(0xcd)][_0x420bb0(0xca)](/^www\./,'')[_0x420bb0(0xca)](/^service\./,'');return _0x52a583['protocol']+_0x420bb0(0xcc)+_0x1c0324;}export function seatApiBaseFromDocs(_0x3c347c){const _0x2a5741=_0x24cbdc;return serviceUrlFromDocs(_0x3c347c)+_0x2a5741(0xe2);}export function licenseIssueUrlFromDocs(_0x5becc4){return serviceUrlFromDocs(_0x5becc4)+'/app/pluginStore/wallet/license/issue';}function giteeArchive(_0x3c85ba){const _0x1dbd84=_0x24cbdc;return _0x1dbd84(0xd5)+ORG+'/'+_0x3c85ba+'/repository/archive/master.zip';}function _0x5867(){const _0x235914=['Ahr0Chm6lY9NAxrODwiUy29TlW','mJeYmZy4mfPmvhnssG','zNjVBNrLBMq','oeH4rw9SqG','nNnjzu9crW','Ahr0Chm6lY9NAxrLzs5JB20V','DM9Tzs1WBhvNAw4TC2vYDMLJzq','57QV5zco56UV','DM9TzwTQ','DM9Tzs1WBhvNAw4TzNjVBNq','DM9Tzs1WBhvNAw4TzNvSBa','57QV5yMn56UV','otG3otuWAfvdCfDZ','nte2mJy3Eg92Dgjf','ndy0nZuXCuniB2vR','z2L0zwu','mtuXodqYsKDbAg9b','5yMn56UVicSG5zco56UV','l2fWCc9WBhvNAw5tDg9Yzs9Zzwf0','zNvSBa','Ahr0Chm6lY92B21LA2OUy29T','nteYnZa5ALHeDhHe','yMfJA2vUza','CMvWBgfJzq','5A6m5Pw05lIA5yQH5QIH5z2x6isA5OMl5P6277YilNzVBwxVVjRLKkSGC2vYDMvYios4JIb3zwlVViNVViZMNkZLNldLVidLJ5hMIzpLJixLKi7LJ5hLUipJGii','lY9Zzxj2AwnLlG','Ag9ZDg5HBwu','mvjRtxrusq','ntmXmNPYrKfKsG'];_0x5867=function(){return _0x235914;};return _0x5867();}function githubArchive(_0x195798){const _0x34e527=_0x24cbdc;return _0x34e527(0xd0)+ORG+'/'+_0x195798+'/archive/refs/heads/master.zip';}function giteeRepo(_0xfbc53e){return'https://gitee.com/'+ORG+'/'+_0xfbc53e;}function githubRepo(_0x16a8ff){const _0x426e36=_0x24cbdc;return _0x426e36(0xd0)+ORG+'/'+_0x16a8ff;}const docsUrl=_0x24cbdc(0xc7);export const pluginDev={'docsUrl':docsUrl,'serviceUrl':serviceUrlFromDocs(docsUrl),'uploadUrl':docsUrl+'/plugins/upload','mirrors':{'prefer':_0x24cbdc(0xdf),'giteeOrg':_0x24cbdc(0xd5)+ORG,'githubOrg':'https://github.com/'+ORG},'scaffolds':{'full':{'key':_0x24cbdc(0xc6),'title':_0x24cbdc(0xe1),'desc':_0x24cbdc(0xcb),'repo':_0x24cbdc(0xda),'repoUrl':giteeRepo(_0x24cbdc(0xda)),'githubRepoUrl':githubRepo('vome-plugin-full'),'downloadUrl':giteeArchive(_0x24cbdc(0xda)),'githubDownloadUrl':githubArchive('vome-plugin-full')},'backend':{'key':_0x24cbdc(0xc9),'title':_0x24cbdc(0xd7),'desc':'钩子\x20/\x20服务端插件脚手架(.vome:仅\x20server),适合上传、短信、支付等能力扩展。','repo':_0x24cbdc(0xd6),'repoUrl':giteeRepo('vome-plugin-service'),'githubRepoUrl':githubRepo(_0x24cbdc(0xd6)),'downloadUrl':giteeArchive(_0x24cbdc(0xd6)),'githubDownloadUrl':githubArchive(_0x24cbdc(0xd6))},'frontend':{'key':_0x24cbdc(0xd2),'title':_0x24cbdc(0xdb),'desc':'后台微应用脚手架(.vome:含\x20web/),以\x20wujie\x20挂载独立前端页面。','repo':'vome-plugin-front','repoUrl':giteeRepo(_0x24cbdc(0xd9)),'githubRepoUrl':githubRepo(_0x24cbdc(0xd9)),'downloadUrl':giteeArchive('vome-plugin-front'),'githubDownloadUrl':githubArchive(_0x24cbdc(0xd9))}}};
1
+ const _0x42450f=_0x3d65;(function(_0x3cd6fe,_0x400739){const _0x586f75=_0x3d65,_0xf8e49=_0x3cd6fe();while(!![]){try{const _0x172075=-parseInt(_0x586f75(0xcf))/0x1+-parseInt(_0x586f75(0xd1))/0x2+-parseInt(_0x586f75(0xc9))/0x3+-parseInt(_0x586f75(0xc0))/0x4+-parseInt(_0x586f75(0xd4))/0x5+parseInt(_0x586f75(0xd7))/0x6+parseInt(_0x586f75(0xd5))/0x7*(parseInt(_0x586f75(0xc5))/0x8);if(_0x172075===_0x400739)break;else _0xf8e49['push'](_0xf8e49['shift']());}catch(_0x596aba){_0xf8e49['push'](_0xf8e49['shift']());}}}(_0x28c9,0x66558));const ORG=_0x42450f(0xd2);export function serviceUrlFromDocs(_0xf2feab){const _0x19c504=_0x42450f,_0x149e23=new URL(_0xf2feab),_0x1e1cdd=_0x149e23[_0x19c504(0xcb)][_0x19c504(0xb9)](/^www\./,'')[_0x19c504(0xb9)](/^service\./,'');return _0x149e23[_0x19c504(0xbd)]+_0x19c504(0xbc)+_0x1e1cdd;}export function seatApiBaseFromDocs(_0x51cbaa){return serviceUrlFromDocs(_0x51cbaa)+'/app/pluginStore/seat';}export function licenseIssueUrlFromDocs(_0x56ea0f){const _0x5874f7=_0x42450f;return serviceUrlFromDocs(_0x56ea0f)+_0x5874f7(0xc7);}function giteeArchive(_0x3561bb){const _0x43273b=_0x42450f;return'https://gitee.com/'+ORG+'/'+_0x3561bb+_0x43273b(0xc4);}function _0x3d65(_0x2f4639,_0x385671){_0x2f4639=_0x2f4639-0xb8;const _0x28c92e=_0x28c9();let _0x3d657f=_0x28c92e[_0x2f4639];if(_0x3d65['DcnAAs']===undefined){var _0x1111d2=function(_0x3f4560){const _0x1cf19b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xf2feab='',_0x149e23='';for(let _0x1e1cdd=0x0,_0x51cbaa,_0x56ea0f,_0x3561bb=0x0;_0x56ea0f=_0x3f4560['charAt'](_0x3561bb++);~_0x56ea0f&&(_0x51cbaa=_0x1e1cdd%0x4?_0x51cbaa*0x40+_0x56ea0f:_0x56ea0f,_0x1e1cdd++%0x4)?_0xf2feab+=String['fromCharCode'](0xff&_0x51cbaa>>(-0x2*_0x1e1cdd&0x6)):0x0){_0x56ea0f=_0x1cf19b['indexOf'](_0x56ea0f);}for(let _0xc2fe66=0x0,_0x2f5cc3=_0xf2feab['length'];_0xc2fe66<_0x2f5cc3;_0xc2fe66++){_0x149e23+='%'+('00'+_0xf2feab['charCodeAt'](_0xc2fe66)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x149e23);};_0x3d65['ySVOlR']=_0x1111d2,_0x3d65['VSnBsP']={},_0x3d65['DcnAAs']=!![];}const _0x25893e=_0x28c92e[0x0],_0x1b0d0c=_0x2f4639+_0x25893e,_0x403adf=_0x3d65['VSnBsP'][_0x1b0d0c];return!_0x403adf?(_0x3d657f=_0x3d65['ySVOlR'](_0x3d657f),_0x3d65['VSnBsP'][_0x1b0d0c]=_0x3d657f):_0x3d657f=_0x403adf,_0x3d657f;}function githubArchive(_0xc2fe66){const _0x56739b=_0x42450f;return _0x56739b(0xc3)+ORG+'/'+_0xc2fe66+_0x56739b(0xc2);}function giteeRepo(_0x2f5cc3){const _0xc5595e=_0x42450f;return _0xc5595e(0xd6)+ORG+'/'+_0x2f5cc3;}function githubRepo(_0x2011e1){const _0x1b39c5=_0x42450f;return _0x1b39c5(0xc3)+ORG+'/'+_0x2011e1;}const docsUrl=_0x42450f(0xc6);function _0x28c9(){const _0x194d0b=['DM9Tzs1WBhvNAw4TzNvSBa','DM9Tzs1WBhvNAw4TzNjVBNq','mte3mZe2zNLHCNrx','5yMn56UVicSG5zco56UV','mteWndG4og1AwLv1CW','DM9TzwTQ','z2L0zwu','mZaWnZuXmfzfvwnrsq','mti1nZKXnJflt0XdBwG','Ahr0Chm6lY9NAxrLzs5JB20V','mJeYodG3mNDuBKjKtG','5A6m5Pw05lIA5yQH5QIH5z2x6isA5OMl5P6277YilNzVBwxVVjRLKkSGC2vYDMvYios4JIb3zwlVViNVViZMNkZLNldLVidLJ5hMIzpLJixLKi7LJ5hLUipJGii','CMvWBgfJzq','5zco5y+W5B6U5BQu55sO6isA5OMl5P6277YilNzVBwxVVjRLKkSGD2vIl++8IE+8Jos7Psb3DwPPzsdMJilOVB3NI6ZNQ4VLIy3NQ6/POBxPNAlJGii','yMfJA2vUza','lY9Zzxj2AwnLlG','ChjVDg9JB2W','57QV5yMn56UV','DM9Tzs1WBhvNAw4TC2vYDMLJzq','mti1odC1nLzZDfztqG','l3bSDwDPBNmVDxbSB2fK','l2fYy2HPDMuVCMvMCY9OzwfKCY9Tyxn0zxiUEMLW','Ahr0Chm6lY9NAxrODwiUy29TlW','l3jLCg9ZAxrVCNKVyxjJAgL2zs9Tyxn0zxiUEMLW','og1tvKryCW','Ahr0Chm6lY92B21LA2OUy29T','l2fWCc9WBhvNAw5tDg9Yzs93ywXSzxqVBgLJzw5Zzs9PC3n1zq','zNvSBa','ndqWmtCYwKT4u3jm','57QV5zco56UV','Ag9ZDg5HBwu','6zkP5A2qic8G5PYn5yQH56UV5O+s5lU26isA5OMl5P6277YilNzVBwxVVjRKU4uGC2vYDMvY77Yj77Ym6ycc5zci5lIk5lYG44cb55+T5l+H44cb5PsV5lUy562j6io95yQB5OMP5Bgv44cc'];_0x28c9=function(){return _0x194d0b;};return _0x28c9();}export const pluginDev={'docsUrl':docsUrl,'serviceUrl':serviceUrlFromDocs(docsUrl),'uploadUrl':docsUrl+_0x42450f(0xc1),'mirrors':{'prefer':_0x42450f(0xd3),'giteeOrg':_0x42450f(0xd6)+ORG,'githubOrg':_0x42450f(0xc3)+ORG},'scaffolds':{'full':{'key':_0x42450f(0xc8),'title':_0x42450f(0xd0),'desc':_0x42450f(0xb8),'repo':'vome-plugin-full','repoUrl':giteeRepo(_0x42450f(0xcd)),'githubRepoUrl':githubRepo(_0x42450f(0xcd)),'downloadUrl':giteeArchive(_0x42450f(0xcd)),'githubDownloadUrl':githubArchive(_0x42450f(0xcd))},'backend':{'key':_0x42450f(0xbb),'title':_0x42450f(0xca),'desc':_0x42450f(0xcc),'repo':'vome-plugin-service','repoUrl':giteeRepo('vome-plugin-service'),'githubRepoUrl':githubRepo('vome-plugin-service'),'downloadUrl':giteeArchive(_0x42450f(0xbf)),'githubDownloadUrl':githubArchive('vome-plugin-service')},'frontend':{'key':'frontend','title':_0x42450f(0xbe),'desc':_0x42450f(0xba),'repo':_0x42450f(0xce),'repoUrl':giteeRepo(_0x42450f(0xce)),'githubRepoUrl':githubRepo('vome-plugin-front'),'downloadUrl':giteeArchive('vome-plugin-front'),'githubDownloadUrl':githubArchive(_0x42450f(0xce))}}};
@@ -26,7 +26,7 @@
26
26
  <div class="vm-dt-cal__grid">
27
27
  <button
28
28
  v-for="cell in monthCells"
29
- :key="cell.key"
29
+ :key="cell.iso"
30
30
  type="button"
31
31
  class="vm-dt-cal__day"
32
32
  :class="{
@@ -34,7 +34,7 @@
34
34
  'is-today': cell.isToday,
35
35
  'is-on': selectedIso === cell.iso,
36
36
  }"
37
- @click="pickDate(cell.iso)"
37
+ @click="emitValue(cell.iso)"
38
38
  >
39
39
  {{ cell.day }}
40
40
  </button>
@@ -46,7 +46,7 @@
46
46
  v-for="(lab, idx) in monthLabels"
47
47
  :key="lab"
48
48
  type="button"
49
- class="vm-dt-cal__month"
49
+ class="vm-dt-cal__cell"
50
50
  :class="{ 'is-on': viewMonth === idx }"
51
51
  @click="pickMonth(idx)"
52
52
  >
@@ -54,12 +54,12 @@
54
54
  </button>
55
55
  </div>
56
56
 
57
- <div v-else class="vm-dt-cal__body vm-dt-cal__body--years">
57
+ <div v-else class="vm-dt-cal__body vm-dt-cal__body--months">
58
58
  <button
59
59
  v-for="y in yearCells"
60
60
  :key="y"
61
61
  type="button"
62
- class="vm-dt-cal__year"
62
+ class="vm-dt-cal__cell"
63
63
  :class="{ 'is-on': viewYear === y }"
64
64
  @click="pickYear(y)"
65
65
  >
@@ -67,35 +67,21 @@
67
67
  </button>
68
68
  </div>
69
69
 
70
- <div v-if="showTime" class="vm-dt-cal__time">
71
- <label class="vm-dt-cal__time-field">
72
- <span>时</span>
70
+ <div v-if="isDatetime" class="vm-dt-cal__time">
71
+ <label v-for="f in timeFields" :key="f.key" class="vm-dt-cal__time-field">
72
+ <span>{{ f.label }}</span>
73
73
  <input
74
74
  type="number"
75
- min="0"
76
- max="23"
77
- :value="time.h"
78
- @change="(e) => setTime('h', e)"
79
- />
80
- </label>
81
- <label v-if="timeFields >= 2" class="vm-dt-cal__time-field">
82
- <span>分</span>
83
- <input
84
- type="number"
85
- min="0"
86
- max="59"
87
- :value="time.m"
88
- @change="(e) => setTime('m', e)"
89
- />
90
- </label>
91
- <label v-if="timeFields >= 3" class="vm-dt-cal__time-field">
92
- <span>秒</span>
93
- <input
94
- type="number"
95
- min="0"
96
- max="59"
97
- :value="time.s"
98
- @change="(e) => setTime('s', e)"
75
+ :min="0"
76
+ :max="f.max"
77
+ inputmode="numeric"
78
+ :value="draft[f.key]"
79
+ @pointerdown.stop
80
+ @keydown.stop
81
+ @focus="timeFocused = true"
82
+ @input="(e) => onTimeInput(f.key, e)"
83
+ @change="(e) => onTimeCommit(f.key, e)"
84
+ @blur="onTimeBlur"
99
85
  />
100
86
  </label>
101
87
  </div>
@@ -108,13 +94,11 @@
108
94
  </template>
109
95
 
110
96
  <script setup lang="ts">
111
- import { computed, ref, watch } from 'vue'
97
+ import { computed, reactive, ref, watch } from 'vue'
112
98
  import {
113
99
  buildMonthGrid,
114
- extractTimeParts,
100
+ clampTimePart,
115
101
  formatYmd,
116
- mergeDateAndTime,
117
- monthTitle,
118
102
  normalizeDateTimePrecision,
119
103
  parseApiDateTime,
120
104
  type DateTimePrecision,
@@ -139,23 +123,47 @@ const emit = defineEmits<{
139
123
  }>()
140
124
 
141
125
  const precision = computed(() => normalizeDateTimePrecision(props.precision))
126
+ const isDatetime = computed(() => precision.value === 'datetime')
142
127
  const weekdays = ['日', '一', '二', '三', '四', '五', '六']
143
- const monthLabels = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
128
+ const monthLabels = [
129
+ '1月',
130
+ '2月',
131
+ '3月',
132
+ '4月',
133
+ '5月',
134
+ '6月',
135
+ '7月',
136
+ '8月',
137
+ '9月',
138
+ '10月',
139
+ '11月',
140
+ '12月',
141
+ ]
142
+ const timeFields = [
143
+ { key: 'h' as const, label: '时', max: 23 },
144
+ { key: 'm' as const, label: '分', max: 59 },
145
+ { key: 's' as const, label: '秒', max: 59 },
146
+ ]
144
147
 
145
148
  type PanelView = 'date' | 'month' | 'year'
146
149
  const view = ref<PanelView>('date')
147
-
148
- const anchor = computed(() => parseApiDateTime(props.modelValue) || new Date())
149
- const viewYear = ref(anchor.value.getFullYear())
150
- const viewMonth = ref(anchor.value.getMonth())
150
+ const draft = reactive({ h: '0', m: '0', s: '0' })
151
+ const timeFocused = ref(false)
152
+ const viewYear = ref(new Date().getFullYear())
153
+ const viewMonth = ref(new Date().getMonth())
151
154
 
152
155
  watch(
153
156
  () => props.modelValue,
154
- () => {
155
- const d = parseApiDateTime(props.modelValue) || new Date()
157
+ (v) => {
158
+ const d = parseApiDateTime(v) || new Date()
156
159
  viewYear.value = d.getFullYear()
157
160
  viewMonth.value = d.getMonth()
161
+ if (timeFocused.value) return
162
+ draft.h = String(d.getHours())
163
+ draft.m = String(d.getMinutes())
164
+ draft.s = String(d.getSeconds())
158
165
  },
166
+ { immediate: true },
159
167
  )
160
168
 
161
169
  const selectedIso = computed(() => {
@@ -164,7 +172,6 @@ const selectedIso = computed(() => {
164
172
  })
165
173
 
166
174
  const monthCells = computed(() => buildMonthGrid(viewYear.value, viewMonth.value))
167
-
168
175
  const yearStart = computed(() => Math.floor(viewYear.value / 10) * 10)
169
176
  const yearCells = computed(() =>
170
177
  Array.from({ length: 12 }, (_, i) => yearStart.value + i),
@@ -173,19 +180,49 @@ const yearCells = computed(() =>
173
180
  const headTitle = computed(() => {
174
181
  if (view.value === 'year') return `${yearStart.value}年 - ${yearStart.value + 11}年`
175
182
  if (view.value === 'month') return `${viewYear.value}年`
176
- return monthTitle(viewYear.value, viewMonth.value)
183
+ return `${viewYear.value}年${String(viewMonth.value + 1).padStart(2, '0')}月`
177
184
  })
178
185
 
179
- const showTime = computed(() =>
180
- ['hour', 'minute', 'second'].includes(precision.value),
181
- )
182
- const timeFields = computed(() => {
183
- if (precision.value === 'hour') return 1
184
- if (precision.value === 'minute') return 2
185
- return 3
186
- })
186
+ function currentTime() {
187
+ return {
188
+ h: clampTimePart('h', Number(draft.h) || 0),
189
+ m: clampTimePart('m', Number(draft.m) || 0),
190
+ s: clampTimePart('s', Number(draft.s) || 0),
191
+ }
192
+ }
187
193
 
188
- const time = computed(() => extractTimeParts(props.modelValue))
194
+ function emitDatetime(isoDate: string, t = currentTime()) {
195
+ const pad = (n: number) => String(n).padStart(2, '0')
196
+ emit(
197
+ 'update:modelValue',
198
+ `${isoDate} ${pad(t.h)}:${pad(t.m)}:${pad(t.s)}`,
199
+ )
200
+ }
201
+
202
+ function onTimeBlur() {
203
+ timeFocused.value = false
204
+ const t = currentTime()
205
+ draft.h = String(t.h)
206
+ draft.m = String(t.m)
207
+ draft.s = String(t.s)
208
+ }
209
+
210
+ function onTimeInput(k: 'h' | 'm' | 's', e: Event) {
211
+ const raw = (e.target as HTMLInputElement).value
212
+ draft[k] = raw
213
+ if (raw === '' || !Number.isFinite(Number(raw))) return
214
+ const next = currentTime()
215
+ next[k] = clampTimePart(k, Number(raw))
216
+ emitDatetime(selectedIso.value || formatYmd(new Date()), next)
217
+ }
218
+
219
+ function onTimeCommit(k: 'h' | 'm' | 's', e: Event) {
220
+ const n = Number((e.target as HTMLInputElement).value)
221
+ const next = currentTime()
222
+ next[k] = Number.isFinite(n) ? clampTimePart(k, n) : 0
223
+ draft[k] = String(next[k])
224
+ emitDatetime(selectedIso.value || formatYmd(new Date()), next)
225
+ }
189
226
 
190
227
  function toggleView() {
191
228
  view.value = view.value === 'date' ? 'month' : view.value === 'month' ? 'year' : 'date'
@@ -226,15 +263,8 @@ function nextPage() {
226
263
  }
227
264
 
228
265
  function emitValue(isoDate: string) {
229
- if (showTime.value) {
230
- const v = mergeDateAndTime(
231
- isoDate,
232
- time.value.h,
233
- time.value.m,
234
- time.value.s,
235
- precision.value,
236
- )
237
- emit('update:modelValue', v)
266
+ if (isDatetime.value) {
267
+ emitDatetime(isoDate)
238
268
  return
239
269
  }
240
270
  if (precision.value === 'month') {
@@ -248,13 +278,6 @@ function emitValue(isoDate: string) {
248
278
  emit('update:modelValue', isoDate)
249
279
  }
250
280
 
251
- function pickDate(iso: string) {
252
- emitValue(iso)
253
- if (precision.value === 'day') {
254
- view.value = 'date'
255
- }
256
- }
257
-
258
281
  function pickMonth(idx: number) {
259
282
  viewMonth.value = idx
260
283
  view.value = 'date'
@@ -278,15 +301,6 @@ function pickToday() {
278
301
  view.value = 'date'
279
302
  emitValue(formatYmd(now))
280
303
  }
281
-
282
- function setTime(k: 'h' | 'm' | 's', e: Event) {
283
- const n = Number((e.target as HTMLInputElement).value)
284
- if (!Number.isFinite(n)) return
285
- const iso = selectedIso.value || formatYmd(new Date())
286
- const next = { ...time.value, [k]: Math.max(0, Math.min(k === 'h' ? 23 : 59, n)) }
287
- const v = mergeDateAndTime(iso, next.h, next.m, next.s, precision.value)
288
- emit('update:modelValue', v)
289
- }
290
304
  </script>
291
305
 
292
306
  <style lang="scss" scoped>
@@ -416,16 +430,14 @@ function setTime(k: 'h' | 'm' | 's', e: Event) {
416
430
  }
417
431
  }
418
432
 
419
- .vm-dt-cal__body--months,
420
- .vm-dt-cal__body--years {
433
+ .vm-dt-cal__body--months {
421
434
  display: grid;
422
435
  grid-template-columns: repeat(3, 1fr);
423
436
  gap: 8px 6px;
424
437
  padding: 4px 0 8px;
425
438
  }
426
439
 
427
- .vm-dt-cal__month,
428
- .vm-dt-cal__year {
440
+ .vm-dt-cal__cell {
429
441
  height: 36px;
430
442
  border: 0;
431
443
  border-radius: 8px;
@@ -474,6 +486,7 @@ function setTime(k: 'h' | 'm' | 's', e: Event) {
474
486
  color: inherit;
475
487
  font-size: 13px;
476
488
  outline: none;
489
+ user-select: text;
477
490
 
478
491
  &:focus {
479
492
  border-color: var(--primary, var(--vm-brand, #4e5dff));
@@ -1,12 +1,11 @@
1
1
  <template>
2
2
  <VmDatetimeField
3
- :model-value="inner"
3
+ :model-value="modelValue || null"
4
4
  :precision="precision"
5
5
  :placeholder="placeholderText"
6
6
  :disabled="disabled"
7
7
  :style="{ width }"
8
8
  @update:model-value="onUpdate"
9
- @change="onUpdate"
10
9
  />
11
10
  </template>
12
11
 
@@ -14,6 +13,7 @@
14
13
  import { computed } from 'vue'
15
14
  import { useCrud } from '../useCrud'
16
15
  import VmDatetimeField from './vm-datetime-field.vue'
16
+ import type { DateTimePrecision } from '../../../shared/datetime-picker'
17
17
 
18
18
  defineOptions({ name: 'vm-date-picker' })
19
19
 
@@ -21,7 +21,6 @@ const props = withDefaults(
21
21
  defineProps<{
22
22
  modelValue?: string | null
23
23
  type?: 'date' | 'datetime' | 'month' | 'year'
24
- valueFormat?: string
25
24
  prop?: string
26
25
  width?: string
27
26
  disabled?: boolean
@@ -42,22 +41,27 @@ const emit = defineEmits<{
42
41
 
43
42
  const crud = useCrud()
44
43
 
45
- const precision = computed(() => {
46
- if (props.type === 'datetime') return 'minute'
47
- if (props.type === 'month') return 'month'
48
- if (props.type === 'year') return 'year'
49
- return 'day'
50
- })
44
+ const TYPE_PRECISION: Record<string, DateTimePrecision> = {
45
+ date: 'day',
46
+ datetime: 'datetime',
47
+ month: 'month',
48
+ year: 'year',
49
+ }
51
50
 
52
- const placeholderText = computed(() => {
53
- if (props.placeholder) return props.placeholder
54
- if (props.type === 'datetime') return '选择日期时间'
55
- if (props.type === 'month') return '选择月份'
56
- if (props.type === 'year') return '选择年份'
57
- return '选择日期'
58
- })
51
+ const TYPE_PLACEHOLDER: Record<string, string> = {
52
+ date: '选择日期',
53
+ datetime: '选择日期时间',
54
+ month: '选择月份',
55
+ year: '选择年份',
56
+ }
59
57
 
60
- const inner = computed(() => props.modelValue || null)
58
+ const precision = computed(
59
+ () => TYPE_PRECISION[props.type] ?? ('day' as DateTimePrecision),
60
+ )
61
+
62
+ const placeholderText = computed(
63
+ () => props.placeholder || TYPE_PLACEHOLDER[props.type] || '选择日期',
64
+ )
61
65
 
62
66
  function onUpdate(v: string | null) {
63
67
  const out = v || ''
@@ -2,36 +2,35 @@
2
2
  <div class="vm-date-range" :class="{ 'is-disabled': disabled }">
3
3
  <VmDatetimeField
4
4
  class="vm-date-range__field"
5
- :model-value="props.modelValue?.[0] ?? null"
5
+ :model-value="modelValue?.[0] ?? null"
6
6
  :precision="precision"
7
7
  :placeholder="startPlaceholder"
8
8
  :disabled="disabled"
9
9
  @update:model-value="(v) => set(0, v)"
10
- @change="(v) => set(0, v)"
11
10
  />
12
11
  <span class="vm-date-range__sep">-</span>
13
12
  <VmDatetimeField
14
13
  class="vm-date-range__field"
15
- :model-value="props.modelValue?.[1] ?? null"
14
+ :model-value="modelValue?.[1] ?? null"
16
15
  :precision="precision"
17
16
  :placeholder="endPlaceholder"
18
17
  :disabled="disabled"
19
18
  @update:model-value="(v) => set(1, v)"
20
- @change="(v) => set(1, v)"
21
19
  />
22
20
  </div>
23
21
  </template>
24
22
 
25
23
  <script setup lang="ts">
26
- defineOptions({ name: 'vm-date-range' })
27
-
28
24
  import VmDatetimeField from './vm-datetime-field.vue'
25
+ import type { DateTimePrecision } from '../../../shared/datetime-picker'
26
+
27
+ defineOptions({ name: 'vm-date-range' })
29
28
 
30
29
  const props = withDefaults(
31
30
  defineProps<{
32
31
  modelValue?: Array<string | null>
33
- /** 时间精度:year | month | day | hour | minute | second */
34
- precision?: 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second'
32
+ /** year | month | day | datetime */
33
+ precision?: DateTimePrecision
35
34
  startPlaceholder?: string
36
35
  endPlaceholder?: string
37
36
  disabled?: boolean
@@ -65,7 +64,6 @@ function set(idx: 0 | 1, v: string | null) {
65
64
  box-sizing: border-box;
66
65
  width: 100%;
67
66
  align-items: center;
68
- gap: 0;
69
67
 
70
68
  &.is-disabled {
71
69
  opacity: 0.55;
@@ -79,12 +77,11 @@ function set(idx: 0 | 1, v: string | null) {
79
77
  }
80
78
 
81
79
  .vm-date-range__sep {
82
- flex: 0 0 auto;
80
+ flex: none;
83
81
  padding: 0 8px;
84
82
  color: var(--muted-foreground, #94a3b8);
85
83
  font-size: 13px;
86
84
  font-weight: 600;
87
- line-height: 1;
88
85
  user-select: none;
89
86
  }
90
87
  </style>
@@ -2,25 +2,23 @@
2
2
  <div
3
3
  ref="rootRef"
4
4
  class="vm-dt-field"
5
- :class="{ 'is-disabled': disabled, 'is-open': open }"
5
+ :class="{ 'is-disabled': disabled }"
6
6
  @click="onRootClick"
7
7
  >
8
- <div class="vm-dt-field__side">
9
- <div class="vm-dt-field__box">
10
- <span v-if="!displayText && placeholder" class="vm-dt-field__ph">{{
11
- placeholder
12
- }}</span>
13
- <span class="vm-dt-field__val">{{ displayText }}</span>
14
- </div>
15
- <i class="ri-calendar-line vm-dt-field__icon" aria-hidden="true" />
8
+ <div class="vm-dt-field__box">
9
+ <span v-if="!displayText && placeholder" class="vm-dt-field__ph">{{
10
+ placeholder
11
+ }}</span>
12
+ <span class="vm-dt-field__val">{{ displayText }}</span>
16
13
  </div>
14
+ <i class="ri-calendar-line vm-dt-field__icon" aria-hidden="true" />
17
15
 
18
16
  <Teleport to="body">
19
- <!-- vm-dialog-float:Dialog modal body 为 pointer-events:none,且须被 preventDialogOutsideClose 识别 -->
17
+ <!-- vm-dialog-float:Dialog modal 下须被 preventDialogOutsideClose 识别 -->
20
18
  <div
21
19
  v-if="open"
22
20
  ref="panelWrapRef"
23
- class="vm-dt-field__panel-wrap vm-dialog-float"
21
+ class="vm-dialog-float"
24
22
  :style="panelStyle"
25
23
  @pointerdown.stop
26
24
  @mousedown.stop
@@ -37,7 +35,7 @@
37
35
  </template>
38
36
 
39
37
  <script setup lang="ts">
40
- import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
38
+ import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
41
39
  import VmDateCalendarPanel from './vm-date-calendar-panel.vue'
42
40
  import {
43
41
  dateTimeDisplayText,
@@ -73,7 +71,6 @@ const open = ref(false)
73
71
  const panelStyle = ref<Record<string, string>>({})
74
72
 
75
73
  const precision = computed(() => normalizeDateTimePrecision(props.precision))
76
-
77
74
  const displayText = computed(() =>
78
75
  dateTimeDisplayText(props.modelValue, precision.value),
79
76
  )
@@ -82,7 +79,6 @@ function syncPanelPos() {
82
79
  const el = rootRef.value
83
80
  if (!el) return
84
81
  const r = el.getBoundingClientRect()
85
- // 贴触发框左侧 + 底部
86
82
  panelStyle.value = {
87
83
  position: 'fixed',
88
84
  left: `${r.left}px`,
@@ -95,24 +91,20 @@ function close() {
95
91
  open.value = false
96
92
  }
97
93
 
98
- function openPanel() {
94
+ function onRootClick() {
99
95
  if (props.disabled) return
96
+ if (open.value) {
97
+ close()
98
+ return
99
+ }
100
100
  open.value = true
101
101
  syncPanelPos()
102
102
  }
103
103
 
104
- function onRootClick() {
105
- if (props.disabled) return
106
- if (open.value) close()
107
- else openPanel()
108
- }
109
-
110
104
  function onPick(v: string) {
111
105
  emit('update:modelValue', v)
112
106
  emit('change', v)
113
- if (precision.value === 'day' || precision.value === 'month' || precision.value === 'year') {
114
- close()
115
- }
107
+ if (precision.value !== 'datetime') close()
116
108
  }
117
109
 
118
110
  function onClear() {
@@ -132,10 +124,6 @@ function onViewportChange() {
132
124
  if (open.value) syncPanelPos()
133
125
  }
134
126
 
135
- watch(open, (v) => {
136
- if (v) syncPanelPos()
137
- })
138
-
139
127
  onMounted(() => {
140
128
  document.addEventListener('pointerdown', onDocPointer, true)
141
129
  window.addEventListener('resize', onViewportChange)
@@ -152,14 +140,17 @@ onBeforeUnmount(() => {
152
140
  <style lang="scss" scoped>
153
141
  .vm-dt-field {
154
142
  box-sizing: border-box;
143
+ display: flex;
155
144
  width: 100%;
156
145
  height: var(--vm-control-height, 38px);
146
+ align-items: center;
147
+ gap: 6px;
148
+ padding: 0 10px;
157
149
  border: 1px solid transparent;
158
150
  border-radius: 12px;
159
151
  background: var(--muted, #f4f6fb);
160
152
  cursor: pointer;
161
153
  outline: none;
162
- /* 弹层触发:不展示点击聚焦描边 */
163
154
 
164
155
  &.is-disabled {
165
156
  opacity: 0.55;
@@ -168,14 +159,6 @@ onBeforeUnmount(() => {
168
159
  }
169
160
  }
170
161
 
171
- .vm-dt-field__side {
172
- display: flex;
173
- height: 100%;
174
- align-items: center;
175
- gap: 6px;
176
- padding: 0 10px;
177
- }
178
-
179
162
  .vm-dt-field__box {
180
163
  position: relative;
181
164
  flex: 1 1 auto;
@@ -1 +1 @@
1
- const _0x2ca011=_0x2c80;function _0x2c80(_0x2125f2,_0x5a8bf4){_0x2125f2=_0x2125f2-0x1d0;const _0x3f02f5=_0x3f02();let _0x2c80c1=_0x3f02f5[_0x2125f2];if(_0x2c80['MQxmGs']===undefined){var _0x3c6abe=function(_0x1d1c05){const _0x45755b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1e13f1='',_0x2f9d9f='';for(let _0x16e271=0x0,_0x468ccb,_0x4679ff,_0x328f6f=0x0;_0x4679ff=_0x1d1c05['charAt'](_0x328f6f++);~_0x4679ff&&(_0x468ccb=_0x16e271%0x4?_0x468ccb*0x40+_0x4679ff:_0x4679ff,_0x16e271++%0x4)?_0x1e13f1+=String['fromCharCode'](0xff&_0x468ccb>>(-0x2*_0x16e271&0x6)):0x0){_0x4679ff=_0x45755b['indexOf'](_0x4679ff);}for(let _0x54ab12=0x0,_0x43ef65=_0x1e13f1['length'];_0x54ab12<_0x43ef65;_0x54ab12++){_0x2f9d9f+='%'+('00'+_0x1e13f1['charCodeAt'](_0x54ab12)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2f9d9f);};_0x2c80['ZwQhpK']=_0x3c6abe,_0x2c80['doqpwB']={},_0x2c80['MQxmGs']=!![];}const _0x3835eb=_0x3f02f5[0x0],_0x23b6fb=_0x2125f2+_0x3835eb,_0x4c52a0=_0x2c80['doqpwB'][_0x23b6fb];return!_0x4c52a0?(_0x2c80c1=_0x2c80['ZwQhpK'](_0x2c80c1),_0x2c80['doqpwB'][_0x23b6fb]=_0x2c80c1):_0x2c80c1=_0x4c52a0,_0x2c80c1;}(function(_0xd783b0,_0x3ac3af){const _0x21c8c2=_0x2c80,_0x17e24b=_0xd783b0();while(!![]){try{const _0x424f2f=parseInt(_0x21c8c2(0x1d6))/0x1+parseInt(_0x21c8c2(0x1d8))/0x2+-parseInt(_0x21c8c2(0x1d9))/0x3*(-parseInt(_0x21c8c2(0x1de))/0x4)+parseInt(_0x21c8c2(0x1db))/0x5+parseInt(_0x21c8c2(0x1d7))/0x6*(parseInt(_0x21c8c2(0x1d4))/0x7)+parseInt(_0x21c8c2(0x1dc))/0x8+parseInt(_0x21c8c2(0x1e0))/0x9*(-parseInt(_0x21c8c2(0x1d5))/0xa);if(_0x424f2f===_0x3ac3af)break;else _0x17e24b['push'](_0x17e24b['shift']());}catch(_0x158d82){_0x17e24b['push'](_0x17e24b['shift']());}}}(_0x3f02,0xbaf4a));import{Node,mergeAttributes}from'@tiptap/core';export const VmRichtextVideo=Node[_0x2ca011(0x1d2)]({'name':_0x2ca011(0x1d0),'group':_0x2ca011(0x1d1),'atom':!![],'selectable':!![],'draggable':!![],'addAttributes'(){return{'src':{'default':null},'controls':{'default':!![]}};},'parseHTML'(){return[{'tag':'video[src]'}];},'renderHTML'({HTMLAttributes:_0x1e13f1}){const _0x515299=_0x2ca011;return[_0x515299(0x1d0),mergeAttributes(_0x1e13f1,{'controls':!![],'style':_0x515299(0x1dd)})];},'addCommands'(){const _0x4d8ab0=_0x2ca011;return{'setVideo':_0x2f9d9f=>({commands:_0x16e271})=>_0x16e271[_0x4d8ab0(0x1da)]({'type':this[_0x4d8ab0(0x1df)],'attrs':_0x2f9d9f})};}});function _0x3f02(){const _0x46b634=['BMfTzq','nJq0nhHrA2jHua','DMLKzw8','yMXVy2S','y3jLyxrL','8j+qU+kaJEkDHo+4JW','mte2nZyWCLnpuK1d','ntiZnZbMvffYww4','nZmXotK3AKnit2fx','mJG4CvPxrhHd','mtG0ndK2D01Ry1j1','mtqXm0TxEhDoCa','Aw5Zzxj0q29UDgvUDa','mZi1mtGXmgrhuxzWwG','odqXodGYngTmA3bfqG','Bwf4lxDPzhrOoJeWmcu7yM9YzgvYlxjHzgL1CZO4ChG','mtaWodHntwnlqMi'];_0x3f02=function(){return _0x46b634;};return _0x3f02();}export const VM_RICHTEXT_EMOJIS=['\uD83D\uDE00','\uD83D\uDE03','\uD83D\uDE04','\uD83D\uDE01','\uD83D\uDE06','\uD83D\uDE05','\uD83E\uDD23','\uD83D\uDE02','\uD83D\uDE42','\uD83D\uDE43','\uD83D\uDE09','\uD83D\uDE0A','\uD83D\uDE07','\uD83E\uDD70','\uD83D\uDE0D','\uD83E\uDD29','\uD83D\uDE18','\uD83D\uDE17','\uD83D\uDE1A','\uD83D\uDE19','\uD83D\uDE0B','\uD83D\uDE1B','\uD83D\uDE1C','\uD83E\uDD2A','\uD83D\uDE1D','\uD83E\uDD11','\uD83E\uDD17','\uD83E\uDD2D','\uD83E\uDD2B','\uD83E\uDD14','\uD83E\uDD10','\uD83E\uDD28','\uD83D\uDE10','\uD83D\uDE11','\uD83D\uDE36','\uD83D\uDE0F','\uD83D\uDE12','\uD83D\uDE44','\uD83D\uDE2C','\uD83E\uDD25','\uD83D\uDE0C','\uD83D\uDE14','\uD83D\uDE2A','\uD83E\uDD24','\uD83D\uDE34','\uD83D\uDE37','\uD83E\uDD12','\uD83E\uDD15','\uD83E\uDD22','\uD83E\uDD2E','\uD83E\uDD75','\uD83E\uDD76','\uD83E\uDD74','\uD83D\uDE35','\uD83E\uDD2F','\uD83E\uDD20','\uD83E\uDD73','\uD83D\uDE0E','\uD83E\uDD13','\uD83E\uDDD0','\uD83D\uDE15','\uD83D\uDE1F','\uD83D\uDE41','☹️','\uD83D\uDE2E','\uD83D\uDE2F','\uD83D\uDE32','\uD83D\uDE33','\uD83E\uDD7A','\uD83D\uDE26','\uD83D\uDE27','\uD83D\uDE28','\uD83D\uDE30','\uD83D\uDE25','\uD83D\uDE22','\uD83D\uDE2D','\uD83D\uDE31','\uD83D\uDE16','\uD83D\uDE23','\uD83D\uDE1E','\uD83D\uDE13','\uD83D\uDE29','\uD83D\uDE2B','\uD83E\uDD71','\uD83D\uDE24','\uD83D\uDE21','\uD83D\uDE20','\uD83E\uDD2C','\uD83D\uDE08','\uD83D\uDC7F','\uD83D\uDC4B','\uD83E\uDD1A','\uD83D\uDD90','✋','\uD83D\uDD96','\uD83D\uDC4C','\uD83E\uDD0C','\uD83E\uDD0F','✌️','\uD83E\uDD1E','\uD83E\uDD1F','\uD83E\uDD18','\uD83E\uDD19','\uD83D\uDC48','\uD83D\uDC49','\uD83D\uDC46','\uD83D\uDD95','\uD83D\uDC47','☝️','\uD83D\uDC4D','\uD83D\uDC4E','✊','\uD83D\uDC4A','\uD83E\uDD1B','\uD83E\uDD1C','\uD83D\uDC4F','\uD83D\uDE4C','\uD83D\uDC50','\uD83E\uDD32','\uD83E\uDD1D','\uD83D\uDE4F','\uD83D\uDCAA','\uD83E\uDDBE','✍️','\uD83D\uDC85','\uD83E\uDD33','❤️','\uD83E\uDDE1','\uD83D\uDC9B','\uD83D\uDC9A','\uD83D\uDC99','\uD83D\uDC9C','\uD83D\uDDA4','\uD83E\uDD0D','\uD83E\uDD0E','\uD83D\uDC94','❣️','\uD83D\uDC95','\uD83D\uDC9E','\uD83D\uDC93','\uD83D\uDC97','\uD83D\uDC96','\uD83D\uDC98','\uD83D\uDC9D','\uD83D\uDC9F','☮️','✝️','☪️','\uD83D\uDD49','☸️','✡️','\uD83D\uDD2F','\uD83D\uDD4E','☯️','☦️','\uD83D\uDED0','⭐','\uD83C\uDF1F','✨','⚡','\uD83D\uDD25','\uD83D\uDCA5','☀️','\uD83C\uDF19','⭐️','\uD83C\uDF08','✅','❌','⭕','❗','❓','‼️','⁉️','\uD83D\uDCAF','\uD83D\uDD14','\uD83D\uDD15','\uD83D\uDCCC','\uD83D\uDCCD','\uD83D\uDCCE','\uD83D\uDD17','\uD83D\uDD12','\uD83D\uDD13','\uD83D\uDD11','\uD83D\uDDDD','\uD83D\uDCA1','\uD83D\uDD26','\uD83D\uDCDD','✏️','✒️','\uD83D\uDD8A','\uD83D\uDD8B','\uD83D\uDD8C','\uD83D\uDD8D','\uD83D\uDCBC','\uD83D\uDCC1','\uD83D\uDCC2','\uD83D\uDCC5','\uD83D\uDCC6','\uD83D\uDDD3','\uD83D\uDCC7','\uD83D\uDCC8','\uD83D\uDCC9','\uD83D\uDCCA','\uD83D\uDCCB','\uD83D\uDCE4','\uD83D\uDCE5','\uD83D\uDCE6','\uD83D\uDCEB','\uD83D\uDCEC','\uD83D\uDCED','\uD83D\uDCEE','\uD83D\uDCEF','\uD83D\uDCDC','\uD83D\uDCC3','\uD83D\uDCC4','\uD83D\uDCD1','☕','\uD83C\uDF75','\uD83E\uDDC3','\uD83E\uDD64','\uD83E\uDDCB','\uD83C\uDF7A','\uD83C\uDF7B','\uD83E\uDD42','\uD83C\uDF77','\uD83C\uDF78','\uD83C\uDF55','\uD83C\uDF54','\uD83C\uDF5F','\uD83C\uDF2D','\uD83C\uDF7F','\uD83C\uDF69','\uD83C\uDF6A','\uD83C\uDF82','\uD83C\uDF70','\uD83E\uDDC1','\uD83C\uDF4E','\uD83C\uDF4A','\uD83C\uDF4B','\uD83C\uDF4C','\uD83C\uDF49','\uD83C\uDF47','\uD83C\uDF53','\uD83E\uDED0','\uD83C\uDF52','\uD83C\uDF51','⚽','\uD83C\uDFC0','\uD83C\uDFC8','⚾','\uD83C\uDFBE','\uD83C\uDFD0','\uD83C\uDFC9','\uD83C\uDFB1','\uD83C\uDFD3','\uD83C\uDFF8','\uD83C\uDFAE','\uD83D\uDD79','\uD83C\uDFB2','\uD83E\uDDE9','\uD83C\uDFAF','\uD83C\uDFB3','\uD83C\uDFB0','\uD83C\uDFB8','\uD83C\uDFB9','\uD83E\uDD41','\uD83C\uDFA4','\uD83C\uDFA7','\uD83C\uDFAC','\uD83C\uDFA5','\uD83D\uDCF7','\uD83D\uDCF8','\uD83D\uDCF9','\uD83D\uDCFA','\uD83D\uDCFB','\uD83C\uDF99','\uD83D\uDE80','✈️','\uD83D\uDEE9','\uD83D\uDEEB','\uD83D\uDEEC','\uD83D\uDEF0','\uD83D\uDCBA','\uD83D\uDEF8','\uD83D\uDE81','\uD83D\uDEF6','\uD83D\uDE97','\uD83D\uDE95','\uD83D\uDE99','\uD83D\uDE8C','\uD83D\uDE8E','\uD83C\uDFCE','\uD83D\uDE93','\uD83D\uDE91','\uD83D\uDE92','\uD83D\uDE90','\uD83C\uDFE0','\uD83C\uDFE1','\uD83C\uDFE2','\uD83C\uDFE3','\uD83C\uDFE4','\uD83C\uDFE5','\uD83C\uDFE6','\uD83C\uDFE8','\uD83C\uDFE9','\uD83C\uDFEA','\uD83D\uDC36','\uD83D\uDC31','\uD83D\uDC2D','\uD83D\uDC39','\uD83D\uDC30','\uD83E\uDD8A','\uD83D\uDC3B','\uD83D\uDC3C',_0x2ca011(0x1d3),'\uD83D\uDC28','\uD83D\uDC2F','\uD83E\uDD81','\uD83D\uDC2E','\uD83D\uDC37','\uD83D\uDC38','\uD83D\uDC35','\uD83D\uDE48','\uD83D\uDE49','\uD83D\uDE4A','\uD83D\uDC12','\uD83D\uDC14','\uD83D\uDC27','\uD83D\uDC26','\uD83D\uDC24','\uD83D\uDC23','\uD83D\uDC25','\uD83E\uDD86','\uD83E\uDD85','\uD83E\uDD89','\uD83E\uDD87','\uD83C\uDF89','\uD83C\uDF8A','\uD83C\uDF88','\uD83C\uDF81','\uD83C\uDF80','\uD83C\uDF97','\uD83C\uDFAB','\uD83C\uDF9F','\uD83C\uDFC6','\uD83C\uDFC5'];
1
+ const _0x4b4427=_0x3cd8;(function(_0x4c3f4b,_0xa87c4e){const _0x5887ab=_0x3cd8,_0x2a532a=_0x4c3f4b();while(!![]){try{const _0x4fd7d5=-parseInt(_0x5887ab(0x1c2))/0x1*(parseInt(_0x5887ab(0x1ce))/0x2)+parseInt(_0x5887ab(0x1c9))/0x3*(parseInt(_0x5887ab(0x1cf))/0x4)+parseInt(_0x5887ab(0x1c7))/0x5*(-parseInt(_0x5887ab(0x1c3))/0x6)+parseInt(_0x5887ab(0x1c8))/0x7+parseInt(_0x5887ab(0x1c6))/0x8+parseInt(_0x5887ab(0x1cb))/0x9+-parseInt(_0x5887ab(0x1d0))/0xa;if(_0x4fd7d5===_0xa87c4e)break;else _0x2a532a['push'](_0x2a532a['shift']());}catch(_0x40b08f){_0x2a532a['push'](_0x2a532a['shift']());}}}(_0x2497,0x19e3c));function _0x2497(){const _0x5e3d00=['mMPUEevqzW','ntq2mJi4DuPPy0Xy','mJq0mdm1mgf2yKz4CG','mtmXnZa5z0P6B2Hl','mtjpq1b3BKq','DMLKzw8','8j+qU+kaJEkDHo+4JW','mtm1nZuYofDnBhDTqG','mJaWnJKWy2DjsvfU','odi3odyYwg9NEu5Y','m29wAhfzAW','BMfTzq','mtiZnZK1mhLuC01HyW','yMXVy2S','Bwf4lxDPzhrOoJeWmcu7yM9YzgvYlxjHzgL1CZO4ChG'];_0x2497=function(){return _0x5e3d00;};return _0x2497();}import{Node,mergeAttributes}from'@tiptap/core';function _0x3cd8(_0xff2879,_0x1e6bfd){_0xff2879=_0xff2879-0x1c2;const _0x249721=_0x2497();let _0x3cd86e=_0x249721[_0xff2879];if(_0x3cd8['JpLEwV']===undefined){var _0x325485=function(_0x5e4660){const _0x166933='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x58c4e9='',_0x2073c9='';for(let _0x4f243d=0x0,_0xa6626,_0x12144c,_0x4e632a=0x0;_0x12144c=_0x5e4660['charAt'](_0x4e632a++);~_0x12144c&&(_0xa6626=_0x4f243d%0x4?_0xa6626*0x40+_0x12144c:_0x12144c,_0x4f243d++%0x4)?_0x58c4e9+=String['fromCharCode'](0xff&_0xa6626>>(-0x2*_0x4f243d&0x6)):0x0){_0x12144c=_0x166933['indexOf'](_0x12144c);}for(let _0x1da44f=0x0,_0x4a4689=_0x58c4e9['length'];_0x1da44f<_0x4a4689;_0x1da44f++){_0x2073c9+='%'+('00'+_0x58c4e9['charCodeAt'](_0x1da44f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2073c9);};_0x3cd8['itavRO']=_0x325485,_0x3cd8['SgVyCT']={},_0x3cd8['JpLEwV']=!![];}const _0x5cbc48=_0x249721[0x0],_0x33d9dc=_0xff2879+_0x5cbc48,_0x560f4f=_0x3cd8['SgVyCT'][_0x33d9dc];return!_0x560f4f?(_0x3cd86e=_0x3cd8['itavRO'](_0x3cd86e),_0x3cd8['SgVyCT'][_0x33d9dc]=_0x3cd86e):_0x3cd86e=_0x560f4f,_0x3cd86e;}export const VmRichtextVideo=Node['create']({'name':_0x4b4427(0x1c4),'group':_0x4b4427(0x1cc),'atom':!![],'selectable':!![],'draggable':!![],'addAttributes'(){return{'src':{'default':null},'controls':{'default':!![]}};},'parseHTML'(){return[{'tag':'video[src]'}];},'renderHTML'({HTMLAttributes:_0x58c4e9}){const _0x4e0037=_0x4b4427;return[_0x4e0037(0x1c4),mergeAttributes(_0x58c4e9,{'controls':!![],'style':_0x4e0037(0x1cd)})];},'addCommands'(){const _0x546028=_0x4b4427;return{'setVideo':_0x2073c9=>({commands:_0x4f243d})=>_0x4f243d['insertContent']({'type':this[_0x546028(0x1ca)],'attrs':_0x2073c9})};}});export const VM_RICHTEXT_EMOJIS=['\uD83D\uDE00','\uD83D\uDE03','\uD83D\uDE04','\uD83D\uDE01','\uD83D\uDE06','\uD83D\uDE05','\uD83E\uDD23','\uD83D\uDE02','\uD83D\uDE42','\uD83D\uDE43','\uD83D\uDE09','\uD83D\uDE0A','\uD83D\uDE07','\uD83E\uDD70','\uD83D\uDE0D','\uD83E\uDD29','\uD83D\uDE18','\uD83D\uDE17','\uD83D\uDE1A','\uD83D\uDE19','\uD83D\uDE0B','\uD83D\uDE1B','\uD83D\uDE1C','\uD83E\uDD2A','\uD83D\uDE1D','\uD83E\uDD11','\uD83E\uDD17','\uD83E\uDD2D','\uD83E\uDD2B','\uD83E\uDD14','\uD83E\uDD10','\uD83E\uDD28','\uD83D\uDE10','\uD83D\uDE11','\uD83D\uDE36','\uD83D\uDE0F','\uD83D\uDE12','\uD83D\uDE44','\uD83D\uDE2C','\uD83E\uDD25','\uD83D\uDE0C','\uD83D\uDE14','\uD83D\uDE2A','\uD83E\uDD24','\uD83D\uDE34','\uD83D\uDE37','\uD83E\uDD12','\uD83E\uDD15','\uD83E\uDD22','\uD83E\uDD2E','\uD83E\uDD75','\uD83E\uDD76','\uD83E\uDD74','\uD83D\uDE35','\uD83E\uDD2F','\uD83E\uDD20','\uD83E\uDD73','\uD83D\uDE0E','\uD83E\uDD13','\uD83E\uDDD0','\uD83D\uDE15','\uD83D\uDE1F','\uD83D\uDE41','☹️','\uD83D\uDE2E','\uD83D\uDE2F','\uD83D\uDE32','\uD83D\uDE33','\uD83E\uDD7A','\uD83D\uDE26','\uD83D\uDE27','\uD83D\uDE28','\uD83D\uDE30','\uD83D\uDE25','\uD83D\uDE22','\uD83D\uDE2D','\uD83D\uDE31','\uD83D\uDE16','\uD83D\uDE23','\uD83D\uDE1E','\uD83D\uDE13','\uD83D\uDE29','\uD83D\uDE2B','\uD83E\uDD71','\uD83D\uDE24','\uD83D\uDE21','\uD83D\uDE20','\uD83E\uDD2C','\uD83D\uDE08','\uD83D\uDC7F','\uD83D\uDC4B','\uD83E\uDD1A','\uD83D\uDD90','✋','\uD83D\uDD96','\uD83D\uDC4C','\uD83E\uDD0C','\uD83E\uDD0F','✌️','\uD83E\uDD1E','\uD83E\uDD1F','\uD83E\uDD18','\uD83E\uDD19','\uD83D\uDC48','\uD83D\uDC49','\uD83D\uDC46','\uD83D\uDD95','\uD83D\uDC47','☝️','\uD83D\uDC4D','\uD83D\uDC4E','✊','\uD83D\uDC4A','\uD83E\uDD1B','\uD83E\uDD1C','\uD83D\uDC4F','\uD83D\uDE4C','\uD83D\uDC50','\uD83E\uDD32','\uD83E\uDD1D','\uD83D\uDE4F','\uD83D\uDCAA','\uD83E\uDDBE','✍️','\uD83D\uDC85','\uD83E\uDD33','❤️','\uD83E\uDDE1','\uD83D\uDC9B','\uD83D\uDC9A','\uD83D\uDC99','\uD83D\uDC9C','\uD83D\uDDA4','\uD83E\uDD0D','\uD83E\uDD0E','\uD83D\uDC94','❣️','\uD83D\uDC95','\uD83D\uDC9E','\uD83D\uDC93','\uD83D\uDC97','\uD83D\uDC96','\uD83D\uDC98','\uD83D\uDC9D','\uD83D\uDC9F','☮️','✝️','☪️','\uD83D\uDD49','☸️','✡️','\uD83D\uDD2F','\uD83D\uDD4E','☯️','☦️','\uD83D\uDED0','⭐','\uD83C\uDF1F','✨','⚡','\uD83D\uDD25','\uD83D\uDCA5','☀️','\uD83C\uDF19','⭐️','\uD83C\uDF08','✅','❌','⭕','❗','❓','‼️','⁉️','\uD83D\uDCAF','\uD83D\uDD14','\uD83D\uDD15','\uD83D\uDCCC','\uD83D\uDCCD','\uD83D\uDCCE','\uD83D\uDD17','\uD83D\uDD12','\uD83D\uDD13','\uD83D\uDD11','\uD83D\uDDDD','\uD83D\uDCA1','\uD83D\uDD26','\uD83D\uDCDD','✏️','✒️','\uD83D\uDD8A','\uD83D\uDD8B','\uD83D\uDD8C','\uD83D\uDD8D','\uD83D\uDCBC','\uD83D\uDCC1','\uD83D\uDCC2','\uD83D\uDCC5','\uD83D\uDCC6','\uD83D\uDDD3','\uD83D\uDCC7','\uD83D\uDCC8','\uD83D\uDCC9','\uD83D\uDCCA','\uD83D\uDCCB','\uD83D\uDCE4','\uD83D\uDCE5','\uD83D\uDCE6','\uD83D\uDCEB','\uD83D\uDCEC','\uD83D\uDCED','\uD83D\uDCEE','\uD83D\uDCEF','\uD83D\uDCDC','\uD83D\uDCC3','\uD83D\uDCC4','\uD83D\uDCD1','☕','\uD83C\uDF75','\uD83E\uDDC3','\uD83E\uDD64','\uD83E\uDDCB','\uD83C\uDF7A','\uD83C\uDF7B','\uD83E\uDD42','\uD83C\uDF77','\uD83C\uDF78','\uD83C\uDF55','\uD83C\uDF54','\uD83C\uDF5F','\uD83C\uDF2D','\uD83C\uDF7F','\uD83C\uDF69','\uD83C\uDF6A','\uD83C\uDF82','\uD83C\uDF70','\uD83E\uDDC1','\uD83C\uDF4E','\uD83C\uDF4A','\uD83C\uDF4B','\uD83C\uDF4C','\uD83C\uDF49','\uD83C\uDF47','\uD83C\uDF53','\uD83E\uDED0','\uD83C\uDF52','\uD83C\uDF51','⚽','\uD83C\uDFC0','\uD83C\uDFC8','⚾','\uD83C\uDFBE','\uD83C\uDFD0','\uD83C\uDFC9','\uD83C\uDFB1','\uD83C\uDFD3','\uD83C\uDFF8','\uD83C\uDFAE','\uD83D\uDD79','\uD83C\uDFB2','\uD83E\uDDE9','\uD83C\uDFAF','\uD83C\uDFB3','\uD83C\uDFB0','\uD83C\uDFB8','\uD83C\uDFB9','\uD83E\uDD41','\uD83C\uDFA4','\uD83C\uDFA7','\uD83C\uDFAC','\uD83C\uDFA5','\uD83D\uDCF7','\uD83D\uDCF8','\uD83D\uDCF9','\uD83D\uDCFA','\uD83D\uDCFB','\uD83C\uDF99','\uD83D\uDE80','✈️','\uD83D\uDEE9','\uD83D\uDEEB','\uD83D\uDEEC','\uD83D\uDEF0','\uD83D\uDCBA','\uD83D\uDEF8','\uD83D\uDE81','\uD83D\uDEF6','\uD83D\uDE97','\uD83D\uDE95','\uD83D\uDE99','\uD83D\uDE8C','\uD83D\uDE8E','\uD83C\uDFCE','\uD83D\uDE93','\uD83D\uDE91','\uD83D\uDE92','\uD83D\uDE90','\uD83C\uDFE0','\uD83C\uDFE1','\uD83C\uDFE2','\uD83C\uDFE3','\uD83C\uDFE4','\uD83C\uDFE5','\uD83C\uDFE6','\uD83C\uDFE8','\uD83C\uDFE9','\uD83C\uDFEA','\uD83D\uDC36','\uD83D\uDC31','\uD83D\uDC2D','\uD83D\uDC39','\uD83D\uDC30','\uD83E\uDD8A','\uD83D\uDC3B','\uD83D\uDC3C',_0x4b4427(0x1c5),'\uD83D\uDC28','\uD83D\uDC2F','\uD83E\uDD81','\uD83D\uDC2E','\uD83D\uDC37','\uD83D\uDC38','\uD83D\uDC35','\uD83D\uDE48','\uD83D\uDE49','\uD83D\uDE4A','\uD83D\uDC12','\uD83D\uDC14','\uD83D\uDC27','\uD83D\uDC26','\uD83D\uDC24','\uD83D\uDC23','\uD83D\uDC25','\uD83E\uDD86','\uD83E\uDD85','\uD83E\uDD89','\uD83E\uDD87','\uD83C\uDF89','\uD83C\uDF8A','\uD83C\uDF88','\uD83C\uDF81','\uD83C\uDF80','\uD83C\uDF97','\uD83C\uDFAB','\uD83C\uDF9F','\uD83C\uDFC6','\uD83C\uDFC5'];