@simple-reporting/base 0.1.111 → 1.0.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 (773) hide show
  1. package/.github/workflows/npm-publish.yml +24 -25
  2. package/.nvmrc +1 -1
  3. package/README.md +23 -23
  4. package/cli.js +121 -114
  5. package/dev/.ddev/nginx_full/custom.conf +12 -12
  6. package/dev/index.html +18 -17
  7. package/dev/livingdocs.config.json +154 -376
  8. package/dev/package.json +64 -60
  9. package/dev/pdf/pdf-configuration-debug.xml +8 -5
  10. package/dev/pdf/pdf-configuration.xml +2 -2
  11. package/dev/public/downloads/downloads_de.json +1 -0
  12. package/dev/public/downloads/downloads_en.json +1 -0
  13. package/dev/public/favicon.png +0 -0
  14. package/dev/public/html/de/Downloads.html +3 -0
  15. package/dev/public/html/de/Home.html +3 -0
  16. package/dev/public/html/de/Suche.html +3 -0
  17. package/dev/public/html/en/Downloads.html +3 -0
  18. package/dev/public/html/en/Home.html +3 -0
  19. package/dev/public/html/en/Suche.html +3 -0
  20. package/dev/public/json/routing_de.json +86 -0
  21. package/dev/public/json/routing_en.json +86 -0
  22. package/dev/public/json/settings.json +8 -0
  23. package/dev/public/json/translations_hosting.json +1 -0
  24. package/dev/src/App.vue +33 -44
  25. package/dev/src/Autoload.ts +6 -6
  26. package/dev/src/Dialog.vue +99 -0
  27. package/dev/src/assets/fonts/Inter/Inter-Regular.ttf +0 -0
  28. package/dev/src/assets/fonts/Inter/Inter-Regular.woff2 +0 -0
  29. package/dev/src/assets/fonts/Inter/Inter-SemiBold.ttf +0 -0
  30. package/dev/src/assets/fonts/Inter/Inter-SemiBold.woff2 +0 -0
  31. package/dev/src/assets/fonts/Inter/inter.scss +17 -0
  32. package/dev/src/assets/images/mms-logo-black.svg +91 -91
  33. package/dev/src/assets/images/mms-logo-white.svg +105 -105
  34. package/dev/src/assets/images/next.svg +12 -0
  35. package/dev/src/assets/images/prev.svg +12 -0
  36. package/dev/src/assets/images/toTop.svg +12 -0
  37. package/dev/src/assets/scss/app.scss +39 -39
  38. package/dev/src/assets/scss/{ldd.scss → editor.scss} +27 -27
  39. package/dev/src/assets/scss/general.scss +59 -17
  40. package/dev/src/assets/scss/pdf.scss +138 -2
  41. package/dev/src/assets/scss/placeholders.scss +226 -0
  42. package/dev/src/assets/scss/print.scss +1 -1
  43. package/dev/src/assets/scss/web.scss +32 -1
  44. package/dev/src/assets/scss/word.scss +2 -2
  45. package/dev/src/components/BypassLinks.vue +90 -0
  46. package/dev/src/components/MainNavigation.vue +15 -209
  47. package/dev/src/components/NavLanguages.vue +57 -0
  48. package/dev/src/components/PageFooter.vue +45 -86
  49. package/dev/src/components/PageHeader.vue +41 -149
  50. package/dev/src/components/PageMain.vue +13 -0
  51. package/dev/src/components/PrevNext.vue +168 -144
  52. package/dev/src/components/SrlPage/KFCApplication/hooks/kfcData.ts +9 -9
  53. package/dev/src/components/SrlPage/KFCApplication/scss/_iz-keyfigure-comparison.scss +151 -151
  54. package/dev/src/components/SrlPage/KFCApplication/scss/_kfc-loading.scss +40 -40
  55. package/dev/src/components/SrlPage/KFCApplication/scss/_srl-button-kfc.scss +21 -21
  56. package/dev/src/components/Svg/Close.vue +14 -0
  57. package/dev/src/entries/main.ts +4 -0
  58. package/dev/src/entries/pdf.ts +2 -0
  59. package/dev/src/i18n/index.ts +21 -51
  60. package/dev/src/i18n/translation.ts +85 -85
  61. package/dev/src/locales/de.json +9 -15
  62. package/dev/src/locales/en.json +9 -15
  63. package/dev/src/router/index.ts +44 -47
  64. package/dev/src/views/ArticleView.vue +12 -77
  65. package/dev/src/views/DevView.vue +861 -0
  66. package/dev/src/views/HomeView.vue +5 -35
  67. package/dev/src/views/PageNotFound.vue +77 -73
  68. package/dev/srl.config.json +754 -0
  69. package/dev/tsconfig.app.json +13 -16
  70. package/dev/tsconfig.node.json +20 -19
  71. package/dev/vite.config.ts +18 -27
  72. package/initTestProject.js +91 -0
  73. package/jest.config.mjs +200 -0
  74. package/livingdocs/010.Titles/010.title-h1/ld-conf.json +5 -0
  75. package/livingdocs/010.Titles/010.title-h1/scss/app.scss +1 -0
  76. package/livingdocs/010.Titles/010.title-h1/scss/editor.scss +1 -0
  77. package/livingdocs/010.Titles/010.title-h1/scss/general.scss +5 -0
  78. package/livingdocs/010.Titles/010.title-h1/scss/xbrl.scss +1 -0
  79. package/livingdocs/010.Titles/010.title-h1/title-h1.html +5 -0
  80. package/livingdocs/010.Titles/020.title-h2/ld-conf.json +10 -0
  81. package/livingdocs/010.Titles/020.title-h2/properties.json +27 -0
  82. package/livingdocs/010.Titles/020.title-h2/scss/app.scss +1 -0
  83. package/livingdocs/010.Titles/020.title-h2/scss/editor.scss +1 -0
  84. package/livingdocs/010.Titles/020.title-h2/scss/general.scss +21 -0
  85. package/livingdocs/010.Titles/020.title-h2/scss/xbrl.scss +1 -0
  86. package/livingdocs/010.Titles/020.title-h2/title-h2.html +22 -0
  87. package/livingdocs/010.Titles/030.title-h3/ld-conf.json +10 -0
  88. package/livingdocs/010.Titles/030.title-h3/properties.json +23 -0
  89. package/livingdocs/010.Titles/030.title-h3/scss/app.scss +1 -0
  90. package/livingdocs/010.Titles/030.title-h3/scss/editor.scss +1 -0
  91. package/livingdocs/010.Titles/030.title-h3/scss/general.scss +21 -0
  92. package/livingdocs/010.Titles/030.title-h3/scss/xbrl.scss +1 -0
  93. package/livingdocs/010.Titles/030.title-h3/title-h3.html +22 -0
  94. package/livingdocs/010.Titles/040.title-h4/ld-conf.json +10 -0
  95. package/livingdocs/010.Titles/040.title-h4/properties.json +19 -0
  96. package/livingdocs/010.Titles/040.title-h4/scss/app.scss +1 -0
  97. package/livingdocs/010.Titles/040.title-h4/scss/editor.scss +1 -0
  98. package/livingdocs/010.Titles/040.title-h4/scss/general.scss +21 -0
  99. package/livingdocs/010.Titles/040.title-h4/scss/xbrl.scss +1 -0
  100. package/livingdocs/010.Titles/040.title-h4/title-h4.html +22 -0
  101. package/livingdocs/010.Titles/050.title-h5/ld-conf.json +5 -0
  102. package/livingdocs/010.Titles/050.title-h5/properties.json +15 -0
  103. package/livingdocs/010.Titles/050.title-h5/scss/app.scss +1 -0
  104. package/livingdocs/010.Titles/050.title-h5/scss/editor.scss +1 -0
  105. package/livingdocs/010.Titles/050.title-h5/scss/general.scss +6 -0
  106. package/livingdocs/010.Titles/050.title-h5/scss/xbrl.scss +1 -0
  107. package/livingdocs/010.Titles/050.title-h5/title-h5.html +5 -0
  108. package/livingdocs/010.Titles/060.title-h6/ld-conf.json +5 -0
  109. package/livingdocs/010.Titles/060.title-h6/scss/app.scss +1 -0
  110. package/livingdocs/010.Titles/060.title-h6/scss/editor.scss +1 -0
  111. package/livingdocs/010.Titles/060.title-h6/scss/general.scss +6 -0
  112. package/livingdocs/010.Titles/060.title-h6/scss/xbrl.scss +1 -0
  113. package/livingdocs/010.Titles/060.title-h6/title-h6.html +5 -0
  114. package/livingdocs/020.Text/010.lead/ld-conf.json +10 -0
  115. package/livingdocs/020.Text/010.lead/lead.html +7 -0
  116. package/livingdocs/020.Text/010.lead/scss/app.scss +1 -0
  117. package/livingdocs/020.Text/010.lead/scss/editor.scss +1 -0
  118. package/livingdocs/020.Text/010.lead/scss/general.scss +6 -0
  119. package/livingdocs/020.Text/010.lead/scss/xbrl.scss +1 -0
  120. package/livingdocs/020.Text/020.paragraph/ld-conf.json +5 -0
  121. package/livingdocs/{Text/paragraph → 020.Text/020.paragraph}/paragraph.html +13 -24
  122. package/livingdocs/020.Text/020.paragraph/scss/app.scss +1 -0
  123. package/livingdocs/020.Text/020.paragraph/scss/editor.scss +1 -0
  124. package/livingdocs/020.Text/020.paragraph/scss/general.scss +6 -0
  125. package/livingdocs/020.Text/020.paragraph/scss/web.scss +0 -0
  126. package/livingdocs/020.Text/020.paragraph/scss/word.scss +0 -0
  127. package/livingdocs/020.Text/020.paragraph/scss/xbrl.scss +1 -0
  128. package/livingdocs/020.Text/030.paragraph-strong/ld-conf.json +5 -0
  129. package/livingdocs/020.Text/030.paragraph-strong/paragraph.html +16 -0
  130. package/livingdocs/020.Text/030.paragraph-strong/scss/app.scss +1 -0
  131. package/livingdocs/020.Text/030.paragraph-strong/scss/editor.scss +0 -0
  132. package/livingdocs/020.Text/030.paragraph-strong/scss/general.scss +5 -0
  133. package/livingdocs/020.Text/030.paragraph-strong/scss/pdf.scss +1 -0
  134. package/livingdocs/020.Text/030.paragraph-strong/scss/web.scss +0 -0
  135. package/livingdocs/020.Text/030.paragraph-strong/scss/word.scss +0 -0
  136. package/livingdocs/020.Text/030.paragraph-strong/scss/xbrl.scss +1 -0
  137. package/livingdocs/020.Text/040.link/ld-conf.json +15 -0
  138. package/livingdocs/020.Text/040.link/link.html +12 -0
  139. package/livingdocs/020.Text/040.link/scss/app.scss +1 -0
  140. package/livingdocs/020.Text/040.link/scss/editor.scss +1 -0
  141. package/livingdocs/020.Text/040.link/scss/general.scss +6 -0
  142. package/livingdocs/020.Text/040.link/scss/pdf.scss +0 -0
  143. package/livingdocs/020.Text/040.link/scss/web.scss +0 -0
  144. package/livingdocs/020.Text/040.link/scss/word.scss +0 -0
  145. package/livingdocs/020.Text/040.link/scss/xbrl.scss +1 -0
  146. package/livingdocs/020.Text/050.quote/ld-conf.json +5 -0
  147. package/livingdocs/{Text/quote → 020.Text/050.quote}/properties.json +7 -7
  148. package/livingdocs/020.Text/050.quote/quote.html +15 -0
  149. package/livingdocs/020.Text/050.quote/scss/app.scss +1 -0
  150. package/livingdocs/020.Text/050.quote/scss/editor.scss +1 -0
  151. package/livingdocs/020.Text/050.quote/scss/general.scss +17 -0
  152. package/livingdocs/020.Text/050.quote/scss/pdf.scss +0 -0
  153. package/livingdocs/020.Text/050.quote/scss/web.scss +0 -0
  154. package/livingdocs/020.Text/050.quote/scss/word.scss +0 -0
  155. package/livingdocs/020.Text/050.quote/scss/xbrl.scss +1 -0
  156. package/livingdocs/020.Text/060.quote-with-portrait/ld-conf.json +11 -0
  157. package/livingdocs/020.Text/060.quote-with-portrait/quote-with-portrait.html +18 -0
  158. package/livingdocs/020.Text/060.quote-with-portrait/scss/app.scss +1 -0
  159. package/livingdocs/020.Text/060.quote-with-portrait/scss/editor.scss +1 -0
  160. package/livingdocs/020.Text/060.quote-with-portrait/scss/general.scss +17 -0
  161. package/livingdocs/020.Text/060.quote-with-portrait/scss/pdf.scss +29 -0
  162. package/livingdocs/020.Text/060.quote-with-portrait/scss/web.scss +24 -0
  163. package/livingdocs/020.Text/060.quote-with-portrait/scss/word.scss +0 -0
  164. package/livingdocs/020.Text/060.quote-with-portrait/scss/xbrl.scss +1 -0
  165. package/livingdocs/020.Text/070.footnote-container/footnote-container.html +6 -0
  166. package/livingdocs/020.Text/070.footnote-container/ld-conf.json +18 -0
  167. package/livingdocs/020.Text/070.footnote-container/scss/app.scss +1 -0
  168. package/livingdocs/020.Text/070.footnote-container/scss/editor.scss +1 -0
  169. package/livingdocs/020.Text/070.footnote-container/scss/general.scss +5 -0
  170. package/livingdocs/020.Text/070.footnote-container/scss/pdf.scss +0 -0
  171. package/livingdocs/020.Text/070.footnote-container/scss/web.scss +6 -0
  172. package/livingdocs/020.Text/070.footnote-container/scss/word.scss +0 -0
  173. package/livingdocs/020.Text/070.footnote-container/scss/xbrl.scss +1 -0
  174. package/livingdocs/020.Text/080.footnote-item/footnote-item.html +6 -0
  175. package/livingdocs/020.Text/080.footnote-item/ld-conf.json +5 -0
  176. package/livingdocs/020.Text/080.footnote-item/scss/app.scss +1 -0
  177. package/livingdocs/020.Text/080.footnote-item/scss/editor.scss +1 -0
  178. package/livingdocs/020.Text/080.footnote-item/scss/general.scss +28 -0
  179. package/livingdocs/020.Text/080.footnote-item/scss/pdf.scss +0 -0
  180. package/livingdocs/020.Text/080.footnote-item/scss/web.scss +0 -0
  181. package/livingdocs/020.Text/080.footnote-item/scss/word.scss +0 -0
  182. package/livingdocs/020.Text/080.footnote-item/scss/xbrl.scss +1 -0
  183. package/livingdocs/030.Lists/010.unordered-list/ld-conf.json +18 -0
  184. package/livingdocs/030.Lists/010.unordered-list/scss/app.scss +1 -0
  185. package/livingdocs/030.Lists/010.unordered-list/scss/editor.scss +1 -0
  186. package/livingdocs/030.Lists/010.unordered-list/scss/general.scss +12 -0
  187. package/livingdocs/030.Lists/010.unordered-list/scss/pdf.scss +0 -0
  188. package/livingdocs/030.Lists/010.unordered-list/scss/web.scss +0 -0
  189. package/livingdocs/030.Lists/010.unordered-list/scss/word.scss +0 -0
  190. package/livingdocs/030.Lists/010.unordered-list/scss/xbrl.scss +1 -0
  191. package/livingdocs/030.Lists/010.unordered-list/unordered-list.html +6 -0
  192. package/livingdocs/030.Lists/020.ordered-list/ld-conf.json +18 -0
  193. package/livingdocs/030.Lists/020.ordered-list/ordered-list.html +6 -0
  194. package/livingdocs/030.Lists/020.ordered-list/scss/app.scss +1 -0
  195. package/livingdocs/030.Lists/020.ordered-list/scss/editor.scss +1 -0
  196. package/livingdocs/030.Lists/020.ordered-list/scss/general.scss +9 -0
  197. package/livingdocs/030.Lists/020.ordered-list/scss/pdf.scss +0 -0
  198. package/livingdocs/030.Lists/020.ordered-list/scss/web.scss +0 -0
  199. package/livingdocs/030.Lists/020.ordered-list/scss/word.scss +0 -0
  200. package/livingdocs/030.Lists/020.ordered-list/scss/xbrl.scss +1 -0
  201. package/livingdocs/030.Lists/030.alphanumeric-list/alphanumeric-list.html +6 -0
  202. package/livingdocs/030.Lists/030.alphanumeric-list/ld-conf.json +18 -0
  203. package/livingdocs/030.Lists/030.alphanumeric-list/scss/app.scss +1 -0
  204. package/livingdocs/030.Lists/030.alphanumeric-list/scss/editor.scss +1 -0
  205. package/livingdocs/030.Lists/030.alphanumeric-list/scss/general.scss +9 -0
  206. package/livingdocs/030.Lists/030.alphanumeric-list/scss/pdf.scss +0 -0
  207. package/livingdocs/030.Lists/030.alphanumeric-list/scss/web.scss +0 -0
  208. package/livingdocs/030.Lists/030.alphanumeric-list/scss/word.scss +0 -0
  209. package/livingdocs/030.Lists/030.alphanumeric-list/scss/xbrl.scss +1 -0
  210. package/livingdocs/030.Lists/040.list-item/ld-conf.json +5 -0
  211. package/livingdocs/030.Lists/040.list-item/list-item.html +5 -0
  212. package/livingdocs/030.Lists/040.list-item/scss/app.scss +1 -0
  213. package/livingdocs/030.Lists/040.list-item/scss/editor.scss +1 -0
  214. package/livingdocs/030.Lists/040.list-item/scss/general.scss +35 -0
  215. package/livingdocs/030.Lists/040.list-item/scss/pdf.scss +0 -0
  216. package/livingdocs/030.Lists/040.list-item/scss/web.scss +0 -0
  217. package/livingdocs/030.Lists/040.list-item/scss/word.scss +0 -0
  218. package/livingdocs/030.Lists/040.list-item/scss/xbrl.scss +1 -0
  219. package/livingdocs/040.Media/010.table/ld-conf.json +15 -0
  220. package/livingdocs/040.Media/010.table/properties.json +32 -0
  221. package/livingdocs/040.Media/010.table/scss/app.scss +1 -0
  222. package/livingdocs/040.Media/010.table/scss/editor.scss +1 -0
  223. package/livingdocs/040.Media/010.table/scss/general.scss +328 -0
  224. package/livingdocs/040.Media/010.table/scss/pdf.scss +34 -0
  225. package/livingdocs/040.Media/010.table/scss/web.scss +14 -0
  226. package/livingdocs/040.Media/010.table/scss/word.scss +0 -0
  227. package/livingdocs/040.Media/010.table/scss/xbrl.scss +1 -0
  228. package/livingdocs/040.Media/010.table/table.html +9 -0
  229. package/livingdocs/040.Media/020.image/image.html +40 -0
  230. package/livingdocs/040.Media/020.image/ld-conf.json +25 -0
  231. package/livingdocs/040.Media/020.image/scss/app.scss +1 -0
  232. package/livingdocs/040.Media/020.image/scss/editor.scss +1 -0
  233. package/livingdocs/040.Media/020.image/scss/general.scss +17 -0
  234. package/livingdocs/040.Media/020.image/scss/pdf.scss +26 -0
  235. package/livingdocs/040.Media/020.image/scss/web.scss +1 -0
  236. package/livingdocs/040.Media/020.image/scss/word.scss +0 -0
  237. package/livingdocs/040.Media/020.image/scss/xbrl.scss +5 -0
  238. package/livingdocs/040.Media/030.video/ld-conf.json +19 -0
  239. package/livingdocs/040.Media/030.video/scss/app.scss +1 -0
  240. package/livingdocs/040.Media/030.video/scss/editor.scss +1 -0
  241. package/livingdocs/040.Media/030.video/scss/general.scss +5 -0
  242. package/livingdocs/040.Media/030.video/scss/pdf.scss +0 -0
  243. package/livingdocs/040.Media/030.video/scss/web.scss +12 -0
  244. package/livingdocs/040.Media/030.video/scss/word.scss +0 -0
  245. package/livingdocs/040.Media/030.video/scss/xbrl.scss +5 -0
  246. package/livingdocs/040.Media/030.video/video.html +59 -0
  247. package/livingdocs/040.Media/040.interactive-element/interactive-element.html +27 -0
  248. package/livingdocs/040.Media/040.interactive-element/ld-conf.json +6 -0
  249. package/livingdocs/050.Hero-and-Slider/.gitkeep +0 -0
  250. package/livingdocs/060.Buttons/.gitkeep +0 -0
  251. package/livingdocs/070.Container/010.aside-content-container/aside-content-container.html +10 -0
  252. package/livingdocs/070.Container/010.aside-content-container/ld-conf.json +20 -0
  253. package/livingdocs/070.Container/010.aside-content-container/properties.json +7 -0
  254. package/livingdocs/070.Container/010.aside-content-container/scss/app.scss +1 -0
  255. package/livingdocs/070.Container/010.aside-content-container/scss/editor.scss +1 -0
  256. package/livingdocs/070.Container/010.aside-content-container/scss/general.scss +1 -0
  257. package/livingdocs/070.Container/010.aside-content-container/scss/pdf.scss +3 -0
  258. package/livingdocs/070.Container/010.aside-content-container/scss/web.scss +1 -0
  259. package/livingdocs/070.Container/010.aside-content-container/scss/word.scss +0 -0
  260. package/livingdocs/070.Container/010.aside-content-container/scss/xbrl.scss +1 -0
  261. package/livingdocs/070.Container/020.columns-container/columns-container.html +22 -0
  262. package/livingdocs/070.Container/020.columns-container/ld-conf.json +17 -0
  263. package/livingdocs/080.CV/010.cv/cv.html +40 -0
  264. package/livingdocs/080.CV/010.cv/ld-conf.json +11 -0
  265. package/livingdocs/080.CV/020.cv-time-span/cv-time-span.html +13 -0
  266. package/livingdocs/080.CV/020.cv-time-span/ld-conf.json +4 -0
  267. package/livingdocs/090.Signatures/010.signature-container/ld-conf.json +18 -0
  268. package/livingdocs/090.Signatures/010.signature-container/scss/app.scss +1 -0
  269. package/livingdocs/090.Signatures/010.signature-container/scss/editor.scss +1 -0
  270. package/livingdocs/090.Signatures/010.signature-container/scss/general.scss +5 -0
  271. package/livingdocs/090.Signatures/010.signature-container/scss/pdf.scss +0 -0
  272. package/livingdocs/090.Signatures/010.signature-container/scss/web.scss +6 -0
  273. package/livingdocs/090.Signatures/010.signature-container/scss/word.scss +0 -0
  274. package/livingdocs/090.Signatures/010.signature-container/scss/xbrl.scss +1 -0
  275. package/livingdocs/090.Signatures/010.signature-container/signature-container.html +6 -0
  276. package/livingdocs/090.Signatures/020.signature-item/ld-conf.json +11 -0
  277. package/livingdocs/090.Signatures/020.signature-item/scss/app.scss +1 -0
  278. package/livingdocs/090.Signatures/020.signature-item/scss/editor.scss +1 -0
  279. package/livingdocs/090.Signatures/020.signature-item/scss/general.scss +9 -0
  280. package/livingdocs/090.Signatures/020.signature-item/scss/pdf.scss +0 -0
  281. package/livingdocs/090.Signatures/020.signature-item/scss/web.scss +5 -0
  282. package/livingdocs/090.Signatures/020.signature-item/scss/word.scss +0 -0
  283. package/livingdocs/090.Signatures/020.signature-item/scss/xbrl.scss +1 -0
  284. package/livingdocs/090.Signatures/020.signature-item/signature-item.html +9 -0
  285. package/livingdocs/100.Misc/010.anchor/anchor.html +8 -0
  286. package/livingdocs/100.Misc/010.anchor/ld-conf.json +4 -0
  287. package/livingdocs/100.Misc/020.accordion/accordion.html +8 -0
  288. package/livingdocs/100.Misc/020.accordion/ld-conf.json +26 -0
  289. package/livingdocs/110.PDF/010.pdf-pagebreak/ld-conf.json +4 -0
  290. package/livingdocs/110.PDF/010.pdf-pagebreak/pdf-pagebreak.html +1 -0
  291. package/livingdocs/110.PDF/020.pdf-column-container/ld-conf.json +4 -0
  292. package/livingdocs/110.PDF/020.pdf-column-container/pdf-column-container.html +5 -0
  293. package/livingdocs/110.PDF/030.pdf-publication-title/ld-conf.json +4 -0
  294. package/livingdocs/110.PDF/030.pdf-publication-title/pdf-publication-title.html +7 -0
  295. package/livingdocs/110.PDF/040.pdf-chapter-title/ld-conf.json +4 -0
  296. package/livingdocs/110.PDF/040.pdf-chapter-title/pdf-chapter-title.html +7 -0
  297. package/livingdocs/110.PDF/050.pdf-chapter-navigation-container/ld-conf.json +17 -0
  298. package/livingdocs/110.PDF/050.pdf-chapter-navigation-container/pdf-chapter-navigation.html +10 -0
  299. package/livingdocs/110.PDF/060.pdf-chapter-navigation-item/ld-conf.json +6 -0
  300. package/livingdocs/110.PDF/060.pdf-chapter-navigation-item/pdf-chapter-navigation-item.html +7 -0
  301. package/livingdocs/110.PDF/060.pdf-chapter-navigation-item/properties.json +7 -0
  302. package/livingdocs/110.PDF/070.pdf-cover/ld-conf.json +25 -0
  303. package/livingdocs/110.PDF/070.pdf-cover/pdf-cover.html +26 -0
  304. package/livingdocs/110.PDF/080.pdf-toc-page/ld-conf.json +15 -0
  305. package/livingdocs/110.PDF/080.pdf-toc-page/pdf-toc-page.html +8 -0
  306. package/livingdocs/{PDF_only/pdf-toc-page → 110.PDF/080.pdf-toc-page}/properties.json +20 -12
  307. package/livingdocs/110.PDF/090.pdf-toc-item-title/ld-conf.json +5 -0
  308. package/livingdocs/110.PDF/090.pdf-toc-item-title/pdf-toc-item-title.html +3 -0
  309. package/livingdocs/110.PDF/100.pdf-toc-item/ld-conf.json +14 -0
  310. package/livingdocs/110.PDF/100.pdf-toc-item/pdf-toc-item.html +6 -0
  311. package/livingdocs/{PDF_only/pdf-toc-item → 110.PDF/100.pdf-toc-item}/properties.json +7 -7
  312. package/livingdocs/110.PDF/110.pdf-toc-item-blank/ld-conf.json +5 -0
  313. package/livingdocs/110.PDF/110.pdf-toc-item-blank/pdf-toc-item-blank.html +4 -0
  314. package/livingdocs/120.Startpage/.gitkeep +0 -0
  315. package/livingdocs/999.Properties/alignment/properties.json +36 -0
  316. package/livingdocs/{Text/quote-with-portrait → 999.Properties/hide-quote-characters}/properties.json +7 -12
  317. package/livingdocs/999.Properties/pdf-spacer/properties.json +43 -0
  318. package/livingdocs/999.Properties/width/properties.json +32 -0
  319. package/package.json +48 -50
  320. package/scripts/beaver.js +317 -316
  321. package/scripts/build.d.ts +4 -7
  322. package/scripts/build.js +837 -812
  323. package/scripts/components.js +564 -566
  324. package/scripts/config.d.ts +8 -0
  325. package/scripts/config.js +52 -1
  326. package/scripts/doPublish.js +55 -43
  327. package/scripts/folders.d.ts +43 -0
  328. package/scripts/folders.js +46 -0
  329. package/scripts/init.js +65 -45
  330. package/scripts/ldd/LivingdocsDesignValidator.d.ts +61 -0
  331. package/scripts/ldd/LivingdocsDesignValidator.js +296 -0
  332. package/scripts/ldd/__tests__/LivingdocsDesignValidation.test.mjs +273 -0
  333. package/scripts/ldd/mapLdd.d.ts +1 -0
  334. package/scripts/ldd/mapLdd.js +204 -0
  335. package/scripts/prepare.d.ts +2 -0
  336. package/scripts/prepare.js +66 -0
  337. package/scripts/preparePublish.d.ts +1 -1
  338. package/scripts/preparePublish.js +121 -88
  339. package/scripts/renamePackage.js +48 -48
  340. package/scripts/utils.d.ts +45 -30
  341. package/scripts/utils.js +163 -106
  342. package/srl/components/Srl/Aria/TabChain.vue +100 -0
  343. package/srl/components/Srl/Article/Autoload.vue +41 -0
  344. package/srl/components/Srl/Article/DialogButton.vue +55 -0
  345. package/srl/components/Srl/Article/Root.vue +76 -0
  346. package/srl/components/Srl/Menu/Item/Content/Image.vue +12 -0
  347. package/srl/components/Srl/Menu/Item/Content/ImageAfter.vue +13 -0
  348. package/srl/components/Srl/Menu/Item/Content/ImageBefore.vue +13 -0
  349. package/srl/components/Srl/Menu/Item/Content/Text.vue +9 -0
  350. package/srl/components/Srl/Menu/Item/Content.vue +23 -0
  351. package/srl/components/Srl/Menu/Item.vue +208 -0
  352. package/srl/components/Srl/Menu/List.vue +184 -0
  353. package/srl/components/Srl/Page/App.vue +65 -0
  354. package/srl/components/Srl/Page/Dialog.vue +71 -0
  355. package/srl/composables/article.ts +24 -0
  356. package/srl/composables/articles.ts +41 -0
  357. package/srl/composables/config.ts +165 -0
  358. package/srl/composables/downloads.ts +46 -0
  359. package/srl/composables/index.ts +34 -0
  360. package/srl/composables/locale.ts +8 -0
  361. package/srl/composables/menu.ts +101 -0
  362. package/srl/composables/root.ts +5 -0
  363. package/srl/composables/search.ts +108 -0
  364. package/srl/composables/settings.ts +9 -0
  365. package/srl/composables/viewPort.ts +78 -0
  366. package/srl/imports/app.scss +0 -0
  367. package/srl/imports/ldd.scss +0 -0
  368. package/srl/imports/pdf.scss +0 -0
  369. package/srl/imports/word.scss +0 -0
  370. package/srl/imports/xbrl.scss +0 -0
  371. package/srl/plugins/asyncLdComponent.ts +2 -0
  372. package/srl/plugins/initProject.ts +19 -0
  373. package/srl/plugins/viteSrlPlugin.ts +214 -0
  374. package/srl/plugins/vueSrlPlugin.ts +23 -0
  375. package/{scss → srl/scss}/colors/functions.scss +18 -18
  376. package/{scss/helpers → srl/scss/colors}/index.scss +3 -3
  377. package/{scss → srl/scss}/colors/mixins.scss +45 -45
  378. package/{scss → srl/scss}/colors/variables.scss +6 -6
  379. package/srl/scss/config.scss +7 -0
  380. package/{scss → srl/scss}/core-styles.scss +23 -22
  381. package/{scss → srl/scss}/fonts/functions.scss +21 -21
  382. package/{scss/colors → srl/scss/fonts}/index.scss +3 -3
  383. package/{scss → srl/scss}/fonts/mixins.scss +31 -31
  384. package/{scss → srl/scss}/fonts/variables.scss +8 -8
  385. package/{scss → srl/scss}/grid/functions.scss +49 -29
  386. package/{scss/fonts → srl/scss/grid}/index.scss +3 -3
  387. package/{scss → srl/scss}/grid/mixins.scss +246 -388
  388. package/{scss → srl/scss}/grid/variables.scss +11 -10
  389. package/srl/scss/helpers/functions.scss +0 -0
  390. package/{scss/grid → srl/scss/helpers}/index.scss +3 -3
  391. package/{scss → srl/scss}/helpers/mixins.scss +54 -87
  392. package/{scss → srl/scss}/helpers/variables.scss +7 -7
  393. package/{scss → srl/scss}/index.scss +8 -8
  394. package/{scss → srl/scss}/meta/functions.scss +64 -64
  395. package/srl/scss/meta/index.scss +3 -0
  396. package/{scss → srl/scss}/meta/mixins.scss +6 -6
  397. package/{scss → srl/scss}/meta/variables.scss +8 -8
  398. package/{scss → srl/scss}/spacer/functions.scss +9 -9
  399. package/srl/scss/spacer/index.scss +3 -0
  400. package/{scss → srl/scss}/spacer/mixins.scss +236 -236
  401. package/{scss → srl/scss}/spacer/variables.scss +6 -6
  402. package/{scss → srl/scss}/system/functions.scss +77 -77
  403. package/srl/scss/system/index.scss +3 -0
  404. package/{scss → srl/scss}/system/mixins.scss +27 -27
  405. package/{scss → srl/scss}/system/root.scss +39 -39
  406. package/{scss → srl/scss}/system/variables.scss +13 -13
  407. package/{scss → srl/scss}/typography/functions.scss +63 -63
  408. package/srl/scss/typography/index.scss +3 -0
  409. package/{scss → srl/scss}/typography/mixins.scss +302 -262
  410. package/{scss → srl/scss}/typography/variables.scss +11 -11
  411. package/srl/scss/xbrl-core-styles.scss +47 -0
  412. package/{dev/nswow → srl/srl}/ArticleAutoloader.ts +100 -100
  413. package/{dev/nswow → srl/srl}/ArticleLoader.ts +98 -91
  414. package/srl/srl/Awesomizr.js +682 -0
  415. package/srl/srl/colors.scss +3 -0
  416. package/srl/srl/config.scss +7 -0
  417. package/srl/srl/core-styles.scss +2 -0
  418. package/srl/srl/fonts.scss +2 -0
  419. package/srl/srl/grid.scss +2 -0
  420. package/srl/srl/helpers.scss +2 -0
  421. package/{dev/nswow → srl/srl}/index.scss +9 -9
  422. package/srl/srl/meta.scss +2 -0
  423. package/srl/srl/pdf.scss +2 -0
  424. package/srl/srl/spacer.scss +2 -0
  425. package/srl/srl/system.scss +2 -0
  426. package/srl/srl/typography.scss +3 -0
  427. package/srl/types/components.d.ts +17 -0
  428. package/srl/types/nswow.d.ts +121 -0
  429. package/srl/utils/camelCase.ts +11 -0
  430. package/srl/utils/html.ts +82 -0
  431. package/srl/utils/index.ts +5 -0
  432. package/srl/utils/uri.ts +52 -0
  433. package/dev/ldd.html +0 -7
  434. package/dev/livingdocs/Media/image/app.scss +0 -25
  435. package/dev/livingdocs/Media/image/general.scss +0 -11
  436. package/dev/livingdocs/Media/image/image.html +0 -46
  437. package/dev/livingdocs/Media/image/ldd.scss +0 -1
  438. package/dev/livingdocs/Media/image/pdf.scss +0 -1
  439. package/dev/livingdocs/Media/image/print.scss +0 -7
  440. package/dev/livingdocs/Media/image/properties.json +0 -41
  441. package/dev/livingdocs/Media/image/word.scss +0 -1
  442. package/dev/livingdocs/Properties/grid/app.scss +0 -1
  443. package/dev/livingdocs/Properties/grid/general.scss +0 -95
  444. package/dev/livingdocs/Properties/grid/ldd.scss +0 -1
  445. package/dev/livingdocs/Properties/grid/pdf.scss +0 -1
  446. package/dev/livingdocs/Properties/grid/print.scss +0 -94
  447. package/dev/livingdocs/Properties/grid/properties.json +0 -68
  448. package/dev/livingdocs/Properties/grid/web.scss +0 -98
  449. package/dev/livingdocs/Properties/grid/word.scss +0 -1
  450. package/dev/livingdocs/Text/paragraph/general.scss +0 -9
  451. package/dev/livingdocs/Text/paragraph/paragraph.html +0 -22
  452. package/dev/livingdocs/Titles/title-h1/general.scss +0 -10
  453. package/dev/livingdocs/Titles/title-h1/title-h1.html +0 -16
  454. package/dev/livingdocs/Titles/title-h2/app.scss +0 -1
  455. package/dev/livingdocs/Titles/title-h2/general.scss +0 -13
  456. package/dev/livingdocs/Titles/title-h2/ldd.scss +0 -1
  457. package/dev/livingdocs/Titles/title-h2/pdf.scss +0 -1
  458. package/dev/livingdocs/Titles/title-h2/print.scss +0 -36
  459. package/dev/livingdocs/Titles/title-h2/title-h2.html +0 -24
  460. package/dev/livingdocs/Titles/title-h2/web.scss +0 -27
  461. package/dev/livingdocs/Titles/title-h2/word.scss +0 -1
  462. package/dev/livingdocs/Titles/title-h3/app.scss +0 -1
  463. package/dev/livingdocs/Titles/title-h3/general.scss +0 -13
  464. package/dev/livingdocs/Titles/title-h3/ldd.scss +0 -1
  465. package/dev/livingdocs/Titles/title-h3/pdf.scss +0 -1
  466. package/dev/livingdocs/Titles/title-h3/print.scss +0 -34
  467. package/dev/livingdocs/Titles/title-h3/title-h3.html +0 -24
  468. package/dev/livingdocs/Titles/title-h3/web.scss +0 -27
  469. package/dev/livingdocs/Titles/title-h3/word.scss +0 -1
  470. package/dev/livingdocs/Titles/title-h4/app.scss +0 -1
  471. package/dev/livingdocs/Titles/title-h4/general.scss +0 -13
  472. package/dev/livingdocs/Titles/title-h4/ldd.scss +0 -1
  473. package/dev/livingdocs/Titles/title-h4/pdf.scss +0 -1
  474. package/dev/livingdocs/Titles/title-h4/print.scss +0 -34
  475. package/dev/livingdocs/Titles/title-h4/title-h4.html +0 -24
  476. package/dev/livingdocs/Titles/title-h4/web.scss +0 -27
  477. package/dev/livingdocs/Titles/title-h4/word.scss +0 -1
  478. package/dev/livingdocs/Titles/title-h5/general.scss +0 -10
  479. package/dev/livingdocs/Titles/title-h5/title-h5.html +0 -16
  480. package/dev/livingdocs/Titles/title-h6/general.scss +0 -10
  481. package/dev/livingdocs/Titles/title-h6/title-h6.html +0 -16
  482. package/dev/nswow/colors.scss +0 -3
  483. package/dev/nswow/config.scss +0 -13
  484. package/dev/nswow/core-styles.scss +0 -2
  485. package/dev/nswow/fonts.scss +0 -2
  486. package/dev/nswow/grid.scss +0 -2
  487. package/dev/nswow/helpers.scss +0 -2
  488. package/dev/nswow/meta.scss +0 -2
  489. package/dev/nswow/spacer.scss +0 -2
  490. package/dev/nswow/system.scss +0 -2
  491. package/dev/nswow/typography.scss +0 -3
  492. package/dev/nswow.config.json +0 -293
  493. package/dev/pdf.ts +0 -1
  494. package/dev/src/components/LanguageSwitch.vue +0 -100
  495. package/dev/src/components/MenuItem/MenuArticle.vue +0 -15
  496. package/dev/src/components/MenuItem/MenuEntry.vue +0 -26
  497. package/dev/src/components/MenuItem/MenuExternal.vue +0 -28
  498. package/dev/src/components/MenuItem/index.ts +0 -5
  499. package/dev/src/components/PageModal.vue +0 -95
  500. package/dev/src/components/ScrollToTop.vue +0 -63
  501. package/dev/src/composables/config.ts +0 -48
  502. package/dev/src/main.ts +0 -16
  503. package/dev/src/types/nswow.d.ts +0 -73
  504. package/dev/src/views/DownloadsView.vue +0 -88
  505. package/dev/src/views/SearchView.vue +0 -126
  506. package/dev/word.ts +0 -1
  507. package/livingdocs/Buttons/button/app.scss +0 -1
  508. package/livingdocs/Buttons/button/button.html +0 -18
  509. package/livingdocs/Buttons/button/general.scss +0 -33
  510. package/livingdocs/Buttons/button/ldd.scss +0 -1
  511. package/livingdocs/Buttons/button/pdf.scss +0 -1
  512. package/livingdocs/Buttons/button/word.scss +0 -1
  513. package/livingdocs/Buttons/button-container/app.scss +0 -1
  514. package/livingdocs/Buttons/button-container/button-container.html +0 -31
  515. package/livingdocs/Buttons/button-container/general.scss +0 -12
  516. package/livingdocs/Buttons/button-container/ldd.scss +0 -1
  517. package/livingdocs/Buttons/button-container/pdf.scss +0 -3
  518. package/livingdocs/Buttons/button-container/properties.json +0 -19
  519. package/livingdocs/Buttons/button-container/word.scss +0 -3
  520. package/livingdocs/CV/cv-timeline/app.scss +0 -1
  521. package/livingdocs/CV/cv-timeline/cv-timeline.html +0 -19
  522. package/livingdocs/CV/cv-timeline/general.scss +0 -1
  523. package/livingdocs/CV/cv-timeline/ldd.scss +0 -1
  524. package/livingdocs/CV/cv-timeline/pdf.scss +0 -1
  525. package/livingdocs/CV/cv-timeline/print.scss +0 -35
  526. package/livingdocs/CV/cv-timeline/web.scss +0 -27
  527. package/livingdocs/CV/cv-timeline/word.scss +0 -1
  528. package/livingdocs/Container/column-container/column-container.html +0 -44
  529. package/livingdocs/Container/column-container/general.scss +0 -105
  530. package/livingdocs/Container/column-container/properties.json +0 -83
  531. package/livingdocs/Lists/alphanumeric-list-group/alphanumeric-list-group.html +0 -25
  532. package/livingdocs/Lists/alphanumeric-list-group/app.scss +0 -1
  533. package/livingdocs/Lists/alphanumeric-list-group/general.scss +0 -5
  534. package/livingdocs/Lists/alphanumeric-list-group/ldd.scss +0 -1
  535. package/livingdocs/Lists/alphanumeric-list-group/pdf.scss +0 -1
  536. package/livingdocs/Lists/alphanumeric-list-group/word.scss +0 -1
  537. package/livingdocs/Lists/list-item/app.scss +0 -1
  538. package/livingdocs/Lists/list-item/general.scss +0 -4
  539. package/livingdocs/Lists/list-item/ldd.scss +0 -1
  540. package/livingdocs/Lists/list-item/list-item.html +0 -17
  541. package/livingdocs/Lists/list-item/pdf.scss +0 -1
  542. package/livingdocs/Lists/list-item/word.scss +0 -1
  543. package/livingdocs/Lists/ordered-list-group/app.scss +0 -1
  544. package/livingdocs/Lists/ordered-list-group/general.scss +0 -5
  545. package/livingdocs/Lists/ordered-list-group/ldd.scss +0 -1
  546. package/livingdocs/Lists/ordered-list-group/ordered-list-group.html +0 -25
  547. package/livingdocs/Lists/ordered-list-group/pdf.scss +0 -1
  548. package/livingdocs/Lists/ordered-list-group/word.scss +0 -1
  549. package/livingdocs/Lists/unordered-list-group/app.scss +0 -1
  550. package/livingdocs/Lists/unordered-list-group/general.scss +0 -5
  551. package/livingdocs/Lists/unordered-list-group/ldd.scss +0 -1
  552. package/livingdocs/Lists/unordered-list-group/pdf.scss +0 -1
  553. package/livingdocs/Lists/unordered-list-group/unordered-list-group.html +0 -25
  554. package/livingdocs/Lists/unordered-list-group/word.scss +0 -1
  555. package/livingdocs/Media/chart/app.scss +0 -19
  556. package/livingdocs/Media/chart/chart.html +0 -29
  557. package/livingdocs/Media/chart/general.scss +0 -11
  558. package/livingdocs/Media/chart/ldd.scss +0 -1
  559. package/livingdocs/Media/chart/pdf.scss +0 -9
  560. package/livingdocs/Media/chart/properties.json +0 -41
  561. package/livingdocs/Media/chart/word.scss +0 -1
  562. package/livingdocs/Media/graphic/app.scss +0 -1
  563. package/livingdocs/Media/graphic/general.scss +0 -18
  564. package/livingdocs/Media/graphic/graphic.html +0 -29
  565. package/livingdocs/Media/graphic/ldd.scss +0 -1
  566. package/livingdocs/Media/graphic/pdf.scss +0 -1
  567. package/livingdocs/Media/graphic/properties.json +0 -36
  568. package/livingdocs/Media/graphic/word.scss +0 -1
  569. package/livingdocs/Media/image/app.scss +0 -25
  570. package/livingdocs/Media/image/general.scss +0 -11
  571. package/livingdocs/Media/image/image.html +0 -55
  572. package/livingdocs/Media/image/ldd.scss +0 -1
  573. package/livingdocs/Media/image/pdf.scss +0 -1
  574. package/livingdocs/Media/image/print.scss +0 -7
  575. package/livingdocs/Media/image/properties.json +0 -41
  576. package/livingdocs/Media/image/word.scss +0 -1
  577. package/livingdocs/Media/nswow-table/app.scss +0 -2
  578. package/livingdocs/Media/nswow-table/app.ts +0 -35
  579. package/livingdocs/Media/nswow-table/general.scss +0 -281
  580. package/livingdocs/Media/nswow-table/ldd.scss +0 -2
  581. package/livingdocs/Media/nswow-table/nswow-table.html +0 -30
  582. package/livingdocs/Media/nswow-table/pdf.scss +0 -8
  583. package/livingdocs/Media/nswow-table/properties.json +0 -66
  584. package/livingdocs/Media/nswow-table/web.scss +0 -23
  585. package/livingdocs/Media/nswow-table/word.scss +0 -2
  586. package/livingdocs/Media/video/app.scss +0 -1
  587. package/livingdocs/Media/video/general.scss +0 -7
  588. package/livingdocs/Media/video/ldd.scss +0 -1
  589. package/livingdocs/Media/video/pdf.scss +0 -1
  590. package/livingdocs/Media/video/print.scss +0 -5
  591. package/livingdocs/Media/video/properties.json +0 -41
  592. package/livingdocs/Media/video/video.html +0 -26
  593. package/livingdocs/Media/video/word.scss +0 -1
  594. package/livingdocs/Misc/accordion/accordion.html +0 -56
  595. package/livingdocs/Misc/accordion/app.scss +0 -63
  596. package/livingdocs/Misc/accordion/app.ts +0 -10
  597. package/livingdocs/Misc/accordion/general.scss +0 -44
  598. package/livingdocs/Misc/accordion/ldd.scss +0 -36
  599. package/livingdocs/Misc/accordion/pdf.scss +0 -39
  600. package/livingdocs/Misc/accordion/word.scss +0 -39
  601. package/livingdocs/Misc/anchor/anchor.html +0 -15
  602. package/livingdocs/Misc/anchor/app.scss +0 -10
  603. package/livingdocs/Misc/anchor/app.ts +0 -11
  604. package/livingdocs/Misc/anchor/general.scss +0 -1
  605. package/livingdocs/Misc/anchor/pdf.scss +0 -1
  606. package/livingdocs/Misc/anchor/print.scss +0 -3
  607. package/livingdocs/Misc/anchor/word.scss +0 -1
  608. package/livingdocs/Misc/spacer/app.scss +0 -1
  609. package/livingdocs/Misc/spacer/general.scss +0 -8
  610. package/livingdocs/Misc/spacer/ldd.scss +0 -1
  611. package/livingdocs/Misc/spacer/pdf.scss +0 -1
  612. package/livingdocs/Misc/spacer/print.scss +0 -18
  613. package/livingdocs/Misc/spacer/properties.json +0 -52
  614. package/livingdocs/Misc/spacer/spacer.html +0 -12
  615. package/livingdocs/Misc/spacer/web.scss +0 -18
  616. package/livingdocs/Misc/spacer/word.scss +0 -1
  617. package/livingdocs/PDF_only/pdf-cover/ldd.scss +0 -42
  618. package/livingdocs/PDF_only/pdf-cover/pdf-cover.html +0 -29
  619. package/livingdocs/PDF_only/pdf-cover/pdf.scss +0 -1
  620. package/livingdocs/PDF_only/pdf-cover/word.scss +0 -1
  621. package/livingdocs/PDF_only/pdf-cover-chapter/ldd.scss +0 -19
  622. package/livingdocs/PDF_only/pdf-cover-chapter/pdf-chapter-cover.html +0 -18
  623. package/livingdocs/PDF_only/pdf-cover-chapter/pdf.scss +0 -1
  624. package/livingdocs/PDF_only/pdf-cover-chapter/print.scss +0 -19
  625. package/livingdocs/PDF_only/pdf-cover-chapter/word.scss +0 -1
  626. package/livingdocs/PDF_only/pdf-pagebreak/general.scss +0 -4
  627. package/livingdocs/PDF_only/pdf-pagebreak/ldd.scss +0 -5
  628. package/livingdocs/PDF_only/pdf-pagebreak/pdf-pagebreak.html +0 -8
  629. package/livingdocs/PDF_only/pdf-publication-title/general.scss +0 -5
  630. package/livingdocs/PDF_only/pdf-publication-title/pdf-publication-title.html +0 -15
  631. package/livingdocs/PDF_only/pdf-toc-item/general.scss +0 -41
  632. package/livingdocs/PDF_only/pdf-toc-item/pdf-toc-item.html +0 -33
  633. package/livingdocs/PDF_only/pdf-toc-item-blank/general.scss +0 -5
  634. package/livingdocs/PDF_only/pdf-toc-item-blank/pdf-toc-item-blank.html +0 -11
  635. package/livingdocs/PDF_only/pdf-toc-item-title/general.scss +0 -5
  636. package/livingdocs/PDF_only/pdf-toc-item-title/pdf-toc-item-title.html +0 -11
  637. package/livingdocs/PDF_only/pdf-toc-page/app.scss +0 -1
  638. package/livingdocs/PDF_only/pdf-toc-page/general.scss +0 -1
  639. package/livingdocs/PDF_only/pdf-toc-page/ldd.scss +0 -1
  640. package/livingdocs/PDF_only/pdf-toc-page/pdf-toc-page.html +0 -33
  641. package/livingdocs/PDF_only/pdf-toc-page/pdf.scss +0 -1
  642. package/livingdocs/PDF_only/pdf-toc-page/word.scss +0 -1
  643. package/livingdocs/PDF_only/pdf-video-link/ldd.scss +0 -16
  644. package/livingdocs/PDF_only/pdf-video-link/pdf-video-link.html +0 -41
  645. package/livingdocs/PDF_only/pdf-video-link/pdf.scss +0 -1
  646. package/livingdocs/PDF_only/pdf-video-link/print.scss +0 -12
  647. package/livingdocs/PDF_only/pdf-video-link/word.scss +0 -1
  648. package/livingdocs/Properties/grid/app.scss +0 -1
  649. package/livingdocs/Properties/grid/general.scss +0 -95
  650. package/livingdocs/Properties/grid/ldd.scss +0 -1
  651. package/livingdocs/Properties/grid/pdf.scss +0 -1
  652. package/livingdocs/Properties/grid/print.scss +0 -94
  653. package/livingdocs/Properties/grid/properties.json +0 -68
  654. package/livingdocs/Properties/grid/web.scss +0 -98
  655. package/livingdocs/Properties/grid/word.scss +0 -1
  656. package/livingdocs/Signatures/signature-container/app.scss +0 -1
  657. package/livingdocs/Signatures/signature-container/general.scss +0 -7
  658. package/livingdocs/Signatures/signature-container/ldd.scss +0 -1
  659. package/livingdocs/Signatures/signature-container/pdf.scss +0 -1
  660. package/livingdocs/Signatures/signature-container/signature-container.html +0 -30
  661. package/livingdocs/Signatures/signature-container/word.scss +0 -1
  662. package/livingdocs/Signatures/signature-item/app.scss +0 -1
  663. package/livingdocs/Signatures/signature-item/general.scss +0 -53
  664. package/livingdocs/Signatures/signature-item/ldd.scss +0 -1
  665. package/livingdocs/Signatures/signature-item/pdf.scss +0 -1
  666. package/livingdocs/Signatures/signature-item/signature-item.html +0 -23
  667. package/livingdocs/Signatures/signature-item/word.scss +0 -1
  668. package/livingdocs/Text/footnote/app.scss +0 -1
  669. package/livingdocs/Text/footnote/footnote.html +0 -14
  670. package/livingdocs/Text/footnote/general.scss +0 -12
  671. package/livingdocs/Text/footnote/ldd.scss +0 -1
  672. package/livingdocs/Text/footnote/pdf.scss +0 -1
  673. package/livingdocs/Text/footnote/print.scss +0 -36
  674. package/livingdocs/Text/footnote/web.scss +0 -27
  675. package/livingdocs/Text/footnote/word.scss +0 -1
  676. package/livingdocs/Text/lead/general.scss +0 -9
  677. package/livingdocs/Text/lead/lead.html +0 -23
  678. package/livingdocs/Text/paragraph/general.scss +0 -9
  679. package/livingdocs/Text/quote/general.scss +0 -43
  680. package/livingdocs/Text/quote/quote.html +0 -29
  681. package/livingdocs/Text/quote-with-portrait/general.scss +0 -81
  682. package/livingdocs/Text/quote-with-portrait/quote-with-portrait.html +0 -49
  683. package/livingdocs/Titles/title-h1/general.scss +0 -10
  684. package/livingdocs/Titles/title-h1/title-h1.html +0 -16
  685. package/livingdocs/Titles/title-h2/app.scss +0 -1
  686. package/livingdocs/Titles/title-h2/general.scss +0 -13
  687. package/livingdocs/Titles/title-h2/ldd.scss +0 -1
  688. package/livingdocs/Titles/title-h2/pdf.scss +0 -1
  689. package/livingdocs/Titles/title-h2/print.scss +0 -36
  690. package/livingdocs/Titles/title-h2/title-h2.html +0 -26
  691. package/livingdocs/Titles/title-h2/web.scss +0 -27
  692. package/livingdocs/Titles/title-h2/word.scss +0 -1
  693. package/livingdocs/Titles/title-h3/app.scss +0 -1
  694. package/livingdocs/Titles/title-h3/general.scss +0 -13
  695. package/livingdocs/Titles/title-h3/ldd.scss +0 -1
  696. package/livingdocs/Titles/title-h3/pdf.scss +0 -1
  697. package/livingdocs/Titles/title-h3/print.scss +0 -34
  698. package/livingdocs/Titles/title-h3/title-h3.html +0 -26
  699. package/livingdocs/Titles/title-h3/web.scss +0 -27
  700. package/livingdocs/Titles/title-h3/word.scss +0 -1
  701. package/livingdocs/Titles/title-h4/app.scss +0 -1
  702. package/livingdocs/Titles/title-h4/general.scss +0 -13
  703. package/livingdocs/Titles/title-h4/ldd.scss +0 -1
  704. package/livingdocs/Titles/title-h4/pdf.scss +0 -1
  705. package/livingdocs/Titles/title-h4/print.scss +0 -34
  706. package/livingdocs/Titles/title-h4/title-h4.html +0 -26
  707. package/livingdocs/Titles/title-h4/web.scss +0 -27
  708. package/livingdocs/Titles/title-h4/word.scss +0 -1
  709. package/livingdocs/Titles/title-h5/general.scss +0 -10
  710. package/livingdocs/Titles/title-h5/title-h5.html +0 -16
  711. package/livingdocs/Titles/title-h6/general.scss +0 -10
  712. package/livingdocs/Titles/title-h6/title-h6.html +0 -16
  713. package/preparePublish.cjs +0 -95
  714. package/scripts/migrate-livingdocs-build/LICENSE +0 -21
  715. package/scripts/migrate-livingdocs-build/bin/build.d.ts +0 -8
  716. package/scripts/migrate-livingdocs-build/bin/build.js +0 -53
  717. package/scripts/migrate-livingdocs-build/bin/migrate.d.ts +0 -2
  718. package/scripts/migrate-livingdocs-build/bin/migrate.js +0 -43
  719. package/scripts/migrate-livingdocs-build/dev/build/v1.d.ts +0 -9
  720. package/scripts/migrate-livingdocs-build/dev/build/v1.d.ts.map +0 -1
  721. package/scripts/migrate-livingdocs-build/dev/build/v1.js +0 -51
  722. package/scripts/migrate-livingdocs-build/dev/build/v2.d.ts +0 -2
  723. package/scripts/migrate-livingdocs-build/dev/build/v2.d.ts.map +0 -1
  724. package/scripts/migrate-livingdocs-build/dev/build/v2.js +0 -44
  725. package/scripts/migrate-livingdocs-build/dev/build/zip-archive.d.ts +0 -2
  726. package/scripts/migrate-livingdocs-build/dev/build/zip-archive.d.ts.map +0 -1
  727. package/scripts/migrate-livingdocs-build/dev/build/zip-archive.js +0 -39
  728. package/scripts/migrate-livingdocs-build/dev/build.d.ts +0 -9
  729. package/scripts/migrate-livingdocs-build/dev/build.js +0 -7
  730. package/scripts/migrate-livingdocs-build/dev/configuration-defaults.d.ts +0 -20
  731. package/scripts/migrate-livingdocs-build/dev/configuration-defaults.js +0 -18
  732. package/scripts/migrate-livingdocs-build/dev/configuration.d.ts +0 -2
  733. package/scripts/migrate-livingdocs-build/dev/configuration.js +0 -34
  734. package/scripts/migrate-livingdocs-build/dev/lib.d.ts +0 -33
  735. package/scripts/migrate-livingdocs-build/dev/lib.js +0 -251
  736. package/scripts/migrate-livingdocs-build/dev/livingdocs-design.d.ts +0 -9
  737. package/scripts/migrate-livingdocs-build/dev/livingdocs-design.js +0 -80
  738. package/scripts/migrate-livingdocs-build/dev/logger.d.ts +0 -2
  739. package/scripts/migrate-livingdocs-build/dev/logger.js +0 -16
  740. package/scripts/migrate-livingdocs-build/dev/migrate.d.ts +0 -22
  741. package/scripts/migrate-livingdocs-build/dev/migrate.js +0 -241
  742. package/scripts/migrate-livingdocs-build/readme.md +0 -62
  743. package/scripts/vite.d.ts +0 -10
  744. package/scripts/vite.js +0 -58
  745. package/scss/config.scss +0 -7
  746. package/scss/meta/index.scss +0 -3
  747. package/scss/spacer/index.scss +0 -3
  748. package/scss/system/index.scss +0 -3
  749. package/scss/typography/index.scss +0 -3
  750. package/tags.txt +0 -1
  751. /package/dev/livingdocs/{Media/image/web.scss → .gitkeep} +0 -0
  752. /package/{dev/public/.keep → livingdocs/010.Titles/010.title-h1/scss/pdf.scss} +0 -0
  753. /package/livingdocs/{Lists/alphanumeric-list-group → 010.Titles/010.title-h1/scss}/web.scss +0 -0
  754. /package/livingdocs/{Lists/alphanumeric-list-group/print.scss → 010.Titles/010.title-h1/scss/word.scss} +0 -0
  755. /package/livingdocs/{Lists/list-item/print.scss → 010.Titles/020.title-h2/scss/pdf.scss} +0 -0
  756. /package/livingdocs/{Lists/list-item → 010.Titles/020.title-h2/scss}/web.scss +0 -0
  757. /package/livingdocs/{Lists/ordered-list-group/print.scss → 010.Titles/020.title-h2/scss/word.scss} +0 -0
  758. /package/livingdocs/{Lists/ordered-list-group/web.scss → 010.Titles/030.title-h3/scss/pdf.scss} +0 -0
  759. /package/livingdocs/{Lists/unordered-list-group → 010.Titles/030.title-h3/scss}/web.scss +0 -0
  760. /package/livingdocs/{Lists/unordered-list-group/print.scss → 010.Titles/030.title-h3/scss/word.scss} +0 -0
  761. /package/livingdocs/{Media/chart/print.scss → 010.Titles/040.title-h4/scss/pdf.scss} +0 -0
  762. /package/livingdocs/{Media/chart → 010.Titles/040.title-h4/scss}/web.scss +0 -0
  763. /package/livingdocs/{Media/graphic/print.scss → 010.Titles/040.title-h4/scss/word.scss} +0 -0
  764. /package/livingdocs/{Media/graphic/web.scss → 010.Titles/050.title-h5/scss/pdf.scss} +0 -0
  765. /package/livingdocs/{Media/image → 010.Titles/050.title-h5/scss}/web.scss +0 -0
  766. /package/livingdocs/{Media/nswow-table/print.scss → 010.Titles/050.title-h5/scss/word.scss} +0 -0
  767. /package/livingdocs/{Media/video/web.scss → 010.Titles/060.title-h6/scss/pdf.scss} +0 -0
  768. /package/livingdocs/{Signatures/signature-container → 010.Titles/060.title-h6/scss}/web.scss +0 -0
  769. /package/livingdocs/{PDF_only/pdf-cover/print.scss → 010.Titles/060.title-h6/scss/word.scss} +0 -0
  770. /package/livingdocs/{Signatures/signature-container/print.scss → 020.Text/010.lead/scss/pdf.scss} +0 -0
  771. /package/livingdocs/{Signatures/signature-item → 020.Text/010.lead/scss}/web.scss +0 -0
  772. /package/livingdocs/{Signatures/signature-item/print.scss → 020.Text/010.lead/scss/word.scss} +0 -0
  773. /package/{scss/helpers/functions.scss → livingdocs/020.Text/020.paragraph/scss/pdf.scss} +0 -0
package/scripts/build.js CHANGED
@@ -1,812 +1,837 @@
1
- import { resolve } from 'node:path';
2
- import {
3
- statSync,
4
- writeFileSync,
5
- readFileSync,
6
- mkdirSync,
7
- readdirSync,
8
- createWriteStream,
9
- rmSync,
10
- cpSync,
11
- } from 'node:fs';
12
- import { fileURLToPath, URL } from 'node:url';
13
- import { createRequire } from 'node:module';
14
- import { glob } from 'glob';
15
- import { beaver } from './beaver.js';
16
- import { build as viteBuild } from 'vite';
17
- import { build as finalizeLdd } from './migrate-livingdocs-build/bin/build.js';
18
- import {
19
- readPackageJson,
20
- writePackageJson,
21
- readLivingDocsJson,
22
- writeLivingDocsJson,
23
- } from './utils.js';
24
- import { camelCase } from 'cheerio/utils';
25
-
26
- const placeholderId = '6297EAFB-33A0-48B8-8D64-E61CDC3E9035';
27
- const CWD = process.cwd();
28
- const nswowPath = resolve(CWD, '.nswow');
29
- const outputPath = resolve(CWD, '.output');
30
- const require = createRequire(import.meta.url);
31
-
32
- const { Input } = require('enquirer');
33
-
34
- let foldersChecked = false;
35
-
36
- /**
37
- * Checks if the required folders exist and creates them if necessary.
38
- *
39
- * @async
40
- * @returns {Promise<boolean>} A promise that resolves to true once the folders are checked and created.
41
- */
42
- async function checkFolders() {
43
- if (!foldersChecked) {
44
- foldersChecked = true;
45
- try {
46
- await statSync(nswowPath);
47
- } catch (e) {
48
- await mkdirSync(nswowPath);
49
- }
50
- try {
51
- await statSync(outputPath);
52
- } catch (e) {
53
- await mkdirSync(outputPath);
54
- }
55
- }
56
- return true;
57
- }
58
-
59
- /**
60
- * Cleans the output directory by removing all files and folders.
61
- *
62
- * @returns {Promise<boolean>} A promise that resolves to a boolean indicating whether the cleanup was successful.
63
- */
64
- async function cleanOutput() {
65
- await checkFolders();
66
- const output = readdirSync(outputPath);
67
- for (let i = 0; i < output.length; i++) {
68
- await rmSync(`${outputPath}/${output[i]}`, {
69
- force: true,
70
- recursive: true,
71
- });
72
- }
73
- return true;
74
- }
75
-
76
- /**
77
- * Builds the application by performing the following steps:
78
- *
79
- * 1. Checks the folders.
80
- * 2. Executes the viteBuild function.
81
- *
82
- * @returns {Promise<void>} A Promise that resolves when the application is built.
83
- */
84
- async function buildApp() {
85
- await checkFolders();
86
- const build = await viteBuild({
87
- build: {
88
- copyPublicDir: false,
89
- },
90
- });
91
-
92
- // Copy public folder exclude nswow folders
93
- console.log(
94
- '\n\nCopy public folder exclude nswow folders and exclude folder',
95
- );
96
- await cpSync(`${CWD}/public/`, `${outputPath}/app`, {
97
- filter: (src) => {
98
- if (
99
- src.startsWith(`${CWD}/public/downloads`) ||
100
- src.startsWith(`${CWD}/public/html`) ||
101
- src.startsWith(`${CWD}/public/images`) ||
102
- src.startsWith(`${CWD}/public/json`) ||
103
- src.startsWith(`${CWD}/public/exclude`)
104
- ) {
105
- return false;
106
- } else {
107
- src === `${CWD}/public/` ||
108
- console.log(`Copy ${src} to ${outputPath}/app`);
109
- return true;
110
- }
111
- },
112
- recursive: true,
113
- });
114
- console.log('\n');
115
-
116
- let index = await readFileSync(`${outputPath}/app/index.html`, 'utf8');
117
-
118
- console.log('Create file /template/article.html for nswow hybrid\n');
119
- index = index.replace(
120
- '<html>',
121
- `<html lang="[[language-${placeholderId}]]">`,
122
- );
123
- index = index.replace(
124
- /<base\s+href\s*=\s*(['"])(.*?)\1\s*\/?>/gi,
125
- `<base href="[[base-${placeholderId}]]" />
126
- [[meta-${placeholderId}]]`,
127
- );
128
-
129
- index = index.replace(
130
- /(<div\s+[^>]*id\s*=\s*["']app["'][^>]*>)([\s\S]*?)(<\/div>)/i,
131
- `$1
132
- <template>
133
- [[content-${placeholderId}]]
134
- </template>
135
- $3`,
136
- );
137
-
138
- await mkdirSync(`${outputPath}/app/template`, { recursive: true });
139
- await writeFileSync(`${outputPath}/app/index.html`, index);
140
- await writeFileSync(`${outputPath}/app/template/article.html`, index);
141
- /**
142
- await writeFileSync(`${outputPath}/app/web.config`, `<?xml version="1.0" encoding="UTF-8"?>
143
- <configuration>
144
- <system.webServer>
145
- <rewrite>
146
- <rules>
147
- <rule name="Rewrite to index.html" stopProcessing="true">
148
- <match url=".*" />
149
- <conditions logicalGrouping="MatchAll">
150
- <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
151
- <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
152
- </conditions>
153
- <action type="Rewrite" url="index.html" />
154
- </rule>
155
- </rules>
156
- </rewrite>
157
- </system.webServer>
158
- </configuration>`);
159
- await writeFileSync(`${outputPath}/app/.htaccess`, `RewriteEngine On
160
- RewriteCond %{REQUEST_FILENAME} !-f
161
- RewriteCond %{REQUEST_FILENAME} !-l
162
- RewriteCond %{REQUEST_FILENAME} !-d
163
- RewriteRule ^(.*)$ index.html [L]`);
164
- /**/
165
- return build;
166
- }
167
-
168
- /**
169
- * Builds the application by performing the following steps:
170
- *
171
- * 1. Checks the folders.
172
- * 2. Executes the viteBuild function.
173
- *
174
- * @returns {Promise<void>} A Promise that resolves when the application is built.
175
- */
176
- async function buildDDev() {
177
- await checkFolders();
178
- const build = await viteBuild({
179
- build: {
180
- outDir: './.output/ddev',
181
- },
182
- });
183
- return build;
184
- }
185
-
186
- /**
187
- * Compresses the 'app' folder into a zip file using archiver library.
188
- *
189
- * @async
190
- * @function zipApp
191
- * @returns {Promise<void>} - A Promise that resolves when the zip operation is complete, or rejects with an error.
192
- */
193
- async function zipApp() {
194
- await checkFolders();
195
- const archiver = require('archiver');
196
- const output = createWriteStream(outputPath + '/app.zip');
197
- const archive = archiver('zip', {
198
- zlib: { level: 9 }, // Sets the compression level.
199
- });
200
- output.on('close', function () {
201
- console.log('Create zip ' + outputPath + '/app.zip');
202
- console.log(archive.pointer() + ' total bytes');
203
- });
204
- output.on('end', function () {
205
- console.log('Data has been drained');
206
- });
207
- archive.on('warning', function (err) {
208
- if (err.code === 'ENOENT') {
209
- console.error(err);
210
- } else {
211
- // throw error
212
- throw err;
213
- }
214
- });
215
- archive.on('error', function (err) {
216
- throw err;
217
- });
218
- archive.pipe(output);
219
- archive.directory(outputPath + '/app/', false);
220
- archive.finalize();
221
- }
222
-
223
- /**
224
- * Builds a PDF using the provided HTML template.
225
- *
226
- * @returns {Promise<boolean>} - Returns a Promise that resolves to true if the PDF was successfully built,
227
- * false otherwise.
228
- */
229
- async function buildPdf() {
230
- await checkFolders();
231
-
232
- try {
233
- const input = resolve(CWD, 'pdf.html');
234
- await statSync(input);
235
- return await viteBuild({
236
- build: {
237
- outDir: resolve(CWD, '.output/pdf'),
238
- rollupOptions: {
239
- input: {
240
- pdf: input,
241
- },
242
- output: {
243
- entryFileNames: `[name].js`,
244
- chunkFileNames: `[name].js`,
245
- assetFileNames: `[name].[ext]`,
246
- },
247
- },
248
- copyPublicDir: false,
249
- },
250
- });
251
- } catch (e) {
252
- let configFile = false;
253
- try {
254
- const file = resolve(CWD, 'vite.config.pdf.ts');
255
- await statSync(file);
256
- console.log('Use vite.config.pdf.ts file');
257
- configFile = file;
258
- } catch (e) {
259
- console.log('No use of vite.config.pdf.ts file');
260
- }
261
-
262
- const entry = resolve(CWD, 'pdf.ts');
263
-
264
- const config = {
265
- configFile: configFile,
266
- base: './',
267
- build: {
268
- outDir: resolve(CWD, '.output/pdf'),
269
- lib: {
270
- fileName: 'pdf',
271
- entry: entry,
272
- formats: ['es'],
273
- },
274
- },
275
- resolve: {
276
- alias: {
277
- '@': fileURLToPath(new URL(resolve(CWD, 'src'), import.meta.url)),
278
- nswow: fileURLToPath(new URL(resolve(CWD, 'nswow'), import.meta.url)),
279
- },
280
- },
281
- publicDir: false,
282
- };
283
-
284
- try {
285
- return await viteBuild(config);
286
- } catch (e) {
287
- console.error(e);
288
- return false;
289
- }
290
- }
291
- }
292
-
293
- /**
294
- * Builds Living Documentation (LDD) for a project.
295
- *
296
- * @async
297
- * @param {string} version - The version number to update in the project's package.json file. (optional)
298
- * @returns {Promise<boolean>} - A Promise that resolves to true if the LDD build is successful, false otherwise.
299
- */
300
- async function buildLdd(version) {
301
- let action = false;
302
- await checkFolders();
303
-
304
- const packageJson = await readPackageJson();
305
- const lddJson = await readLivingDocsJson();
306
-
307
- if (version) {
308
- packageJson.version = version;
309
- await writePackageJson(packageJson);
310
- action = true;
311
- }
312
-
313
- lddJson.name = packageJson.name;
314
- lddJson.version = packageJson.version;
315
-
316
- const input = resolve(CWD, 'ldd.html');
317
- try {
318
- await statSync(input);
319
- } catch (e) {
320
- return true;
321
- }
322
- try {
323
- await writeFileSync(`${outputPath}/v${lddJson.version}.txt`, '');
324
- return await viteBuild({
325
- build: {
326
- outDir: './.output/ldd',
327
- rollupOptions: {
328
- input: {
329
- ldd: input,
330
- },
331
- output: {
332
- entryFileNames: `assets/[name].js`,
333
- chunkFileNames: `assets/[name].js`,
334
- assetFileNames: `assets/[name].[ext]`,
335
- },
336
- },
337
- copyPublicDir: false,
338
- },
339
- })
340
- .then(async () => {
341
- const assetsPath = outputPath + '/ldd/assets';
342
- const assetsFiles = await readdirSync(assetsPath);
343
- for (let i = 0; i < assetsFiles.length; i++) {
344
- const file = assetsFiles[i];
345
- if (file.endsWith('.css')) {
346
- const path = './assets/' + file;
347
- if (!lddJson.assets.css.includes(path)) {
348
- action = true;
349
- lddJson.assets.css.push(path);
350
- }
351
- }
352
- if (file.endsWith('.js')) {
353
- const path = './assets/' + file;
354
- if (!lddJson.assets.js.includes(path)) {
355
- action = true;
356
- lddJson.assets.js.push(path);
357
- }
358
- }
359
- }
360
- if (action) {
361
- await writeLivingDocsJson(lddJson);
362
- }
363
- return true;
364
- })
365
- .then(async () => {
366
- return await finalizeLdd();
367
- });
368
- } catch (e) {
369
- console.error(e);
370
- return false;
371
- }
372
- }
373
-
374
- /**
375
- * Builds the word document by compiling the HTML file using Vite and
376
- * returns the result.
377
- *
378
- * @returns {Promise<boolean>} - A promise that resolves to true if the word document is successfully built,
379
- * or false if there was an error during the build process.
380
- */
381
- async function buildWord() {
382
- await checkFolders();
383
-
384
- try {
385
- const input = resolve(CWD, 'word.html');
386
- await statSync(input);
387
- return await viteBuild({
388
- build: {
389
- outDir: resolve(CWD, '.output/word'),
390
- rollupOptions: {
391
- input: {
392
- word: input,
393
- },
394
- output: {
395
- entryFileNames: `[name].js`,
396
- chunkFileNames: `[name].js`,
397
- assetFileNames: `[name].[ext]`,
398
- },
399
- },
400
- copyPublicDir: false,
401
- },
402
- });
403
- } catch (e) {
404
- let configFile = false;
405
- try {
406
- const file = resolve(CWD, 'vite.config.word.ts');
407
- await statSync(file);
408
- console.log('Use vite.config.word.ts file');
409
- configFile = file;
410
- } catch (e) {
411
- console.log('No use of vite.config.word.ts file');
412
- }
413
-
414
- const entry = resolve(CWD, 'word.ts');
415
-
416
- const config = {
417
- configFile: configFile,
418
- base: './',
419
- build: {
420
- outDir: resolve(CWD, '.output/word'),
421
- lib: {
422
- fileName: 'word',
423
- entry: entry,
424
- formats: ['es'],
425
- },
426
- },
427
- resolve: {
428
- alias: {
429
- '@': fileURLToPath(new URL(resolve(CWD, 'src'), import.meta.url)),
430
- nswow: fileURLToPath(new URL(resolve(CWD, 'nswow'), import.meta.url)),
431
- },
432
- },
433
- publicDir: false,
434
- };
435
-
436
- try {
437
- return await viteBuild(config);
438
- } catch (e) {
439
- console.error(e);
440
- return false;
441
- }
442
- }
443
- }
444
-
445
- /**
446
- * Builds the project sequentially by executing a series of asynchronous tasks in a specific order.
447
- * This method is used to build the project in a predetermined sequence.
448
- *
449
- * @return {Promise<void>} A Promise that resolves when the build process is completed or rejects if an error occurs.
450
- */
451
- async function build() {
452
- try {
453
- await checkFolders();
454
- const packageJson = await readPackageJson();
455
- const prompt = new Input({
456
- message: 'Livingdocs version',
457
- initial: packageJson.version,
458
- });
459
- const version = await prompt.run();
460
- await cleanOutput();
461
- await beaver(1);
462
- await mapScss();
463
- await mapLdd();
464
- await buildApp();
465
- await buildPdf();
466
- await buildWord();
467
- await buildLdd(version);
468
- await zipApp();
469
- } catch (error) {
470
- console.log(error);
471
- }
472
- }
473
-
474
- /**
475
- * Builds the project sequentially by executing a series of asynchronous tasks in a specific order.
476
- * This method is used to build the project in a predetermined sequence.
477
- *
478
- * @return {Promise<void>} A Promise that resolves when the build process is completed or rejects if an error occurs.
479
- */
480
- async function ddev() {
481
- try {
482
- await checkFolders();
483
- const packageJson = await readPackageJson();
484
- await beaver(1);
485
- await mapScss();
486
- await mapLdd();
487
- await buildDDev();
488
- } catch (error) {
489
- console.error(error);
490
- }
491
- }
492
-
493
- /**
494
- * Cleans up the SCSS alias by removing any characters that are not alphanumeric.
495
- * @param string
496
- */
497
- function cleanupScssAlias(string) {
498
- return string.replace(/[^a-zA-Z0-9]/g, '');
499
- }
500
-
501
- /**
502
- * Maps SCSS files and generates import statements for different output files.
503
- *
504
- * @returns {Promise<boolean>} Returns a promise that resolves to true if the SCSS mapping is successful, and false if there's an error.
505
- */
506
- async function mapScss() {
507
- await checkFolders();
508
- try {
509
- const relativePathToRoot = '../';
510
-
511
- const output = {
512
- app: [],
513
- ldd: [],
514
- pdf: [],
515
- word: [],
516
- };
517
-
518
- const mainFiles = await glob(
519
- resolve(process.cwd(), './src/assets/scss/*.scss'),
520
- {
521
- withFileTypes: true,
522
- },
523
- );
524
-
525
- let f = mainFiles.find((p) => {
526
- return p.name === 'general.scss';
527
- });
528
-
529
- const alias = cleanupScssAlias(f.relative());
530
-
531
- if (f) {
532
- output.app.push(`"${relativePathToRoot}${f.relative()}" as ${alias}`);
533
- output.ldd.push(`"${relativePathToRoot}${f.relative()}" as ${alias}`);
534
- output.pdf.push(`"${relativePathToRoot}${f.relative()}" as ${alias}`);
535
- output.word.push(`"${relativePathToRoot}${f.relative()}" as ${alias}`);
536
- }
537
-
538
- for (let x = 0; x < mainFiles.length; x++) {
539
- const alias = cleanupScssAlias(mainFiles[x].relative());
540
- if (mainFiles[x].name === 'app.scss') {
541
- output.app.push(
542
- `"${relativePathToRoot}${mainFiles[x].relative()}" as ${alias}`,
543
- );
544
- }
545
- if (mainFiles[x].name === 'ldd.scss') {
546
- output.ldd.push(
547
- `"${relativePathToRoot}${mainFiles[x].relative()}" as ${alias}`,
548
- );
549
- }
550
- if (mainFiles[x].name === 'pdf.scss') {
551
- output.pdf.push(
552
- `"${relativePathToRoot}${mainFiles[x].relative()}" as ${alias}`,
553
- );
554
- }
555
- if (mainFiles[x].name === 'word.scss') {
556
- output.word.push(
557
- `"${relativePathToRoot}${mainFiles[x].relative()}" as ${alias}`,
558
- );
559
- }
560
- }
561
-
562
- const livingdocs = await glob(resolve(process.cwd(), './livingdocs/**/*'), {
563
- maxDepth: 3,
564
- withFileTypes: true,
565
- });
566
- livingdocs.sort((a, b) => {
567
- const valueA = a.relative().toUpperCase();
568
- const valueB = b.relative().toUpperCase();
569
- if (valueA < valueB) {
570
- return -1;
571
- }
572
- if (valueA > valueB) {
573
- return 1;
574
- }
575
- return 0;
576
- });
577
-
578
- const components = livingdocs.filter((p) => {
579
- return p.name !== 'Properties' && p.parent.name !== 'Properties';
580
- });
581
-
582
- const properties = livingdocs.filter((p) => {
583
- return p.name === 'Properties' || p.parent.name === 'Properties';
584
- });
585
-
586
- const livingdocsList = [...components, ...properties];
587
-
588
- for (let x = 0; x < livingdocsList.length; x++) {
589
- const p = livingdocsList[x];
590
- try {
591
- const general = await statSync(p.fullpath() + '/general.scss');
592
- const alias = cleanupScssAlias(`${p.relative()}/general.scss`);
593
- output.app.push(
594
- `"${relativePathToRoot}${p.relative()}/general.scss" as ${alias}`,
595
- );
596
- output.ldd.push(
597
- `"${relativePathToRoot}${p.relative()}/general.scss" as ${alias}`,
598
- );
599
- output.pdf.push(
600
- `"${relativePathToRoot}${p.relative()}/general.scss" as ${alias}`,
601
- );
602
- output.word.push(
603
- `"${relativePathToRoot}${p.relative()}/general.scss" as ${alias}`,
604
- );
605
- } catch (e) {}
606
-
607
- const types = ['app', 'ldd', 'pdf', 'word'];
608
-
609
- for (let i = 0; i < types.length; i++) {
610
- const type = types[i];
611
- try {
612
- const f = await statSync(p.fullpath() + '/' + type + '.scss');
613
- const alias = cleanupScssAlias(`${p.relative()}/${type}.scss`);
614
- output[type].push(
615
- `"${relativePathToRoot}${p.relative()}/${type}.scss" as ${alias}`,
616
- );
617
- } catch (e) {}
618
- }
619
- }
620
-
621
- await writeFileSync(
622
- `${CWD}/.nswow/app.scss`,
623
- `@use ` +
624
- output.app.join(';\n@use ') +
625
- `;\n@use "nswow/core-styles" as nswowcorestyles;\n`,
626
- );
627
- await writeFileSync(
628
- `${CWD}/.nswow/ldd.scss`,
629
- `@use ` +
630
- output.ldd.join(';\n@use ') +
631
- `;\n@use "nswow/core-styles" as nswowcorestyles;\n`,
632
- );
633
- await writeFileSync(
634
- `${CWD}/.nswow/pdf.scss`,
635
- `@use ` +
636
- output.pdf.join(';\n@use ') +
637
- `;\n@use "nswow/core-styles" as nswowcorestyles;\n`,
638
- );
639
- await writeFileSync(
640
- `${CWD}/.nswow/word.scss`,
641
- `@use ` +
642
- output.word.join(';\n@use ') +
643
- `;\n@use "nswow/core-styles" as nswowcorestyles;\n`,
644
- );
645
-
646
- return true;
647
- } catch (e) {
648
- console.log(e);
649
- return false;
650
- }
651
- }
652
-
653
- /**
654
- * This function asynchronously maps JavaScript files and imports them into specific files.
655
- * @returns {Promise<boolean>} - A promise that resolves to true if the mapping and importing is successful.
656
- */
657
- async function mapJs() {
658
- const jsFiles = await glob(resolve(CWD, './livingdocs/' + '**/app.[t,j]s'), {
659
- withFileTypes: true,
660
- });
661
-
662
- const imports = [];
663
- const register = [];
664
-
665
- for (let i = 0; i < jsFiles.length; i++) {
666
- const file = jsFiles[i];
667
- const className = camelCase(file.parent.name);
668
- const path = [file.name];
669
- let parent = file.parent;
670
- while (parent) {
671
- path.unshift(parent.name);
672
- if (parent.name !== 'livingdocs') {
673
- parent = parent.parent;
674
- } else {
675
- parent = false;
676
- }
677
- }
678
- imports.push(`import ${className} from "../${path.join(file.sep)}"`);
679
- register.push(`ClassAutoLoader.register(${className}, "${className}")`);
680
- }
681
-
682
- const content = `import ArticleAutoloader from 'nswow/ArticleAutoloader'
683
- ${imports.join('\n')}
684
- const ClassAutoLoader = new ArticleAutoloader()
685
- ${register.join('\n')}
686
- export default ClassAutoLoader
687
- export { ClassAutoLoader }`;
688
-
689
- await writeFileSync(resolve(CWD, './src/Autoload.ts'), content);
690
- return true;
691
- }
692
-
693
- /**
694
- * Maps the livingdocs properties to components and groups.
695
- *
696
- * @returns {Promise<boolean>} Returns a promise that resolves to a boolean indicating the success or failure of the mapping.
697
- */
698
- async function mapLdd() {
699
- await checkFolders();
700
- try {
701
- const lddJson = await readLivingDocsJson();
702
-
703
- const propertiesFiles = await glob(
704
- resolve(CWD, './livingdocs/**/properties.{json,js,ts}'),
705
- );
706
- const mapProperties = {};
707
- for (let i = 0; i < propertiesFiles.length; i++) {
708
- const file = propertiesFiles[i];
709
- if (file.endsWith('.js') || file.endsWith('.ts')) {
710
- const properties = require(propertiesFiles[i]).default;
711
- const oKeys = Object.keys(properties);
712
- for (let j = 0; j < oKeys.length; j++) {
713
- mapProperties[oKeys[j]] = properties[oKeys[j]];
714
- }
715
- } else if (file.endsWith('.json')) {
716
- const properties = JSON.parse(readFileSync(propertiesFiles[i]));
717
- const oKeys = Object.keys(properties);
718
- for (let j = 0; j < oKeys.length; j++) {
719
- mapProperties[oKeys[j]] = properties[oKeys[j]];
720
- }
721
- }
722
- }
723
- lddJson.componentProperties = mapProperties;
724
-
725
- const groupsPath = resolve(CWD, './livingdocs');
726
- const groups = readdirSync(groupsPath);
727
- const keepGroups = [];
728
-
729
- for (let x = 0; x < groups.length; x++) {
730
- const group = groups[x];
731
- const groupName = group.replace('_and_', ' / ').replace('_', ' ');
732
- try {
733
- const stat = statSync(`${groupsPath}/${group}`);
734
- if (stat.isDirectory()) {
735
- const components = [];
736
- const c = readdirSync(`${groupsPath}/${group}`);
737
- for (let j = 0; j < c.length; j++) {
738
- const component = c[j];
739
- try {
740
- const stat = statSync(
741
- `${groupsPath}/${group}/${component}/${component}.html`,
742
- );
743
- components.push(component);
744
- } catch (e) {}
745
- }
746
- if (components.length) {
747
- keepGroups.push(groupName);
748
- const i = lddJson.groups.find((g) => {
749
- return g.label === groupName;
750
- });
751
- if (i) {
752
- const newComponents = [];
753
- for (let j = 0; j < i.components.length; j++) {
754
- const index = components.indexOf(i.components[j]);
755
- if (index !== -1) {
756
- newComponents.push(components[index]);
757
- components.splice(index, 1);
758
- }
759
- }
760
- for (let j = 0; j < components.length; j++) {
761
- newComponents.push(components[j]);
762
- }
763
-
764
- i.components = newComponents;
765
- } else {
766
- lddJson.groups.push({
767
- label: groupName,
768
- components: components,
769
- });
770
- }
771
- }
772
- } else {
773
- rmSync(`${groupsPath}/${group}`);
774
- }
775
- } catch (e) {
776
- console.log(e);
777
- return false;
778
- }
779
- }
780
-
781
- const newMap = [];
782
- for (let i = 0; i < lddJson.groups.length; i++) {
783
- const c = lddJson.groups[i];
784
- if (keepGroups.includes(c.label)) {
785
- newMap.push(c);
786
- }
787
- }
788
- lddJson.groups = newMap;
789
- await writeLivingDocsJson(lddJson);
790
- return true;
791
- } catch (e) {
792
- console.error(e);
793
- return false;
794
- }
795
- }
796
-
797
- /**
798
- * Maps the SCSS files and the LDD files in the project.
799
- *
800
- * @async
801
- * @function map
802
- * @returns {Promise<boolean>} A promise that resolves after successfully mapping the files.
803
- * @throws {Error} If there is an error during the mapping process.
804
- */
805
- async function map() {
806
- await checkFolders();
807
- await mapScss();
808
- await mapLdd();
809
- return true;
810
- }
811
-
812
- export { build, ddev, map, mapScss, mapLdd, mapJs };
1
+ import { join } from 'node:path/posix';
2
+ import {
3
+ statSync,
4
+ writeFileSync,
5
+ readFileSync,
6
+ mkdirSync,
7
+ readdirSync,
8
+ createWriteStream,
9
+ rmSync,
10
+ cpSync,
11
+ copyFileSync,
12
+ } from 'node:fs';
13
+ import { createRequire } from 'node:module';
14
+ import { glob } from 'glob';
15
+ import { build as viteBuild } from 'vite';
16
+ import {
17
+ readPackageJson,
18
+ writePackageJson,
19
+ readLivingDocsJson,
20
+ writeLivingDocsJson,
21
+ } from './utils.js';
22
+ import { nsWowInternalLddUrl } from './config.js';
23
+ import folders from './folders.js';
24
+ import { mapLdd } from './ldd/mapLdd.js';
25
+ import { LivingdocsDesignValidator } from './ldd/LivingdocsDesignValidator.js';
26
+ import { camelCase } from './utils.js';
27
+
28
+ const placeholderId = '6297EAFB-33A0-48B8-8D64-E61CDC3E9035';
29
+ const nswowPath = folders.srlImports;
30
+ const outputPath = folders.srlOutput;
31
+ const require = createRequire(import.meta.url);
32
+
33
+ const { Input } = require('enquirer');
34
+
35
+ let foldersChecked = false;
36
+
37
+ /**
38
+ * Checks if the required folders exist and creates them if necessary.
39
+ *
40
+ * @async
41
+ * @returns {Promise<boolean>} A promise that resolves to true once the folders are checked and created.
42
+ */
43
+ async function checkFolders() {
44
+ if (!foldersChecked) {
45
+ foldersChecked = true;
46
+ try {
47
+ await statSync(nswowPath);
48
+ } catch (e) {
49
+ await mkdirSync(nswowPath);
50
+ }
51
+ try {
52
+ await statSync(outputPath);
53
+ } catch (e) {
54
+ await mkdirSync(outputPath);
55
+ }
56
+ }
57
+ return true;
58
+ }
59
+
60
+ /**
61
+ * Cleans the output directory by removing all files and folders.
62
+ *
63
+ * @returns {Promise<boolean>} A promise that resolves to a boolean indicating whether the cleanup was successful.
64
+ */
65
+ async function cleanOutput() {
66
+ await checkFolders();
67
+ const output = readdirSync(outputPath);
68
+ for (let i = 0; i < output.length; i++) {
69
+ await rmSync(join(outputPath, output[i]), {
70
+ force: true,
71
+ recursive: true,
72
+ });
73
+ }
74
+ return true;
75
+ }
76
+
77
+ /**
78
+ * Builds the application by performing the following steps:
79
+ *
80
+ * 1. Checks the folders.
81
+ * 2. Executes the viteBuild function.
82
+ *
83
+ * @returns {Promise<void>} A Promise that resolves when the application is built.
84
+ */
85
+ async function buildApp() {
86
+ console.log("\n\nBuild application");
87
+ await checkFolders();
88
+ const build = await viteBuild({
89
+ build: {
90
+ copyPublicDir: false,
91
+ },
92
+ css: {
93
+ preprocessorOptions: {
94
+ scss: {
95
+ api: 'modern-compiler',
96
+ },
97
+ },
98
+ },
99
+ publicDir: false,
100
+ });
101
+
102
+ // Copy public folder exclude nswow folders
103
+ console.log(
104
+ '\n\nCopy public folder exclude nswow folders and exclude folder',
105
+ );
106
+ await cpSync(join(folders.srlPublic, '/'), join(outputPath, 'app'), {
107
+ filter: (src) => {
108
+ if (
109
+ src.startsWith(join(folders.srlPublic, 'downloads')) ||
110
+ src.startsWith(join(folders.srlPublic, 'html')) ||
111
+ src.startsWith(join(folders.srlPublic, 'images')) ||
112
+ src.startsWith(join(folders.srlPublic, 'json')) ||
113
+ src.startsWith(join(folders.srlPublic, 'exclude'))
114
+ ) {
115
+ return false;
116
+ } else {
117
+ src === join(folders.srlPublic, '/') ||
118
+ console.log(`Copy ${src} to ${outputPath}/app`);
119
+ return true;
120
+ }
121
+ },
122
+ recursive: true,
123
+ });
124
+ console.log('\n');
125
+
126
+ let index = await readFileSync(
127
+ join(folders.srlOutput, 'app', 'index.html'),
128
+ 'utf8',
129
+ );
130
+
131
+ console.log('Create file /template/article.html for nswow hybrid\n');
132
+ index = index.replace(
133
+ '<html>',
134
+ `<html lang="[[language-${placeholderId}]]">`,
135
+ );
136
+ index = index.replace(
137
+ /<base\s+href\s*=\s*(['"])(.*?)\1\s*\/?>/gi,
138
+ `<base href="[[base-${placeholderId}]]" />
139
+ [[meta-${placeholderId}]]`,
140
+ );
141
+
142
+ await writeFileSync(join(outputPath, 'app', 'index.html'), index);
143
+
144
+ index = index.replace(
145
+ /(<div\s+[^>]*id\s*=\s*["']app["'][^>]*>)([\s\S]*?)(<\/div>)/i,
146
+ `$1
147
+ <template>
148
+ [[content-${placeholderId}]]
149
+ </template>
150
+ $3`,
151
+ );
152
+
153
+ await mkdirSync(join(outputPath, 'app', 'template'), { recursive: true });
154
+ await writeFileSync(
155
+ join(outputPath, 'app', 'template', 'article.html'),
156
+ index,
157
+ );
158
+ /**
159
+ await writeFileSync(`${outputPath}/app/web.config`, `<?xml version="1.0" encoding="UTF-8"?>
160
+ <configuration>
161
+ <system.webServer>
162
+ <rewrite>
163
+ <rules>
164
+ <rule name="Rewrite to index.html" stopProcessing="true">
165
+ <match url=".*" />
166
+ <conditions logicalGrouping="MatchAll">
167
+ <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
168
+ <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
169
+ </conditions>
170
+ <action type="Rewrite" url="index.html" />
171
+ </rule>
172
+ </rules>
173
+ </rewrite>
174
+ </system.webServer>
175
+ </configuration>`);
176
+ await writeFileSync(`${outputPath}/app/.htaccess`, `RewriteEngine On
177
+ RewriteCond %{REQUEST_FILENAME} !-f
178
+ RewriteCond %{REQUEST_FILENAME} !-l
179
+ RewriteCond %{REQUEST_FILENAME} !-d
180
+ RewriteRule ^(.*)$ index.html [L]`);
181
+ /**/
182
+ return build;
183
+ }
184
+
185
+ /**
186
+ * Builds the application by performing the following steps:
187
+ *
188
+ * 1. Checks the folders.
189
+ * 2. Executes the viteBuild function.
190
+ *
191
+ * @returns {Promise<void>} A Promise that resolves when the application is built.
192
+ */
193
+ async function buildDDev() {
194
+ console.log("\n\nBuild application for DDEV");
195
+ await checkFolders();
196
+ const build = await viteBuild({
197
+ build: {
198
+ outDir: './.output/ddev',
199
+ },
200
+ publicDir: true,
201
+ });
202
+ return build;
203
+ }
204
+
205
+ /**
206
+ * Compresses the 'app' folder into a zip file using archiver library.
207
+ *
208
+ * @async
209
+ * @function zipApp
210
+ * @returns {Promise<void>} - A Promise that resolves when the zip operation is complete, or rejects with an error.
211
+ */
212
+ async function zipApp() {
213
+ console.log("\n\nCreate zip file for app");
214
+ await checkFolders();
215
+ const archiver = require('archiver');
216
+ const output = createWriteStream(join(outputPath, 'app.zip'));
217
+ const archive = archiver('zip', {
218
+ zlib: { level: 9 }, // Sets the compression level.
219
+ });
220
+ output.on('close', function () {
221
+ console.log('Create zip ' + outputPath + '/app.zip');
222
+ console.log(archive.pointer() + ' total bytes');
223
+ });
224
+ output.on('end', function () {
225
+ console.log('Data has been drained');
226
+ });
227
+ archive.on('warning', function (err) {
228
+ if (err.code === 'ENOENT') {
229
+ console.error(err);
230
+ } else {
231
+ // throw error
232
+ throw err;
233
+ }
234
+ });
235
+ archive.on('error', function (err) {
236
+ throw err;
237
+ });
238
+ archive.pipe(output);
239
+ archive.directory(join(outputPath, 'app', '/'), false);
240
+ archive.finalize();
241
+ }
242
+
243
+ async function zipLdd() {
244
+ console.log("\n\nCreate zip file for LDD");
245
+ await checkFolders();
246
+ const archiver = require('archiver');
247
+ const output = createWriteStream(join(outputPath, 'design.zip'));
248
+ const archive = archiver('zip', {
249
+ zlib: { level: 9 }, // Sets the compression level.
250
+ });
251
+ output.on('close', function () {
252
+ console.log('Create zip ' + outputPath + '/design.zip');
253
+ console.log(archive.pointer() + ' total bytes');
254
+ });
255
+ output.on('end', function () {
256
+ console.log('Data has been drained');
257
+ });
258
+ archive.on('warning', function (err) {
259
+ if (err.code === 'ENOENT') {
260
+ console.error(err);
261
+ } else {
262
+ // throw error
263
+ throw err;
264
+ }
265
+ });
266
+ archive.on('error', function (err) {
267
+ throw err;
268
+ });
269
+ archive.pipe(output);
270
+ archive.directory(join(outputPath, 'ldd', '/'), false);
271
+ archive.finalize();
272
+ }
273
+
274
+ /**
275
+ * Builds a PDF using the provided HTML template.
276
+ *
277
+ * @returns {Promise<boolean>} - Returns a Promise that resolves to true if the PDF was successfully built,
278
+ * false otherwise.
279
+ */
280
+ async function buildPdf() {
281
+ console.log("\n\nBuild PDF");
282
+ await checkFolders();
283
+
284
+ const config = {
285
+ css: {
286
+ preprocessorOptions: {
287
+ scss: {
288
+ api: 'modern-compiler',
289
+ },
290
+ },
291
+ },
292
+ base: './',
293
+ build: {
294
+ outDir: join(folders.srlOutput, 'pdf'),
295
+ lib: {
296
+ fileName: 'pdf',
297
+ entry: join(folders.srlEntries, 'pdf.ts'),
298
+ formats: ['es'],
299
+ },
300
+ },
301
+ publicDir: false,
302
+ };
303
+
304
+ try {
305
+ return await viteBuild(config);
306
+ } catch (e) {
307
+ console.error(e);
308
+ return false;
309
+ }
310
+ }
311
+
312
+ async function buildXbrl() {
313
+ console.log("\n\nBuild XBRL");
314
+ await checkFolders();
315
+
316
+ const config = {
317
+ css: {
318
+ preprocessorOptions: {
319
+ scss: {
320
+ api: 'modern-compiler',
321
+ },
322
+ },
323
+ },
324
+ base: './',
325
+ build: {
326
+ outDir: join(folders.srlOutput, 'xbrl'),
327
+ lib: {
328
+ fileName: 'xbrl',
329
+ entry: join(folders.srlImports, 'xbrl.scss'),
330
+ formats: ['es'],
331
+ },
332
+ },
333
+ publicDir: false,
334
+ };
335
+
336
+ try {
337
+ return await viteBuild(config);
338
+ } catch (e) {
339
+ console.error(e);
340
+ return false;
341
+ }
342
+ }
343
+
344
+ /**
345
+ * Builds Living Documentation (LDD) for a project.
346
+ *
347
+ * @async
348
+ * @param {string} version - The version number to update in the project's package.json file. (optional)
349
+ * @returns {Promise<boolean>} - A Promise that resolves to true if the LDD build is successful, false otherwise.
350
+ */
351
+ async function buildLdd(version) {
352
+ console.log("\n\nBuild Livingdocs");
353
+ await checkFolders();
354
+ await mapLdd();
355
+
356
+ const packageJson = await readPackageJson();
357
+ const lddJson = await readLivingDocsJson();
358
+
359
+ if (version) {
360
+ packageJson.version = version;
361
+ await writePackageJson();
362
+ }
363
+
364
+ lddJson.name = packageJson.name;
365
+ lddJson.version = packageJson.version;
366
+
367
+ const config = {
368
+ css: {
369
+ preprocessorOptions: {
370
+ scss: {
371
+ api: 'modern-compiler',
372
+ },
373
+ },
374
+ },
375
+ base: './',
376
+ build: {
377
+ outDir: join(folders.srlOutput, 'ldd', 'assets'),
378
+ lib: {
379
+ fileName: 'ldd',
380
+ entry: join(folders.srlImports, 'ldd.scss'),
381
+ formats: ['es'],
382
+ },
383
+ },
384
+ publicDir: false,
385
+ };
386
+
387
+ await writeFileSync(join(outputPath, `v${lddJson.version}.txt`), '');
388
+
389
+ try {
390
+ return await viteBuild(config)
391
+ .then(async () => {
392
+ const assetsPath = join(outputPath, 'ldd', 'assets');
393
+ const assetsFiles = await readdirSync(assetsPath);
394
+ lddJson.assets.css = [];
395
+ lddJson.assets.js = [];
396
+ for (let i = 0; i < assetsFiles.length; i++) {
397
+ const file = assetsFiles[i];
398
+ if (file.endsWith('.css')) {
399
+ const path = join('./assets/' + file);
400
+ if (!lddJson.assets.css.includes(path)) {
401
+ lddJson.assets.css.push(path);
402
+ }
403
+ }
404
+ if (file.endsWith('.js')) {
405
+ const path = join('./assets/' + file);
406
+ if (!lddJson.assets.js.includes(path)) {
407
+ lddJson.assets.js.push(path);
408
+ }
409
+ }
410
+ }
411
+
412
+ const fontFiles = await glob(join(folders.srlAssets, 'fonts', '**', '*.scss'), {
413
+ withFileTypes: true,
414
+ });
415
+
416
+ if (fontFiles.length) {
417
+ console.log("\n\nBuild Livingdocs fonts");
418
+
419
+ const importPath = join(folders.srlImports, 'fonts');
420
+ try {
421
+ await statSync(importPath);
422
+ } catch (e) {
423
+ await mkdirSync(importPath, { recursive: true });
424
+ }
425
+ const importFile = join(importPath, 'style.scss');
426
+
427
+ const importFonts = [];
428
+ fontFiles.forEach( f => {
429
+ importFonts.push(`../../../${f.relativePosix()}`);
430
+ })
431
+ await writeFileSync(importFile, `@use "` + importFonts.join('" as *;\n@use "') + `" as *;\n`)
432
+
433
+ await viteBuild({
434
+ css: {
435
+ preprocessorOptions: {
436
+ scss: {
437
+ api: 'modern-compiler',
438
+ },
439
+ },
440
+ },
441
+ base: './',
442
+ build: {
443
+ outDir: join(folders.srlOutput, 'ldd', 'fonts'),
444
+ assetsInlineLimit: 0,
445
+ assetsDir: '',
446
+ rollupOptions: {
447
+ input: importFile,
448
+ output: {
449
+ assetFileNames: (assetInfo) => {
450
+ if (/woff|woff2|ttf|otf|svg|jpe?g|png|gif|webp|avif|bmp|ico|apng/.test(assetInfo.name)) {
451
+ return '[name]-[hash][extname]';
452
+ }
453
+ return '[name][extname]';
454
+ }
455
+ }
456
+ }
457
+ },
458
+ resolve: {
459
+ alias: {
460
+ '~': folders.root,
461
+ '@': folders.srlSrc,
462
+ '#components': folders.srlComponents,
463
+ '#composables': folders.srlComposables,
464
+ '#plugins': folders.srlPlugins,
465
+ '#types': folders.srlTypes,
466
+ '#utils': folders.srlUtils,
467
+ '#imports': folders.srlImports,
468
+ '#ldd': folders.packageLd,
469
+ 'assets': folders.srlAssets,
470
+ 'srl': folders.srlSystem,
471
+ },
472
+ },
473
+ publicDir: false,
474
+ })
475
+ }
476
+
477
+ console.log("\n\nBuild Livingdocs design.json");
478
+ await writeLivingDocsJson();
479
+
480
+ return true;
481
+ })
482
+ .then(async () => {
483
+ copyFileSync(
484
+ join(folders.root, 'livingdocs.config.json'),
485
+ join(folders.srlOutput, 'ldd', 'design.json'),
486
+ );
487
+ });
488
+ } catch (e) {
489
+ console.error(e);
490
+ return false;
491
+ }
492
+ }
493
+
494
+ /**
495
+ * Builds the word document by compiling the HTML file using Vite and
496
+ * returns the result.
497
+ *
498
+ * @returns {Promise<boolean>} - A promise that resolves to true if the word document is successfully built,
499
+ * or false if there was an error during the build process.
500
+ */
501
+ async function buildWord() {
502
+ console.log("\n\nBuild Word");
503
+ await checkFolders();
504
+ let configFile = false;
505
+
506
+ const config = {
507
+ css: {
508
+ preprocessorOptions: {
509
+ scss: {
510
+ api: 'modern-compiler',
511
+ },
512
+ },
513
+ },
514
+ base: './',
515
+ build: {
516
+ outDir: join(folders.srlOutput, 'word'),
517
+ lib: {
518
+ fileName: 'word',
519
+ entry: join(folders.srlImports, 'word.scss'),
520
+ formats: ['es'],
521
+ },
522
+ },
523
+ publicDir: false,
524
+ };
525
+
526
+ try {
527
+ return await viteBuild(config);
528
+ } catch (e) {
529
+ console.error(e);
530
+ return false;
531
+ }
532
+ }
533
+
534
+ /**
535
+ * Builds the project sequentially by executing a series of asynchronous tasks in a specific order.
536
+ * This method is used to build the project in a predetermined sequence.
537
+ *
538
+ * @param {string} version
539
+ * @return {Promise<void>} A Promise that resolves when the build process is completed or rejects if an error occurs.
540
+ */
541
+ async function build(version) {
542
+ try {
543
+ await checkFolders();
544
+ const packageJson = await readPackageJson();
545
+
546
+ if (!version) {
547
+ const prompt = new Input({
548
+ message: 'Livingdocs version',
549
+ initial: packageJson.version,
550
+ });
551
+ version = await prompt.run();
552
+ }
553
+
554
+ packageJson.version = version;
555
+ await writePackageJson();
556
+
557
+ await cleanOutput();
558
+ await buildApp();
559
+ await buildPdf();
560
+ await buildWord();
561
+ await buildXbrl();
562
+ await buildLdd();
563
+ new LivingdocsDesignValidator(await readLivingDocsJson()).IsDesignValid();
564
+ await zipApp();
565
+ await zipLdd();
566
+ } catch (error) {
567
+ console.log(error);
568
+ }
569
+ }
570
+
571
+ /**
572
+ * Builds the project sequentially by executing a series of asynchronous tasks in a specific order.
573
+ * This method is used to build the project in a predetermined sequence.
574
+ *
575
+ * @return {Promise<void>} A Promise that resolves when the build process is completed or rejects if an error occurs.
576
+ */
577
+ async function ddev() {
578
+ try {
579
+ await checkFolders();
580
+ await buildDDev();
581
+ } catch (error) {
582
+ console.error(error);
583
+ }
584
+ }
585
+
586
+ /**
587
+ * Cleans up the SCSS alias by removing any characters that are not alphanumeric.
588
+ * @param string
589
+ */
590
+ function cleanupScssAlias(string) {
591
+ return string.replace(/[^a-zA-Z0-9]/g, '');
592
+ }
593
+
594
+ /**
595
+ * Maps SCSS files and generates import statements for different output files.
596
+ *
597
+ * @returns {Promise<boolean>} Returns a promise that resolves to true if the SCSS mapping is successful, and false if there's an error.
598
+ */
599
+ async function mapScss() {
600
+ await checkFolders();
601
+ try {
602
+ const packageJson = await readPackageJson();
603
+
604
+ const relativePathToRoot = join('..', '..', '/');
605
+
606
+ const output = {
607
+ app: [],
608
+ ldd: [],
609
+ pdf: [],
610
+ word: [],
611
+ xbrl: [],
612
+ };
613
+
614
+ const fontFiles = await glob(join(folders.srlAssets, 'fonts', '**', '*.scss'), {
615
+ withFileTypes: true,
616
+ });
617
+
618
+ const fontsOutput = []
619
+
620
+ if (fontFiles.length) {
621
+ fontsOutput.push(`@import "${nsWowInternalLddUrl}/${packageJson.name}/${packageJson.version}/fonts/style.css";`);
622
+ fontFiles.forEach(f => {
623
+ output.app.push(`"${relativePathToRoot}${f.relativePosix()}" as *`);
624
+ output.xbrl.push(`"${relativePathToRoot}${f.relativePosix()}" as *`);
625
+ })
626
+ output.ldd.push(`"./fonts.scss" as *`);
627
+ output.pdf.push(`"./fonts.scss" as *`);
628
+ output.word.push(`"./fonts.scss" as *`);
629
+ }
630
+
631
+ await writeFileSync(join(folders.srlImports, 'fonts.scss'), fontsOutput.join('\n'));
632
+
633
+ const mainFiles = await glob(join(folders.srlAssets, 'scss', '*.scss'), {
634
+ withFileTypes: true,
635
+ });
636
+
637
+ let f = mainFiles.find((p) => {
638
+ return p.name === 'general.scss';
639
+ });
640
+
641
+ if (f) {
642
+ output.app.push(`"${relativePathToRoot}${f.relativePosix()}" as *`);
643
+ output.ldd.push(`"${relativePathToRoot}${f.relativePosix()}" as *`);
644
+ output.pdf.push(`"${relativePathToRoot}${f.relativePosix()}" as *`);
645
+ output.word.push(`"${relativePathToRoot}${f.relativePosix()}" as *`);
646
+ }
647
+
648
+ for (let x = 0; x < mainFiles.length; x++) {
649
+ const alias = cleanupScssAlias(mainFiles[x].relativePosix());
650
+ if (mainFiles[x].name === 'app.scss') {
651
+ output.app.push(
652
+ `"${relativePathToRoot}${mainFiles[x].relativePosix()}" as *`,
653
+ );
654
+ }
655
+ if (mainFiles[x].name === 'ldd.scss') {
656
+ output.ldd.push(
657
+ `"${relativePathToRoot}${mainFiles[x].relativePosix()}" as *`,
658
+ );
659
+ }
660
+ if (mainFiles[x].name === 'editor.scss') {
661
+ output.ldd.push(
662
+ `"${relativePathToRoot}${mainFiles[x].relativePosix()}" as *`,
663
+ );
664
+ }
665
+ if (mainFiles[x].name === 'pdf.scss') {
666
+ output.pdf.push(
667
+ `"${relativePathToRoot}${mainFiles[x].relativePosix()}" as *`,
668
+ );
669
+ }
670
+ if (mainFiles[x].name === 'word.scss') {
671
+ output.word.push(
672
+ `"${relativePathToRoot}${mainFiles[x].relativePosix()}" as *`,
673
+ );
674
+ }
675
+ if (mainFiles[x].name === 'xbrl.scss') {
676
+ output.xbrl.push(
677
+ `"${relativePathToRoot}${mainFiles[x].relativePosix()}" as *`,
678
+ );
679
+ }
680
+ }
681
+
682
+ const livingdocs = await glob(join(folders.ld, '**', '*'), {
683
+ maxDepth: 3,
684
+ withFileTypes: true,
685
+ });
686
+ livingdocs.sort((a, b) => {
687
+ const valueA = a.relativePosix().toUpperCase();
688
+ const valueB = b.relativePosix().toUpperCase();
689
+ if (valueA < valueB) {
690
+ return -1;
691
+ }
692
+ if (valueA > valueB) {
693
+ return 1;
694
+ }
695
+ return 0;
696
+ });
697
+
698
+ const components = livingdocs.filter((p) => {
699
+ return p.name !== 'Properties' && p.parent.name !== 'Properties';
700
+ });
701
+
702
+ const properties = livingdocs.filter((p) => {
703
+ return p.name === 'Properties' || p.parent.name === 'Properties';
704
+ });
705
+
706
+ const livingdocsList = [...components, ...properties];
707
+
708
+ for (let x = 0; x < livingdocsList.length; x++) {
709
+ const p = livingdocsList[x];
710
+ try {
711
+ const general = await statSync(
712
+ join(p.fullpath(), 'scss', 'general.scss'),
713
+ );
714
+ output.app.push(
715
+ `"${relativePathToRoot}${p.relativePosix()}/scss/general.scss" as *`,
716
+ );
717
+ output.ldd.push(
718
+ `"${relativePathToRoot}${p.relativePosix()}/scss/general.scss" as *`,
719
+ );
720
+ output.pdf.push(
721
+ `"${relativePathToRoot}${p.relativePosix()}/scss/general.scss" as *`,
722
+ );
723
+ output.word.push(
724
+ `"${relativePathToRoot}${p.relativePosix()}/scss/general.scss" as *`,
725
+ );
726
+ } catch (e) {}
727
+
728
+ const types = ['app', 'ldd', 'editor', 'pdf', 'word', 'xbrl'];
729
+
730
+ for (let i = 0; i < types.length; i++) {
731
+ const type = types[i];
732
+ try {
733
+ const f = await statSync(join(p.fullpath(), 'scss', `${type}.scss`));
734
+ const alias = cleanupScssAlias(`${p.relativePosix()}/${type}.scss`);
735
+ const fileName = type === 'editor' ? 'ldd' : type;
736
+ output[fileName].push(
737
+ `"${relativePathToRoot}${p.relativePosix()}/scss/${type}.scss" as *`,
738
+ );
739
+ } catch (e) {}
740
+ }
741
+ }
742
+
743
+ await writeFileSync(
744
+ join(folders.srlImports, 'app.scss'),
745
+ `@use ` +
746
+ output.app.join(';\n@use ') +
747
+ `;\n@use "../scss/core-styles.scss" as *;\n`,
748
+ );
749
+ await writeFileSync(
750
+ join(folders.srlImports, 'ldd.scss'),
751
+ `@use ` +
752
+ output.ldd.join(';\n@use ') +
753
+ `;\n@use "../scss/core-styles.scss" as *;\n`,
754
+ );
755
+ await writeFileSync(
756
+ join(folders.srlImports, 'pdf.scss'),
757
+ `@use ` +
758
+ output.pdf.join(';\n@use ') +
759
+ `;\n@use "../scss/core-styles.scss" as *;\n`,
760
+ );
761
+ await writeFileSync(
762
+ join(folders.srlImports, 'word.scss'),
763
+ `@use ` +
764
+ output.word.join(';\n@use ') +
765
+ `;\n@use "../scss/core-styles.scss" as *;\n`,
766
+ );
767
+
768
+ await writeFileSync(
769
+ join(folders.srlImports, 'xbrl.scss'),
770
+ output.xbrl.length
771
+ ? `@use ` + output.xbrl.join(';\n@use ')
772
+ : '' + `;\n@use "../scss/xbrl-core-styles.scss" as *;\n`,
773
+ );
774
+
775
+ return true;
776
+ } catch (e) {
777
+ console.log(e);
778
+ return false;
779
+ }
780
+ }
781
+
782
+ /**
783
+ * This function asynchronously maps JavaScript files and imports them into specific files.
784
+ * @returns {Promise<boolean>} - A promise that resolves to true if the mapping and importing is successful.
785
+ */
786
+ async function mapJs() {
787
+ const jsFiles = await glob(join(folders.ld, '**', 'app.[t,j]s'), {
788
+ withFileTypes: true,
789
+ });
790
+
791
+ const imports = [];
792
+ const register = [];
793
+
794
+ for (let i = 0; i < jsFiles.length; i++) {
795
+ const file = jsFiles[i];
796
+ const className = camelCase(file.parent.name);
797
+ const path = [file.name];
798
+ let parent = file.parent;
799
+ while (parent) {
800
+ path.unshift(parent.name);
801
+ if (parent.name !== 'livingdocs') {
802
+ parent = parent.parent;
803
+ } else {
804
+ parent = false;
805
+ }
806
+ }
807
+ imports.push(`import ${className} from "../${path.join(file.sep)}"`);
808
+ register.push(`ClassAutoLoader.register(${className}, "${className}")`);
809
+ }
810
+
811
+ const content = `import ArticleAutoloader from 'srl/ArticleAutoloader'
812
+ ${imports.join('\n')}
813
+ const ClassAutoLoader = new ArticleAutoloader()
814
+ ${register.join('\n')}
815
+ export default ClassAutoLoader
816
+ export { ClassAutoLoader }`;
817
+
818
+ await writeFileSync(join(folders.srlSrc, 'Autoload.ts'), content);
819
+ return true;
820
+ }
821
+
822
+ /**
823
+ * Maps the SCSS files and the LDD files in the project.
824
+ *
825
+ * @async
826
+ * @function map
827
+ * @returns {Promise<boolean>} A promise that resolves after successfully mapping the files.
828
+ * @throws {Error} If there is an error during the mapping process.
829
+ */
830
+ async function map() {
831
+ await checkFolders();
832
+ await mapScss();
833
+ await mapLdd();
834
+ return true;
835
+ }
836
+
837
+ export { build, ddev, map, mapScss, mapLdd, mapJs };