create-nextjs-cms 0.5.56 → 0.5.58

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 (337) hide show
  1. package/package.json +4 -4
  2. package/templates/default/CHANGELOG.md +140 -140
  3. package/templates/default/_gitignore +1 -0
  4. package/templates/default/app/(rootLayout)/admins/page.tsx +7 -2
  5. package/templates/default/app/(rootLayout)/advanced/page.tsx +8 -2
  6. package/templates/default/app/(rootLayout)/browse/[section]/[page]/page.tsx +17 -3
  7. package/templates/default/app/(rootLayout)/categorized/[section]/page.tsx +9 -1
  8. package/templates/default/app/(rootLayout)/dashboard-new/page.tsx +7 -0
  9. package/templates/default/app/(rootLayout)/edit/[section]/[itemId]/page.tsx +11 -1
  10. package/templates/default/app/(rootLayout)/layout.tsx +8 -1
  11. package/templates/default/app/(rootLayout)/new/[section]/page.tsx +9 -1
  12. package/templates/default/app/(rootLayout)/section/[section]/page.tsx +10 -1
  13. package/templates/default/app/(rootLayout)/settings/page.tsx +7 -1
  14. package/templates/default/app/api/trpc/[trpc]/route.ts +1 -1
  15. package/templates/default/app/api/video/route.ts +1 -1
  16. package/templates/default/app/layout.tsx +1 -1
  17. package/templates/default/app/providers.tsx +4 -4
  18. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/LICENSE +191 -0
  19. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/README.md +118 -0
  20. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/install/build.js +38 -0
  21. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/install/check.js +14 -0
  22. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/channel.js +177 -0
  23. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/colour.js +195 -0
  24. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/composite.js +212 -0
  25. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/constructor.js +499 -0
  26. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/index.d.ts +1971 -0
  27. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/index.js +16 -0
  28. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/input.js +809 -0
  29. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/is.js +143 -0
  30. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/libvips.js +207 -0
  31. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/operation.js +1016 -0
  32. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/output.js +1666 -0
  33. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/resize.js +595 -0
  34. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/sharp.js +121 -0
  35. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/lib/utility.js +291 -0
  36. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/package.json +202 -0
  37. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/binding.gyp +298 -0
  38. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/common.cc +1130 -0
  39. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/common.h +402 -0
  40. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/metadata.cc +346 -0
  41. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/metadata.h +90 -0
  42. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/operations.cc +499 -0
  43. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/operations.h +137 -0
  44. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/pipeline.cc +1814 -0
  45. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/pipeline.h +408 -0
  46. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/sharp.cc +43 -0
  47. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/stats.cc +186 -0
  48. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/stats.h +62 -0
  49. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/utilities.cc +288 -0
  50. package/templates/default/apps/cms/node_modules/next/node_modules/_tmp_40516_de1b9f7e36eccb968b79dbd2b8c388ea/src/utilities.h +22 -0
  51. package/templates/default/components/BrowsePage.tsx +4 -4
  52. package/templates/default/components/DashboardNewPage.tsx +252 -0
  53. package/templates/default/components/LogPage.tsx +2 -3
  54. package/templates/default/components/SettingsPage.tsx +1 -1
  55. package/templates/default/components/form/Form.tsx +5 -5
  56. package/templates/default/components/form/helpers/util.ts +5 -5
  57. package/templates/default/dynamic-schemas/schema.ts +381 -381
  58. package/templates/default/next-env.d.ts +1 -1
  59. package/templates/default/next.config.ts +24 -0
  60. package/templates/default/package.json +23 -17
  61. package/templates/default/{middleware.ts → proxy.ts} +3 -4
  62. package/templates/default/test/prize.section.ts +58 -0
  63. package/templates/default/tsconfig.json +6 -3
  64. package/templates/default/app/api/placeholder/route.ts +0 -7
  65. package/templates/default/components/form/helpers/_section-hot-reload.js +0 -11
  66. package/templates/default/public/tinymce/CHANGELOG.md +0 -3940
  67. package/templates/default/public/tinymce/README.md +0 -77
  68. package/templates/default/public/tinymce/bower.json +0 -27
  69. package/templates/default/public/tinymce/composer.json +0 -52
  70. package/templates/default/public/tinymce/icons/default/icons.js +0 -239
  71. package/templates/default/public/tinymce/icons/default/icons.min.js +0 -1
  72. package/templates/default/public/tinymce/icons/default/index.js +0 -7
  73. package/templates/default/public/tinymce/license.md +0 -9
  74. package/templates/default/public/tinymce/models/dom/index.js +0 -7
  75. package/templates/default/public/tinymce/models/dom/model.js +0 -8980
  76. package/templates/default/public/tinymce/models/dom/model.min.js +0 -1
  77. package/templates/default/public/tinymce/notices.txt +0 -21
  78. package/templates/default/public/tinymce/package.json +0 -32
  79. package/templates/default/public/tinymce/plugins/accordion/index.js +0 -7
  80. package/templates/default/public/tinymce/plugins/accordion/plugin.js +0 -1373
  81. package/templates/default/public/tinymce/plugins/accordion/plugin.min.js +0 -1
  82. package/templates/default/public/tinymce/plugins/advlist/index.js +0 -7
  83. package/templates/default/public/tinymce/plugins/advlist/plugin.js +0 -473
  84. package/templates/default/public/tinymce/plugins/advlist/plugin.min.js +0 -1
  85. package/templates/default/public/tinymce/plugins/anchor/index.js +0 -7
  86. package/templates/default/public/tinymce/plugins/anchor/plugin.js +0 -237
  87. package/templates/default/public/tinymce/plugins/anchor/plugin.min.js +0 -1
  88. package/templates/default/public/tinymce/plugins/autolink/index.js +0 -7
  89. package/templates/default/public/tinymce/plugins/autolink/plugin.js +0 -315
  90. package/templates/default/public/tinymce/plugins/autolink/plugin.min.js +0 -1
  91. package/templates/default/public/tinymce/plugins/autoresize/index.js +0 -7
  92. package/templates/default/public/tinymce/plugins/autoresize/plugin.js +0 -221
  93. package/templates/default/public/tinymce/plugins/autoresize/plugin.min.js +0 -1
  94. package/templates/default/public/tinymce/plugins/autosave/index.js +0 -7
  95. package/templates/default/public/tinymce/plugins/autosave/plugin.js +0 -249
  96. package/templates/default/public/tinymce/plugins/autosave/plugin.min.js +0 -1
  97. package/templates/default/public/tinymce/plugins/charmap/index.js +0 -7
  98. package/templates/default/public/tinymce/plugins/charmap/plugin.js +0 -997
  99. package/templates/default/public/tinymce/plugins/charmap/plugin.min.js +0 -1
  100. package/templates/default/public/tinymce/plugins/code/index.js +0 -7
  101. package/templates/default/public/tinymce/plugins/code/plugin.js +0 -98
  102. package/templates/default/public/tinymce/plugins/code/plugin.min.js +0 -1
  103. package/templates/default/public/tinymce/plugins/codesample/index.js +0 -7
  104. package/templates/default/public/tinymce/plugins/codesample/plugin.js +0 -3655
  105. package/templates/default/public/tinymce/plugins/codesample/plugin.min.js +0 -9
  106. package/templates/default/public/tinymce/plugins/directionality/index.js +0 -7
  107. package/templates/default/public/tinymce/plugins/directionality/plugin.js +0 -634
  108. package/templates/default/public/tinymce/plugins/directionality/plugin.min.js +0 -1
  109. package/templates/default/public/tinymce/plugins/emoticons/index.js +0 -7
  110. package/templates/default/public/tinymce/plugins/emoticons/js/emojiimages.js +0 -1
  111. package/templates/default/public/tinymce/plugins/emoticons/js/emojiimages.min.js +0 -1
  112. package/templates/default/public/tinymce/plugins/emoticons/js/emojis.js +0 -1
  113. package/templates/default/public/tinymce/plugins/emoticons/js/emojis.min.js +0 -1
  114. package/templates/default/public/tinymce/plugins/emoticons/plugin.js +0 -809
  115. package/templates/default/public/tinymce/plugins/emoticons/plugin.min.js +0 -1
  116. package/templates/default/public/tinymce/plugins/fullscreen/index.js +0 -7
  117. package/templates/default/public/tinymce/plugins/fullscreen/plugin.js +0 -1607
  118. package/templates/default/public/tinymce/plugins/fullscreen/plugin.min.js +0 -1
  119. package/templates/default/public/tinymce/plugins/help/index.js +0 -7
  120. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/ar.js +0 -93
  121. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/bg-BG.js +0 -93
  122. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js +0 -93
  123. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/ca.js +0 -93
  124. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/cs.js +0 -93
  125. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/da.js +0 -93
  126. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/de.js +0 -93
  127. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/el.js +0 -93
  128. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/en.js +0 -93
  129. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/es.js +0 -93
  130. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/eu.js +0 -93
  131. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/fa.js +0 -93
  132. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/fi.js +0 -93
  133. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/fr-FR.js +0 -93
  134. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js +0 -93
  135. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/he-IL.js +0 -93
  136. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js +0 -93
  137. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/hi.js +0 -93
  138. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/hr.js +0 -93
  139. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/hu-HU.js +0 -93
  140. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js +0 -93
  141. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/id.js +0 -93
  142. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/it.js +0 -93
  143. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/ja.js +0 -93
  144. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/kk.js +0 -93
  145. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/ko-KR.js +0 -93
  146. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js +0 -93
  147. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/ms.js +0 -93
  148. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/nb-NO.js +0 -93
  149. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js +0 -93
  150. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/nl.js +0 -93
  151. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/pl.js +0 -93
  152. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/pt-BR.js +0 -93
  153. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/pt-PT.js +0 -93
  154. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js +0 -93
  155. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js +0 -93
  156. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/ro.js +0 -93
  157. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/ru.js +0 -93
  158. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/sk.js +0 -93
  159. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/sl-SI.js +0 -93
  160. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js +0 -93
  161. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/sv-SE.js +0 -93
  162. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js +0 -93
  163. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/th-TH.js +0 -93
  164. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js +0 -93
  165. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/tr.js +0 -93
  166. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/uk.js +0 -93
  167. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/vi.js +0 -93
  168. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/zh-CN.js +0 -87
  169. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/zh-TW.js +0 -93
  170. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js +0 -87
  171. package/templates/default/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js +0 -93
  172. package/templates/default/public/tinymce/plugins/help/plugin.js +0 -826
  173. package/templates/default/public/tinymce/plugins/help/plugin.min.js +0 -1
  174. package/templates/default/public/tinymce/plugins/image/index.js +0 -7
  175. package/templates/default/public/tinymce/plugins/image/plugin.js +0 -1691
  176. package/templates/default/public/tinymce/plugins/image/plugin.min.js +0 -1
  177. package/templates/default/public/tinymce/plugins/importcss/index.js +0 -7
  178. package/templates/default/public/tinymce/plugins/importcss/plugin.js +0 -401
  179. package/templates/default/public/tinymce/plugins/importcss/plugin.min.js +0 -1
  180. package/templates/default/public/tinymce/plugins/insertdatetime/index.js +0 -7
  181. package/templates/default/public/tinymce/plugins/insertdatetime/plugin.js +0 -187
  182. package/templates/default/public/tinymce/plugins/insertdatetime/plugin.min.js +0 -1
  183. package/templates/default/public/tinymce/plugins/link/index.js +0 -7
  184. package/templates/default/public/tinymce/plugins/link/plugin.js +0 -1709
  185. package/templates/default/public/tinymce/plugins/link/plugin.min.js +0 -1
  186. package/templates/default/public/tinymce/plugins/lists/index.js +0 -7
  187. package/templates/default/public/tinymce/plugins/lists/plugin.js +0 -602
  188. package/templates/default/public/tinymce/plugins/lists/plugin.min.js +0 -1
  189. package/templates/default/public/tinymce/plugins/media/index.js +0 -7
  190. package/templates/default/public/tinymce/plugins/media/plugin.js +0 -1442
  191. package/templates/default/public/tinymce/plugins/media/plugin.min.js +0 -1
  192. package/templates/default/public/tinymce/plugins/nonbreaking/index.js +0 -7
  193. package/templates/default/public/tinymce/plugins/nonbreaking/plugin.js +0 -128
  194. package/templates/default/public/tinymce/plugins/nonbreaking/plugin.min.js +0 -1
  195. package/templates/default/public/tinymce/plugins/pagebreak/index.js +0 -7
  196. package/templates/default/public/tinymce/plugins/pagebreak/plugin.js +0 -123
  197. package/templates/default/public/tinymce/plugins/pagebreak/plugin.min.js +0 -1
  198. package/templates/default/public/tinymce/plugins/preview/index.js +0 -7
  199. package/templates/default/public/tinymce/plugins/preview/plugin.js +0 -843
  200. package/templates/default/public/tinymce/plugins/preview/plugin.min.js +0 -1
  201. package/templates/default/public/tinymce/plugins/quickbars/index.js +0 -7
  202. package/templates/default/public/tinymce/plugins/quickbars/plugin.js +0 -654
  203. package/templates/default/public/tinymce/plugins/quickbars/plugin.min.js +0 -1
  204. package/templates/default/public/tinymce/plugins/save/index.js +0 -7
  205. package/templates/default/public/tinymce/plugins/save/plugin.js +0 -136
  206. package/templates/default/public/tinymce/plugins/save/plugin.min.js +0 -1
  207. package/templates/default/public/tinymce/plugins/searchreplace/index.js +0 -7
  208. package/templates/default/public/tinymce/plugins/searchreplace/plugin.js +0 -1367
  209. package/templates/default/public/tinymce/plugins/searchreplace/plugin.min.js +0 -1
  210. package/templates/default/public/tinymce/plugins/table/index.js +0 -7
  211. package/templates/default/public/tinymce/plugins/table/plugin.js +0 -4008
  212. package/templates/default/public/tinymce/plugins/table/plugin.min.js +0 -1
  213. package/templates/default/public/tinymce/plugins/visualblocks/index.js +0 -7
  214. package/templates/default/public/tinymce/plugins/visualblocks/plugin.js +0 -106
  215. package/templates/default/public/tinymce/plugins/visualblocks/plugin.min.js +0 -1
  216. package/templates/default/public/tinymce/plugins/visualchars/index.js +0 -7
  217. package/templates/default/public/tinymce/plugins/visualchars/plugin.js +0 -808
  218. package/templates/default/public/tinymce/plugins/visualchars/plugin.min.js +0 -1
  219. package/templates/default/public/tinymce/plugins/wordcount/index.js +0 -7
  220. package/templates/default/public/tinymce/plugins/wordcount/plugin.js +0 -480
  221. package/templates/default/public/tinymce/plugins/wordcount/plugin.min.js +0 -1
  222. package/templates/default/public/tinymce/skins/content/dark/content.css +0 -75
  223. package/templates/default/public/tinymce/skins/content/dark/content.js +0 -10
  224. package/templates/default/public/tinymce/skins/content/dark/content.min.css +0 -10
  225. package/templates/default/public/tinymce/skins/content/dark/content.min.ts +0 -3
  226. package/templates/default/public/tinymce/skins/content/dark/content.ts +0 -3
  227. package/templates/default/public/tinymce/skins/content/default/content.css +0 -70
  228. package/templates/default/public/tinymce/skins/content/default/content.js +0 -10
  229. package/templates/default/public/tinymce/skins/content/default/content.min.css +0 -10
  230. package/templates/default/public/tinymce/skins/content/default/content.min.ts +0 -3
  231. package/templates/default/public/tinymce/skins/content/default/content.ts +0 -3
  232. package/templates/default/public/tinymce/skins/content/document/content.css +0 -75
  233. package/templates/default/public/tinymce/skins/content/document/content.js +0 -10
  234. package/templates/default/public/tinymce/skins/content/document/content.min.css +0 -10
  235. package/templates/default/public/tinymce/skins/content/document/content.min.ts +0 -3
  236. package/templates/default/public/tinymce/skins/content/document/content.ts +0 -3
  237. package/templates/default/public/tinymce/skins/content/tinymce-5/content.css +0 -70
  238. package/templates/default/public/tinymce/skins/content/tinymce-5/content.js +0 -10
  239. package/templates/default/public/tinymce/skins/content/tinymce-5/content.min.css +0 -10
  240. package/templates/default/public/tinymce/skins/content/tinymce-5/content.min.ts +0 -3
  241. package/templates/default/public/tinymce/skins/content/tinymce-5/content.ts +0 -3
  242. package/templates/default/public/tinymce/skins/content/tinymce-5-dark/content.css +0 -75
  243. package/templates/default/public/tinymce/skins/content/tinymce-5-dark/content.js +0 -10
  244. package/templates/default/public/tinymce/skins/content/tinymce-5-dark/content.min.css +0 -10
  245. package/templates/default/public/tinymce/skins/content/tinymce-5-dark/content.min.ts +0 -3
  246. package/templates/default/public/tinymce/skins/content/tinymce-5-dark/content.ts +0 -3
  247. package/templates/default/public/tinymce/skins/content/writer/content.css +0 -71
  248. package/templates/default/public/tinymce/skins/content/writer/content.js +0 -10
  249. package/templates/default/public/tinymce/skins/content/writer/content.min.css +0 -10
  250. package/templates/default/public/tinymce/skins/content/writer/content.min.ts +0 -3
  251. package/templates/default/public/tinymce/skins/content/writer/content.ts +0 -3
  252. package/templates/default/public/tinymce/skins/ui/oxide/content.css +0 -1037
  253. package/templates/default/public/tinymce/skins/ui/oxide/content.inline.css +0 -1031
  254. package/templates/default/public/tinymce/skins/ui/oxide/content.inline.js +0 -10
  255. package/templates/default/public/tinymce/skins/ui/oxide/content.inline.min.css +0 -10
  256. package/templates/default/public/tinymce/skins/ui/oxide/content.inline.min.ts +0 -116
  257. package/templates/default/public/tinymce/skins/ui/oxide/content.inline.ts +0 -116
  258. package/templates/default/public/tinymce/skins/ui/oxide/content.js +0 -10
  259. package/templates/default/public/tinymce/skins/ui/oxide/content.min.css +0 -10
  260. package/templates/default/public/tinymce/skins/ui/oxide/content.min.ts +0 -116
  261. package/templates/default/public/tinymce/skins/ui/oxide/content.ts +0 -116
  262. package/templates/default/public/tinymce/skins/ui/oxide/skin.css +0 -5615
  263. package/templates/default/public/tinymce/skins/ui/oxide/skin.js +0 -1
  264. package/templates/default/public/tinymce/skins/ui/oxide/skin.min.css +0 -1
  265. package/templates/default/public/tinymce/skins/ui/oxide/skin.min.ts +0 -507
  266. package/templates/default/public/tinymce/skins/ui/oxide/skin.shadowdom.css +0 -30
  267. package/templates/default/public/tinymce/skins/ui/oxide/skin.shadowdom.js +0 -1
  268. package/templates/default/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css +0 -1
  269. package/templates/default/public/tinymce/skins/ui/oxide/skin.shadowdom.min.ts +0 -9
  270. package/templates/default/public/tinymce/skins/ui/oxide/skin.shadowdom.ts +0 -9
  271. package/templates/default/public/tinymce/skins/ui/oxide/skin.ts +0 -507
  272. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.css +0 -1025
  273. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.inline.css +0 -1031
  274. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.inline.js +0 -10
  275. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.inline.min.css +0 -10
  276. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.inline.min.ts +0 -116
  277. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.inline.ts +0 -116
  278. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.js +0 -10
  279. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.min.css +0 -10
  280. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.min.ts +0 -116
  281. package/templates/default/public/tinymce/skins/ui/oxide-dark/content.ts +0 -116
  282. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.css +0 -5618
  283. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.js +0 -1
  284. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.min.css +0 -1
  285. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.min.ts +0 -507
  286. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css +0 -30
  287. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.js +0 -1
  288. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +0 -1
  289. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.ts +0 -9
  290. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.ts +0 -9
  291. package/templates/default/public/tinymce/skins/ui/oxide-dark/skin.ts +0 -507
  292. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.css +0 -1037
  293. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.inline.css +0 -1031
  294. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.inline.js +0 -10
  295. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.inline.min.css +0 -10
  296. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.inline.min.ts +0 -116
  297. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.inline.ts +0 -116
  298. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.js +0 -10
  299. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.min.css +0 -10
  300. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.min.ts +0 -116
  301. package/templates/default/public/tinymce/skins/ui/tinymce-5/content.ts +0 -116
  302. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.css +0 -5734
  303. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.js +0 -1
  304. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.min.css +0 -1
  305. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.min.ts +0 -508
  306. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.css +0 -30
  307. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.js +0 -1
  308. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css +0 -1
  309. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.ts +0 -9
  310. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.ts +0 -9
  311. package/templates/default/public/tinymce/skins/ui/tinymce-5/skin.ts +0 -508
  312. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.css +0 -1025
  313. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.inline.css +0 -1031
  314. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.inline.js +0 -10
  315. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css +0 -10
  316. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.ts +0 -116
  317. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.inline.ts +0 -116
  318. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.js +0 -10
  319. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.min.css +0 -10
  320. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.min.ts +0 -116
  321. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/content.ts +0 -116
  322. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.css +0 -5734
  323. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.js +0 -1
  324. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.min.css +0 -1
  325. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.min.ts +0 -508
  326. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.css +0 -30
  327. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js +0 -1
  328. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css +0 -1
  329. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.ts +0 -9
  330. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.ts +0 -9
  331. package/templates/default/public/tinymce/skins/ui/tinymce-5-dark/skin.ts +0 -508
  332. package/templates/default/public/tinymce/themes/silver/index.js +0 -7
  333. package/templates/default/public/tinymce/themes/silver/theme.js +0 -34748
  334. package/templates/default/public/tinymce/themes/silver/theme.min.js +0 -1
  335. package/templates/default/public/tinymce/tinymce.d.ts +0 -3413
  336. package/templates/default/public/tinymce/tinymce.js +0 -41518
  337. package/templates/default/public/tinymce/tinymce.min.js +0 -10
@@ -0,0 +1,499 @@
1
+ /*!
2
+ Copyright 2013 Lovell Fuller and others.
3
+ SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ #include <algorithm>
7
+ #include <functional>
8
+ #include <memory>
9
+ #include <tuple>
10
+ #include <vector>
11
+ #include <vips/vips8>
12
+
13
+ #include "./common.h"
14
+ #include "./operations.h"
15
+
16
+ using vips::VImage;
17
+ using vips::VError;
18
+
19
+ namespace sharp {
20
+ /*
21
+ * Tint an image using the provided RGB.
22
+ */
23
+ VImage Tint(VImage image, std::vector<double> const tint) {
24
+ std::vector<double> const tintLab = (VImage::black(1, 1) + tint)
25
+ .colourspace(VIPS_INTERPRETATION_LAB, VImage::option()->set("source_space", VIPS_INTERPRETATION_sRGB))
26
+ .getpoint(0, 0);
27
+ // LAB identity function
28
+ VImage identityLab = VImage::identity(VImage::option()->set("bands", 3))
29
+ .colourspace(VIPS_INTERPRETATION_LAB, VImage::option()->set("source_space", VIPS_INTERPRETATION_sRGB));
30
+ // Scale luminance range, 0.0 to 1.0
31
+ VImage l = identityLab[0] / 100;
32
+ // Weighting functions
33
+ VImage weightL = 1.0 - 4.0 * ((l - 0.5) * (l - 0.5));
34
+ VImage weightAB = (weightL * tintLab).extract_band(1, VImage::option()->set("n", 2));
35
+ identityLab = identityLab[0].bandjoin(weightAB);
36
+ // Convert lookup table to sRGB
37
+ VImage lut = identityLab.colourspace(VIPS_INTERPRETATION_sRGB,
38
+ VImage::option()->set("source_space", VIPS_INTERPRETATION_LAB));
39
+ // Original colourspace
40
+ VipsInterpretation typeBeforeTint = image.interpretation();
41
+ if (typeBeforeTint == VIPS_INTERPRETATION_RGB) {
42
+ typeBeforeTint = VIPS_INTERPRETATION_sRGB;
43
+ }
44
+ // Apply lookup table
45
+ if (image.has_alpha()) {
46
+ VImage alpha = image[image.bands() - 1];
47
+ image = RemoveAlpha(image)
48
+ .colourspace(VIPS_INTERPRETATION_B_W)
49
+ .maplut(lut)
50
+ .colourspace(typeBeforeTint)
51
+ .bandjoin(alpha);
52
+ } else {
53
+ image = image
54
+ .colourspace(VIPS_INTERPRETATION_B_W)
55
+ .maplut(lut)
56
+ .colourspace(typeBeforeTint);
57
+ }
58
+ return image;
59
+ }
60
+
61
+ /*
62
+ * Stretch luminance to cover full dynamic range.
63
+ */
64
+ VImage Normalise(VImage image, int const lower, int const upper) {
65
+ // Get original colourspace
66
+ VipsInterpretation typeBeforeNormalize = image.interpretation();
67
+ if (typeBeforeNormalize == VIPS_INTERPRETATION_RGB) {
68
+ typeBeforeNormalize = VIPS_INTERPRETATION_sRGB;
69
+ }
70
+ // Convert to LAB colourspace
71
+ VImage lab = image.colourspace(VIPS_INTERPRETATION_LAB);
72
+ // Extract luminance
73
+ VImage luminance = lab[0];
74
+
75
+ // Find luminance range
76
+ int const min = lower == 0 ? luminance.min() : luminance.percent(lower);
77
+ int const max = upper == 100 ? luminance.max() : luminance.percent(upper);
78
+
79
+ if (std::abs(max - min) > 1) {
80
+ // Extract chroma
81
+ VImage chroma = lab.extract_band(1, VImage::option()->set("n", 2));
82
+ // Calculate multiplication factor and addition
83
+ double f = 100.0 / (max - min);
84
+ double a = -(min * f);
85
+ // Scale luminance, join to chroma, convert back to original colourspace
86
+ VImage normalized = luminance.linear(f, a).bandjoin(chroma).colourspace(typeBeforeNormalize);
87
+ // Attach original alpha channel, if any
88
+ if (image.has_alpha()) {
89
+ // Extract original alpha channel
90
+ VImage alpha = image[image.bands() - 1];
91
+ // Join alpha channel to normalised image
92
+ return normalized.bandjoin(alpha);
93
+ } else {
94
+ return normalized;
95
+ }
96
+ }
97
+ return image;
98
+ }
99
+
100
+ /*
101
+ * Contrast limiting adapative histogram equalization (CLAHE)
102
+ */
103
+ VImage Clahe(VImage image, int const width, int const height, int const maxSlope) {
104
+ return image.hist_local(width, height, VImage::option()->set("max_slope", maxSlope));
105
+ }
106
+
107
+ /*
108
+ * Gamma encoding/decoding
109
+ */
110
+ VImage Gamma(VImage image, double const exponent) {
111
+ if (image.has_alpha()) {
112
+ // Separate alpha channel
113
+ VImage alpha = image[image.bands() - 1];
114
+ return RemoveAlpha(image).gamma(VImage::option()->set("exponent", exponent)).bandjoin(alpha);
115
+ } else {
116
+ return image.gamma(VImage::option()->set("exponent", exponent));
117
+ }
118
+ }
119
+
120
+ /*
121
+ * Flatten image to remove alpha channel
122
+ */
123
+ VImage Flatten(VImage image, std::vector<double> flattenBackground) {
124
+ double const multiplier = sharp::Is16Bit(image.interpretation()) ? 256.0 : 1.0;
125
+ std::vector<double> background {
126
+ flattenBackground[0] * multiplier,
127
+ flattenBackground[1] * multiplier,
128
+ flattenBackground[2] * multiplier
129
+ };
130
+ return image.flatten(VImage::option()->set("background", background));
131
+ }
132
+
133
+ /**
134
+ * Produce the "negative" of the image.
135
+ */
136
+ VImage Negate(VImage image, bool const negateAlpha) {
137
+ if (image.has_alpha() && !negateAlpha) {
138
+ // Separate alpha channel
139
+ VImage alpha = image[image.bands() - 1];
140
+ return RemoveAlpha(image).invert().bandjoin(alpha);
141
+ } else {
142
+ return image.invert();
143
+ }
144
+ }
145
+
146
+ /*
147
+ * Gaussian blur. Use sigma of -1.0 for fast blur.
148
+ */
149
+ VImage Blur(VImage image, double const sigma, VipsPrecision precision, double const minAmpl) {
150
+ if (sigma == -1.0) {
151
+ // Fast, mild blur - averages neighbouring pixels
152
+ VImage blur = VImage::new_matrixv(3, 3,
153
+ 1.0, 1.0, 1.0,
154
+ 1.0, 1.0, 1.0,
155
+ 1.0, 1.0, 1.0);
156
+ blur.set("scale", 9.0);
157
+ return image.conv(blur);
158
+ } else {
159
+ // Slower, accurate Gaussian blur
160
+ return StaySequential(image).gaussblur(sigma, VImage::option()
161
+ ->set("precision", precision)
162
+ ->set("min_ampl", minAmpl));
163
+ }
164
+ }
165
+
166
+ /*
167
+ * Convolution with a kernel.
168
+ */
169
+ VImage Convolve(VImage image, int const width, int const height,
170
+ double const scale, double const offset,
171
+ std::vector<double> const &kernel_v
172
+ ) {
173
+ VImage kernel = VImage::new_from_memory(
174
+ static_cast<void*>(const_cast<double*>(kernel_v.data())),
175
+ width * height * sizeof(double),
176
+ width,
177
+ height,
178
+ 1,
179
+ VIPS_FORMAT_DOUBLE);
180
+ kernel.set("scale", scale);
181
+ kernel.set("offset", offset);
182
+
183
+ return image.conv(kernel);
184
+ }
185
+
186
+ /*
187
+ * Recomb with a Matrix of the given bands/channel size.
188
+ * Eg. RGB will be a 3x3 matrix.
189
+ */
190
+ VImage Recomb(VImage image, std::vector<double> const& matrix) {
191
+ double* m = const_cast<double*>(matrix.data());
192
+ image = image.colourspace(VIPS_INTERPRETATION_sRGB);
193
+ if (matrix.size() == 9) {
194
+ return image
195
+ .recomb(image.bands() == 3
196
+ ? VImage::new_matrix(3, 3, m, 9)
197
+ : VImage::new_matrixv(4, 4,
198
+ m[0], m[1], m[2], 0.0,
199
+ m[3], m[4], m[5], 0.0,
200
+ m[6], m[7], m[8], 0.0,
201
+ 0.0, 0.0, 0.0, 1.0));
202
+ } else {
203
+ return image.recomb(VImage::new_matrix(4, 4, m, 16));
204
+ }
205
+ }
206
+
207
+ VImage Modulate(VImage image, double const brightness, double const saturation,
208
+ int const hue, double const lightness) {
209
+ VipsInterpretation colourspaceBeforeModulate = image.interpretation();
210
+ if (image.has_alpha()) {
211
+ // Separate alpha channel
212
+ VImage alpha = image[image.bands() - 1];
213
+ return RemoveAlpha(image)
214
+ .colourspace(VIPS_INTERPRETATION_LCH)
215
+ .linear(
216
+ { brightness, saturation, 1},
217
+ { lightness, 0.0, static_cast<double>(hue) }
218
+ )
219
+ .colourspace(colourspaceBeforeModulate)
220
+ .bandjoin(alpha);
221
+ } else {
222
+ return image
223
+ .colourspace(VIPS_INTERPRETATION_LCH)
224
+ .linear(
225
+ { brightness, saturation, 1 },
226
+ { lightness, 0.0, static_cast<double>(hue) }
227
+ )
228
+ .colourspace(colourspaceBeforeModulate);
229
+ }
230
+ }
231
+
232
+ /*
233
+ * Sharpen flat and jagged areas. Use sigma of -1.0 for fast sharpen.
234
+ */
235
+ VImage Sharpen(VImage image, double const sigma, double const m1, double const m2,
236
+ double const x1, double const y2, double const y3) {
237
+ if (sigma == -1.0) {
238
+ // Fast, mild sharpen
239
+ VImage sharpen = VImage::new_matrixv(3, 3,
240
+ -1.0, -1.0, -1.0,
241
+ -1.0, 32.0, -1.0,
242
+ -1.0, -1.0, -1.0);
243
+ sharpen.set("scale", 24.0);
244
+ return image.conv(sharpen);
245
+ } else {
246
+ // Slow, accurate sharpen in LAB colour space, with control over flat vs jagged areas
247
+ VipsInterpretation colourspaceBeforeSharpen = image.interpretation();
248
+ if (colourspaceBeforeSharpen == VIPS_INTERPRETATION_RGB) {
249
+ colourspaceBeforeSharpen = VIPS_INTERPRETATION_sRGB;
250
+ }
251
+ return image
252
+ .sharpen(VImage::option()
253
+ ->set("sigma", sigma)
254
+ ->set("m1", m1)
255
+ ->set("m2", m2)
256
+ ->set("x1", x1)
257
+ ->set("y2", y2)
258
+ ->set("y3", y3))
259
+ .colourspace(colourspaceBeforeSharpen);
260
+ }
261
+ }
262
+
263
+ VImage Threshold(VImage image, double const threshold, bool const thresholdGrayscale) {
264
+ if (!thresholdGrayscale) {
265
+ return image >= threshold;
266
+ }
267
+ return image.colourspace(VIPS_INTERPRETATION_B_W) >= threshold;
268
+ }
269
+
270
+ /*
271
+ Perform boolean/bitwise operation on image color channels - results in one channel image
272
+ */
273
+ VImage Bandbool(VImage image, VipsOperationBoolean const boolean) {
274
+ image = image.bandbool(boolean);
275
+ return image.copy(VImage::option()->set("interpretation", VIPS_INTERPRETATION_B_W));
276
+ }
277
+
278
+ /*
279
+ Perform bitwise boolean operation between images
280
+ */
281
+ VImage Boolean(VImage image, VImage imageR, VipsOperationBoolean const boolean) {
282
+ return image.boolean(imageR, boolean);
283
+ }
284
+
285
+ /*
286
+ Trim an image
287
+ */
288
+ VImage Trim(VImage image, std::vector<double> background, double threshold, bool const lineArt) {
289
+ if (image.width() < 3 && image.height() < 3) {
290
+ throw VError("Image to trim must be at least 3x3 pixels");
291
+ }
292
+ if (background.size() == 0) {
293
+ // Top-left pixel provides the default background colour if none is given
294
+ background = image.extract_area(0, 0, 1, 1)(0, 0);
295
+ } else if (sharp::Is16Bit(image.interpretation())) {
296
+ for (size_t i = 0; i < background.size(); i++) {
297
+ background[i] *= 256.0;
298
+ }
299
+ threshold *= 256.0;
300
+ }
301
+ std::vector<double> backgroundAlpha({ background.back() });
302
+ if (image.has_alpha()) {
303
+ background.pop_back();
304
+ } else {
305
+ background.resize(image.bands());
306
+ }
307
+ int left, top, width, height;
308
+ left = image.find_trim(&top, &width, &height, VImage::option()
309
+ ->set("background", background)
310
+ ->set("line_art", lineArt)
311
+ ->set("threshold", threshold));
312
+ if (image.has_alpha()) {
313
+ // Search alpha channel (A)
314
+ int leftA, topA, widthA, heightA;
315
+ VImage alpha = image[image.bands() - 1];
316
+ leftA = alpha.find_trim(&topA, &widthA, &heightA, VImage::option()
317
+ ->set("background", backgroundAlpha)
318
+ ->set("line_art", lineArt)
319
+ ->set("threshold", threshold));
320
+ if (widthA > 0 && heightA > 0) {
321
+ if (width > 0 && height > 0) {
322
+ // Combined bounding box (B)
323
+ int const leftB = std::min(left, leftA);
324
+ int const topB = std::min(top, topA);
325
+ int const widthB = std::max(left + width, leftA + widthA) - leftB;
326
+ int const heightB = std::max(top + height, topA + heightA) - topB;
327
+ return image.extract_area(leftB, topB, widthB, heightB);
328
+ } else {
329
+ // Use alpha only
330
+ return image.extract_area(leftA, topA, widthA, heightA);
331
+ }
332
+ }
333
+ }
334
+ if (width > 0 && height > 0) {
335
+ return image.extract_area(left, top, width, height);
336
+ }
337
+ return image;
338
+ }
339
+
340
+ /*
341
+ * Calculate (a * in + b)
342
+ */
343
+ VImage Linear(VImage image, std::vector<double> const a, std::vector<double> const b) {
344
+ size_t const bands = static_cast<size_t>(image.bands());
345
+ if (a.size() > bands) {
346
+ throw VError("Band expansion using linear is unsupported");
347
+ }
348
+ bool const uchar = !Is16Bit(image.interpretation());
349
+ if (image.has_alpha() && a.size() != bands && (a.size() == 1 || a.size() == bands - 1 || bands - 1 == 1)) {
350
+ // Separate alpha channel
351
+ VImage alpha = image[bands - 1];
352
+ return RemoveAlpha(image).linear(a, b, VImage::option()->set("uchar", uchar)).bandjoin(alpha);
353
+ } else {
354
+ return image.linear(a, b, VImage::option()->set("uchar", uchar));
355
+ }
356
+ }
357
+
358
+ /*
359
+ * Unflatten
360
+ */
361
+ VImage Unflatten(VImage image) {
362
+ if (image.has_alpha()) {
363
+ VImage alpha = image[image.bands() - 1];
364
+ VImage noAlpha = RemoveAlpha(image);
365
+ return noAlpha.bandjoin(alpha & (noAlpha.colourspace(VIPS_INTERPRETATION_B_W) < 255));
366
+ } else {
367
+ return image.bandjoin(image.colourspace(VIPS_INTERPRETATION_B_W) < 255);
368
+ }
369
+ }
370
+
371
+ /*
372
+ * Ensure the image is in a given colourspace
373
+ */
374
+ VImage EnsureColourspace(VImage image, VipsInterpretation colourspace) {
375
+ if (colourspace != VIPS_INTERPRETATION_LAST && image.interpretation() != colourspace) {
376
+ image = image.colourspace(colourspace,
377
+ VImage::option()->set("source_space", image.interpretation()));
378
+ }
379
+ return image;
380
+ }
381
+
382
+ /*
383
+ * Split and crop each frame, reassemble, and update pageHeight.
384
+ */
385
+ VImage CropMultiPage(VImage image, int left, int top, int width, int height,
386
+ int nPages, int *pageHeight) {
387
+ if (top == 0 && height == *pageHeight) {
388
+ // Fast path; no need to adjust the height of the multi-page image
389
+ return image.extract_area(left, 0, width, image.height());
390
+ } else {
391
+ std::vector<VImage> pages;
392
+ pages.reserve(nPages);
393
+
394
+ // Split the image into cropped frames
395
+ image = StaySequential(image);
396
+ for (int i = 0; i < nPages; i++) {
397
+ pages.push_back(
398
+ image.extract_area(left, *pageHeight * i + top, width, height));
399
+ }
400
+
401
+ // Reassemble the frames into a tall, thin image
402
+ VImage assembled = VImage::arrayjoin(pages,
403
+ VImage::option()->set("across", 1));
404
+
405
+ // Update the page height
406
+ *pageHeight = height;
407
+
408
+ return assembled;
409
+ }
410
+ }
411
+
412
+ /*
413
+ * Split into frames, embed each frame, reassemble, and update pageHeight.
414
+ */
415
+ VImage EmbedMultiPage(VImage image, int left, int top, int width, int height,
416
+ VipsExtend extendWith, std::vector<double> background, int nPages, int *pageHeight) {
417
+ if (top == 0 && height == *pageHeight) {
418
+ // Fast path; no need to adjust the height of the multi-page image
419
+ return image.embed(left, 0, width, image.height(), VImage::option()
420
+ ->set("extend", extendWith)
421
+ ->set("background", background));
422
+ } else if (left == 0 && width == image.width()) {
423
+ // Fast path; no need to adjust the width of the multi-page image
424
+ std::vector<VImage> pages;
425
+ pages.reserve(nPages);
426
+
427
+ // Rearrange the tall image into a vertical grid
428
+ image = image.grid(*pageHeight, nPages, 1);
429
+
430
+ // Do the embed on the wide image
431
+ image = image.embed(0, top, image.width(), height, VImage::option()
432
+ ->set("extend", extendWith)
433
+ ->set("background", background));
434
+
435
+ // Split the wide image into frames
436
+ for (int i = 0; i < nPages; i++) {
437
+ pages.push_back(
438
+ image.extract_area(width * i, 0, width, height));
439
+ }
440
+
441
+ // Reassemble the frames into a tall, thin image
442
+ VImage assembled = VImage::arrayjoin(pages,
443
+ VImage::option()->set("across", 1));
444
+
445
+ // Update the page height
446
+ *pageHeight = height;
447
+
448
+ return assembled;
449
+ } else {
450
+ std::vector<VImage> pages;
451
+ pages.reserve(nPages);
452
+
453
+ // Split the image into frames
454
+ for (int i = 0; i < nPages; i++) {
455
+ pages.push_back(
456
+ image.extract_area(0, *pageHeight * i, image.width(), *pageHeight));
457
+ }
458
+
459
+ // Embed each frame in the target size
460
+ for (int i = 0; i < nPages; i++) {
461
+ pages[i] = pages[i].embed(left, top, width, height, VImage::option()
462
+ ->set("extend", extendWith)
463
+ ->set("background", background));
464
+ }
465
+
466
+ // Reassemble the frames into a tall, thin image
467
+ VImage assembled = VImage::arrayjoin(pages,
468
+ VImage::option()->set("across", 1));
469
+
470
+ // Update the page height
471
+ *pageHeight = height;
472
+
473
+ return assembled;
474
+ }
475
+ }
476
+
477
+ /*
478
+ * Dilate an image
479
+ */
480
+ VImage Dilate(VImage image, int const width) {
481
+ int const maskWidth = 2 * width + 1;
482
+ VImage mask = VImage::new_matrix(maskWidth, maskWidth);
483
+ return image.morph(
484
+ mask,
485
+ VIPS_OPERATION_MORPHOLOGY_DILATE).invert();
486
+ }
487
+
488
+ /*
489
+ * Erode an image
490
+ */
491
+ VImage Erode(VImage image, int const width) {
492
+ int const maskWidth = 2 * width + 1;
493
+ VImage mask = VImage::new_matrix(maskWidth, maskWidth);
494
+ return image.morph(
495
+ mask,
496
+ VIPS_OPERATION_MORPHOLOGY_ERODE).invert();
497
+ }
498
+
499
+ } // namespace sharp
@@ -0,0 +1,137 @@
1
+ /*!
2
+ Copyright 2013 Lovell Fuller and others.
3
+ SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ #ifndef SRC_OPERATIONS_H_
7
+ #define SRC_OPERATIONS_H_
8
+
9
+ #include <algorithm>
10
+ #include <functional>
11
+ #include <memory>
12
+ #include <tuple>
13
+ #include <vector>
14
+ #include <vips/vips8>
15
+
16
+ using vips::VImage;
17
+
18
+ namespace sharp {
19
+
20
+ /*
21
+ * Tint an image using the provided RGB.
22
+ */
23
+ VImage Tint(VImage image, std::vector<double> const tint);
24
+
25
+ /*
26
+ * Stretch luminance to cover full dynamic range.
27
+ */
28
+ VImage Normalise(VImage image, int const lower, int const upper);
29
+
30
+ /*
31
+ * Contrast limiting adapative histogram equalization (CLAHE)
32
+ */
33
+ VImage Clahe(VImage image, int const width, int const height, int const maxSlope);
34
+
35
+ /*
36
+ * Gamma encoding/decoding
37
+ */
38
+ VImage Gamma(VImage image, double const exponent);
39
+
40
+ /*
41
+ * Flatten image to remove alpha channel
42
+ */
43
+ VImage Flatten(VImage image, std::vector<double> flattenBackground);
44
+
45
+ /*
46
+ * Produce the "negative" of the image.
47
+ */
48
+ VImage Negate(VImage image, bool const negateAlpha);
49
+
50
+ /*
51
+ * Gaussian blur. Use sigma of -1.0 for fast blur.
52
+ */
53
+ VImage Blur(VImage image, double const sigma, VipsPrecision precision, double const minAmpl);
54
+
55
+ /*
56
+ * Convolution with a kernel.
57
+ */
58
+ VImage Convolve(VImage image, int const width, int const height,
59
+ double const scale, double const offset, std::vector<double> const &kernel_v);
60
+
61
+ /*
62
+ * Sharpen flat and jagged areas. Use sigma of -1.0 for fast sharpen.
63
+ */
64
+ VImage Sharpen(VImage image, double const sigma, double const m1, double const m2,
65
+ double const x1, double const y2, double const y3);
66
+
67
+ /*
68
+ Threshold an image
69
+ */
70
+ VImage Threshold(VImage image, double const threshold, bool const thresholdColor);
71
+
72
+ /*
73
+ Perform boolean/bitwise operation on image color channels - results in one channel image
74
+ */
75
+ VImage Bandbool(VImage image, VipsOperationBoolean const boolean);
76
+
77
+ /*
78
+ Perform bitwise boolean operation between images
79
+ */
80
+ VImage Boolean(VImage image, VImage imageR, VipsOperationBoolean const boolean);
81
+
82
+ /*
83
+ Trim an image
84
+ */
85
+ VImage Trim(VImage image, std::vector<double> background, double threshold, bool const lineArt);
86
+
87
+ /*
88
+ * Linear adjustment (a * in + b)
89
+ */
90
+ VImage Linear(VImage image, std::vector<double> const a, std::vector<double> const b);
91
+
92
+ /*
93
+ * Unflatten
94
+ */
95
+ VImage Unflatten(VImage image);
96
+
97
+ /*
98
+ * Recomb with a Matrix of the given bands/channel size.
99
+ * Eg. RGB will be a 3x3 matrix.
100
+ */
101
+ VImage Recomb(VImage image, std::vector<double> const &matrix);
102
+
103
+ /*
104
+ * Modulate brightness, saturation, hue and lightness
105
+ */
106
+ VImage Modulate(VImage image, double const brightness, double const saturation,
107
+ int const hue, double const lightness);
108
+
109
+ /*
110
+ * Ensure the image is in a given colourspace
111
+ */
112
+ VImage EnsureColourspace(VImage image, VipsInterpretation colourspace);
113
+
114
+ /*
115
+ * Split and crop each frame, reassemble, and update pageHeight.
116
+ */
117
+ VImage CropMultiPage(VImage image, int left, int top, int width, int height,
118
+ int nPages, int *pageHeight);
119
+
120
+ /*
121
+ * Split into frames, embed each frame, reassemble, and update pageHeight.
122
+ */
123
+ VImage EmbedMultiPage(VImage image, int left, int top, int width, int height,
124
+ VipsExtend extendWith, std::vector<double> background, int nPages, int *pageHeight);
125
+
126
+ /*
127
+ * Dilate an image
128
+ */
129
+ VImage Dilate(VImage image, int const maskWidth);
130
+
131
+ /*
132
+ * Erode an image
133
+ */
134
+ VImage Erode(VImage image, int const maskWidth);
135
+ } // namespace sharp
136
+
137
+ #endif // SRC_OPERATIONS_H_