@maizzle/framework 6.1.0 → 6.1.1

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 (49) hide show
  1. package/dist/build.js +2 -1
  2. package/dist/build.js.map +1 -1
  3. package/dist/config/index.js.map +1 -1
  4. package/dist/plugins/postcss/mergeMediaQueries.js +2 -1
  5. package/dist/plugins/postcss/mergeMediaQueries.js.map +1 -1
  6. package/dist/plugins/postcss/resolveMaizzleImports.js.map +1 -1
  7. package/dist/render/buildTemplate.js +3 -1
  8. package/dist/render/buildTemplate.js.map +1 -1
  9. package/dist/render/createRenderer.js +8 -1
  10. package/dist/render/createRenderer.js.map +1 -1
  11. package/dist/serve.js +18 -9
  12. package/dist/serve.js.map +1 -1
  13. package/dist/server/compatibility.js +2 -1
  14. package/dist/server/compatibility.js.map +1 -1
  15. package/dist/server/linter.js +2 -1
  16. package/dist/server/linter.js.map +1 -1
  17. package/dist/server/sfc-utils.js.map +1 -1
  18. package/dist/server/ui/.vite/deps/@lucide_vue.js +6845 -6285
  19. package/dist/server/ui/.vite/deps/@lucide_vue.js.map +1 -1
  20. package/dist/server/ui/.vite/deps/@vueuse_core.js +2 -6
  21. package/dist/server/ui/.vite/deps/@vueuse_core.js.map +1 -1
  22. package/dist/server/ui/.vite/deps/@vueuse_shared.js +1 -1
  23. package/dist/server/ui/.vite/deps/@vueuse_shared.js.map +1 -1
  24. package/dist/server/ui/.vite/deps/_metadata.json +15 -15
  25. package/dist/server/ui/.vite/deps/culori.js +8 -6
  26. package/dist/server/ui/.vite/deps/culori.js.map +1 -1
  27. package/dist/server/ui/.vite/deps/reka-ui.js +63 -73
  28. package/dist/server/ui/.vite/deps/reka-ui.js.map +1 -1
  29. package/dist/server/ui/.vite/deps/tailwind-merge.js.map +1 -1
  30. package/dist/server/ui/.vite/deps/vue-router.js +5 -13
  31. package/dist/server/ui/.vite/deps/vue-router.js.map +1 -1
  32. package/dist/server/ui/.vite/deps/vue.js +1 -1
  33. package/dist/server/ui/.vite/deps/{vue.runtime.esm-bundler-BHD3r-bP.js → vue.runtime.esm-bundler-S54atuNJ.js} +323 -259
  34. package/dist/server/ui/.vite/deps/{vue.runtime.esm-bundler-BHD3r-bP.js.map → vue.runtime.esm-bundler-S54atuNJ.js.map} +1 -1
  35. package/dist/transformers/format.js +2 -1
  36. package/dist/transformers/format.js.map +1 -1
  37. package/dist/transformers/inlineCss.js +3 -2
  38. package/dist/transformers/inlineCss.js.map +1 -1
  39. package/dist/transformers/inlineLink.js +2 -1
  40. package/dist/transformers/inlineLink.js.map +1 -1
  41. package/dist/transformers/minify.js +2 -1
  42. package/dist/transformers/minify.js.map +1 -1
  43. package/dist/transformers/tailwindComponent.js +2 -1
  44. package/dist/transformers/tailwindComponent.js.map +1 -1
  45. package/dist/transformers/urlQuery.js +2 -1
  46. package/dist/transformers/urlQuery.js.map +1 -1
  47. package/dist/utils/cssBox.js +2 -6
  48. package/dist/utils/cssBox.js.map +1 -1
  49. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"sfc-utils.js","names":[],"sources":["../../src/server/sfc-utils.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { resolve, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { glob } from 'tinyglobby'\nimport { componentNameFromPath, type NormalizedComponentSource } from '../utils/componentSources.ts'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\n/**\n * Built-in framework components Maizzle ships internally. Issues raised\n * against these files are framework-owned, not the user's responsibility,\n * so the dev UI's Checks tab filters them out.\n */\nconst FRAMEWORK_COMPONENTS_DIR = resolve(__dirname, '../components').replace(/\\\\/g, '/') + '/'\n\nexport function isFrameworkComponent(file: string): boolean {\n return file.replace(/\\\\/g, '/').startsWith(FRAMEWORK_COMPONENTS_DIR)\n}\n\nexport interface SfcBlock {\n content: string\n offset: number\n}\n\nexport function parseSfcBlocks(source: string): { template: SfcBlock | null, styles: SfcBlock[] } {\n let template: SfcBlock | null = null\n const styles: SfcBlock[] = []\n\n const templateMatch = source.match(/<template\\b[^>]*>([\\s\\S]*)<\\/template>/)\n if (templateMatch) {\n const contentStart = source.indexOf(templateMatch[0]) + templateMatch[0].indexOf(templateMatch[1])\n const offset = source.slice(0, contentStart).split('\\n').length - 1\n template = { content: templateMatch[1], offset }\n }\n\n const styleRe = /<style\\b([^>]*)>([\\s\\S]*?)<\\/style>/g\n let m\n while ((m = styleRe.exec(source)) !== null) {\n // Skip preprocessor styles (scss, less, etc.) — caniemail only parses plain CSS\n if (/\\blang\\s*=\\s*[\"'](?!css)/i.test(m[1])) continue\n\n const contentStart = m.index + m[0].indexOf(m[2])\n const offset = source.slice(0, contentStart).split('\\n').length - 1\n styles.push({ content: m[2], offset })\n }\n\n return { template, styles }\n}\n\n/**\n * Standard HTML elements — anything not in this set is treated as a component.\n */\nexport const HTML_ELEMENTS = new Set([\n 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base',\n 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption',\n 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del',\n 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset',\n 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5',\n 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img',\n 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'link', 'main', 'map',\n 'mark', 'menu', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol',\n 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q',\n 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'search', 'section', 'select',\n 'slot', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary',\n 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th',\n 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr',\n])\n\nexport function findComponentTags(templateContent: string): string[] {\n const tags = new Set<string>()\n\n // PascalCase tags like <Section>, <Button>\n const pascalRe = /<([A-Z][a-zA-Z0-9]*)\\b/g\n let m\n while ((m = pascalRe.exec(templateContent)) !== null) {\n tags.add(m[1])\n }\n\n // kebab-case tags like <my-component>\n const kebabRe = /<([a-z][a-z0-9]*(?:-[a-z0-9]+)+)\\b/g\n while ((m = kebabRe.exec(templateContent)) !== null) {\n if (!HTML_ELEMENTS.has(m[1])) {\n tags.add(m[1])\n }\n }\n\n return [...tags]\n}\n\nexport async function buildComponentMap(\n root: string,\n componentDirs: NormalizedComponentSource[],\n): Promise<Map<string, string>> {\n const map = new Map<string, string>()\n\n /**\n * Built-in framework components + the user's default `components/` dir\n * use unplugin's directoryAsNamespace + collapseSamePrefixes\n * behavior — i.e. no explicit prefix, folder name becomes\n * the namespace.\n */\n const implicitDirs = [\n resolve(__dirname, '../components'),\n resolve(root, 'components'),\n ].filter(existsSync)\n\n const allSources: NormalizedComponentSource[] = [\n ...implicitDirs.map(path => ({ path, prefix: undefined, pathPrefix: true })),\n ...componentDirs.filter(s => existsSync(s.path)),\n ]\n\n for (const source of allSources) {\n const files = await glob(['**/*.vue'], { cwd: source.path, absolute: true })\n for (const file of files) {\n const name = componentNameFromPath({\n filePath: file,\n dirRoot: source.path,\n prefix: source.prefix,\n pathPrefix: source.pathPrefix,\n })\n // Lowercased for case-insensitive lookups in the linter/compat scanners.\n map.set(name.toLowerCase(), file)\n }\n }\n\n return map\n}\n"],"mappings":";;;;;;AAMA,MAAM,YAAY,QAAQ,cAAc,OAAO,KAAK,GAAG,CAAC;;;;;;AAOxD,MAAM,2BAA2B,QAAQ,WAAW,eAAe,CAAC,CAAC,QAAQ,OAAO,GAAG,IAAI;AAE3F,SAAgB,qBAAqB,MAAuB;CAC1D,OAAO,KAAK,QAAQ,OAAO,GAAG,CAAC,CAAC,WAAW,wBAAwB;AACrE;AAOA,SAAgB,eAAe,QAAmE;CAChG,IAAI,WAA4B;CAChC,MAAM,SAAqB,CAAC;CAE5B,MAAM,gBAAgB,OAAO,MAAM,wCAAwC;CAC3E,IAAI,eAAe;EACjB,MAAM,eAAe,OAAO,QAAQ,cAAc,EAAE,IAAI,cAAc,EAAE,CAAC,QAAQ,cAAc,EAAE;EACjG,MAAM,SAAS,OAAO,MAAM,GAAG,YAAY,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS;EAClE,WAAW;GAAE,SAAS,cAAc;GAAI;EAAO;CACjD;CAEA,MAAM,UAAU;CAChB,IAAI;CACJ,QAAQ,IAAI,QAAQ,KAAK,MAAM,OAAO,MAAM;EAE1C,IAAI,4BAA4B,KAAK,EAAE,EAAE,GAAG;EAE5C,MAAM,eAAe,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE;EAChD,MAAM,SAAS,OAAO,MAAM,GAAG,YAAY,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS;EAClE,OAAO,KAAK;GAAE,SAAS,EAAE;GAAI;EAAO,CAAC;CACvC;CAEA,OAAO;EAAE;EAAU;CAAO;AAC5B;;;;AAKA,MAAa,gCAAgB,IAAI,IAAI;CACnC;CAAK;CAAQ;CAAW;CAAQ;CAAW;CAAS;CAAS;CAAK;CAClE;CAAO;CAAO;CAAc;CAAQ;CAAM;CAAU;CAAU;CAC9D;CAAQ;CAAQ;CAAO;CAAY;CAAQ;CAAY;CAAM;CAC7D;CAAW;CAAO;CAAU;CAAO;CAAM;CAAM;CAAM;CAAS;CAC9D;CAAc;CAAU;CAAU;CAAQ;CAAM;CAAM;CAAM;CAAM;CAClE;CAAM;CAAQ;CAAU;CAAU;CAAM;CAAQ;CAAK;CAAU;CAC/D;CAAS;CAAO;CAAO;CAAS;CAAU;CAAM;CAAQ;CAAQ;CAChE;CAAQ;CAAQ;CAAQ;CAAS;CAAO;CAAY;CAAU;CAC9D;CAAY;CAAU;CAAU;CAAK;CAAW;CAAO;CAAY;CACnE;CAAM;CAAM;CAAQ;CAAK;CAAQ;CAAU;CAAU;CAAW;CAChE;CAAQ;CAAS;CAAU;CAAQ;CAAU;CAAS;CAAO;CAC7D;CAAO;CAAS;CAAS;CAAM;CAAY;CAAY;CAAS;CAChE;CAAS;CAAQ;CAAS;CAAM;CAAS;CAAK;CAAM;CAAO;CAAS;AACtE,CAAC;AAED,SAAgB,kBAAkB,iBAAmC;CACnE,MAAM,uBAAO,IAAI,IAAY;CAG7B,MAAM,WAAW;CACjB,IAAI;CACJ,QAAQ,IAAI,SAAS,KAAK,eAAe,OAAO,MAC9C,KAAK,IAAI,EAAE,EAAE;CAIf,MAAM,UAAU;CAChB,QAAQ,IAAI,QAAQ,KAAK,eAAe,OAAO,MAC7C,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,GACzB,KAAK,IAAI,EAAE,EAAE;CAIjB,OAAO,CAAC,GAAG,IAAI;AACjB;AAEA,eAAsB,kBACpB,MACA,eAC8B;CAC9B,MAAM,sBAAM,IAAI,IAAoB;CAapC,MAAM,aAA0C,CAC9C,GANmB,CACnB,QAAQ,WAAW,eAAe,GAClC,QAAQ,MAAM,YAAY,CAC5B,CAAC,CAAC,OAAO,UAGO,CAAC,CAAC,KAAI,UAAS;EAAE;EAAM,QAAQ,KAAA;EAAW,YAAY;CAAK,EAAE,GAC3E,GAAG,cAAc,QAAO,MAAK,WAAW,EAAE,IAAI,CAAC,CACjD;CAEA,KAAK,MAAM,UAAU,YAAY;EAC/B,MAAM,QAAQ,MAAM,KAAK,CAAC,UAAU,GAAG;GAAE,KAAK,OAAO;GAAM,UAAU;EAAK,CAAC;EAC3E,KAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,OAAO,sBAAsB;IACjC,UAAU;IACV,SAAS,OAAO;IAChB,QAAQ,OAAO;IACf,YAAY,OAAO;GACrB,CAAC;GAED,IAAI,IAAI,KAAK,YAAY,GAAG,IAAI;EAClC;CACF;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"sfc-utils.js","names":[],"sources":["../../src/server/sfc-utils.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { resolve, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { glob } from 'tinyglobby'\nimport { componentNameFromPath, type NormalizedComponentSource } from '../utils/componentSources.ts'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\n/**\n * Built-in framework components Maizzle ships internally. Issues raised\n * against these files are framework-owned, not the user's responsibility,\n * so the dev UI's Checks tab filters them out.\n */\nconst FRAMEWORK_COMPONENTS_DIR = resolve(__dirname, '../components').replace(/\\\\/g, '/') + '/'\n\nexport function isFrameworkComponent(file: string): boolean {\n return file.replace(/\\\\/g, '/').startsWith(FRAMEWORK_COMPONENTS_DIR)\n}\n\nexport interface SfcBlock {\n content: string\n offset: number\n}\n\nexport function parseSfcBlocks(source: string): { template: SfcBlock | null, styles: SfcBlock[] } {\n let template: SfcBlock | null = null\n const styles: SfcBlock[] = []\n\n const templateMatch = source.match(/<template\\b[^>]*>([\\s\\S]*)<\\/template>/)\n if (templateMatch) {\n const contentStart = source.indexOf(templateMatch[0]) + templateMatch[0].indexOf(templateMatch[1])\n const offset = source.slice(0, contentStart).split('\\n').length - 1\n template = { content: templateMatch[1], offset }\n }\n\n const styleRe = /<style\\b([^>]*)>([\\s\\S]*?)<\\/style>/g\n let m\n while ((m = styleRe.exec(source)) !== null) {\n // Skip preprocessor styles (scss, less, etc.) — caniemail only parses plain CSS\n if (/\\blang\\s*=\\s*[\"'](?!css)/i.test(m[1])) continue\n\n const contentStart = m.index + m[0].indexOf(m[2])\n const offset = source.slice(0, contentStart).split('\\n').length - 1\n styles.push({ content: m[2], offset })\n }\n\n return { template, styles }\n}\n\n/**\n * Standard HTML elements — anything not in this set is treated as a component.\n */\nexport const HTML_ELEMENTS = new Set([\n 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base',\n 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption',\n 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del',\n 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset',\n 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5',\n 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img',\n 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'link', 'main', 'map',\n 'mark', 'menu', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol',\n 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q',\n 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'search', 'section', 'select',\n 'slot', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary',\n 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th',\n 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr',\n])\n\nexport function findComponentTags(templateContent: string): string[] {\n const tags = new Set<string>()\n\n // PascalCase tags like <Section>, <Button>\n const pascalRe = /<([A-Z][a-zA-Z0-9]*)\\b/g\n let m\n while ((m = pascalRe.exec(templateContent)) !== null) {\n tags.add(m[1])\n }\n\n // kebab-case tags like <my-component>\n const kebabRe = /<([a-z][a-z0-9]*(?:-[a-z0-9]+)+)\\b/g\n while ((m = kebabRe.exec(templateContent)) !== null) {\n if (!HTML_ELEMENTS.has(m[1])) {\n tags.add(m[1])\n }\n }\n\n return [...tags]\n}\n\nexport async function buildComponentMap(\n root: string,\n componentDirs: NormalizedComponentSource[],\n): Promise<Map<string, string>> {\n const map = new Map<string, string>()\n\n /**\n * Built-in framework components + the user's default `components/` dir\n * use unplugin's directoryAsNamespace + collapseSamePrefixes\n * behavior — i.e. no explicit prefix, folder name becomes\n * the namespace.\n */\n const implicitDirs = [\n resolve(__dirname, '../components'),\n resolve(root, 'components'),\n ].filter(existsSync)\n\n const allSources: NormalizedComponentSource[] = [\n ...implicitDirs.map(path => ({ path, prefix: undefined, pathPrefix: true })),\n ...componentDirs.filter(s => existsSync(s.path)),\n ]\n\n for (const source of allSources) {\n const files = await glob(['**/*.vue'], { cwd: source.path, absolute: true })\n for (const file of files) {\n const name = componentNameFromPath({\n filePath: file,\n dirRoot: source.path,\n prefix: source.prefix,\n pathPrefix: source.pathPrefix,\n })\n // Lowercased for case-insensitive lookups in the linter/compat scanners.\n map.set(name.toLowerCase(), file)\n }\n }\n\n return map\n}\n"],"mappings":"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"}