@maizzle/framework 6.0.0-rc.2 → 6.0.0-rc.21

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 (551) hide show
  1. package/README.md +3 -3
  2. package/bin/maizzle.mjs +1 -1
  3. package/dist/build.d.ts +20 -0
  4. package/dist/build.d.ts.map +1 -0
  5. package/dist/build.js +163 -0
  6. package/dist/build.js.map +1 -0
  7. package/dist/components/Body.vue +128 -0
  8. package/dist/components/Button.vue +148 -52
  9. package/dist/components/CodeBlock.vue +69 -0
  10. package/dist/components/CodeInline.vue +49 -0
  11. package/dist/components/Column.vue +108 -0
  12. package/dist/components/Container.vue +123 -0
  13. package/dist/components/Font.vue +96 -0
  14. package/dist/components/Head.vue +30 -0
  15. package/dist/components/Heading.vue +28 -0
  16. package/dist/components/Hr.vue +33 -0
  17. package/dist/components/Html.vue +137 -0
  18. package/dist/components/Img.vue +70 -0
  19. package/dist/components/Layout.vue +143 -0
  20. package/dist/components/Link.vue +26 -0
  21. package/dist/components/Markdown.vue +89 -0
  22. package/dist/components/MarkdownLayout.vue +39 -0
  23. package/dist/components/NotPlaintext.vue +14 -0
  24. package/dist/components/Outlook.vue +74 -11
  25. package/dist/components/OutlookBg.vue +241 -0
  26. package/dist/components/Overlap.vue +156 -0
  27. package/dist/components/Plaintext.vue +14 -0
  28. package/dist/components/Preheader.vue +15 -0
  29. package/dist/components/QrCode.vue +157 -0
  30. package/dist/components/Raw.vue +28 -0
  31. package/dist/components/Row.vue +184 -0
  32. package/dist/components/Section.vue +124 -0
  33. package/dist/components/Spacer.vue +70 -21
  34. package/dist/components/Tailwind.vue +43 -0
  35. package/dist/components/Text.vue +29 -0
  36. package/dist/components/utils.d.ts +28 -0
  37. package/dist/components/utils.d.ts.map +1 -0
  38. package/dist/components/utils.js +50 -0
  39. package/dist/components/utils.js.map +1 -0
  40. package/dist/components/utils.ts +51 -0
  41. package/dist/composables/{defineConfig.d.mts → defineConfig.d.ts} +2 -2
  42. package/dist/composables/defineConfig.d.ts.map +1 -0
  43. package/dist/composables/{defineConfig.mjs → defineConfig.js} +4 -5
  44. package/dist/composables/defineConfig.js.map +1 -0
  45. package/dist/composables/renderContext.d.ts +37 -0
  46. package/dist/composables/renderContext.d.ts.map +1 -0
  47. package/dist/composables/{renderContext.mjs → renderContext.js} +2 -2
  48. package/dist/composables/renderContext.js.map +1 -0
  49. package/dist/composables/useBaseUrl.d.ts +19 -0
  50. package/dist/composables/useBaseUrl.d.ts.map +1 -0
  51. package/dist/composables/useBaseUrl.js +26 -0
  52. package/dist/composables/useBaseUrl.js.map +1 -0
  53. package/dist/composables/{useConfig.d.mts → useConfig.d.ts} +2 -2
  54. package/dist/composables/useConfig.d.ts.map +1 -0
  55. package/dist/composables/{useConfig.mjs → useConfig.js} +2 -3
  56. package/dist/composables/useConfig.js.map +1 -0
  57. package/dist/composables/useCurrentTemplate.d.ts +31 -0
  58. package/dist/composables/useCurrentTemplate.d.ts.map +1 -0
  59. package/dist/composables/useCurrentTemplate.js +35 -0
  60. package/dist/composables/useCurrentTemplate.js.map +1 -0
  61. package/dist/composables/{useDoctype.d.mts → useDoctype.d.ts} +1 -1
  62. package/dist/composables/useDoctype.d.ts.map +1 -0
  63. package/dist/composables/{useDoctype.mjs → useDoctype.js} +3 -4
  64. package/dist/composables/useDoctype.js.map +1 -0
  65. package/dist/composables/{useEvent.d.mts → useEvent.d.ts} +3 -3
  66. package/dist/composables/useEvent.d.ts.map +1 -0
  67. package/dist/composables/{useEvent.mjs → useEvent.js} +4 -5
  68. package/dist/composables/useEvent.js.map +1 -0
  69. package/dist/composables/useFont.d.ts +50 -0
  70. package/dist/composables/useFont.d.ts.map +1 -0
  71. package/dist/composables/useFont.js +92 -0
  72. package/dist/composables/useFont.js.map +1 -0
  73. package/dist/composables/useOutlookFallback.d.ts +21 -0
  74. package/dist/composables/useOutlookFallback.d.ts.map +1 -0
  75. package/dist/composables/useOutlookFallback.js +29 -0
  76. package/dist/composables/useOutlookFallback.js.map +1 -0
  77. package/dist/composables/{usePlaintext.d.mts → usePlaintext.d.ts} +3 -1
  78. package/dist/composables/usePlaintext.d.ts.map +1 -0
  79. package/dist/composables/{usePlaintext.mjs → usePlaintext.js} +4 -4
  80. package/dist/composables/usePlaintext.js.map +1 -0
  81. package/dist/composables/usePreheader.d.ts +24 -0
  82. package/dist/composables/usePreheader.d.ts.map +1 -0
  83. package/dist/composables/usePreheader.js +28 -0
  84. package/dist/composables/usePreheader.js.map +1 -0
  85. package/dist/composables/useTransformers.d.ts +34 -0
  86. package/dist/composables/useTransformers.d.ts.map +1 -0
  87. package/dist/composables/useTransformers.js +48 -0
  88. package/dist/composables/useTransformers.js.map +1 -0
  89. package/dist/composables/useUrlQuery.d.ts +19 -0
  90. package/dist/composables/useUrlQuery.d.ts.map +1 -0
  91. package/dist/composables/useUrlQuery.js +26 -0
  92. package/dist/composables/useUrlQuery.js.map +1 -0
  93. package/dist/config/{defaults.d.mts → defaults.d.ts} +2 -2
  94. package/dist/config/defaults.d.ts.map +1 -0
  95. package/dist/config/{defaults.mjs → defaults.js} +10 -6
  96. package/dist/config/defaults.js.map +1 -0
  97. package/dist/config/{index.d.mts → index.d.ts} +4 -4
  98. package/dist/config/index.d.ts.map +1 -0
  99. package/dist/config/{index.mjs → index.js} +12 -10
  100. package/dist/config/index.js.map +1 -0
  101. package/dist/events/{index.d.mts → index.d.ts} +30 -12
  102. package/dist/events/index.d.ts.map +1 -0
  103. package/dist/events/{index.mjs → index.js} +26 -13
  104. package/dist/events/index.js.map +1 -0
  105. package/dist/index.d.ts +39 -0
  106. package/dist/index.js +38 -0
  107. package/dist/{plaintext.d.mts → plaintext.d.ts} +1 -1
  108. package/dist/plaintext.d.ts.map +1 -0
  109. package/dist/{plaintext.mjs → plaintext.js} +4 -5
  110. package/dist/plaintext.js.map +1 -0
  111. package/dist/{plugin.d.mts → plugin.d.ts} +2 -2
  112. package/dist/plugin.d.ts.map +1 -0
  113. package/dist/plugin.js +57 -0
  114. package/dist/plugin.js.map +1 -0
  115. package/dist/plugins/postcss/{mergeMediaQueries.d.mts → mergeMediaQueries.d.ts} +2 -2
  116. package/dist/plugins/postcss/mergeMediaQueries.d.ts.map +1 -0
  117. package/dist/plugins/postcss/{mergeMediaQueries.mjs → mergeMediaQueries.js} +2 -3
  118. package/dist/plugins/postcss/mergeMediaQueries.js.map +1 -0
  119. package/dist/plugins/postcss/{pruneVars.d.mts → pruneVars.d.ts} +1 -1
  120. package/dist/plugins/postcss/pruneVars.d.ts.map +1 -0
  121. package/dist/plugins/postcss/{pruneVars.mjs → pruneVars.js} +2 -2
  122. package/dist/plugins/postcss/pruneVars.js.map +1 -0
  123. package/dist/plugins/postcss/quoteFontFamilies.d.ts +13 -0
  124. package/dist/plugins/postcss/quoteFontFamilies.d.ts.map +1 -0
  125. package/dist/plugins/postcss/quoteFontFamilies.js +84 -0
  126. package/dist/plugins/postcss/quoteFontFamilies.js.map +1 -0
  127. package/dist/plugins/postcss/{removeDeclarations.d.mts → removeDeclarations.d.ts} +1 -1
  128. package/dist/plugins/postcss/removeDeclarations.d.ts.map +1 -0
  129. package/dist/plugins/postcss/{removeDeclarations.mjs → removeDeclarations.js} +2 -2
  130. package/dist/plugins/postcss/removeDeclarations.js.map +1 -0
  131. package/dist/plugins/postcss/resolveMaizzleImports.d.ts +16 -0
  132. package/dist/plugins/postcss/resolveMaizzleImports.d.ts.map +1 -0
  133. package/dist/plugins/postcss/resolveMaizzleImports.js +39 -0
  134. package/dist/plugins/postcss/resolveMaizzleImports.js.map +1 -0
  135. package/dist/plugins/postcss/resolveProps.d.ts +8 -0
  136. package/dist/plugins/postcss/resolveProps.d.ts.map +1 -0
  137. package/dist/plugins/postcss/resolveProps.js +144 -0
  138. package/dist/plugins/postcss/resolveProps.js.map +1 -0
  139. package/dist/plugins/postcss/{tailwindCleanup.d.mts → tailwindCleanup.d.ts} +2 -2
  140. package/dist/plugins/postcss/tailwindCleanup.d.ts.map +1 -0
  141. package/dist/plugins/postcss/tailwindCleanup.js +68 -0
  142. package/dist/plugins/postcss/tailwindCleanup.js.map +1 -0
  143. package/dist/prepare.d.ts +17 -0
  144. package/dist/prepare.d.ts.map +1 -0
  145. package/dist/prepare.js +44 -0
  146. package/dist/prepare.js.map +1 -0
  147. package/dist/render/active.d.ts +8 -0
  148. package/dist/render/active.d.ts.map +1 -0
  149. package/dist/render/active.js +12 -0
  150. package/dist/render/active.js.map +1 -0
  151. package/dist/render/{createRenderer.d.mts → createRenderer.d.ts} +15 -7
  152. package/dist/render/createRenderer.d.ts.map +1 -0
  153. package/dist/render/createRenderer.js +320 -0
  154. package/dist/render/createRenderer.js.map +1 -0
  155. package/dist/render/index.d.ts +18 -0
  156. package/dist/render/index.d.ts.map +1 -0
  157. package/dist/render/index.js +53 -0
  158. package/dist/render/index.js.map +1 -0
  159. package/dist/render/injectFonts.d.ts +15 -0
  160. package/dist/render/injectFonts.d.ts.map +1 -0
  161. package/dist/render/injectFonts.js +45 -0
  162. package/dist/render/injectFonts.js.map +1 -0
  163. package/dist/render/plugins/codeBlockExtract.d.ts +14 -0
  164. package/dist/render/plugins/codeBlockExtract.d.ts.map +1 -0
  165. package/dist/render/plugins/codeBlockExtract.js +34 -0
  166. package/dist/render/plugins/codeBlockExtract.js.map +1 -0
  167. package/dist/render/plugins/markdownExtract.d.ts +12 -0
  168. package/dist/render/plugins/markdownExtract.d.ts.map +1 -0
  169. package/dist/render/plugins/markdownExtract.js +49 -0
  170. package/dist/render/plugins/markdownExtract.js.map +1 -0
  171. package/dist/render/plugins/rawExtract.d.ts +14 -0
  172. package/dist/render/plugins/rawExtract.d.ts.map +1 -0
  173. package/dist/render/plugins/rawExtract.js +34 -0
  174. package/dist/render/plugins/rawExtract.js.map +1 -0
  175. package/dist/render/plugins/rowSourceLocation.d.ts +18 -0
  176. package/dist/render/plugins/rowSourceLocation.d.ts.map +1 -0
  177. package/dist/render/plugins/rowSourceLocation.js +45 -0
  178. package/dist/render/plugins/rowSourceLocation.js.map +1 -0
  179. package/dist/{serve.d.mts → serve.d.ts} +4 -2
  180. package/dist/serve.d.ts.map +1 -0
  181. package/dist/{serve.mjs → serve.js} +203 -78
  182. package/dist/serve.js.map +1 -0
  183. package/dist/server/compatibility.d.ts +59 -0
  184. package/dist/server/compatibility.d.ts.map +1 -0
  185. package/dist/server/compatibility.js +911 -0
  186. package/dist/server/compatibility.js.map +1 -0
  187. package/dist/server/email.d.ts +17 -0
  188. package/dist/server/email.d.ts.map +1 -0
  189. package/dist/server/email.js +40 -0
  190. package/dist/server/email.js.map +1 -0
  191. package/dist/server/linter.d.ts +20 -0
  192. package/dist/server/linter.d.ts.map +1 -0
  193. package/dist/server/linter.js +339 -0
  194. package/dist/server/linter.js.map +1 -0
  195. package/dist/server/sfc-utils.d.ts +21 -0
  196. package/dist/server/sfc-utils.d.ts.map +1 -0
  197. package/dist/server/sfc-utils.js +198 -0
  198. package/dist/server/sfc-utils.js.map +1 -0
  199. package/dist/server/ui/App.vue +253 -77
  200. package/dist/server/ui/components/SidebarClose.vue +12 -0
  201. package/dist/server/ui/components/ui/checkbox/Checkbox.vue +35 -0
  202. package/dist/server/ui/components/ui/checkbox/index.ts +1 -0
  203. package/dist/server/ui/components/ui/command/Command.vue +5 -1
  204. package/dist/server/ui/components/ui/command/CommandDialog.vue +1 -1
  205. package/dist/server/ui/components/ui/command/CommandInput.vue +19 -1
  206. package/dist/server/ui/components/ui/command/CommandItem.vue +1 -1
  207. package/dist/server/ui/components/ui/command/CommandList.vue +1 -1
  208. package/dist/server/ui/components/ui/command/CommandShortcut.vue +1 -1
  209. package/dist/server/ui/components/ui/dialog/DialogOverlay.vue +9 -1
  210. package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuItem.vue +1 -1
  211. package/dist/server/ui/components/ui/input/Input.vue +1 -1
  212. package/dist/server/ui/components/ui/scroll-area/ScrollBar.vue +1 -1
  213. package/dist/server/ui/components/ui/sheet/SheetContent.vue +1 -1
  214. package/dist/server/ui/components/ui/sheet/SheetOverlay.vue +9 -1
  215. package/dist/server/ui/components/ui/sidebar/Sidebar.vue +8 -1
  216. package/dist/server/ui/components/ui/sidebar/SidebarProvider.vue +1 -1
  217. package/dist/server/ui/components/ui/sidebar/SidebarTrigger.vue +5 -4
  218. package/dist/server/ui/components/ui/tags-input/TagsInput.vue +26 -0
  219. package/dist/server/ui/components/ui/tags-input/TagsInputInput.vue +17 -0
  220. package/dist/server/ui/components/ui/tags-input/TagsInputItem.vue +19 -0
  221. package/dist/server/ui/components/ui/tags-input/TagsInputItemDelete.vue +22 -0
  222. package/dist/server/ui/components/ui/tags-input/TagsInputItemText.vue +17 -0
  223. package/dist/server/ui/components/ui/tags-input/index.ts +5 -0
  224. package/dist/server/ui/components/ui/toggle/index.ts +3 -3
  225. package/dist/server/ui/components/ui/toggle-group/ToggleGroup.vue +1 -1
  226. package/dist/server/ui/components/ui/toggle-group/ToggleGroupItem.vue +2 -2
  227. package/dist/server/ui/lib/emulated-dark-mode.ts +131 -0
  228. package/dist/server/ui/main.css +20 -20
  229. package/dist/server/ui/pages/Home.vue +12 -5
  230. package/dist/server/ui/pages/Preview.vue +716 -276
  231. package/dist/tests/render/_helpers.d.ts +6 -0
  232. package/dist/tests/render/_helpers.d.ts.map +1 -0
  233. package/dist/tests/render/_helpers.js +16 -0
  234. package/dist/tests/render/_helpers.js.map +1 -0
  235. package/dist/transformers/{addAttributes.d.mts → addAttributes.d.ts} +2 -2
  236. package/dist/transformers/addAttributes.d.ts.map +1 -0
  237. package/dist/transformers/{addAttributes.mjs → addAttributes.js} +16 -13
  238. package/dist/transformers/addAttributes.js.map +1 -0
  239. package/dist/transformers/attributeToStyle.d.ts +38 -0
  240. package/dist/transformers/attributeToStyle.d.ts.map +1 -0
  241. package/dist/transformers/attributeToStyle.js +94 -0
  242. package/dist/transformers/attributeToStyle.js.map +1 -0
  243. package/dist/transformers/base.d.ts +71 -0
  244. package/dist/transformers/base.d.ts.map +1 -0
  245. package/dist/transformers/{base.mjs → base.js} +56 -30
  246. package/dist/transformers/base.js.map +1 -0
  247. package/dist/transformers/columnWidth.d.ts +31 -0
  248. package/dist/transformers/columnWidth.d.ts.map +1 -0
  249. package/dist/transformers/columnWidth.js +546 -0
  250. package/dist/transformers/columnWidth.js.map +1 -0
  251. package/dist/transformers/entities.d.ts +37 -0
  252. package/dist/transformers/entities.d.ts.map +1 -0
  253. package/dist/transformers/entities.js +73 -0
  254. package/dist/transformers/entities.js.map +1 -0
  255. package/dist/transformers/filters/defaults.d.ts +6 -0
  256. package/dist/transformers/filters/defaults.d.ts.map +1 -0
  257. package/dist/transformers/filters/defaults.js +78 -0
  258. package/dist/transformers/filters/defaults.js.map +1 -0
  259. package/dist/transformers/filters/index.d.ts +43 -0
  260. package/dist/transformers/filters/index.d.ts.map +1 -0
  261. package/dist/transformers/filters/index.js +89 -0
  262. package/dist/transformers/filters/index.js.map +1 -0
  263. package/dist/transformers/format.d.ts +22 -0
  264. package/dist/transformers/format.d.ts.map +1 -0
  265. package/dist/transformers/format.js +30 -0
  266. package/dist/transformers/format.js.map +1 -0
  267. package/dist/transformers/{index.d.mts → index.d.ts} +14 -11
  268. package/dist/transformers/index.d.ts.map +1 -0
  269. package/dist/transformers/index.js +133 -0
  270. package/dist/transformers/index.js.map +1 -0
  271. package/dist/transformers/inlineCss.d.ts +84 -0
  272. package/dist/transformers/inlineCss.d.ts.map +1 -0
  273. package/dist/transformers/inlineCss.js +91 -0
  274. package/dist/transformers/inlineCss.js.map +1 -0
  275. package/dist/transformers/inlineLink.d.ts +35 -0
  276. package/dist/transformers/inlineLink.d.ts.map +1 -0
  277. package/dist/transformers/{inlineLink.mjs → inlineLink.js} +34 -10
  278. package/dist/transformers/inlineLink.js.map +1 -0
  279. package/dist/transformers/minify.d.ts +21 -0
  280. package/dist/transformers/minify.d.ts.map +1 -0
  281. package/dist/transformers/minify.js +25 -0
  282. package/dist/transformers/minify.js.map +1 -0
  283. package/dist/transformers/msoPlaceholders.d.ts +28 -0
  284. package/dist/transformers/msoPlaceholders.d.ts.map +1 -0
  285. package/dist/transformers/msoPlaceholders.js +88 -0
  286. package/dist/transformers/msoPlaceholders.js.map +1 -0
  287. package/dist/transformers/purgeCss.d.ts +43 -0
  288. package/dist/transformers/purgeCss.d.ts.map +1 -0
  289. package/dist/transformers/purgeCss.js +181 -0
  290. package/dist/transformers/purgeCss.js.map +1 -0
  291. package/dist/transformers/removeAttributes.d.ts +54 -0
  292. package/dist/transformers/removeAttributes.d.ts.map +1 -0
  293. package/dist/transformers/removeAttributes.js +70 -0
  294. package/dist/transformers/removeAttributes.js.map +1 -0
  295. package/dist/transformers/{replaceStrings.d.mts → replaceStrings.d.ts} +2 -2
  296. package/dist/transformers/replaceStrings.d.ts.map +1 -0
  297. package/dist/transformers/{replaceStrings.mjs → replaceStrings.js} +2 -2
  298. package/dist/transformers/replaceStrings.js.map +1 -0
  299. package/dist/transformers/{safeClassNames.d.mts → safeClassNames.d.ts} +2 -2
  300. package/dist/transformers/safeClassNames.d.ts.map +1 -0
  301. package/dist/transformers/{safeClassNames.mjs → safeClassNames.js} +4 -5
  302. package/dist/transformers/safeClassNames.js.map +1 -0
  303. package/dist/transformers/shorthandCss.d.ts +47 -0
  304. package/dist/transformers/shorthandCss.d.ts.map +1 -0
  305. package/dist/transformers/shorthandCss.js +61 -0
  306. package/dist/transformers/shorthandCss.js.map +1 -0
  307. package/dist/transformers/sixHex.d.ts +25 -0
  308. package/dist/transformers/sixHex.d.ts.map +1 -0
  309. package/dist/transformers/sixHex.js +42 -0
  310. package/dist/transformers/sixHex.js.map +1 -0
  311. package/dist/transformers/tailwindComponent.d.ts +16 -0
  312. package/dist/transformers/tailwindComponent.d.ts.map +1 -0
  313. package/dist/transformers/tailwindComponent.js +92 -0
  314. package/dist/transformers/tailwindComponent.js.map +1 -0
  315. package/dist/transformers/{tailwindcss.d.mts → tailwindcss.d.ts} +8 -4
  316. package/dist/transformers/tailwindcss.d.ts.map +1 -0
  317. package/dist/transformers/tailwindcss.js +97 -0
  318. package/dist/transformers/tailwindcss.js.map +1 -0
  319. package/dist/transformers/urlQuery.d.ts +36 -0
  320. package/dist/transformers/urlQuery.d.ts.map +1 -0
  321. package/dist/transformers/urlQuery.js +77 -0
  322. package/dist/transformers/urlQuery.js.map +1 -0
  323. package/dist/types/config.d.ts +737 -0
  324. package/dist/types/config.d.ts.map +1 -0
  325. package/dist/types/config.js +1 -0
  326. package/dist/types/index.d.ts +2 -0
  327. package/dist/types/index.js +1 -0
  328. package/dist/utils/ast/index.d.ts +4 -0
  329. package/dist/utils/ast/index.js +4 -0
  330. package/dist/utils/ast/{parser.d.mts → parser.d.ts} +1 -1
  331. package/dist/utils/ast/parser.d.ts.map +1 -0
  332. package/dist/utils/ast/{parser.mjs → parser.js} +2 -3
  333. package/dist/utils/ast/parser.js.map +1 -0
  334. package/dist/utils/ast/serializer.d.ts +8 -0
  335. package/dist/utils/ast/serializer.d.ts.map +1 -0
  336. package/dist/utils/ast/serializer.js +36 -0
  337. package/dist/utils/ast/serializer.js.map +1 -0
  338. package/dist/utils/ast/{walker.d.mts → walker.d.ts} +1 -1
  339. package/dist/utils/ast/walker.d.ts.map +1 -0
  340. package/dist/utils/ast/{walker.mjs → walker.js} +2 -2
  341. package/dist/utils/ast/walker.js.map +1 -0
  342. package/dist/utils/compileTailwindCss.d.ts +16 -0
  343. package/dist/utils/compileTailwindCss.d.ts.map +1 -0
  344. package/dist/utils/compileTailwindCss.js +54 -0
  345. package/dist/utils/compileTailwindCss.js.map +1 -0
  346. package/dist/utils/componentSources.d.ts +50 -0
  347. package/dist/utils/componentSources.d.ts.map +1 -0
  348. package/dist/utils/componentSources.js +50 -0
  349. package/dist/utils/componentSources.js.map +1 -0
  350. package/dist/utils/decodeStyleEntities.d.ts +15 -0
  351. package/dist/utils/decodeStyleEntities.d.ts.map +1 -0
  352. package/dist/utils/decodeStyleEntities.js +18 -0
  353. package/dist/utils/decodeStyleEntities.js.map +1 -0
  354. package/dist/utils/detect.d.ts +5 -0
  355. package/dist/utils/detect.d.ts.map +1 -0
  356. package/dist/utils/detect.js +10 -0
  357. package/dist/utils/detect.js.map +1 -0
  358. package/dist/utils/output-markers.d.ts +29 -0
  359. package/dist/utils/output-markers.d.ts.map +1 -0
  360. package/dist/utils/output-markers.js +68 -0
  361. package/dist/utils/output-markers.js.map +1 -0
  362. package/dist/utils/{url.d.mts → url.d.ts} +1 -1
  363. package/dist/utils/url.d.ts.map +1 -0
  364. package/dist/utils/{url.mjs → url.js} +2 -3
  365. package/dist/utils/url.js.map +1 -0
  366. package/dist/utils/watchPaths.d.ts +11 -0
  367. package/dist/utils/watchPaths.d.ts.map +1 -0
  368. package/dist/utils/watchPaths.js +19 -0
  369. package/dist/utils/watchPaths.js.map +1 -0
  370. package/node_modules/@clack/core/CHANGELOG.md +8 -0
  371. package/node_modules/@clack/core/dist/index.d.mts +18 -4
  372. package/node_modules/@clack/core/dist/index.mjs +16 -10
  373. package/node_modules/@clack/core/dist/index.mjs.map +1 -1
  374. package/node_modules/@clack/core/package.json +5 -2
  375. package/node_modules/@clack/prompts/CHANGELOG.md +15 -0
  376. package/node_modules/@clack/prompts/README.md +107 -2
  377. package/node_modules/@clack/prompts/dist/index.d.mts +16 -11
  378. package/node_modules/@clack/prompts/dist/index.mjs +114 -107
  379. package/node_modules/@clack/prompts/dist/index.mjs.map +1 -1
  380. package/node_modules/@clack/prompts/package.json +7 -4
  381. package/node_modules/fast-string-truncated-width/dist/index.js +36 -96
  382. package/node_modules/fast-string-truncated-width/dist/types.d.ts +0 -3
  383. package/node_modules/fast-string-truncated-width/dist/utils.d.ts +3 -3
  384. package/node_modules/fast-string-truncated-width/dist/utils.js +14 -9
  385. package/node_modules/fast-string-truncated-width/package.json +1 -1
  386. package/node_modules/fast-string-truncated-width/readme.md +2 -3
  387. package/node_modules/fast-string-width/package.json +2 -2
  388. package/node_modules/fast-string-width/readme.md +0 -3
  389. package/node_modules/fast-wrap-ansi/lib/main.js +4 -1
  390. package/node_modules/fast-wrap-ansi/lib/main.js.map +1 -1
  391. package/node_modules/fast-wrap-ansi/package.json +2 -2
  392. package/node_modules/maizzle/README.md +24 -0
  393. package/node_modules/maizzle/dist/commands/make/component.mjs +1 -1
  394. package/node_modules/maizzle/dist/commands/make/config.mjs +1 -1
  395. package/node_modules/maizzle/dist/commands/make/layout.mjs +3 -3
  396. package/node_modules/maizzle/dist/commands/make/scaffold.mjs +1 -1
  397. package/node_modules/maizzle/dist/commands/make/stubs/Layout.vue +146 -0
  398. package/node_modules/maizzle/dist/commands/make/stubs/component.vue +2 -4
  399. package/node_modules/maizzle/dist/commands/make/stubs/config.ts +1 -5
  400. package/node_modules/maizzle/dist/commands/make/template.mjs +1 -1
  401. package/node_modules/maizzle/dist/commands/new.mjs +32 -52
  402. package/node_modules/maizzle/dist/index.d.mts +1 -0
  403. package/node_modules/maizzle/dist/index.mjs +30 -7
  404. package/node_modules/maizzle/package.json +4 -3
  405. package/node_modules/nypm/dist/cli.mjs +28 -5
  406. package/node_modules/nypm/dist/index.d.mts +0 -8
  407. package/node_modules/nypm/dist/index.mjs +27 -4
  408. package/node_modules/nypm/package.json +12 -12
  409. package/node_modules/tinyexec/README.md +1 -1
  410. package/node_modules/tinyexec/dist/main.d.mts +6 -6
  411. package/node_modules/tinyexec/dist/main.mjs +126 -134
  412. package/node_modules/tinyexec/package.json +9 -9
  413. package/package.json +31 -21
  414. package/dist/build.d.mts +0 -19
  415. package/dist/build.d.mts.map +0 -1
  416. package/dist/build.mjs +0 -139
  417. package/dist/build.mjs.map +0 -1
  418. package/dist/components/Divider.vue +0 -105
  419. package/dist/components/Vml.vue +0 -89
  420. package/dist/components/utils.d.mts +0 -5
  421. package/dist/components/utils.d.mts.map +0 -1
  422. package/dist/components/utils.mjs +0 -9
  423. package/dist/components/utils.mjs.map +0 -1
  424. package/dist/composables/defineConfig.d.mts.map +0 -1
  425. package/dist/composables/defineConfig.mjs.map +0 -1
  426. package/dist/composables/renderContext.d.mts +0 -19
  427. package/dist/composables/renderContext.d.mts.map +0 -1
  428. package/dist/composables/renderContext.mjs.map +0 -1
  429. package/dist/composables/useConfig.d.mts.map +0 -1
  430. package/dist/composables/useConfig.mjs.map +0 -1
  431. package/dist/composables/useDoctype.d.mts.map +0 -1
  432. package/dist/composables/useDoctype.mjs.map +0 -1
  433. package/dist/composables/useEvent.d.mts.map +0 -1
  434. package/dist/composables/useEvent.mjs.map +0 -1
  435. package/dist/composables/usePlaintext.d.mts.map +0 -1
  436. package/dist/composables/usePlaintext.mjs.map +0 -1
  437. package/dist/config/defaults.d.mts.map +0 -1
  438. package/dist/config/defaults.mjs.map +0 -1
  439. package/dist/config/index.d.mts.map +0 -1
  440. package/dist/config/index.mjs.map +0 -1
  441. package/dist/events/index.d.mts.map +0 -1
  442. package/dist/events/index.mjs.map +0 -1
  443. package/dist/index.d.mts +0 -29
  444. package/dist/index.mjs +0 -29
  445. package/dist/plaintext.d.mts.map +0 -1
  446. package/dist/plaintext.mjs.map +0 -1
  447. package/dist/plugin.d.mts.map +0 -1
  448. package/dist/plugin.mjs +0 -41
  449. package/dist/plugin.mjs.map +0 -1
  450. package/dist/plugins/postcss/mergeMediaQueries.d.mts.map +0 -1
  451. package/dist/plugins/postcss/mergeMediaQueries.mjs.map +0 -1
  452. package/dist/plugins/postcss/pruneVars.d.mts.map +0 -1
  453. package/dist/plugins/postcss/pruneVars.mjs.map +0 -1
  454. package/dist/plugins/postcss/removeDeclarations.d.mts.map +0 -1
  455. package/dist/plugins/postcss/removeDeclarations.mjs.map +0 -1
  456. package/dist/plugins/postcss/tailwindCleanup.d.mts.map +0 -1
  457. package/dist/plugins/postcss/tailwindCleanup.mjs +0 -35
  458. package/dist/plugins/postcss/tailwindCleanup.mjs.map +0 -1
  459. package/dist/render/createRenderer.d.mts.map +0 -1
  460. package/dist/render/createRenderer.mjs +0 -155
  461. package/dist/render/createRenderer.mjs.map +0 -1
  462. package/dist/render/index.d.mts +0 -26
  463. package/dist/render/index.d.mts.map +0 -1
  464. package/dist/render/index.mjs +0 -44
  465. package/dist/render/index.mjs.map +0 -1
  466. package/dist/serve.d.mts.map +0 -1
  467. package/dist/serve.mjs.map +0 -1
  468. package/dist/server/compatibility.d.mts +0 -6
  469. package/dist/server/compatibility.d.mts.map +0 -1
  470. package/dist/server/compatibility.mjs +0 -83
  471. package/dist/server/compatibility.mjs.map +0 -1
  472. package/dist/server/linter.d.mts +0 -6
  473. package/dist/server/linter.d.mts.map +0 -1
  474. package/dist/server/linter.mjs +0 -200
  475. package/dist/server/linter.mjs.map +0 -1
  476. package/dist/server/ui/components/ui/resizable/ResizableHandle.vue +0 -30
  477. package/dist/server/ui/components/ui/resizable/ResizablePanel.vue +0 -21
  478. package/dist/server/ui/components/ui/resizable/ResizablePanelGroup.vue +0 -25
  479. package/dist/server/ui/components/ui/resizable/index.ts +0 -3
  480. package/dist/transformers/addAttributes.d.mts.map +0 -1
  481. package/dist/transformers/addAttributes.mjs.map +0 -1
  482. package/dist/transformers/attributeToStyle.d.mts +0 -25
  483. package/dist/transformers/attributeToStyle.d.mts.map +0 -1
  484. package/dist/transformers/attributeToStyle.mjs +0 -80
  485. package/dist/transformers/attributeToStyle.mjs.map +0 -1
  486. package/dist/transformers/base.d.mts +0 -8
  487. package/dist/transformers/base.d.mts.map +0 -1
  488. package/dist/transformers/base.mjs.map +0 -1
  489. package/dist/transformers/entities.d.mts +0 -8
  490. package/dist/transformers/entities.d.mts.map +0 -1
  491. package/dist/transformers/entities.mjs +0 -38
  492. package/dist/transformers/entities.mjs.map +0 -1
  493. package/dist/transformers/format.d.mts +0 -15
  494. package/dist/transformers/format.d.mts.map +0 -1
  495. package/dist/transformers/format.mjs +0 -26
  496. package/dist/transformers/format.mjs.map +0 -1
  497. package/dist/transformers/index.d.mts.map +0 -1
  498. package/dist/transformers/index.mjs +0 -73
  499. package/dist/transformers/index.mjs.map +0 -1
  500. package/dist/transformers/inlineCSS.d.mts +0 -30
  501. package/dist/transformers/inlineCSS.d.mts.map +0 -1
  502. package/dist/transformers/inlineCSS.mjs +0 -79
  503. package/dist/transformers/inlineCSS.mjs.map +0 -1
  504. package/dist/transformers/inlineLink.d.mts +0 -14
  505. package/dist/transformers/inlineLink.d.mts.map +0 -1
  506. package/dist/transformers/inlineLink.mjs.map +0 -1
  507. package/dist/transformers/minify.d.mts +0 -17
  508. package/dist/transformers/minify.d.mts.map +0 -1
  509. package/dist/transformers/minify.mjs +0 -24
  510. package/dist/transformers/minify.mjs.map +0 -1
  511. package/dist/transformers/purgeCSS.d.mts +0 -23
  512. package/dist/transformers/purgeCSS.d.mts.map +0 -1
  513. package/dist/transformers/purgeCSS.mjs +0 -66
  514. package/dist/transformers/purgeCSS.mjs.map +0 -1
  515. package/dist/transformers/removeAttributes.d.mts +0 -31
  516. package/dist/transformers/removeAttributes.d.mts.map +0 -1
  517. package/dist/transformers/removeAttributes.mjs +0 -63
  518. package/dist/transformers/removeAttributes.mjs.map +0 -1
  519. package/dist/transformers/replaceStrings.d.mts.map +0 -1
  520. package/dist/transformers/replaceStrings.mjs.map +0 -1
  521. package/dist/transformers/safeClassNames.d.mts.map +0 -1
  522. package/dist/transformers/safeClassNames.mjs.map +0 -1
  523. package/dist/transformers/shorthandCSS.d.mts +0 -24
  524. package/dist/transformers/shorthandCSS.d.mts.map +0 -1
  525. package/dist/transformers/shorthandCSS.mjs +0 -48
  526. package/dist/transformers/shorthandCSS.mjs.map +0 -1
  527. package/dist/transformers/tailwindcss.d.mts.map +0 -1
  528. package/dist/transformers/tailwindcss.mjs +0 -136
  529. package/dist/transformers/tailwindcss.mjs.map +0 -1
  530. package/dist/transformers/urlQuery.d.mts +0 -24
  531. package/dist/transformers/urlQuery.d.mts.map +0 -1
  532. package/dist/transformers/urlQuery.mjs +0 -65
  533. package/dist/transformers/urlQuery.mjs.map +0 -1
  534. package/dist/types/config.d.mts +0 -149
  535. package/dist/types/config.d.mts.map +0 -1
  536. package/dist/types/config.mjs +0 -1
  537. package/dist/types/index.d.mts +0 -2
  538. package/dist/types/index.mjs +0 -1
  539. package/dist/utils/ast/index.d.mts +0 -4
  540. package/dist/utils/ast/index.mjs +0 -5
  541. package/dist/utils/ast/parser.d.mts.map +0 -1
  542. package/dist/utils/ast/parser.mjs.map +0 -1
  543. package/dist/utils/ast/serializer.d.mts +0 -7
  544. package/dist/utils/ast/serializer.d.mts.map +0 -1
  545. package/dist/utils/ast/serializer.mjs +0 -13
  546. package/dist/utils/ast/serializer.mjs.map +0 -1
  547. package/dist/utils/ast/walker.d.mts.map +0 -1
  548. package/dist/utils/ast/walker.mjs.map +0 -1
  549. package/dist/utils/url.d.mts.map +0 -1
  550. package/dist/utils/url.mjs.map +0 -1
  551. package/node_modules/maizzle/dist/commands/make/stubs/layout.vue +0 -39
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","names":[],"sources":["../../src/types/config.ts"],"mappings":";;;;;;;;;;;;UAMiB,eAAA;;;;;;EAMf,IAAA;EANe;;;;;EAYf,UAAA;EAMA;;;;;EAAA,MAAA;EASkB;;;;;EAHlB,EAAA,GAAK,MAAA;AAAA;AAAA,KAGK,QAAA,GAAW,MAAA;EACrB,QAAA,GAAW,eAAA;AAAA;AAAA,UAGI,SAAA;EAYP;;;;;;;;;;;EAAR,KAAA,GAAQ,QAAA;EAe2B;;;;;;;AAUrC;;;EAdE,IAAA;IA0CmB,+BAxCjB,GAAA,WAoGa;IAlGb,IAAA,cAAkB,MAAA,SAAe,MAAA,6BA0IZ;IAxIrB,UAAA,GAAa,MAAA,kBAmKY;IAjKzB,QAAA,YAYF;IAVE,SAAA;EAAA;AAAA;AAAA,UAIa,SAAA;EAmCb;;;;;EA7BF,IAAA;EAoEE;;;;;;;EA5DF,KAAA,aAAkB,MAAA;EAmGhB;;;;;;;;;;;;;EArFF,MAAA,aAAmB,OAAA;IA4IZ;AAGT;;;;;IAxII,gBAAA;IAgLO;;;;;IA1KP,oBAAA;IA0KF;;;;;;IAnKE,QAAA;IAsKQ;;;;;AAOZ;;;;;AAOA;IAxKI,gBAAA,GAAmB,MAAA;IA8KX;;;;;;IAvKR,aAAA;IAkLa;;;;;AAyBjB;IApMI,cAAA;IAoMuB;;;;;;IA7LvB,kBAAA;IAsNwB;;;;;;IA/MxB,UAAA,GAAa,MAAA;MAAiB,KAAA;MAAe,GAAA;IAAA;IA+MrB;;AAG5B;;IA7MI,SAAA;EAAA;EA6MoD;AACxD;;;;;AAEA;;;;;;EAlME,KAAA;IAwMU;;AAGZ;;;IArMI,IAAA,wCAA4C,CAAA,UAAW,CAAA;EAAA;EAgN7B;;;;;;;EAvM5B,cAAA;EAuMA;;;;;EAjMA,IAAA,aAAiB,MAAA;EAmMQ;AAqB3B;;;;;;EAhNE,SAAA;IAAwB,IAAA;EAAA;EAsNxB;;;;;;;EA9MA,MAAA;EAsNA;;;;AAUF;;;;;;EArNE,kBAAA,GAAqB,MAAA,SA3BE,WAAA;EAiQb;;;;AAaZ;;;;;;;;EAtOE,OAAA;AAAA;AAAA,UAGe,gBAAA;;;;;;;;;;;;;;;;;;EAkBf,GAAA,WAAc,MAAA,iBAAuB,MAAA;EAodH;;;;;;;;;;;;;;;;;;;;;EA9blC,MAAA,GAAS,KAAA;IAAiB,IAAA;IAAc,KAAA,YAAiB,MAAA;EAAA;AAAA;AAAA,KAG/C,cAAA,aAA2B,MAAA;;;;;;KAO3B,eAAA;AAAA,UAOK,YAAA;EAiUX;;;;;EA3TJ,OAAA,GAAU,eAAA;EA4VV;;;;;;;EApVA,KAAA;AAAA;AAAA,UAGe,aAAA;EAsXf;;;;;;;;;;EA3WA,eAAA;EA+YgB;;;;;;;;;;EApYhB,aAAA;AAAA;AAAA,UAGe,UAAA;EAqY2C;EAnY1D,UAAA,GAAa,gBAAA;EAmYE;;;;;;;EA3Xf,cAAA,GAAiB,cAAA;EA6XC;;;;;EAvXlB,MAAA,aAN+B,OAAA,CAMI,aAAA;EAyXrB;;;;;;;;EAhXd,MAAA,aAAmB,OAAA,CAT6B,aAAA,CASA,IAAA;AAAA;AAAA,KAGtC,cAAA,IAAkB,GAAA,UAAa,KAAA;AAAA,KAC/B,aAAA,WAAwB,MAAA,SAAe,cAAA;AAAA,UAElC,cAAA,SAAuB,SAAA;;;;;;EAMtC,UAAA,GAN8B,OAAA,CAMD,YAAA;AAAA;AAAA,UAGd,SAAA;;;;;;;;;EASf,OAAA,GAAU,MAAA,YAAkB,MAAA;;EAE5B,UAAA,GAAa,MAAA,SAAe,SAAA;;EAE5B,gBAAA,GAAmB,MAAA;AAAA;;;;;;;;;;;;;;;;;;;UAqBJ,kBAAA;EACf,cAAA;EACA,gBAAA;EACA,SAAA;EACA,gBAAA;EACA,YAAA;EACA,MAAA;EACA,aAAA;EACA,OAAA;EACA,OAAA;EACA,QAAA;EACA,QAAA;EACA,QAAA;EACA,cAAA;EACA,QAAA;EACA,MAAA;AAAA;;;;;;;UASe,eAAA;;;;;EAKf,WAAA;;;;;;EAMA,SAAA;;;;;;EAMA,OAAA,GAAU,OAAA,CAjBoB,oBAAA,CAiBgB,IAAA;AAAA;;;;;;;;;;;KAapC,eAAA;uDAIR,IAAA;;;;;EAKA,MAAA;;;;;;;;;EASA,UAAA;AAAA;AAAA,UAGa,aAAA;;;;;;;;;;;;;;;EAef,IAAA;;EAEA,QAAA,GAAW,cAAA;;;;;;;;EAQX,OAAA;;EAEA,MAAA;;;;;;IAME,IAAA;;;;;;;;;;;IAWA,SAAA;EAAA;;EAGF,MAAA;;;;;;IAME,MAAA;;;;;;IAMA,WAAA;EAAA;;EAGF,UAAA;;;;;;;;;;;;;;;;;;;;IAoBE,MAAA,GAAS,eAAA,GAAkB,eAAA;EAAA;;EAG7B,MAAA;;;;;;IAME,IAAA;;;;;;;;;;;IAWA,KAAA;;;;;;;;;;;;;;;;;;;;IAoBA,KAAA;kCAEE,EAAA;MAEA,IAAA;MAEA,OAAA;MAEA,SAAA,GAAY,MAAA;IAAA;;;;;;;;;;;;;;IAed,MAAA,WAAiB,YAAA;EAAA;;EAGnB,GAAA,GAAM,SAAA;;;;;;;;;;;;;;;EAeN,SAAA,aAAsB,eAAA;;EAEtB,OAAA,GAAU,aAAA;;;;;;;;;;;;EAYV,eAAA,aAA4B,kBAAA;;;;;;;;;EAS5B,cAAA,GAAiB,MAAA;;;;;;;;;;;;EAYjB,OAAA,GAAU,aAAA;;EAEV,GAAA,GAAM,SAAA;;EAEN,IAAA,GAAO,UAAA;;;;;;;;;;;;;EAaP,IAAA,GAAO,YAAA;;;;;;;;;;;;;;;;EAgBP,GAAA,GAAM,SAAA;;EAKN,YAAA,IAAgB,MAAA;IAAU,MAAA,EAAQ,aAAA;EAAA,aAA2B,OAAA;;EAE7D,YAAA,IAAgB,MAAA;IAAU,MAAA,EAAQ,aAAA;IAAe,QAAA,EAAU,YAAA;EAAA,sBAAmC,OAAA;;EAE9F,WAAA,IAAe,MAAA;IAAU,MAAA,EAAQ,aAAA;IAAe,QAAA,EAAU,YAAA;IAAc,IAAA;EAAA,sBAAmC,OAAA;;EAE3G,cAAA,IAAkB,MAAA;IAAU,MAAA,EAAQ,aAAA;IAAe,QAAA,EAAU,YAAA;IAAc,IAAA;EAAA,sBAAmC,OAAA;;EAE9G,UAAA,IAAc,MAAA;IAAU,KAAA;IAAiB,MAAA,EAAQ,aAAA;EAAA,aAA2B,OAAA;EAAA,CAG3E,GAAA;AAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { AttributesConfig, CaniemailClient, ChecksConfig, ComponentSource, CssConfig, EntitiesConfig, FilterFunction, FiltersConfig, HtmlConfig, MaizzleConfig, MarkdownConfig, PlaintextConfig, PostcssConfig, TransformerToggles, UrlConfig, UrlQuery, UrlQueryOptions } from "./config.js";
2
+ export { type AttributesConfig, type CaniemailClient, type ChecksConfig, type ComponentSource, type CssConfig, type EntitiesConfig, type FilterFunction, type FiltersConfig, type HtmlConfig, type MaizzleConfig, type MarkdownConfig, type PlaintextConfig, type PostcssConfig, type TransformerToggles, type UrlConfig, type UrlQuery, type UrlQueryOptions };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { parse } from "./parser.js";
2
+ import { walk } from "./walker.js";
3
+ import { serialize } from "./serializer.js";
4
+ export { parse, serialize, walk };
@@ -0,0 +1,4 @@
1
+ import { parse } from "./parser.js";
2
+ import { walk } from "./walker.js";
3
+ import { serialize } from "./serializer.js";
4
+ export { parse, serialize, walk };
@@ -4,4 +4,4 @@ import { ChildNode, DomHandlerOptions } from "domhandler";
4
4
  declare function parse(html: string, options?: DomHandlerOptions): ChildNode[];
5
5
  //#endregion
6
6
  export { parse };
7
- //# sourceMappingURL=parser.d.mts.map
7
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","names":[],"sources":["../../../src/utils/ast/parser.ts"],"mappings":";;;iBAIgB,KAAA,CAAM,IAAA,UAAc,OAAA,GAAS,iBAAA,GAAyB,SAAA"}
@@ -1,6 +1,5 @@
1
1
  import { Parser } from "htmlparser2";
2
2
  import { DomHandler } from "domhandler";
3
-
4
3
  //#region src/utils/ast/parser.ts
5
4
  function parse(html, options = {}) {
6
5
  const handler = new DomHandler();
@@ -9,7 +8,7 @@ function parse(html, options = {}) {
9
8
  parser.end();
10
9
  return handler.dom;
11
10
  }
12
-
13
11
  //#endregion
14
12
  export { parse };
15
- //# sourceMappingURL=parser.mjs.map
13
+
14
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","names":[],"sources":["../../../src/utils/ast/parser.ts"],"sourcesContent":["import { Parser } from 'htmlparser2'\nimport { DomHandler } from 'domhandler'\nimport type { ChildNode, DomHandlerOptions } from 'domhandler'\n\nexport function parse(html: string, options: DomHandlerOptions = {}): ChildNode[] {\n const handler = new DomHandler()\n const parser = new Parser(handler, options)\n parser.write(html)\n parser.end()\n return handler.dom\n}\n"],"mappings":";;;AAIA,SAAgB,MAAM,MAAc,UAA6B,EAAE,EAAe;CAChF,MAAM,UAAU,IAAI,YAAY;CAChC,MAAM,SAAS,IAAI,OAAO,SAAS,QAAQ;CAC3C,OAAO,MAAM,KAAK;CAClB,OAAO,KAAK;CACZ,OAAO,QAAQ"}
@@ -0,0 +1,8 @@
1
+ import { ChildNode } from "domhandler";
2
+ import { DomSerializerOptions } from "dom-serializer";
3
+
4
+ //#region src/utils/ast/serializer.d.ts
5
+ declare function serialize(dom: ChildNode[], options?: DomSerializerOptions): string;
6
+ //#endregion
7
+ export { serialize };
8
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","names":[],"sources":["../../../src/utils/ast/serializer.ts"],"mappings":";;;;iBA6BgB,SAAA,CAAU,GAAA,EAAK,SAAA,IAAa,OAAA,GAAU,oBAAA"}
@@ -0,0 +1,36 @@
1
+ import { walk } from "./walker.js";
2
+ import render from "dom-serializer";
3
+ //#region src/utils/ast/serializer.ts
4
+ /**
5
+ * Re-encode < and > as entities in text nodes inside <code> elements.
6
+ *
7
+ * The DOM parser decodes entities like &#x3C; into raw < in text nodes.
8
+ * With encodeEntities: false the serializer outputs them as-is, which
9
+ * creates broken HTML (e.g. </a> inside a code block closes the real tag).
10
+ *
11
+ * We selectively fix this for <code> contents only, so the rest of the
12
+ * document (where encodeEntities: false is needed) is unaffected.
13
+ */
14
+ function encodeCodeTextNodes(dom) {
15
+ walk(dom, (node) => {
16
+ const el = node;
17
+ if (el.name !== "code") return;
18
+ walk(el.children ?? [], (child) => {
19
+ if (child.type === "text") {
20
+ const text = child;
21
+ text.data = text.data.replace(/</g, "&lt;").replace(/>/g, "&gt;");
22
+ }
23
+ });
24
+ });
25
+ }
26
+ function serialize(dom, options) {
27
+ encodeCodeTextNodes(dom);
28
+ return render(dom, {
29
+ encodeEntities: false,
30
+ ...options
31
+ });
32
+ }
33
+ //#endregion
34
+ export { serialize };
35
+
36
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","names":[],"sources":["../../../src/utils/ast/serializer.ts"],"sourcesContent":["import render from 'dom-serializer'\nimport type { ChildNode } from 'domhandler'\nimport type { DomSerializerOptions } from 'dom-serializer'\nimport { walk } from './walker.ts'\n\n/**\n * Re-encode < and > as entities in text nodes inside <code> elements.\n *\n * The DOM parser decodes entities like &#x3C; into raw < in text nodes.\n * With encodeEntities: false the serializer outputs them as-is, which\n * creates broken HTML (e.g. </a> inside a code block closes the real tag).\n *\n * We selectively fix this for <code> contents only, so the rest of the\n * document (where encodeEntities: false is needed) is unaffected.\n */\nfunction encodeCodeTextNodes(dom: ChildNode[]): void {\n walk(dom, (node) => {\n const el = node as import('domhandler').Element\n if (el.name !== 'code') return\n\n walk(el.children ?? [], (child) => {\n if (child.type === 'text') {\n const text = child as import('domhandler').Text\n text.data = text.data.replace(/</g, '&lt;').replace(/>/g, '&gt;')\n }\n })\n })\n}\n\nexport function serialize(dom: ChildNode[], options?: DomSerializerOptions): string {\n encodeCodeTextNodes(dom)\n return render(dom, { encodeEntities: false, ...options })\n}\n"],"mappings":";;;;;;;;;;;;;AAeA,SAAS,oBAAoB,KAAwB;CACnD,KAAK,MAAM,SAAS;EAClB,MAAM,KAAK;EACX,IAAI,GAAG,SAAS,QAAQ;EAExB,KAAK,GAAG,YAAY,EAAE,GAAG,UAAU;GACjC,IAAI,MAAM,SAAS,QAAQ;IACzB,MAAM,OAAO;IACb,KAAK,OAAO,KAAK,KAAK,QAAQ,MAAM,OAAO,CAAC,QAAQ,MAAM,OAAO;;IAEnE;GACF;;AAGJ,SAAgB,UAAU,KAAkB,SAAwC;CAClF,oBAAoB,IAAI;CACxB,OAAO,OAAO,KAAK;EAAE,gBAAgB;EAAO,GAAG;EAAS,CAAC"}
@@ -4,4 +4,4 @@ import { ChildNode } from "domhandler";
4
4
  declare function walk(ast: ChildNode[], callback: (node: ChildNode) => void): void;
5
5
  //#endregion
6
6
  export { walk };
7
- //# sourceMappingURL=walker.d.mts.map
7
+ //# sourceMappingURL=walker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walker.d.ts","names":[],"sources":["../../../src/utils/ast/walker.ts"],"mappings":";;;iBAEgB,IAAA,CAAK,GAAA,EAAK,SAAA,IAAa,QAAA,GAAW,IAAA,EAAM,SAAA"}
@@ -6,7 +6,7 @@ function walk(ast, callback) {
6
6
  }
7
7
  for (const node of ast) traverse(node);
8
8
  }
9
-
10
9
  //#endregion
11
10
  export { walk };
12
- //# sourceMappingURL=walker.mjs.map
11
+
12
+ //# sourceMappingURL=walker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walker.js","names":[],"sources":["../../../src/utils/ast/walker.ts"],"sourcesContent":["import type { ChildNode } from 'domhandler'\n\nexport function walk(ast: ChildNode[], callback: (node: ChildNode) => void): void {\n function traverse(node: ChildNode) {\n callback(node)\n\n if ('children' in node && node.children && node.children.length > 0) {\n for (const child of node.children) {\n traverse(child)\n }\n }\n }\n\n for (const node of ast) {\n traverse(node)\n }\n}\n"],"mappings":";AAEA,SAAgB,KAAK,KAAkB,UAA2C;CAChF,SAAS,SAAS,MAAiB;EACjC,SAAS,KAAK;EAEd,IAAI,cAAc,QAAQ,KAAK,YAAY,KAAK,SAAS,SAAS,GAChE,KAAK,MAAM,SAAS,KAAK,UACvB,SAAS,MAAM;;CAKrB,KAAK,MAAM,QAAQ,KACjB,SAAS,KAAK"}
@@ -0,0 +1,16 @@
1
+ import { MaizzleConfig } from "../types/config.js";
2
+ import postcss from "postcss";
3
+
4
+ //#region src/utils/compileTailwindCss.d.ts
5
+ declare function createTailwindProcessor(config: MaizzleConfig): postcss.Processor;
6
+ declare function lowerCssSyntax(css: string): string;
7
+ declare function optimizeTailwindCss(css: string, config: MaizzleConfig): Promise<string>;
8
+ /**
9
+ * Compile a Tailwind CSS source string into final email-safe CSS:
10
+ * runs @tailwindcss/postcss, lowers modern syntax via lightningcss,
11
+ * then applies cleanup + media-query merging.
12
+ */
13
+ declare function compileTailwindCss(cssInput: string, config: MaizzleConfig, from: string): Promise<string>;
14
+ //#endregion
15
+ export { compileTailwindCss, createTailwindProcessor, lowerCssSyntax, optimizeTailwindCss };
16
+ //# sourceMappingURL=compileTailwindCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compileTailwindCss.d.ts","names":[],"sources":["../../src/utils/compileTailwindCss.ts"],"mappings":";;;;iBAagB,uBAAA,CAAwB,MAAA,EAAQ,aAAA,GAAa,OAAA,CAAA,SAAA;AAAA,iBAe7C,cAAA,CAAe,GAAA;AAAA,iBAWT,mBAAA,CAAoB,GAAA,UAAa,MAAA,EAAQ,aAAA,GAAgB,OAAA;;;;;;iBAgBzD,kBAAA,CACpB,QAAA,UACA,MAAA,EAAQ,aAAA,EACR,IAAA,WACC,OAAA"}
@@ -0,0 +1,54 @@
1
+ import resolveProps_default from "../plugins/postcss/resolveProps.js";
2
+ import pruneVars_default from "../plugins/postcss/pruneVars.js";
3
+ import { tailwindCleanup } from "../plugins/postcss/tailwindCleanup.js";
4
+ import { mergeMediaQueries } from "../plugins/postcss/mergeMediaQueries.js";
5
+ import { quoteFontFamilies } from "../plugins/postcss/quoteFontFamilies.js";
6
+ import { resolveMaizzleImports } from "../plugins/postcss/resolveMaizzleImports.js";
7
+ import postcss from "postcss";
8
+ import tailwindcssPostcss from "@tailwindcss/postcss";
9
+ import postcssCalc from "postcss-calc";
10
+ import safeParser from "postcss-safe-parser";
11
+ import { transform } from "lightningcss";
12
+ //#region src/utils/compileTailwindCss.ts
13
+ function createTailwindProcessor(config) {
14
+ return postcss([
15
+ resolveMaizzleImports(),
16
+ tailwindcssPostcss({
17
+ base: config.css?.base,
18
+ transformAssetUrls: false,
19
+ optimize: false
20
+ }),
21
+ resolveProps_default(),
22
+ postcssCalc({}),
23
+ pruneVars_default()
24
+ ]);
25
+ }
26
+ function lowerCssSyntax(css) {
27
+ return transform({
28
+ filename: "email.css",
29
+ code: Buffer.from(css),
30
+ minify: false,
31
+ targets: { ie: 128 }
32
+ }).code.toString();
33
+ }
34
+ async function optimizeTailwindCss(css, config) {
35
+ const plugins = [...tailwindCleanup(config), quoteFontFamilies()];
36
+ const mediaPlugin = mergeMediaQueries(config);
37
+ if (mediaPlugin) plugins.push(mediaPlugin);
38
+ return (await postcss(plugins).process(css, { from: void 0 })).css;
39
+ }
40
+ /**
41
+ * Compile a Tailwind CSS source string into final email-safe CSS:
42
+ * runs @tailwindcss/postcss, lowers modern syntax via lightningcss,
43
+ * then applies cleanup + media-query merging.
44
+ */
45
+ async function compileTailwindCss(cssInput, config, from) {
46
+ return optimizeTailwindCss(lowerCssSyntax((await createTailwindProcessor(config).process(cssInput, {
47
+ from,
48
+ parser: safeParser
49
+ })).css), config);
50
+ }
51
+ //#endregion
52
+ export { compileTailwindCss, createTailwindProcessor, lowerCssSyntax, optimizeTailwindCss };
53
+
54
+ //# sourceMappingURL=compileTailwindCss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compileTailwindCss.js","names":["resolveProps","pruneVars"],"sources":["../../src/utils/compileTailwindCss.ts"],"sourcesContent":["import postcss from 'postcss'\nimport tailwindcssPostcss from '@tailwindcss/postcss'\nimport postcssCalc from 'postcss-calc'\nimport safeParser from 'postcss-safe-parser'\nimport { transform } from 'lightningcss'\nimport resolveProps from '../plugins/postcss/resolveProps.ts'\nimport pruneVars from '../plugins/postcss/pruneVars.ts'\nimport { tailwindCleanup } from '../plugins/postcss/tailwindCleanup.ts'\nimport { mergeMediaQueries } from '../plugins/postcss/mergeMediaQueries.ts'\nimport { quoteFontFamilies } from '../plugins/postcss/quoteFontFamilies.ts'\nimport { resolveMaizzleImports } from '../plugins/postcss/resolveMaizzleImports.ts'\nimport type { MaizzleConfig } from '../types/config.ts'\n\nexport function createTailwindProcessor(config: MaizzleConfig) {\n return postcss([\n // Must run before @tailwindcss/postcss so it sees absolute import paths\n resolveMaizzleImports(),\n tailwindcssPostcss({\n base: config.css?.base,\n transformAssetUrls: false,\n optimize: false,\n }),\n resolveProps(),\n postcssCalc({}),\n pruneVars(),\n ])\n}\n\nexport function lowerCssSyntax(css: string): string {\n const result = transform({\n filename: 'email.css',\n code: Buffer.from(css),\n minify: false,\n targets: { ie: 4 << 5 },\n })\n\n return result.code.toString()\n}\n\nexport async function optimizeTailwindCss(css: string, config: MaizzleConfig): Promise<string> {\n const plugins: postcss.Plugin[] = [...tailwindCleanup(config), quoteFontFamilies()]\n\n const mediaPlugin = mergeMediaQueries(config)\n if (mediaPlugin) plugins.push(mediaPlugin)\n\n const result = await postcss(plugins).process(css, { from: undefined })\n\n return result.css\n}\n\n/**\n * Compile a Tailwind CSS source string into final email-safe CSS:\n * runs @tailwindcss/postcss, lowers modern syntax via lightningcss,\n * then applies cleanup + media-query merging.\n */\nexport async function compileTailwindCss(\n cssInput: string,\n config: MaizzleConfig,\n from: string,\n): Promise<string> {\n const processor = createTailwindProcessor(config)\n const result = await processor.process(cssInput, { from, parser: safeParser })\n const lowered = lowerCssSyntax(result.css)\n return optimizeTailwindCss(lowered, config)\n}\n"],"mappings":";;;;;;;;;;;;AAaA,SAAgB,wBAAwB,QAAuB;CAC7D,OAAO,QAAQ;EAEb,uBAAuB;EACvB,mBAAmB;GACjB,MAAM,OAAO,KAAK;GAClB,oBAAoB;GACpB,UAAU;GACX,CAAC;EACFA,sBAAc;EACd,YAAY,EAAE,CAAC;EACfC,mBAAW;EACZ,CAAC;;AAGJ,SAAgB,eAAe,KAAqB;CAQlD,OAPe,UAAU;EACvB,UAAU;EACV,MAAM,OAAO,KAAK,IAAI;EACtB,QAAQ;EACR,SAAS,EAAE,IAAI,KAAQ;EACxB,CAEY,CAAC,KAAK,UAAU;;AAG/B,eAAsB,oBAAoB,KAAa,QAAwC;CAC7F,MAAM,UAA4B,CAAC,GAAG,gBAAgB,OAAO,EAAE,mBAAmB,CAAC;CAEnF,MAAM,cAAc,kBAAkB,OAAO;CAC7C,IAAI,aAAa,QAAQ,KAAK,YAAY;CAI1C,QAAO,MAFc,QAAQ,QAAQ,CAAC,QAAQ,KAAK,EAAE,MAAM,KAAA,GAAW,CAAC,EAEzD;;;;;;;AAQhB,eAAsB,mBACpB,UACA,QACA,MACiB;CAIjB,OAAO,oBADS,gBAAe,MAFb,wBAAwB,OACZ,CAAC,QAAQ,UAAU;EAAE;EAAM,QAAQ;EAAY,CAAC,EACxC,IACJ,EAAE,OAAO"}
@@ -0,0 +1,50 @@
1
+ import { ComponentSource } from "../types/config.js";
2
+
3
+ //#region src/utils/componentSources.d.ts
4
+ /**
5
+ * Internal representation of a component source after defaults are
6
+ * resolved and `path` is made absolute. Always carries the same shape
7
+ * regardless of which user-facing form produced it.
8
+ */
9
+ interface NormalizedComponentSource {
10
+ /** Absolute directory path. */
11
+ path: string;
12
+ /**
13
+ * Custom prefix prepended to resolved component names.
14
+ * - `undefined` → use folder-name namespace (the `directoryAsNamespace`
15
+ * behavior of unplugin-vue-components).
16
+ * - `''` (empty string) → no prefix at all; use the bare filename.
17
+ * - any other string → exact prefix.
18
+ */
19
+ prefix?: string;
20
+ /** Include intermediate subfolder names in the resolved name. */
21
+ pathPrefix: boolean;
22
+ }
23
+ /**
24
+ * Normalize a user-supplied `components.source` value into an array
25
+ * of absolute, fully-defaulted entries.
26
+ */
27
+ declare function normalizeComponentSources(sources: ComponentSource | ComponentSource[] | undefined, cwd: string): NormalizedComponentSource[];
28
+ interface ComponentNameOptions {
29
+ /** Absolute path to the component file. */
30
+ filePath: string;
31
+ /** Absolute path to the dir root the component was discovered under. */
32
+ dirRoot: string;
33
+ /** See {@link NormalizedComponentSource.prefix}. */
34
+ prefix?: string;
35
+ /** See {@link NormalizedComponentSource.pathPrefix}. */
36
+ pathPrefix: boolean;
37
+ }
38
+ /**
39
+ * Compute the component name unplugin-vue-components would assign for a
40
+ * given file under a given dir, mirroring the plugin's
41
+ * `directoryAsNamespace: true` + `collapseSamePrefixes: true` behavior
42
+ * and layering custom-prefix sources on top.
43
+ *
44
+ * Used both at render time (to register a custom resolver) and at lint
45
+ * time (so the linter can follow component graph correctly).
46
+ */
47
+ declare function componentNameFromPath(opts: ComponentNameOptions): string;
48
+ //#endregion
49
+ export { ComponentNameOptions, NormalizedComponentSource, componentNameFromPath, normalizeComponentSources };
50
+ //# sourceMappingURL=componentSources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentSources.d.ts","names":[],"sources":["../../src/utils/componentSources.ts"],"mappings":";;;;;AAQA;;;UAAiB,yBAAA;EAEf;EAAA,IAAA;EAUA;;;AAOF;;;;EATE,MAAA;EAYC;EAVD,UAAA;AAAA;;;;;iBAOc,yBAAA,CACd,OAAA,EAAS,eAAA,GAAkB,eAAA,gBAC3B,GAAA,WACC,yBAAA;AAAA,UAqBc,oBAAA;EArBW;EAuB1B,QAAA;EAFmC;EAInC,OAAA;EAJmC;EAMnC,MAAA;EAFA;EAIA,UAAA;AAAA;;;AAYF;;;;;;;iBAAgB,qBAAA,CAAsB,IAAA,EAAM,oBAAA"}
@@ -0,0 +1,50 @@
1
+ import { relative, resolve } from "node:path";
2
+ //#region src/utils/componentSources.ts
3
+ /**
4
+ * Normalize a user-supplied `components.source` value into an array
5
+ * of absolute, fully-defaulted entries.
6
+ */
7
+ function normalizeComponentSources(sources, cwd) {
8
+ if (!sources) return [];
9
+ return (Array.isArray(sources) ? sources : [sources]).map((s) => {
10
+ if (typeof s === "string") return {
11
+ path: resolve(cwd, s),
12
+ prefix: void 0,
13
+ pathPrefix: true
14
+ };
15
+ return {
16
+ path: resolve(cwd, s.path),
17
+ prefix: s.prefix,
18
+ pathPrefix: s.pathPrefix ?? true
19
+ };
20
+ });
21
+ }
22
+ function pascalCase(s) {
23
+ return s.replace(/[-_\s]+(.)/g, (_, c) => c.toUpperCase()).replace(/^(.)/, (c) => c.toUpperCase());
24
+ }
25
+ /**
26
+ * Compute the component name unplugin-vue-components would assign for a
27
+ * given file under a given dir, mirroring the plugin's
28
+ * `directoryAsNamespace: true` + `collapseSamePrefixes: true` behavior
29
+ * and layering custom-prefix sources on top.
30
+ *
31
+ * Used both at render time (to register a custom resolver) and at lint
32
+ * time (so the linter can follow component graph correctly).
33
+ */
34
+ function componentNameFromPath(opts) {
35
+ const { filePath, dirRoot, prefix, pathPrefix } = opts;
36
+ const segments = relative(dirRoot, filePath).replace(/\\/g, "/").replace(/\.(vue|md)$/, "").split("/").map(pascalCase);
37
+ const fileName = segments.pop() ?? "";
38
+ if (prefix !== void 0) {
39
+ const folderPart = pathPrefix ? segments.join("") : "";
40
+ const stripped = prefix && fileName.startsWith(prefix) ? fileName.slice(prefix.length) : fileName;
41
+ return prefix + folderPart + stripped;
42
+ }
43
+ const folderPart = segments.join("");
44
+ if (folderPart && fileName.startsWith(folderPart)) return fileName;
45
+ return folderPart + fileName;
46
+ }
47
+ //#endregion
48
+ export { componentNameFromPath, normalizeComponentSources };
49
+
50
+ //# sourceMappingURL=componentSources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentSources.js","names":[],"sources":["../../src/utils/componentSources.ts"],"sourcesContent":["import { resolve, relative } from 'node:path'\nimport type { ComponentSource } from '../types/config.ts'\n\n/**\n * Internal representation of a component source after defaults are\n * resolved and `path` is made absolute. Always carries the same shape\n * regardless of which user-facing form produced it.\n */\nexport interface NormalizedComponentSource {\n /** Absolute directory path. */\n path: string\n /**\n * Custom prefix prepended to resolved component names.\n * - `undefined` → use folder-name namespace (the `directoryAsNamespace`\n * behavior of unplugin-vue-components).\n * - `''` (empty string) → no prefix at all; use the bare filename.\n * - any other string → exact prefix.\n */\n prefix?: string\n /** Include intermediate subfolder names in the resolved name. */\n pathPrefix: boolean\n}\n\n/**\n * Normalize a user-supplied `components.source` value into an array\n * of absolute, fully-defaulted entries.\n */\nexport function normalizeComponentSources(\n sources: ComponentSource | ComponentSource[] | undefined,\n cwd: string,\n): NormalizedComponentSource[] {\n if (!sources) return []\n const list = Array.isArray(sources) ? sources : [sources]\n return list.map((s) => {\n if (typeof s === 'string') {\n return { path: resolve(cwd, s), prefix: undefined, pathPrefix: true }\n }\n return {\n path: resolve(cwd, s.path),\n prefix: s.prefix,\n pathPrefix: s.pathPrefix ?? true,\n }\n })\n}\n\nfunction pascalCase(s: string): string {\n return s\n .replace(/[-_\\s]+(.)/g, (_, c) => c.toUpperCase())\n .replace(/^(.)/, c => c.toUpperCase())\n}\n\nexport interface ComponentNameOptions {\n /** Absolute path to the component file. */\n filePath: string\n /** Absolute path to the dir root the component was discovered under. */\n dirRoot: string\n /** See {@link NormalizedComponentSource.prefix}. */\n prefix?: string\n /** See {@link NormalizedComponentSource.pathPrefix}. */\n pathPrefix: boolean\n}\n\n/**\n * Compute the component name unplugin-vue-components would assign for a\n * given file under a given dir, mirroring the plugin's\n * `directoryAsNamespace: true` + `collapseSamePrefixes: true` behavior\n * and layering custom-prefix sources on top.\n *\n * Used both at render time (to register a custom resolver) and at lint\n * time (so the linter can follow component graph correctly).\n */\nexport function componentNameFromPath(opts: ComponentNameOptions): string {\n const { filePath, dirRoot, prefix, pathPrefix } = opts\n\n const rel = relative(dirRoot, filePath).replace(/\\\\/g, '/')\n const noExt = rel.replace(/\\.(vue|md)$/, '')\n const segments = noExt.split('/').map(pascalCase)\n const fileName = segments.pop() ?? ''\n\n if (prefix !== undefined) {\n const folderPart = pathPrefix ? segments.join('') : ''\n const stripped = prefix && fileName.startsWith(prefix)\n ? fileName.slice(prefix.length)\n : fileName\n return prefix + folderPart + stripped\n }\n\n const folderPart = segments.join('')\n if (folderPart && fileName.startsWith(folderPart)) {\n return fileName\n }\n return folderPart + fileName\n}\n"],"mappings":";;;;;;AA2BA,SAAgB,0BACd,SACA,KAC6B;CAC7B,IAAI,CAAC,SAAS,OAAO,EAAE;CAEvB,QADa,MAAM,QAAQ,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAC7C,KAAK,MAAM;EACrB,IAAI,OAAO,MAAM,UACf,OAAO;GAAE,MAAM,QAAQ,KAAK,EAAE;GAAE,QAAQ,KAAA;GAAW,YAAY;GAAM;EAEvE,OAAO;GACL,MAAM,QAAQ,KAAK,EAAE,KAAK;GAC1B,QAAQ,EAAE;GACV,YAAY,EAAE,cAAc;GAC7B;GACD;;AAGJ,SAAS,WAAW,GAAmB;CACrC,OAAO,EACJ,QAAQ,gBAAgB,GAAG,MAAM,EAAE,aAAa,CAAC,CACjD,QAAQ,SAAQ,MAAK,EAAE,aAAa,CAAC;;;;;;;;;;;AAuB1C,SAAgB,sBAAsB,MAAoC;CACxE,MAAM,EAAE,UAAU,SAAS,QAAQ,eAAe;CAIlD,MAAM,WAFM,SAAS,SAAS,SAAS,CAAC,QAAQ,OAAO,IACtC,CAAC,QAAQ,eAAe,GACnB,CAAC,MAAM,IAAI,CAAC,IAAI,WAAW;CACjD,MAAM,WAAW,SAAS,KAAK,IAAI;CAEnC,IAAI,WAAW,KAAA,GAAW;EACxB,MAAM,aAAa,aAAa,SAAS,KAAK,GAAG,GAAG;EACpD,MAAM,WAAW,UAAU,SAAS,WAAW,OAAO,GAClD,SAAS,MAAM,OAAO,OAAO,GAC7B;EACJ,OAAO,SAAS,aAAa;;CAG/B,MAAM,aAAa,SAAS,KAAK,GAAG;CACpC,IAAI,cAAc,SAAS,WAAW,WAAW,EAC/C,OAAO;CAET,OAAO,aAAa"}
@@ -0,0 +1,15 @@
1
+ //#region src/utils/decodeStyleEntities.d.ts
2
+ /**
3
+ * Decode HTML entities that Vue SSR encodes inside `<style>` tags.
4
+ *
5
+ * Vue's `renderToString` HTML-encodes quotes and angle brackets within
6
+ * style elements in templates, breaking CSS like
7
+ * `@import "tailwindcss"` → `@import &quot;tailwindcss&quot;`.
8
+ *
9
+ * `&amp;` is decoded last so previously-decoded entities are not
10
+ * re-processed.
11
+ */
12
+ declare function decodeStyleEntities(s: string): string;
13
+ //#endregion
14
+ export { decodeStyleEntities };
15
+ //# sourceMappingURL=decodeStyleEntities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decodeStyleEntities.d.ts","names":[],"sources":["../../src/utils/decodeStyleEntities.ts"],"mappings":";;AAUA;;;;;;;;;iBAAgB,mBAAA,CAAoB,CAAA"}
@@ -0,0 +1,18 @@
1
+ //#region src/utils/decodeStyleEntities.ts
2
+ /**
3
+ * Decode HTML entities that Vue SSR encodes inside `<style>` tags.
4
+ *
5
+ * Vue's `renderToString` HTML-encodes quotes and angle brackets within
6
+ * style elements in templates, breaking CSS like
7
+ * `@import "tailwindcss"` → `@import &quot;tailwindcss&quot;`.
8
+ *
9
+ * `&amp;` is decoded last so previously-decoded entities are not
10
+ * re-processed.
11
+ */
12
+ function decodeStyleEntities(s) {
13
+ return s.replace(/&quot;/g, "\"").replace(/&#39;/g, "'").replace(/&apos;/g, "'").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
14
+ }
15
+ //#endregion
16
+ export { decodeStyleEntities };
17
+
18
+ //# sourceMappingURL=decodeStyleEntities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decodeStyleEntities.js","names":[],"sources":["../../src/utils/decodeStyleEntities.ts"],"sourcesContent":["/**\n * Decode HTML entities that Vue SSR encodes inside `<style>` tags.\n *\n * Vue's `renderToString` HTML-encodes quotes and angle brackets within\n * style elements in templates, breaking CSS like\n * `@import \"tailwindcss\"` → `@import &quot;tailwindcss&quot;`.\n *\n * `&amp;` is decoded last so previously-decoded entities are not\n * re-processed.\n */\nexport function decodeStyleEntities(s: string): string {\n return s\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&apos;/g, \"'\")\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&amp;/g, '&')\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAgB,oBAAoB,GAAmB;CACrD,OAAO,EACJ,QAAQ,WAAW,KAAI,CACvB,QAAQ,UAAU,IAAI,CACtB,QAAQ,WAAW,IAAI,CACvB,QAAQ,SAAS,IAAI,CACrB,QAAQ,SAAS,IAAI,CACrB,QAAQ,UAAU,IAAI"}
@@ -0,0 +1,5 @@
1
+ //#region src/utils/detect.d.ts
2
+ declare function isLaravel(cwd?: string): boolean;
3
+ //#endregion
4
+ export { isLaravel };
5
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","names":[],"sources":["../../src/utils/detect.ts"],"mappings":";iBAGgB,SAAA,CAAU,GAAA"}
@@ -0,0 +1,10 @@
1
+ import { existsSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ //#region src/utils/detect.ts
4
+ function isLaravel(cwd = process.cwd()) {
5
+ return existsSync(resolve(cwd, "artisan"));
6
+ }
7
+ //#endregion
8
+ export { isLaravel };
9
+
10
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","names":[],"sources":["../../src/utils/detect.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nexport function isLaravel(cwd: string = process.cwd()): boolean {\n return existsSync(resolve(cwd, 'artisan'))\n}\n"],"mappings":";;;AAGA,SAAgB,UAAU,MAAc,QAAQ,KAAK,EAAW;CAC9D,OAAO,WAAW,QAAQ,KAAK,UAAU,CAAC"}
@@ -0,0 +1,29 @@
1
+ //#region src/utils/output-markers.d.ts
2
+ /**
3
+ * Sentinel attributes the `<Plaintext>` and `<NotPlaintext>`
4
+ * components stamp on their wrapper `<div>` so the build step
5
+ * can route their slot content to one output and remove it
6
+ * entirely from the other.
7
+ */
8
+ declare const PLAINTEXT_ONLY_ATTR = "data-maizzle-plaintext-only";
9
+ declare const HTML_ONLY_ATTR = "data-maizzle-html-only";
10
+ /**
11
+ * Strip output markers for the HTML output: drop plaintext-only
12
+ * subtrees entirely, unwrap html-only wrappers (keep children).
13
+ *
14
+ * When no markers are present, the input is returned unchanged so
15
+ * the post-transformer formatting (prettify, XHTML self-closing
16
+ * slashes, etc.) survives intact for the typical case.
17
+ */
18
+ declare function stripForHtml(html: string): string;
19
+ /**
20
+ * Strip output markers for the plaintext source: drop html-only
21
+ * subtrees entirely, unwrap plaintext-only wrappers (keep children).
22
+ *
23
+ * The result is fed to `createPlaintext`, which then strips all
24
+ * remaining tags via `string-strip-html`.
25
+ */
26
+ declare function stripForPlaintext(html: string): string;
27
+ //#endregion
28
+ export { HTML_ONLY_ATTR, PLAINTEXT_ONLY_ATTR, stripForHtml, stripForPlaintext };
29
+ //# sourceMappingURL=output-markers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-markers.d.ts","names":[],"sources":["../../src/utils/output-markers.ts"],"mappings":";;AASA;;;;;cAAa,mBAAA;AAAA,cACA,cAAA;;;;AA+Cb;;;;;iBAAgB,YAAA,CAAa,IAAA;;;;;;;;iBAgBb,iBAAA,CAAkB,IAAA"}
@@ -0,0 +1,68 @@
1
+ import { parse } from "./ast/parser.js";
2
+ import { serialize } from "./ast/serializer.js";
3
+ import "./ast/index.js";
4
+ //#region src/utils/output-markers.ts
5
+ /**
6
+ * Sentinel attributes the `<Plaintext>` and `<NotPlaintext>`
7
+ * components stamp on their wrapper `<div>` so the build step
8
+ * can route their slot content to one output and remove it
9
+ * entirely from the other.
10
+ */
11
+ const PLAINTEXT_ONLY_ATTR = "data-maizzle-plaintext-only";
12
+ const HTML_ONLY_ATTR = "data-maizzle-html-only";
13
+ const isElement = (n) => n.type === "tag";
14
+ /**
15
+ * Apply marker rules to a forest of nodes.
16
+ *
17
+ * - `drop` removes the matched element and its descendants.
18
+ * - `unwrap` removes the wrapper element but keeps its children,
19
+ * splicing them into the parent's child list in place.
20
+ *
21
+ * Non-matching elements recurse so nested markers are handled.
22
+ */
23
+ function applyRules(nodes, rules) {
24
+ const out = [];
25
+ for (const n of nodes) {
26
+ if (isElement(n)) {
27
+ const match = rules.find(([attr]) => n.attribs?.[attr] !== void 0);
28
+ if (match) {
29
+ const [, op] = match;
30
+ if (op === "drop") continue;
31
+ out.push(...applyRules(n.children ?? [], rules));
32
+ continue;
33
+ }
34
+ if (n.children?.length) n.children = applyRules(n.children, rules);
35
+ }
36
+ out.push(n);
37
+ }
38
+ return out;
39
+ }
40
+ const hasMarkers = (html) => html.includes("data-maizzle-plaintext-only") || html.includes("data-maizzle-html-only");
41
+ /**
42
+ * Strip output markers for the HTML output: drop plaintext-only
43
+ * subtrees entirely, unwrap html-only wrappers (keep children).
44
+ *
45
+ * When no markers are present, the input is returned unchanged so
46
+ * the post-transformer formatting (prettify, XHTML self-closing
47
+ * slashes, etc.) survives intact for the typical case.
48
+ */
49
+ function stripForHtml(html) {
50
+ if (!hasMarkers(html)) return html;
51
+ const isXhtml = /<!DOCTYPE\s+[^>]*xhtml/i.test(html);
52
+ return serialize(applyRules(parse(html), [[PLAINTEXT_ONLY_ATTR, "drop"], [HTML_ONLY_ATTR, "unwrap"]]), { selfClosingTags: isXhtml });
53
+ }
54
+ /**
55
+ * Strip output markers for the plaintext source: drop html-only
56
+ * subtrees entirely, unwrap plaintext-only wrappers (keep children).
57
+ *
58
+ * The result is fed to `createPlaintext`, which then strips all
59
+ * remaining tags via `string-strip-html`.
60
+ */
61
+ function stripForPlaintext(html) {
62
+ if (!hasMarkers(html)) return html;
63
+ return serialize(applyRules(parse(html), [[HTML_ONLY_ATTR, "drop"], [PLAINTEXT_ONLY_ATTR, "unwrap"]]));
64
+ }
65
+ //#endregion
66
+ export { HTML_ONLY_ATTR, PLAINTEXT_ONLY_ATTR, stripForHtml, stripForPlaintext };
67
+
68
+ //# sourceMappingURL=output-markers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-markers.js","names":[],"sources":["../../src/utils/output-markers.ts"],"sourcesContent":["import { parse, serialize } from './ast/index.ts'\nimport type { ChildNode, Element } from 'domhandler'\n\n/**\n * Sentinel attributes the `<Plaintext>` and `<NotPlaintext>`\n * components stamp on their wrapper `<div>` so the build step\n * can route their slot content to one output and remove it\n * entirely from the other.\n */\nexport const PLAINTEXT_ONLY_ATTR = 'data-maizzle-plaintext-only'\nexport const HTML_ONLY_ATTR = 'data-maizzle-html-only'\n\ntype Op = 'drop' | 'unwrap'\ntype Rule = readonly [attr: string, op: Op]\n\nconst isElement = (n: ChildNode): n is Element => n.type === 'tag'\n\n/**\n * Apply marker rules to a forest of nodes.\n *\n * - `drop` removes the matched element and its descendants.\n * - `unwrap` removes the wrapper element but keeps its children,\n * splicing them into the parent's child list in place.\n *\n * Non-matching elements recurse so nested markers are handled.\n */\nfunction applyRules(nodes: ChildNode[], rules: readonly Rule[]): ChildNode[] {\n const out: ChildNode[] = []\n for (const n of nodes) {\n if (isElement(n)) {\n const match = rules.find(([attr]) => n.attribs?.[attr] !== undefined)\n if (match) {\n const [, op] = match\n if (op === 'drop') continue\n out.push(...applyRules((n.children ?? []) as ChildNode[], rules))\n continue\n }\n if (n.children?.length) {\n n.children = applyRules(n.children as ChildNode[], rules) as Element['children']\n }\n }\n out.push(n)\n }\n return out\n}\n\nconst hasMarkers = (html: string): boolean =>\n html.includes(PLAINTEXT_ONLY_ATTR) || html.includes(HTML_ONLY_ATTR)\n\n/**\n * Strip output markers for the HTML output: drop plaintext-only\n * subtrees entirely, unwrap html-only wrappers (keep children).\n *\n * When no markers are present, the input is returned unchanged so\n * the post-transformer formatting (prettify, XHTML self-closing\n * slashes, etc.) survives intact for the typical case.\n */\nexport function stripForHtml(html: string): string {\n if (!hasMarkers(html)) return html\n const isXhtml = /<!DOCTYPE\\s+[^>]*xhtml/i.test(html)\n return serialize(applyRules(parse(html), [\n [PLAINTEXT_ONLY_ATTR, 'drop'],\n [HTML_ONLY_ATTR, 'unwrap'],\n ]), { selfClosingTags: isXhtml })\n}\n\n/**\n * Strip output markers for the plaintext source: drop html-only\n * subtrees entirely, unwrap plaintext-only wrappers (keep children).\n *\n * The result is fed to `createPlaintext`, which then strips all\n * remaining tags via `string-strip-html`.\n */\nexport function stripForPlaintext(html: string): string {\n if (!hasMarkers(html)) return html\n return serialize(applyRules(parse(html), [\n [HTML_ONLY_ATTR, 'drop'],\n [PLAINTEXT_ONLY_ATTR, 'unwrap'],\n ]))\n}\n"],"mappings":";;;;;;;;;;AASA,MAAa,sBAAsB;AACnC,MAAa,iBAAiB;AAK9B,MAAM,aAAa,MAA+B,EAAE,SAAS;;;;;;;;;;AAW7D,SAAS,WAAW,OAAoB,OAAqC;CAC3E,MAAM,MAAmB,EAAE;CAC3B,KAAK,MAAM,KAAK,OAAO;EACrB,IAAI,UAAU,EAAE,EAAE;GAChB,MAAM,QAAQ,MAAM,MAAM,CAAC,UAAU,EAAE,UAAU,UAAU,KAAA,EAAU;GACrE,IAAI,OAAO;IACT,MAAM,GAAG,MAAM;IACf,IAAI,OAAO,QAAQ;IACnB,IAAI,KAAK,GAAG,WAAY,EAAE,YAAY,EAAE,EAAkB,MAAM,CAAC;IACjE;;GAEF,IAAI,EAAE,UAAU,QACd,EAAE,WAAW,WAAW,EAAE,UAAyB,MAAM;;EAG7D,IAAI,KAAK,EAAE;;CAEb,OAAO;;AAGT,MAAM,cAAc,SAClB,KAAK,SAAA,8BAA6B,IAAI,KAAK,SAAA,yBAAwB;;;;;;;;;AAUrE,SAAgB,aAAa,MAAsB;CACjD,IAAI,CAAC,WAAW,KAAK,EAAE,OAAO;CAC9B,MAAM,UAAU,0BAA0B,KAAK,KAAK;CACpD,OAAO,UAAU,WAAW,MAAM,KAAK,EAAE,CACvC,CAAC,qBAAqB,OAAO,EAC7B,CAAC,gBAAgB,SAAS,CAC3B,CAAC,EAAE,EAAE,iBAAiB,SAAS,CAAC;;;;;;;;;AAUnC,SAAgB,kBAAkB,MAAsB;CACtD,IAAI,CAAC,WAAW,KAAK,EAAE,OAAO;CAC9B,OAAO,UAAU,WAAW,MAAM,KAAK,EAAE,CACvC,CAAC,gBAAgB,OAAO,EACxB,CAAC,qBAAqB,SAAS,CAChC,CAAC,CAAC"}
@@ -5,4 +5,4 @@ declare function isAbsoluteUrl(url: string): boolean;
5
5
  declare function processSrcset(srcset: string, baseUrl: string): string;
6
6
  //#endregion
7
7
  export { defaultTags, isAbsoluteUrl, processSrcset, urlAttributes };
8
- //# sourceMappingURL=url.d.mts.map
8
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","names":[],"sources":["../../src/utils/url.ts"],"mappings":";cAEa,WAAA,EAAa,MAAA;AAAA,cAcb,aAAA;AAAA,iBAEG,aAAA,CAAc,GAAA;AAAA,iBAMd,aAAA,CAAc,MAAA,UAAgB,OAAA"}
@@ -1,5 +1,4 @@
1
1
  import isUrl from "is-url-superb";
2
-
3
2
  //#region src/utils/url.ts
4
3
  const defaultTags = {
5
4
  a: ["href"],
@@ -26,7 +25,7 @@ function processSrcset(srcset, baseUrl) {
26
25
  return parts.join(" ");
27
26
  }).join(", ");
28
27
  }
29
-
30
28
  //#endregion
31
29
  export { defaultTags, isAbsoluteUrl, processSrcset, urlAttributes };
32
- //# sourceMappingURL=url.mjs.map
30
+
31
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","names":[],"sources":["../../src/utils/url.ts"],"sourcesContent":["import isUrl from 'is-url-superb'\n\nexport const defaultTags: Record<string, string[]> = {\n a: ['href'],\n img: ['src', 'srcset'],\n video: ['src', 'poster'],\n source: ['src', 'srcset'],\n link: ['href'],\n script: ['src'],\n object: ['data'],\n embed: ['src'],\n iframe: ['src'],\n 'v:image': ['src'],\n 'v:fill': ['src'],\n}\n\nexport const urlAttributes = [...new Set(Object.values(defaultTags).flat())]\n\nexport function isAbsoluteUrl(url: string): boolean {\n if (!url) return true\n\n return url.startsWith('//') || url.startsWith('#') || url.startsWith('?') || isUrl(url)\n}\n\nexport function processSrcset(srcset: string, baseUrl: string): string {\n return srcset.split(',').map(entry => {\n const parts = entry.trim().split(/\\s+/)\n\n if (parts[0] && !isAbsoluteUrl(parts[0])) {\n parts[0] = baseUrl + parts[0]\n }\n\n return parts.join(' ')\n }).join(', ')\n}\n"],"mappings":";;AAEA,MAAa,cAAwC;CACnD,GAAG,CAAC,OAAO;CACX,KAAK,CAAC,OAAO,SAAS;CACtB,OAAO,CAAC,OAAO,SAAS;CACxB,QAAQ,CAAC,OAAO,SAAS;CACzB,MAAM,CAAC,OAAO;CACd,QAAQ,CAAC,MAAM;CACf,QAAQ,CAAC,OAAO;CAChB,OAAO,CAAC,MAAM;CACd,QAAQ,CAAC,MAAM;CACf,WAAW,CAAC,MAAM;CAClB,UAAU,CAAC,MAAM;CAClB;AAED,MAAa,gBAAgB,CAAC,GAAG,IAAI,IAAI,OAAO,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAE5E,SAAgB,cAAc,KAAsB;CAClD,IAAI,CAAC,KAAK,OAAO;CAEjB,OAAO,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,MAAM,IAAI;;AAGzF,SAAgB,cAAc,QAAgB,SAAyB;CACrE,OAAO,OAAO,MAAM,IAAI,CAAC,KAAI,UAAS;EACpC,MAAM,QAAQ,MAAM,MAAM,CAAC,MAAM,MAAM;EAEvC,IAAI,MAAM,MAAM,CAAC,cAAc,MAAM,GAAG,EACtC,MAAM,KAAK,UAAU,MAAM;EAG7B,OAAO,MAAM,KAAK,IAAI;GACtB,CAAC,KAAK,KAAK"}
@@ -0,0 +1,11 @@
1
+ //#region src/utils/watchPaths.d.ts
2
+ /**
3
+ * Build a predicate that tells whether an absolute file path emitted by
4
+ * chokidar matches any of the given globs. Patterns are interpreted as
5
+ * project-relative; a leading `./` is stripped so user-supplied globs like
6
+ * `./locales/**` behave identically to `locales/**`.
7
+ */
8
+ declare function createWatchedFileMatcher(patterns: string[], cwd: string): (file: string) => boolean;
9
+ //#endregion
10
+ export { createWatchedFileMatcher };
11
+ //# sourceMappingURL=watchPaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchPaths.d.ts","names":[],"sources":["../../src/utils/watchPaths.ts"],"mappings":";;AAQA;;;;;iBAAgB,wBAAA,CAAyB,QAAA,YAAoB,GAAA,YAEnD,IAAA"}
@@ -0,0 +1,19 @@
1
+ import { matchesGlob, relative } from "node:path";
2
+ //#region src/utils/watchPaths.ts
3
+ /**
4
+ * Build a predicate that tells whether an absolute file path emitted by
5
+ * chokidar matches any of the given globs. Patterns are interpreted as
6
+ * project-relative; a leading `./` is stripped so user-supplied globs like
7
+ * `./locales/**` behave identically to `locales/**`.
8
+ */
9
+ function createWatchedFileMatcher(patterns, cwd) {
10
+ const normalized = patterns.map((p) => p.replace(/^\.\//, ""));
11
+ return (file) => {
12
+ const rel = relative(cwd, file).replace(/\\/g, "/");
13
+ return normalized.some((p) => matchesGlob(rel, p));
14
+ };
15
+ }
16
+ //#endregion
17
+ export { createWatchedFileMatcher };
18
+
19
+ //# sourceMappingURL=watchPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchPaths.js","names":[],"sources":["../../src/utils/watchPaths.ts"],"sourcesContent":["import { matchesGlob, relative } from 'node:path'\n\n/**\n * Build a predicate that tells whether an absolute file path emitted by\n * chokidar matches any of the given globs. Patterns are interpreted as\n * project-relative; a leading `./` is stripped so user-supplied globs like\n * `./locales/**` behave identically to `locales/**`.\n */\nexport function createWatchedFileMatcher(patterns: string[], cwd: string) {\n const normalized = patterns.map(p => p.replace(/^\\.\\//, ''))\n return (file: string) => {\n const rel = relative(cwd, file).replace(/\\\\/g, '/')\n return normalized.some(p => matchesGlob(rel, p))\n }\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,yBAAyB,UAAoB,KAAa;CACxE,MAAM,aAAa,SAAS,KAAI,MAAK,EAAE,QAAQ,SAAS,GAAG,CAAC;CAC5D,QAAQ,SAAiB;EACvB,MAAM,MAAM,SAAS,KAAK,KAAK,CAAC,QAAQ,OAAO,IAAI;EACnD,OAAO,WAAW,MAAK,MAAK,YAAY,KAAK,EAAE,CAAC"}
@@ -1,5 +1,13 @@
1
1
  # @clack/core
2
2
 
3
+ ## 1.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 78fd3ae: Remove unused `debug` option key.
8
+ - ea5702e: fix: add engines field expressing node >=20.12 requirement
9
+ - 814ab9a: Add new multiline prompt for multi-line text input.
10
+
3
11
  ## 1.2.0
4
12
 
5
13
  ### Minor Changes