studiocms 0.1.0-beta.10

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 (582) hide show
  1. package/CHANGELOG.md +501 -0
  2. package/LICENSE +21 -0
  3. package/README.md +59 -0
  4. package/custom-renderers/index.ts +4 -0
  5. package/custom-renderers/markdocRenderers/markdocReact-components/MarkDocReactRenderer.tsx +8 -0
  6. package/custom-renderers/markdocRenderers/markdocReact-components/MarkDocReactWrapper.astro +13 -0
  7. package/custom-renderers/markdocRenderers/markdocReact.ts +56 -0
  8. package/dist/auth.d.js +0 -0
  9. package/dist/auth.d.ts +397 -0
  10. package/dist/cli/cmds/get-turso.d.ts +1 -0
  11. package/dist/cli/cmds/get-turso.js +10 -0
  12. package/dist/cli/cmds/init/index.d.ts +4 -0
  13. package/dist/cli/cmds/init/index.js +52 -0
  14. package/dist/cli/cmds/init/steps/data/studiocmsEnv.d.ts +3 -0
  15. package/dist/cli/cmds/init/steps/data/studiocmsEnv.js +71 -0
  16. package/dist/cli/cmds/init/steps/envBuilder.d.ts +21 -0
  17. package/dist/cli/cmds/init/steps/envBuilder.js +368 -0
  18. package/dist/cli/cmds/init/steps/nextSteps.d.ts +2 -0
  19. package/dist/cli/cmds/init/steps/nextSteps.js +38 -0
  20. package/dist/cli/cmds/init.d.ts +1 -0
  21. package/dist/cli/cmds/init.js +4 -0
  22. package/dist/cli/index.d.ts +1 -0
  23. package/dist/cli/index.js +9 -0
  24. package/dist/cli/lib/commander.d.ts +39 -0
  25. package/dist/cli/lib/commander.js +87 -0
  26. package/dist/cli/lib/context.d.ts +28 -0
  27. package/dist/cli/lib/context.js +55 -0
  28. package/dist/cli/lib/pathUtil.d.ts +5 -0
  29. package/dist/cli/lib/pathUtil.js +14 -0
  30. package/dist/cli/lib/runExternal.d.ts +20 -0
  31. package/dist/cli/lib/runExternal.js +40 -0
  32. package/dist/cli/lib/seasonal.d.ts +5 -0
  33. package/dist/cli/lib/seasonal.js +88 -0
  34. package/dist/cli/lib/utils.d.ts +55 -0
  35. package/dist/cli/lib/utils.js +310 -0
  36. package/dist/cli/shared/intro.d.ts +2 -0
  37. package/dist/cli/shared/intro.js +24 -0
  38. package/dist/components/DefaultEditor.astro +138 -0
  39. package/dist/components/FormattedDate.astro +12 -0
  40. package/dist/components/Generator.astro +7 -0
  41. package/dist/components/Renderer.astro +13 -0
  42. package/dist/components/auth/OAuthButton.astro +21 -0
  43. package/dist/components/auth/OAuthButtonStack.astro +36 -0
  44. package/dist/components/auth/StaticAuthCheck.astro +20 -0
  45. package/dist/components/auth/StudioCMSLogoSVG.astro +13 -0
  46. package/dist/components/auth/oAuthButtonProviders.d.ts +8 -0
  47. package/dist/components/auth/oAuthButtonProviders.js +35 -0
  48. package/dist/components/dashboard/AstroCodeDiffsScript.astro +25 -0
  49. package/dist/components/dashboard/BaseHead.astro +41 -0
  50. package/dist/components/dashboard/Code.astro +23 -0
  51. package/dist/components/dashboard/DashboardPageHeader.astro +77 -0
  52. package/dist/components/dashboard/DoubleSidebar.astro +26 -0
  53. package/dist/components/dashboard/Footer.astro +16 -0
  54. package/dist/components/dashboard/MainSidebarContent.astro +317 -0
  55. package/dist/components/dashboard/PageHeader.astro +52 -0
  56. package/dist/components/dashboard/SidebarLink.astro +61 -0
  57. package/dist/components/dashboard/SidebarModals.astro +6 -0
  58. package/dist/components/dashboard/SidebarPluginLink.astro +45 -0
  59. package/dist/components/dashboard/SingleSidebar.astro +23 -0
  60. package/dist/components/dashboard/StudioCMSLogo.astro +12 -0
  61. package/dist/components/dashboard/ThemeManager.astro +53 -0
  62. package/dist/components/dashboard/component-scripts/TinyMDE.astro +6 -0
  63. package/dist/components/dashboard/component-scripts/dateTimeListener.d.ts +1 -0
  64. package/dist/components/dashboard/component-scripts/dateTimeListener.js +14 -0
  65. package/dist/components/dashboard/component-scripts/dateWithTimeAndZone.d.ts +1 -0
  66. package/dist/components/dashboard/component-scripts/dateWithTimeAndZone.js +12 -0
  67. package/dist/components/dashboard/component-scripts/makeClientRoutable.d.ts +1 -0
  68. package/dist/components/dashboard/component-scripts/makeClientRoutable.js +9 -0
  69. package/dist/components/dashboard/component-scripts/timeAgo.d.ts +1 -0
  70. package/dist/components/dashboard/component-scripts/timeAgo.js +21 -0
  71. package/dist/components/dashboard/islands/LoginChecker.astro +52 -0
  72. package/dist/components/dashboard/islands/configuration/ConfigForm.astro +317 -0
  73. package/dist/components/dashboard/islands/configuration/LightVsDark.astro +67 -0
  74. package/dist/components/dashboard/islands/content-mgmt/CreateFolder.astro +118 -0
  75. package/dist/components/dashboard/islands/content-mgmt/CreatePage.astro +380 -0
  76. package/dist/components/dashboard/islands/content-mgmt/EditFolder.astro +138 -0
  77. package/dist/components/dashboard/islands/content-mgmt/EditPage.astro +432 -0
  78. package/dist/components/dashboard/islands/content-mgmt/InnerSidebarElement.astro +299 -0
  79. package/dist/components/dashboard/islands/content-mgmt/PageHeader.astro +455 -0
  80. package/dist/components/dashboard/islands/content-mgmt/PageList.astro +49 -0
  81. package/dist/components/dashboard/islands/content-mgmt/PluginFields.astro +29 -0
  82. package/dist/components/dashboard/islands/content-mgmt/TreeRenderer.astro +75 -0
  83. package/dist/components/dashboard/islands/content-mgmt/TreeSidebarFolder.astro +53 -0
  84. package/dist/components/dashboard/islands/content-mgmt/TreeSidebarLink.astro +51 -0
  85. package/dist/components/dashboard/islands/content-mgmt/runtime.d.ts +10 -0
  86. package/dist/components/dashboard/islands/content-mgmt/runtime.js +33 -0
  87. package/dist/components/dashboard/islands/content-mgmt/shared.d.ts +27 -0
  88. package/dist/components/dashboard/islands/content-mgmt/shared.js +31 -0
  89. package/dist/components/dashboard/islands/dashboard/DashboardGrid.astro +39 -0
  90. package/dist/components/dashboard/islands/dashboard/DashboardGridItem.astro +34 -0
  91. package/dist/components/dashboard/islands/dashboard/Test.astro +5 -0
  92. package/dist/components/dashboard/islands/dashboard/UserName.astro +6 -0
  93. package/dist/components/dashboard/islands/dashboard/shared.d.ts +2 -0
  94. package/dist/components/dashboard/islands/dashboard/shared.js +0 -0
  95. package/dist/components/dashboard/islands/plugins/SettingsRenderer.astro +29 -0
  96. package/dist/components/dashboard/islands/profile/APITokens.astro +306 -0
  97. package/dist/components/dashboard/islands/profile/BasicInfo.astro +140 -0
  98. package/dist/components/dashboard/islands/profile/BasicInfoFallback.astro +43 -0
  99. package/dist/components/dashboard/islands/profile/SocialSignin.astro +181 -0
  100. package/dist/components/dashboard/islands/profile/SocialSigninFallback.astro +83 -0
  101. package/dist/components/dashboard/islands/profile/UpdatePassword.astro +166 -0
  102. package/dist/components/dashboard/islands/profile/UpdatePasswordFallback.astro +47 -0
  103. package/dist/components/dashboard/islands/profile/oAuthButtonProviders.d.ts +8 -0
  104. package/dist/components/dashboard/islands/profile/oAuthButtonProviders.js +35 -0
  105. package/dist/components/dashboard/islands/sidebar/UserAccount.astro +23 -0
  106. package/dist/components/dashboard/islands/sidebar/VersionCheck.astro +127 -0
  107. package/dist/components/dashboard/islands/sidebar/VersionCheckChangelog.astro +107 -0
  108. package/dist/components/dashboard/islands/user-mgmt/InnerSidebarElement.astro +348 -0
  109. package/dist/components/dashboard/islands/user-mgmt/RankCheck.astro +49 -0
  110. package/dist/components/dashboard/islands/user-mgmt/SocialSignin.astro +109 -0
  111. package/dist/components/dashboard/islands/user-mgmt/UserListItem.astro +60 -0
  112. package/dist/components/dashboard/sidebar-modals/UserManagementModals.astro +103 -0
  113. package/dist/components/dashboard/sidebar-modals/VersionModal.astro +267 -0
  114. package/dist/components/dashboard/sidebarConfig.d.ts +32 -0
  115. package/dist/components/dashboard/sidebarConfig.js +88 -0
  116. package/dist/components/default-grid-items/Recently-created-pages.astro +91 -0
  117. package/dist/components/default-grid-items/Recently-signed-up.astro +71 -0
  118. package/dist/components/default-grid-items/Recently-updated-pages.astro +96 -0
  119. package/dist/components/default-grid-items/Totals.astro +107 -0
  120. package/dist/components/default-grid-items/utils.d.ts +17 -0
  121. package/dist/components/default-grid-items/utils.js +26 -0
  122. package/dist/components/image/CustomImage.astro +90 -0
  123. package/dist/components/user-quick-tools.d.ts +42 -0
  124. package/dist/components/user-quick-tools.js +312 -0
  125. package/dist/config.d.ts +3 -0
  126. package/dist/config.js +4 -0
  127. package/dist/consts.d.ts +61 -0
  128. package/dist/consts.js +39 -0
  129. package/dist/core.d.js +0 -0
  130. package/dist/core.d.ts +226 -0
  131. package/dist/db/config.d.ts +4 -0
  132. package/dist/db/config.js +6 -0
  133. package/dist/db/tables.js +168 -0
  134. package/dist/errors.d.ts +19 -0
  135. package/dist/errors.js +11 -0
  136. package/dist/index.d.ts +152 -0
  137. package/dist/index.js +1179 -0
  138. package/dist/layouts/auth/AuthLayout.astro +74 -0
  139. package/dist/layouts/auth/FallbackCanvas.astro +123 -0
  140. package/dist/layouts/auth/ThemeManager.astro +53 -0
  141. package/dist/layouts/auth/ThreeCanvasLoader.astro +18 -0
  142. package/dist/layouts/dashboard/Layout.astro +64 -0
  143. package/dist/lib/auth/encryption.d.ts +30 -0
  144. package/dist/lib/auth/encryption.js +39 -0
  145. package/dist/lib/auth/password.d.ts +27 -0
  146. package/dist/lib/auth/password.js +42 -0
  147. package/dist/lib/auth/rate-limit.d.ts +136 -0
  148. package/dist/lib/auth/rate-limit.js +214 -0
  149. package/dist/lib/auth/session.d.ts +85 -0
  150. package/dist/lib/auth/session.js +93 -0
  151. package/dist/lib/auth/types.d.ts +83 -0
  152. package/dist/lib/auth/types.js +0 -0
  153. package/dist/lib/auth/user.d.ts +148 -0
  154. package/dist/lib/auth/user.js +133 -0
  155. package/dist/lib/dashboardGrid.d.ts +119 -0
  156. package/dist/lib/dashboardGrid.js +0 -0
  157. package/dist/lib/dynamic-sitemap/index.d.ts +42 -0
  158. package/dist/lib/dynamic-sitemap/index.js +45 -0
  159. package/dist/lib/dynamic-sitemap/sitemap-index.xml.d.ts +8 -0
  160. package/dist/lib/dynamic-sitemap/sitemap-index.xml.js +20 -0
  161. package/dist/lib/dynamic-sitemap/sitemap-index.xml.ts +45 -0
  162. package/dist/lib/head.d.ts +9 -0
  163. package/dist/lib/head.js +65 -0
  164. package/dist/lib/headDefaults.d.ts +18 -0
  165. package/dist/lib/headDefaults.js +75 -0
  166. package/dist/lib/i18n/LanguageSelector.astro +114 -0
  167. package/dist/lib/i18n/client.d.ts +591 -0
  168. package/dist/lib/i18n/client.js +83 -0
  169. package/dist/lib/i18n/config.d.ts +16 -0
  170. package/dist/lib/i18n/config.js +8 -0
  171. package/dist/lib/i18n/index.d.ts +578 -0
  172. package/dist/lib/i18n/index.js +63 -0
  173. package/dist/lib/i18n/translations/de.json +64 -0
  174. package/dist/lib/i18n/translations/en-us.json +238 -0
  175. package/dist/lib/i18n/translations/es.json +64 -0
  176. package/dist/lib/i18n/translations/fr.json +64 -0
  177. package/dist/lib/index.d.ts +7 -0
  178. package/dist/lib/index.js +7 -0
  179. package/dist/lib/jsonUtils.d.ts +2 -0
  180. package/dist/lib/jsonUtils.js +11 -0
  181. package/dist/lib/makeAPIRoute.d.ts +45 -0
  182. package/dist/lib/makeAPIRoute.js +16 -0
  183. package/dist/lib/makePublicRoute.d.ts +7 -0
  184. package/dist/lib/makePublicRoute.js +6 -0
  185. package/dist/lib/pathGenerators.d.ts +20 -0
  186. package/dist/lib/pathGenerators.js +66 -0
  187. package/dist/lib/plugins/dashboard-pages.d.ts +71 -0
  188. package/dist/lib/plugins/dashboard-pages.js +11 -0
  189. package/dist/lib/plugins/frontend-navigation.d.ts +18 -0
  190. package/dist/lib/plugins/frontend-navigation.js +39 -0
  191. package/dist/lib/plugins/index.d.ts +2 -0
  192. package/dist/lib/plugins/index.js +2 -0
  193. package/dist/lib/removeLeadingTrailingSlashes.d.ts +7 -0
  194. package/dist/lib/removeLeadingTrailingSlashes.js +13 -0
  195. package/dist/lib/renderer/astro-remark.d.ts +13 -0
  196. package/dist/lib/renderer/astro-remark.js +11 -0
  197. package/dist/lib/renderer/contentRenderer.d.ts +13 -0
  198. package/dist/lib/renderer/contentRenderer.js +31 -0
  199. package/dist/lib/renderer/errors.d.ts +5 -0
  200. package/dist/lib/renderer/errors.js +25 -0
  201. package/dist/lib/renderer/markdoc-renderers/markdocHTML.d.ts +3 -0
  202. package/dist/lib/renderer/markdoc-renderers/markdocHTML.js +14 -0
  203. package/dist/lib/renderer/markdoc-renderers/markdocReactStatic.d.ts +3 -0
  204. package/dist/lib/renderer/markdoc-renderers/markdocReactStatic.js +14 -0
  205. package/dist/lib/renderer/markdoc.d.ts +11 -0
  206. package/dist/lib/renderer/markdoc.js +28 -0
  207. package/dist/lib/renderer/mdx.d.ts +10 -0
  208. package/dist/lib/renderer/mdx.js +37 -0
  209. package/dist/lib/renderer/runtime.d.ts +8 -0
  210. package/dist/lib/renderer/runtime.js +30 -0
  211. package/dist/lib/renderer/shared.d.ts +15 -0
  212. package/dist/lib/renderer/shared.js +13 -0
  213. package/dist/lib/renderer/studiocms.d.ts +11 -0
  214. package/dist/lib/renderer/studiocms.js +22 -0
  215. package/dist/lib/renderer/types.d.ts +12 -0
  216. package/dist/lib/renderer/types.js +0 -0
  217. package/dist/lib/robots/core.d.ts +24 -0
  218. package/dist/lib/robots/core.js +187 -0
  219. package/dist/lib/robots/index.d.ts +11 -0
  220. package/dist/lib/robots/index.js +47 -0
  221. package/dist/lib/robots/types.d.ts +185 -0
  222. package/dist/lib/robots/types.js +0 -0
  223. package/dist/lib/robots/utils.d.ts +22 -0
  224. package/dist/lib/robots/utils.js +22 -0
  225. package/dist/lib/routeMap.d.ts +257 -0
  226. package/dist/lib/routeMap.js +249 -0
  227. package/dist/lib/urlGen.d.ts +11 -0
  228. package/dist/lib/urlGen.js +26 -0
  229. package/dist/lib/webVitals/checkForWebVitalsPlugin.d.ts +18 -0
  230. package/dist/lib/webVitals/checkForWebVitalsPlugin.js +82 -0
  231. package/dist/lib/webVitals/consts.d.ts +240 -0
  232. package/dist/lib/webVitals/consts.js +40 -0
  233. package/dist/lib/webVitals/dashboard-grid-items/CoreVitals.astro +66 -0
  234. package/dist/lib/webVitals/dashboard-grid-items/MetricCard.astro +24 -0
  235. package/dist/lib/webVitals/dashboard-grid-items/SummaryCard.astro +56 -0
  236. package/dist/lib/webVitals/dashboard-grid-items/metric.css +103 -0
  237. package/dist/lib/webVitals/dashboard-grid-items/shared.d.ts +29 -0
  238. package/dist/lib/webVitals/dashboard-grid-items/shared.js +35 -0
  239. package/dist/lib/webVitals/pages/analytics/body.astro +186 -0
  240. package/dist/lib/webVitals/pages/analytics/header.astro +42 -0
  241. package/dist/lib/webVitals/schemas.d.ts +78 -0
  242. package/dist/lib/webVitals/schemas.js +37 -0
  243. package/dist/lib/webVitals/types.d.ts +156 -0
  244. package/dist/lib/webVitals/types.js +0 -0
  245. package/dist/lib/webVitals/utils/buildDataObject.d.ts +8 -0
  246. package/dist/lib/webVitals/utils/buildDataObject.js +28 -0
  247. package/dist/lib/webVitals/utils/buildPageRouteDataObject.d.ts +15 -0
  248. package/dist/lib/webVitals/utils/buildPageRouteDataObject.js +70 -0
  249. package/dist/lib/webVitals/utils/buildPerPageDataObject.d.ts +23 -0
  250. package/dist/lib/webVitals/utils/buildPerPageDataObject.js +209 -0
  251. package/dist/lib/webVitals/utils/checkDate.d.ts +5 -0
  252. package/dist/lib/webVitals/utils/checkDate.js +19 -0
  253. package/dist/lib/webVitals/utils/webVitalsUtils.d.ts +24 -0
  254. package/dist/lib/webVitals/utils/webVitalsUtils.js +234 -0
  255. package/dist/lib/webVitals/webVital.d.ts +20 -0
  256. package/dist/lib/webVitals/webVital.js +40 -0
  257. package/dist/lib/webVitals/webVitalsRouteSummary.d.ts +19 -0
  258. package/dist/lib/webVitals/webVitalsRouteSummary.js +59 -0
  259. package/dist/lib/webVitals/webVitalsSummary.d.ts +19 -0
  260. package/dist/lib/webVitals/webVitalsSummary.js +49 -0
  261. package/dist/plugins.d.ts +2 -0
  262. package/dist/plugins.js +6 -0
  263. package/dist/renderer.d.js +0 -0
  264. package/dist/renderer.d.ts +23 -0
  265. package/dist/routes/api/render.astro +25 -0
  266. package/dist/routes/auth/api/auth0/callback.d.ts +4 -0
  267. package/dist/routes/auth/api/auth0/callback.js +117 -0
  268. package/dist/routes/auth/api/auth0/index.d.ts +4 -0
  269. package/dist/routes/auth/api/auth0/index.js +36 -0
  270. package/dist/routes/auth/api/auth0/shared.d.ts +13 -0
  271. package/dist/routes/auth/api/auth0/shared.js +24 -0
  272. package/dist/routes/auth/api/discord/callback.d.ts +4 -0
  273. package/dist/routes/auth/api/discord/callback.js +112 -0
  274. package/dist/routes/auth/api/discord/index.d.ts +4 -0
  275. package/dist/routes/auth/api/discord/index.js +36 -0
  276. package/dist/routes/auth/api/discord/shared.d.ts +12 -0
  277. package/dist/routes/auth/api/discord/shared.js +17 -0
  278. package/dist/routes/auth/api/github/callback.d.ts +4 -0
  279. package/dist/routes/auth/api/github/callback.js +112 -0
  280. package/dist/routes/auth/api/github/index.d.ts +4 -0
  281. package/dist/routes/auth/api/github/index.js +36 -0
  282. package/dist/routes/auth/api/github/shared.d.ts +13 -0
  283. package/dist/routes/auth/api/github/shared.js +14 -0
  284. package/dist/routes/auth/api/google/callback.d.ts +4 -0
  285. package/dist/routes/auth/api/google/callback.js +115 -0
  286. package/dist/routes/auth/api/google/index.d.ts +4 -0
  287. package/dist/routes/auth/api/google/index.js +38 -0
  288. package/dist/routes/auth/api/google/shared.d.ts +12 -0
  289. package/dist/routes/auth/api/google/shared.js +19 -0
  290. package/dist/routes/auth/api/login.d.ts +4 -0
  291. package/dist/routes/auth/api/login.js +46 -0
  292. package/dist/routes/auth/api/logout.d.ts +5 -0
  293. package/dist/routes/auth/api/logout.js +55 -0
  294. package/dist/routes/auth/api/register.d.ts +4 -0
  295. package/dist/routes/auth/api/register.js +64 -0
  296. package/dist/routes/auth/api/shared.d.ts +2 -0
  297. package/dist/routes/auth/api/shared.js +21 -0
  298. package/dist/routes/auth/login.astro +118 -0
  299. package/dist/routes/auth/logout.astro +28 -0
  300. package/dist/routes/auth/signup.astro +124 -0
  301. package/dist/routes/dashboard/[...pluginPage].astro +88 -0
  302. package/dist/routes/dashboard/configuration.astro +61 -0
  303. package/dist/routes/dashboard/content-management/createfolder.astro +83 -0
  304. package/dist/routes/dashboard/content-management/createpage.astro +86 -0
  305. package/dist/routes/dashboard/content-management/diff.astro +135 -0
  306. package/dist/routes/dashboard/content-management/editfolder.astro +67 -0
  307. package/dist/routes/dashboard/content-management/editpage.astro +71 -0
  308. package/dist/routes/dashboard/content-management/index.astro +91 -0
  309. package/dist/routes/dashboard/index.astro +56 -0
  310. package/dist/routes/dashboard/password-reset.astro +206 -0
  311. package/dist/routes/dashboard/plugins/[plugin].astro +104 -0
  312. package/dist/routes/dashboard/profile.astro +87 -0
  313. package/dist/routes/dashboard/studiocms_api/dashboard/api-tokens.d.ts +5 -0
  314. package/dist/routes/dashboard/studiocms_api/dashboard/api-tokens.js +90 -0
  315. package/dist/routes/dashboard/studiocms_api/dashboard/config.d.ts +4 -0
  316. package/dist/routes/dashboard/studiocms_api/dashboard/config.js +63 -0
  317. package/dist/routes/dashboard/studiocms_api/dashboard/content/folder.d.ts +6 -0
  318. package/dist/routes/dashboard/studiocms_api/dashboard/content/folder.js +121 -0
  319. package/dist/routes/dashboard/studiocms_api/dashboard/content/page.d.ts +6 -0
  320. package/dist/routes/dashboard/studiocms_api/dashboard/content/page.js +258 -0
  321. package/dist/routes/dashboard/studiocms_api/dashboard/create-reset-link.d.ts +4 -0
  322. package/dist/routes/dashboard/studiocms_api/dashboard/create-reset-link.js +59 -0
  323. package/dist/routes/dashboard/studiocms_api/dashboard/create-user-invite.d.ts +4 -0
  324. package/dist/routes/dashboard/studiocms_api/dashboard/create-user-invite.js +105 -0
  325. package/dist/routes/dashboard/studiocms_api/dashboard/create-user.d.ts +4 -0
  326. package/dist/routes/dashboard/studiocms_api/dashboard/create-user.js +100 -0
  327. package/dist/routes/dashboard/studiocms_api/dashboard/partials/Editor.astro +61 -0
  328. package/dist/routes/dashboard/studiocms_api/dashboard/partials/LiveRender.astro +30 -0
  329. package/dist/routes/dashboard/studiocms_api/dashboard/partials/UserListItems.astro +39 -0
  330. package/dist/routes/dashboard/studiocms_api/dashboard/plugins/[plugin].d.ts +2 -0
  331. package/dist/routes/dashboard/studiocms_api/dashboard/plugins/[plugin].js +32 -0
  332. package/dist/routes/dashboard/studiocms_api/dashboard/profile.d.ts +4 -0
  333. package/dist/routes/dashboard/studiocms_api/dashboard/profile.js +130 -0
  334. package/dist/routes/dashboard/studiocms_api/dashboard/reset-password.d.ts +4 -0
  335. package/dist/routes/dashboard/studiocms_api/dashboard/reset-password.js +105 -0
  336. package/dist/routes/dashboard/studiocms_api/dashboard/search-list.d.ts +4 -0
  337. package/dist/routes/dashboard/studiocms_api/dashboard/search-list.js +55 -0
  338. package/dist/routes/dashboard/studiocms_api/dashboard/users.d.ts +5 -0
  339. package/dist/routes/dashboard/studiocms_api/dashboard/users.js +92 -0
  340. package/dist/routes/dashboard/studiocms_api/dashboard/verify-session.d.ts +2 -0
  341. package/dist/routes/dashboard/studiocms_api/dashboard/verify-session.js +72 -0
  342. package/dist/routes/dashboard/user-management/edit.astro +631 -0
  343. package/dist/routes/dashboard/user-management/index.astro +103 -0
  344. package/dist/routes/error-pages/404.astro +66 -0
  345. package/dist/routes/firstTimeSetupRoutes/1-start.astro +253 -0
  346. package/dist/routes/firstTimeSetupRoutes/2-next.astro +208 -0
  347. package/dist/routes/firstTimeSetupRoutes/3-done.astro +95 -0
  348. package/dist/routes/firstTimeSetupRoutes/api/step-1.d.ts +2 -0
  349. package/dist/routes/firstTimeSetupRoutes/api/step-1.js +126 -0
  350. package/dist/routes/firstTimeSetupRoutes/api/step-2.d.ts +2 -0
  351. package/dist/routes/firstTimeSetupRoutes/api/step-2.js +110 -0
  352. package/dist/routes/firstTimeSetupRoutes/components/Layout.astro +41 -0
  353. package/dist/routes/firstTimeSetupRoutes/components/PageHeader.astro +60 -0
  354. package/dist/routes/firstTimeSetupRoutes/components/TabItem.astro +44 -0
  355. package/dist/routes/firstTimeSetupRoutes/components/Tabs.astro +170 -0
  356. package/dist/routes/firstTimeSetupRoutes/snippets/opt1-astro.config.diff +14 -0
  357. package/dist/routes/firstTimeSetupRoutes/snippets/opt2-astro.config.diff +9 -0
  358. package/dist/routes/firstTimeSetupRoutes/snippets/opt2-studiocms.config.diff +5 -0
  359. package/dist/routes/rest/utils/auth-token.d.ts +17 -0
  360. package/dist/routes/rest/utils/auth-token.js +31 -0
  361. package/dist/routes/rest/v1/folders/[id].d.ts +6 -0
  362. package/dist/routes/rest/v1/folders/[id].js +106 -0
  363. package/dist/routes/rest/v1/folders/index.d.ts +5 -0
  364. package/dist/routes/rest/v1/folders/index.js +88 -0
  365. package/dist/routes/rest/v1/pages/[id]/history/[diffid].d.ts +4 -0
  366. package/dist/routes/rest/v1/pages/[id]/history/[diffid].js +55 -0
  367. package/dist/routes/rest/v1/pages/[id]/history/index.d.ts +4 -0
  368. package/dist/routes/rest/v1/pages/[id]/history/index.js +61 -0
  369. package/dist/routes/rest/v1/pages/[id]/index.d.ts +6 -0
  370. package/dist/routes/rest/v1/pages/[id]/index.js +165 -0
  371. package/dist/routes/rest/v1/pages/index.d.ts +5 -0
  372. package/dist/routes/rest/v1/pages/index.js +113 -0
  373. package/dist/routes/rest/v1/public/folders/[id].d.ts +4 -0
  374. package/dist/routes/rest/v1/public/folders/[id].js +43 -0
  375. package/dist/routes/rest/v1/public/folders/index.d.ts +4 -0
  376. package/dist/routes/rest/v1/public/folders/index.js +49 -0
  377. package/dist/routes/rest/v1/public/pages/[id].d.ts +4 -0
  378. package/dist/routes/rest/v1/public/pages/[id].js +46 -0
  379. package/dist/routes/rest/v1/public/pages/index.d.ts +4 -0
  380. package/dist/routes/rest/v1/public/pages/index.js +61 -0
  381. package/dist/routes/rest/v1/settings/index.d.ts +5 -0
  382. package/dist/routes/rest/v1/settings/index.js +75 -0
  383. package/dist/routes/rest/v1/users/[id].d.ts +6 -0
  384. package/dist/routes/rest/v1/users/[id].js +212 -0
  385. package/dist/routes/rest/v1/users/index.d.ts +5 -0
  386. package/dist/routes/rest/v1/users/index.js +138 -0
  387. package/dist/routes/sdk/fallback-list-pages.json.d.ts +2 -0
  388. package/dist/routes/sdk/fallback-list-pages.json.js +19 -0
  389. package/dist/routes/sdk/fallback-list-pages.json.ts +22 -0
  390. package/dist/routes/sdk/full-changelog.json.d.ts +16 -0
  391. package/dist/routes/sdk/full-changelog.json.js +170 -0
  392. package/dist/routes/sdk/full-changelog.json.ts +224 -0
  393. package/dist/routes/sdk/list-pages.d.ts +4 -0
  394. package/dist/routes/sdk/list-pages.js +34 -0
  395. package/dist/routes/sdk/update-latest-version-cache.d.ts +4 -0
  396. package/dist/routes/sdk/update-latest-version-cache.js +41 -0
  397. package/dist/runtime/AstroComponentProxy.d.ts +29 -0
  398. package/dist/runtime/AstroComponentProxy.js +47 -0
  399. package/dist/runtime/decoder/decode-codepoint.d.ts +18 -0
  400. package/dist/runtime/decoder/decode-codepoint.js +58 -0
  401. package/dist/runtime/decoder/decode-data-html.d.ts +1 -0
  402. package/dist/runtime/decoder/decode-data-html.js +7 -0
  403. package/dist/runtime/decoder/decode-data-xml.d.ts +1 -0
  404. package/dist/runtime/decoder/decode-data-xml.js +7 -0
  405. package/dist/runtime/decoder/index.d.ts +34 -0
  406. package/dist/runtime/decoder/index.js +18 -0
  407. package/dist/runtime/decoder/util.d.ts +208 -0
  408. package/dist/runtime/decoder/util.js +415 -0
  409. package/dist/schemas/config/auth.d.ts +175 -0
  410. package/dist/schemas/config/auth.js +65 -0
  411. package/dist/schemas/config/componentoverrides.d.ts +17 -0
  412. package/dist/schemas/config/componentoverrides.js +14 -0
  413. package/dist/schemas/config/dashboard.d.ts +154 -0
  414. package/dist/schemas/config/dashboard.js +59 -0
  415. package/dist/schemas/config/defaultFrontend.d.ts +125 -0
  416. package/dist/schemas/config/defaultFrontend.js +57 -0
  417. package/dist/schemas/config/developer.d.ts +15 -0
  418. package/dist/schemas/config/developer.js +14 -0
  419. package/dist/schemas/config/imageService.d.ts +13 -0
  420. package/dist/schemas/config/imageService.js +12 -0
  421. package/dist/schemas/config/index.d.ts +1153 -0
  422. package/dist/schemas/config/index.js +95 -0
  423. package/dist/schemas/config/integrations.d.ts +14 -0
  424. package/dist/schemas/config/integrations.js +12 -0
  425. package/dist/schemas/config/markdoc.d.ts +172 -0
  426. package/dist/schemas/config/markdoc.js +68 -0
  427. package/dist/schemas/config/mdx.d.ts +455 -0
  428. package/dist/schemas/config/mdx.js +71 -0
  429. package/dist/schemas/config/rendererConfig.d.ts +659 -0
  430. package/dist/schemas/config/rendererConfig.js +51 -0
  431. package/dist/schemas/config/sdk.d.ts +167 -0
  432. package/dist/schemas/config/sdk.js +85 -0
  433. package/dist/schemas/config/studiocms-markdown-remark.d.ts +292 -0
  434. package/dist/schemas/config/studiocms-markdown-remark.js +63 -0
  435. package/dist/schemas/index.d.ts +2 -0
  436. package/dist/schemas/index.js +2 -0
  437. package/dist/schemas/plugins/index.d.ts +7373 -0
  438. package/dist/schemas/plugins/index.js +192 -0
  439. package/dist/schemas/plugins/shared.d.ts +1752 -0
  440. package/dist/schemas/plugins/shared.js +221 -0
  441. package/dist/scripts/formListener.d.ts +16 -0
  442. package/dist/scripts/formListener.js +46 -0
  443. package/dist/scripts/three.d.ts +1 -0
  444. package/dist/scripts/three.js +278 -0
  445. package/dist/scripts/utils/fitModelToViewport.d.ts +8 -0
  446. package/dist/scripts/utils/fitModelToViewport.js +19 -0
  447. package/dist/sdk/StudioCMSVirtualCache.d.ts +283 -0
  448. package/dist/sdk/StudioCMSVirtualCache.js +685 -0
  449. package/dist/sdk/cache.d.ts +11 -0
  450. package/dist/sdk/cache.js +12 -0
  451. package/dist/sdk/core.d.ts +865 -0
  452. package/dist/sdk/core.js +1966 -0
  453. package/dist/sdk/errors.d.ts +21 -0
  454. package/dist/sdk/errors.js +11 -0
  455. package/dist/sdk/index.d.ts +371 -0
  456. package/dist/sdk/index.js +8 -0
  457. package/dist/sdk/lib/foldertree.d.ts +50 -0
  458. package/dist/sdk/lib/foldertree.js +123 -0
  459. package/dist/sdk/lib/generators.d.ts +30 -0
  460. package/dist/sdk/lib/generators.js +25 -0
  461. package/dist/sdk/lib/packages.d.ts +8 -0
  462. package/dist/sdk/lib/packages.js +14 -0
  463. package/dist/sdk/lib/parsers.d.ts +14 -0
  464. package/dist/sdk/lib/parsers.js +10 -0
  465. package/dist/sdk/lib/users.d.ts +19 -0
  466. package/dist/sdk/lib/users.js +26 -0
  467. package/dist/sdk/tables.d.ts +1198 -0
  468. package/dist/sdk/tables.js +55 -0
  469. package/dist/sdk/types/index.d.ts +175 -0
  470. package/dist/sdk/types/index.js +0 -0
  471. package/dist/sdk/types/tableDefs.d.ts +75 -0
  472. package/dist/sdk/types/tableDefs.js +0 -0
  473. package/dist/sdk/types/tsAlias.d.ts +155 -0
  474. package/dist/sdk/types/tsAlias.js +0 -0
  475. package/dist/sdk/utils/db.d.ts +5 -0
  476. package/dist/sdk/utils/db.js +15 -0
  477. package/dist/stubs/auth-lib.d.ts +2 -0
  478. package/dist/stubs/auth-lib.js +519 -0
  479. package/dist/stubs/auth-scripts.d.ts +2 -0
  480. package/dist/stubs/auth-scripts.js +29 -0
  481. package/dist/stubs/auth-utils.d.ts +2 -0
  482. package/dist/stubs/auth-utils.js +36 -0
  483. package/dist/stubs/changelog.d.ts +2 -0
  484. package/dist/stubs/changelog.js +16 -0
  485. package/dist/stubs/components.d.ts +2 -0
  486. package/dist/stubs/components.js +67 -0
  487. package/dist/stubs/core.d.ts +2 -0
  488. package/dist/stubs/core.js +49 -0
  489. package/dist/stubs/i18n-dts.d.ts +2 -0
  490. package/dist/stubs/i18n-dts.js +117 -0
  491. package/dist/stubs/images.d.ts +1 -0
  492. package/dist/stubs/images.js +30 -0
  493. package/dist/stubs/index.d.ts +1 -0
  494. package/dist/stubs/index.js +40 -0
  495. package/dist/stubs/lib.d.ts +2 -0
  496. package/dist/stubs/lib.js +123 -0
  497. package/dist/stubs/plugins.d.ts +2 -0
  498. package/dist/stubs/plugins.js +60 -0
  499. package/dist/stubs/proxy.d.ts +2 -0
  500. package/dist/stubs/proxy.js +40 -0
  501. package/dist/stubs/renderer-config.d.ts +2 -0
  502. package/dist/stubs/renderer-config.js +18 -0
  503. package/dist/stubs/renderer-markdownConfig.d.ts +2 -0
  504. package/dist/stubs/renderer-markdownConfig.js +17 -0
  505. package/dist/stubs/renderer.d.ts +2 -0
  506. package/dist/stubs/renderer.js +44 -0
  507. package/dist/stubs/sdk.d.ts +2 -0
  508. package/dist/stubs/sdk.js +202 -0
  509. package/dist/stubs/webVitals.d.ts +2 -0
  510. package/dist/stubs/webVitals.js +40 -0
  511. package/dist/styles/404.css +47 -0
  512. package/dist/styles/SyntaxFont.woff2 +0 -0
  513. package/dist/styles/authlayout.css +138 -0
  514. package/dist/styles/dashboard-base.css +493 -0
  515. package/dist/styles/dashboard-code.css +33 -0
  516. package/dist/styles/dashboard-diff.css +389 -0
  517. package/dist/styles/dashboard-tiny-mde.css +224 -0
  518. package/dist/styles/md-remark-callouts/github.css +56 -0
  519. package/dist/styles/md-remark-callouts/obsidian.css +66 -0
  520. package/dist/styles/md-remark-callouts/vitepress.css +58 -0
  521. package/dist/styles/md-remark-headings.css +48 -0
  522. package/dist/types.d.ts +43 -0
  523. package/dist/types.js +0 -0
  524. package/dist/utils/addAPIRoutes.d.ts +9 -0
  525. package/dist/utils/addAPIRoutes.js +33 -0
  526. package/dist/utils/addIntegrationArray.d.ts +24 -0
  527. package/dist/utils/addIntegrationArray.js +11 -0
  528. package/dist/utils/addIntegrationArrayWithCheck.d.ts +11 -0
  529. package/dist/utils/addIntegrationArrayWithCheck.js +24 -0
  530. package/dist/utils/astroConfigCheck.d.ts +8 -0
  531. package/dist/utils/astroConfigCheck.js +31 -0
  532. package/dist/utils/astroEnvConfig.d.ts +45 -0
  533. package/dist/utils/astroEnvConfig.js +9 -0
  534. package/dist/utils/authEnvCheck.d.ts +38 -0
  535. package/dist/utils/authEnvCheck.js +82 -0
  536. package/dist/utils/changelog.d.ts +1 -0
  537. package/dist/utils/changelog.js +53 -0
  538. package/dist/utils/changelogLoader.d.ts +15 -0
  539. package/dist/utils/changelogLoader.js +104 -0
  540. package/dist/utils/checkENV.d.ts +27 -0
  541. package/dist/utils/checkENV.js +115 -0
  542. package/dist/utils/configManager.d.ts +22 -0
  543. package/dist/utils/configManager.js +98 -0
  544. package/dist/utils/configResolver.d.ts +283 -0
  545. package/dist/utils/configResolver.js +105 -0
  546. package/dist/utils/defineStudioCMSConfig.d.ts +165 -0
  547. package/dist/utils/defineStudioCMSConfig.js +6 -0
  548. package/dist/utils/getLabelForPermissionLevel.d.ts +2 -0
  549. package/dist/utils/getLabelForPermissionLevel.js +17 -0
  550. package/dist/utils/injectRouteArray.d.ts +19 -0
  551. package/dist/utils/injectRouteArray.js +75 -0
  552. package/dist/utils/integrationLogger.d.ts +7 -0
  553. package/dist/utils/integrationLogger.js +18 -0
  554. package/dist/utils/integrations.d.ts +4 -0
  555. package/dist/utils/integrations.js +32 -0
  556. package/dist/utils/isDashboardRoute.d.ts +7 -0
  557. package/dist/utils/isDashboardRoute.js +10 -0
  558. package/dist/utils/loginBackgrounds/studiocms-blobs-dark.png +0 -0
  559. package/dist/utils/loginBackgrounds/studiocms-blobs-light.png +0 -0
  560. package/dist/utils/loginBackgrounds/studiocms-blocks-dark.png +0 -0
  561. package/dist/utils/loginBackgrounds/studiocms-blocks-light.png +0 -0
  562. package/dist/utils/loginBackgrounds/studiocms-curves-dark.png +0 -0
  563. package/dist/utils/loginBackgrounds/studiocms-curves-light.png +0 -0
  564. package/dist/utils/makePageTitle.d.ts +3 -0
  565. package/dist/utils/makePageTitle.js +7 -0
  566. package/dist/utils/pageListPackageLabel.d.ts +4 -0
  567. package/dist/utils/pageListPackageLabel.js +12 -0
  568. package/dist/utils/readJson.d.ts +1 -0
  569. package/dist/utils/readJson.js +7 -0
  570. package/dist/utils/routeBuilder.d.ts +18 -0
  571. package/dist/utils/routeBuilder.js +96 -0
  572. package/dist/utils/safeString.d.ts +1 -0
  573. package/dist/utils/safeString.js +6 -0
  574. package/dist/utils/simpleResponse.d.ts +1 -0
  575. package/dist/utils/simpleResponse.js +29 -0
  576. package/dist/utils/validImages.d.ts +13 -0
  577. package/dist/utils/validImages.js +39 -0
  578. package/dist/virtual.d.js +0 -0
  579. package/dist/virtual.d.ts +9 -0
  580. package/package.json +219 -0
  581. package/studiocms-cli.mjs +13 -0
  582. package/ui.d.ts +291 -0
@@ -0,0 +1,6 @@
1
+ ---
2
+ ---
3
+
4
+ <script is:inline>
5
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyMDE={})}(this,(function(e){"use strict";const t={blockquote:'<svg height="18" width="18"><rect width="5" height="5" x="3" y="4" ry="1"/><rect ry="1" y="4" x="10" height="5" width="5"/><path d="M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z"/></svg>',bold:'<svg height="18" width="18"><path d="M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z"/></svg>',clear_formatting:'<svg height="18" width="18"><path d="M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z"/><rect ry=".8" rx=".8" y="14" x="16" height="2" width="2"/><rect width="2" height="2" x="13" y="14" rx=".8" ry=".8"/><rect ry=".8" rx=".8" y="14" x="10" height="2" width="2"/></svg>',code:'<svg height="18" width="18"><path d="M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z"/></svg>',h1:'<svg height="18" width="18"><path d="M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z"/></svg>',h2:'<svg height="18" width="18"><path d="M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z"/></svg>',hr:'<svg height="18" width="18"><rect ry="1" y="8" height="2" width="18" style="font-variation-settings:normal;marker:none"/></svg>',image:'<svg height="18" width="18"><path d="M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z"/><circle r="1.5" cy="6.5" cx="5.5"/></svg>',italic:'<svg height="18" width="18"><path d="M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z"/></svg>',link:'<svg height="18" width="18"><path d="M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z"/><path d="M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z"/></svg>',ol:'<svg height="18" width="18"><path d="M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z"/><path d="M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z"/><rect y="13" x="6" height="2" width="12" ry="1"/><rect ry="1" width="12" height="2" x="6" y="8"/><rect y="3" x="6" height="2" width="12" ry="1"/><path d="M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z"/></svg>',strikethrough:'<svg width="18" height="18"><path d="M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z"/><rect ry="1" y="8" x="1" height="2" width="16"/></svg>',ul:'<svg height="18" width="18"><circle cx="2" cy="9" r="2"/><circle cy="4" cx="2" r="2"/><rect y="3" x="6" height="2" width="12" ry="1"/><circle cx="2" cy="14" r="2"/><rect ry="1" width="12" height="2" x="6" y="8"/><rect y="13" x="6" height="2" width="12" ry="1"/></svg>'},n=/(Mac|iPhone|iPod|iPad)/i.test("undefined"!=typeof navigator?navigator.platform:""),s={bold:{name:"bold",action:"bold",innerHTML:t.bold,title:"Bold",hotkey:"Mod-B"},italic:{name:"italic",action:"italic",innerHTML:t.italic,title:"Italic",hotkey:"Mod-I"},strikethrough:{name:"strikethrough",action:"strikethrough",innerHTML:t.strikethrough,title:"Strikethrough",hotkey:"Mod2-Shift-5"},code:{name:"code",action:"code",innerHTML:t.code,title:"Format as code"},h1:{name:"h1",action:"h1",innerHTML:t.h1,title:"Level 1 heading",hotkey:"Mod-Shift-1"},h2:{name:"h2",action:"h2",innerHTML:t.h2,title:"Level 2 heading",hotkey:"Mod-Shift-2"},ul:{name:"ul",action:"ul",innerHTML:t.ul,title:"Bulleted list"},ol:{name:"ol",action:"ol",innerHTML:t.ol,title:"Numbered list"},blockquote:{name:"blockquote",action:"blockquote",innerHTML:t.blockquote,title:"Quote",hotkey:"Mod2-Shift-Q"},insertLink:{name:"insertLink",action:e=>{e.isInlineFormattingAllowed()&&e.wrapSelection("[","]()")},enabled:(e,t,n)=>!e.isInlineFormattingAllowed(t,n)&&null,innerHTML:t.link,title:"Insert link",hotkey:"Mod-K"},insertImage:{name:"insertImage",action:e=>{e.isInlineFormattingAllowed()&&e.wrapSelection("![","]()")},enabled:(e,t,n)=>!e.isInlineFormattingAllowed(t,n)&&null,innerHTML:t.image,title:"Insert image",hotkey:"Mod2-Shift-I"},hr:{name:"hr",action:e=>e.paste("\n***\n"),enabled:()=>!1,innerHTML:t.hr,title:"Insert horizontal line",hotkey:"Mod2-Shift-L"}};var i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r=function(e){return e&&e.Math===Math&&e},a=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof i&&i)||function(){return this}()||i||Function("return this")(),l=function(e){try{return!!e()}catch(e){return!0}},o=!l((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})),u={},c={get exports(){return u},set exports(e){u=e}},h=!l((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),p=h,d=Function.prototype,g=d.call,m=p&&d.bind.bind(g,g),f=p?m:function(e){return function(){return g.apply(e,arguments)}},M="object"==typeof document&&document.all,T={all:M,IS_HTMLDDA:void 0===M&&void 0!==M},D=T.all,F=T.IS_HTMLDDA?function(e){return"function"==typeof e||e===D}:function(e){return"function"==typeof e},y=function(e){return null==e},C=y,k=TypeError,E=function(e){if(C(e))throw new k("Can't call method on "+e);return e},b=Object,$=function(e){return b(E(e))},A=f({}.hasOwnProperty),w=Object.hasOwn||function(e,t){return A($(e),t)},v=o,x=w,S=Function.prototype,L=v&&Object.getOwnPropertyDescriptor,B=x(S,"name"),N={EXISTS:B,PROPER:B&&"something"===function(){}.name,CONFIGURABLE:B&&(!v||v&&L(S,"name").configurable)},H=a,_=Object.defineProperty,I=function(e,t){try{_(H,e,{value:t,configurable:!0,writable:!0})}catch(n){H[e]=t}return t},O="__core-js_shared__",P=a[O]||I(O,{}),j=F,z=P,R=f(Function.toString);j(z.inspectSource)||(z.inspectSource=function(e){return R(e)});var q,V,Z=z.inspectSource,K=F,U=a.WeakMap,W=K(U)&&/native code/.test(String(U)),X=F,G=T.all,Q=T.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:X(e)||e===G}:function(e){return"object"==typeof e?null!==e:X(e)},J={},Y=Q,ee=a.document,te=Y(ee)&&Y(ee.createElement),ne=function(e){return te?ee.createElement(e):{}},se=!o&&!l((function(){return 7!==Object.defineProperty(ne("div"),"a",{get:function(){return 7}}).a})),ie=o&&l((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),re=Q,ae=String,le=TypeError,oe=function(e){if(re(e))return e;throw new le(ae(e)+" is not an object")},ue=h,ce=Function.prototype.call,he=ue?ce.bind(ce):function(){return ce.apply(ce,arguments)},pe=a,de=F,ge=f({}.isPrototypeOf),me=a,fe="undefined"!=typeof navigator&&String(navigator.userAgent)||"",Me=me.process,Te=me.Deno,De=Me&&Me.versions||Te&&Te.version,Fe=De&&De.v8;Fe&&(V=(q=Fe.split("."))[0]>0&&q[0]<4?1:+(q[0]+q[1])),!V&&fe&&(!(q=fe.match(/Edge\/(\d+)/))||q[1]>=74)&&(q=fe.match(/Chrome\/(\d+)/))&&(V=+q[1]);var ye=V,Ce=l,ke=a.String,Ee=!!Object.getOwnPropertySymbols&&!Ce((function(){var e=Symbol("symbol detection");return!ke(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&ye&&ye<41})),be=Ee&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,$e=function(e,t){return arguments.length<2?(n=pe[e],de(n)?n:void 0):pe[e]&&pe[e][t];var n},Ae=F,we=ge,ve=Object,xe=be?function(e){return"symbol"==typeof e}:function(e){var t=$e("Symbol");return Ae(t)&&we(t.prototype,ve(e))},Se=String,Le=F,Be=function(e){try{return Se(e)}catch(e){return"Object"}},Ne=TypeError,He=function(e){if(Le(e))return e;throw new Ne(Be(e)+" is not a function")},_e=y,Ie=he,Oe=F,Pe=Q,je=TypeError,ze={},Re=P;({get exports(){return ze},set exports(e){ze=e}}.exports=function(e,t){return Re[e]||(Re[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.33.0",mode:"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"});var qe=f,Ve=0,Ze=Math.random(),Ke=qe(1..toString),Ue=function(e){return"Symbol("+(void 0===e?"":e)+")_"+Ke(++Ve+Ze,36)},We=ze,Xe=w,Ge=Ue,Qe=Ee,Je=be,Ye=a.Symbol,et=We("wks"),tt=Je?Ye.for||Ye:Ye&&Ye.withoutSetter||Ge,nt=he,st=Q,it=xe,rt=function(e,t){var n=e[t];return _e(n)?void 0:He(n)},at=function(e,t){var n,s;if("string"===t&&Oe(n=e.toString)&&!Pe(s=Ie(n,e)))return s;if(Oe(n=e.valueOf)&&!Pe(s=Ie(n,e)))return s;if("string"!==t&&Oe(n=e.toString)&&!Pe(s=Ie(n,e)))return s;throw new je("Can't convert object to primitive value")},lt=TypeError,ot=function(e){return Xe(et,e)||(et[e]=Qe&&Xe(Ye,e)?Ye[e]:tt("Symbol."+e)),et[e]}("toPrimitive"),ut=function(e,t){if(!st(e)||it(e))return e;var n,s=rt(e,ot);if(s){if(void 0===t&&(t="default"),n=nt(s,e,t),!st(n)||it(n))return n;throw new lt("Can't convert object to primitive value")}return void 0===t&&(t="number"),at(e,t)},ct=xe,ht=o,pt=se,dt=ie,gt=oe,mt=function(e){var t=ut(e,"string");return ct(t)?t:t+""},ft=TypeError,Mt=Object.defineProperty,Tt=Object.getOwnPropertyDescriptor,Dt="enumerable",Ft="configurable",yt="writable";J.f=ht?dt?function(e,t,n){if(gt(e),t=mt(t),gt(n),"function"==typeof e&&"prototype"===t&&"value"in n&&yt in n&&!n[yt]){var s=Tt(e,t);s&&s[yt]&&(e[t]=n.value,n={configurable:Ft in n?n[Ft]:s[Ft],enumerable:Dt in n?n[Dt]:s[Dt],writable:!1})}return Mt(e,t,n)}:Mt:function(e,t,n){if(gt(e),t=mt(t),gt(n),pt)try{return Mt(e,t,n)}catch(e){}if("get"in n||"set"in n)throw new ft("Accessors not supported");return"value"in n&&(e[t]=n.value),e};var Ct,kt,Et,bt=J,$t=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},At=o?function(e,t,n){return bt.f(e,t,$t(1,n))}:function(e,t,n){return e[t]=n,e},wt=Ue,vt=ze("keys"),xt=W,St=a,Lt=Q,Bt=At,Nt=w,Ht=P,_t=function(e){return vt[e]||(vt[e]=wt(e))},It="Object already initialized",Ot=St.TypeError,Pt=St.WeakMap;if(xt||Ht.state){var jt=Ht.state||(Ht.state=new Pt);jt.get=jt.get,jt.has=jt.has,jt.set=jt.set,Ct=function(e,t){if(jt.has(e))throw new Ot(It);return t.facade=e,jt.set(e,t),t},kt=function(e){return jt.get(e)||{}},Et=function(e){return jt.has(e)}}else{var zt=_t("state");Ct=function(e,t){if(Nt(e,zt))throw new Ot(It);return t.facade=e,Bt(e,zt,t),t},kt=function(e){return Nt(e,zt)?e[zt]:{}},Et=function(e){return Nt(e,zt)}}var Rt={set:Ct,get:kt,has:Et,enforce:function(e){return Et(e)?kt(e):Ct(e,{})},getterFor:function(e){return function(t){var n;if(!Lt(t)||(n=kt(t)).type!==e)throw new Ot("Incompatible receiver, "+e+" required");return n}}},qt=f,Vt=l,Zt=F,Kt=w,Ut=o,Wt=N.CONFIGURABLE,Xt=Z,Gt=Rt.enforce,Qt=Rt.get,Jt=String,Yt=Object.defineProperty,en=qt("".slice),tn=qt("".replace),nn=qt([].join),sn=Ut&&!Vt((function(){return 8!==Yt((function(){}),"length",{value:8}).length})),rn=String(String).split("String"),an=c.exports=function(e,t,n){"Symbol("===en(Jt(t),0,7)&&(t="["+tn(Jt(t),/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!Kt(e,"name")||Wt&&e.name!==t)&&(Ut?Yt(e,"name",{value:t,configurable:!0}):e.name=t),sn&&n&&Kt(n,"arity")&&e.length!==n.arity&&Yt(e,"length",{value:n.arity});try{n&&Kt(n,"constructor")&&n.constructor?Ut&&Yt(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var s=Gt(e);return Kt(s,"source")||(s.source=nn(rn,"string"==typeof t?t:"")),e};Function.prototype.toString=an((function(){return Zt(this)&&Qt(this).source||Xt(this)}),"toString");var ln=u,on=J,un=oe,cn=o,hn=function(e,t,n){return n.get&&ln(n.get,t,{getter:!0}),n.set&&ln(n.set,t,{setter:!0}),on.f(e,t,n)},pn=function(){var e=un(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t},dn=l,gn=a.RegExp,mn=gn.prototype;cn&&dn((function(){var e=!0;try{gn(".","d")}catch(t){e=!1}var t={},n="",s=e?"dgimsy":"gimsy",i=function(e,s){Object.defineProperty(t,e,{get:function(){return n+=s,!0}})},r={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var a in e&&(r.hasIndices="d"),r)i(a,r[a]);return Object.getOwnPropertyDescriptor(mn,"flags").get.call(t)!==s||n!==s}))&&hn(mn,"flags",{configurable:!0,get:pn});const fn={ASCIIPunctuation:/[!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~\\]/,NotTriggerChar:/[^`_*[\]()<>!~]/,Scheme:/[A-Za-z][A-Za-z0-9+.-]{1,31}/,Email:/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/,HTMLOpenTag:/<HTMLTagName(?:HTMLAttribute)*\s*\/?>/,HTMLCloseTag:/<\/HTMLTagName\s*>/,HTMLTagName:/[A-Za-z][A-Za-z0-9-]*/,HTMLComment:/<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,HTMLPI:/<\?(?:|.|(?:[^?]|\?[^>])*)\?>/,HTMLDeclaration:/<![A-Z]+\s[^>]*>/,HTMLCDATA:/<!\[CDATA\[.*?\]\]>/,HTMLAttribute:/\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,HTMLAttValue:/\s*=\s*(?:(?:'[^']*')|(?:"[^"]*")|(?:[^\s"'=<>`]+))/,KnownTag:/address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/},Mn=new RegExp(/^(?:[!"#$%&'()*+,\-./:;<=>?@[\]\\^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B])/),Tn=new RegExp(/(?:[!"#$%&'()*+,\-./:;<=>?@[\]\\^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B])$/),Dn={TMH1:{regexp:/^( {0,3}#\s)(.*?)((?:\s+#+\s*)?)$/,replacement:'<span class="TMMark TMMark_TMH1">$1</span>$$2<span class="TMMark TMMark_TMH1">$3</span>'},TMH2:{regexp:/^( {0,3}##\s)(.*?)((?:\s+#+\s*)?)$/,replacement:'<span class="TMMark TMMark_TMH2">$1</span>$$2<span class="TMMark TMMark_TMH2">$3</span>'},TMH3:{regexp:/^( {0,3}###\s)(.*?)((?:\s+#+\s*)?)$/,replacement:'<span class="TMMark TMMark_TMH3">$1</span>$$2<span class="TMMark TMMark_TMH3">$3</span>'},TMH4:{regexp:/^( {0,3}####\s)(.*?)((?:\s+#+\s*)?)$/,replacement:'<span class="TMMark TMMark_TMH4">$1</span>$$2<span class="TMMark TMMark_TMH4">$3</span>'},TMH5:{regexp:/^( {0,3}#####\s)(.*?)((?:\s+#+\s*)?)$/,replacement:'<span class="TMMark TMMark_TMH5">$1</span>$$2<span class="TMMark TMMark_TMH5">$3</span>'},TMH6:{regexp:/^( {0,3}######\s)(.*?)((?:\s+#+\s*)?)$/,replacement:'<span class="TMMark TMMark_TMH6">$1</span>$$2<span class="TMMark TMMark_TMH6">$3</span>'},TMBlockquote:{regexp:/^( {0,3}>[ ]?)(.*)$/,replacement:'<span class="TMMark TMMark_TMBlockquote">$1</span>$$2'},TMCodeFenceBacktickOpen:{regexp:/^( {0,3}(?<seq>````*)\s*)([^`]*?)(\s*)$/,replacement:'<span class="TMMark TMMark_TMCodeFenceBacktick">$1</span><span class="TMInfoString">$3</span>$4'},TMCodeFenceTildeOpen:{regexp:/^( {0,3}(?<seq>~~~~*)\s*)(.*?)(\s*)$/,replacement:'<span class="TMMark TMMark_TMCodeFenceTilde">$1</span><span class="TMInfoString">$3</span>$4'},TMCodeFenceBacktickClose:{regexp:/^( {0,3}(?<seq>````*))(\s*)$/,replacement:'<span class="TMMark TMMark_TMCodeFenceBacktick">$1</span>$3'},TMCodeFenceTildeClose:{regexp:/^( {0,3}(?<seq>~~~~*))(\s*)$/,replacement:'<span class="TMMark TMMark_TMCodeFenceTilde">$1</span>$3'},TMBlankLine:{regexp:/^([ \t]*)$/,replacement:"$0"},TMSetextH1Marker:{regexp:/^ {0,3}=+\s*$/,replacement:'<span class="TMMark TMMark_TMSetextH1Marker">$0</span>'},TMSetextH2Marker:{regexp:/^ {0,3}-+\s*$/,replacement:'<span class="TMMark TMMark_TMSetextH1Marker">$0</span>'},TMHR:{regexp:/^( {0,3}(\*[ \t]*\*[ \t]*\*[ \t*]*)|(-[ \t]*-[ \t]*-[ \t-]*)|(_[ \t]*_[ \t]*_[ \t_]*))$/,replacement:'<span class="TMMark TMMark_TMHR">$0</span>'},TMUL:{regexp:/^( {0,3}[+*-] {1,4})(.*)$/,replacement:'<span class="TMMark TMMark_TMUL">$1</span>$$2'},TMOL:{regexp:/^( {0,3}\d{1,9}[.)] {1,4})(.*)$/,replacement:'<span class="TMMark TMMark_TMOL">$1</span>$$2'},TMIndentedCode:{regexp:/^( {4}|\t)(.*)$/,replacement:'<span class="TMMark TMMark_TMIndentedCode">$1</span>$2'},TMLinkReferenceDefinition:{regexp:/^( {0,3}\[\s*)([^\s\]](?:[^\]]|\\\])*?)(\s*\]:\s*)((?:[^\s<>]+)|(?:<(?:[^<>\\]|\\.)*>))?(\s*)((?:\((?:[^()\\]|\\.)*\))|(?:"(?:[^"\\]|\\.)*")|(?:'(?:[^'\\]|\\.)*'))?(\s*)$/,replacement:'<span class="TMMark TMMark_TMLinkReferenceDefinition">$1</span><span class="TMLinkLabel TMLinkLabel_Definition">$2</span><span class="TMMark TMMark_TMLinkReferenceDefinition">$3</span><span class="TMLinkDestination">$4</span>$5<span class="TMLinkTitle">$6</span>$7',labelPlaceholder:2}};var Fn=[{start:/^ {0,3}<(?:script|pre|style)(?:\s|>|$)/i,end:/(?:<\/script>|<\/pre>|<\/style>)/i,paraInterrupt:!0},{start:/^ {0,3}<!--/,end:/-->/,paraInterrupt:!0},{start:/^ {0,3}<\?/,end:/\?>/,paraInterrupt:!0},{start:/^ {0,3}<![A-Z]/,end:/>/,paraInterrupt:!0},{start:/^ {0,3}<!\[CDATA\[/,end:/\]\]>/,paraInterrupt:!0},{start:/^ {0,3}(?:<|<\/)(?:KnownTag)(?:\s|>|\/>|$)/i,end:!1,paraInterrupt:!0},{start:/^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\s*$/,end:!1,paraInterrupt:!1}],yn={escape:{regexp:/^\\(ASCIIPunctuation)/,replacement:'<span class="TMMark TMMark_TMEscape">\\</span>$1'},code:{regexp:/^(`+)((?:[^`])|(?:[^`].*?[^`]))(\1)/,replacement:'<span class="TMMark TMMark_TMCode">$1</span><code class="TMCode">$2</code><span class="TMMark TMMark_TMCode">$3</span>'},autolink:{regexp:/^<((?:Scheme:[^\s<>]*)|(?:Email))>/,replacement:'<span class="TMMark TMMark_TMAutolink">&lt;</span><span class="TMAutolink">$1</span><span class="TMMark TMMark_TMAutolink">&gt;</span>'},html:{regexp:/^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,replacement:'<span class="TMHTML">$1</span>'},linkOpen:{regexp:/^\[/,replacement:""},imageOpen:{regexp:/^!\[/,replacement:""},linkLabel:{regexp:/^(\[\s*)([^\]]*?)(\s*\])/,replacement:"",labelPlaceholder:2},default:{regexp:/^(.|(?:NotTriggerChar+))/,replacement:"$1"}};const Cn=new RegExp(Object.keys(fn).join("|")),kn=[...Object.keys(yn)];for(let e of kn){let t=yn[e].regexp.source;for(;t.match(Cn);)t=t.replace(Cn,(e=>fn[e].source));yn[e].regexp=new RegExp(t,yn[e].regexp.flags)}for(let e of Fn){let t=e.start.source;for(;t.match(Cn);)t=t.replace(Cn,(e=>fn[e].source));e.start=new RegExp(t,e.start.flags)}function En(e){return(e||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}const bn={bold:{type:"inline",className:"TMStrong",set:{pre:"**",post:"**"},unset:{prePattern:/(?:\*\*|__)$/,postPattern:/^(?:\*\*|__)/}},italic:{type:"inline",className:"TMEm",set:{pre:"*",post:"*"},unset:{prePattern:/(?:\*|_)$/,postPattern:/^(?:\*|_)/}},code:{type:"inline",className:"TMCode",set:{pre:"`",post:"`"},unset:{prePattern:/`+$/,postPattern:/^`+/}},strikethrough:{type:"inline",className:"TMStrikethrough",set:{pre:"~~",post:"~~"},unset:{prePattern:/~~$/,postPattern:/^~~/}},h1:{type:"line",className:"TMH1",set:{pattern:/^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\-*+])\s+)?)(.*)$/,replacement:"# $2"},unset:{pattern:/^( {0,3}#\s+)(.*?)((?:\s+#+\s*)?)$/,replacement:"$2"}},h2:{type:"line",className:"TMH2",set:{pattern:/^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\-*+])\s+)?)(.*)$/,replacement:"## $2"},unset:{pattern:/^( {0,3}##\s+)(.*?)((?:\s+#+\s*)?)$/,replacement:"$2"}},h3:{type:"line",className:"TMH3",set:{pattern:/^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\-*+])\s+)?)(.*)$/,replacement:"### $2"},unset:{pattern:/^( {0,3}###\s+)(.*?)((?:\s+#+\s*)?)$/,replacement:"$2"}},h4:{type:"line",className:"TMH4",set:{pattern:/^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\-*+])\s+)?)(.*)$/,replacement:"#### $2"},unset:{pattern:/^( {0,3}####\s+)(.*?)((?:\s+#+\s*)?)$/,replacement:"$2"}},h5:{type:"line",className:"TMH5",set:{pattern:/^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\-*+])\s+)?)(.*)$/,replacement:"##### $2"},unset:{pattern:/^( {0,3}#####\s+)(.*?)((?:\s+#+\s*)?)$/,replacement:"$2"}},h6:{type:"line",className:"TMH6",set:{pattern:/^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\-*+])\s+)?)(.*)$/,replacement:"###### $2"},unset:{pattern:/^( {0,3}######\s+)(.*?)((?:\s+#+\s*)?)$/,replacement:"$2"}},ul:{type:"line",className:"TMUL",set:{pattern:/^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\-*+])\s+)?)(.*)$/,replacement:"- $2"},unset:{pattern:/^( {0,3}[+*-] {1,4})(.*)$/,replacement:"$2"}},ol:{type:"line",className:"TMOL",set:{pattern:/^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\-*+])\s+)?)(.*)$/,replacement:"$#. $2"},unset:{pattern:/^( {0,3}\d{1,9}[.)] {1,4})(.*)$/,replacement:"$2"}},blockquote:{type:"line",className:"TMBlockquote",set:{pattern:/^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\-*+])\s+)?)(.*)$/,replacement:"> $2"},unset:{pattern:/^( {0,3}>[ ]?)(.*)$/,replacement:"$2"}}};e.CommandBar=class{constructor(e){this.e=null,this.editor=null,this.commands=[],this.buttons={},this.state={},this.hotkeys=[];let t=e.element;t&&!t.tagName&&(t=document.getElementById(e.element)),t||(t=document.body),this.createCommandBarElement(t,e.commands||["bold","italic","strikethrough","|","code","|","h1","h2","|","ul","ol","|","blockquote","hr","|","insertLink","insertImage"]),document.addEventListener("keydown",(e=>this.handleKeydown(e))),e.editor&&this.setEditor(e.editor)}createCommandBarElement(e,t){this.e=document.createElement("div"),this.e.className="TMCommandBar";for(let e of t)if("|"==e){let e=document.createElement("div");e.className="TMCommandDivider",this.e.appendChild(e)}else{let t;if("string"==typeof e){if(!s[e])continue;t=e,this.commands[t]=s[t]}else{if("object"!=typeof e||!e.name)continue;t=e.name,this.commands[t]={},s[t]&&Object.assign(this.commands[t],s[t]),Object.assign(this.commands[t],e)}let i=this.commands[t].title||t;if(this.commands[t].hotkey){const e=this.commands[t].hotkey.split("-");let s=[],r=[];for(let t=0;t<e.length-1;t++)switch(e[t]){case"Ctrl":s.push("ctrlKey"),r.push("Ctrl");break;case"Cmd":s.push("metaKey"),r.push("⌘");break;case"Alt":s.push("altKey"),r.push("Alt");break;case"Option":s.push("altKey"),r.push("⌥");break;case"Win":s.push("metaKey"),r.push("⊞ Win");break;case"Shift":s.push("shiftKey"),r.push("⇧");break;case"Mod":n?(s.push("metaKey"),r.push("⌘")):(s.push("ctrlKey"),r.push("Ctrl"));break;case"Mod2":s.push("altKey"),n?r.push("⌥"):r.push("Alt")}r.push(e[e.length-1]);let a={modifiers:s,command:t};e[e.length-1].match(/^[0-9]$/)?a.code=`Digit${e[e.length-1]}`:a.key=e[e.length-1].toLowerCase(),this.hotkeys.push(a),i=i.concat(` (${r.join("+")})`)}this.buttons[t]=document.createElement("div"),this.buttons[t].className="TMCommandButton TMCommandButton_Disabled",this.buttons[t].title=i,this.buttons[t].innerHTML=this.commands[t].innerHTML,this.buttons[t].addEventListener("mousedown",(e=>this.handleClick(t,e))),this.e.appendChild(this.buttons[t])}e.appendChild(this.e)}handleClick(e,t){this.editor&&(t.preventDefault(),"string"==typeof this.commands[e].action?!1===this.state[e]?this.editor.setCommandState(e,!0):this.editor.setCommandState(e,!1):"function"==typeof this.commands[e].action&&this.commands[e].action(this.editor))}setEditor(e){this.editor=e,e.addEventListener("selection",(e=>this.handleSelection(e)))}handleSelection(e){if(e.commandState)for(let t in this.commands)void 0===e.commandState[t]?this.commands[t].enabled?this.state[t]=this.commands[t].enabled(this.editor,e.focus,e.anchor):this.state[t]=!e.focus&&null:this.state[t]=e.commandState[t],!0===this.state[t]?this.buttons[t].className="TMCommandButton TMCommandButton_Active":!1===this.state[t]?this.buttons[t].className="TMCommandButton TMCommandButton_Inactive":this.buttons[t].className="TMCommandButton TMCommandButton_Disabled"}handleKeydown(e){e:for(let t of this.hotkeys)if(t.key&&e.key.toLowerCase()==t.key||t.code&&e.code==t.code){for(let n of t.modifiers)if(!e[n])continue e;return void this.handleClick(t.command,e)}}},e.Editor=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.e=null,this.textarea=null,this.lines=[],this.lineElements=[],this.lineTypes=[],this.lineCaptures=[],this.lineReplacements=[],this.linkLabels=[],this.lineDirty=[],this.lastCommandState=null,this.listeners={change:[],selection:[],drop:[]};let t=e.element;this.textarea=e.textarea,this.textarea&&(this.textarea.tagName||(this.textarea=document.getElementById(this.textarea)),t||(t=this.textarea)),t&&!t.tagName&&(t=document.getElementById(e.element)),t||(t=document.getElementsByTagName("body")[0]),"TEXTAREA"==t.tagName&&(this.textarea=t,t=this.textarea.parentNode),this.textarea&&(this.textarea.style.display="none"),this.createEditorElement(t,e),this.setContent("string"==typeof e.content?e.content:this.textarea?this.textarea.value:"# Hello TinyMDE!\nEdit **here**")}createEditorElement(e,t){t&&void 0!==t.editor?t.editor.tagName?this.e=t.editor:this.e=document.getElementById(t.editor):this.e=document.createElement("div"),this.e.classList.add("TinyMDE"),this.e.contentEditable=!0,this.e.style.whiteSpace="pre-wrap",this.e.style.webkitUserModify="read-write-plaintext-only",void 0===t.editor&&(this.textarea&&this.textarea.parentNode==e&&this.textarea.nextSibling?e.insertBefore(this.e,this.textarea.nextSibling):e.appendChild(this.e)),this.e.addEventListener("input",(e=>this.handleInputEvent(e))),this.e.addEventListener("compositionend",(e=>this.handleInputEvent(e))),document.addEventListener("selectionchange",(e=>this.handleSelectionChangeEvent(e))),this.e.addEventListener("paste",(e=>this.handlePaste(e))),this.e.addEventListener("drop",(e=>this.handleDrop(e))),this.lineElements=this.e.childNodes}setContent(e){for(;this.e.firstChild;)this.e.removeChild(this.e.firstChild);this.lines=e.split(/(?:\r\n|\r|\n)/),this.lineDirty=[];for(let e=0;e<this.lines.length;e++){let e=document.createElement("div");this.e.appendChild(e),this.lineDirty.push(!0)}this.lineTypes=new Array(this.lines.length),this.updateFormatting(),this.fireChange()}getContent(){return this.lines.join("\n")}updateFormatting(){this.updateLineTypes(),this.updateLinkLabels(),this.applyLineTypes()}updateLinkLabels(){this.linkLabels=[];for(let e=0;e<this.lines.length;e++)"TMLinkReferenceDefinition"==this.lineTypes[e]&&this.linkLabels.push(this.lineCaptures[e][Dn.TMLinkReferenceDefinition.labelPlaceholder])}replace(e,t){return e.replace(/(\${1,2})([0-9])/g,((e,n,s)=>"$"==n?En(t[s]):`<span class="TMInlineFormatted">${this.processInlineStyles(t[s])}</span>`))}applyLineTypes(){for(let e=0;e<this.lines.length;e++){if(this.lineDirty[e]){let t=this.replace(this.lineReplacements[e],this.lineCaptures[e]);this.lineElements[e].className=this.lineTypes[e],this.lineElements[e].removeAttribute("style"),this.lineElements[e].innerHTML=""==t?"<br />":t}this.lineElements[e].dataset.lineNum=e}}updateLineTypes(){let e=!1,t=0,n=!1;for(let s=0;s<this.lines.length;s++){let i="TMPara",r=[this.lines[s]],a="$$0";if("TMCodeFenceBacktickOpen"==e){let n=Dn.TMCodeFenceBacktickClose.regexp.exec(this.lines[s]);n&&n.groups.seq.length>=t?(i="TMCodeFenceBacktickClose",a=Dn.TMCodeFenceBacktickClose.replacement,r=n,e=!1):(i="TMFencedCodeBacktick",a='<span class="TMFencedCode">$0<br /></span>',r=[this.lines[s]])}else if("TMCodeFenceTildeOpen"==e){let n=Dn.TMCodeFenceTildeClose.regexp.exec(this.lines[s]);n&&n.groups.seq.length>=t?(i="TMCodeFenceTildeClose",a=Dn.TMCodeFenceTildeClose.replacement,r=n,e=!1):(i="TMFencedCodeTilde",a='<span class="TMFencedCode">$0<br /></span>',r=[this.lines[s]])}if("TMPara"==i&&!1===n)for(let e of Fn)if(this.lines[s].match(e.start)&&(e.paraInterrupt||0==s||"TMPara"!=this.lineTypes[s-1]&&"TMUL"!=this.lineTypes[s-1]&&"TMOL"!=this.lineTypes[s-1]&&"TMBlockquote"!=this.lineTypes[s-1])){n=e;break}if(!1!==n&&(i="TMHTMLBlock",a='<span class="TMHTMLContent">$0<br /></span>',r=[this.lines[s]],n.end?this.lines[s].match(n.end)&&(n=!1):(s==this.lines.length-1||this.lines[s+1].match(Dn.TMBlankLine.regexp))&&(n=!1)),"TMPara"==i)for(let e in Dn)if(Dn[e].regexp){let t=Dn[e].regexp.exec(this.lines[s]);if(t){i=e,a=Dn[e].replacement,r=t;break}}if("TMCodeFenceBacktickOpen"!=i&&"TMCodeFenceTildeOpen"!=i||(e=i,t=r.groups.seq.length),"TMIndentedCode"!=i&&"TMLinkReferenceDefinition"!=i||!(s>0)||"TMPara"!=this.lineTypes[s-1]&&"TMUL"!=this.lineTypes[s-1]&&"TMOL"!=this.lineTypes[s-1]&&"TMBlockquote"!=this.lineTypes[s-1]||(i="TMPara",r=[this.lines[s]],a="$$0"),"TMSetextH2Marker"==i){let e=Dn.TMUL.regexp.exec(this.lines[s]);e&&(i="TMUL",a=Dn.TMUL.replacement,r=e)}if("TMSetextH1Marker"==i||"TMSetextH2Marker"==i)if(0==s||"TMPara"!=this.lineTypes[s-1]){let e=Dn.TMHR.regexp.exec(this.lines[s]);e?(i="TMHR",r=e,a=Dn.TMHR.replacement):(i="TMPara",r=[this.lines[s]],a="$$0")}else{let e=s-1;const t="TMSetextH1Marker"==i?"TMSetextH1":"TMSetextH2";do{this.lineTypes[t]!=t&&(this.lineTypes[e]=t,this.lineDirty[t]=!0),this.lineReplacements[e]="$$0",this.lineCaptures[e]=[this.lines[e]],e--}while(e>=0&&"TMPara"==this.lineTypes[e])}this.lineTypes[s]!=i&&(this.lineTypes[s]=i,this.lineDirty[s]=!0),this.lineReplacements[s]=a,this.lineCaptures[s]=r}}updateLineContentsAndFormatting(){this.clearDirtyFlag(),this.updateLineContents(),this.updateFormatting()}parseLinkOrImage(e,t){let n=t?2:1,s=e.substr(0,n),i=t?"TMImage":"TMLink",r=n,a=1,l=!1,o=!1,u=[],c=[];e:for(;r<e.length&&!1===l;){let s=e.substr(r);for(let e of["escape","code","autolink","html"]){let t=yn[e].regexp.exec(s);if(t){r+=t[0].length;continue e}}if(s.match(yn.imageOpen.regexp))a++,r+=2;else if(s.match(yn.linkOpen.regexp)){if(a++,!t&&this.parseLinkOrImage(s,!1))return!1;r+=1}else s.match(/^\]/)&&(a--,0==a)?(l=e.substr(n,r-n),r++):r++}if(!1===l)return!1;let h=r<e.length?e.substr(r,1):"";if("["==h){let t=e.substr(r),n=yn.linkLabel.regexp.exec(t);if(!n)return!1;r+=n[0].length,u.push(n[1],n[2],n[3]),o=n[yn.linkLabel.labelPlaceholder]?n[yn.linkLabel.labelPlaceholder]:l.trim()}else if("("!=h)o=l.trim();else{r++;let t=1;for(;r<e.length&&t>0;){let n=e.substr(r),s=/^\s+/.exec(n);if(s){switch(c.length){case 0:case 1:c.push(s[0]);break;case 2:if(c[0].match(/</))c[1]=c[1].concat(s[0]);else{if(1!=t)return!1;c.push(""),c.push(s[0])}break;case 3:c.push(s[0]);break;case 4:return!1;case 5:c.push("");case 6:c[5]=c[5].concat(s[0]);break;case 7:c[6]=c[6].concat(s[0]);break;default:return!1}r+=s[0].length}else if(s=yn.escape.regexp.exec(n),s){switch(c.length){case 0:c.push("");case 1:c.push(s[0]);break;case 2:c[1]=c[1].concat(s[0]);break;case 3:case 4:return!1;case 5:c.push("");case 6:c[5]=c[5].concat(s[0]);break;default:return!1}r+=s[0].length}else if(c.length<2&&n.match(/^</))0==c.length&&c.push(""),c[0]=c[0].concat("<"),r++;else if(1!=c.length&&2!=c.length||!n.match(/^>/))if(s=/^["']/.exec(n),!s||0!=c.length&&1!=c.length&&4!=c.length)if(!s||5!=c.length&&6!=c.length||c[4]!=s[0])if(n.match(/^\(/)){switch(c.length){case 0:c.push("");case 1:c.push("");case 2:c[1]=c[1].concat("("),c[0].match(/<$/)||t++;break;case 3:c.push("");case 4:c.push("(");break;case 5:c.push("");case 6:if("("==c[4])return!1;c[5]=c[5].concat("(");break;default:return!1}r++}else if(n.match(/^\)/)){if(c.length<=2){for(;c.length<2;)c.push("");c[0].match(/<$/)||t--,t>0&&(c[1]=c[1].concat(")"))}else 5==c.length||6==c.length?"("==c[4]?(5==c.length&&c.push(""),c.push(")")):5==c.length?c.push(")"):c[5]=c[5].concat(")"):t--;if(0==t)for(;c.length<7;)c.push("");r++}else{if(s=/^./.exec(n),!s)throw"Infinite loop";switch(c.length){case 0:c.push("");case 1:c.push(s[0]);break;case 2:c[1]=c[1].concat(s[0]);break;case 3:case 4:return!1;case 5:c.push("");case 6:c[5]=c[5].concat(s[0]);break;default:return!1}r+=s[0].length}else 5==c.length&&c.push(""),c.push(s[0]),r++;else{for(;c.length<4;)c.push("");c.push(s[0]),r++}else 1==c.length&&c.push(""),c.push(">"),r++}if(t>0)return!1}if(!1!==o){let e=!1;for(let t of this.linkLabels)if(t==o){e=!0;break}let t=e?"TMLinkLabel TMLinkLabel_Valid":"TMLinkLabel TMLinkLabel_Invalid",n=`<span class="TMMark TMMark_${i}">${s}</span><span class="${i} ${u.length<3||!u[1]?t:""}">${this.processInlineStyles(l)}</span><span class="TMMark TMMark_${i}">]</span>`;return u.length>=3&&(n=n.concat(`<span class="TMMark TMMark_${i}">${u[0]}</span>`,`<span class="${t}">${u[1]}</span>`,`<span class="TMMark TMMark_${i}">${u[2]}</span>`)),{output:n,charCount:r}}if(c){for(;c.length<7;)c.push("");return{output:`<span class="TMMark TMMark_${i}">${s}</span><span class="${i}">${this.processInlineStyles(l)}</span><span class="TMMark TMMark_${i}">](${c[0]}</span><span class="${i}Destination">${c[1]}</span><span class="TMMark TMMark_${i}">${c[2]}${c[3]}${c[4]}</span><span class="${i}Title">${c[5]}</span><span class="TMMark TMMark_${i}">${c[6]})</span>`,charCount:r}}return!1}processInlineStyles(e){let t="",n=[],s=0,i=e;e:for(;i;){for(let e of["escape","code","autolink","html"]){let n=yn[e].regexp.exec(i);if(n){i=i.substr(n[0].length),s+=n[0].length,t+=yn[e].replacement.replace(/\$([1-9])/g,((e,t)=>En(n[t])));continue e}}let r=i.match(yn.linkOpen.regexp),a=i.match(yn.imageOpen.regexp);if(a||r){let e=this.parseLinkOrImage(i,a);if(e){t=`${t}${e.output}`,i=i.substr(e.charCount),s+=e.charCount;continue e}}let l=/(^\*+)|(^_+)/.exec(i);if(l){let r=l[0].length;const a=l[0],o=l[0][0];i=i.substr(l[0].length);const u=s>0?e.substr(0,s):" ",c=s+l[0].length<e.length?i:" ",h=c.match(Mn),p=u.match(Tn),d=c.match(/^\s/),g=u.match(/\s$/);let m=!(d||h&&!g&&!p),f=!(g||p&&!d&&!h);if("_"==o&&m&&f&&(m=p,f=h),f){let e=n.length-1;for(;r&&e>=0;)if(n[e].delimiter==o){for(;e<n.length-1;){const e=n.pop();t=`${e.output}${e.delimString.substr(0,e.count)}${t}`}if(r>=2&&n[e].count>=2?(t=`<span class="TMMark">${o}${o}</span><strong class="TMStrong">${t}</strong><span class="TMMark">${o}${o}</span>`,r-=2,n[e].count-=2):(t=`<span class="TMMark">${o}</span><em class="TMEm">${t}</em><span class="TMMark">${o}</span>`,r-=1,n[e].count-=1),0==n[e].count){t=`${n.pop().output}${t}`,e--}}else e--}r&&m&&(n.push({delimiter:o,delimString:a,count:r,output:t}),t="",r=0),r&&(t=`${t}${a.substr(0,r)}`),s+=l[0].length}else if(l=/^~~/.exec(i),l){let e=!1,r=n.length-1;for(;!e&&r>=0;)if("~"==n[r].delimiter){for(;r<n.length-1;){const e=n.pop();t=`${e.output}${e.delimString.substr(0,e.count)}${t}`}t=`<span class="TMMark">~~</span><del class="TMStrikethrough">${t}</del><span class="TMMark">~~</span>`,t=`${n.pop().output}${t}`,e=!0}else r--;e||(n.push({delimiter:"~",delimString:"~~",count:2,output:t}),t=""),s+=l[0].length,i=i.substr(l[0].length)}else{if(l=yn.default.regexp.exec(i),!l)throw"Infinite loop!";i=i.substr(l[0].length),s+=l[0].length,t+=yn.default.replacement.replace(/\$([1-9])/g,((e,t)=>En(l[t])))}}for(;n.length;){const e=n.pop();t=`${e.output}${e.delimString.substr(0,e.count)}${t}`}return t}clearDirtyFlag(){this.lineDirty=new Array(this.lines.length);for(let e=0;e<this.lineDirty.length;e++)this.lineDirty[e]=!1}updateLineContents(){let e=this.e.childElementCount-this.lines.length;if(e){let t=0;for(;t<=this.lines.length&&t<=this.lineElements.length&&this.lineElements[t]&&this.lines[t]==this.lineElements[t].textContent&&this.lineTypes[t]==this.lineElements[t].className;)t++;let n=-1;for(;-n<this.lines.length&&-n<this.lineElements.length&&this.lines[this.lines.length+n]==this.lineElements[this.lineElements.length+n].textContent&&this.lineTypes[this.lines.length+n]==this.lineElements[this.lineElements.length+n].className;)n--;let s=this.lines.length+n+1-t;s<-e&&(s=-e),s<0&&(s=0);let i=[];for(let n=0;n<s+e;n++)i.push(this.lineElements[t+n].textContent);this.spliceLines(t,s,i,!1)}else for(let e=0;e<this.lineElements.length;e++){let t=this.lineElements[e],n=t.textContent;this.lines[e]===n&&this.lineTypes[e]===t.className||(this.lines[e]=n,this.lineTypes[e]=t.className,this.lineDirty[e]=!0)}}processNewParagraph(e){if(!e)return;this.updateLineContents();let t=!1,n=e.col>0?e.row:e.row-1;switch(this.lineTypes[n]){case"TMUL":t="TMUL";break;case"TMOL":t="TMOL";break;case"TMIndentedCode":t="TMIndentedCode"}let s=this.lines[e.row].replace(/\n\n$/,"\n").split(/(?:\r\n|\n|\r)/);if(s.length>1&&(this.spliceLines(e.row,1,s,!0),e.row++,e.col=0),t){let n=Dn[t].regexp.exec(this.lines[e.row-1]);n&&(n[2]?("TMOL"==t&&(n[1]=n[1].replace(/\d{1,9}/,(e=>parseInt(e[0])+1))),this.lines[e.row]=`${n[1]}${this.lines[e.row]}`,this.lineDirty[e.row]=!0,e.col=n[1].length):(this.lines[e.row-1]="",this.lineDirty[e.row-1]=!0))}this.updateFormatting()}getSelection(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=window.getSelection();let n=e?t.anchorNode:t.focusNode;if(!n)return null;let s=e?t.anchorOffset:t.focusOffset;if(n==this.e)return s<this.lines.length?{row:s,col:0}:{row:s-1,col:this.lines[s-1].length};let i=this.computeColumn(n,s);if(null===i)return null;let r=n;for(;r.parentElement!=this.e;)r=r.parentElement;let a=0;if(!r.dataset||!r.dataset.lineNum||r.previousSibling&&r.previousSibling.dataset.lineNum==r.dataset.lineNum)for(;r.previousSibling;)a++,r=r.previousSibling;else a=parseInt(r.dataset.lineNum);return{row:a,col:i,node:n}}computeColumn(e,t){let n,s=e;for(;s&&s.parentNode!=this.e;)s=s.parentNode;if(null==s)return null;for(e.nodeType===Node.TEXT_NODE||0===t?(n=t,s=e):t>0&&(s=e.childNodes[t-1],n=s.textContent.length);s.parentNode!=this.e;)s.previousSibling?(s=s.previousSibling,n+=s.textContent.length):s=s.parentNode;return n}computeNodeAndOffset(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e>=this.lineElements.length&&(e=this.lineElements.length-1,t=this.lines[e].length),t>this.lines[e].length&&(t=this.lines[e].length);const s=this.lineElements[e];let i=s.firstChild,r=!1,a={node:s.firstChild?s.firstChild:s,offset:0};for(;i!=s;){if(!r&&i.nodeType===Node.TEXT_NODE)if(i.nodeValue.length>=t){if(!n||i.nodeValue.length!=t)return{node:i,offset:t};a={node:i,offset:t},t=0}else t-=i.nodeValue.length;!r&&i.firstChild?i=i.firstChild:i.nextSibling?(r=!1,i=i.nextSibling):(r=!0,i=i.parentNode)}return a}setSelection(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!e)return;let n=document.createRange(),{node:s,offset:i}=this.computeNodeAndOffset(e.row,e.col,t&&t.row==e.row&&t.col>e.col),r=null,a=null;if(t&&(t.row!=e.row||t.col!=e.col)){let{node:n,offset:s}=this.computeNodeAndOffset(t.row,t.col,e.row==t.row&&e.col>t.col);r=n,a=s}r?n.setStart(r,a):n.setStart(s,i),n.setEnd(s,i);let l=window.getSelection();l.removeAllRanges(),l.addRange(n)}handleInputEvent(e){if("insertCompositionText"==e.inputType)return;let t=this.getSelection();"insertParagraph"!=e.inputType&&"insertLineBreak"!=e.inputType||!t?(this.e.firstChild?this.fixNodeHierarchy():this.e.innerHTML='<div class="TMBlankLine"><br></div>',this.updateLineContentsAndFormatting()):(this.clearDirtyFlag(),this.processNewParagraph(t)),t&&this.setSelection(t),this.fireChange()}fixNodeHierarchy(){const e=Array.from(this.e.childNodes),t=function(e){const t=e.parentElement,n=e.nextSibling;t.removeChild(e);for(var s=arguments.length,i=new Array(s>1?s-1:0),r=1;r<s;r++)i[r-1]=arguments[r];i.forEach((e=>n?t.insertBefore(e,n):t.appendChild(e)))};e.forEach((e=>{if(e.nodeType!==Node.ELEMENT_NODE||"DIV"!==e.tagName){const n=document.createElement("div");t(e,n),n.appendChild(e)}else if(0==e.childNodes.length)e.appendChild(document.createElement("br"));else{const n=Array.from(e.childNodes);if(n.some((e=>e.nodeType===Node.ELEMENT_NODE&&"DIV"===e.tagName)))return t(e,n)}}))}handleDrop(e){e.preventDefault(),this.fireDrop(e.dataTransfer)}handleSelectionChangeEvent(){this.fireSelection()}spliceLines(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(s)for(let n=0;n<t;n++)this.e.removeChild(this.e.childNodes[e]);let i=[],r=[];for(let t=0;t<n.length;t++)i.push(""),r.push(!0),s&&(this.e.childNodes[e]?this.e.insertBefore(document.createElement("div"),this.e.childNodes[e]):this.e.appendChild(document.createElement("div")));this.lines.splice(e,t,...n),this.lineTypes.splice(e,t,...i),this.lineDirty.splice(e,t,...r)}handlePaste(e){e.preventDefault();let t=(e.originalEvent||e).clipboardData.getData("text/plain");this.paste(t)}paste(e){let t,n,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;s||(s=this.getSelection(!0)),i||(i=this.getSelection(!1)),i||(i={row:this.lines.length-1,col:this.lines[this.lines.length-1].length}),s||(s=i),s.row<i.row||s.row==i.row&&s.col<=i.col?(t=s,n=i):(t=i,n=s);let r=e.split(/(?:\r\n|\r|\n)/),a=this.lines[t.row].substr(0,t.col),l=this.lines[n.row].substr(n.col);r[0]=a.concat(r[0]);let o=r[r.length-1].length;r[r.length-1]=r[r.length-1].concat(l),this.spliceLines(t.row,1+n.row-t.row,r),i.row=t.row+r.length-1,i.col=o,this.updateFormatting(),this.setSelection(i),this.fireChange()}computeCommonAncestor(e,t){if(!e||!t)return null;if(e==t)return e;const n=e=>{let t=[];for(;e;)t.unshift(e),e=e.parentNode;return t},s=n(e),i=n(t);if(s[0]!=i[0])return null;let r;for(r=0;s[r]==i[r];r++);return s[r-1]}computeEnclosingMarkupNode(e,t,n){let s=null;if(!e)return null;if(t){if(e.row!=t.row)return null;s=this.computeCommonAncestor(e.node,t.node)}else s=e.node;if(!s)return null;for(;s!=this.e;){if(s.className&&s.className.includes(n))return s;s=s.parentNode}return null}getCommandState(){let e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i={};if(n||(n=this.getSelection(!1)),s||(s=this.getSelection(!0)),!n){for(let e in bn)i[e]=null;return i}s||(s=n),s.row<n.row||s.row==n.row&&s.col<n.col?(e=s,t=n):(e=n,t=s),t.row>e.row&&0==t.col&&(t.row--,t.col=this.lines[t.row].length);for(let r in bn)if("inline"==bn[r].type&&(n&&n.row==s.row&&this.isInlineFormattingAllowed(n,s)?i[r]=!!this.computeEnclosingMarkupNode(n,s,bn[r].className)||n.col==s.col&&!!this.lines[n.row].substr(0,n.col).match(bn[r].unset.prePattern)&&!!this.lines[n.row].substr(n.col).match(bn[r].unset.postPattern):i[r]=null),"line"==bn[r].type)if(n){let n=this.lineTypes[e.row]==bn[r].className;for(let s=e.row;s<=t.row;s++)if(this.lineTypes[s]==bn[r].className!=n){n=null;break}i[r]=n}else i[r]=null;return i}setCommandState(e,t){if("inline"==bn[e].type){let t=this.getSelection(!0),n=this.getSelection(!1);if(t||(t=n),!t)return;if(t.row!=n.row)return;if(!this.isInlineFormattingAllowed(n,t))return;let s=this.computeEnclosingMarkupNode(n,t,bn[e].className);if(this.clearDirtyFlag(),s){this.lineDirty[n.row]=!0;const i=this.computeColumn(s,0),r=s.textContent.length,a=this.lines[n.row].substr(0,i).replace(bn[e].unset.prePattern,""),l=this.lines[n.row].substr(i,r),o=this.lines[n.row].substr(i+r).replace(bn[e].unset.postPattern,"");this.lines[n.row]=a.concat(l,o),t.col=a.length,n.col=t.col+r,this.updateFormatting(),this.setSelection(n,t),this.fireChange()}else if(n.col==t.col&&this.lines[n.row].substr(0,n.col).match(bn[e].unset.prePattern)&&this.lines[n.row].substr(n.col).match(bn[e].unset.postPattern)){this.lineDirty[n.row]=!0;const s=this.lines[n.row].substr(0,n.col).replace(bn[e].unset.prePattern,""),i=this.lines[n.row].substr(n.col).replace(bn[e].unset.postPattern,"");this.lines[n.row]=s.concat(i),n.col=t.col=s.length,this.updateFormatting(),this.setSelection(n,t),this.fireChange()}else{let{startCol:s,endCol:i}=n.col<t.col?{startCol:n.col,endCol:t.col}:{startCol:t.col,endCol:n.col},r=this.lines[n.row].substr(s,i-s).match(/^(?<leading>\s*).*\S(?<trailing>\s*)$/);r&&(s+=r.groups.leading.length,i-=r.groups.trailing.length),n.col=s,t.col=i,this.wrapSelection(bn[e].set.pre,bn[e].set.post,n,t),this.fireChange()}}else if("line"==bn[e].type){let n=this.getSelection(!0),s=this.getSelection(!1);if(n||(n=s),!s)return;this.clearDirtyFlag();let i=n.row>s.row?s:n,r=n.row>s.row?n:s;r.row>i.row&&0==r.col&&r.row--;for(let n=i.row;n<=r.row;n++)t&&this.lineTypes[n]!=bn[e].className&&(this.lines[n]=this.lines[n].replace(bn[e].set.pattern,bn[e].set.replacement.replace("$#",n-i.row+1)),this.lineDirty[n]=!0),t||this.lineTypes[n]!=bn[e].className||(this.lines[n]=this.lines[n].replace(bn[e].unset.pattern,bn[e].unset.replacement),this.lineDirty[n]=!0);this.updateFormatting(),this.setSelection({row:r.row,col:this.lines[r.row].length},{row:i.row,col:0}),this.fireChange()}}isInlineFormattingAllowed(){const e=window.getSelection();if(!e||!e.focusNode||!e.anchorNode)return!1;if(e.isCollapsed&&3==e.focusNode.nodeType&&e.focusOffset==e.focusNode.nodeValue.length){let t;for(t=e.focusNode;t&&null==t.nextSibling;t=t.parentNode);if(t&&t.nextSibling.className&&t.nextSibling.className.includes("TMInlineFormatted"))return!0}let t=this.computeCommonAncestor(e.focusNode,e.anchorNode);if(!t)return!1;for(;t&&t!=this.e;){if(t.className&&"function"==typeof t.className.includes&&(t.className.includes("TMInlineFormatted")||t.className.includes("TMBlankLine")))return!0;t=t.parentNode}return!1}wrapSelection(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;if(n||(n=this.getSelection(!1)),s||(s=this.getSelection(!0)),!n||!s||n.row!=s.row)return;this.lineDirty[n.row]=!0;const i=n.col<s.col?n.col:s.col,r=n.col<s.col?s.col:n.col,a=this.lines[n.row].substr(0,i).concat(e),l=r==i?"":this.lines[n.row].substr(i,r-i),o=t.concat(this.lines[n.row].substr(r));this.lines[n.row]=a.concat(l,o),s.col=a.length,n.col=s.col+l.length,this.updateFormatting(),this.setSelection(n,s)}toggleCommandState(e){this.lastCommandState||(this.lastCommandState=this.getCommandState()),this.setCommandState(e,!this.lastCommandState[e])}fireChange(){if(!this.textarea&&!this.listeners.change.length)return;const e=this.getContent();this.textarea&&(this.textarea.value=e);for(let t of this.listeners.change)t({content:e,linesDirty:this.linesDirty})}fireSelection(){if(this.listeners.selection&&this.listeners.selection.length){let e=this.getSelection(!1),t=this.getSelection(!0),n=this.getCommandState(e,t);this.lastCommandState?Object.assign(this.lastCommandState,n):this.lastCommandState=Object.assign({},n);for(let n of this.listeners.selection)n({focus:e,anchor:t,commandState:this.lastCommandState})}}fireDrop(e){for(let t of this.listeners.drop)t({dataTransfer:e})}addEventListener(e,t){e.match(/^(?:change|input)$/i)&&this.listeners.change.push(t),e.match(/^(?:selection|selectionchange)$/i)&&this.listeners.selection.push(t),e.match(/^(?:drop)$/i)&&this.listeners.drop.push(t)}}}));
6
+ </script>
@@ -0,0 +1 @@
1
+ export declare function dateTimeListener(id: string): void;
@@ -0,0 +1,14 @@
1
+ function dateTimeListener(id) {
2
+ const lastCheckedDate = document.getElementById(id);
3
+ lastCheckedDate.textContent = new Date(lastCheckedDate.dateTime).toLocaleString(void 0, {
4
+ month: "short",
5
+ day: "numeric",
6
+ year: "numeric",
7
+ hour: "numeric",
8
+ minute: "numeric",
9
+ timeZoneName: "short"
10
+ });
11
+ }
12
+ export {
13
+ dateTimeListener
14
+ };
@@ -0,0 +1 @@
1
+ export declare function dateWithTimeAndZone(date: Date): string;
@@ -0,0 +1,12 @@
1
+ function dateWithTimeAndZone(date) {
2
+ return date.toLocaleString(void 0, {
3
+ month: "numeric",
4
+ day: "numeric",
5
+ year: "numeric",
6
+ hour: "numeric",
7
+ minute: "numeric"
8
+ });
9
+ }
10
+ export {
11
+ dateWithTimeAndZone
12
+ };
@@ -0,0 +1 @@
1
+ export declare function makeClientRoutable(func: any): void;
@@ -0,0 +1,9 @@
1
+ function makeClientRoutable(func) {
2
+ func;
3
+ document.addEventListener("astro:page-load", () => {
4
+ func;
5
+ });
6
+ }
7
+ export {
8
+ makeClientRoutable
9
+ };
@@ -0,0 +1 @@
1
+ export declare function timeAgo(date: Date): string;
@@ -0,0 +1,21 @@
1
+ function timeAgo(date) {
2
+ const now = /* @__PURE__ */ new Date();
3
+ const past = new Date(date);
4
+ const diffInMs = now.getTime() - past.getTime();
5
+ if (Number.isNaN(diffInMs)) {
6
+ return "Invalid date";
7
+ }
8
+ const minutes = Math.floor(diffInMs / (1e3 * 60)) % 60;
9
+ const hours = Math.floor(diffInMs / (1e3 * 60 * 60)) % 24;
10
+ const days = Math.floor(diffInMs / (1e3 * 60 * 60 * 24));
11
+ const parts = [];
12
+ if (days > 0) parts.push(`${days} day${days > 1 ? "s" : ""}`);
13
+ if (days === 0) {
14
+ if (hours > 0) parts.push(`${hours} hour${hours > 1 ? "s" : ""}`);
15
+ if (minutes > 0 || parts.length === 0) parts.push(`${minutes} min${minutes > 1 ? "s" : ""}`);
16
+ }
17
+ return `${parts.join(", ")} ago`;
18
+ }
19
+ export {
20
+ timeAgo
21
+ };
@@ -0,0 +1,52 @@
1
+ ---
2
+ import { getUserData, verifyUserPermissionLevel } from 'studiocms:auth/lib/user';
3
+ import { StudioCMSRoutes } from 'studiocms:lib';
4
+
5
+ interface Props {
6
+ requiredPermission: 'owner' | 'admin' | 'editor' | 'visitor' | 'unknown';
7
+ }
8
+
9
+ const { requiredPermission } = Astro.props;
10
+
11
+ const user = await getUserData(Astro);
12
+
13
+ const isAuthorized = await verifyUserPermissionLevel(user, requiredPermission);
14
+
15
+ const redirectProfile = StudioCMSRoutes.mainLinks.userProfile;
16
+ const redirectLogin = StudioCMSRoutes.authLinks.loginURL;
17
+ ---
18
+ <login-check
19
+ data-is_logged_in={`${user.isLoggedIn}`}
20
+ data-authorized={`${isAuthorized}`}
21
+ data-redirect_profile={redirectProfile}
22
+ data-redirect_login={redirectLogin}
23
+ style="display: hidden;"
24
+ ></login-check>
25
+
26
+ <script>
27
+ if (!customElements.get('login-check')) {
28
+ class LoginCheck extends HTMLElement {
29
+ constructor() {
30
+ super();
31
+ const authorized = this.dataset.authorized;
32
+ const isLoggedIn = this.dataset.is_logged_in;
33
+ const redirectProfile = this.dataset.redirect_profile;
34
+ const redirectLogin = this.dataset.redirect_login;
35
+
36
+ if (isLoggedIn === 'false') {
37
+ window.location.href = redirectLogin!;
38
+ }
39
+
40
+ if (window.location.pathname === redirectProfile) {
41
+ return;
42
+ }
43
+
44
+ if (authorized === 'false') {
45
+ window.location.href = redirectProfile!;
46
+ }
47
+ }
48
+ }
49
+
50
+ customElements.define('login-check', LoginCheck);
51
+ }
52
+ </script>
@@ -0,0 +1,317 @@
1
+ ---
2
+ import { validImages } from 'studiocms:auth/utils/validImages';
3
+ import dashboardGridItems from 'studiocms:components/dashboard-grid-items';
4
+ import { useTranslations } from 'studiocms:i18n';
5
+ import { StudioCMSRoutes } from 'studiocms:lib';
6
+ import studioCMS_SDK_Cache from 'studiocms:sdk/cache';
7
+ import { Card, Divider, Input, Select, Toggle } from 'studiocms:ui/components';
8
+ import LightVsDark from './LightVsDark.astro';
9
+
10
+ const { data } = await studioCMS_SDK_Cache.GET.siteConfig();
11
+
12
+ const ogSelectOptions = validImages.map(({ label, name: value }) => ({ label, value }));
13
+
14
+ const currentLoginPageBg = validImages.find(
15
+ ({ name }) => name === data.loginPageBackground && name !== 'custom'
16
+ );
17
+
18
+ const blobs = validImages.filter(({ name }) => name === 'studiocms-blobs')[0];
19
+ const blocks = validImages.filter(({ name }) => name === 'studiocms-blocks')[0];
20
+ const curves = validImages.filter(({ name }) => name === 'studiocms-curves')[0];
21
+
22
+ const currentlyEnabledGridItems: string[] = (data.gridItems as string[]) ?? [];
23
+
24
+ interface PreGridItem {
25
+ name: string;
26
+ label: string;
27
+ }
28
+
29
+ interface AllGridItems extends PreGridItem {
30
+ enabled: boolean;
31
+ }
32
+
33
+ const allGridItems: PreGridItem[] = dashboardGridItems.map((item) => ({
34
+ name: item.name,
35
+ label: item.header?.title ?? item.name,
36
+ }));
37
+
38
+ const gridItemOptions: AllGridItems[] = allGridItems.map(({ name, label }) => {
39
+ if (currentlyEnabledGridItems.length === 0) {
40
+ return {
41
+ enabled: true,
42
+ name,
43
+ label,
44
+ };
45
+ }
46
+
47
+ return {
48
+ enabled: currentlyEnabledGridItems.includes(name),
49
+ name,
50
+ label,
51
+ };
52
+ });
53
+
54
+ const lang = 'en-us';
55
+ const t = useTranslations(lang, '@studiocms/dashboard:configuration');
56
+ ---
57
+
58
+ <form id="site-config-form" action={StudioCMSRoutes.endpointLinks.config}>
59
+ <div class="form-content">
60
+
61
+ <div class="form-row">
62
+ <Input label={t('input-site-title')} name='site-title' placeholder='My Awesome Website' value={data.title} isRequired />
63
+ <Input label={t('input-site-description')} name='site-description' placeholder='Built with StudioCMS!' value={data.description} isRequired />
64
+ </div>
65
+
66
+ <div class="form-row">
67
+ <Input label={t('input-og-image')} name="default-og-image" placeholder="'https://...' for local, or '/...' for public/ folder" value={data.defaultOgImage} />
68
+ <Input label="Site Icon (Public facing Favicon)" name="site-icon" placeholder="'https://...' for local, or '/...' for public/ folder" value={data.siteIcon} />
69
+ </div>
70
+
71
+ <div class="form-row">
72
+ <Select label={t('select-page-diff-tracking')} name="diff-enabled" defaultValue={`${data.enableDiffs}`} options={[{ label: 'Enabled', value: 'true' }, { label: 'Disabled', value: 'false' }]} fullWidth />
73
+ <Input label={t('input-diff-tracking-limit')} name="diff-per-page" placeholder="10" value={data.diffPerPage} />
74
+ </div>
75
+
76
+ <Divider />
77
+
78
+ <span>
79
+ <t-config-form key="dashboard-grid-label">{t('dashboard-grid-label')}</t-config-form>
80
+ </span>
81
+
82
+ <div class="grid-items-container">
83
+ {
84
+ gridItemOptions.map(({ enabled, label, name }) => (
85
+ <Card style="background-color: hsl(var(--background-step-2));">
86
+ <Toggle {label} {name} color='primary' defaultChecked={enabled} />
87
+ </Card>
88
+ ))
89
+ }
90
+ </div>
91
+
92
+ <Divider />
93
+
94
+ <div class="form-row">
95
+ <Select label={t('select-login-page-bg')} name='login-page-background' defaultValue={data.loginPageBackground} options={ogSelectOptions} fullWidth />
96
+ <Input label={t('input-custom-login-page')} name="login-page-background-custom" placeholder="'https://...' for local, or '/...' for public/ folder" value={data.loginPageCustomImage} disabled={data.loginPageBackground !== 'custom'} />
97
+ </div>
98
+
99
+ <Card class="login-preview-container">
100
+ <div slot="header">
101
+ <span>
102
+ <t-config-form key="login-page-preview">{t('login-page-preview')}</t-config-form>
103
+ </span>
104
+ </div>
105
+ {
106
+ currentLoginPageBg && currentLoginPageBg.name !== 'custom' && (
107
+ <LightVsDark light={currentLoginPageBg.light!} dark={currentLoginPageBg.dark!} />
108
+ )
109
+ }
110
+ </Card>
111
+
112
+ </div>
113
+ </form>
114
+
115
+ <script>
116
+ import {
117
+ $i18n,
118
+ $localeSettings,
119
+ baseTranslation,
120
+ defaultLang,
121
+ makeTranslation,
122
+ updateElmLabel,
123
+ updateSelectElmLabel,
124
+ } from 'studiocms:i18n/client';
125
+
126
+ const currentPage = '@studiocms/dashboard:configuration';
127
+
128
+ let lang = defaultLang;
129
+
130
+ const i18n = $i18n(currentPage, baseTranslation[currentPage]);
131
+
132
+ $localeSettings.subscribe((locale) => {
133
+ lang = locale || defaultLang;
134
+ });
135
+
136
+ i18n.subscribe(comp => {
137
+ updateElmLabel('site-title', comp['input-site-title']);
138
+ updateElmLabel('site-description', comp['input-site-description']);
139
+ updateElmLabel('default-og-image', comp['input-og-image']);
140
+ updateElmLabel('site-icon', comp['input-site-icon']);
141
+ updateElmLabel('diff-per-page', comp['input-diff-tracking-limit']);
142
+ updateElmLabel('login-page-background-custom', comp['input-custom-login-page']);
143
+ updateSelectElmLabel('login-page-background', comp['select-login-page-bg']);
144
+ updateSelectElmLabel('diff-enabled', comp['select-page-diff-tracking']);
145
+ });
146
+
147
+ if (!customElements.get('t-config-form')) {
148
+ customElements.define('t-config-form', makeTranslation(currentPage, i18n));
149
+ }
150
+ </script>
151
+
152
+ <div id="login-page-bgs"
153
+ data-blobs-light={blobs?.light?.src} data-blobs-dark={blobs?.dark?.src}
154
+ data-blocks-light={blocks?.light?.src} data-blocks-dark={blocks?.dark?.src}
155
+ data-curves-light={curves?.light?.src} data-curves-dark={curves?.dark?.src}
156
+ ></div>
157
+
158
+ <script>
159
+ import { toast } from "studiocms:ui/components";
160
+ const configForm = document.querySelector('#site-config-form') as HTMLFormElement;
161
+
162
+ configForm.addEventListener('submit', async (e) => {
163
+ e.preventDefault();
164
+
165
+ const formData = new FormData(configForm);
166
+
167
+ // Get dashboard grid items
168
+ const gridItems = Array.from(configForm.querySelectorAll('input[type="checkbox"]') as NodeListOf<HTMLInputElement>).map((input) => {
169
+ return {
170
+ name: input.name,
171
+ enabled: input.checked,
172
+ }
173
+ });
174
+
175
+ const enabledGridItems = gridItems.filter((item) => item.enabled).map((item) => item.name);
176
+
177
+ const data = {
178
+ title: formData.get('site-title') as string,
179
+ description: formData.get('site-description') as string,
180
+ defaultOgImage: formData.get('default-og-image') ?? null,
181
+ siteIcon: formData.get('site-icon') ?? null,
182
+ loginPageBackground: formData.get('login-page-background') as string,
183
+ loginPageCustomImage: formData.get('login-page-background-custom') ?? null,
184
+ enableDiffs: formData.get('diff-enabled') === 'true',
185
+ diffPerPage: parseInt(formData.get('diff-per-page') as string),
186
+ gridItems: enabledGridItems,
187
+ }
188
+
189
+ console.log(data);
190
+
191
+ const response = await fetch(configForm.action, {
192
+ method: 'POST',
193
+ body: JSON.stringify(data),
194
+ headers: {
195
+ 'Content-Type': 'application/json',
196
+ },
197
+ })
198
+ const res = await response.json();
199
+
200
+ if (response.status !== 200) {
201
+ toast({
202
+ title: 'Error',
203
+ description: res.error,
204
+ type: 'danger'
205
+ })
206
+ }
207
+
208
+ if (response.status === 200) {
209
+ toast({
210
+ title: 'Success',
211
+ description: res.message,
212
+ type: 'success'
213
+ })
214
+ }
215
+ });
216
+ </script>
217
+
218
+ <script is:inline>
219
+ async function setupLoginPreview() {
220
+ // Selectors
221
+ const loginPageBgSelectOptions = document.querySelector('#login-page-background-dropdown').querySelectorAll('.sui-select-option');
222
+ const customInput = document.querySelector('input[name="login-page-background-custom"]');
223
+ const customInputLabel = document.querySelector('label[for="login-page-background-custom"]');
224
+ const previewContainer = document.querySelector('.login-preview-container');
225
+ const lightImageHolder = document.querySelector('.light-image-holder');
226
+ const darkImageHolder = document.querySelector('.dark-image-holder');
227
+
228
+ // Backgrounds
229
+ const loginPageBgs = document.querySelector('#login-page-bgs');
230
+
231
+ const blobs = {
232
+ light: loginPageBgs.getAttribute('data-blobs-light'),
233
+ dark: loginPageBgs.getAttribute('data-blobs-dark'),
234
+ }
235
+
236
+ const blocks = {
237
+ light: loginPageBgs.getAttribute('data-blocks-light'),
238
+ dark: loginPageBgs.getAttribute('data-blocks-dark'),
239
+ }
240
+
241
+ const curves = {
242
+ light: loginPageBgs.getAttribute('data-curves-light'),
243
+ dark: loginPageBgs.getAttribute('data-curves-dark'),
244
+ }
245
+
246
+ // Event Listeners
247
+ loginPageBgSelectOptions.forEach((option) => {
248
+ option.addEventListener('click', () => {
249
+ const selectedValue = option.getAttribute('value');
250
+
251
+ if (selectedValue === 'custom') {
252
+ customInput.removeAttribute('disabled');
253
+ customInputLabel.classList.remove('disabled');
254
+ } else {
255
+ customInput.setAttribute('disabled', 'disabled');
256
+ customInputLabel.classList.add('disabled');
257
+ }
258
+
259
+ if (selectedValue === 'custom') {
260
+ previewContainer.style.display = 'none';
261
+ } else {
262
+ previewContainer.style.display = 'block';
263
+
264
+ if (selectedValue === 'studiocms-blobs') {
265
+ lightImageHolder.src = blobs.light;
266
+ darkImageHolder.src = blobs.dark;
267
+ }
268
+
269
+ if (selectedValue === 'studiocms-blocks') {
270
+ lightImageHolder.src = blocks.light;
271
+ darkImageHolder.src = blocks.dark;
272
+ }
273
+
274
+ if (selectedValue === 'studiocms-curves') {
275
+ lightImageHolder.src = curves.light;
276
+ darkImageHolder.src = curves.dark;
277
+ }
278
+
279
+ }
280
+ });
281
+ });
282
+ }
283
+
284
+ document.addEventListener('astro:page-load', setupLoginPreview);
285
+ setupLoginPreview();
286
+ </script>
287
+
288
+ <style>
289
+ .form-content {
290
+ display: flex;
291
+ flex-direction: column;
292
+ gap: 1rem;
293
+ }
294
+
295
+ .form-row {
296
+ display: grid;
297
+ grid-template-columns: 1fr 1fr;
298
+ gap: 1rem;
299
+ }
300
+
301
+ .login-preview-container {
302
+ width: min-content;
303
+ height: min-content;
304
+ }
305
+
306
+ @media screen and (max-width: 768px) {
307
+ .form-row {
308
+ grid-template-columns: 1fr;
309
+ }
310
+ }
311
+
312
+ .grid-items-container {
313
+ display: flex;
314
+ flex-wrap: wrap;
315
+ gap: 1rem;
316
+ }
317
+ </style>
@@ -0,0 +1,67 @@
1
+ ---
2
+ import { Image } from 'astro:assets';
3
+
4
+ interface Props {
5
+ light: ImageMetadata;
6
+ dark: ImageMetadata;
7
+ }
8
+
9
+ const { light, dark } = Astro.props;
10
+ ---
11
+ <div class="wrapper">
12
+ <div class="before">
13
+ <Image width={640} height={360} class="content-image light-image-holder" src={light} draggable="false" alt='Light Preview' loading={'eager'} />
14
+ </div>
15
+ <div class="after">
16
+ <Image width={640} height={360} class="content-image dark-image-holder" src={dark} draggable="false" alt='Dark Preview' loading={'eager'} />
17
+ </div>
18
+ </div>
19
+
20
+ <style>
21
+ /* Our normalize css */
22
+ *{
23
+ margin:0;
24
+ box-sizing: border-box;
25
+ }
26
+
27
+ /* Our wrapper */
28
+ .wrapper{
29
+ width: 640px;
30
+ height: 360px;
31
+ position: relative;
32
+ overflow: hidden;
33
+ box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);
34
+ }
35
+
36
+ /* Our image information */
37
+ .before,
38
+ .after {
39
+ width:100%;
40
+ height:100%;
41
+ background-repeat:no-repeat;
42
+ background-color: white;
43
+ background-size: cover;
44
+ background-position: center;
45
+ position: absolute;
46
+ top:0;
47
+ left:0;
48
+ pointer-events:none;
49
+ overflow: hidden;
50
+ }
51
+
52
+ .content-image{
53
+ height:100%;
54
+ }
55
+
56
+ .after{
57
+ width:50%;
58
+ }
59
+
60
+ @media screen and (max-width: 768px) {
61
+ .wrapper{
62
+ width: 320px;
63
+ height: 180px;
64
+ }
65
+
66
+ }
67
+ </style>