@morphemecms/cms 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/astro.mjs +3 -0
  3. package/bin/morpheme.mjs +3 -1
  4. package/defaults/blockTexts.ts +2 -2
  5. package/defaults/collections.ts +10 -0
  6. package/defaults/editor.ts +57 -53
  7. package/defaults/privacy.ts +4 -1
  8. package/defaults/rules.ts +36 -38
  9. package/defaults/standardPages.ts +0 -3
  10. package/defaults/texts.ts +11 -2
  11. package/demo/src/content/pages/about.md +2 -0
  12. package/icons/lucide/browser-fill.svg +1 -0
  13. package/icons/lucide/buildings-fill.svg +1 -0
  14. package/icons/lucide/certificate-fill.svg +1 -0
  15. package/icons/lucide/chart-line-up-fill.svg +1 -0
  16. package/icons/lucide/chats-fill.svg +1 -0
  17. package/icons/lucide/envelope-simple-fill.svg +1 -0
  18. package/icons/lucide/file-text-fill.svg +1 -0
  19. package/icons/lucide/folder-simple-fill.svg +1 -0
  20. package/icons/lucide/gauge.svg +1 -1
  21. package/icons/lucide/gear-six.svg +1 -0
  22. package/icons/lucide/globe-simple.svg +1 -0
  23. package/icons/lucide/heart-fill.svg +1 -0
  24. package/icons/lucide/layout.svg +1 -0
  25. package/icons/lucide/list-checks-fill.svg +1 -0
  26. package/icons/lucide/magnifying-glass-fill.svg +1 -0
  27. package/icons/lucide/megaphone-fill.svg +1 -0
  28. package/icons/lucide/newspaper-fill.svg +1 -0
  29. package/icons/lucide/paint-brush-broad-fill.svg +1 -0
  30. package/icons/lucide/puzzle-piece-fill.svg +1 -0
  31. package/icons/lucide/shield-check-fill.svg +1 -0
  32. package/icons/lucide/sidebar-simple.svg +1 -1
  33. package/icons/lucide/sidebar.svg +1 -0
  34. package/icons/lucide/square-half-bottom-fill.svg +1 -0
  35. package/icons/lucide/square-half.svg +1 -0
  36. package/icons/lucide/squares-four-fill.svg +1 -0
  37. package/icons/lucide/storefront-fill.svg +1 -0
  38. package/icons/lucide/tag-fill.svg +1 -0
  39. package/icons/lucide/toggle-right-fill.svg +1 -0
  40. package/icons/lucide/trash-fill.svg +1 -0
  41. package/icons/lucide/user-fill.svg +1 -0
  42. package/icons/lucide/wrench-fill.svg +1 -0
  43. package/icons/material-symbols/browser-fill.svg +1 -0
  44. package/icons/material-symbols/buildings-fill.svg +1 -0
  45. package/icons/material-symbols/certificate-fill.svg +1 -0
  46. package/icons/material-symbols/chart-line-up-fill.svg +1 -0
  47. package/icons/material-symbols/chats-fill.svg +1 -0
  48. package/icons/material-symbols/envelope-simple-fill.svg +1 -0
  49. package/icons/material-symbols/file-text-fill.svg +1 -0
  50. package/icons/material-symbols/folder-simple-fill.svg +1 -0
  51. package/icons/material-symbols/gauge.svg +1 -1
  52. package/icons/material-symbols/gear-six.svg +1 -0
  53. package/icons/material-symbols/globe-simple.svg +1 -0
  54. package/icons/material-symbols/heart-fill.svg +1 -0
  55. package/icons/material-symbols/layout.svg +1 -0
  56. package/icons/material-symbols/list-checks-fill.svg +1 -0
  57. package/icons/material-symbols/magnifying-glass-fill.svg +1 -0
  58. package/icons/material-symbols/megaphone-fill.svg +1 -0
  59. package/icons/material-symbols/newspaper-fill.svg +1 -0
  60. package/icons/material-symbols/paint-brush-broad-fill.svg +1 -0
  61. package/icons/material-symbols/puzzle-piece-fill.svg +1 -0
  62. package/icons/material-symbols/shield-check-fill.svg +1 -0
  63. package/icons/material-symbols/sidebar-simple.svg +1 -1
  64. package/icons/material-symbols/sidebar.svg +1 -0
  65. package/icons/material-symbols/square-half-bottom-fill.svg +1 -0
  66. package/icons/material-symbols/square-half.svg +1 -0
  67. package/icons/material-symbols/squares-four-fill.svg +1 -0
  68. package/icons/material-symbols/storefront-fill.svg +1 -0
  69. package/icons/material-symbols/tag-fill.svg +1 -0
  70. package/icons/material-symbols/toggle-right-fill.svg +1 -0
  71. package/icons/material-symbols/trash-fill.svg +1 -0
  72. package/icons/material-symbols/user-fill.svg +1 -0
  73. package/icons/material-symbols/wrench-fill.svg +1 -0
  74. package/icons/phosphor/browser-fill.svg +1 -0
  75. package/icons/phosphor/buildings-fill.svg +1 -0
  76. package/icons/phosphor/certificate-fill.svg +1 -0
  77. package/icons/phosphor/chart-line-up-fill.svg +1 -0
  78. package/icons/phosphor/chats-fill.svg +1 -0
  79. package/icons/phosphor/envelope-simple-fill.svg +1 -0
  80. package/icons/phosphor/file-text-fill.svg +1 -0
  81. package/icons/phosphor/folder-simple-fill.svg +1 -0
  82. package/icons/phosphor/gear-six.svg +1 -0
  83. package/icons/phosphor/globe-simple.svg +1 -0
  84. package/icons/phosphor/heart-fill.svg +1 -0
  85. package/icons/phosphor/layout.svg +1 -0
  86. package/icons/phosphor/list-checks-fill.svg +1 -0
  87. package/icons/phosphor/magnifying-glass-fill.svg +1 -0
  88. package/icons/phosphor/megaphone-fill.svg +1 -0
  89. package/icons/phosphor/newspaper-fill.svg +1 -0
  90. package/icons/phosphor/paint-brush-broad-fill.svg +1 -0
  91. package/icons/phosphor/puzzle-piece-fill.svg +1 -0
  92. package/icons/phosphor/shield-check-fill.svg +1 -0
  93. package/icons/phosphor/sidebar.svg +1 -0
  94. package/icons/phosphor/square-half-bottom-fill.svg +1 -0
  95. package/icons/phosphor/square-half.svg +1 -0
  96. package/icons/phosphor/squares-four-fill.svg +1 -0
  97. package/icons/phosphor/storefront-fill.svg +1 -0
  98. package/icons/phosphor/tag-fill.svg +1 -0
  99. package/icons/phosphor/toggle-right-fill.svg +1 -0
  100. package/icons/phosphor/trash-fill.svg +1 -0
  101. package/icons/phosphor/user-fill.svg +1 -0
  102. package/icons/phosphor/wrench-fill.svg +1 -0
  103. package/lib/breakpoints.d.mts +13 -0
  104. package/lib/breakpoints.mjs +20 -0
  105. package/lib/breakpoints.test.mjs +39 -0
  106. package/lib/build-lane.d.mts +15 -0
  107. package/lib/build-lane.mjs +23 -0
  108. package/lib/build-lane.test.mjs +74 -0
  109. package/lib/build-settings.d.mts +16 -0
  110. package/lib/build-settings.mjs +39 -0
  111. package/lib/build-settings.test.mjs +41 -0
  112. package/lib/contracts.d.mts +3 -2
  113. package/lib/contracts.mjs +3 -2
  114. package/lib/drawer-swipe.d.mts +10 -0
  115. package/lib/drawer-swipe.mjs +17 -0
  116. package/lib/drawer-swipe.test.mjs +33 -0
  117. package/lib/drawerKeys.d.mts +9 -0
  118. package/lib/drawerKeys.mjs +26 -0
  119. package/lib/drawerKeys.test.mjs +21 -0
  120. package/lib/eyebrow.d.mts +6 -0
  121. package/lib/eyebrow.mjs +24 -0
  122. package/lib/eyebrow.test.mjs +20 -0
  123. package/lib/front-sections.test.mjs +82 -0
  124. package/lib/heading-levels.d.mts +7 -0
  125. package/lib/heading-levels.mjs +16 -0
  126. package/lib/heading-levels.test.mjs +37 -0
  127. package/lib/inline.ts +3 -2
  128. package/lib/markdown.ts +2 -0
  129. package/lib/materialIcon.d.mts +21 -0
  130. package/lib/materialIcon.mjs +29 -0
  131. package/lib/materialIcon.test.mjs +45 -0
  132. package/lib/menu-layout.d.mts +11 -0
  133. package/lib/menu-layout.mjs +14 -0
  134. package/lib/menu-layout.test.mjs +23 -0
  135. package/lib/menu.d.mts +59 -0
  136. package/lib/menu.mjs +129 -0
  137. package/lib/menu.test.mjs +291 -0
  138. package/lib/rehype-emphasize.d.mts +4 -0
  139. package/lib/rehype-emphasize.mjs +20 -0
  140. package/lib/rehype-emphasize.test.mjs +39 -0
  141. package/lib/section-in-view.d.mts +8 -0
  142. package/lib/section-in-view.mjs +25 -0
  143. package/lib/section-in-view.test.mjs +35 -0
  144. package/lib/section-marker.d.mts +5 -0
  145. package/lib/section-marker.mjs +18 -0
  146. package/lib/section-marker.test.mjs +22 -0
  147. package/lib/section-ranges.d.mts +12 -0
  148. package/lib/section-ranges.mjs +43 -0
  149. package/lib/section-ranges.test.mjs +61 -0
  150. package/lib/sheet-stops.d.mts +68 -0
  151. package/lib/sheet-stops.mjs +198 -0
  152. package/lib/sheet-stops.test.mjs +155 -0
  153. package/lib/still-timer.d.mts +5 -0
  154. package/lib/still-timer.mjs +17 -0
  155. package/lib/still-timer.test.mjs +42 -0
  156. package/lib/text-sections.d.mts +10 -0
  157. package/lib/text-sections.mjs +45 -0
  158. package/lib/text-sections.test.mjs +78 -0
  159. package/lib/video.mjs +2 -1
  160. package/lib/without-h1.d.mts +1 -0
  161. package/lib/without-h1.mjs +7 -0
  162. package/lib/without-h1.test.mjs +26 -0
  163. package/lib/word-at.d.mts +6 -0
  164. package/lib/word-at.mjs +20 -0
  165. package/lib/word-at.test.mjs +19 -0
  166. package/package.json +3 -1
  167. package/pages/editor/version.json.js +22 -2
  168. package/scripts/already-checked.mjs +11 -0
  169. package/scripts/already-checked.test.mjs +18 -0
  170. package/scripts/build-settings-problems.mjs +27 -0
  171. package/scripts/build-settings-problems.test.mjs +35 -0
  172. package/scripts/check-content.mjs +42 -4
  173. package/scripts/check-worker.mjs +96 -4
  174. package/scripts/ci-build.mjs +85 -0
  175. package/scripts/ci-build.test.mjs +137 -0
  176. package/scripts/editor-roundtrip.mjs +62 -3
  177. package/scripts/editor-screens.mjs +21 -7
  178. package/scripts/git-env.mjs +6 -0
  179. package/scripts/step-command.mjs +34 -0
  180. package/scripts/step-command.test.mjs +50 -0
  181. package/scripts/text-problems.mjs +83 -0
  182. package/scripts/text-problems.test.mjs +74 -0
  183. package/scripts/worker-modules.mjs +11 -1
  184. package/site/breakpoints.d.mts +6 -0
  185. package/site/breakpoints.mjs +52 -0
  186. package/site/breakpoints.test.mjs +36 -0
  187. package/site/casing.d.mts +3 -0
  188. package/site/casing.mjs +26 -0
  189. package/site/content.config.ts +2 -0
  190. package/site/content.ts +2 -4
  191. package/site/defineSite.d.mts +1 -0
  192. package/site/defineSite.mjs +3 -0
  193. package/site/home.ts +3 -2
  194. package/site/icons.d.mts +116 -4
  195. package/site/icons.mjs +62 -6
  196. package/site/images.mjs +1 -1
  197. package/site/live-diff.d.mts +22 -0
  198. package/site/live-diff.mjs +98 -0
  199. package/site/live-diff.test.mjs +235 -0
  200. package/site/materialSymbols.d.mts +5 -0
  201. package/site/materialSymbols.mjs +19 -0
  202. package/site/sections.ts +1 -1
  203. package/site/theme.d.mts +1 -1
  204. package/site/theme.mjs +7 -1
  205. package/src/ActionParts.tsx +1 -1
  206. package/src/Advanced.tsx +101 -20
  207. package/src/App.tsx +47 -121
  208. package/src/AppList.tsx +1 -1
  209. package/src/BlockParts.tsx +3 -3
  210. package/src/Colors.tsx +1 -1
  211. package/src/CommunicationParts.tsx +1 -1
  212. package/src/ContainmentParts.tsx +80 -28
  213. package/src/Deleted.tsx +18 -4
  214. package/src/EditorFooter.tsx +14 -0
  215. package/src/EntryForm.tsx +75 -39
  216. package/src/FormFrame.tsx +3 -8
  217. package/src/Library.tsx +46 -51
  218. package/src/Licenses.tsx +27 -11
  219. package/src/MainDrawerParts.tsx +60 -0
  220. package/src/MainMenu.tsx +136 -0
  221. package/src/MarkdownEditor.tsx +175 -32
  222. package/src/Media.tsx +69 -16
  223. package/src/MediaTags.tsx +91 -0
  224. package/src/ModalSheetSample.tsx +47 -0
  225. package/src/NavigationParts.tsx +67 -21
  226. package/src/NavigationRestParts.tsx +1 -1
  227. package/src/Parts.tsx +71 -0
  228. package/src/PartsShown.tsx +1 -1
  229. package/src/PickerParts.tsx +2 -2
  230. package/src/Redirects.tsx +3 -2
  231. package/src/Screen.tsx +93 -90
  232. package/src/SelectionParts.tsx +22 -6
  233. package/src/SiteLogoLink.tsx +14 -0
  234. package/src/StartFab.tsx +22 -0
  235. package/src/StartStatus.tsx +1 -1
  236. package/src/autoTags.d.mts +28 -0
  237. package/src/autoTags.mjs +68 -0
  238. package/src/autoTags.test.mjs +109 -0
  239. package/src/buildSettings.test.mjs +20 -0
  240. package/src/buildSettings.ts +20 -0
  241. package/src/checkSite.ts +14 -1
  242. package/src/deploy.ts +7 -9
  243. package/src/editor.css +150 -17
  244. package/src/eyebrow.d.mts +5 -0
  245. package/src/eyebrow.mjs +53 -0
  246. package/src/eyebrowState.d.mts +21 -0
  247. package/src/eyebrowState.mjs +62 -0
  248. package/src/eyebrowState.test.mjs +78 -0
  249. package/src/fileRecords.d.mts +115 -0
  250. package/src/fileRecords.mjs +224 -0
  251. package/src/fileRecords.test.mjs +224 -0
  252. package/src/fileTagFilter.d.mts +30 -0
  253. package/src/fileTagFilter.mjs +44 -0
  254. package/src/fileTagFilter.test.mjs +57 -0
  255. package/src/fileTags.d.mts +56 -0
  256. package/src/fileTags.mjs +100 -0
  257. package/src/fileTags.test.mjs +127 -0
  258. package/src/firstHeading.d.mts +6 -0
  259. package/src/firstHeading.mjs +37 -0
  260. package/src/i18n/da-DK/advanced.ts +27 -12
  261. package/src/i18n/da-DK/app.ts +9 -7
  262. package/src/i18n/da-DK/apps.ts +16 -16
  263. package/src/i18n/da-DK/blockSettings.ts +9 -9
  264. package/src/i18n/da-DK/blocks.ts +2 -2
  265. package/src/i18n/da-DK/check.ts +5 -2
  266. package/src/i18n/da-DK/cms.ts +14 -12
  267. package/src/i18n/da-DK/colors.ts +5 -5
  268. package/src/i18n/da-DK/common.ts +2 -2
  269. package/src/i18n/da-DK/company.ts +3 -3
  270. package/src/i18n/da-DK/consents.ts +6 -6
  271. package/src/i18n/da-DK/forms.ts +6 -6
  272. package/src/i18n/da-DK/history.ts +6 -6
  273. package/src/i18n/da-DK/keywords.ts +2 -2
  274. package/src/i18n/da-DK/library.ts +17 -15
  275. package/src/i18n/da-DK/licenses.ts +4 -4
  276. package/src/i18n/da-DK/media.ts +10 -4
  277. package/src/i18n/da-DK/parts.ts +62 -25
  278. package/src/i18n/da-DK/preview.ts +5 -6
  279. package/src/i18n/da-DK/redirects.ts +7 -7
  280. package/src/i18n/da-DK/seo.ts +1 -1
  281. package/src/i18n/da-DK/text.ts +2 -0
  282. package/src/i18n/da-DK/theme.ts +5 -5
  283. package/src/i18n/en-US/advanced.ts +34 -18
  284. package/src/i18n/en-US/app.ts +7 -5
  285. package/src/i18n/en-US/apps.ts +9 -9
  286. package/src/i18n/en-US/blockSettings.ts +4 -4
  287. package/src/i18n/en-US/blocks.ts +6 -6
  288. package/src/i18n/en-US/check.ts +6 -3
  289. package/src/i18n/en-US/cms.ts +15 -14
  290. package/src/i18n/en-US/colors.ts +18 -18
  291. package/src/i18n/en-US/common.ts +3 -3
  292. package/src/i18n/en-US/consents.ts +4 -4
  293. package/src/i18n/en-US/forms.ts +5 -5
  294. package/src/i18n/en-US/history.ts +2 -2
  295. package/src/i18n/en-US/library.ts +21 -15
  296. package/src/i18n/en-US/licenses.ts +6 -6
  297. package/src/i18n/en-US/media.ts +7 -1
  298. package/src/i18n/en-US/parts.ts +60 -21
  299. package/src/i18n/en-US/preview.ts +5 -6
  300. package/src/i18n/en-US/redirects.ts +3 -3
  301. package/src/i18n/en-US/seo.ts +1 -1
  302. package/src/i18n/en-US/text.ts +3 -0
  303. package/src/i18n/en-US/theme.ts +6 -6
  304. package/src/icon.tsx +90 -27
  305. package/src/licenseData.test.mjs +28 -0
  306. package/src/licenseData.ts +12 -1
  307. package/src/markdown.d.mts +2 -0
  308. package/src/markdown.mjs +73 -5
  309. package/src/markdown.test.mjs +74 -0
  310. package/src/materialIcons.ts +8 -0
  311. package/src/menuChildren.ts +36 -0
  312. package/src/menuOpen.ts +34 -0
  313. package/src/pagePreview.tsx +23 -19
  314. package/src/r2Caching.ts +14 -0
  315. package/src/sectionFrame.ts +39 -0
  316. package/src/sectionState.d.mts +19 -0
  317. package/src/sectionState.mjs +31 -0
  318. package/src/sectionState.test.mjs +59 -0
  319. package/src/sections.d.mts +9 -7
  320. package/src/sections.mjs +74 -27
  321. package/src/sections.test.mjs +59 -0
  322. package/src/sidebar.ts +2 -2
  323. package/src/site.ts +27 -17
  324. package/src/stillCursor.d.mts +8 -0
  325. package/src/stillCursor.mjs +19 -0
  326. package/src/stillCursor.test.mjs +26 -0
  327. package/src/tagUses.d.mts +47 -0
  328. package/src/tagUses.mjs +121 -0
  329. package/src/tagUses.test.mjs +141 -0
  330. package/src/themeUi.ts +10 -0
  331. package/src/topBarSlot.tsx +37 -0
  332. package/src/ui.tsx +654 -150
  333. package/src/virtual.d.ts +5 -0
  334. package/starter/README.md +2 -1
  335. package/starter/package.json +2 -1
  336. package/starter/wrangler.jsonc +3 -2
  337. package/theme/blocks/cards/LinkCards.tsx +2 -1
  338. package/theme/blocks/hero/View.tsx +2 -1
  339. package/theme/blocks/video/View.tsx +2 -1
  340. package/theme/components/BlogIndex.astro +2 -2
  341. package/theme/components/BlogPosts.astro +1 -1
  342. package/theme/components/BlogPosts.tsx +9 -6
  343. package/theme/components/Container.astro +1 -1
  344. package/theme/components/CookieConsent.astro +1 -1
  345. package/theme/components/EndBlock.astro +1 -1
  346. package/theme/components/Footer.astro +5 -5
  347. package/theme/components/Header.astro +3 -3
  348. package/theme/components/Icon.astro +2 -2
  349. package/theme/components/MobileMenu.tsx +72 -61
  350. package/theme/components/MobileNav.astro +2 -2
  351. package/theme/components/PageHeader.astro +2 -2
  352. package/theme/components/PageSection.astro +1 -1
  353. package/theme/components/PopupButton.tsx +2 -2
  354. package/theme/components/PopupView.tsx +2 -2
  355. package/theme/components/PostList.tsx +7 -3
  356. package/theme/components/RichText.astro +22 -7
  357. package/theme/components/Section.astro +17 -10
  358. package/theme/components/SectionHeading.tsx +1 -1
  359. package/theme/components/home/PageBlock.astro +4 -4
  360. package/theme/components/home/Text.astro +3 -3
  361. package/theme/layouts/PageLayout.astro +3 -3
  362. package/theme/layouts/PostLayout.astro +9 -8
  363. package/theme/styles/base.css +13 -3
  364. package/theme/styles/blocks.css +97 -10
  365. package/theme/styles/components.css +9 -9
  366. package/theme/styles/elevation.test.mjs +168 -0
  367. package/theme/styles/global.css +65 -59
  368. package/theme/styles/ui.css +460 -131
  369. package/theme/templates/Home.astro +1 -1
  370. package/theme/templates/New.astro +5 -5
  371. package/theme/templates/NotFound.astro +2 -2
  372. package/theme/ui/BottomSheet.tsx +118 -21
  373. package/theme/ui/BottomSheetResizeIcon.tsx +13 -0
  374. package/theme/ui/Button.tsx +4 -3
  375. package/theme/ui/Dialog.tsx +1 -1
  376. package/theme/ui/FabMenu.tsx +13 -12
  377. package/theme/ui/LoadingIndicator.tsx +1 -1
  378. package/theme/ui/NavigationDrawer.tsx +116 -15
  379. package/theme/ui/NavigationRail.tsx +22 -13
  380. package/theme/ui/Search.tsx +1 -1
  381. package/theme/ui/SettingRow.tsx +31 -0
  382. package/theme/ui/Switch.tsx +11 -11
  383. package/theme/ui/TextField.tsx +17 -6
  384. package/theme/ui/bottomSheet.script.ts +3 -2
  385. package/theme/ui/bottomSheetControl.ts +131 -46
  386. package/theme/ui/fabMenu.script.ts +69 -53
  387. package/theme/ui/modalSheetSize.ts +214 -0
  388. package/theme/ui/navigationDrawerControl.ts +35 -0
  389. package/theme/ui/search.script.ts +4 -2
  390. package/worker/index.js +3 -0
  391. package/worker/plan-status.js +46 -0
  392. package/worker/push.js +7 -5
  393. package/worker/r2-status.js +2 -1
  394. package/icons/lucide/desktop.svg +0 -1
  395. package/icons/material-symbols/desktop.svg +0 -1
  396. package/icons/phosphor/desktop.svg +0 -1
@@ -1,35 +1,36 @@
1
1
  // "Morpheme" under "Indstillinger" (the CMS's update page, #morpheme): the running version, a new one and its notes,
2
- // and an update's progress; also the Worker's notifications and commit messages (worker/cms-update.js).
2
+ // and an update's progress; also the notifications and commit messages (worker/cms-update.js).
3
3
 
4
4
  export const cms = {
5
5
  running: (v: string) => `Version ${v}`,
6
- /** When the Worker last asked npm, as when.ts writes it. */
6
+ /** When npm was last asked for a new version, as when.ts writes it. */
7
7
  checked: (when: string) => `Checked ${when}`,
8
8
  notChecked: 'Not checked yet',
9
9
  upToDate: 'Up to date',
10
10
  available: (v: string) => `Version ${v} is available`,
11
11
  whatsNew: 'What’s new',
12
12
  major: 'A new major version isn’t installed by itself.',
13
- skipped: (v: string) => `${v} was undone because the site couldn’t be built.`,
13
+ skipped: (v: string) => `Version ${v} was undone because the website couldn’t be updated with it.`,
14
14
  /** Followed by the command, in a code block. */
15
- needsNpm: 'It needs npm. Run this in the site’s repository:',
15
+ needsNpm: 'Updating needs npm. Run this in the website’s repository:',
16
16
  update: 'Update',
17
17
  tryAgain: 'Try again',
18
- waiting: (v: string) => `Updating to ${v}. Waiting for the site to be built.`,
18
+ waiting: (v: string) => `Updating to ${v}. This takes a few minutes.`,
19
19
  undoing: (v: string) => `Undoing the update to ${v}.`,
20
20
  done: (v: string) => `Updated to ${v}`,
21
- undone: (v: string) => `The update to ${v} was undone because the site couldn’t be built.`,
22
- stuck: (v: string) => `The update to ${v} and its undo couldn’t be built. The site must be fixed by hand.`,
21
+ undone: (v: string) => `The update to ${v} was undone because the website couldn’t be updated with it.`,
22
+ stuck: (v: string) =>
23
+ `The website couldn’t be updated with ${v}, and going back to the earlier version failed too. Fix the website by hand.`,
23
24
  unreachable: 'npm or GitHub couldn’t be reached.',
24
- cannotWrite: 'The site’s GitHub token can’t save. Give it Contents: Read and write.',
25
- noToken: 'The site has no GitHub token (GITHUB_PUBLISH_TOKEN).',
26
- noKv: 'The site has no KV storage (PUSH), so it can’t look for new versions.',
27
- notManaged: 'The site’s package.json decides the version.',
28
- slowUndo: 'The token can’t read check runs, so a failed update is undone after 20 minutes.',
25
+ cannotWrite: 'The website’s GitHub token can’t save changes. In GitHub, give it Contents: Read and write.',
26
+ noToken: 'The website has no GitHub token (GITHUB_PUBLISH_TOKEN).',
27
+ noKv: 'The website has no KV storage (PUSH), so it can’t look for new versions.',
28
+ notManaged: 'The version is fixed in the website’s package.json, so it can’t be updated here.',
29
+ slowUndo: 'The GitHub token can’t see whether the update worked, so a failed update is undone after 20 minutes.',
29
30
  /** The site's notifications (Notifications.tsx) and the commits the Worker writes, in the site's language. */
30
31
  notifyDone: (v: string) => `Morpheme was updated to ${v}`,
31
- notifyUndone: (v: string) => `The update of Morpheme to ${v} was undone because the site couldn’t be built`,
32
- notifyStuck: (v: string) => `Morpheme ${v} couldn’t be built, and neither could its undo. Fix the site by hand.`,
32
+ notifyUndone: (v: string) => `The update of Morpheme to ${v} was undone because the website couldn’t be updated with it`,
33
+ notifyStuck: (v: string) => `The website couldn’t be updated with Morpheme ${v}, and going back failed too. Fix the website by hand.`,
33
34
  commitUpdate: (v: string) => `Update Morpheme to ${v}`,
34
35
  commitUndo: (v: string) => `Undo the update of Morpheme to ${v}`,
35
36
  };
@@ -1,11 +1,11 @@
1
- // "Farver" (Colors.tsx): the site's colours in light and dark mode.
1
+ // "Farver" (Colors.tsx): the site's colors in light and dark mode.
2
2
  export const colors = {
3
3
  intro: "The website's colors in light and dark mode.",
4
4
  light: 'Light mode',
5
5
  dark: 'Dark mode',
6
6
  /** The switch between the modes, for screen readers. */
7
7
  modes: 'Mode',
8
- /** The little page drawn in a mode's colours. */
8
+ /** The little page drawn in a mode's colors. */
9
9
  preview: {
10
10
  title: (mode: string) => `Example: ${mode.toLowerCase()}`,
11
11
  heading: 'A heading',
@@ -21,22 +21,22 @@ export const colors = {
21
21
  },
22
22
  /** A pair that is too hard to read: what it is (the site's words), its contrast and the least it needs. */
23
23
  tooLow: (what: string, ratio: string, min: string) => `Contrast too low: ${what} (${ratio}, at least ${min}).`,
24
- /** checkSite.ts: a colour in the file that is not one ('dark.accent: "rød"'). */
24
+ /** checkSite.ts: a color in the file that is not one ('dark.accent: "rød"'). */
25
25
  notAColorAt: (where: string) => `Not a color: ${where}`,
26
26
  cannotSave: 'Some colors have too little contrast. Fix the ones marked in red.',
27
27
  unreadable: 'The colors couldn’t be read. The default colors are shown.',
28
- /** Dynamic colour (Material 3): all the colours made from one source colour. */
28
+ /** Dynamic color (Material 3): all the colors made from one source color. */
29
29
  dynamic: {
30
- /** The tab with dynamic colour, beside the modes'. */
30
+ /** The tab with dynamic color, beside the modes'. */
31
31
  tab: 'Generator',
32
32
  source: 'Source color',
33
33
  fromPicture: 'From a picture',
34
34
  fromPictureDone: 'The source color was taken from the picture',
35
- /** A picture without colour enough to make the colours from (a grey one). */
35
+ /** A picture without color enough to make the colors from (a grey one). */
36
36
  noColorInPicture: 'The picture has no color that can be used as a source color',
37
- /** The generator's three base colours at the top (ColorTiles), under this heading and named by it for screen readers. */
37
+ /** The generator's three base colors at the top (ColorTiles), under this heading and named by it for screen readers. */
38
38
  base: 'Colors',
39
- /** The colour wheel with the colour harmonies (lib/dynamic-colors.ts HARMONIES). */
39
+ /** The color wheel with the color harmonies (lib/dynamic-colors.ts HARMONIES). */
40
40
  harmony: 'Harmony',
41
41
  harmonyHint: 'Drag the big dot, and the other colors follow the harmony.',
42
42
  wheel: 'Color wheel',
@@ -50,33 +50,33 @@ export const colors = {
50
50
  contrast: 'Contrast',
51
51
  contrastHint: 'Higher contrast makes the text easier to read.',
52
52
  contrasts: { standard: 'Standard', medium: 'Medium', high: 'High' },
53
- /** A colour changed by hand while they are made from the source colour. */
53
+ /** A color changed by hand while they are made from the source color. */
54
54
  turnedOff: 'The generator no longer makes the colors, so you can change them yourself',
55
55
  /** checkSite.ts: a wrong value in the choice in the file ('dynamic.variant: "rød"'). */
56
56
  wrongAt: (where: string) => `Wrong value: ${where}`,
57
57
  },
58
- /** Each page's colours as it was built, shown in the modes while an app changes the pages' colours (hooks/page-colors.ts). */
58
+ /** Each page's colors as it was built, shown in the modes while an app changes the pages' colors (hooks/page-colors.ts). */
59
59
  pages: {
60
- intro: "Each page's colors, as they were when the website was last built.",
61
- /** At the top of the modes: the apps that give the pages their colours, by their names, and the way to the site's
60
+ intro: "Each page's colors, as they were when the website was last updated.",
61
+ /** At the top of the modes: the apps that give the pages their colors, by their names, and the way to the site's
62
62
  * own, the fallback. */
63
63
  title: "Colors from the pages' pictures",
64
64
  byApps: (apps: string) => `${apps} gives the pages colors from their pictures. Where it doesn’t, the fallback colors are used.`,
65
65
  showFallback: 'Show fallback colors',
66
- /** The page with the site's own colours (FALLBACK_ROUTE), and what they are. */
66
+ /** The page with the site's own colors (FALLBACK_ROUTE), and what they are. */
67
67
  fallback: 'Fallback colors',
68
- fallbackIntro: (apps: string) => `The colors are used on the pages ${apps} doesn’t give colors.`,
68
+ fallbackIntro: (apps: string) => `The website’s own colors are used on pages where ${apps} doesn’t give colors.`,
69
69
  apps: 'Apps',
70
70
  fromApp: 'Colors from a picture',
71
71
  own: "The website's colors",
72
- loading: "Fetching the pages' colors",
73
- missing: "The pages' colors can be seen once the website is built",
74
- /** The colours of a page in a row, read out (the accent colour, the light colour, the background and the text). */
72
+ loading: "Loading the pages' colors…",
73
+ missing: "The pages' colors can be seen in a few minutes",
74
+ /** The colors of a page in a row, read out (the accent color, the light color, the background and the text). */
75
75
  swatches: (mode: string) => `The colors in ${mode.toLowerCase()}`,
76
76
  },
77
77
  standard: 'Reset to default colors',
78
78
  standardHint: 'Takes effect when you save.',
79
- icons: 'The logo and icon are changed under Appearance › Logo and icon.',
79
+ icons: 'Edit the logo and icon under Appearance › Logo and icon.',
80
80
  /** The commit, in the site's language (siteT). */
81
81
  commit: 'Editor: new colors',
82
82
  };
@@ -104,7 +104,7 @@ export const common = {
104
104
  company: 'Business',
105
105
  header: 'Header',
106
106
  lists: 'Lists',
107
- blocks: 'Default blocks',
107
+ blocks: 'Block templates',
108
108
  media: 'Files',
109
109
  /** How the site looks (#udseende, Library.tsx Theme): the theme, the colours, the logo and icon, and the site's own
110
110
  * parts there (appearance in packages/editor/defaults/editor.ts: "Standardsider"). */
@@ -128,9 +128,9 @@ export const common = {
128
128
  seo: 'Search engine optimization',
129
129
  redirects: 'Redirects',
130
130
  account: 'Account',
131
- /** The settings of the whole site (#indstillinger, Library.tsx Settings), opened by the gear in the top bar. */
131
+ /** The last section of the main drawer, and the first part of the path to a setting (placeOf in site.ts). */
132
132
  settings: 'Settings',
133
- /** Under Indstillinger: R2 caching (#avanceret, Advanced.tsx). */
133
+ /** Under Indstillinger: the faster editor (#avanceret, Advanced.tsx). */
134
134
  advanced: 'Advanced',
135
135
  /** Under Indstillinger: the licences of what the site and the editor are made with (#licenser, Licenses.tsx). */
136
136
  licenses: 'Licenses',
@@ -1,15 +1,15 @@
1
1
  // "Samtykker" under "Privatliv" (Consents.tsx, consentData.ts): the visitors' answers in the cookie banner.
2
2
  export const consents = {
3
3
  title: 'Consents',
4
- intro: 'The visitors’ answers in the cookie banner, with the consent ID the banner shows them. They are deleted after 2 years.',
4
+ intro: 'The visitors’ answers in the cookie banner, with the consent ID the banner shows them. Answers are kept for 2 years.',
5
5
  count: (n: number) => `${n} ${n === 1 ? 'answer' : 'answers'}`,
6
6
  searchLabel: 'Search by consent ID',
7
7
  sorts: { newest: 'Newest first', oldest: 'Oldest first' },
8
8
  download: 'Download as CSV',
9
- loading: 'Loading the consents',
9
+ loading: 'Loading the consents…',
10
10
  notLoaded: (error: string) => `Couldn’t load the consents: ${error}`,
11
- /** Without the Worker's storage (a preview of a branch, or the site on another host). */
12
- notKept: 'Consents are kept only on the published site',
11
+ /** Answers aren't stored in a preview of a branch, or on the site on another host. */
12
+ notKept: 'Consents are kept only on the published website',
13
13
  /** None, or none matching the search. */
14
14
  none: (query: string) => (query ? `No consent ID starts with "${query}"` : 'No one has answered yet'),
15
15
  /** Under the id in a row: the yes and no as one line ("Ja: Statistik · Nej: Marketing"). */
@@ -41,14 +41,14 @@ export const forms = {
41
41
  /** "Skjul for søgemaskiner (noindex)" is ticked. */
42
42
  noindex: (post: boolean) => `The ${post ? 'post' : 'page'} is hidden from Google`,
43
43
  /** "Canonical URL" is a page the editor does not know. */
44
- noCanonical: 'Canonical URL points to a page that doesn’t exist',
44
+ noCanonical: 'The canonical URL (the page Google should list) points to a page that doesn’t exist',
45
45
  allAlt: 'All pictures have an alt text',
46
46
  noAlt: (n: number) => `${n} ${n === 1 ? 'picture has' : 'pictures have'} no alt text`,
47
47
  goodLinks: (n: number): string => (n === 1 ? 'The link has a descriptive text' : 'The links have descriptive text'),
48
48
  /** The first link whose text is only "klik her", "læs mere" and the like. */
49
49
  vagueLink: (text: string) => `The link "${text}" doesn’t say where it leads`,
50
50
  /** How to do better, under a check that is not fine when it is folded out. */
51
- fixNoH1: 'Write the page’s heading at the top of the text, and make it Heading (H1).',
51
+ fixNoH1: 'Write the page’s heading at the top of the text, as a Heading.',
52
52
  fixManyH1: 'Make the others Heading or Subheading.',
53
53
  fixH1First: 'Move the heading (H1) up, so it comes first in the text.',
54
54
  fixTitle: 'Write a Google title of at most about 60 characters.',
@@ -76,7 +76,7 @@ export const forms = {
76
76
  titleNeedsLetters: 'The title must have letters or digits.',
77
77
  /** Planlagt (scheduled), with a time that has passed. */
78
78
  scheduledPast: 'The time has already passed. Choose a later time, or choose Published.',
79
- /** The page is a standard page ("Forside", "Blogside" …, chosen `where`: "Indstillinger › Udseende › Standardsider")
79
+ /** The page is a standard page ("Forside", "Blogside" …, chosen `where`: "Udseende › Standardsider")
80
80
  * and was made Kladde or Planlagt. */
81
81
  standardPage: (label: string, where: string) =>
82
82
  `The page is chosen as ${label} under ${where} and must be published. Choose another page there first.`,
@@ -94,7 +94,7 @@ export const forms = {
94
94
  `${reason} ${typed ? 'Choose another address' : `Give the ${post ? 'post' : 'page'} another title`}.`,
95
95
  fileExists: (name: string) => `There’s already a file named ${name}.md. Choose another address.`,
96
96
  empty: (post: boolean) => `${post ? 'An empty blog post' : 'An empty page'} can’t be saved.`,
97
- movedTitle: 'A redirect has been created',
97
+ movedTitle: 'Redirect created',
98
98
  movedText: (address: string, old: string, post: boolean, where: string) =>
99
99
  `The ${post ? 'post' : 'page'} now has the address ${address}. The old address, ${old}, now redirects here.`,
100
100
  ok: 'OK',
@@ -103,7 +103,7 @@ export const forms = {
103
103
  /** An entry of a folder or a single file (DataForm.tsx). */
104
104
  nameNeedsLetters: 'The name must have letters or digits.',
105
105
  /** The fields (fields.tsx). */
106
- fromTitle: 'Generated from the title when the page is first saved.',
106
+ fromTitle: 'Created from the title the first time you save the page.',
107
107
  noIcon: 'No icon',
108
108
  pickIcon: 'Choose an icon',
109
109
  noIconYet: 'No icon yet',
@@ -3,7 +3,7 @@
3
3
  export const history = {
4
4
  /** The button in the top bar of a form, and the sheet it opens. */
5
5
  versions: 'Earlier versions',
6
- loading: 'Loading the versions',
6
+ loading: 'Loading the versions…',
7
7
  notLoaded: (error: string) => `Couldn’t load the versions: ${error}`,
8
8
  none: 'There are no earlier versions',
9
9
  /** Who saved a version (their name on GitHub). */
@@ -24,7 +24,7 @@ export const history = {
24
24
  deletedNote: 'Deleted items can be restored.',
25
25
  /** What was deleted from Filer: "Slettede filer". */
26
26
  files: 'files',
27
- loadingDeleted: 'Loading deleted items',
27
+ loadingDeleted: 'Loading deleted items…',
28
28
  deletedNotLoaded: (error: string) => `Couldn’t load deleted items: ${error}`,
29
29
  noneDeleted: 'Nothing has been deleted recently',
30
30
  deletedAt: (when: string, by: string) => (by ? `Deleted ${when} by ${by}` : `Deleted ${when}`),
@@ -6,6 +6,8 @@ export const library = {
6
6
  cmsVersion: (version: string) => `Morpheme ${version}`,
7
7
  /** Between the CMS version and the update time in the start screen's status. */
8
8
  statusSeparator: ' · ',
9
+ /** The start screen's FAB menu (StartFab.tsx), which makes a new page or blog post. */
10
+ createNew: 'Create',
9
11
  githubAccount: (login: string) => `GitHub account: ${login}`,
10
12
  logOut: 'Log out',
11
13
  /** The bell in the top bar and its screen (#notifikationer, Notifications.tsx): the messages shown at the bottom. */
@@ -25,9 +27,9 @@ export const library = {
25
27
  off: 'Off',
26
28
  /** Under a theme's name under "Temaer" and on its page: its version and who made it. */
27
29
  themeByline: (version: string, author: string) => `Version ${version} · ${author}`,
28
- /** By the theme the site is built with, under "Temaer" and on its page. */
30
+ /** By the theme the website uses, under "Temaer" and on its page. */
29
31
  themeInUse: 'In use',
30
- /** By the theme it is changed to, until the site is built with it: under "Temaer", and on its page. */
32
+ /** By the theme it is changed to, until the website is updated: under "Temaer", and on its page. */
31
33
  themeNext: 'Changing to it',
32
34
  themeChanging: (name: string) => `Changing to ${name} in a few minutes`,
33
35
  /** On a theme's page: the pictures of the site in it (packages/editor/scripts/theme-screenshots.mjs), each by what it shows. */
@@ -45,24 +47,24 @@ export const library = {
45
47
  themeKeptContent: 'Pages and posts',
46
48
  themeKeptBrand: 'Colors and logo',
47
49
  themeKeptBlocks: "All blocks, in the theme's look",
48
- /** The button on a theme's page that swaps the theme the site is built with to it. */
50
+ /** The button on a theme's page that swaps the theme the website uses to it. */
49
51
  useTheme: 'Use the theme',
50
52
  /** The question's button before the theme is changed. */
51
53
  changeTheme: 'Change theme',
52
54
  /** Asked before the theme is changed. */
53
- changeThemeAsk: (name: string) => `The website gets the theme ${name}. It is updated in a few minutes.`,
55
+ changeThemeAsk: (name: string) => `The website gets the theme ${name} in a few minutes`,
54
56
  /** The commit, in the site's language (siteT). */
55
57
  themeCommit: (name: string) => `Editor: change theme to ${name}`,
56
58
  /** A theme from the store (ThemeStore.tsx): installed, updated or uninstalled, asked before it is uninstalled, why
57
59
  * one in use cannot be, and under "Afinstaller" when it can; a theme the store does not have; how many a developer
58
60
  * has made; and the commits, in the site's language (siteT). */
59
- themeInstalled: (name: string) => `${name} is installed and can be chosen once the website is built`,
60
- themeUpdated: (name: string, version: string) => `${name} is updated to ${version} and looks that way once the website is built`,
61
+ themeInstalled: (name: string) => `${name} is installed. You can choose it in a few minutes.`,
62
+ themeUpdated: (name: string, version: string) => `${name} is updated to ${version}. The website uses it in a few minutes.`,
61
63
  themeUninstalled: (name: string) => `${name} is uninstalled`,
62
64
  askUninstallTheme: (name: string) => `Uninstall ${name}? The theme is removed from the website.`,
63
65
  themeStuck: 'The theme is in use and can’t be uninstalled. Choose another theme first.',
64
66
  themeUninstallHint: 'Can be uninstalled, as the website doesn’t use the theme.',
65
- themePendingHint: 'The theme can be chosen once the website is built.',
67
+ themePendingHint: 'You can choose the theme in a few minutes.',
66
68
  themeNotInStore: 'The theme isn’t in the Appstore',
67
69
  themeCount: (n: number) => (n === 1 ? '1 theme' : `${n} themes`),
68
70
  searchThemes: 'Search for themes',
@@ -79,10 +81,10 @@ export const library = {
79
81
  iconPackFrom: (theme: string) => `From the theme ${theme}`,
80
82
  iconPackSamples: (name: string) => `Icons from ${name}`,
81
83
  iconPackInUse: 'In use',
82
- iconPackNext: 'Changing to it once the website is built',
83
- changeIconPackAsk: (name: string) => `The website and the editor get the icons from ${name} once the website is built in a few minutes`,
84
+ iconPackNext: 'Changing to it in a few minutes',
85
+ changeIconPackAsk: (name: string) => `The website and the editor get the icons from ${name} in a few minutes`,
84
86
  changeIconPack: 'Change icon pack',
85
- iconPackSaved: (change: string) => `${change}. The website and the editor get the new icons once the website is built.`,
87
+ iconPackSaved: (change: string) => `${change}. The website and the editor get the new icons in a few minutes.`,
86
88
  iconPackCommit: (name: string) => `Editor: change icon pack to ${name}`,
87
89
  /** Under "Bevægelse" (MotionSchemes in Library.tsx): each motion scheme's name and how it moves (lib/motion.ts); by the
88
90
  * theme's own; asked before one is chosen, the question's button, what is said after it is saved, and the commit, in
@@ -94,9 +96,9 @@ export const library = {
94
96
  calm: 'What moves does so briefly, and sections are shown right away',
95
97
  },
96
98
  motionOfTheme: 'The theme’s choice',
97
- changeMotionAsk: (name: string) => `The website gets the ${name} motion once it’s built in a few minutes. The editor gets it right away.`,
99
+ changeMotionAsk: (name: string) => `The website gets the ${name} motion in a few minutes. The editor gets it right away.`,
98
100
  changeMotion: 'Change motion',
99
- motionSaved: (change: string) => `${change}. The website gets the new motion once it’s built.`,
101
+ motionSaved: (change: string) => `${change}. The website gets the new motion in a few minutes.`,
100
102
  motionCommit: (name: string) => `Editor: change motion to ${name}`,
101
103
  /** Under "Sidekolonne" (SideColumn.tsx): the choice of no block and what is under it, what is said when no block can be
102
104
  * drawn there, asked before one is chosen, the question's button, what is said after it is saved, and the commit, in
@@ -185,8 +187,12 @@ export const library = {
185
187
  hideSubpages: 'Hide subpages',
186
188
  showSubpagesOf: (title: string) => `Show subpages of ${title}`,
187
189
  hideSubpagesOf: (title: string) => `Hide subpages of ${title}`,
188
- openSidebar: 'Open the sidebar',
189
- closeSidebar: 'Close the sidebar',
190
- sidebar: 'The sidebar',
190
+ /** The name of the main navigation drawer (the site's parts in four sections). */
191
+ navigation: 'Navigation',
192
+ /** The top bar's menu button, which opens and closes that drawer. */
193
+ openMenu: 'Open the menu',
194
+ closeMenu: 'Close the menu',
195
+ /** The back row of a section's list in the main drawer (the first level). */
196
+ mainMenu: 'Main menu',
191
197
  breadcrumbs: 'Breadcrumbs',
192
198
  };
@@ -1,5 +1,5 @@
1
1
  // "Licenser" under "Indstillinger" (Licenses.tsx): the third-party work the site and the editor are made with, and the
2
- // licences on an app's and a theme's page.
2
+ // licenses on an app's and a theme's page.
3
3
  import type { LicenseKind } from '../../licenseData';
4
4
 
5
5
  export const licenses = {
@@ -8,10 +8,10 @@ export const licenses = {
8
8
  system: 'The editor and the site',
9
9
  app: (name: string) => `The app ${name}`,
10
10
  theme: (name: string) => `The theme ${name}`,
11
- /** A licence that gives no rights ("UNLICENSED"), as its name. */
11
+ /** A license that gives no rights ("UNLICENSED"), as its name. */
12
12
  unlicensed: 'All rights reserved',
13
13
  kinds: { font: 'Font', icons: 'Icons', library: 'Code', image: 'Pictures' },
14
- /** Who brings it, after what it is: "Kode i editoren og på sitet". */
14
+ /** Who brings it, after what it is: "Code in the editor and on the site". */
15
15
  inEditor: 'in the editor',
16
16
  onSite: 'on the site',
17
17
  inApp: (name: string) => `in the app ${name}`,
@@ -25,10 +25,10 @@ export const licenses = {
25
25
  version: (version: string) => `Version ${version}`,
26
26
  /** The app's or the theme's own work, first in its group. */
27
27
  own: (name: string) => `${name} itself`,
28
- loading: 'Fetching the licenses',
28
+ loading: 'Loading the licenses…',
29
29
  /** The site has not been built since they came, or the editor is offline. */
30
- missing: 'The licenses come once the site is updated',
31
- /** One licence's page. */
30
+ missing: 'The licenses can be seen in a few minutes',
31
+ /** One license's page. */
32
32
  text: 'License text',
33
33
  noText: 'There’s no license text, as all rights are reserved',
34
34
  standardText: (license: string) => `The package has no license file, so this is the standard text of ${license}.`,
@@ -12,6 +12,8 @@ export const media = {
12
12
  all: 'All',
13
13
  kind: 'Type',
14
14
  allKinds: 'All types',
15
+ tagFilter: 'Tag',
16
+ allTags: 'All tags',
15
17
  /** The kinds of files in Filer: the filter, the buttons in the sheet, and (siteT) in the commits. */
16
18
  kinds: {
17
19
  picture: {
@@ -52,7 +54,7 @@ export const media = {
52
54
  add: 'Add a file',
53
55
  preparing: 'Preparing the picture…',
54
56
  notDeleted: (error: string) => `Couldn’t delete: ${error}`,
55
- nameTaken: 'There’s already a file with that name.',
57
+ nameTaken: 'There’s already a file with that name',
56
58
  tooBig: (mb: number) => `The file is too big. It can be at most ${mb} MB.`,
57
59
  notAFile: 'The file can’t be used. Choose a picture, a PDF, a video, or a zip file.',
58
60
  name: 'Name',
@@ -63,11 +65,15 @@ export const media = {
63
65
  usedOn: 'Used on',
64
66
  siteDesign: "The website's design",
65
67
  noPages: 'No pages',
68
+ tags: 'Tags',
69
+ addTag: 'Add tag',
70
+ createTag: 'Create a tag',
66
71
  /** The commits, in the site's language (siteT); what: a kind's word ("billede", "PDF"). */
67
72
  commit: {
68
73
  add: (what: string, name: string) => `Editor: add ${what} "${name}"`,
69
74
  delete: (what: string, name: string) => `Editor: delete ${what} "${name}"`,
70
75
  rename: (what: string, from: string, to: string) => `Editor: rename ${what} "${from}" to "${to}"`,
76
+ tags: (what: string, name: string) => `Editor: change the tags of ${what} "${name}"`,
71
77
  },
72
78
  crop: {
73
79
  format: 'Format',