@strapi/admin 4.2.0-alpha.O → 4.2.0-beta.0

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 (80) hide show
  1. package/admin/src/app.js +7 -4
  2. package/admin/src/assets/images/icon_made-by-strapi.svg +5 -0
  3. package/admin/src/components/AuthenticatedApp/index.js +9 -2
  4. package/admin/src/components/AuthenticatedApp/utils/api.js +20 -1
  5. package/admin/src/components/GuidedTour/Homepage/index.js +13 -3
  6. package/admin/src/components/GuidedTour/Modal/index.js +4 -1
  7. package/admin/src/components/GuidedTour/layout.js +9 -0
  8. package/admin/src/components/PrivateRoute/index.js +23 -17
  9. package/admin/src/content-manager/components/DynamicZone/components/ComponentPicker/Category/index.js +4 -1
  10. package/admin/src/content-manager/components/Inputs/index.js +3 -4
  11. package/admin/src/content-manager/components/SelectWrapper/utils/getSelectStyles.js +2 -1
  12. package/admin/src/content-manager/pages/EditView/index.js +0 -188
  13. package/admin/src/hooks/index.js +0 -1
  14. package/admin/src/hooks/useFetchInstalledPlugins/index.js +23 -0
  15. package/admin/src/{pages/InstalledPluginsPage → hooks/useFetchInstalledPlugins}/utils/api.js +2 -4
  16. package/admin/src/hooks/useFetchMarketplacePlugins/index.js +23 -0
  17. package/admin/src/hooks/useFetchMarketplacePlugins/utils/api.js +17 -0
  18. package/admin/src/pages/Admin/index.js +1 -3
  19. package/admin/src/pages/AuthPage/index.js +28 -5
  20. package/admin/src/pages/InstalledPluginsPage/Plugins.js +6 -15
  21. package/admin/src/pages/MarketplacePage/components/EmptyPluginSearch/EmptyPluginGrid.js +27 -0
  22. package/admin/src/pages/MarketplacePage/components/EmptyPluginSearch/index.js +30 -0
  23. package/admin/src/pages/MarketplacePage/components/PluginCard/index.js +186 -0
  24. package/admin/src/pages/MarketplacePage/index.js +199 -107
  25. package/admin/src/pages/MarketplacePage/utils/api.js +9 -0
  26. package/admin/src/translations/en.json +18 -15
  27. package/admin/src/translations/ja.json +2 -2
  28. package/admin/src/translations/ko.json +2 -2
  29. package/admin/src/translations/vi.json +30 -4
  30. package/build/4362.b3d67035.chunk.js +1 -0
  31. package/build/90f49a385afb000fb1d4.svg +5 -0
  32. package/build/9260.4233fae2.chunk.js +2 -0
  33. package/build/{9260.fa40c7bd.chunk.js.LICENSE.txt → 9260.4233fae2.chunk.js.LICENSE.txt} +0 -0
  34. package/build/Admin-authenticatedApp.16bed71f.chunk.js +1 -0
  35. package/build/Admin_homePage.fd1fc572.chunk.js +1 -0
  36. package/build/Admin_marketplace.89a0a014.chunk.js +1 -0
  37. package/build/Admin_pluginsPage.97a514db.chunk.js +1 -0
  38. package/build/admin-users.2740c223.chunk.js +1 -0
  39. package/build/content-manager.f1c46a88.chunk.js +1 -0
  40. package/build/en-json.73a610d6.chunk.js +1 -0
  41. package/build/index.html +1 -1
  42. package/build/ja-json.e13f04e8.chunk.js +1 -0
  43. package/build/ko-json.2200c9c9.chunk.js +1 -0
  44. package/build/main.12d62562.js +2 -0
  45. package/build/{main.3e719c82.js.LICENSE.txt → main.12d62562.js.LICENSE.txt} +0 -0
  46. package/build/{runtime~main.66becdbd.js → runtime~main.21bf3a67.js} +1 -1
  47. package/build/{upload-translation-en-json.c3373c8d.chunk.js → upload-translation-en-json.c334dd82.chunk.js} +1 -1
  48. package/build/vi-json.1e850069.chunk.js +1 -0
  49. package/index.js +53 -244
  50. package/package.json +9 -7
  51. package/server/controllers/admin.js +12 -1
  52. package/server/routes/serve-admin-panel.js +1 -1
  53. package/utils/create-cache-dir.js +119 -0
  54. package/utils/get-custom-webpack-config.js +38 -0
  55. package/utils/index.js +13 -0
  56. package/utils/should-build-admin.js +51 -0
  57. package/utils/watch-admin-files.js +56 -0
  58. package/webpack.config.js +36 -3
  59. package/.env +0 -0
  60. package/admin/src/hooks/useFetchPluginsFromMarketPlace/index.js +0 -49
  61. package/admin/src/pages/MarketplacePage/MarketplaceBanner/Wrapper.js +0 -28
  62. package/admin/src/pages/MarketplacePage/MarketplaceBanner/index.js +0 -37
  63. package/admin/src/pages/MarketplacePage/PluginCard/Wrapper.js +0 -148
  64. package/admin/src/pages/MarketplacePage/PluginCard/index.js +0 -185
  65. package/admin/src/pages/MarketplacePage/Wrapper.js +0 -5
  66. package/admin/src/pages/MarketplacePage/assets/marketplace-coming-soon.png +0 -0
  67. package/build/01a600d9e6e0dea21e33.png +0 -0
  68. package/build/4362.86a4e939.chunk.js +0 -1
  69. package/build/9260.fa40c7bd.chunk.js +0 -2
  70. package/build/Admin-authenticatedApp.a5d2c5fa.chunk.js +0 -1
  71. package/build/Admin_homePage.d6754c66.chunk.js +0 -1
  72. package/build/Admin_marketplace.419010d8.chunk.js +0 -1
  73. package/build/Admin_pluginsPage.7d1bd7ce.chunk.js +0 -1
  74. package/build/admin-users.1fda1f27.chunk.js +0 -1
  75. package/build/content-manager.8412e024.chunk.js +0 -1
  76. package/build/en-json.b35c285f.chunk.js +0 -1
  77. package/build/ja-json.46e29f04.chunk.js +0 -1
  78. package/build/ko-json.dd36fdc0.chunk.js +0 -1
  79. package/build/main.3e719c82.js +0 -2
  80. package/build/vi-json.55a11ac0.chunk.js +0 -1
@@ -1 +1 @@
1
- (()=>{"use strict";var n={},e={};function s(a){var t=e[a];if(void 0!==t)return t.exports;var o=e[a]={id:a,loaded:!1,exports:{}};return n[a].call(o.exports,o,o.exports,s),o.loaded=!0,o.exports}s.m=n,(()=>{var n=[];s.O=(e,a,t,o)=>{if(!a){var r=1/0;for(c=0;c<n.length;c++){for(var[a,t,o]=n[c],i=!0,l=0;l<a.length;l++)(!1&o||r>=o)&&Object.keys(s.O).every((n=>s.O[n](a[l])))?a.splice(l--,1):(i=!1,o<r&&(r=o));if(i){n.splice(c--,1);var d=t();void 0!==d&&(e=d)}}return e}o=o||0;for(var c=n.length;c>0&&n[c-1][2]>o;c--)n[c]=n[c-1];n[c]=[a,t,o]}})(),s.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return s.d(e,{a:e}),e},(()=>{var n,e=Object.getPrototypeOf?n=>Object.getPrototypeOf(n):n=>n.__proto__;s.t=function(a,t){if(1&t&&(a=this(a)),8&t)return a;if("object"===typeof a&&a){if(4&t&&a.__esModule)return a;if(16&t&&"function"===typeof a.then)return a}var o=Object.create(null);s.r(o);var r={};n=n||[null,e({}),e([]),e(e)];for(var i=2&t&&a;"object"==typeof i&&!~n.indexOf(i);i=e(i))Object.getOwnPropertyNames(i).forEach((n=>r[n]=()=>a[n]));return r.default=()=>a,s.d(o,r),o}})(),s.d=(n,e)=>{for(var a in e)s.o(e,a)&&!s.o(n,a)&&Object.defineProperty(n,a,{enumerable:!0,get:e[a]})},s.f={},s.e=n=>Promise.all(Object.keys(s.f).reduce(((e,a)=>(s.f[a](n,e),e)),[])),s.u=n=>(({46:"content-type-builder-translation-zh-Hans-json",90:"i18n-translation-de-json",92:"api-tokens-edit-page",96:"email-translation-de-json",123:"ru-json",129:"i18n-translation-es-json",302:"sso-settings-page",320:"en-json",395:"tr-json",435:"email-translation-it-json",562:"no-json",606:"sk-json",615:"upload-translation-uk-json",695:"upload-settings",742:"content-type-builder-translation-th-json",744:"email-translation-cs-json",749:"th-json",801:"Admin-authenticatedApp",830:"he-json",931:"content-type-builder-translation-en-json",953:"codemirror-addon-lint-js",994:"content-manager",1001:"content-type-builder-translation-nl-json",1009:"upload-translation-ms-json",1011:"zh-json",1018:"email-translation-ko-json",1023:"content-type-builder-translation-it-json",1157:"email-translation-pt-BR-json",1167:"users-permissions-translation-ko-json",1312:"ja-json",1331:"upload-translation-es-json",1375:"upload-translation-pt-BR-json",1377:"ko-json",1442:"users-permissions-translation-cs-json",1495:"email-settings-page",1674:"users-permissions-translation-ru-json",1930:"users-permissions-translation-pt-json",2137:"i18n-translation-fr-json",2151:"content-type-builder-translation-id-json",2218:"codemirror-theme",2246:"content-type-builder-translation-dk-json",2282:"users-providers-settings-page",2380:"users-permissions-translation-tr-json",2411:"email-translation-tr-json",2464:"users-permissions-translation-de-json",2489:"upload-translation-ko-json",2544:"admin-edit-roles-page",2553:"zh-Hans-json",2567:"content-type-builder-translation-ko-json",2603:"email-translation-en-json",2648:"email-translation-ar-json",2657:"content-type-builder-translation-cs-json",2671:"nl-json",2742:"users-permissions-translation-zh-Hans-json",2781:"codemirror-addon-lint",3025:"ms-json",3038:"upload-translation-sk-json",3043:"email-translation-zh-Hans-json",3095:"users-permissions-translation-sk-json",3098:"users-permissions-translation-fr-json",3166:"email-translation-pt-json",3206:"email-translation-nl-json",3278:"vi-json",3304:"content-type-builder-translation-tr-json",3340:"pt-json",3530:"users-permissions-translation-vi-json",3552:"i18n-settings-page",3650:"upload",3677:"Admin_pluginsPage",3702:"users-permissions-translation-pl-json",3825:"email-translation-dk-json",3860:"codemirror-javacript",3948:"content-type-builder-translation-pl-json",3964:"content-type-builder-translation-ms-json",3973:"codemirror-css",3981:"Admin_homePage",4021:"upload-translation-de-json",4121:"webhook-list-page",4179:"users-permissions-translation-id-json",4263:"admin-edit-users",4299:"api-tokens-create-page",4302:"content-type-builder-translation-zh-json",4587:"email-translation-th-json",4693:"email-translation-fr-json",4804:"upload-translation-ru-json",4987:"upload-translation-pl-json",5053:"upload-translation-zh-json",5162:"webhook-edit-page",5178:"codemirror-addon-closebrackets",5199:"admin-users",5222:"upload-translation-it-json",5296:"i18n-translation-dk-json",5388:"email-translation-ru-json",5396:"users-permissions-translation-zh-json",5509:"codemirror-addon-mark-selection",5516:"Admin_marketplace",5751:"email-translation-es-json",5880:"upload-translation-ja-json",5894:"hu-json",5895:"Admin_settingsPage",5906:"content-type-builder-translation-pt-BR-json",6232:"upload-translation-th-json",6280:"i18n-translation-ko-json",6377:"users-permissions-translation-dk-json",6434:"upload-translation-en-json",6460:"users-permissions-translation-en-json",6745:"email-translation-uk-json",6784:"email-translation-ms-json",6817:"it-json",6831:"upload-translation-zh-Hans-json",6836:"users-permissions-translation-uk-json",6848:"email-translation-zh-json",6901:"de-json",7048:"users-permissions-translation-nl-json",7094:"users-permissions-translation-ar-json",7155:"content-type-builder-translation-de-json",7186:"content-type-builder-translation-ru-json",7327:"email-translation-vi-json",7347:"highlight.js",7403:"uk-json",7465:"upload-translation-dk-json",7519:"cs-json",7566:"fontawesome-css-all",7663:"email-translation-id-json",7723:"fontawesome-css",7784:"cropper-css",7817:"users-permissions-translation-es-json",7828:"users-permissions-translation-th-json",7833:"upload-translation-fr-json",7846:"pl-json",7898:"dk-json",7934:"content-type-builder-translation-pt-json",7958:"ar-json",7997:"content-type-builder-translation-sk-json",8e3:"fontawesome-js",8006:"fr-json",8056:"api-tokens-list-page",8175:"i18n-translation-en-json",8178:"email-translation-ja-json",8342:"content-type-builder-translation-es-json",8367:"es-json",8418:"users-email-settings-page",8467:"users-permissions-translation-sv-json",8481:"email-translation-pl-json",8573:"content-type-builder-translation-uk-json",8736:"users-permissions-translation-pt-BR-json",8853:"users-roles-settings-page",8880:"content-type-builder",8897:"id-json",8907:"content-type-builder-translation-ja-json",8965:"content-type-builder-translation-fr-json",9220:"users-permissions-translation-ms-json",9303:"sv-json",9412:"email-translation-sk-json",9460:"users-advanced-settings-page",9497:"Admin_profilePage",9502:"users-permissions-translation-ja-json",9511:"content-type-builder-translation-ar-json",9647:"pt-BR-json",9762:"i18n-translation-zh-Hans-json",9797:"upload-translation-he-json",9905:"users-permissions-translation-it-json"}[n]||n)+"."+{46:"283c640e",90:"c5c9054f",92:"c7299a77",96:"559a7d5f",123:"78c56e1c",129:"7049afa2",302:"121dd0a6",320:"b35c285f",395:"0add11cd",435:"3de61cb6",497:"3fcf6196",562:"9af40e9d",606:"c0bf144c",615:"a6c38449",695:"4401f36d",742:"5f690524",744:"dfd1f3f2",749:"e2b4a0fb",801:"a5d2c5fa",830:"1742494e",849:"17f011e8",931:"8034dab6",953:"a6eeef9c",994:"8412e024",1001:"8d59e86b",1009:"081effd5",1011:"c3c2b225",1018:"52bbd7b4",1023:"a1afd7a9",1094:"e1db3a1a",1157:"6c04b3ef",1167:"f1ca6cc4",1312:"46e29f04",1331:"81b13eac",1375:"65936d7b",1377:"dd36fdc0",1442:"7881d3ff",1454:"f065d92a",1495:"40ee2bda",1674:"5709c5a0",1856:"a30bd09b",1930:"3322464f",2137:"c6367bc9",2151:"2fbf4f8c",2218:"b5559efc",2246:"235ff56e",2282:"368893ed",2380:"30f3ca90",2411:"ae04a9f2",2464:"8d53c619",2481:"4eae9408",2489:"d7345fe1",2544:"49b6f01d",2553:"55f6475b",2567:"d2080111",2603:"fa0dc92b",2648:"95d90eb4",2657:"89f7272e",2671:"30ce02cb",2742:"85480dab",2781:"91580cda",2912:"c5f76e65",3025:"3a062984",3038:"f15c7fd6",3043:"0df4ca59",3095:"fe7cc044",3098:"a2172545",3166:"0239be04",3206:"12d28adb",3278:"55a11ac0",3304:"696283a5",3340:"3aaf9e05",3530:"605d88bc",3552:"c4018651",3650:"5a2dded7",3677:"7d1bd7ce",3702:"107638b5",3825:"f8a595bf",3860:"8c7c015d",3948:"01dc068c",3964:"048122eb",3973:"48b438c9",3981:"d6754c66",4021:"1308dce5",4121:"c21b5a9a",4179:"8f17982a",4263:"381e4a0d",4299:"db17bb39",4302:"77aa2275",4362:"86a4e939",4587:"25ad73e7",4693:"49c3c888",4715:"8a2db02a",4800:"f4a1384a",4804:"2d3b6f69",4982:"601f6196",4987:"2dfe78bb",5053:"06052336",5162:"d170eda1",5178:"0cfe64d0",5199:"1fda1f27",5222:"7d4bdc5a",5296:"ecf02d28",5388:"f3b4fecc",5396:"99932731",5509:"4dca121f",5516:"419010d8",5751:"eb303dea",5880:"97fcacd8",5894:"e667d285",5895:"a8c7ded5",5906:"d311d056",6232:"6d3c2370",6280:"aecb7e01",6377:"89d41c4b",6404:"3c2d0a81",6434:"c3373c8d",6460:"21b0fd2f",6745:"03b27b08",6784:"e39256df",6817:"a2880b81",6831:"f6b26c45",6836:"634f2569",6848:"82978eb0",6901:"6e14f607",6925:"bd694b04",7048:"4e1231dd",7094:"bdddd0d7",7155:"0205697c",7186:"1285874d",7327:"3e1dd5b3",7347:"6321cb45",7403:"eb78e77e",7465:"0d4e855f",7519:"8df09876",7566:"3b89f909",7663:"e3c2101d",7723:"36cff9ae",7784:"ace19575",7817:"a4f81eaa",7828:"bb544ee3",7833:"1bec79ec",7841:"490dbbf1",7846:"fd373053",7898:"be388470",7934:"4893266f",7958:"6a2565af",7997:"0064156b",8e3:"2639263c",8006:"a9ce0700",8042:"1d66811a",8056:"26a05a21",8175:"4d823f62",8178:"66337e44",8342:"13b2e2aa",8367:"61553168",8418:"5abb9575",8467:"e7e1684b",8469:"8d819a3c",8481:"9585a84e",8573:"87496bf9",8736:"8dafc053",8853:"a2f6277a",8880:"cda4ba3c",8897:"d87ebb20",8907:"1459fb88",8965:"bee621f7",9220:"2268324c",9235:"ced8aebf",9260:"fa40c7bd",9303:"aad187b9",9412:"76dbaaa6",9460:"8905d8d8",9497:"d7192d06",9502:"5915d9ef",9511:"f1fedc12",9647:"30e2d716",9762:"258b2e1a",9797:"1d28982f",9853:"6ff595fa",9905:"87952a24",9988:"fe838ba6"}[n]+".chunk.js"),s.miniCssF=n=>{},s.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"===typeof window)return window}}(),s.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),(()=>{var n={},e="@strapi/admin:";s.l=(a,t,o,r)=>{if(n[a])n[a].push(t);else{var i,l;if(void 0!==o)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var f=d[c];if(f.getAttribute("src")==a||f.getAttribute("data-webpack")==e+o){i=f;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,s.nc&&i.setAttribute("nonce",s.nc),i.setAttribute("data-webpack",e+o),i.src=a),n[a]=[t];var p=(e,s)=>{i.onerror=i.onload=null,clearTimeout(u);var t=n[a];if(delete n[a],i.parentNode&&i.parentNode.removeChild(i),t&&t.forEach((n=>n(s))),e)return e(s)},u=setTimeout(p.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=p.bind(null,i.onerror),i.onload=p.bind(null,i.onload),l&&document.head.appendChild(i)}}})(),s.r=n=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},s.nmd=n=>(n.paths=[],n.children||(n.children=[]),n),s.p="/admin/",(()=>{s.b=document.baseURI||self.location.href;var n={1303:0};s.f.j=(e,a)=>{var t=s.o(n,e)?n[e]:void 0;if(0!==t)if(t)a.push(t[2]);else if(1303!=e){var o=new Promise(((s,a)=>t=n[e]=[s,a]));a.push(t[2]=o);var r=s.p+s.u(e),i=new Error;s.l(r,(a=>{if(s.o(n,e)&&(0!==(t=n[e])&&(n[e]=void 0),t)){var o=a&&("load"===a.type?"missing":a.type),r=a&&a.target&&a.target.src;i.message="Loading chunk "+e+" failed.\n("+o+": "+r+")",i.name="ChunkLoadError",i.type=o,i.request=r,t[1](i)}}),"chunk-"+e,e)}else n[e]=0},s.O.j=e=>0===n[e];var e=(e,a)=>{var t,o,[r,i,l]=a,d=0;if(r.some((e=>0!==n[e]))){for(t in i)s.o(i,t)&&(s.m[t]=i[t]);if(l)var c=l(s)}for(e&&e(a);d<r.length;d++)o=r[d],s.o(n,o)&&n[o]&&n[o][0](),n[r[d]]=0;return s.O(c)},a=self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[];a.forEach(e.bind(null,0)),a.push=e.bind(null,a.push.bind(a))})()})();
1
+ (()=>{"use strict";var n={},e={};function a(s){var t=e[s];if(void 0!==t)return t.exports;var o=e[s]={id:s,loaded:!1,exports:{}};return n[s].call(o.exports,o,o.exports,a),o.loaded=!0,o.exports}a.m=n,(()=>{var n=[];a.O=(e,s,t,o)=>{if(!s){var r=1/0;for(c=0;c<n.length;c++){for(var[s,t,o]=n[c],i=!0,l=0;l<s.length;l++)(!1&o||r>=o)&&Object.keys(a.O).every((n=>a.O[n](s[l])))?s.splice(l--,1):(i=!1,o<r&&(r=o));if(i){n.splice(c--,1);var d=t();void 0!==d&&(e=d)}}return e}o=o||0;for(var c=n.length;c>0&&n[c-1][2]>o;c--)n[c]=n[c-1];n[c]=[s,t,o]}})(),a.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return a.d(e,{a:e}),e},(()=>{var n,e=Object.getPrototypeOf?n=>Object.getPrototypeOf(n):n=>n.__proto__;a.t=function(s,t){if(1&t&&(s=this(s)),8&t)return s;if("object"===typeof s&&s){if(4&t&&s.__esModule)return s;if(16&t&&"function"===typeof s.then)return s}var o=Object.create(null);a.r(o);var r={};n=n||[null,e({}),e([]),e(e)];for(var i=2&t&&s;"object"==typeof i&&!~n.indexOf(i);i=e(i))Object.getOwnPropertyNames(i).forEach((n=>r[n]=()=>s[n]));return r.default=()=>s,a.d(o,r),o}})(),a.d=(n,e)=>{for(var s in e)a.o(e,s)&&!a.o(n,s)&&Object.defineProperty(n,s,{enumerable:!0,get:e[s]})},a.f={},a.e=n=>Promise.all(Object.keys(a.f).reduce(((e,s)=>(a.f[s](n,e),e)),[])),a.u=n=>(({46:"content-type-builder-translation-zh-Hans-json",90:"i18n-translation-de-json",92:"api-tokens-edit-page",96:"email-translation-de-json",123:"ru-json",129:"i18n-translation-es-json",302:"sso-settings-page",320:"en-json",395:"tr-json",435:"email-translation-it-json",562:"no-json",606:"sk-json",615:"upload-translation-uk-json",695:"upload-settings",742:"content-type-builder-translation-th-json",744:"email-translation-cs-json",749:"th-json",801:"Admin-authenticatedApp",830:"he-json",931:"content-type-builder-translation-en-json",953:"codemirror-addon-lint-js",994:"content-manager",1001:"content-type-builder-translation-nl-json",1009:"upload-translation-ms-json",1011:"zh-json",1018:"email-translation-ko-json",1023:"content-type-builder-translation-it-json",1157:"email-translation-pt-BR-json",1167:"users-permissions-translation-ko-json",1312:"ja-json",1331:"upload-translation-es-json",1375:"upload-translation-pt-BR-json",1377:"ko-json",1442:"users-permissions-translation-cs-json",1495:"email-settings-page",1674:"users-permissions-translation-ru-json",1930:"users-permissions-translation-pt-json",2137:"i18n-translation-fr-json",2151:"content-type-builder-translation-id-json",2218:"codemirror-theme",2246:"content-type-builder-translation-dk-json",2282:"users-providers-settings-page",2380:"users-permissions-translation-tr-json",2411:"email-translation-tr-json",2464:"users-permissions-translation-de-json",2489:"upload-translation-ko-json",2544:"admin-edit-roles-page",2553:"zh-Hans-json",2567:"content-type-builder-translation-ko-json",2603:"email-translation-en-json",2648:"email-translation-ar-json",2657:"content-type-builder-translation-cs-json",2671:"nl-json",2742:"users-permissions-translation-zh-Hans-json",2781:"codemirror-addon-lint",3025:"ms-json",3038:"upload-translation-sk-json",3043:"email-translation-zh-Hans-json",3095:"users-permissions-translation-sk-json",3098:"users-permissions-translation-fr-json",3166:"email-translation-pt-json",3206:"email-translation-nl-json",3278:"vi-json",3304:"content-type-builder-translation-tr-json",3340:"pt-json",3530:"users-permissions-translation-vi-json",3552:"i18n-settings-page",3650:"upload",3677:"Admin_pluginsPage",3702:"users-permissions-translation-pl-json",3825:"email-translation-dk-json",3860:"codemirror-javacript",3948:"content-type-builder-translation-pl-json",3964:"content-type-builder-translation-ms-json",3973:"codemirror-css",3981:"Admin_homePage",4021:"upload-translation-de-json",4121:"webhook-list-page",4179:"users-permissions-translation-id-json",4263:"admin-edit-users",4299:"api-tokens-create-page",4302:"content-type-builder-translation-zh-json",4587:"email-translation-th-json",4693:"email-translation-fr-json",4804:"upload-translation-ru-json",4987:"upload-translation-pl-json",5053:"upload-translation-zh-json",5162:"webhook-edit-page",5178:"codemirror-addon-closebrackets",5199:"admin-users",5222:"upload-translation-it-json",5296:"i18n-translation-dk-json",5388:"email-translation-ru-json",5396:"users-permissions-translation-zh-json",5509:"codemirror-addon-mark-selection",5516:"Admin_marketplace",5751:"email-translation-es-json",5880:"upload-translation-ja-json",5894:"hu-json",5895:"Admin_settingsPage",5906:"content-type-builder-translation-pt-BR-json",6232:"upload-translation-th-json",6280:"i18n-translation-ko-json",6377:"users-permissions-translation-dk-json",6434:"upload-translation-en-json",6460:"users-permissions-translation-en-json",6745:"email-translation-uk-json",6784:"email-translation-ms-json",6817:"it-json",6831:"upload-translation-zh-Hans-json",6836:"users-permissions-translation-uk-json",6848:"email-translation-zh-json",6901:"de-json",7048:"users-permissions-translation-nl-json",7094:"users-permissions-translation-ar-json",7155:"content-type-builder-translation-de-json",7186:"content-type-builder-translation-ru-json",7327:"email-translation-vi-json",7347:"highlight.js",7403:"uk-json",7465:"upload-translation-dk-json",7519:"cs-json",7566:"fontawesome-css-all",7663:"email-translation-id-json",7723:"fontawesome-css",7784:"cropper-css",7817:"users-permissions-translation-es-json",7828:"users-permissions-translation-th-json",7833:"upload-translation-fr-json",7846:"pl-json",7898:"dk-json",7934:"content-type-builder-translation-pt-json",7958:"ar-json",7997:"content-type-builder-translation-sk-json",8e3:"fontawesome-js",8006:"fr-json",8056:"api-tokens-list-page",8175:"i18n-translation-en-json",8178:"email-translation-ja-json",8342:"content-type-builder-translation-es-json",8367:"es-json",8418:"users-email-settings-page",8467:"users-permissions-translation-sv-json",8481:"email-translation-pl-json",8573:"content-type-builder-translation-uk-json",8736:"users-permissions-translation-pt-BR-json",8853:"users-roles-settings-page",8880:"content-type-builder",8897:"id-json",8907:"content-type-builder-translation-ja-json",8965:"content-type-builder-translation-fr-json",9220:"users-permissions-translation-ms-json",9303:"sv-json",9412:"email-translation-sk-json",9460:"users-advanced-settings-page",9497:"Admin_profilePage",9502:"users-permissions-translation-ja-json",9511:"content-type-builder-translation-ar-json",9647:"pt-BR-json",9762:"i18n-translation-zh-Hans-json",9797:"upload-translation-he-json",9905:"users-permissions-translation-it-json"}[n]||n)+"."+{46:"283c640e",90:"c5c9054f",92:"c7299a77",96:"559a7d5f",123:"78c56e1c",129:"7049afa2",302:"121dd0a6",320:"73a610d6",395:"0add11cd",435:"3de61cb6",497:"3fcf6196",562:"9af40e9d",606:"c0bf144c",615:"a6c38449",695:"4401f36d",742:"5f690524",744:"dfd1f3f2",749:"e2b4a0fb",801:"16bed71f",830:"1742494e",849:"17f011e8",931:"8034dab6",953:"a6eeef9c",994:"f1c46a88",1001:"8d59e86b",1009:"081effd5",1011:"c3c2b225",1018:"52bbd7b4",1023:"a1afd7a9",1094:"e1db3a1a",1157:"6c04b3ef",1167:"f1ca6cc4",1312:"e13f04e8",1331:"81b13eac",1375:"65936d7b",1377:"2200c9c9",1442:"7881d3ff",1454:"f065d92a",1495:"40ee2bda",1674:"5709c5a0",1856:"a30bd09b",1930:"3322464f",2137:"c6367bc9",2151:"2fbf4f8c",2218:"b5559efc",2246:"235ff56e",2282:"368893ed",2380:"30f3ca90",2411:"ae04a9f2",2464:"8d53c619",2481:"4eae9408",2489:"d7345fe1",2544:"49b6f01d",2553:"55f6475b",2567:"d2080111",2603:"fa0dc92b",2648:"95d90eb4",2657:"89f7272e",2671:"30ce02cb",2742:"85480dab",2781:"91580cda",2912:"c5f76e65",3025:"3a062984",3038:"f15c7fd6",3043:"0df4ca59",3095:"fe7cc044",3098:"a2172545",3166:"0239be04",3206:"12d28adb",3278:"1e850069",3304:"696283a5",3340:"3aaf9e05",3530:"605d88bc",3552:"c4018651",3650:"5a2dded7",3677:"97a514db",3702:"107638b5",3825:"f8a595bf",3860:"8c7c015d",3948:"01dc068c",3964:"048122eb",3973:"48b438c9",3981:"fd1fc572",4021:"1308dce5",4121:"c21b5a9a",4179:"8f17982a",4263:"381e4a0d",4299:"db17bb39",4302:"77aa2275",4362:"b3d67035",4587:"25ad73e7",4693:"49c3c888",4715:"8a2db02a",4800:"f4a1384a",4804:"2d3b6f69",4982:"601f6196",4987:"2dfe78bb",5053:"06052336",5162:"d170eda1",5178:"0cfe64d0",5199:"2740c223",5222:"7d4bdc5a",5296:"ecf02d28",5388:"f3b4fecc",5396:"99932731",5509:"4dca121f",5516:"89a0a014",5751:"eb303dea",5880:"97fcacd8",5894:"e667d285",5895:"a8c7ded5",5906:"d311d056",6232:"6d3c2370",6280:"aecb7e01",6377:"89d41c4b",6404:"3c2d0a81",6434:"c334dd82",6460:"21b0fd2f",6745:"03b27b08",6784:"e39256df",6817:"a2880b81",6831:"f6b26c45",6836:"634f2569",6848:"82978eb0",6901:"6e14f607",6925:"bd694b04",7048:"4e1231dd",7094:"bdddd0d7",7155:"0205697c",7186:"1285874d",7327:"3e1dd5b3",7347:"6321cb45",7403:"eb78e77e",7465:"0d4e855f",7519:"8df09876",7566:"3b89f909",7663:"e3c2101d",7723:"36cff9ae",7784:"ace19575",7817:"a4f81eaa",7828:"bb544ee3",7833:"1bec79ec",7841:"490dbbf1",7846:"fd373053",7898:"be388470",7934:"4893266f",7958:"6a2565af",7997:"0064156b",8e3:"2639263c",8006:"a9ce0700",8042:"1d66811a",8056:"26a05a21",8175:"4d823f62",8178:"66337e44",8342:"13b2e2aa",8367:"61553168",8418:"5abb9575",8467:"e7e1684b",8469:"8d819a3c",8481:"9585a84e",8573:"87496bf9",8736:"8dafc053",8853:"a2f6277a",8880:"cda4ba3c",8897:"d87ebb20",8907:"1459fb88",8965:"bee621f7",9220:"2268324c",9235:"ced8aebf",9260:"4233fae2",9303:"aad187b9",9412:"76dbaaa6",9460:"8905d8d8",9497:"d7192d06",9502:"5915d9ef",9511:"f1fedc12",9647:"30e2d716",9762:"258b2e1a",9797:"1d28982f",9853:"6ff595fa",9905:"87952a24",9988:"fe838ba6"}[n]+".chunk.js"),a.miniCssF=n=>{},a.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"===typeof window)return window}}(),a.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),(()=>{var n={},e="@strapi/admin:";a.l=(s,t,o,r)=>{if(n[s])n[s].push(t);else{var i,l;if(void 0!==o)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var b=d[c];if(b.getAttribute("src")==s||b.getAttribute("data-webpack")==e+o){i=b;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.setAttribute("data-webpack",e+o),i.src=s),n[s]=[t];var p=(e,a)=>{i.onerror=i.onload=null,clearTimeout(u);var t=n[s];if(delete n[s],i.parentNode&&i.parentNode.removeChild(i),t&&t.forEach((n=>n(a))),e)return e(a)},u=setTimeout(p.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=p.bind(null,i.onerror),i.onload=p.bind(null,i.onload),l&&document.head.appendChild(i)}}})(),a.r=n=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},a.nmd=n=>(n.paths=[],n.children||(n.children=[]),n),a.p="/admin/",(()=>{a.b=document.baseURI||self.location.href;var n={1303:0};a.f.j=(e,s)=>{var t=a.o(n,e)?n[e]:void 0;if(0!==t)if(t)s.push(t[2]);else if(1303!=e){var o=new Promise(((a,s)=>t=n[e]=[a,s]));s.push(t[2]=o);var r=a.p+a.u(e),i=new Error;a.l(r,(s=>{if(a.o(n,e)&&(0!==(t=n[e])&&(n[e]=void 0),t)){var o=s&&("load"===s.type?"missing":s.type),r=s&&s.target&&s.target.src;i.message="Loading chunk "+e+" failed.\n("+o+": "+r+")",i.name="ChunkLoadError",i.type=o,i.request=r,t[1](i)}}),"chunk-"+e,e)}else n[e]=0},a.O.j=e=>0===n[e];var e=(e,s)=>{var t,o,[r,i,l]=s,d=0;if(r.some((e=>0!==n[e]))){for(t in i)a.o(i,t)&&(a.m[t]=i[t]);if(l)var c=l(a)}for(e&&e(s);d<r.length;d++)o=r[d],a.o(n,o)&&n[o]&&n[o][0](),n[r[d]]=0;return a.O(c)},s=self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[];s.forEach(e.bind(null,0)),s.push=e.bind(null,s.push.bind(s))})()})();
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[6434],{53633:e=>{e.exports=JSON.parse('{"bulk.select.label":"Select all assets","button.next":"Next","checkControl.crop-duplicate":"Duplicate & crop the asset","checkControl.crop-original":"Crop the original asset","control-card.add":"Add","control-card.cancel":"Cancel","control-card.copy-link":"Copy link","control-card.crop":"Crop","control-card.delete":"Delete","control-card.download":"Download","control-card.edit":"Edit","control-card.replace-media":"Replace Media","control-card.save":"Save","control-card.stop-crop":"Stop cropping","filter.add":"Add filter","form.button.replace-media":"Replace media","form.input.decription.file-alt":"This text will be displayed if the asset can\u2019t be shown.","form.input.label.file-alt":"Alternative text","form.input.label.file-caption":"Caption","form.input.label.file-name":"File name","form.upload-url.error.url.invalid":"One URL is invalid","form.upload-url.error.url.invalids":"{number} URLs are invalids","header.actions.add-assets":"Add new assets","header.actions.upload-assets":"Upload assets","header.actions.upload-new-asset":"Upload new asset","header.content.assets-empty":"No assets","header.content.assets-multiple":"{number} assets","header.content.assets-single":"1 asset","input.button.label":"Browse files","input.label":"Drag & Drop here or","input.label-bold":"Drag & drop","input.label-normal":"to upload or","input.placeholder":"Click to add an asset or drag & drop a file in this area","input.placeholder.icon":"Drop the asset in this zone","input.url.description":"Separate your URL links by a carriage return.","input.url.label":"URL","list.asset.at.finished":"The assets have finished loading.","list.asset.load":"Loading the asset list.","list.assets-empty.search":"No result found","list.assets-empty.subtitle":"Add one to the list.","list.assets-empty.title":"There are no assets yet","list.assets-empty.title-withSearch":"There are no assets with the applied filters","list.assets.empty":"Upload your first assets...","list.assets.empty.no-permissions":"The asset list is empty.","list.assets.loading-asset":"Loading the preview for the media: {path}","list.assets.not-supported-content":"No preview available","list.assets.preview-asset":"Preview for the video at path {path}","list.assets.selected":"{number, plural, =0 {No asset} one {1 asset} other {# assets}} ready to upload","list.assets.type-not-allowed":"This type of file is not allowed.","mediaLibraryInput.actions.nextSlide":"Next slide","mediaLibraryInput.actions.previousSlide":"Previous slide","mediaLibraryInput.placeholder":"Click to add an asset or drag and drop one in this area","mediaLibraryInput.slideCount":"{n} of {m} slides","modal.edit.title":"Details","modal.file-details.date":"Date","modal.file-details.dimensions":"Dimensions","modal.file-details.extension":"Extension","modal.file-details.size":"Size","modal.header.browse":"Upload assets","modal.header.file-detail":"Details","modal.header.pending-assets":"Pending assets","modal.header.select-files":"Selected files","modal.nav.browse":"browse","modal.nav.computer":"From computer","modal.nav.selected":"selected","modal.nav.url":"From url","modal.remove.success-label":"The asset has been successfully removed.","modal.selected-list.sub-header-subtitle":"Drag & drop to reorder the assets in the field","modal.upload-list.footer.button":"Upload {number, plural, one {# asset} other {# assets}} to the library","modal.upload-list.sub-header-subtitle":"Manage the assets before uploading them to the Media Library","modal.upload-list.sub-header.button":"Add more assets","modal.upload.cancelled":"Upload manually aborted.","page.title":"Settings - Media Library","permissions.not-allowed.update":"You are not allowed to edit this file.","plugin.description.long":"Media file management.","plugin.description.short":"Media file management.","plugin.name":"Media Library","search.clear.label":"Clear the search","search.label":"Search for an asset","search.placeholder":"e.g: the first dog on the moon","settings.blockTitle":"Asset Management","settings.form.autoOrientation.description":"Enabling this option will automatically rotate the image according to EXIF orientation tag.","settings.form.autoOrientation.label":"Auto orientation","settings.form.responsiveDimensions.description":"Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.","settings.form.responsiveDimensions.label":"Responsive friendly upload","settings.form.sizeOptimization.description":"Enabling this option will reduce the image size and slightly reduce its quality.","settings.form.sizeOptimization.label":"Size optimization","settings.form.videoPreview.description":"It will generate a six-second preview of the video (GIF)","settings.form.videoPreview.label":"Preview","settings.header.label":"Media Library","settings.section.doc.label":"Doc","settings.section.image.label":"Image","settings.section.video.label":"Video","settings.sub-header.label":"Configure the settings for the Media Library","sort.created_at_asc":"Oldest uploads","sort.created_at_desc":"Most recent uploads","sort.label":"Sort by","sort.name_asc":"Alphabetical order (A to Z)","sort.name_desc":"Reverse alphabetical order (Z to A)","sort.updated_at_asc":"Oldest updates","sort.updated_at_desc":"Most recent updates","tabs.title":"How do you want to upload your assets?","window.confirm.close-modal.file":"Are you sure? Your changes will be lost.","window.confirm.close-modal.files":"Are you sure? You have some files that have not been uploaded yet."}')}}]);
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[6434],{53633:e=>{e.exports=JSON.parse('{"bulk.select.label":"Select all assets","button.next":"Next","checkControl.crop-duplicate":"Duplicate & crop the asset","checkControl.crop-original":"Crop the original asset","control-card.add":"Add","control-card.cancel":"Cancel","control-card.copy-link":"Copy link","control-card.crop":"Crop","control-card.delete":"Delete","control-card.download":"Download","control-card.edit":"Edit","control-card.replace-media":"Replace Media","control-card.save":"Save","control-card.stop-crop":"Stop cropping","filter.add":"Add filter","form.button.replace-media":"Replace media","form.input.decription.file-alt":"This text will be displayed if the asset can\u2019t be shown.","form.input.label.file-alt":"Alternative text","form.input.label.file-caption":"Caption","form.input.label.file-name":"File name","form.upload-url.error.url.invalid":"One URL is invalid","form.upload-url.error.url.invalids":"{number} URLs are invalids","header.actions.add-assets":"Add new assets","header.actions.upload-assets":"Upload assets","header.actions.upload-new-asset":"Upload new asset","header.content.assets-empty":"No assets","header.content.assets-multiple":"{number} assets","header.content.assets-single":"1 asset","input.button.label":"Browse files","input.label":"Drag & Drop here or","input.label-bold":"Drag & drop","input.label-normal":"to upload or","input.placeholder":"Click to add an asset or drag & drop a file in this area","input.placeholder.icon":"Drop the asset in this zone","input.url.description":"Separate your URL links by a carriage return.","input.url.label":"URL","list.asset.at.finished":"The assets have finished loading.","list.asset.load":"Loading the asset list.","list.assets-empty.search":"No result found","list.assets-empty.subtitle":"Add one to the list.","list.assets-empty.title":"There are no assets yet","list.assets-empty.title-withSearch":"There are no assets with the applied filters","list.assets.empty":"Upload your first assets...","list.assets.empty.no-permissions":"The asset list is empty.","list.assets.loading-asset":"Loading the preview for the media: {path}","list.assets.not-supported-content":"No preview available","list.assets.preview-asset":"Preview for the video at path {path}","list.assets.selected":"{number, plural, =0 {No asset} one {1 asset} other {# assets}} ready to upload","list.assets.type-not-allowed":"This type of file is not allowed.","mediaLibraryInput.actions.nextSlide":"Next slide","mediaLibraryInput.actions.previousSlide":"Previous slide","mediaLibraryInput.placeholder":"Click to add an asset or drag and drop one in this area","mediaLibraryInput.slideCount":"{n} of {m} slides","modal.edit.title":"Details","modal.file-details.date":"Date","modal.file-details.dimensions":"Dimensions","modal.file-details.extension":"Extension","modal.file-details.size":"Size","modal.header.browse":"Upload assets","modal.header.file-detail":"Details","modal.header.pending-assets":"Pending assets","modal.header.select-files":"Selected files","modal.nav.browse":"browse","modal.nav.computer":"From computer","modal.nav.selected":"selected","modal.nav.url":"From url","modal.remove.success-label":"The asset has been successfully removed.","modal.selected-list.sub-header-subtitle":"Drag & drop to reorder the assets in the field","modal.upload-list.footer.button":"Upload {number, plural, one {# asset} other {# assets}} to the library","modal.upload-list.sub-header-subtitle":"Manage the assets before adding them to the Media Library","modal.upload-list.sub-header.button":"Add more assets","modal.upload.cancelled":"Upload manually aborted.","page.title":"Settings - Media Library","permissions.not-allowed.update":"You are not allowed to edit this file.","plugin.description.long":"Media file management.","plugin.description.short":"Media file management.","plugin.name":"Media Library","search.clear.label":"Clear the search","search.label":"Search for an asset","search.placeholder":"e.g: the first dog on the moon","settings.blockTitle":"Asset Management","settings.form.autoOrientation.description":"Enabling this option will automatically rotate the image according to EXIF orientation tag.","settings.form.autoOrientation.label":"Auto orientation","settings.form.responsiveDimensions.description":"Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.","settings.form.responsiveDimensions.label":"Responsive friendly upload","settings.form.sizeOptimization.description":"Enabling this option will reduce the image size and slightly reduce its quality.","settings.form.sizeOptimization.label":"Size optimization","settings.form.videoPreview.description":"It will generate a six-second preview of the video (GIF)","settings.form.videoPreview.label":"Preview","settings.header.label":"Media Library","settings.section.doc.label":"Doc","settings.section.image.label":"Image","settings.section.video.label":"Video","settings.sub-header.label":"Configure the settings for the Media Library","sort.created_at_asc":"Oldest uploads","sort.created_at_desc":"Most recent uploads","sort.label":"Sort by","sort.name_asc":"Alphabetical order (A to Z)","sort.name_desc":"Reverse alphabetical order (Z to A)","sort.updated_at_asc":"Oldest updates","sort.updated_at_desc":"Most recent updates","tabs.title":"How do you want to upload your assets?","window.confirm.close-modal.file":"Are you sure? Your changes will be lost.","window.confirm.close-modal.files":"Are you sure? You have some files that have not been uploaded yet."}')}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[3278],{50576:n=>{n.exports=JSON.parse('{"Analytics":"Ph\xe2n T\xedch","Auth.components.Oops.text":"T\xe0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\xe3 b\u1ecb kho\xe1","Auth.components.Oops.text.admin":"N\u1ebfu c\xf3 s\u1ef1 nh\u1ea7m l\u1eabn, h\xe3y li\xean h\u1ec7 ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb","Auth.form.button.forgot-password":"G\u1eedi Email","Auth.form.button.go-home":"QUAY V\u1ec0 TRANG CH\u1ee6","Auth.form.button.login":"\u0110\u0103ng nh\u1eadp","Auth.form.button.login.providers.error":"Kh\xf4ng th\u1ec3 k\u1ebft n\u1ed1i b\u1ea1n v\u1edbi d\u1ecbch v\u1ee5 \u0111\xe3 ch\u1ecdn.","Auth.form.button.login.providers.see-more":"Xem th\xeam","Auth.form.button.login.strapi":"\u0110\u0103ng nh\u1eadp v\u1edbi Strapi","Auth.form.button.password-recovery":"Kh\xf4i ph\u1ee5c m\u1eadt kh\u1ea9u","Auth.form.button.register":"S\u1eb5n s\xe0ng \u0111\u1ec3 b\u1eaft \u0111\u1ea7u","Auth.form.button.reset-password":"\u0110\u1ed5i m\u1eadt kh\u1ea9u","Auth.form.confirmPassword.label":"Nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u","Auth.form.currentPassword.label":"M\u1eadt kh\u1ea9u hi\u1ec7n t\u1ea1i","Auth.form.email.label":"Email","Auth.form.email.placeholder":"kai@doe.com","Auth.form.error.blocked":"T\xe0i kho\u1ea3n c\u1ee7a b\u1ea1n b\u1ecb kh\xf3a b\u1edfi ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb.","Auth.form.error.code.provide":"M\xe3 sai \u0111\xe3 \u0111\u01b0\u1ee3c cung c\u1ea5p.","Auth.form.error.confirmed":"Email c\u1ee7a t\xe0i kho\u1ea3n c\u1ee7a b\u1ea1n ch\u01b0a \u0111\u01b0\u1ee3c x\xe1c nh\u1eadn.","Auth.form.error.email.invalid":"Email sai.","Auth.form.error.email.provide":"Vui l\xf2ng cung c\u1ea5p t\xean \u0111\u0103ng nh\u1eadp ho\u1eb7c email.","Auth.form.error.email.taken":"Email \u0111\xe3 \u0111\u01b0\u1ee3c d\xf9ng.","Auth.form.error.invalid":"\u0110\u1ecbnh danh ho\u1eb7c m\u1eadt kh\u1ea9u sai.","Auth.form.error.params.provide":"Tham s\u1ed1 sai \u0111\xe3 \u0111\u01b0\u1ee3c cung c\u1ea5p.","Auth.form.error.password.format":"M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n kh\xf4ng th\u1ec3 ch\u1ee9a k\xfd t\u1ef1 `$` h\u01a1n ba l\u1ea7n","Auth.form.error.password.local":"Ng\u01b0\u1eddi d\xf9ng n\xe0y ch\u01b0a t\u1eebng \u0111\u1eb7t m\u1eadt kh\u1ea9u c\u1ee5c b\u1ed9, vui l\xf2ng \u0111\u0103ng nh\u1eadp th\xf4ng qua nh\xe0 cung c\u1ea5p \u0111\xe3 d\xf9ng trong l\xfac t\u1ea1o t\xe0i kho\u1ea3n ban \u0111\u1ea7u","Auth.form.error.password.matching":"Nh\u1eefng m\u1eadt kh\u1ea9u kh\xf4ng kh\u1edbp.","Auth.form.error.password.provide":"Vui l\xf2ng cung c\u1ea5p m\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n.","Auth.form.error.ratelimit":"Th\u1eed qu\xe1 nhi\u1ec1u l\u1ea7n, vui l\xf2ng th\u1eed l\u1ea1i trong m\u1ed9t ph\xfat","Auth.form.error.user.not-exist":"Email n\xe0y ch\u01b0a t\u1ed3n t\u1ea1i.","Auth.form.error.username.taken":"T\xean \u0111\u0103ng nh\u1eadp \u0111\xe3 b\u1ecb l\u1ea5y.","Auth.form.firstname.label":"H\u1ecd","Auth.form.firstname.placeholder":"v.d. Kai","Auth.form.forgot-password.email.label":"Nh\u1eadp email c\u1ee7a b\u1ea1n","Auth.form.forgot-password.email.label.success":"Email \u0111\xe3 g\u1eedi th\xe0nh c\xf4ng \u0111\u1ebfn","Auth.form.lastname.label":"T\xean","Auth.form.lastname.placeholder":"v.d. Doe","Auth.form.password.hide-password":"\u1ea8n m\u1eadt kh\u1ea9u","Auth.form.password.hint":"M\u1eadt kh\u1ea9u ph\u1ea3i ch\u1ee9a \xedt nh\u1ea5t 8 k\xfd t\u1ef1, 1 vi\u1ebft hoa, 1 vi\u1ebft th\u01b0\u1eddng, v\xe0 1 s\u1ed1","Auth.form.password.label":"M\u1eadt kh\u1ea9u","Auth.form.password.show-password":"Hi\u1ec3n th\u1ecb password","Auth.form.register.news.label":"C\u1eadp nh\u1eadt cho t\xf4i v\u1ec1 ch\u1ee9c n\u0103ng m\u1edbi v\xe0 nh\u1eefng c\u1ea3i thi\u1ec7n s\u1eafp t\u1edbi (th\xf4ng qua vi\u1ec7c n\xe0y b\u1ea1n \u0111\xe3 ch\u1ea5p nh\u1eadn {terms} v\xe0 {policy}).","Auth.form.register.subtitle":"Th\xf4ng tin c\u1ee7a b\u1ea1n ch\u1ec9 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 \u0111\u0103ng nh\u1eadp v\xe0o trang qu\u1ea3n tr\u1ecb. T\u1ea5t c\u1ea3 c\xe1c d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u \u1edf c\u01a1 s\u1edf d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n.","Auth.form.rememberMe.label":"Nh\u1edb t\xf4i","Auth.form.username.label":"T\xean \u0111\u0103ng nh\u1eadp","Auth.form.username.placeholder":"Kai Doe","Auth.form.welcome.subtitle":"\u0110\u0103ng nh\u1eadp v\xe0o t\xe0i kho\u1ea3n Strapi c\u1ee7a b\u1ea1n","Auth.form.welcome.title":"Ch\xe0o m\u1eebng!","Auth.link.forgot-password":"Qu\xean m\u1eadt kh\u1ea9u?","Auth.link.ready":"S\u1eb5n s\xe0ng \u0111\u0103ng nh\u1eadp?","Auth.link.signin":"\u0110\u0103ng nh\u1eadp","Auth.link.signin.account":"\u0110\xe3 c\xf3 t\xe0i kho\u1ea3n?","Auth.login.sso.divider":"Ho\u1eb7c \u0111\u0103ng nh\u1eadp v\u1edbi","Auth.login.sso.loading":"\u0110ang t\u1ea3i c\xe1c d\u1ecbch v\u1ee5 cung c\u1ea5p...","Auth.login.sso.subtitle":"\u0110\u0103ng nh\u1eadp qua SSO","Auth.privacy-policy-agreement.policy":"ch\xednh s\xe1ch b\u1ea3o m\u1eadt","Auth.privacy-policy-agreement.terms":"c\xe1c \u0111i\u1ec1u kho\u1ea3n","Auth.reset-password.title":"\u0110\u1eb7t l\u1ea1i m\u1eadt kh\u1ea9u","Content Manager":"Qu\u1ea3n L\xfd N\u1ed9i Dung","Documentation":"T\xe0i li\u1ec7u","Email":"Email","Files Upload":"T\u1ea3i T\xe2p Tin L\xean","HomePage.helmet.title":"Trang ch\u1ee7","HomePage.roadmap":"Xem l\u1ed9 tr\xecnh c\u1ee7a ch\xfang t\xf4i","HomePage.welcome.congrats":"Ch\xfac m\u1eebng!","HomePage.welcome.congrats.content":"B\u1ea1n \u0111\xe3 \u0111\u0103ng nh\u1eadp nh\u01b0 l\xe0 ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb \u0111\u1ea7u ti\xean. \u0110\u1ec3 kh\xe1m ph\xe1 nh\u1eefng t\xednh n\u0103ng m\u1ea1nh m\u1ebd \u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi Strapi.","New entry":"B\u1ea3n ghi m\u1edbi","Password":"M\u1eadt Kh\u1ea9u","Provider":"Nh\xe0 Cung C\u1ea5p","ResetPasswordToken":"C\xe0i L\u1ea1i Chu\u1ed7i Kh\xf3a M\u1eadt Kh\u1ea9u","Role":"Vai tr\xf2","Username":"T\xean \u0111\u0103ng nh\u1eadp","Users":"Ng\u01b0\u1eddi d\xf9ng","Users & Permissions":"Ng\u01b0\u1eddi d\xf9ng v\xe0 Ph\xe2n quy\u1ec1n","app.components.BlockLink.code":"Code v\xed d\u1ee5","app.components.Button.cancel":"H\u1ee7y b\u1ecf","app.components.Button.save":"L\u01b0u","app.components.ComingSoonPage.comingSoon":"S\u1eafp c\xf3","app.components.DownloadInfo.download":"\u0110ang t\u1ea3i v\u1ec1","app.components.DownloadInfo.text":"Vi\u1ec7c n\xe0y c\xf3 th\u1ec3 t\u1ed1n m\u1ed9t ph\xfat. C\u1ea3m \u01a1n b\u1ea1n v\xec s\u1ef1 ki\xean nh\u1eabn.","app.components.EmptyAttributes.title":"Ch\u01b0a c\xf3 tr\u01b0\u1eddng nh\u1eadp li\u1ec7u n\xe0o","app.components.HomePage.button.blog":"XEM TH\xcaM TR\xcaN BLOG","app.components.HomePage.community":"T\xecm c\u1ed9ng \u0111\u1ed3ng tr\xean web","app.components.HomePage.community.content":"Th\u1ea3o lu\u1eadn v\u1edbi th\xe0nh vi\xean, ng\u01b0\u1eddi \u0111\xf3ng g\xf3p v\xe0 l\u1eadp tr\xecnh vi\xean tr\xean nh\u1eefng k\xeanh kh\xe1c nhau.","app.components.HomePage.welcome":"Ch\xe0o m\u1eebng b\u1ea1n l\xean t\xe0u!","app.components.HomePage.welcome.again":"Ch\xe0o m\u1eebng ","app.components.HomePage.welcomeBlock.content":"Ch\xfang t\xf4i h\u1ea1nh ph\xfac khi c\xf3 b\u1ea1n l\xe0 m\u1ed9t ph\u1ea7n c\u1ee7a c\u1ed9ng \u0111\u1ed3ng. Ch\xfang t\xf4i li\xean t\u1ee5c t\xecm ki\u1ebfm s\u1ef1 ph\u1ea3n h\u1ed3i, do \u0111\xf3 b\u1ea1n c\xf3 th\u1ec3 Li\xean h\u1ec7 tr\u1ef1c ti\u1ebfp v\u1edbi ch\xfang t\xf4i tr\xean ","app.components.HomePage.welcomeBlock.content.again":"Ch\xfang t\xf4i hi v\u1ecdng b\u1ea1n c\xf3 ti\u1ebfn tri\u1ec3n tr\xean d\u1ef1 \xe1n c\u1ee7a b\u1ea1n... B\u1ea1n t\u1ef1 do \u0111\u1ecdc tin t\u1ee9c m\u1edbi nh\u1ea5t v\u1ec1 Strapi. Ch\xfang t\xf4i \u0111ang c\u1ed1 g\u1eafng h\u1ebft m\u1ee9c \u0111\u1ec3 c\u1ea3i thi\u1ec7n s\u1ea3n ph\u1ea9m d\u1ef1a tr\xean ph\u1ea3n h\u1ed3i c\u1ee7a b\u1ea1n.","app.components.HomePage.welcomeBlock.content.issues":"v\u1ea5n \u0111\u1ec1.","app.components.HomePage.welcomeBlock.content.raise":" ho\u1eb7c n\xeau l\xean ","app.components.ImgPreview.hint":"K\xe9o v\xe0 th\u1ea3 t\u1eadp tin c\u1ee7a b\u1ea1n v\xe0o khu v\u1ef1c n\xe0y ho\u1eb7c {browse} \u0111\u1ec3 t\xecm t\u1eadp tin t\u1ea3i l\xean","app.components.ImgPreview.hint.browse":"duy\u1ec7t","app.components.InputFile.newFile":"Th\xeam t\u1eadp tin m\u1edbi","app.components.InputFileDetails.open":"M\u1edf ra \u1edf th\u1ebb m\u1edbi","app.components.InputFileDetails.originalName":"T\xean g\u1ed1c:","app.components.InputFileDetails.remove":"Xo\xe1 t\u1eadp tin n\xe0y","app.components.InputFileDetails.size":"K\xedch th\u01b0\u1edbc:","app.components.InstallPluginPage.Download.description":"N\xf3 s\u1ebd t\u1ed1n m\u1ed9t v\xe0i gi\xe2y \u0111\u1ec3 t\u1ea3i v\u1ec1 v\xe0 c\xe0i \u0111\u1eb7t plugin.","app.components.InstallPluginPage.Download.title":"\u0110ang t\u1ea3i v\u1ec1...","app.components.InstallPluginPage.description":"M\u1edf r\u1ed9ng \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n d\u1ec5 d\xe0ng","app.components.LeftMenuFooter.documentation":"T\xe0i li\u1ec7u","app.components.LeftMenuFooter.help":"Gi\xfap \u0111\u1ee1","app.components.LeftMenuFooter.poweredBy":"Cung c\u1ea5p b\u1edfi ","app.components.LeftMenuLinkContainer.configuration":"C\xe1c c\u1ea5u h\xecnh","app.components.LeftMenuLinkContainer.general":"Chung","app.components.LeftMenuLinkContainer.installNewPlugin":"Ch\u1ee3","app.components.LeftMenuLinkContainer.listPlugins":"Plugins","app.components.LeftMenuLinkContainer.noPluginsInstalled":"Ch\u01b0a c\xf3 plugins n\xe0o \u0111\u01b0\u1ee3c c\xe0i \u0111\u1eb7t","app.components.LeftMenuLinkContainer.plugins":"Plugins","app.components.ListPluginsPage.description":"Danh s\xe1ch plugins \u0111\xe3 c\xe0i trong d\u1ef1 \xe1n.","app.components.ListPluginsPage.helmet.title":"Danh s\xe1ch plugins","app.components.ListPluginsPage.title":"Plugins","app.components.Logout.logout":"\u0110\u0103ng xu\u1ea5t","app.components.Logout.profile":"H\u1ed3 s\u01a1","app.components.NotFoundPage.back":"Tr\u1edf v\u1ec1 trang ch\u1ee7","app.components.NotFoundPage.description":"Kh\xf4ng T\xecm Th\u1ea5y","app.components.Official":"Ch\xednh Th\u1ee9c","app.components.Onboarding.label.completed":"% \u0111\xe3 ho\xe0n th\xe0nh","app.components.Onboarding.title":"Videos B\u1eaft \u0110\u1ea7u","app.components.PluginCard.Button.label.download":"T\u1ea3i v\u1ec1","app.components.PluginCard.Button.label.install":"\u0110\xe3 \u0111\u01b0\u1ee3c c\xe0i \u0111\u1eb7t","app.components.PluginCard.PopUpWarning.install.impossible.autoReload.needed":"Ch\u1ee9c n\u0103ng autoReload kh\xf4ng ho\u1ea1t \u0111\u1ed9ng. Vui l\xf2ng ch\u1ea1y \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n v\u1edbi `yarn develop`.","app.components.PluginCard.PopUpWarning.install.impossible.confirm":"T\xf4i hi\u1ec3u!","app.components.PluginCard.PopUpWarning.install.impossible.environment":"V\xec nh\u1eefng l\xfd do b\u1ea3o m\u1eadt, ch\u1ec9 m\u1ed9t plugin c\xf3 th\u1ec3 \u0111\u01b0\u1ee3c t\u1ea3i v\u1ec1 trong m\xf4i tr\u01b0\u1eddng ph\xe1t tri\u1ec3n.","app.components.PluginCard.PopUpWarning.install.impossible.title":"T\u1ea3i v\u1ec1 kh\xf4ng kh\u1ea3 thi","app.components.PluginCard.compatible":"T\u01b0\u01a1ng th\xedch v\u1edbi \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n","app.components.PluginCard.compatibleCommunity":"T\u01b0\u01a1ng th\xedch v\u1edbi c\u1ed9ng \u0111\u1ed3ng","app.components.PluginCard.more-details":"Th\xeam chi ti\u1ebft","app.components.listPlugins.button":"Th\xeam m\u1edbi Plugin","app.components.listPlugins.title.none":"Ch\u01b0a c\xf3 plugins n\xe0o \u0111\u01b0\u1ee3c c\xe0i \u0111\u1eb7t","app.components.listPluginsPage.deletePlugin.error":"M\u1ed9t l\u1ed7i x\u1ea3y ra trong khi g\u1ee1 b\u1ecf plugin","app.containers.App.notification.error.init":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi g\u1eedi y\xeau c\u1ea7u \u0111\u1ebfn API","app.utils.SelectOption.defaultMessage":" ","app.utils.defaultMessage":" ","app.utils.delete":"Xo\xe1","app.utils.placeholder.defaultMessage":" ","components.AutoReloadBlocker.description":"Ch\u1ea1y Strapi v\u1edbi m\u1ed9t trong c\xe1c l\u1ec7nh sau:","components.AutoReloadBlocker.header":"T\xednh n\u0103ng T\u1ea3i l\u1ea1i b\u1ecb b\u1eaft bu\u1ed9c cho plugin n\xe0y.","components.ErrorBoundary.title":"\u0110i\u1ec1u g\xec \u0111\xf3 kh\xf4ng \u1ed5n...","components.Input.error.attribute.key.taken":"Gi\xe1 tr\u1ecb n\xe0y \u0111\xe3 t\u1ed3n t\u1ea1i","components.Input.error.attribute.sameKeyAndName":"Kh\xf4ng th\u1ec3 b\u1eb1ng nhau","components.Input.error.attribute.taken":"Tr\u01b0\u1eddng nh\u1eadp li\u1ec7u n\xe0y \u0111\xe3 t\u1ed3n t\u1ea1i","components.Input.error.contentTypeName.taken":"T\xean n\xe0y \u0111\xe3 t\u1ed3n t\u1ea1i","components.Input.error.custom-error":"{errorMessage} ","components.Input.error.password.noMatch":"Nh\u1eefng m\u1eadt kh\u1ea9u kh\xf4ng kh\u1edbp","components.Input.error.validation.email":"\u0110\xe2y kh\xf4ng ph\u1ea3i l\xe0 email","components.Input.error.validation.json":"\u0110\xe2y kh\xf4ng ph\u1ea3i l\xe0 JSON","components.Input.error.validation.max":"Gi\xe1 tr\u1ecb qu\xe1 cao.","components.Input.error.validation.maxLength":"Gi\xe1 tr\u1ecb qu\xe1 d\xe0i.","components.Input.error.validation.min":"Gi\xe1 tr\u1ecb qu\xe1 th\u1ea5p.","components.Input.error.validation.minLength":"Gi\xe1 tr\u1ecb qu\xe1 ng\u1eafn.","components.Input.error.validation.minSupMax":"Kh\xf4ng th\u1ec3 l\xe0 tr\xean m\u0169","components.Input.error.validation.regex":"Gi\xe1 tr\u1ecb kh\xf4ng kh\u1edbi v\u1edbi regex.","components.Input.error.validation.required":"Gi\xe1 tr\u1ecb n\xe0y b\u1eaft bu\u1ed9c.","components.InputSelect.option.placeholder":"Ch\u1ecdn \u1edf \u0111\xe2y","components.ListRow.empty":"Kh\xf4ng c\xf3 d\u1eef li\u1ec7u \u0111\u1ec3 hi\u1ec3n th\u1ecb.","components.OverlayBlocker.description":"B\u1ea1n \u0111ang d\xf9ng m\u1ed9t t\xednh n\u0103ng m\xe0 n\xf3 c\u1ea7n ph\u1ea3i kh\u1edfi \u0111\u1ed9ng l\u1ea1i m\xe1y ch\u1ee7. Vui l\xf2ng ch\u1edd cho m\xe1y ch\u1ee7 kh\u1edfi \u0111\u1ed9ng xong.","components.OverlayBlocker.description.serverError":"M\xe1y ch\u1ee7 n\xean \u0111\u01b0\u1ee3c kh\u1edfi \u0111\u1ed9ng l\u1ea1i, vui l\xf2ng ki\u1ec3m tra nh\u1eadt k\xfd c\u1ee7a b\u1ea1n trong c\u1eeda s\u1ed5 l\u1ec7nh","components.OverlayBlocker.title":"\u0110ang \u0111\u1ee3i kh\u1edfi \u0111\u1ed9ng l\u1ea1i...","components.OverlayBlocker.title.serverError":"Vi\u1ec7c kh\u1edfi \u0111\u1ed9ng l\u1ea1i t\u1ed1n nhi\u1ec1u th\u1eddi gian h\u01a1n mong \u0111\u1ee3i","components.PageFooter.select":"b\u1ea3n ghi tr\xean trang","components.ProductionBlocker.description":"V\xec l\xfd do an to\xe0n ch\xfang t\xf4i ph\u1ea3i v\xf4 hi\u1ec7u ho\xe1 plugin trong c\xe1c m\xf4i tr\u01b0\u1eddng kh\xe1c","components.ProductionBlocker.header":"Plugin n\xe0y ch\u1ec9 hi\u1ec7u l\u1ee9c trong m\xf4i tr\u01b0\u1eddng ph\xe1t tri\u1ec3n","components.Wysiwyg.collapse":"Co l\u1ea1i","components.Wysiwyg.selectOptions.H1":"Ti\xeau \u0111\u1ec1 H1","components.Wysiwyg.selectOptions.H2":"Ti\xeau \u0111\u1ec1 H2","components.Wysiwyg.selectOptions.H3":"Ti\xeau \u0111\u1ec1 H3","components.Wysiwyg.selectOptions.H4":"Ti\xeau \u0111\u1ec1 H4","components.Wysiwyg.selectOptions.H5":"Ti\xeau \u0111\u1ec1 H5","components.Wysiwyg.selectOptions.H6":"Ti\xeau \u0111\u1ec1 H6","components.Wysiwyg.selectOptions.title":"Th\xeam m\u1ed9t ti\xeau \u0111\u1ec1","components.WysiwygBottomControls.charactersIndicators":"k\xfd t\u1ef1","components.WysiwygBottomControls.fullscreen":"Gi\xe3n ra","components.WysiwygBottomControls.uploadFiles":"K\xe9o v\xe0 th\u1ea3 c\xe1c t\u1eadp tin, d\xe1n t\u1eeb b\u1ed9 nh\u1edb t\u1ea1m hay {browse}.","components.WysiwygBottomControls.uploadFiles.browse":"ch\u1ecdn ch\xfang","components.popUpWarning.message":"B\u1ea1n c\xf3 ch\u1eafc l\xe0 b\u1ea1n mu\u1ed1n xo\xe1 n\xf3?","components.popUpWarning.title":"Vui l\xf2ng x\xe1c nh\u1eadn","content-manager.EditRelations.title":"D\u1eef Li\u1ec7u Quan H\u1ec7","content-manager.components.AddFilterCTA.add":"L\u1ecdc","content-manager.components.AddFilterCTA.hide":"L\u1ecdc","content-manager.components.DraggableAttr.edit":"Nh\u1ea5n \u0111\u1ec3 ch\u1ec9nh s\u1eeda","content-manager.components.EmptyAttributesBlock.button":"\u0110\u1ebfn trang c\xe0i \u0111\u1eb7t","content-manager.components.EmptyAttributesBlock.description":"B\u1ea1n c\xf3 th\u1ec3 thay \u0111\u1ed5i c\xe0i \u0111\u1eb7t c\u1ee7a b\u1ea1n","content-manager.components.FilterOptions.button.apply":"\xc1p d\u1ee5ng","content-manager.components.FiltersPickWrapper.PluginHeader.actions.apply":"\xc1p d\u1ee5ng","content-manager.components.FiltersPickWrapper.PluginHeader.actions.clearAll":"X\xf3a t\u1ea5t c\u1ea3","content-manager.components.FiltersPickWrapper.PluginHeader.description":"C\xe0i \u0111\u1eb7t c\xe1c \u0111i\u1ec1u ki\u1ec7n \u0111\u1ec3 \xe1p d\u1ee5ng cho vi\u1ec7c l\u1ecdc c\xe1c b\u1ea3n ghi","content-manager.components.FiltersPickWrapper.PluginHeader.title.filter":"C\xe1c b\u1ed9 l\u1ecdc","content-manager.components.FiltersPickWrapper.hide":"\u1ea8n \u0111i","content-manager.components.LimitSelect.itemsPerPage":"S\u1ed1 l\u01b0\u1ee3ng b\u1ea3n ghi trong trang","content-manager.components.Search.placeholder":"T\xecm m\u1ed9t b\u1ea3n ghi...","content-manager.components.TableDelete.delete":"X\xf3a t\u1ea5t c\u1ea3","content-manager.components.TableDelete.deleteSelected":"X\xf3a \u0111\xe3 ch\u1ecdn","content-manager.components.TableEmpty.withFilters":"Kh\xf4ng c\xf3 {contentType} v\u1edbi b\u1ed9 l\u1ecdc \u0111\u01b0\u1ee3c d\xf9ng","content-manager.components.TableEmpty.withSearch":"Kh\xf4ng c\xf3 {contentType} t\u01b0\u01a1ng \u1ee9ng v\u1edbi t\xecm ki\u1ebfm ({search})...","content-manager.components.TableEmpty.withoutFilter":"Kh\xf4ng c\xf3 {contentType}...","content-manager.containers.Edit.Link.Layout":"C\u1ea5u h\xecnh b\u1ed1 c\u1ee5c","content-manager.containers.Edit.addAnItem":"Th\xeam m\u1ed9t b\u1ea3n ghi...","content-manager.containers.Edit.clickToJump":"Nh\u1ea5n \u0111\u1ec3 nh\u1ea3y v\xe0o b\u1ea3n ghi","content-manager.containers.Edit.delete":"X\xf3a","content-manager.containers.Edit.editing":"\u0110\u0103ng s\u1eeda...","content-manager.containers.Edit.pluginHeader.title.new":"T\u1ea1o m\u1ed9t B\u1ea3n ghi","content-manager.containers.Edit.reset":"L\xe0m l\u1ea1i","content-manager.containers.Edit.returnList":"Tr\u1edf v\u1ec1 danh s\xe1ch","content-manager.containers.Edit.seeDetails":"Chi ti\u1ebft","content-manager.containers.Edit.submit":"L\u01b0u","content-manager.containers.EditView.notification.errors":"B\u1ea3ng nh\u1eadp li\u1ec7u c\xf3 v\xe0i l\u1ed7i","content-manager.containers.Home.introduction":"\u0110\u1ec3 ch\u1ec9nh s\u1eeda c\xe1c b\u1ea3n ghi c\u1ee7a b\u1ea1n, \u0111i \u0111\u1ebfn li\xean k\u1ebft \u1edf menu b\xean tr\xe1i. Plugin n\xe0y ch\u01b0a c\xf3 c\xe1ch th\xedch h\u1ee3p \u0111\u1ec3 ch\u1ec9nh s\u1eeda c\xe1c c\xe0i \u0111\u1eb7t v\xe0 n\xf3 v\u1eabn \u0111ang \u0111\u01b0\u1ee3c ph\xe1t tri\u1ec3n.","content-manager.containers.Home.pluginHeaderDescription":"Qu\u1ea3n l\xfd c\xe1c b\u1ea3n ghi th\xf4ng qua m\u1ed9t giao di\u1ec7n m\u1ea1nh v\xe0 \u0111\u1eb9p.","content-manager.containers.Home.pluginHeaderTitle":"Qu\u1ea3n L\xfd N\u1ed9i Dung","content-manager.containers.List.errorFetchRecords":"L\u1ed7i","content-manager.containers.ListPage.displayedFields":"C\xe1c tr\u01b0\u1eddng \u0111\xe3 \u0111\u01b0\u1ee3c tr\xecnh b\xe0y","content-manager.containers.SettingPage.attributes":"C\xe1c tr\u01b0\u1eddng thu\u1ed9c t\xednh","content-manager.containers.SettingPage.attributes.description":"\u0110\u1ecbnh ngh\u0129a th\u1ee9 t\u1ef1 c\xe1c thu\u1ed9c t\xednh","content-manager.containers.SettingPage.editSettings.description":"K\xe9o & th\u1ea3 c\xe1c tr\u01b0\u1eddng \u0111\u1ec3 x\xe2y d\u1ef1ng b\u1ed1 c\u1ee5c","content-manager.containers.SettingPage.editSettings.entry.title":"T\xean b\u1ea3n ghi","content-manager.containers.SettingPage.editSettings.entry.title.description":"C\xe0i \u0111\u1eb7t tr\u01b0\u1eddng \u0111\u01b0\u1ee3c tr\xecnh b\xe0y trong b\u1ea3n ghi c\u1ee7a b\u1ea1n","content-manager.containers.SettingPage.editSettings.title":"Ch\u1ec9nh s\u1eeda hi\u1ec3n th\u1ecb (c\xe1c c\xe0i \u0111\u1eb7t)","content-manager.containers.SettingPage.layout":"B\u1ed1 c\u1ee5c","content-manager.containers.SettingPage.listSettings.title":"Hi\u1ec3n th\u1ecb danh s\xe1ch (c\xe1c c\xe0i \u0111\u1eb7t)","content-manager.containers.SettingPage.relations":"C\xe1c tr\u01b0\u1eddng Quan H\u1ec7","content-manager.containers.SettingPage.settings":"C\xe1c c\xe0i \u0111\u1eb7t","content-manager.containers.SettingViewModel.pluginHeader.title":"Qu\u1ea3n L\xfd N\u1ed9i Dung - {name}","content-manager.containers.SettingsPage.Block.contentType.description":"C\u1ea5u h\xecnh c\xe1c c\xe0i \u0111\u1eb7t ri\xeang","content-manager.containers.SettingsPage.Block.generalSettings.title":"Chung","content-manager.containers.SettingsView.list.title":"C\xe1c c\u1ea5u h\xecnh v\u1ec1 Tr\xecnh b\xe0y","content-manager.emptyAttributes.title":"Ch\u01b0a c\xf3 tr\u01b0\u1eddng n\xe0o h\u1ebft","content-manager.error.attribute.key.taken":"Gi\xe1 tr\u1ecb n\xe0y \u0111\xe3 t\u1ed3n t\u1ea1i","content-manager.error.attribute.sameKeyAndName":"Kh\xf4ng th\u1ec3 b\u1eb1ng nhau","content-manager.error.attribute.taken":"T\xean tr\u01b0\u1eddng n\xe0y \u0111\xe3 t\u1ed3n t\u1ea1i","content-manager.error.contentTypeName.taken":"T\xean n\xe0y \u0111\xe3 t\u1ed3n t\u1ea1i","content-manager.error.model.fetch":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi l\u1ea5y v\u1ec1 c\u1ea5u h\xecnh n\u1ed9i dung.","content-manager.error.record.create":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi t\u1ea1o b\u1ea3n ghi.","content-manager.error.record.delete":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi xo\xe1 b\u1ea3n ghi.","content-manager.error.record.fetch":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi l\u1ea5y v\u1ec1 b\u1ea3n ghi.","content-manager.error.record.update":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi c\u1eadp nh\u1eadt b\u1ea3n ghi.","content-manager.error.records.count":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi l\u1ea5y v\u1ec1 s\u1ed1 l\u01b0\u1ee3ng b\u1ea3n ghi.","content-manager.error.records.fetch":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi l\u1ea5y v\u1ec1 c\xe1c b\u1ea3n ghi.","content-manager.error.schema.generation":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi qu\xe1 tr\xecnh t\u1ea1o ra l\u01b0\u1ee3c \u0111\u1ed3.","content-manager.error.validation.json":"\u0110\xe2y kh\xf4ng ph\u1ea3i l\xe0 JSON","content-manager.error.validation.max":"Gi\xe1 tr\u1ecb qu\xe1 cao.","content-manager.error.validation.maxLength":"Gi\xe1 tr\u1ecb qu\xe1 d\xe0i.","content-manager.error.validation.min":"Gi\xe1 tr\u1ecb qu\xe1 th\u1ea5p.","content-manager.error.validation.minLength":"Gi\xe1 tr\u1ecb qu\xe1 ng\u1eafn.","content-manager.error.validation.minSupMax":"Kh\xf4ng th\u1ec3 l\xe0 tr\xean m\u0169","content-manager.error.validation.regex":"Gi\xe1 tr\u1ecb kh\xf4ng kh\u1edbi v\u1edbi regex.","content-manager.error.validation.required":"Gi\xe1 tr\u1ecb n\xe0y b\u1eaft bu\u1ed9c.","content-manager.form.Input.bulkActions":"K\xedch ho\u1ea1t ho\u1ea1t \u0111\u1ed9ng g\u1ed9p","content-manager.form.Input.defaultSort":"Thu\u1ed9c t\xednh s\u1eafp x\u1ebfp m\u1eb7c \u0111\u1ecbnh","content-manager.form.Input.description":"M\xf4 t\u1ea3","content-manager.form.Input.description.placeholder":"T\xean hi\u1ec3n th\u1ecb trong h\u1ed3 s\u01a1","content-manager.form.Input.editable":"Tr\u01b0\u1eddng ch\u1ec9nh s\u1eeda \u0111\u01b0\u1ee3c","content-manager.form.Input.filters":"K\xedch ho\u1ea1t c\xe1c b\u1ed9 l\u1ecdc","content-manager.form.Input.label":"Nh\xe3n","content-manager.form.Input.label.inputDescription":"Gi\xe1 tr\u1ecb n\xe0y ghi \u0111\xe8 l\xean nh\xe3n \u0111\u01b0\u1ee3c tr\xecnh b\xe0y trong ph\u1ea7n \u0111\u1ea7u c\u1ee7a b\u1ea3ng","content-manager.form.Input.pageEntries":"B\u1ea3n ghi trong trang","content-manager.form.Input.placeholder":"Ch\u1ed7 ch\u1edd gi\xe1 tr\u1ecb","content-manager.form.Input.placeholder.placeholder":"Gi\xe1 tr\u1ecb tuy\u1ec7t v\u1eddi c\u1ee7a t\xf4i","content-manager.form.Input.search":"K\xedch ho\u1ea1t t\xecm ki\u1ebfm","content-manager.form.Input.search.field":"K\xedch ho\u1ea1t t\xecm ki\u1ebfm cho tr\u01b0\u1eddng n\xe0y","content-manager.form.Input.sort.field":"K\xedch ho\u1ea1t s\u1eafp x\u1ebfp tr\xean tr\u01b0\u1eddng n\xe0y","content-manager.form.Input.wysiwyg":"Tr\xecnh b\xe0y nh\u01b0 l\xe0 WYSIWYG","content-manager.global.displayedFields":"C\xe1c Tr\u01b0\u1eddng \u0110\xe3 \u0110\u01b0\u1ee3c Tr\xecnh B\xe0y","content-manager.groups":"Nh\xf3m","content-manager.groups.numbered":"Nh\xf3m ({number})","content-manager.notification.error.displayedFields":"B\u1ea1n c\u1ea7n tr\xecnh b\xe0y \xedt nh\u1ea5t m\u1ed9t tr\u01b0\u1eddng","content-manager.notification.error.relationship.fetch":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi l\u1ea5y v\u1ec1 m\u1ed1i quan h\u1ec7.","content-manager.notification.info.SettingPage.disableSort":"B\u1ea1n c\u1ea7n c\xf3 m\u1ed9t thu\u1ed9c t\xednh \u0111\u01b0\u1ee3c ph\xe9p s\u1eafp x\u1ebfp","content-manager.notification.info.minimumFields":"B\u1ea1n c\u1ea7n hi\u1ec3n th\u1ecb \xedt nh\u1ea5t m\u1ed9t tr\u01b0\u1eddng","content-manager.notification.upload.error":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra trong khi t\u1ea3i l\xean c\xe1c t\u1eadp tin c\u1ee7a b\u1ea1n","content-manager.pageNotFound":"Kh\xf4ng T\xecm Th\u1ea5y Trang","content-manager.plugin.description.long":"C\xe1ch nhanh \u0111\u1ec3 xem, s\u1eeda v\xe0 xo\xe1 d\u1eef li\u1ec7u trong c\u01a1 s\u1edf d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n.","content-manager.plugin.description.short":"C\xe1ch nhanh \u0111\u1ec3 xem, s\u1eeda v\xe0 xo\xe1 d\u1eef li\u1ec7u trong c\u01a1 s\u1edf d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n.","content-manager.popUpWarning.bodyMessage.contentType.delete":"B\u1ea1n c\xf3 ch\u1eafc l\xe0 mu\u1ed1n xo\xe1 b\u1ea3n ghi n\xe0y kh\xf4ng?","content-manager.popUpWarning.bodyMessage.contentType.delete.all":"B\u1ea1n c\xf3 ch\u1eafc l\xe0 mu\u1ed1n xo\xe1 c\xe1c b\u1ea3n ghi n\xe0y kh\xf4ng?","content-manager.popUpWarning.warning.cancelAllSettings":"B\u1ea1n c\xf3 ch\u1eafc l\xe0 mu\u1ed1n h\u1ee7y b\u1ecf c\xe1c thay \u0111\u1ed5i c\u1ee7a b\u1ea1n?","content-manager.popUpWarning.warning.updateAllSettings":"N\xf3 s\u1ebd thay \u0111\u1ed5i t\u1ea5t c\u1ea3 c\xe0i \u0111\u1eb7t c\u1ee7a b\u1ea1n","content-manager.success.record.delete":"\u0110\xe3 xo\xe1","content-manager.success.record.save":"\u0110\xe3 l\u01b0u","form.button.done":"Ho\xe0n th\xe0nh","notification.error":"M\u1ed9t l\u1ed7i \u0111\xe3 x\u1ea3y ra","notification.error.layout":"Kh\xf4ng th\u1ec3 kh\xf4i ph\u1ee5c","notification.form.error.fields":"B\u1ea3ng nh\u1eadp li\u1ec7u c\xf3 v\xe0i l\u1ed7i","request.error.model.unknown":"C\u1ea5u tr\xfac n\xe0y kh\xf4ng t\u1ed3n t\u1ea1i"}')}}]);
package/index.js CHANGED
@@ -1,66 +1,39 @@
1
1
  'use strict';
2
2
 
3
3
  const path = require('path');
4
- const _ = require('lodash');
5
4
  const fs = require('fs-extra');
6
5
  const webpack = require('webpack');
7
6
  const WebpackDevServer = require('webpack-dev-server');
8
7
  const chalk = require('chalk');
9
- const chokidar = require('chokidar');
10
- const getWebpackConfig = require('./webpack.config');
11
-
12
- const getPkgPath = name => path.dirname(require.resolve(`${name}/package.json`));
13
-
14
- const DEFAULT_PLUGINS = [
15
- 'content-type-builder',
16
- 'content-manager',
17
- 'upload',
18
- 'email',
19
- 'i18n',
20
- 'users-permissions',
21
- ];
22
-
23
- function getCustomWebpackConfig(dir, config) {
24
- const adminConfigPath = path.join(dir, 'src', 'admin', 'webpack.config.js');
25
-
26
- let webpackConfig = getWebpackConfig(config);
27
-
28
- if (fs.existsSync(adminConfigPath)) {
29
- const webpackAdminConfig = require(path.resolve(adminConfigPath));
30
-
31
- if (_.isFunction(webpackAdminConfig)) {
32
- // Expose the devServer configuration
33
- if (config.devServer) {
34
- webpackConfig.devServer = config.devServer;
35
- }
36
-
37
- webpackConfig = webpackAdminConfig(webpackConfig, webpack);
38
-
39
- if (!webpackConfig) {
40
- console.error(
41
- `${chalk.red('Error:')} Nothing was returned from your custom webpack configuration`
42
- );
43
- process.exit(1);
44
- }
45
- }
46
- }
47
-
48
- return webpackConfig;
49
- }
50
-
51
- async function build({ plugins, dir, env, options, optimize, forceBuild }) {
52
- const buildAdmin = await shouldBuildAdmin({ dir, plugins });
8
+ const {
9
+ createCacheDir,
10
+ getCustomWebpackConfig,
11
+ shouldBuildAdmin,
12
+ watchAdminFiles,
13
+ } = require('./utils');
14
+
15
+ async function build({
16
+ appDir,
17
+ buildDestDir,
18
+ env,
19
+ forceBuild,
20
+ optimize,
21
+ options,
22
+ plugins,
23
+ useTypeScript,
24
+ }) {
25
+ const buildAdmin = await shouldBuildAdmin({ appDir, plugins, useTypeScript });
53
26
 
54
27
  if (!buildAdmin && !forceBuild) {
55
28
  return;
56
29
  }
57
30
 
58
31
  // Create the cache dir containing the front-end files.
59
- await createCacheDir({ dir, plugins });
32
+ await createCacheDir({ appDir, plugins, useTypeScript });
60
33
 
61
- const cacheDir = path.resolve(dir, '.cache');
34
+ const cacheDir = path.resolve(appDir, '.cache');
62
35
  const entry = path.resolve(cacheDir, 'admin', 'src');
63
- const dest = path.resolve(dir, 'build');
36
+ const dest = path.resolve(buildDestDir, 'build');
64
37
 
65
38
  // Roots for the @strapi/babel-plugin-switch-ee-ce
66
39
  const roots = {
@@ -68,17 +41,19 @@ async function build({ plugins, dir, env, options, optimize, forceBuild }) {
68
41
  ceRoot: path.resolve(cacheDir, 'admin', 'src'),
69
42
  };
70
43
 
71
- const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].pathToPlugin);
44
+ const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].appPathToPlugin );
72
45
 
73
- const config = getCustomWebpackConfig(dir, {
74
- entry,
75
- pluginsPath,
46
+ const config = getCustomWebpackConfig(appDir, {
47
+ appDir,
76
48
  cacheDir,
77
49
  dest,
50
+ entry,
78
51
  env,
79
- options,
80
52
  optimize,
53
+ options,
54
+ pluginsPath,
81
55
  roots,
56
+ useTypeScript,
82
57
  });
83
58
 
84
59
  const compiler = webpack(config);
@@ -109,115 +84,32 @@ async function build({ plugins, dir, env, options, optimize, forceBuild }) {
109
84
  });
110
85
  }
111
86
 
112
- async function createPluginsJs(plugins, dest) {
113
- const pluginsArray = plugins.map(({ pathToPlugin, name }) => {
114
- const shortName = _.camelCase(name);
115
-
116
- /**
117
- * path.join, on windows, it uses backslashes to resolve path.
118
- * The problem is that Webpack does not windows paths
119
- * With this tool, we need to rely on "/" and not "\".
120
- * This is the reason why '..\\..\\..\\node_modules\\@strapi\\plugin-content-type-builder/strapi-admin.js' was not working.
121
- * The regexp at line 105 aims to replace the windows backslashes by standard slash so that webpack can deal with them.
122
- * Backslash looks to work only for absolute paths with webpack => https://webpack.js.org/concepts/module-resolution/#absolute-paths
123
- */
124
- const realPath = path
125
- .join(path.relative(path.resolve(dest, 'admin', 'src'), pathToPlugin), 'strapi-admin.js')
126
- .replace(/\\/g, '/');
127
-
128
- return {
129
- name,
130
- pathToPlugin: realPath,
131
- shortName,
132
- };
133
- });
134
-
135
- const content = `
136
- ${pluginsArray
137
- .map(({ pathToPlugin, shortName }) => {
138
- const req = `'${pathToPlugin}'`;
139
-
140
- return `import ${shortName} from ${req};`;
141
- })
142
- .join('\n')}
143
-
144
-
145
- const plugins = {
146
- ${[...pluginsArray]
147
- .map(({ name, shortName }) => {
148
- return ` '${name}': ${shortName},`;
149
- })
150
- .join('\n')}
151
- };
152
-
153
- export default plugins;
154
- `;
155
-
156
- return fs.writeFile(path.resolve(dest, 'admin', 'src', 'plugins.js'), content);
157
- }
158
-
159
- async function clean({ dir }) {
160
- const buildDir = path.join(dir, 'build');
161
- const cacheDir = path.join(dir, '.cache');
87
+ async function clean({ appDir, buildDestDir }) {
88
+ // FIXME rename admin build dir and path to build dir
89
+ const buildDir = path.join(buildDestDir, 'build');
90
+ // .cache dir is always located at the root of the app
91
+ const cacheDir = path.join(appDir, '.cache');
162
92
 
163
93
  fs.removeSync(buildDir);
164
94
  fs.removeSync(cacheDir);
165
95
  }
166
96
 
167
- async function copyAdmin(dest) {
168
- const adminPath = getPkgPath('@strapi/admin');
169
-
170
- // TODO copy ee folders for plugins
171
- await fs.copy(path.resolve(adminPath, 'ee', 'admin'), path.resolve(dest, 'ee', 'admin'));
172
-
173
- await fs.ensureDir(path.resolve(dest, 'config'));
174
- await fs.copy(path.resolve(adminPath, 'admin'), path.resolve(dest, 'admin'));
175
-
176
- // Copy package.json
177
- await fs.copy(path.resolve(adminPath, 'package.json'), path.resolve(dest, 'package.json'));
178
- }
179
-
180
- async function createCacheDir({ dir, plugins }) {
181
- const cacheDir = path.resolve(dir, '.cache');
182
-
183
- const pluginsWithFront = Object.keys(plugins)
184
- .filter(pluginName => {
185
- const pluginInfo = plugins[pluginName];
186
- return fs.existsSync(path.resolve(pluginInfo.pathToPlugin, 'strapi-admin.js'));
187
- })
188
- .map(name => ({ name, ...plugins[name] }));
189
-
190
- // create .cache dir
191
- await fs.emptyDir(cacheDir);
192
-
193
- // copy admin core code
194
- await copyAdmin(cacheDir);
195
-
196
- // Copy app.js
197
- const customAdminConfigFilePath = path.join(dir, 'src', 'admin', 'app.js');
198
-
199
- if (fs.existsSync(customAdminConfigFilePath)) {
200
- await fs.copy(customAdminConfigFilePath, path.resolve(cacheDir, 'admin', 'src', 'app.js'));
201
- }
202
-
203
- // Copy admin extensions folder
204
- const adminExtensionFolder = path.join(dir, 'src', 'admin', 'extensions');
205
-
206
- if (fs.existsSync(adminExtensionFolder)) {
207
- await fs.copy(adminExtensionFolder, path.resolve(cacheDir, 'admin', 'src', 'extensions'));
208
- }
209
-
210
- // create plugins.js with plugins requires
211
- await createPluginsJs(pluginsWithFront, cacheDir);
212
- }
213
-
214
- async function watchAdmin({ plugins, dir, host, port, browser, options }) {
97
+ async function watchAdmin({
98
+ appDir,
99
+ browser,
100
+ buildDestDir,
101
+ host,
102
+ options,
103
+ plugins,
104
+ port,
105
+ useTypeScript,
106
+ }) {
215
107
  // Create the cache dir containing the front-end files.
216
- const cacheDir = path.join(dir, '.cache');
217
- await createCacheDir({ dir, plugins });
108
+ const cacheDir = path.join(appDir, '.cache');
109
+ await createCacheDir({ appDir, plugins, useTypeScript });
218
110
 
219
111
  const entry = path.join(cacheDir, 'admin', 'src');
220
- const dest = path.join(dir, 'build');
112
+ const dest = path.join(buildDestDir, 'build');
221
113
  const env = 'development';
222
114
 
223
115
  // Roots for the @strapi/babel-plugin-switch-ee-ce
@@ -226,16 +118,16 @@ async function watchAdmin({ plugins, dir, host, port, browser, options }) {
226
118
  ceRoot: path.resolve(cacheDir, 'admin', 'src'),
227
119
  };
228
120
 
229
- const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].pathToPlugin);
121
+ const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].appPathToPlugin);
230
122
 
231
123
  const args = {
232
- entry,
124
+ appDir,
233
125
  cacheDir,
234
- pluginsPath,
235
126
  dest,
127
+ entry,
236
128
  env,
237
- port,
238
129
  options,
130
+ pluginsPath,
239
131
  roots,
240
132
  devServer: {
241
133
  port,
@@ -246,7 +138,6 @@ async function watchAdmin({ plugins, dir, host, port, browser, options }) {
246
138
  warnings: false,
247
139
  },
248
140
  },
249
-
250
141
  open: browser === 'true' ? true : browser,
251
142
  devMiddleware: {
252
143
  publicPath: options.adminPath,
@@ -256,9 +147,10 @@ async function watchAdmin({ plugins, dir, host, port, browser, options }) {
256
147
  disableDotRule: true,
257
148
  },
258
149
  },
150
+ useTypeScript,
259
151
  };
260
152
 
261
- const webpackConfig = getCustomWebpackConfig(dir, args);
153
+ const webpackConfig = getCustomWebpackConfig(appDir, args);
262
154
 
263
155
  const compiler = webpack(webpackConfig);
264
156
 
@@ -279,90 +171,7 @@ async function watchAdmin({ plugins, dir, host, port, browser, options }) {
279
171
 
280
172
  runServer();
281
173
 
282
- watchFiles(dir);
283
- }
284
-
285
- /**
286
- * Listen to files change and copy the changed files in the .cache/admin folder
287
- * when using the dev mode
288
- * @param {string} dir
289
- */
290
- async function watchFiles(dir) {
291
- const cacheDir = path.join(dir, '.cache');
292
- const appExtensionFile = path.join(dir, 'src', 'admin', 'app.js');
293
- const extensionsPath = path.join(dir, 'src', 'admin', 'extensions');
294
-
295
- // Only watch the admin/app.js file and the files that are in the ./admin/extensions/folder
296
- const filesToWatch = [appExtensionFile, extensionsPath];
297
-
298
- const watcher = chokidar.watch(filesToWatch, {
299
- ignoreInitial: true,
300
- ignorePermissionErrors: true,
301
- });
302
-
303
- watcher.on('all', async (event, filePath) => {
304
- const isAppFile = filePath.includes(appExtensionFile);
305
-
306
- // The app.js file needs to be copied in the .cache/admin/src/app.js and the other ones needs to
307
- // be copied in the .cache/admin/src/extensions folder
308
- const targetPath = isAppFile
309
- ? path.join(path.normalize(filePath.split(appExtensionFile)[1]), 'app.js')
310
- : path.join('extensions', path.normalize(filePath.split(extensionsPath)[1]));
311
-
312
- const destFolder = path.join(cacheDir, 'admin', 'src');
313
-
314
- if (event === 'unlink' || event === 'unlinkDir') {
315
- // Remove the file or folder
316
- // We need to copy the original files when deleting an override one
317
- try {
318
- fs.removeSync(path.join(destFolder, targetPath));
319
- } catch (err) {
320
- console.log('An error occured while deleting the file', err);
321
- }
322
- } else {
323
- // In any other case just copy the file into the .cache/admin/src folder
324
- try {
325
- await fs.copy(filePath, path.join(destFolder, targetPath));
326
- } catch (err) {
327
- console.log(err);
328
- }
329
- }
330
- });
331
- }
332
-
333
- const hasCustomAdminCode = async dir => {
334
- const customAdminPath = path.join(dir, 'src', 'admin');
335
- const customAdminConfigFile = path.join(customAdminPath, 'app.js');
336
- const customAdminWebpackFile = path.join(customAdminPath, 'webpack.config.js');
337
-
338
- const hasCustomConfigFile = await fs.pathExists(customAdminConfigFile);
339
- const hasCustomWebpackFile = await fs.pathExists(customAdminWebpackFile);
340
-
341
- return hasCustomConfigFile || hasCustomWebpackFile;
342
- };
343
-
344
- /**
345
- * Checks if the project's installed plugins are not the same as a default one.
346
- * @param {Object} plugins
347
- * @returns {boolean}
348
- */
349
- const hasNonDefaultPlugins = plugins => {
350
- // List of plugins that are not the ones installed in a generated app
351
- const installedPlugins = Object.keys(plugins).filter(x => !DEFAULT_PLUGINS.includes(x));
352
-
353
- // List of default plugins uninstalled from a generated app
354
- const missingPlugins = DEFAULT_PLUGINS.filter(x => !Object.keys(plugins).includes(x));
355
-
356
- const diff = [...installedPlugins, ...missingPlugins];
357
-
358
- return diff.length > 0;
359
- };
360
-
361
- async function shouldBuildAdmin({ dir, plugins }) {
362
- const appHasCustomAdminCode = await hasCustomAdminCode(dir);
363
- const appHasNonDefaultPlugins = hasNonDefaultPlugins(plugins);
364
-
365
- return appHasCustomAdminCode || appHasNonDefaultPlugins;
174
+ watchAdminFiles(appDir, useTypeScript);
366
175
  }
367
176
 
368
177
  module.exports = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/admin",
3
- "version": "4.2.0-alpha.O",
3
+ "version": "4.2.0-beta.0",
4
4
  "description": "Strapi Admin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -52,11 +52,11 @@
52
52
  "@fortawesome/free-brands-svg-icons": "^5.15.3",
53
53
  "@fortawesome/free-solid-svg-icons": "^5.15.3",
54
54
  "@fortawesome/react-fontawesome": "^0.1.14",
55
- "@strapi/babel-plugin-switch-ee-ce": "4.2.0-alpha.O",
56
- "@strapi/design-system": "0.0.1-alpha.78",
57
- "@strapi/helper-plugin": "4.2.0-alpha.O",
58
- "@strapi/icons": "0.0.1-alpha.78",
59
- "@strapi/utils": "4.2.0-alpha.O",
55
+ "@strapi/babel-plugin-switch-ee-ce": "4.2.0-beta.0",
56
+ "@strapi/design-system": "0.0.1-alpha.79",
57
+ "@strapi/helper-plugin": "4.2.0-beta.0",
58
+ "@strapi/icons": "0.0.1-alpha.79",
59
+ "@strapi/utils": "4.2.0-beta.0",
60
60
  "axios": "0.24.0",
61
61
  "babel-loader": "8.2.3",
62
62
  "babel-plugin-styled-components": "2.0.2",
@@ -68,9 +68,11 @@
68
68
  "css-loader": "6.5.1",
69
69
  "date-fns": "2.22.1",
70
70
  "dotenv": "8.5.1",
71
+ "esbuild-loader": "2.18.0",
71
72
  "execa": "^1.0.0",
72
73
  "fast-deep-equal": "3.1.3",
73
74
  "font-awesome": "^4.7.0",
75
+ "fork-ts-checker-webpack-plugin": "7.2.1",
74
76
  "formik": "^2.2.6",
75
77
  "fs-extra": "10.0.0",
76
78
  "highlight.js": "^10.4.1",
@@ -144,5 +146,5 @@
144
146
  "node": ">=12.22.0 <=16.x.x",
145
147
  "npm": ">=6.0.0"
146
148
  },
147
- "gitHead": "0e1f1ae08565a5f2427753582f37645a43c00cb2"
149
+ "gitHead": "db70f0de7cc73fb469c8a076b89530729cf14142"
148
150
  }
@@ -1,7 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ const path = require('path');
3
4
  const execa = require('execa');
4
5
  const _ = require('lodash');
6
+ const { exists } = require('fs-extra');
5
7
  const { ValidationError } = require('@strapi/utils').errors;
6
8
  // eslint-disable-next-line node/no-extraneous-require
7
9
  const ee = require('@strapi/strapi/lib/utils/ee');
@@ -47,9 +49,17 @@ module.exports = {
47
49
  const strapiVersion = strapi.config.get('info.strapi', null);
48
50
  const nodeVersion = process.version;
49
51
  const communityEdition = !strapi.EE;
52
+ const useYarn = await exists(path.join(process.cwd(), 'yarn.lock'));
50
53
 
51
54
  return {
52
- data: { currentEnvironment, autoReload, strapiVersion, nodeVersion, communityEdition },
55
+ data: {
56
+ currentEnvironment,
57
+ autoReload,
58
+ strapiVersion,
59
+ nodeVersion,
60
+ communityEdition,
61
+ useYarn,
62
+ },
53
63
  };
54
64
  },
55
65
 
@@ -82,6 +92,7 @@ module.exports = {
82
92
  name: plugin.info.name || key,
83
93
  displayName: plugin.info.displayName || plugin.info.name || key,
84
94
  description: plugin.info.description || '',
95
+ packageName: plugin.info.packageName,
85
96
  }));
86
97
 
87
98
  ctx.send({ plugins });