@fynixorg/ui 1.0.11 → 1.0.13

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 (127) hide show
  1. package/LICENSE +21 -0
  2. package/dist/README.md +36 -0
  3. package/dist/context/context.d.ts +19 -0
  4. package/dist/context/context.d.ts.map +1 -0
  5. package/dist/context/context.js +3 -11
  6. package/dist/context/context.js.map +3 -3
  7. package/dist/custom/button.d.ts +2 -0
  8. package/dist/custom/button.d.ts.map +1 -0
  9. package/dist/custom/button.js +2 -9
  10. package/dist/custom/button.js.map +3 -3
  11. package/dist/custom/index.d.ts +3 -0
  12. package/dist/custom/index.d.ts.map +1 -0
  13. package/dist/custom/index.js +2 -7
  14. package/dist/custom/index.js.map +3 -3
  15. package/dist/custom/path.d.ts +14 -0
  16. package/dist/custom/path.d.ts.map +1 -0
  17. package/dist/custom/path.js +17 -34
  18. package/dist/custom/path.js.map +3 -3
  19. package/dist/error/errorOverlay.d.ts +3 -0
  20. package/dist/error/errorOverlay.d.ts.map +1 -0
  21. package/dist/error/errorOverlay.js +82 -91
  22. package/dist/error/errorOverlay.js.map +3 -3
  23. package/dist/fynix/index.d.ts +5 -0
  24. package/dist/fynix/index.d.ts.map +1 -0
  25. package/dist/fynix/index.js +2 -7
  26. package/dist/fynix/index.js.map +3 -3
  27. package/dist/hooks/nixAsync.d.ts +14 -0
  28. package/dist/hooks/nixAsync.d.ts.map +1 -0
  29. package/dist/hooks/nixAsync.js +38 -43
  30. package/dist/hooks/nixAsync.js.map +3 -3
  31. package/dist/hooks/nixAsyncCache.d.ts +14 -0
  32. package/dist/hooks/nixAsyncCache.d.ts.map +1 -0
  33. package/dist/hooks/nixAsyncCache.js +57 -59
  34. package/dist/hooks/nixAsyncCache.js.map +3 -3
  35. package/dist/hooks/nixAsyncDebounce.d.ts +22 -0
  36. package/dist/hooks/nixAsyncDebounce.d.ts.map +1 -0
  37. package/dist/hooks/nixAsyncDebounce.js +74 -85
  38. package/dist/hooks/nixAsyncDebounce.js.map +3 -3
  39. package/dist/hooks/nixAsyncQuery.d.ts +16 -0
  40. package/dist/hooks/nixAsyncQuery.d.ts.map +1 -0
  41. package/dist/hooks/nixAsyncQuery.js +85 -79
  42. package/dist/hooks/nixAsyncQuery.js.map +3 -3
  43. package/dist/hooks/nixCallback.d.ts +2 -0
  44. package/dist/hooks/nixCallback.d.ts.map +1 -0
  45. package/dist/hooks/nixCallback.js +30 -40
  46. package/dist/hooks/nixCallback.js.map +3 -3
  47. package/dist/hooks/nixComputed.d.ts +16 -0
  48. package/dist/hooks/nixComputed.d.ts.map +1 -0
  49. package/dist/hooks/nixComputed.js +166 -198
  50. package/dist/hooks/nixComputed.js.map +4 -4
  51. package/dist/hooks/nixDebounce.d.ts +11 -0
  52. package/dist/hooks/nixDebounce.d.ts.map +1 -0
  53. package/dist/hooks/nixDebounce.js +53 -58
  54. package/dist/hooks/nixDebounce.js.map +3 -3
  55. package/dist/hooks/nixEffect.d.ts +4 -0
  56. package/dist/hooks/nixEffect.d.ts.map +1 -0
  57. package/dist/hooks/nixEffect.js +65 -75
  58. package/dist/hooks/nixEffect.js.map +3 -3
  59. package/dist/hooks/nixForm.d.ts +33 -0
  60. package/dist/hooks/nixForm.d.ts.map +1 -0
  61. package/dist/hooks/nixForm.js +110 -120
  62. package/dist/hooks/nixForm.js.map +3 -3
  63. package/dist/hooks/nixFormAsync.d.ts +42 -0
  64. package/dist/hooks/nixFormAsync.d.ts.map +1 -0
  65. package/dist/hooks/nixFormAsync.js +158 -167
  66. package/dist/hooks/nixFormAsync.js.map +3 -3
  67. package/dist/hooks/nixInterval.d.ts +2 -0
  68. package/dist/hooks/nixInterval.d.ts.map +1 -0
  69. package/dist/hooks/nixInterval.js +21 -27
  70. package/dist/hooks/nixInterval.js.map +3 -3
  71. package/dist/hooks/nixLazy.d.ts +8 -0
  72. package/dist/hooks/nixLazy.d.ts.map +1 -0
  73. package/dist/hooks/nixLazy.js +53 -58
  74. package/dist/hooks/nixLazy.js.map +3 -3
  75. package/dist/hooks/nixLazyAsync.d.ts +10 -0
  76. package/dist/hooks/nixLazyAsync.d.ts.map +1 -0
  77. package/dist/hooks/nixLazyAsync.js +65 -71
  78. package/dist/hooks/nixLazyAsync.js.map +3 -3
  79. package/dist/hooks/nixLazyFormAsync.d.ts +50 -0
  80. package/dist/hooks/nixLazyFormAsync.d.ts.map +1 -0
  81. package/dist/hooks/nixLazyFormAsync.js +209 -213
  82. package/dist/hooks/nixLazyFormAsync.js.map +3 -3
  83. package/dist/hooks/nixLocalStorage.d.ts +5 -0
  84. package/dist/hooks/nixLocalStorage.d.ts.map +1 -0
  85. package/dist/hooks/nixLocalStorage.js +21 -25
  86. package/dist/hooks/nixLocalStorage.js.map +3 -3
  87. package/dist/hooks/nixMemo.d.ts +2 -0
  88. package/dist/hooks/nixMemo.d.ts.map +1 -0
  89. package/dist/hooks/nixMemo.js +27 -31
  90. package/dist/hooks/nixMemo.js.map +3 -3
  91. package/dist/hooks/nixPrevious.d.ts +2 -0
  92. package/dist/hooks/nixPrevious.d.ts.map +1 -0
  93. package/dist/hooks/nixPrevious.js +13 -19
  94. package/dist/hooks/nixPrevious.js.map +3 -3
  95. package/dist/hooks/nixRef.d.ts +4 -0
  96. package/dist/hooks/nixRef.d.ts.map +1 -0
  97. package/dist/hooks/nixRef.js +14 -20
  98. package/dist/hooks/nixRef.js.map +3 -3
  99. package/dist/hooks/nixState.d.ts +15 -0
  100. package/dist/hooks/nixState.d.ts.map +1 -0
  101. package/dist/hooks/nixState.js +120 -173
  102. package/dist/hooks/nixState.js.map +3 -3
  103. package/dist/hooks/nixStore.d.ts +7 -0
  104. package/dist/hooks/nixStore.d.ts.map +1 -0
  105. package/dist/hooks/nixStore.js +48 -54
  106. package/dist/hooks/nixStore.js.map +3 -3
  107. package/dist/package.json +213 -0
  108. package/dist/plugins/vite-plugin-res.d.ts +41 -0
  109. package/dist/plugins/vite-plugin-res.d.ts.map +1 -0
  110. package/dist/plugins/vite-plugin-res.js +620 -36
  111. package/dist/plugins/vite-plugin-res.js.map +4 -4
  112. package/dist/router/router.d.ts +35 -0
  113. package/dist/router/router.d.ts.map +1 -0
  114. package/dist/router/router.js +520 -486
  115. package/dist/router/router.js.map +3 -3
  116. package/dist/runtime.d.ts +62 -0
  117. package/dist/runtime.d.ts.map +1 -0
  118. package/dist/runtime.js +833 -820
  119. package/dist/runtime.js.map +4 -4
  120. package/package.json +227 -44
  121. package/types/fnx.d.ts +72 -0
  122. package/types/fynix-ui.d.ts +323 -0
  123. package/types/global.d.ts +46 -6
  124. package/types/index.d.ts +37 -0
  125. package/types/vite-env.d.ts +553 -0
  126. package/runtime.d.ts +0 -83
  127. package/types/jsx.d.ts +0 -692
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../plugins/vite-plugin-res.js"],
4
- "sourcesContent": ["import { transform } from \"esbuild\";\r\nexport default function fynix() {\r\n return {\r\n name: \"vite-plugin-res\",\r\n enforce: \"pre\",\r\n async transform(code, id) {\r\n if (!id.includes(\"/src/\")) return null;\r\n if (!id.endsWith(\".ts\") && !id.endsWith(\".js\") && !id.endsWith(\".fnx\"))\r\n return null;\r\n this.addWatchFile(id);\r\n const result = await transform(code, {\r\n loader: \"jsx\",\r\n jsxFactory: \"Fynix\",\r\n jsxFragment: \"Fynix.Fragment\",\r\n sourcemap: true,\r\n sourcefile: id,\r\n });\r\n return {\r\n code: result.code,\r\n map: result.map,\r\n };\r\n },\r\n handleHotUpdate({ file, server }) {\r\n if (\r\n file.endsWith(\".ts\") ||\r\n file.endsWith(\".js\") ||\r\n file.endsWith(\".fnx\")\r\n ) {\r\n server.ws.send({ type: \"full-reload\" });\r\n return [];\r\n }\r\n },\r\n };\r\n}\r\n"],
5
- "mappings": ";;AAAA,SAAS,iBAAiB;AACX,SAAR,QAAyB;AAC9B,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,UAAU,MAAM,IAAI;AACxB,UAAI,CAAC,GAAG,SAAS,OAAO;AAAG,eAAO;AAClC,UAAI,CAAC,GAAG,SAAS,KAAK,KAAK,CAAC,GAAG,SAAS,KAAK,KAAK,CAAC,GAAG,SAAS,MAAM;AACnE,eAAO;AACT,WAAK,aAAa,EAAE;AACpB,YAAM,SAAS,MAAM,UAAU,MAAM;AAAA,QACnC,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,WAAW;AAAA,QACX,YAAY;AAAA,MACd,CAAC;AACD,aAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,KAAK,OAAO;AAAA,MACd;AAAA,IACF;AAAA,IACA,gBAAgB,EAAE,MAAM,OAAO,GAAG;AAChC,UACE,KAAK,SAAS,KAAK,KACnB,KAAK,SAAS,KAAK,KACnB,KAAK,SAAS,MAAM,GACpB;AACA,eAAO,GAAG,KAAK,EAAE,MAAM,cAAc,CAAC;AACtC,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;AAhCwB;",
6
- "names": []
3
+ "sources": ["../../plugins/vite-plugin-res.ts"],
4
+ "sourcesContent": ["/* MIT License\r\n\r\n* Copyright (c) 2026 Resty Gonzales\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n* SOFTWARE.\r\n */\r\n\r\nimport { transform, type TransformOptions } from \"esbuild\";\r\nimport type { HmrContext, UserConfig } from \"vite\";\r\nimport { normalizePath } from \"vite\";\r\nimport * as ts from \"typescript\";\r\n\r\n/**\r\n * ANSI color codes for terminal output\r\n */\r\nconst colors = {\r\n reset: \"\\x1b[0m\",\r\n red: \"\\x1b[31m\",\r\n green: \"\\x1b[32m\",\r\n yellow: \"\\x1b[33m\",\r\n blue: \"\\x1b[34m\",\r\n magenta: \"\\x1b[35m\",\r\n cyan: \"\\x1b[36m\",\r\n gray: \"\\x1b[90m\",\r\n bold: \"\\x1b[1m\",\r\n};\r\n\r\n/**\r\n * Vite plugin options for Fynix with SFC support\r\n */\r\ninterface FynixPluginOptions {\r\n /**\r\n * JSX factory function name\r\n * @default \"Fynix\"\r\n */\r\n jsxFactory?: string;\r\n\r\n /**\r\n * JSX fragment factory name\r\n * @default \"Fynix.Fragment\"\r\n */\r\n jsxFragment?: string;\r\n\r\n /**\r\n * File extensions to transform\r\n * @default [\".ts\", \".js\", \".jsx\", \".tsx\", \".fnx\"]\r\n */\r\n include?: string[];\r\n\r\n /**\r\n * Paths to exclude from transformation\r\n * @default [\"node_modules\"]\r\n */\r\n exclude?: string[];\r\n\r\n /**\r\n * Enable source maps\r\n * @default true\r\n */\r\n sourcemap?: boolean;\r\n\r\n /**\r\n * Custom esbuild transform options\r\n */\r\n esbuildOptions?: Partial<TransformOptions>;\r\n\r\n /**\r\n * Enable SFC parsing for .fnx files\r\n * @default true\r\n */\r\n enableSFC?: boolean;\r\n\r\n /**\r\n * Enable debug logging\r\n * @default false\r\n */\r\n debug?: boolean;\r\n\r\n /**\r\n * Show generated code in console (useful for debugging SFC transformation)\r\n * @default false\r\n */\r\n showGeneratedCode?: boolean;\r\n\r\n /**\r\n * Enable TypeScript type checking (slower but catches type errors)\r\n * @default false\r\n */\r\n typeCheck?: boolean;\r\n\r\n /**\r\n * TypeScript compiler options override\r\n */\r\n tsConfig?: ts.CompilerOptions;\r\n}\r\n\r\n/**\r\n * Extended context type that includes Vite's transform context methods\r\n */\r\ninterface TransformContext {\r\n addWatchFile?: (id: string) => void;\r\n error?: (error: { message: string; stack?: string; id?: string }) => void;\r\n}\r\n\r\n/**\r\n * Parsed SFC sections\r\n */\r\ninterface SFCParsedResult {\r\n logic: string;\r\n view: string;\r\n style: string;\r\n logicLang: \"js\" | \"ts\";\r\n hasLogic: boolean;\r\n hasView: boolean;\r\n hasStyle: boolean;\r\n isStyleScoped: boolean;\r\n imports: string[];\r\n exports: string[];\r\n}\r\n\r\n/**\r\n * Parse a Fynix SFC file (.fnx)\r\n */\r\nfunction parseSFC(source: string): SFCParsedResult {\r\n const result: SFCParsedResult = {\r\n logic: \"\",\r\n view: \"\",\r\n style: \"\",\r\n logicLang: \"ts\",\r\n hasLogic: false,\r\n hasView: false,\r\n hasStyle: false,\r\n isStyleScoped: false,\r\n imports: [],\r\n exports: [],\r\n };\r\n\r\n // Parse <logic> block with setup attribute\r\n const logicMatch = source.match(\r\n /<logic\\s+setup\\s*=\\s*[\"']?(ts|js)[\"']?\\s*>([\\s\\S]*?)<\\/logic>/i\r\n );\r\n\r\n if (logicMatch && logicMatch[1] && logicMatch[2] !== undefined) {\r\n result.hasLogic = true;\r\n result.logicLang = logicMatch[1].toLowerCase() as \"js\" | \"ts\";\r\n const rawLogic = logicMatch[2].trim();\r\n\r\n // Extract imports, exports, and other logic (multi-line export support)\r\n const logicLines = rawLogic.split(\"\\n\");\r\n const imports: string[] = [];\r\n const exports: string[] = [];\r\n const otherLogic: string[] = [];\r\n let inExportBlock = false;\r\n let exportBuffer: string[] = [];\r\n let exportBraceDepth = 0;\r\n\r\n for (let i = 0; i < logicLines.length; i++) {\r\n const line: string = logicLines[i] ?? \"\";\r\n const trimmed: string = line.trim();\r\n if (inExportBlock) {\r\n exportBuffer.push(line);\r\n // Count braces to handle nested objects\r\n const openBraces = ((line && line.match(/{/g)) || []).length;\r\n const closeBraces = ((line && line.match(/}/g)) || []).length;\r\n exportBraceDepth += openBraces - closeBraces;\r\n if (exportBraceDepth <= 0) {\r\n exports.push(exportBuffer.join(\"\\n\"));\r\n exportBuffer = [];\r\n inExportBlock = false;\r\n exportBraceDepth = 0;\r\n }\r\n continue;\r\n }\r\n if (trimmed.startsWith(\"import \")) {\r\n imports.push(line ?? \"\");\r\n } else if (trimmed.startsWith(\"export \")) {\r\n // Check if this is a multi-line export (object or function)\r\n // Handles: export const foo = { ... }, export const foo =\\n{ ... }, and nested objects\r\n if (/export\\s+\\w+\\s*=\\s*{/.test(trimmed) || trimmed.endsWith(\"{\")) {\r\n inExportBlock = true;\r\n exportBuffer = [line];\r\n // Count braces in the first line\r\n exportBraceDepth =\r\n ((line && line.match(/{/g)) || []).length -\r\n ((line && line.match(/}/g)) || []).length;\r\n // If the export starts and ends on the same line, close immediately\r\n if (exportBraceDepth <= 0) {\r\n exports.push(exportBuffer.join(\"\\n\"));\r\n exportBuffer = [];\r\n inExportBlock = false;\r\n exportBraceDepth = 0;\r\n }\r\n } else {\r\n exports.push(line ?? \"\");\r\n }\r\n } else if (trimmed) {\r\n otherLogic.push(line ?? \"\");\r\n }\r\n }\r\n\r\n // If file ends while still in export block, flush buffer\r\n if (exportBuffer.length > 0) {\r\n exports.push(exportBuffer.join(\"\\n\"));\r\n }\r\n\r\n result.imports = imports;\r\n result.exports = exports;\r\n result.logic = otherLogic.join(\"\\n\");\r\n }\r\n\r\n // Parse <view> block\r\n const viewMatch = source.match(/<view\\s*>([\\s\\S]*?)<\\/view>/i);\r\n if (viewMatch && viewMatch[1] !== undefined) {\r\n result.hasView = true;\r\n result.view = viewMatch[1].trim();\r\n }\r\n\r\n // Parse <style> block with optional scoped attribute\r\n const styleMatch = source.match(/<style(\\s+scoped)?\\s*>([\\s\\S]*?)<\\/style>/i);\r\n if (styleMatch && styleMatch[2] !== undefined) {\r\n result.hasStyle = true;\r\n result.isStyleScoped = !!styleMatch[1];\r\n result.style = styleMatch[2].trim();\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generate a unique style ID for scoped styles\r\n */\r\nfunction generateStyleId(filePath: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < filePath.length; i++) {\r\n const char = filePath.charCodeAt(i);\r\n hash = (hash << 5) - hash + char;\r\n hash = hash & hash;\r\n }\r\n return `fynix-${Math.abs(hash).toString(36)}`;\r\n}\r\n\r\n/**\r\n * Scope CSS styles by adding data attribute selector\r\n * Fixed to properly handle keyframes with scoped styles\r\n */\r\nfunction scopeStyles(css: string, scopeId: string): string {\r\n const dataAttr = `[data-${scopeId}]`;\r\n const keyframeMap = new Map<string, string>();\r\n const keyframes: string[] = [];\r\n\r\n // 1. Extract & rename @keyframes (store safely)\r\n css = css.replace(\r\n /@keyframes\\s+([a-zA-Z0-9_-]+)\\s*\\{[\\s\\S]*?\\}/g,\r\n (block, name) => {\r\n const scopedName = `${name}-${scopeId}`;\r\n keyframeMap.set(name, scopedName);\r\n const renamed = block.replace(\r\n new RegExp(`@keyframes\\\\s+${name}`),\r\n `@keyframes ${scopedName}`\r\n );\r\n const index = keyframes.push(renamed) - 1;\r\n return `__KEYFRAMES_${index}__`;\r\n }\r\n );\r\n\r\n // 2. Rewrite animation references\r\n keyframeMap.forEach((scoped, original) => {\r\n const re = new RegExp(\r\n `(animation(?:-name)?\\\\s*:[^;]*?)\\\\b${original}\\\\b`,\r\n \"g\"\r\n );\r\n css = css.replace(re, `$1${scoped}`);\r\n });\r\n\r\n // 3. Scope normal selectors\r\n // Find the root class from the first element in the view (e.g., r-class=\"page\")\r\n let rootClass = null;\r\n try {\r\n const viewMatch = css.match(/\\.(\\w+)[^{]*\\{/);\r\n if (viewMatch) {\r\n rootClass = viewMatch[1];\r\n }\r\n } catch {}\r\n\r\n css = css.replace(/([^{}]+)\\{([^{}]*)\\}/g, (match, selector, rules) => {\r\n if (selector.trim().startsWith(\"@\")) return match;\r\n\r\n const scopedSelectors = selector\r\n .split(\",\")\r\n .map((s: string) => {\r\n const sel = s.trim();\r\n // If selector is exactly the root class (with optional pseudo-classes), rewrite as [data-xxx][pseudo]\r\n if (rootClass) {\r\n const rootRe = new RegExp(\r\n `^\\\\.${rootClass}((:[\\\\w-]+)*|(::[\\\\w-]+)*)?$`\r\n );\r\n const pseudo = sel.replace(new RegExp(`^\\\\.${rootClass}`), \"\");\r\n if (rootRe.test(sel)) {\r\n return `${dataAttr}${pseudo}`;\r\n }\r\n }\r\n // Otherwise, prepend data attribute as ancestor\r\n return `${dataAttr} ${sel}`;\r\n })\r\n .join(\", \");\r\n return `${scopedSelectors}{${rules}}`;\r\n });\r\n\r\n // 4. Restore keyframes\r\n keyframes.forEach((kf, i) => {\r\n css = css.replace(`__KEYFRAMES_${i}__`, kf);\r\n });\r\n\r\n return css;\r\n}\r\n\r\n/**\r\n * Transform SFC to component code\r\n */\r\nfunction transformSFC(\r\n parsed: SFCParsedResult,\r\n filePath: string,\r\n jsxFactory: string\r\n): string {\r\n const styleId = generateStyleId(filePath);\r\n const lines: string[] = [];\r\n\r\n lines.push(`import { ${jsxFactory} } from '@fynixorg/ui';`);\r\n\r\n if (parsed.imports.length > 0) {\r\n parsed.imports.forEach((importLine) => {\r\n lines.push(importLine);\r\n });\r\n }\r\n\r\n lines.push(\"\");\r\n\r\n if (parsed.hasStyle) {\r\n let processedStyle = parsed.style;\r\n\r\n if (parsed.isStyleScoped) {\r\n processedStyle = scopeStyles(parsed.style, styleId);\r\n }\r\n\r\n lines.push(`// Inject styles`);\r\n lines.push(`if (typeof document !== 'undefined') {`);\r\n lines.push(` const styleId = '${styleId}';`);\r\n lines.push(` if (!document.getElementById(styleId)) {`);\r\n lines.push(` const styleEl = document.createElement('style');`);\r\n lines.push(` styleEl.id = styleId;`);\r\n lines.push(` styleEl.textContent = ${JSON.stringify(processedStyle)};`);\r\n lines.push(` document.head.appendChild(styleEl);`);\r\n lines.push(` }`);\r\n lines.push(`}`);\r\n lines.push(\"\");\r\n }\r\n\r\n // Add exports BEFORE component (module-level)\r\n if (parsed.exports.length > 0) {\r\n parsed.exports.forEach((exportLine) => {\r\n lines.push(exportLine);\r\n });\r\n lines.push(\"\");\r\n }\r\n\r\n // Use type-safe props if Props interface is declared\r\n let propsType = \"any\";\r\n const propsInterfaceRegex = /interface\\s+Props\\s*{[\\s\\S]*?}/m;\r\n if (propsInterfaceRegex.test(parsed.logic)) {\r\n propsType = \"Props\";\r\n }\r\n lines.push(`function FynixComponent(props: ${propsType} = {}) {`);\r\n\r\n if (parsed.hasLogic && parsed.logic.trim()) {\r\n lines.push(` // Component logic`);\r\n const logicLines = parsed.logic.split(\"\\n\");\r\n logicLines.forEach((line) => {\r\n if (line.trim()) {\r\n lines.push(` ${line}`);\r\n }\r\n });\r\n lines.push(\"\");\r\n }\r\n\r\n // Inject meta tags if meta export exists\r\n if (parsed.exports.some((e) => e.trim().startsWith(\"export const meta\"))) {\r\n lines.push(\r\n ` if (typeof document !== \"undefined\" && typeof meta !== \"undefined\") {`\r\n );\r\n lines.push(` if (meta.title) document.title = meta.title;`);\r\n lines.push(` const _meta = meta as any;`);\r\n lines.push(` const metaTags = [`);\r\n lines.push(\r\n ` _meta.description ? { name: \"description\", content: _meta.description } : null,`\r\n );\r\n lines.push(\r\n ` _meta.keywords ? { name: \"keywords\", content: _meta.keywords } : null,`\r\n );\r\n lines.push(\r\n ` _meta.ogTitle ? { property: \"og:title\", content: _meta.ogTitle } : null,`\r\n );\r\n lines.push(\r\n ` _meta.ogDescription ? { property: \"og:description\", content: _meta.ogDescription } : null,`\r\n );\r\n lines.push(\r\n ` _meta.ogImage ? { property: \"og:image\", content: _meta.ogImage } : null,`\r\n );\r\n lines.push(` ].filter(Boolean);`);\r\n lines.push(` metaTags.forEach((tagObj) => {`);\r\n lines.push(` if (!tagObj) return;`);\r\n lines.push(` const { name, property, content } = tagObj;`);\r\n lines.push(` if (!content) return;`);\r\n lines.push(` let tag;`);\r\n lines.push(` if (name) {`);\r\n lines.push(\" tag = document.querySelector(`meta[name='${name}']`);\");\r\n lines.push(` if (!tag) {`);\r\n lines.push(` tag = document.createElement(\"meta\");`);\r\n lines.push(` tag.setAttribute(\"name\", name);`);\r\n lines.push(` document.head.appendChild(tag);`);\r\n lines.push(` }`);\r\n lines.push(` } else if (property) {`);\r\n lines.push(\r\n \" tag = document.querySelector(`meta[property='${property}']`);\"\r\n );\r\n lines.push(` if (!tag) {`);\r\n lines.push(` tag = document.createElement(\"meta\");`);\r\n lines.push(` tag.setAttribute(\"property\", property);`);\r\n lines.push(` document.head.appendChild(tag);`);\r\n lines.push(` }`);\r\n lines.push(` }`);\r\n lines.push(` if (tag) tag.setAttribute(\"content\", content);`);\r\n lines.push(` });`);\r\n lines.push(` }`);\r\n lines.push(\"\");\r\n }\r\n if (parsed.hasView) {\r\n lines.push(` // Component view`);\r\n\r\n if (parsed.isStyleScoped) {\r\n // Add data attribute to root element\r\n let viewContent = parsed.view.trim();\r\n\r\n // Fix: define showGeneratedCode from closure or default to false\r\n const showGeneratedCode =\r\n typeof globalThis !== \"undefined\" &&\r\n (globalThis as any).fynixShowGeneratedCode !== undefined\r\n ? (globalThis as any).fynixShowGeneratedCode\r\n : false;\r\n\r\n // DEBUG: Log the view content to see what we're actually working with\r\n if (showGeneratedCode) {\r\n console.log(\r\n `${colors.magenta}[DEBUG] Original view content:${colors.reset}`\r\n );\r\n console.log(viewContent.substring(0, 200)); // First 200 chars\r\n }\r\n\r\n // Strategy: Match ONLY the first opening tag precisely\r\n // Pattern: <tagname + any attributes (including newlines) + first closing >\r\n // Use non-greedy match for attributes to stop at FIRST >\r\n\r\n const tagMatch = viewContent.match(/^(<\\w+)((?:\\s+[^>]*?)?)(\\s*>)/s);\r\n\r\n if (tagMatch) {\r\n const openTag = tagMatch[1]; // e.g., \"<div\"\r\n const attributes = tagMatch[2]; // e.g., ' r-class=\"page\"'\r\n const closingBracket = tagMatch[3]; // e.g., \">\"\r\n\r\n if (showGeneratedCode) {\r\n console.log(\r\n `${colors.magenta}[DEBUG] Matched tag:${colors.reset} ${openTag}`\r\n );\r\n console.log(\r\n `${colors.magenta}[DEBUG] Attributes:${colors.reset} ${attributes}`\r\n );\r\n }\r\n\r\n // Insert data attribute before the closing bracket\r\n const modifiedStart = `${openTag}${attributes} data-${styleId}=\"\"${closingBracket}`;\r\n const restOfView = viewContent.substring(tagMatch[0].length);\r\n\r\n const modifiedView = modifiedStart + restOfView;\r\n\r\n if (showGeneratedCode) {\r\n console.log(\r\n `${colors.magenta}[DEBUG] Modified first line:${colors.reset}`\r\n );\r\n console.log(modifiedView.split(\"\\n\")[0]);\r\n }\r\n\r\n lines.push(` return (`);\r\n const viewLines = modifiedView.split(\"\\n\");\r\n viewLines.forEach((line: string) => {\r\n lines.push(` ${line}`);\r\n });\r\n lines.push(` );`);\r\n } else {\r\n // Fallback: wrap in div if we can't parse\r\n lines.push(` return (`);\r\n lines.push(` <div data-${styleId}=\"\">`);\r\n const viewLines = parsed.view.split(\"\\n\");\r\n viewLines.forEach((line: string) => {\r\n lines.push(` ${line}`);\r\n });\r\n lines.push(` </div>`);\r\n lines.push(` );`);\r\n }\r\n } else {\r\n lines.push(` return (`);\r\n const viewLines = parsed.view.split(\"\\n\");\r\n viewLines.forEach((line: string) => {\r\n lines.push(` ${line}`);\r\n });\r\n lines.push(` );`);\r\n }\r\n } else {\r\n lines.push(` return null;`);\r\n }\r\n\r\n lines.push(`}`);\r\n lines.push(\"\");\r\n\r\n // Export default separately\r\n lines.push(`export default FynixComponent;`);\r\n\r\n return lines.join(\"\\n\");\r\n}\r\n\r\n/**\r\n * Validate SFC structure\r\n */\r\nfunction validateSFC(parsed: SFCParsedResult, filePath: string): void {\r\n if (!parsed.hasView) {\r\n throw new Error(\r\n `${colors.red}[Fynix SFC]${colors.reset} Missing <view> block in ${colors.cyan}${filePath}${colors.reset}. Every .fnx file must have a <view> section.`\r\n );\r\n }\r\n\r\n if (parsed.hasLogic && ![\"ts\", \"js\"].includes(parsed.logicLang)) {\r\n throw new Error(\r\n `${colors.red}[Fynix SFC]${colors.reset} Invalid setup attribute in <logic> block in ${colors.cyan}${filePath}${colors.reset}. Must be \"ts\" or \"js\".`\r\n );\r\n }\r\n\r\n if (parsed.hasLogic && parsed.logicLang === \"js\") {\r\n const tsPatterns = [\r\n { pattern: /\\binterface\\s+\\w+/, name: \"interface declaration\" },\r\n { pattern: /\\btype\\s+\\w+\\s*=/, name: \"type alias\" },\r\n { pattern: /:\\s*\\w+(\\[\\]|<[^>]+>)?\\s*[;,=)]/, name: \"type annotation\" },\r\n { pattern: /<\\w+>(?!\\s*<)/, name: \"generic type\" },\r\n { pattern: /\\benum\\s+\\w+/, name: \"enum declaration\" },\r\n { pattern: /\\bas\\s+\\w+/, name: \"type assertion\" },\r\n { pattern: /\\bnamespace\\s+\\w+/, name: \"namespace\" },\r\n { pattern: /\\babstract\\s+class/, name: \"abstract class\" },\r\n {\r\n pattern: /\\bpublic\\s+|private\\s+|protected\\s+/,\r\n name: \"access modifier\",\r\n },\r\n ];\r\n\r\n const allCode = parsed.logic + \"\\n\" + parsed.imports.join(\"\\n\");\r\n\r\n for (const { pattern, name } of tsPatterns) {\r\n if (pattern.test(allCode)) {\r\n throw new Error(\r\n `${colors.red}[Fynix SFC]${colors.reset} TypeScript syntax detected ${colors.yellow}(${name})${colors.reset} in ${colors.cyan}${filePath}${colors.reset} with ${colors.yellow}setup=\"js\"${colors.reset}.\\n` +\r\n `${colors.gray}Either change to setup=\"ts\" or remove TypeScript-specific syntax.${colors.reset}`\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Improved type checker with better error handling and virtual file system\r\n */\r\nclass TypeScriptChecker {\r\n private compilerOptions: ts.CompilerOptions;\r\n private virtualFiles: Map<string, string> = new Map();\r\n private program: ts.Program | null = null;\r\n\r\n constructor(customOptions?: ts.CompilerOptions) {\r\n this.compilerOptions = {\r\n noEmit: true,\r\n strict: true, // Changed to true for better type checking\r\n target: ts.ScriptTarget.ESNext,\r\n module: ts.ModuleKind.ESNext,\r\n jsx: ts.JsxEmit.Preserve,\r\n lib: [\"lib.es2023.d.ts\", \"lib.dom.d.ts\"],\r\n moduleResolution: ts.ModuleResolutionKind.Bundler,\r\n esModuleInterop: true,\r\n skipLibCheck: true,\r\n allowSyntheticDefaultImports: true,\r\n strictNullChecks: true, // Changed to true\r\n strictFunctionTypes: true, // Changed to true\r\n noImplicitAny: false,\r\n allowJs: true,\r\n checkJs: false,\r\n resolveJsonModule: true,\r\n isolatedModules: true,\r\n ...customOptions,\r\n };\r\n }\r\n\r\n addFile(fileName: string, content: string): void {\r\n this.virtualFiles.set(fileName, content);\r\n this.program = null;\r\n }\r\n\r\n private createCompilerHost(): ts.CompilerHost {\r\n const defaultHost = ts.createCompilerHost(this.compilerOptions);\r\n\r\n return {\r\n ...defaultHost,\r\n getSourceFile: (fileName, languageVersion) => {\r\n if (this.virtualFiles.has(fileName)) {\r\n const content = this.virtualFiles.get(fileName);\r\n if (content === undefined) return undefined;\r\n return ts.createSourceFile(fileName, content, languageVersion, true);\r\n }\r\n\r\n try {\r\n if (ts.sys.fileExists(fileName)) {\r\n const content = ts.sys.readFile(fileName);\r\n if (content !== undefined) {\r\n return ts.createSourceFile(\r\n fileName,\r\n content,\r\n languageVersion,\r\n true\r\n );\r\n }\r\n }\r\n } catch (err) {\r\n // Silent fail\r\n }\r\n\r\n return undefined;\r\n },\r\n fileExists: (fileName) => {\r\n if (this.virtualFiles.has(fileName)) return true;\r\n return ts.sys.fileExists(fileName);\r\n },\r\n readFile: (fileName) => {\r\n if (this.virtualFiles.has(fileName)) {\r\n const content = this.virtualFiles.get(fileName);\r\n return content === undefined ? undefined : content;\r\n }\r\n const sysContent = ts.sys.readFile(fileName);\r\n return sysContent === undefined ? undefined : sysContent;\r\n },\r\n writeFile: () => {},\r\n };\r\n }\r\n\r\n checkFile(fileName: string): string[] {\r\n const errors: string[] = [];\r\n\r\n try {\r\n if (!this.virtualFiles.has(fileName)) {\r\n return [\"File not found in virtual file system\"];\r\n }\r\n\r\n const compilerHost = this.createCompilerHost();\r\n\r\n if (!this.program) {\r\n this.program = ts.createProgram(\r\n [fileName],\r\n this.compilerOptions,\r\n compilerHost\r\n );\r\n }\r\n\r\n const sourceFile = this.program.getSourceFile(fileName);\r\n if (!sourceFile) {\r\n return [`Could not get source file for ${fileName}`];\r\n }\r\n\r\n const diagnostics = [\r\n ...this.program.getSyntacticDiagnostics(sourceFile),\r\n ...this.program.getSemanticDiagnostics(sourceFile),\r\n ];\r\n\r\n // Only skip module resolution errors, NOT type errors\r\n // This allows proper type checking (2322 = type mismatch, 2345 = argument type error, etc.)\r\n const skipCodes = new Set([\r\n 2307, // Cannot find module\r\n 2792, // Cannot find module (alternative)\r\n 7016, // Could not find declaration file\r\n 7026, // JSX element implicitly has type 'any'\r\n ]);\r\n\r\n diagnostics.forEach((diagnostic) => {\r\n if (skipCodes.has(diagnostic.code)) {\r\n return;\r\n }\r\n\r\n if (diagnostic.file && diagnostic.start !== undefined) {\r\n const pos = diagnostic.file.getLineAndCharacterOfPosition(\r\n diagnostic.start\r\n );\r\n const line = pos?.line ?? 0;\r\n const character = pos?.character ?? 0;\r\n const message = ts.flattenDiagnosticMessageText(\r\n diagnostic.messageText,\r\n \"\\n\"\r\n );\r\n errors.push(\r\n `${colors.yellow}Line ${line + 1}:${character + 1}${colors.reset} - ${message} ${colors.gray}(TS${diagnostic.code})${colors.reset}`\r\n );\r\n } else {\r\n const message = ts.flattenDiagnosticMessageText(\r\n diagnostic.messageText,\r\n \"\\n\"\r\n );\r\n errors.push(\r\n `${message} ${colors.gray}(TS${diagnostic.code})${colors.reset}`\r\n );\r\n }\r\n });\r\n } catch (error) {\r\n errors.push(\r\n `${colors.red}Type checking error:${colors.reset} ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n clear(): void {\r\n this.virtualFiles.clear();\r\n this.program = null;\r\n }\r\n}\r\n\r\n/**\r\n * Vite plugin for Fynix framework with improved SFC support\r\n */\r\nexport default function fynixPlugin(options: FynixPluginOptions = {}): any {\r\n const {\r\n jsxFactory = \"Fynix\",\r\n jsxFragment = \"Fynix.Fragment\",\r\n include = [\".ts\", \".js\", \".jsx\", \".tsx\", \".fnx\"],\r\n exclude = [\"node_modules\"],\r\n sourcemap = true,\r\n esbuildOptions = {},\r\n enableSFC = true,\r\n showGeneratedCode = false,\r\n typeCheck = false,\r\n tsConfig,\r\n } = options;\r\n\r\n let typeChecker: TypeScriptChecker | null = null;\r\n\r\n if (typeCheck) {\r\n typeChecker = new TypeScriptChecker(tsConfig);\r\n }\r\n\r\n return {\r\n name: \"vite-plugin-fynix-sfc\",\r\n enforce: \"pre\" as const,\r\n\r\n async transform(code: string, id: string) {\r\n const normalizedId = normalizePath(id);\r\n\r\n const shouldExclude = exclude.some((pattern) =>\r\n normalizedId.includes(pattern)\r\n );\r\n if (shouldExclude) return null;\r\n\r\n const shouldInclude = include.some((ext) => normalizedId.endsWith(ext));\r\n if (!shouldInclude) return null;\r\n\r\n const ctx = this as unknown as TransformContext;\r\n if (typeof ctx.addWatchFile === \"function\") {\r\n ctx.addWatchFile(id);\r\n }\r\n\r\n try {\r\n let codeToTransform = code;\r\n let loader: TransformOptions[\"loader\"] = \"tsx\";\r\n let shouldTypeCheck = false;\r\n\r\n if (normalizedId.endsWith(\".fnx\") && enableSFC) {\r\n const parsed = parseSFC(code);\r\n validateSFC(parsed, normalizedId);\r\n\r\n codeToTransform = transformSFC(parsed, normalizedId, jsxFactory);\r\n\r\n if (showGeneratedCode) {\r\n console.log(`\\n${colors.cyan}${\"=\".repeat(80)}${colors.reset}`);\r\n console.log(\r\n `${colors.cyan}[Fynix SFC]${colors.reset} Generated code for: ${colors.gray}${normalizedId}${colors.reset}`\r\n );\r\n console.log(`${colors.cyan}${\"=\".repeat(80)}${colors.reset}`);\r\n console.log(codeToTransform);\r\n console.log(`${colors.cyan}${\"=\".repeat(80)}${colors.reset}\\n`);\r\n }\r\n\r\n shouldTypeCheck = typeCheck && parsed.logicLang === \"ts\";\r\n // Keep loader as \"tsx\" for all .fnx files (already set at initialization)\r\n // This ensures JSX expressions work correctly regardless of setup=\"js\" or setup=\"ts\"\r\n\r\n if (shouldTypeCheck && typeChecker) {\r\n const virtualFileName = normalizedId.replace(\r\n /\\.fnx$/,\r\n \".virtual.tsx\"\r\n );\r\n typeChecker.addFile(virtualFileName, codeToTransform);\r\n const typeErrors = typeChecker.checkFile(virtualFileName);\r\n\r\n if (typeErrors.length > 0) {\r\n console.error(\r\n `\\n${colors.red}${colors.bold}[Fynix SFC] TypeScript Errors${colors.reset} in ${colors.cyan}${normalizedId}${colors.reset}:`\r\n );\r\n typeErrors.forEach((error) => console.error(` ${error}`));\r\n console.error(\"\");\r\n\r\n if (process.env.NODE_ENV === \"production\") {\r\n throw new Error(`TypeScript errors in ${normalizedId}`);\r\n }\r\n }\r\n\r\n shouldTypeCheck = false;\r\n }\r\n } else {\r\n if (normalizedId.endsWith(\".ts\")) {\r\n loader = \"ts\";\r\n shouldTypeCheck = typeCheck;\r\n } else if (normalizedId.endsWith(\".tsx\")) {\r\n loader = \"tsx\";\r\n shouldTypeCheck = typeCheck;\r\n } else if (normalizedId.endsWith(\".jsx\")) {\r\n loader = \"jsx\";\r\n } else if (normalizedId.endsWith(\".js\")) {\r\n loader = \"js\";\r\n }\r\n }\r\n\r\n if (shouldTypeCheck && typeChecker) {\r\n typeChecker.addFile(normalizedId, codeToTransform);\r\n const typeErrors = typeChecker.checkFile(normalizedId);\r\n\r\n if (typeErrors.length > 0) {\r\n console.error(\r\n `\\n${colors.red}${colors.bold}[Fynix SFC] TypeScript Errors${colors.reset} in ${colors.cyan}${normalizedId}${colors.reset}:`\r\n );\r\n typeErrors.forEach((error) => console.error(` ${error}`));\r\n console.error(\"\");\r\n\r\n if (process.env.NODE_ENV === \"production\") {\r\n throw new Error(`TypeScript errors in ${normalizedId}`);\r\n }\r\n }\r\n }\r\n\r\n const result = await transform(codeToTransform, {\r\n loader,\r\n jsxFactory,\r\n jsxFragment,\r\n sourcemap,\r\n sourcefile: id,\r\n target: \"esnext\",\r\n format: \"esm\",\r\n ...esbuildOptions,\r\n });\r\n\r\n return {\r\n code: result.code,\r\n map: result.map || null,\r\n };\r\n } catch (error) {\r\n const err = error as Error;\r\n console.error(\r\n `\\n${colors.red}${colors.bold}[Fynix SFC] Transform Error${colors.reset} in ${colors.cyan}${id}${colors.reset}:`\r\n );\r\n console.error(` ${colors.red}${err.message}${colors.reset}\\n`);\r\n\r\n const ctx = this as unknown as TransformContext;\r\n if (typeof ctx.error === \"function\") {\r\n ctx.error({\r\n message: `Failed to transform ${id}: ${err.message}`,\r\n stack: err.stack,\r\n id,\r\n });\r\n } else {\r\n throw err;\r\n }\r\n return null;\r\n }\r\n },\r\n\r\n handleHotUpdate(ctx: HmrContext) {\r\n const { file, server } = ctx;\r\n const normalizedFile = normalizePath(file);\r\n const shouldReload = include.some((ext) => normalizedFile.endsWith(ext));\r\n\r\n if (shouldReload) {\r\n console.log(\r\n `${colors.green}[HMR]${colors.reset} ${colors.gray}${normalizedFile}${colors.reset}`\r\n );\r\n\r\n if (typeChecker) {\r\n typeChecker.clear();\r\n }\r\n\r\n server.ws.send({\r\n type: \"full-reload\",\r\n path: \"*\",\r\n });\r\n return [];\r\n }\r\n\r\n return undefined;\r\n },\r\n\r\n config() {\r\n const config: Omit<UserConfig, \"plugins\"> = {\r\n esbuild: {\r\n jsxFactory,\r\n jsxFragment,\r\n jsxInject: `import { ${jsxFactory} } from '@fynixorg/ui'`,\r\n },\r\n optimizeDeps: {\r\n include: [\"@fynixorg/ui\"],\r\n esbuildOptions: {\r\n jsx: \"transform\",\r\n jsxFactory,\r\n jsxFragment,\r\n },\r\n },\r\n resolve: {\r\n extensions: [\".fnx\", \".ts\", \".tsx\", \".js\", \".jsx\", \".json\"],\r\n },\r\n };\r\n\r\n return config;\r\n },\r\n\r\n buildStart() {\r\n console.log(\r\n `${colors.cyan}[vite-plugin-fynix-sfc]${colors.reset} Initialized`\r\n );\r\n if (enableSFC) {\r\n console.log(\r\n `${colors.cyan}[vite-plugin-fynix-sfc]${colors.reset} SFC support: ${colors.green}enabled${colors.reset}`\r\n );\r\n }\r\n if (typeCheck) {\r\n console.log(\r\n `${colors.cyan}[vite-plugin-fynix-sfc]${colors.reset} Type checking: ${colors.green}enabled${colors.reset}`\r\n );\r\n }\r\n },\r\n\r\n buildEnd() {\r\n if (typeChecker) {\r\n typeChecker.clear();\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { fynixPlugin, TypeScriptChecker };\r\nexport type { FynixPluginOptions, SFCParsedResult };\r\n"],
5
+ "mappings": "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",
6
+ "names": ["ctx"]
7
7
  }
@@ -0,0 +1,35 @@
1
+ interface RouteComponent {
2
+ (props: any): any;
3
+ props?: Record<string, any> | (() => Record<string, any>);
4
+ meta?: RouteMeta | ((params: Record<string, string>) => RouteMeta);
5
+ }
6
+ interface RouteMeta {
7
+ title?: string;
8
+ description?: string;
9
+ keywords?: string;
10
+ twitterCard?: string;
11
+ ogTitle?: string;
12
+ ogDescription?: string;
13
+ ogImage?: string;
14
+ }
15
+ interface DynamicRoute {
16
+ pattern: string;
17
+ regex: RegExp;
18
+ component: RouteComponent;
19
+ params: string[];
20
+ }
21
+ interface FynixRouter {
22
+ mountRouter(selector?: string): void;
23
+ navigate(path: string, props?: Record<string, any>): void;
24
+ replace(path: string, props?: Record<string, any>): void;
25
+ back(): void;
26
+ cleanup(): void;
27
+ routes: Record<string, RouteComponent>;
28
+ dynamicRoutes: DynamicRoute[];
29
+ }
30
+ declare function createFynix(): FynixRouter;
31
+ export { createFynix };
32
+ export default createFynix;
33
+ export declare function setLinkProps(key: string, props: Record<string, any>): void;
34
+ export declare function clearLinkProps(key: string): void;
35
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../router/router.ts"],"names":[],"mappings":"AAgCA,UAAU,cAAc;IACtB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;CACpE;AAED,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAaD,UAAU,WAAW;IACnB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAC1D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAkVD,iBAAS,WAAW,IAAI,WAAW,CAmdlC;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAe,WAAW,CAAC;AAM3B,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAqB1E;AAKD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAoBhD"}