@blinkk/root-cms 1.0.0-rc.8 → 1.0.0-rc.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.js CHANGED
@@ -72,6 +72,7 @@ async function renderApp(req, res, options) {
72
72
  projectId: cmsConfig.id || "default",
73
73
  projectName: cmsConfig.name || cmsConfig.id || "",
74
74
  domain: rootConfig.domain || "https://example.com",
75
+ base: rootConfig.base || "/",
75
76
  gci,
76
77
  i18n: rootConfig.i18n
77
78
  },
@@ -155,4 +156,4 @@ export {
155
156
  renderApp,
156
157
  renderSignIn
157
158
  };
158
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9hcHAudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB7UmVxdWVzdCwgUmVzcG9uc2V9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge3JlbmRlciBhcyByZW5kZXJUb1N0cmluZ30gZnJvbSAncHJlYWN0LXJlbmRlci10by1zdHJpbmcnO1xuXG5pbXBvcnQge0NvbGxlY3Rpb259IGZyb20gJy4vc2NoZW1hLmpzJztcblxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbmludGVyZmFjZSBBcHBQcm9wcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGN0eDogYW55O1xufVxuXG5mdW5jdGlvbiBBcHAocHJvcHM6IEFwcFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPHRpdGxlPntwcm9wcy50aXRsZX08L3RpdGxlPlxuICAgICAgICA8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb21cIiAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInByZWNvbm5lY3RcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tXCJcbiAgICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwic3R5bGVzaGVldFwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEAzMDA7NDAwOzUwMDs2MDA7NzAwOzkwMCZkaXNwbGF5PXN3YXBcIlxuICAgICAgICAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInN0eWxlc2hlZXRcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUdvb2dsZStTYW5zOndnaHRANTAwJmRpc3BsYXk9c3dhcFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwie0NTU19VUkx9XCIgLz5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPVwicm9vdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9vdHN0cmFwXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwiYm9vdHN0cmFwX19sb2FkaW5nXCI+TG9hZGluZy4uLjwvaDE+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvb3RzdHJhcC1lcnJvclwiPlxuICAgICAgICAgICAgICBJZiB0aGlzIHBhZ2UgZmFpbHMgdG8gbG9hZCwgdHJ5IGEgZm9yY2UgcmVmcmVzaCBieSBob2xkaW5nIHRoZVxuICAgICAgICAgICAgICBzaGlmdCBrZXkgd2hpbGUgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNjcmlwdFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IGB3aW5kb3cuX19ST09UX0NUWCA9ICR7SlNPTi5zdHJpbmdpZnkocHJvcHMuY3R4KX1gLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIHNyYz1cIntKU19VUkx9XCI+PC9zY3JpcHQ+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyQXBwKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgb3B0aW9uczogYW55KSB7XG4gIGNvbnN0IGNvbGxlY3Rpb25Nb2R1bGVzID0gaW1wb3J0Lm1ldGEuZ2xvYignL2NvbGxlY3Rpb25zLyouc2NoZW1hLnRzJywge1xuICAgIGVhZ2VyOiB0cnVlLFxuICB9KSBhcyBhbnk7XG4gIGNvbnN0IGNvbGxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb2xsZWN0aW9uPiA9IHt9O1xuICBPYmplY3Qua2V5cyhjb2xsZWN0aW9uTW9kdWxlcykuZm9yRWFjaCgobW9kdWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25JZCA9IHBhdGgucGFyc2UobW9kdWxlSWQpLmJhc2Uuc3BsaXQoJy4nKVswXTtcbiAgICBjb25zdCBtb2R1bGUgPSBjb2xsZWN0aW9uTW9kdWxlc1ttb2R1bGVJZF07XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IG1vZHVsZS5kZWZhdWx0IGFzIENvbGxlY3Rpb247XG4gICAgY29sbGVjdGlvbnNbY29sbGVjdGlvbklkXSA9IGNvbGxlY3Rpb247XG4gIH0pO1xuICBjb25zdCByb290Q29uZmlnID0gb3B0aW9ucy5yb290Q29uZmlnIHx8IHt9O1xuICBjb25zdCBjbXNDb25maWcgPSBvcHRpb25zLmNtc0NvbmZpZyB8fCB7fTtcbiAgbGV0IGdjaSA9IGNtc0NvbmZpZy5nY2k7XG4gIGlmIChnY2kgPT09IHRydWUpIHtcbiAgICBnY2kgPSAnaHR0cHM6Ly9nY2kucm9vdGpzLmRldic7XG4gIH1cbiAgY29uc3QgY3R4ID0ge1xuICAgIHJvb3RDb25maWc6IHtcbiAgICAgIHByb2plY3RJZDogY21zQ29uZmlnLmlkIHx8ICdkZWZhdWx0JyxcbiAgICAgIHByb2plY3ROYW1lOiBjbXNDb25maWcubmFtZSB8fCBjbXNDb25maWcuaWQgfHwgJycsXG4gICAgICBkb21haW46IHJvb3RDb25maWcuZG9tYWluIHx8ICdodHRwczovL2V4YW1wbGUuY29tJyxcbiAgICAgIGdjaTogZ2NpLFxuICAgICAgaTE4bjogcm9vdENvbmZpZy5pMThuLFxuICAgIH0sXG4gICAgZmlyZWJhc2VDb25maWc6IG9wdGlvbnMuZmlyZWJhc2VDb25maWcsXG4gICAgY29sbGVjdGlvbnM6IGNvbGxlY3Rpb25zLFxuICB9O1xuICBjb25zdCBwcm9qZWN0TmFtZSA9IGNtc0NvbmZpZy5uYW1lIHx8IGNtc0NvbmZpZy5pZCB8fCAnJztcbiAgY29uc3QgdGl0bGUgPSBwcm9qZWN0TmFtZSA/IGAke3Byb2plY3ROYW1lfSBcdTIwMTMgUm9vdC5qcyBDTVNgIDogJ1Jvb3QuanMgQ01TJztcblxuICBjb25zdCBtYWluSHRtbCA9IHJlbmRlclRvU3RyaW5nKDxBcHAgdGl0bGU9e3RpdGxlfSBjdHg9e2N0eH0gLz4pO1xuICBsZXQgaHRtbCA9IGA8IWRvY3R5cGUgaHRtbD5cXG4ke21haW5IdG1sfWA7XG4gIGlmIChyZXEudml0ZVNlcnZlcikge1xuICAgIGNvbnN0IHVpQ3NzUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICd1aS91aS5jc3MnKTtcbiAgICBjb25zdCB1aUpzUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICd1aS91aS5qcycpO1xuICAgIGNvbnN0IHRwbCA9IGh0bWxcbiAgICAgIC5yZXBsYWNlKCd7Q1NTX1VSTH0nLCBgL0BmcyR7dWlDc3NQYXRofWApXG4gICAgICAucmVwbGFjZSgne0pTX1VSTH0nLCBgL0BmcyR7dWlKc1BhdGh9YCk7XG4gICAgaHRtbCA9IGF3YWl0IHJlcS52aXRlU2VydmVyIS50cmFuc2Zvcm1JbmRleEh0bWwocmVxLm9yaWdpbmFsVXJsLCB0cGwpO1xuICB9IGVsc2Uge1xuICAgIGh0bWwgPSBodG1sXG4gICAgICAucmVwbGFjZSgne0NTU19VUkx9JywgJy9jbXMvc3RhdGljL3VpLmNzcycpXG4gICAgICAucmVwbGFjZSgne0pTX1VSTH0nLCAnL2Ntcy9zdGF0aWMvdWkuanMnKTtcbiAgfVxuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJyk7XG4gIHJlcy5zZW5kKGh0bWwpO1xufVxuXG5pbnRlcmZhY2UgU2lnbkluUHJvcHMge1xuICB0aXRsZTogc3RyaW5nO1xuICBjdHg6IGFueTtcbn1cblxuZnVuY3Rpb24gU2lnbkluKHByb3BzOiBTaWduSW5Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxodG1sPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiIC8+XG4gICAgICAgIDx0aXRsZT57cHJvcHMudGl0bGV9PC90aXRsZT5cbiAgICAgICAgPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tXCIgLz5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjBcIiAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInByZWNvbm5lY3RcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tXCJcbiAgICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwic3R5bGVzaGVldFwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Hb29nbGUrU2Fuczo0MDAsNTAwJmRpc3BsYXk9c3dhcFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwie0NTU19VUkx9XCIgLz5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPVwicm9vdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9vdHN0cmFwXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwiYm9vdHN0cmFwX19sb2FkaW5nXCI+TG9hZGluZy4uLjwvaDE+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvb3RzdHJhcC1lcnJvclwiPlxuICAgICAgICAgICAgICBJZiB0aGlzIHBhZ2UgZmFpbHMgdG8gbG9hZCwgdHJ5IGEgZm9yY2UgcmVmcmVzaCBieSBob2xkaW5nIHRoZVxuICAgICAgICAgICAgICBzaGlmdCBrZXkgd2hpbGUgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNjcmlwdFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IGB3aW5kb3cuX19ST09UX0NUWCA9ICR7SlNPTi5zdHJpbmdpZnkocHJvcHMuY3R4KX1gLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIHNyYz1cIntKU19VUkx9XCI+PC9zY3JpcHQ+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclNpZ25JbihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG9wdGlvbnM6IGFueSkge1xuICBjb25zdCBjdHggPSB7bmFtZTogb3B0aW9ucy5uYW1lLCBmaXJlYmFzZUNvbmZpZzogb3B0aW9ucy5maXJlYmFzZUNvbmZpZ307XG4gIGNvbnN0IG1haW5IdG1sID0gcmVuZGVyVG9TdHJpbmcoPFNpZ25JbiB0aXRsZT1cIlNpZ24gaW5cIiBjdHg9e2N0eH0gLz4pO1xuICBsZXQgaHRtbCA9IGA8IWRvY3R5cGUgaHRtbD5cXG4ke21haW5IdG1sfWA7XG4gIGlmIChyZXEudml0ZVNlcnZlcikge1xuICAgIGNvbnN0IGNzc1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAndWkvc2lnbmluLmNzcycpO1xuICAgIGNvbnN0IGpzUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICd1aS9zaWduaW4uanMnKTtcbiAgICBjb25zdCB0cGwgPSBodG1sXG4gICAgICAucmVwbGFjZSgne0NTU19VUkx9JywgYC9AZnMke2Nzc1BhdGh9YClcbiAgICAgIC5yZXBsYWNlKCd7SlNfVVJMfScsIGAvQGZzJHtqc1BhdGh9YCk7XG4gICAgaHRtbCA9IGF3YWl0IHJlcS52aXRlU2VydmVyIS50cmFuc2Zvcm1JbmRleEh0bWwocmVxLm9yaWdpbmFsVXJsLCB0cGwpO1xuICB9IGVsc2Uge1xuICAgIGh0bWwgPSBodG1sXG4gICAgICAucmVwbGFjZSgne0NTU19VUkx9JywgJy9jbXMvc3RhdGljL3NpZ25pbi5jc3MnKVxuICAgICAgLnJlcGxhY2UoJ3tKU19VUkx9JywgJy9jbXMvc3RhdGljL3NpZ25pbi5qcycpO1xuICB9XG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgcmVzLnNlbmQoaHRtbCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsT0FBTyxVQUFVO0FBQ2pCLFNBQVEscUJBQW9CO0FBRzVCLFNBQVEsVUFBVSxzQkFBcUI7QUFjakMsU0FDRSxLQURGO0FBVk4sSUFBTSxZQUFZLEtBQUssUUFBUSxjQUFjLFlBQVksR0FBRyxDQUFDO0FBTzdELFNBQVMsSUFBSSxPQUFpQjtBQUM1QixTQUNFLHFCQUFDLFVBQ0M7QUFBQSx5QkFBQyxVQUNDO0FBQUEsMEJBQUMsV0FBTyxnQkFBTSxPQUFNO0FBQUEsTUFDcEIsb0JBQUMsVUFBSyxLQUFJLGNBQWEsTUFBSyxnQ0FBK0I7QUFBQSxNQUMzRDtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0MsS0FBSTtBQUFBLFVBQ0osTUFBSztBQUFBLFVBQ0wsYUFBWTtBQUFBO0FBQUEsTUFDZDtBQUFBLE1BQ0E7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLEtBQUk7QUFBQSxVQUNKLE1BQUs7QUFBQTtBQUFBLE1BQ1A7QUFBQSxNQUNBO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDQyxLQUFJO0FBQUEsVUFD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
159
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9hcHAudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB7UmVxdWVzdCwgUmVzcG9uc2V9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge3JlbmRlciBhcyByZW5kZXJUb1N0cmluZ30gZnJvbSAncHJlYWN0LXJlbmRlci10by1zdHJpbmcnO1xuXG5pbXBvcnQge0NvbGxlY3Rpb259IGZyb20gJy4vc2NoZW1hLmpzJztcblxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbmludGVyZmFjZSBBcHBQcm9wcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGN0eDogYW55O1xufVxuXG5mdW5jdGlvbiBBcHAocHJvcHM6IEFwcFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPHRpdGxlPntwcm9wcy50aXRsZX08L3RpdGxlPlxuICAgICAgICA8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb21cIiAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInByZWNvbm5lY3RcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tXCJcbiAgICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwic3R5bGVzaGVldFwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEAzMDA7NDAwOzUwMDs2MDA7NzAwOzkwMCZkaXNwbGF5PXN3YXBcIlxuICAgICAgICAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInN0eWxlc2hlZXRcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUdvb2dsZStTYW5zOndnaHRANTAwJmRpc3BsYXk9c3dhcFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwie0NTU19VUkx9XCIgLz5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPVwicm9vdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9vdHN0cmFwXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwiYm9vdHN0cmFwX19sb2FkaW5nXCI+TG9hZGluZy4uLjwvaDE+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvb3RzdHJhcC1lcnJvclwiPlxuICAgICAgICAgICAgICBJZiB0aGlzIHBhZ2UgZmFpbHMgdG8gbG9hZCwgdHJ5IGEgZm9yY2UgcmVmcmVzaCBieSBob2xkaW5nIHRoZVxuICAgICAgICAgICAgICBzaGlmdCBrZXkgd2hpbGUgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNjcmlwdFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IGB3aW5kb3cuX19ST09UX0NUWCA9ICR7SlNPTi5zdHJpbmdpZnkocHJvcHMuY3R4KX1gLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIHNyYz1cIntKU19VUkx9XCI+PC9zY3JpcHQ+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyQXBwKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgb3B0aW9uczogYW55KSB7XG4gIGNvbnN0IGNvbGxlY3Rpb25Nb2R1bGVzID0gaW1wb3J0Lm1ldGEuZ2xvYignL2NvbGxlY3Rpb25zLyouc2NoZW1hLnRzJywge1xuICAgIGVhZ2VyOiB0cnVlLFxuICB9KSBhcyBhbnk7XG4gIGNvbnN0IGNvbGxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb2xsZWN0aW9uPiA9IHt9O1xuICBPYmplY3Qua2V5cyhjb2xsZWN0aW9uTW9kdWxlcykuZm9yRWFjaCgobW9kdWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25JZCA9IHBhdGgucGFyc2UobW9kdWxlSWQpLmJhc2Uuc3BsaXQoJy4nKVswXTtcbiAgICBjb25zdCBtb2R1bGUgPSBjb2xsZWN0aW9uTW9kdWxlc1ttb2R1bGVJZF07XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IG1vZHVsZS5kZWZhdWx0IGFzIENvbGxlY3Rpb247XG4gICAgY29sbGVjdGlvbnNbY29sbGVjdGlvbklkXSA9IGNvbGxlY3Rpb247XG4gIH0pO1xuICBjb25zdCByb290Q29uZmlnID0gb3B0aW9ucy5yb290Q29uZmlnIHx8IHt9O1xuICBjb25zdCBjbXNDb25maWcgPSBvcHRpb25zLmNtc0NvbmZpZyB8fCB7fTtcbiAgbGV0IGdjaSA9IGNtc0NvbmZpZy5nY2k7XG4gIGlmIChnY2kgPT09IHRydWUpIHtcbiAgICBnY2kgPSAnaHR0cHM6Ly9nY2kucm9vdGpzLmRldic7XG4gIH1cbiAgY29uc3QgY3R4ID0ge1xuICAgIHJvb3RDb25maWc6IHtcbiAgICAgIHByb2plY3RJZDogY21zQ29uZmlnLmlkIHx8ICdkZWZhdWx0JyxcbiAgICAgIHByb2plY3ROYW1lOiBjbXNDb25maWcubmFtZSB8fCBjbXNDb25maWcuaWQgfHwgJycsXG4gICAgICBkb21haW46IHJvb3RDb25maWcuZG9tYWluIHx8ICdodHRwczovL2V4YW1wbGUuY29tJyxcbiAgICAgIGJhc2U6IHJvb3RDb25maWcuYmFzZSB8fCAnLycsXG4gICAgICBnY2k6IGdjaSxcbiAgICAgIGkxOG46IHJvb3RDb25maWcuaTE4bixcbiAgICB9LFxuICAgIGZpcmViYXNlQ29uZmlnOiBvcHRpb25zLmZpcmViYXNlQ29uZmlnLFxuICAgIGNvbGxlY3Rpb25zOiBjb2xsZWN0aW9ucyxcbiAgfTtcbiAgY29uc3QgcHJvamVjdE5hbWUgPSBjbXNDb25maWcubmFtZSB8fCBjbXNDb25maWcuaWQgfHwgJyc7XG4gIGNvbnN0IHRpdGxlID0gcHJvamVjdE5hbWUgPyBgJHtwcm9qZWN0TmFtZX0gXHUyMDEzIFJvb3QuanMgQ01TYCA6ICdSb290LmpzIENNUyc7XG5cbiAgY29uc3QgbWFpbkh0bWwgPSByZW5kZXJUb1N0cmluZyg8QXBwIHRpdGxlPXt0aXRsZX0gY3R4PXtjdHh9IC8+KTtcbiAgbGV0IGh0bWwgPSBgPCFkb2N0eXBlIGh0bWw+XFxuJHttYWluSHRtbH1gO1xuICBpZiAocmVxLnZpdGVTZXJ2ZXIpIHtcbiAgICBjb25zdCB1aUNzc1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAndWkvdWkuY3NzJyk7XG4gICAgY29uc3QgdWlKc1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAndWkvdWkuanMnKTtcbiAgICBjb25zdCB0cGwgPSBodG1sXG4gICAgICAucmVwbGFjZSgne0NTU19VUkx9JywgYC9AZnMke3VpQ3NzUGF0aH1gKVxuICAgICAgLnJlcGxhY2UoJ3tKU19VUkx9JywgYC9AZnMke3VpSnNQYXRofWApO1xuICAgIGh0bWwgPSBhd2FpdCByZXEudml0ZVNlcnZlciEudHJhbnNmb3JtSW5kZXhIdG1sKHJlcS5vcmlnaW5hbFVybCwgdHBsKTtcbiAgfSBlbHNlIHtcbiAgICBodG1sID0gaHRtbFxuICAgICAgLnJlcGxhY2UoJ3tDU1NfVVJMfScsICcvY21zL3N0YXRpYy91aS5jc3MnKVxuICAgICAgLnJlcGxhY2UoJ3tKU19VUkx9JywgJy9jbXMvc3RhdGljL3VpLmpzJyk7XG4gIH1cbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpO1xuICByZXMuc2VuZChodG1sKTtcbn1cblxuaW50ZXJmYWNlIFNpZ25JblByb3BzIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgY3R4OiBhbnk7XG59XG5cbmZ1bmN0aW9uIFNpZ25Jbihwcm9wczogU2lnbkluUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aHRtbD5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIiAvPlxuICAgICAgICA8dGl0bGU+e3Byb3BzLnRpdGxlfTwvdGl0bGU+XG4gICAgICAgIDxsaW5rIHJlbD1cInByZWNvbm5lY3RcIiBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbVwiIC8+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wXCIgLz5cbiAgICAgICAgPGxpbmtcbiAgICAgICAgICByZWw9XCJwcmVjb25uZWN0XCJcbiAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbVwiXG4gICAgICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgICAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInN0eWxlc2hlZXRcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9R29vZ2xlK1NhbnM6NDAwLDUwMCZkaXNwbGF5PXN3YXBcIlxuICAgICAgICAvPlxuICAgICAgICA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIntDU1NfVVJMfVwiIC8+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPGRpdiBpZD1cInJvb3RcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvb3RzdHJhcFwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cImJvb3RzdHJhcF9fbG9hZGluZ1wiPkxvYWRpbmcuLi48L2gxPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib290c3RyYXAtZXJyb3JcIj5cbiAgICAgICAgICAgICAgSWYgdGhpcyBwYWdlIGZhaWxzIHRvIGxvYWQsIHRyeSBhIGZvcmNlIHJlZnJlc2ggYnkgaG9sZGluZyB0aGVcbiAgICAgICAgICAgICAgc2hpZnQga2V5IHdoaWxlIHJlZnJlc2hpbmcgdGhlIHBhZ2UuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzY3JpcHRcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgX19odG1sOiBgd2luZG93Ll9fUk9PVF9DVFggPSAke0pTT04uc3RyaW5naWZ5KHByb3BzLmN0eCl9YCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIiBzcmM9XCJ7SlNfVVJMfVwiPjwvc2NyaXB0PlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJTaWduSW4ocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBvcHRpb25zOiBhbnkpIHtcbiAgY29uc3QgY3R4ID0ge25hbWU6IG9wdGlvbnMubmFtZSwgZmlyZWJhc2VDb25maWc6IG9wdGlvbnMuZmlyZWJhc2VDb25maWd9O1xuICBjb25zdCBtYWluSHRtbCA9IHJlbmRlclRvU3RyaW5nKDxTaWduSW4gdGl0bGU9XCJTaWduIGluXCIgY3R4PXtjdHh9IC8+KTtcbiAgbGV0IGh0bWwgPSBgPCFkb2N0eXBlIGh0bWw+XFxuJHttYWluSHRtbH1gO1xuICBpZiAocmVxLnZpdGVTZXJ2ZXIpIHtcbiAgICBjb25zdCBjc3NQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3VpL3NpZ25pbi5jc3MnKTtcbiAgICBjb25zdCBqc1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAndWkvc2lnbmluLmpzJyk7XG4gICAgY29uc3QgdHBsID0gaHRtbFxuICAgICAgLnJlcGxhY2UoJ3tDU1NfVVJMfScsIGAvQGZzJHtjc3NQYXRofWApXG4gICAgICAucmVwbGFjZSgne0pTX1VSTH0nLCBgL0BmcyR7anNQYXRofWApO1xuICAgIGh0bWwgPSBhd2FpdCByZXEudml0ZVNlcnZlciEudHJhbnNmb3JtSW5kZXhIdG1sKHJlcS5vcmlnaW5hbFVybCwgdHBsKTtcbiAgfSBlbHNlIHtcbiAgICBodG1sID0gaHRtbFxuICAgICAgLnJlcGxhY2UoJ3tDU1NfVVJMfScsICcvY21zL3N0YXRpYy9zaWduaW4uY3NzJylcbiAgICAgIC5yZXBsYWNlKCd7SlNfVVJMfScsICcvY21zL3N0YXRpYy9zaWduaW4uanMnKTtcbiAgfVxuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJyk7XG4gIHJlcy5zZW5kKGh0bWwpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sVUFBVTtBQUNqQixTQUFRLHFCQUFvQjtBQUc1QixTQUFRLFVBQVUsc0JBQXFCO0FBY2pDLFNBQ0UsS0FERjtBQVZOLElBQU0sWUFBWSxLQUFLLFFBQVEsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQU83RCxTQUFTLElBQUksT0FBaUI7QUFDNUIsU0FDRSxxQkFBQyxVQUNDO0FBQUEseUJBQUMsVUFDQztBQUFBLDBCQUFDLFdBQU8sZ0JBQU0sT0FBTTtBQUFBLE1BQ3BCLG9CQUFDLFVBQUssS0FBSSxjQUFhLE1BQUssZ0NBQStCO0FBQUEsTUFDM0Q7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLEtBQUk7QUFBQSxVQUNKLE1BQUs7QUFBQSxVQUNMLGFBQVk7QUFBQTtBQUFBLE1BQ2Q7QUFBQSxNQUNBO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDQyxLQUFJO0FBQUEsVUFDSixNQUFLO0FBQUE7QUFBQSxNQUNQO0FBQUEsTUFDQTtB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
@@ -113,11 +113,19 @@ body.menu\:open {
113
113
  padding: 48px 20px;
114
114
  color: #3c4043;
115
115
  }
116
- .signin__title {
116
+ .signin__headline {
117
+ margin-bottom: 40px;
118
+ }
119
+ .signin__headline__title {
117
120
  font-size: 36px;
118
- line-height: 48px;
121
+ line-height: 1.3;
122
+ font-weight: 500;
123
+ margin-bottom: 20px;
124
+ }
125
+ .signin__headline__body {
126
+ font-size: 18px;
127
+ line-height: 1.5;
119
128
  font-weight: 500;
120
- margin-bottom: 30px;
121
129
  }
122
130
  .signin__button {
123
131
  align-items: center;
package/dist/ui/signin.js CHANGED
@@ -7535,7 +7535,10 @@
7535
7535
  function SignIn() {
7536
7536
  const title = window.__ROOT_CTX.name;
7537
7537
  return /* @__PURE__ */ o2("div", { className: "signin", children: [
7538
- title && /* @__PURE__ */ o2("h1", { className: "signin__title", children: title }),
7538
+ /* @__PURE__ */ o2("div", { className: "signin__headline", children: [
7539
+ title && /* @__PURE__ */ o2("h1", { className: "signin__headline__title", children: title }),
7540
+ /* @__PURE__ */ o2("p", { className: "signin__headline__body", children: title ? `Sign in to continue to ${title}` : "Sign in to continue" })
7541
+ ] }),
7539
7542
  /* @__PURE__ */ o2(SignIn.Button, {})
7540
7543
  ] });
7541
7544
  }
package/dist/ui/ui.css CHANGED
@@ -265,6 +265,42 @@
265
265
  gap: 12px;
266
266
  }
267
267
 
268
+ /* ui/components/VersionHistoryModal/VersionHistoryModal.css */
269
+ .VersionHistoryModal {
270
+ margin-top: -30px;
271
+ padding: 10px;
272
+ }
273
+ .VersionHistoryModal__title {
274
+ display: flex;
275
+ align-items: center;
276
+ gap: 8px;
277
+ }
278
+ .VersionHistoryModal__docId {
279
+ margin-top: 8px;
280
+ }
281
+ .VersionHistoryModal__docId code {
282
+ background: #efefef;
283
+ padding: 4px 8px;
284
+ border-radius: 4px;
285
+ font-size: 15px;
286
+ line-height: 1;
287
+ font-weight: 600;
288
+ color: #333;
289
+ }
290
+ .VersionHistoryModal__versions {
291
+ margin-top: 20px;
292
+ margin-left: -10px;
293
+ margin-right: -10px;
294
+ }
295
+ .VersionHistoryModal__versionsEmpty {
296
+ margin-top: 20px;
297
+ }
298
+ .VersionHistoryModal__versionsEmpty__developer {
299
+ margin-top: 10px;
300
+ font-style: italic;
301
+ font-size: 12px;
302
+ }
303
+
268
304
  /* ui/layout/Layout.css */
269
305
  .Layout {
270
306
  display: grid;
@@ -375,42 +411,6 @@
375
411
  max-width: 70ch;
376
412
  }
377
413
 
378
- /* ui/components/VersionHistoryModal/VersionHistoryModal.css */
379
- .VersionHistoryModal {
380
- margin-top: -30px;
381
- padding: 10px;
382
- }
383
- .VersionHistoryModal__title {
384
- display: flex;
385
- align-items: center;
386
- gap: 8px;
387
- }
388
- .VersionHistoryModal__docId {
389
- margin-top: 8px;
390
- }
391
- .VersionHistoryModal__docId code {
392
- background: #efefef;
393
- padding: 4px 8px;
394
- border-radius: 4px;
395
- font-size: 15px;
396
- line-height: 1;
397
- font-weight: 600;
398
- color: #333;
399
- }
400
- .VersionHistoryModal__versions {
401
- margin-top: 20px;
402
- margin-left: -10px;
403
- margin-right: -10px;
404
- }
405
- .VersionHistoryModal__versionsEmpty {
406
- margin-top: 20px;
407
- }
408
- .VersionHistoryModal__versionsEmpty__developer {
409
- margin-top: 10px;
410
- font-style: italic;
411
- font-size: 12px;
412
- }
413
-
414
414
  /* ui/components/NewDocModal/NewDocModal.css */
415
415
  .NewDocModal__body {
416
416
  font-size: 12px;
package/dist/ui/ui.js CHANGED
@@ -39822,6 +39822,101 @@ ${this.customData.serverResponse}`;
39822
39822
  );
39823
39823
  }
39824
39824
 
39825
+ // ui/utils/doc-urls.ts
39826
+ function getDocServingUrl(options2) {
39827
+ const urlPath = getDocServingPath(options2);
39828
+ const domain = window.__ROOT_CTX.rootConfig.domain || "https://example.com";
39829
+ return `${domain}${urlPath}`;
39830
+ }
39831
+ function getDocServingPath(options2) {
39832
+ const collections = window.__ROOT_CTX.collections;
39833
+ const { collectionId, slug, locale } = options2;
39834
+ const rootCollection = collections[collectionId];
39835
+ if (!rootCollection) {
39836
+ throw new Error(`collection not found: ${collectionId}`);
39837
+ }
39838
+ const rootConfig = window.__ROOT_CTX.rootConfig;
39839
+ const basePath = rootConfig.base || "/";
39840
+ let urlFormat = "/[base]/[path]";
39841
+ if (locale) {
39842
+ urlFormat = rootConfig.i18n.urlFormat || "/[locale]/[base]/[path]";
39843
+ }
39844
+ let relativePath = "";
39845
+ const servingPathFormat = rootCollection?.url;
39846
+ if (servingPathFormat) {
39847
+ if (slug) {
39848
+ let urlPath = servingPathFormat.replace(/\[.*slug\]/, slug).replaceAll("--", "/").replace(/\/+/g, "/");
39849
+ if (urlPath === "/index") {
39850
+ urlPath = "/";
39851
+ }
39852
+ relativePath = urlPath;
39853
+ } else {
39854
+ relativePath = servingPathFormat;
39855
+ }
39856
+ }
39857
+ return formatUrlPath(urlFormat, {
39858
+ base: basePath,
39859
+ path: relativePath,
39860
+ locale: locale || "",
39861
+ slug
39862
+ });
39863
+ }
39864
+ function getDocPreviewPath(options2) {
39865
+ const collections = window.__ROOT_CTX.collections;
39866
+ const { collectionId, slug, locale } = options2;
39867
+ const rootCollection = collections[collectionId];
39868
+ if (!rootCollection) {
39869
+ throw new Error(`collection not found: ${collectionId}`);
39870
+ }
39871
+ const rootConfig = window.__ROOT_CTX.rootConfig;
39872
+ const basePath = rootConfig.base || "/";
39873
+ let urlFormat = "/[base]/[path]";
39874
+ if (locale) {
39875
+ urlFormat = rootConfig.i18n.urlFormat || "/[locale]/[base]/[path]";
39876
+ }
39877
+ let relativePath = "";
39878
+ const previewPathFormat = rootCollection?.previewUrl || rootCollection?.url;
39879
+ if (previewPathFormat) {
39880
+ if (slug) {
39881
+ let urlPath = previewPathFormat.replace(/\[.*slug\]/, slug).replaceAll("--", "/").replace(/\/+/g, "/");
39882
+ if (urlPath === "/index") {
39883
+ urlPath = "/";
39884
+ }
39885
+ relativePath = urlPath;
39886
+ } else {
39887
+ relativePath = previewPathFormat;
39888
+ }
39889
+ }
39890
+ return formatUrlPath(urlFormat, {
39891
+ base: basePath,
39892
+ path: relativePath,
39893
+ locale: locale || "",
39894
+ slug
39895
+ });
39896
+ }
39897
+ function formatUrlPath(urlFormat, params) {
39898
+ const urlPath = urlFormat.replaceAll(
39899
+ /\[\[?(\.\.\.)?([\w\-_]*)\]?\]/g,
39900
+ (match3, _wildcard, key) => {
39901
+ return params[key] ?? match3;
39902
+ }
39903
+ );
39904
+ return normalizeUrlPath(urlPath);
39905
+ }
39906
+ function normalizeUrlPath(urlPath, options2) {
39907
+ urlPath = urlPath.replace(/\/+/g, "/");
39908
+ if (options2?.trailingSlash === false && urlPath !== "/" && urlPath.endsWith("/")) {
39909
+ urlPath = urlPath.replace(/\/*$/g, "");
39910
+ }
39911
+ if (urlPath.endsWith("/index") || urlPath.endsWith("/index/")) {
39912
+ urlPath = urlPath.slice(0, -6);
39913
+ }
39914
+ if (!urlPath.startsWith("/")) {
39915
+ urlPath = `/${urlPath}`;
39916
+ }
39917
+ return urlPath;
39918
+ }
39919
+
39825
39920
  // ui/components/SlugInput/SlugInput.tsx
39826
39921
  function SlugInput(props) {
39827
39922
  const [collectionId, setCollectionId] = y2(props.collectionId || "");
@@ -39842,23 +39937,26 @@ ${this.customData.serverResponse}`;
39842
39937
  });
39843
39938
  });
39844
39939
  }
39845
- const domain = window.__ROOT_CTX.rootConfig?.domain || "https://example.com";
39846
39940
  let urlHelp = "";
39847
39941
  if (rootCollection?.url) {
39848
39942
  if (slug) {
39849
39943
  const cleanSlug = normalizeSlug(slug);
39850
39944
  if (isSlugValid(cleanSlug)) {
39851
- const cleanSlugPath = cleanSlug.replaceAll("--", "/");
39852
- let urlPath = rootCollection.url.replace(/\[.*slug\]/, cleanSlugPath);
39853
- if (urlPath === "/index") {
39854
- urlPath = "/";
39855
- }
39856
- urlHelp = `${domain}${urlPath}`;
39945
+ urlHelp = getDocServingUrl({
39946
+ collectionId: props.collectionId,
39947
+ slug: cleanSlug
39948
+ });
39857
39949
  } else {
39858
39950
  urlHelp = "INVALID SLUG";
39859
39951
  }
39860
39952
  } else {
39861
- urlHelp = `${domain}${rootCollection.url}`;
39953
+ urlHelp = getDocServingUrl({
39954
+ collectionId: props.collectionId,
39955
+ slug: "[slug]"
39956
+ });
39957
+ }
39958
+ if (urlHelp.endsWith("/index")) {
39959
+ urlHelp = urlHelp.replace(/\/index$/, "/");
39862
39960
  }
39863
39961
  }
39864
39962
  function onCollectionChange(newCollectionId) {
@@ -41403,6 +41501,83 @@ ${this.customData.serverResponse}`;
41403
41501
  }
41404
41502
  PublishDocModal.id = MODAL_ID4;
41405
41503
 
41504
+ // ui/components/VersionHistoryModal/VersionHistoryModal.tsx
41505
+ var MODAL_ID5 = "VersionHistoryModal";
41506
+ function useVersionHistoryModal(props) {
41507
+ const modals = useModals();
41508
+ const modalTheme = useModalTheme();
41509
+ return {
41510
+ open: () => {
41511
+ modals.openContextModal(MODAL_ID5, {
41512
+ ...modalTheme,
41513
+ innerProps: props,
41514
+ size: "min(calc(100% - 32px), 720px)"
41515
+ });
41516
+ }
41517
+ };
41518
+ }
41519
+ function VersionHistoryModal(modalProps) {
41520
+ const { innerProps: props, context, id: id2 } = modalProps;
41521
+ const docId = props.docId;
41522
+ const [loading, setLoading] = y2(true);
41523
+ const [versions, setVersions] = y2([]);
41524
+ const dateFormat = new Intl.DateTimeFormat("en-US", {
41525
+ year: "numeric",
41526
+ month: "short",
41527
+ day: "numeric",
41528
+ hour: "2-digit",
41529
+ minute: "2-digit"
41530
+ });
41531
+ async function fetchVersions() {
41532
+ setLoading(true);
41533
+ const versions2 = await cmsListVersions(docId);
41534
+ setLoading(false);
41535
+ setVersions(versions2);
41536
+ }
41537
+ async function restore(version5) {
41538
+ await cmsRestoreVersion(docId, version5);
41539
+ showNotification({
41540
+ title: "Saved!",
41541
+ message: `Restored ${docId} to ${dateFormat.format(
41542
+ version5.sys.modifiedAt.toDate()
41543
+ )}.`,
41544
+ autoClose: 5e3
41545
+ });
41546
+ if (props.onRestore) {
41547
+ props.onRestore({ version: version5 });
41548
+ }
41549
+ }
41550
+ s2(() => {
41551
+ fetchVersions();
41552
+ }, []);
41553
+ if (loading) {
41554
+ return /* @__PURE__ */ o4(Loader, {});
41555
+ }
41556
+ return /* @__PURE__ */ o4("div", { className: "VersionHistoryModal", children: [
41557
+ /* @__PURE__ */ o4(Heading, { className: "VersionHistoryModal__title", size: "h2", children: [
41558
+ /* @__PURE__ */ o4(IconHistory, { strokeWidth: 1.5 }),
41559
+ /* @__PURE__ */ o4("span", { children: "Version history" })
41560
+ ] }),
41561
+ /* @__PURE__ */ o4("div", { className: "VersionHistoryModal__docId", children: /* @__PURE__ */ o4("code", { children: docId }) }),
41562
+ versions.length === 0 ? /* @__PURE__ */ o4(Text2, { className: "VersionHistoryModal__versionsEmpty", size: "body", children: [
41563
+ /* @__PURE__ */ o4("p", { children: "No versions found." }),
41564
+ /* @__PURE__ */ o4("p", { className: "VersionHistoryModal__versionsEmpty__developer", children: "For developers: Configure the Root CMS cron job to populate versions." })
41565
+ ] }) : /* @__PURE__ */ o4(Table, { className: "VersionHistoryModal__versions", children: [
41566
+ /* @__PURE__ */ o4("thead", { children: /* @__PURE__ */ o4("tr", { children: [
41567
+ /* @__PURE__ */ o4("th", { children: "modified at" }),
41568
+ /* @__PURE__ */ o4("th", { children: "modified by" }),
41569
+ /* @__PURE__ */ o4("th", { children: "actions" })
41570
+ ] }) }),
41571
+ /* @__PURE__ */ o4("tbody", { children: versions.map((version5) => /* @__PURE__ */ o4("tr", { children: [
41572
+ /* @__PURE__ */ o4("td", { children: /* @__PURE__ */ o4(Text2, { size: "body-sm", children: dateFormat.format(version5.sys.modifiedAt.toDate()) }) }),
41573
+ /* @__PURE__ */ o4("td", { children: /* @__PURE__ */ o4(Text2, { size: "body-sm", children: version5.sys.modifiedBy }) }),
41574
+ /* @__PURE__ */ o4("td", { children: /* @__PURE__ */ o4(Button, { size: "xs", compact: true, onClick: () => restore(version5), children: "restore" }) })
41575
+ ] })) })
41576
+ ] })
41577
+ ] });
41578
+ }
41579
+ VersionHistoryModal.id = MODAL_ID5;
41580
+
41406
41581
  // ui/hooks/useFirebase.ts
41407
41582
  var FirebaseContext = B(
41408
41583
  null
@@ -41420,7 +41595,7 @@ ${this.customData.serverResponse}`;
41420
41595
  // package.json
41421
41596
  var package_default = {
41422
41597
  name: "@blinkk/root-cms",
41423
- version: "1.0.0-rc.8",
41598
+ version: "1.0.0-rc.9",
41424
41599
  author: "s@blinkk.com",
41425
41600
  license: "MIT",
41426
41601
  engines: {
@@ -41512,6 +41687,7 @@ ${this.customData.serverResponse}`;
41512
41687
  firebase: "^10.5.2",
41513
41688
  "firebase-admin": "^11.11.0",
41514
41689
  "firebase-functions": "^4.4.1",
41690
+ "firebase-tools": "^12.9.1",
41515
41691
  marked: "^9.1.1",
41516
41692
  preact: "*",
41517
41693
  "preact-render-to-string": "^6.2.2",
@@ -41524,7 +41700,7 @@ ${this.customData.serverResponse}`;
41524
41700
  vitest: "^0.34.6"
41525
41701
  },
41526
41702
  peerDependencies: {
41527
- "@blinkk/root": "1.0.0-rc.8",
41703
+ "@blinkk/root": "1.0.0-rc.9",
41528
41704
  "firebase-admin": ">=11",
41529
41705
  "firebase-functions": ">=4",
41530
41706
  preact: ">=10",
@@ -41652,83 +41828,6 @@ ${this.customData.serverResponse}`;
41652
41828
  ] }) });
41653
41829
  }
41654
41830
 
41655
- // ui/components/VersionHistoryModal/VersionHistoryModal.tsx
41656
- var MODAL_ID5 = "VersionHistoryModal";
41657
- function useVersionHistoryModal(props) {
41658
- const modals = useModals();
41659
- const modalTheme = useModalTheme();
41660
- return {
41661
- open: () => {
41662
- modals.openContextModal(MODAL_ID5, {
41663
- ...modalTheme,
41664
- innerProps: props,
41665
- size: "min(calc(100% - 32px), 720px)"
41666
- });
41667
- }
41668
- };
41669
- }
41670
- function VersionHistoryModal(modalProps) {
41671
- const { innerProps: props, context, id: id2 } = modalProps;
41672
- const docId = props.docId;
41673
- const [loading, setLoading] = y2(true);
41674
- const [versions, setVersions] = y2([]);
41675
- const dateFormat = new Intl.DateTimeFormat("en-US", {
41676
- year: "numeric",
41677
- month: "short",
41678
- day: "numeric",
41679
- hour: "2-digit",
41680
- minute: "2-digit"
41681
- });
41682
- async function fetchVersions() {
41683
- setLoading(true);
41684
- const versions2 = await cmsListVersions(docId);
41685
- setLoading(false);
41686
- setVersions(versions2);
41687
- }
41688
- async function restore(version5) {
41689
- await cmsRestoreVersion(docId, version5);
41690
- showNotification({
41691
- title: "Saved!",
41692
- message: `Restored ${docId} to ${dateFormat.format(
41693
- version5.sys.modifiedAt.toDate()
41694
- )}.`,
41695
- autoClose: 5e3
41696
- });
41697
- if (props.onRestore) {
41698
- props.onRestore({ version: version5 });
41699
- }
41700
- }
41701
- s2(() => {
41702
- fetchVersions();
41703
- }, []);
41704
- if (loading) {
41705
- return /* @__PURE__ */ o4(Loader, {});
41706
- }
41707
- return /* @__PURE__ */ o4("div", { className: "VersionHistoryModal", children: [
41708
- /* @__PURE__ */ o4(Heading, { className: "VersionHistoryModal__title", size: "h2", children: [
41709
- /* @__PURE__ */ o4(IconHistory, { strokeWidth: 1.5 }),
41710
- /* @__PURE__ */ o4("span", { children: "Version history" })
41711
- ] }),
41712
- /* @__PURE__ */ o4("div", { className: "VersionHistoryModal__docId", children: /* @__PURE__ */ o4("code", { children: docId }) }),
41713
- versions.length === 0 ? /* @__PURE__ */ o4(Text2, { className: "VersionHistoryModal__versionsEmpty", size: "body", children: [
41714
- /* @__PURE__ */ o4("p", { children: "No versions found." }),
41715
- /* @__PURE__ */ o4("p", { className: "VersionHistoryModal__versionsEmpty__developer", children: "For developers: Configure the Root CMS cron job to populate versions." })
41716
- ] }) : /* @__PURE__ */ o4(Table, { className: "VersionHistoryModal__versions", children: [
41717
- /* @__PURE__ */ o4("thead", { children: /* @__PURE__ */ o4("tr", { children: [
41718
- /* @__PURE__ */ o4("th", { children: "modified at" }),
41719
- /* @__PURE__ */ o4("th", { children: "modified by" }),
41720
- /* @__PURE__ */ o4("th", { children: "actions" })
41721
- ] }) }),
41722
- /* @__PURE__ */ o4("tbody", { children: versions.map((version5) => /* @__PURE__ */ o4("tr", { children: [
41723
- /* @__PURE__ */ o4("td", { children: /* @__PURE__ */ o4(Text2, { size: "body-sm", children: dateFormat.format(version5.sys.modifiedAt.toDate()) }) }),
41724
- /* @__PURE__ */ o4("td", { children: /* @__PURE__ */ o4(Text2, { size: "body-sm", children: version5.sys.modifiedBy }) }),
41725
- /* @__PURE__ */ o4("td", { children: /* @__PURE__ */ o4(Button, { size: "xs", compact: true, onClick: () => restore(version5), children: "restore" }) })
41726
- ] })) })
41727
- ] })
41728
- ] });
41729
- }
41730
- VersionHistoryModal.id = MODAL_ID5;
41731
-
41732
41831
  // ui/components/DocActionsMenu/DocActionsMenu.tsx
41733
41832
  function DocActionsMenu(props) {
41734
41833
  const docId = props.docId;
@@ -44505,13 +44604,7 @@ ${content}</tr>
44505
44604
  }
44506
44605
  const docs = props.docs || [];
44507
44606
  function getLiveUrl(slug) {
44508
- const c4 = rootCollection;
44509
- if (!c4.url) {
44510
- return "";
44511
- }
44512
- const domain = window.__ROOT_CTX.rootConfig.domain || "https://example.com";
44513
- const urlPath = c4.url.replace(/\[.*slug\]/, slug.replaceAll("--", "/"));
44514
- return `${domain}${urlPath}`;
44607
+ return getDocServingUrl({ collectionId, slug });
44515
44608
  }
44516
44609
  return /* @__PURE__ */ o4("div", { className: "CollectionPage__collection__docsList", children: docs.map((doc2) => {
44517
44610
  const cmsUrl = `/cms/content/${collectionId}/${doc2.slug}`;
@@ -46305,55 +46398,6 @@ ${content}</tr>
46305
46398
  return result.join("");
46306
46399
  }
46307
46400
 
46308
- // ui/utils/doc-urls.ts
46309
- function getDocServingPath(docIdOrCollection, slug) {
46310
- let collectionId = docIdOrCollection;
46311
- if (!slug) {
46312
- [collectionId, slug] = docIdOrCollection.split("/");
46313
- }
46314
- const rootCollection = window.__ROOT_CTX.collections[collectionId];
46315
- if (!rootCollection) {
46316
- throw new Error(`collection not found: ${collectionId}`);
46317
- }
46318
- let servingPath = "";
46319
- if (rootCollection?.url) {
46320
- if (slug) {
46321
- let urlPath = rootCollection.url.replace(/\[.*slug\]/, slug).replaceAll("--", "/");
46322
- if (urlPath === "/index") {
46323
- urlPath = "/";
46324
- }
46325
- servingPath = `${urlPath}`;
46326
- } else {
46327
- servingPath = `${rootCollection.url}`;
46328
- }
46329
- }
46330
- return servingPath;
46331
- }
46332
- function getDocPreviewPath(docIdOrCollection, slug) {
46333
- let collectionId = docIdOrCollection;
46334
- if (!slug) {
46335
- [collectionId, slug] = docIdOrCollection.split("/");
46336
- }
46337
- const rootCollection = window.__ROOT_CTX.collections[collectionId];
46338
- if (!rootCollection) {
46339
- throw new Error(`collection not found: ${collectionId}`);
46340
- }
46341
- let previewPath = "";
46342
- const previewPathConfig = rootCollection?.previewUrl || rootCollection?.url;
46343
- if (previewPathConfig) {
46344
- if (slug) {
46345
- let urlPath = previewPathConfig.replace(/\[.*slug\]/, slug).replaceAll("--", "/");
46346
- if (urlPath === "/index") {
46347
- urlPath = "/";
46348
- }
46349
- previewPath = `${urlPath}`;
46350
- } else {
46351
- previewPath = `${previewPathConfig}`;
46352
- }
46353
- }
46354
- return previewPath;
46355
- }
46356
-
46357
46401
  // ui/pages/DocumentPage/DocumentPage.tsx
46358
46402
  function DocumentPage(props) {
46359
46403
  const collectionId = props.collection;
@@ -46407,16 +46451,10 @@ ${content}</tr>
46407
46451
  const langName = langNames.of(langCode) || locale;
46408
46452
  return `${langName} (${locale})`;
46409
46453
  }
46410
- function getLocalizedUrl(urlPath, locale) {
46411
- if (!locale) {
46412
- return urlPath;
46413
- }
46414
- const urlFormat = window.__ROOT_CTX.rootConfig.i18n?.urlFormat || "/{locale}/{path}";
46415
- return urlFormat.replaceAll("{locale}", locale).replaceAll("/{path}", urlPath);
46416
- }
46417
46454
  DocumentPage.Preview = (props) => {
46418
46455
  const domain = window.__ROOT_CTX.rootConfig.domain || "https://example.com";
46419
- const servingPath = getDocServingPath(props.docId);
46456
+ const [collectionId, slug] = props.docId.split("/");
46457
+ const servingPath = getDocServingPath({ collectionId, slug });
46420
46458
  const servingUrl = `${domain}${servingPath}`;
46421
46459
  const [iframeUrl, setIframeUrl] = y2(servingUrl);
46422
46460
  const [device, setDevice] = y2("");
@@ -46428,8 +46466,12 @@ ${content}</tr>
46428
46466
  const [selectedLocale, setSelectedLocale] = y2("");
46429
46467
  const iframeRef = A2(null);
46430
46468
  const locales = props.draft.controller.getLocales();
46431
- const previewPath = `${getDocPreviewPath(props.docId)}?preview=true`;
46432
- const localizedPreviewPath = getLocalizedUrl(previewPath, selectedLocale);
46469
+ const previewPath = `${getDocPreviewPath({ collectionId, slug })}?preview=true`;
46470
+ const localizedPreviewPath = `${getDocPreviewPath({
46471
+ collectionId,
46472
+ slug,
46473
+ locale: selectedLocale
46474
+ })}?preview=true`;
46433
46475
  const localeOptions = [
46434
46476
  { value: "", label: "Select locale" },
46435
46477
  ...locales.map((locale) => ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blinkk/root-cms",
3
- "version": "1.0.0-rc.8",
3
+ "version": "1.0.0-rc.9",
4
4
  "author": "s@blinkk.com",
5
5
  "license": "MIT",
6
6
  "engines": {
@@ -78,6 +78,7 @@
78
78
  "firebase": "^10.5.2",
79
79
  "firebase-admin": "^11.11.0",
80
80
  "firebase-functions": "^4.4.1",
81
+ "firebase-tools": "^12.9.1",
81
82
  "marked": "^9.1.1",
82
83
  "preact": "*",
83
84
  "preact-render-to-string": "^6.2.2",
@@ -88,10 +89,10 @@
88
89
  "typescript": "5.2.2",
89
90
  "vite": "4.4.11",
90
91
  "vitest": "^0.34.6",
91
- "@blinkk/root": "1.0.0-rc.8"
92
+ "@blinkk/root": "1.0.0-rc.9"
92
93
  },
93
94
  "peerDependencies": {
94
- "@blinkk/root": "1.0.0-rc.8",
95
+ "@blinkk/root": "1.0.0-rc.9",
95
96
  "firebase-admin": ">=11",
96
97
  "firebase-functions": ">=4",
97
98
  "preact": ">=10",