@wrrdev/fenix-ui 1.0.4 → 1.0.6
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.
- package/README.md +57 -3
- package/dist/core/vue.d.ts +80 -0
- package/dist/core/vue.d.ts.map +1 -0
- package/dist/core/vue.js +5 -0
- package/dist/core/vue.js.map +1 -0
- package/dist/fenix-ui.esm.js +2 -4470
- package/dist/fenix-ui.esm.js.map +1 -1
- package/dist/fenix-ui2.esm.js +4469 -78
- package/dist/fenix-ui2.esm.js.map +1 -1
- package/dist/fenix-ui3.esm.js +82 -0
- package/dist/fenix-ui3.esm.js.map +1 -0
- package/package.json +27 -6
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const fenixComponentMap = {
|
|
2
|
+
"fx-button": "@wrrdev/fenix-ui/button",
|
|
3
|
+
"fx-badge": "@wrrdev/fenix-ui/badge",
|
|
4
|
+
"fx-spinner": "@wrrdev/fenix-ui/spinner",
|
|
5
|
+
"fx-select": "@wrrdev/fenix-ui/select",
|
|
6
|
+
"fx-multiselect": "@wrrdev/fenix-ui/multiselect",
|
|
7
|
+
"fx-input": "@wrrdev/fenix-ui/input",
|
|
8
|
+
"fx-switch": "@wrrdev/fenix-ui/switch",
|
|
9
|
+
"fx-calendar": "@wrrdev/fenix-ui/calendar",
|
|
10
|
+
"fx-datepicker": "@wrrdev/fenix-ui/datepicker",
|
|
11
|
+
"fx-checkbox": "@wrrdev/fenix-ui/checkbox",
|
|
12
|
+
"fx-radio": "@wrrdev/fenix-ui/radio",
|
|
13
|
+
"fx-table": "@wrrdev/fenix-ui/table",
|
|
14
|
+
"fx-floatlabel": "@wrrdev/fenix-ui/floatlabel",
|
|
15
|
+
"fx-textarea": "@wrrdev/fenix-ui/textarea",
|
|
16
|
+
"fx-dialog": "@wrrdev/fenix-ui/dialog",
|
|
17
|
+
"fx-drawer": "@wrrdev/fenix-ui/drawer",
|
|
18
|
+
"fx-toast": "@wrrdev/fenix-ui/toast",
|
|
19
|
+
"fx-tooltip": "@wrrdev/fenix-ui/tooltip",
|
|
20
|
+
"fx-tabs": "@wrrdev/fenix-ui/tabs",
|
|
21
|
+
"fx-tab-panel": "@wrrdev/fenix-ui/tabs",
|
|
22
|
+
"fx-progress": "@wrrdev/fenix-ui/progress",
|
|
23
|
+
"fx-skeleton": "@wrrdev/fenix-ui/skeleton",
|
|
24
|
+
"fx-alert": "@wrrdev/fenix-ui/alert",
|
|
25
|
+
"fx-dropdown": "@wrrdev/fenix-ui/dropdown",
|
|
26
|
+
"fx-dropdown-item": "@wrrdev/fenix-ui/dropdown",
|
|
27
|
+
"fx-pagination": "@wrrdev/fenix-ui/pagination",
|
|
28
|
+
"fx-autocomplete": "@wrrdev/fenix-ui/autocomplete"
|
|
29
|
+
};
|
|
30
|
+
const TAG_RE = /<(fx-[a-z][a-z-]*)(?=[\s/>])/g;
|
|
31
|
+
function transformSource(code, options = {}) {
|
|
32
|
+
const pkg = options.packageName ?? "@wrrdev/fenix-ui";
|
|
33
|
+
const resolve = (sub) => pkg === "@wrrdev/fenix-ui" ? sub : sub.replace("@wrrdev/fenix-ui", pkg);
|
|
34
|
+
const needed = /* @__PURE__ */ new Set();
|
|
35
|
+
for (const m of code.matchAll(TAG_RE)) {
|
|
36
|
+
const sub = fenixComponentMap[m[1]];
|
|
37
|
+
if (sub) {
|
|
38
|
+
const target = resolve(sub);
|
|
39
|
+
if (!code.includes(`'${target}'`) && !code.includes(`"${target}"`)) {
|
|
40
|
+
needed.add(target);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (!needed.size) return code;
|
|
45
|
+
const lines = [...needed].map((s) => `import '${s}';`);
|
|
46
|
+
const vueScript = /(<script[^>]*>)\n/.exec(code);
|
|
47
|
+
if (vueScript) {
|
|
48
|
+
return code.replace(vueScript[0], `${vueScript[1]}
|
|
49
|
+
${lines.join("\n")}
|
|
50
|
+
`);
|
|
51
|
+
}
|
|
52
|
+
let lastEnd = -1;
|
|
53
|
+
for (const m of code.matchAll(/^[ \t]*import\b[^;]*?['"][^'"]+['"];?[^\S\n]*$/gm)) {
|
|
54
|
+
lastEnd = Math.max(lastEnd, m.index + m[0].length);
|
|
55
|
+
}
|
|
56
|
+
if (lastEnd === -1) return `${lines.join("\n")}
|
|
57
|
+
${code}`;
|
|
58
|
+
return `${code.slice(0, lastEnd)}
|
|
59
|
+
${lines.join("\n")}${code.slice(lastEnd)}`;
|
|
60
|
+
}
|
|
61
|
+
function shouldTransform(id) {
|
|
62
|
+
return !id.includes("node_modules") && !id.endsWith(".d.ts") && !id.endsWith(".css") && /\.(ts|js|tsx|jsx|vue|html|svelte)$/.test(id);
|
|
63
|
+
}
|
|
64
|
+
function FenixAutoImport(options = {}) {
|
|
65
|
+
return {
|
|
66
|
+
name: "fenix-ui-auto-import",
|
|
67
|
+
enforce: "pre",
|
|
68
|
+
transform(code, id) {
|
|
69
|
+
if (!shouldTransform(id)) return void 0;
|
|
70
|
+
const result = transformSource(code, options);
|
|
71
|
+
if (result === code) return void 0;
|
|
72
|
+
return { code: result, map: null };
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export {
|
|
77
|
+
FenixAutoImport,
|
|
78
|
+
fenixComponentMap,
|
|
79
|
+
shouldTransform,
|
|
80
|
+
transformSource
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=fenix-ui3.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fenix-ui3.esm.js","sources":["../src/plugins/auto-import.ts","../src/plugins/index.ts"],"sourcesContent":["/**\r\n * Registro de tags → subpaths para o auto-import.\r\n * Mantido em um módulo próprio (sem depender de DOM) para ser usado\r\n * também no build do cliente via plugin.\r\n */\r\nexport const fenixComponentMap: Record<string, string> = {\r\n 'fx-button': '@wrrdev/fenix-ui/button',\r\n 'fx-badge': '@wrrdev/fenix-ui/badge',\r\n 'fx-spinner': '@wrrdev/fenix-ui/spinner',\r\n 'fx-select': '@wrrdev/fenix-ui/select',\r\n 'fx-multiselect': '@wrrdev/fenix-ui/multiselect',\r\n 'fx-input': '@wrrdev/fenix-ui/input',\r\n 'fx-switch': '@wrrdev/fenix-ui/switch',\r\n 'fx-calendar': '@wrrdev/fenix-ui/calendar',\r\n 'fx-datepicker': '@wrrdev/fenix-ui/datepicker',\r\n 'fx-checkbox': '@wrrdev/fenix-ui/checkbox',\r\n 'fx-radio': '@wrrdev/fenix-ui/radio',\r\n 'fx-table': '@wrrdev/fenix-ui/table',\r\n 'fx-floatlabel': '@wrrdev/fenix-ui/floatlabel',\r\n 'fx-textarea': '@wrrdev/fenix-ui/textarea',\r\n 'fx-dialog': '@wrrdev/fenix-ui/dialog',\r\n 'fx-drawer': '@wrrdev/fenix-ui/drawer',\r\n 'fx-toast': '@wrrdev/fenix-ui/toast',\r\n 'fx-tooltip': '@wrrdev/fenix-ui/tooltip',\r\n 'fx-tabs': '@wrrdev/fenix-ui/tabs',\r\n 'fx-tab-panel': '@wrrdev/fenix-ui/tabs',\r\n 'fx-progress': '@wrrdev/fenix-ui/progress',\r\n 'fx-skeleton': '@wrrdev/fenix-ui/skeleton',\r\n 'fx-alert': '@wrrdev/fenix-ui/alert',\r\n 'fx-dropdown': '@wrrdev/fenix-ui/dropdown',\r\n 'fx-dropdown-item': '@wrrdev/fenix-ui/dropdown',\r\n 'fx-pagination': '@wrrdev/fenix-ui/pagination',\r\n 'fx-autocomplete': '@wrrdev/fenix-ui/autocomplete',\r\n};\r\n\r\nconst TAG_RE = /<(fx-[a-z][a-z-]*)(?=[\\s/>])/g;\r\n\r\nexport interface AutoImportOptions {\r\n /** Prefixo do pacote (padrão '@wrrdev/fenix-ui'). */\r\n packageName?: string;\r\n}\r\n\r\n/**\r\n * Injeta `import '<subpath>'` para cada componente fx-* usado no código\r\n * que ainda não foi importado. Retorna o código transformado ou o original.\r\n */\r\nexport function transformSource(code: string, options: AutoImportOptions = {}): string {\r\n const pkg = options.packageName ?? '@wrrdev/fenix-ui';\r\n // Subpaths do mapa são reescritos quando um pacote custom é informado.\r\n const resolve = (sub: string): string =>\r\n pkg === '@wrrdev/fenix-ui' ? sub : sub.replace('@wrrdev/fenix-ui', pkg);\r\n\r\n // Componentes usados e ainda não importados explicitamente.\r\n const needed = new Set<string>();\r\n for (const m of code.matchAll(TAG_RE)) {\r\n const sub = fenixComponentMap[m[1]];\r\n if (sub) {\r\n const target = resolve(sub);\r\n if (!code.includes(`'${target}'`) && !code.includes(`\"${target}\"`)) {\r\n needed.add(target);\r\n }\r\n }\r\n }\r\n if (!needed.size) return code;\r\n\r\n const lines = [...needed].map((s) => `import '${s}';`);\r\n\r\n // Arquivo único (.vue): injeta logo após a abertura do <script>.\r\n const vueScript = /(<script[^>]*>)\\n/.exec(code);\r\n if (vueScript) {\r\n return code.replace(vueScript[0], `${vueScript[1]}\\n${lines.join('\\n')}\\n`);\r\n }\r\n\r\n // TS/JS: injeta após o último import existente (ou no topo).\r\n let lastEnd = -1;\r\n for (const m of code.matchAll(/^[ \\t]*import\\b[^;]*?['\"][^'\"]+['\"];?[^\\S\\n]*$/gm)) {\r\n lastEnd = Math.max(lastEnd, m.index + m[0].length);\r\n }\r\n if (lastEnd === -1) return `${lines.join('\\n')}\\n${code}`;\r\n return `${code.slice(0, lastEnd)}\\n${lines.join('\\n')}${code.slice(lastEnd)}`;\r\n}\r\n\r\n/** Verifica se o arquivo deve ser transformado. */\r\nexport function shouldTransform(id: string): boolean {\r\n return (\r\n !id.includes('node_modules') &&\r\n !id.endsWith('.d.ts') &&\r\n !id.endsWith('.css') &&\r\n /\\.(ts|js|tsx|jsx|vue|html|svelte)$/.test(id)\r\n );\r\n}\r\n\r\n","/**\n * Plugin de AUTO-IMPORT para Vite/Rollup.\n *\n * O usuário escreve apenas `<fx-button>`, `<fx-select>` etc. no template/código;\n * este plugin detecta as tags em tempo de build e injeta os imports dos\n * subpaths correspondentes — mantendo o tree-shaking (só entra no bundle\n * o que é usado).\n *\n * Uso no projeto do cliente (vite.config.ts):\n * import { FenixAutoImport } from '@wrrdev/fenix-ui/auto-import';\n * export default { plugins: [FenixAutoImport()] };\n */\nimport {\n transformSource,\n shouldTransform,\n type AutoImportOptions,\n} from './auto-import';\n\nexport interface FenixPlugin {\n name: string;\n enforce: 'pre';\n transform: (\n code: string,\n id: string,\n ) => { code: string; map: null } | undefined;\n}\n\nexport function FenixAutoImport(options: AutoImportOptions = {}): FenixPlugin {\n return {\n name: 'fenix-ui-auto-import',\n enforce: 'pre',\n transform(code, id) {\n if (!shouldTransform(id)) return undefined;\n const result = transformSource(code, options);\n if (result === code) return undefined;\n return { code: result, map: null };\n },\n };\n}\n\nexport { transformSource, shouldTransform, fenixComponentMap } from './auto-import';\nexport type { AutoImportOptions } from './auto-import';\n"],"names":[],"mappings":"AAKO,MAAM,oBAA4C;AAAA,EACvD,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,oBAAoB;AAAA,EAClB,iBAAiB;AAAA,EACnB,mBAAmB;AACrB;AAEA,MAAM,SAAS;AAWR,SAAS,gBAAgB,MAAc,UAA6B,IAAY;AACrF,QAAM,MAAM,QAAQ,eAAe;AAEnC,QAAM,UAAU,CAAC,QACf,QAAQ,qBAAqB,MAAM,IAAI,QAAQ,oBAAoB,GAAG;AAGxE,QAAM,6BAAa,IAAA;AACnB,aAAW,KAAK,KAAK,SAAS,MAAM,GAAG;AACrC,UAAM,MAAM,kBAAkB,EAAE,CAAC,CAAC;AAClC,QAAI,KAAK;AACP,YAAM,SAAS,QAAQ,GAAG;AAC1B,UAAI,CAAC,KAAK,SAAS,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG;AAClE,eAAO,IAAI,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,OAAO,KAAM,QAAO;AAEzB,QAAM,QAAQ,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI;AAGrD,QAAM,YAAY,oBAAoB,KAAK,IAAI;AAC/C,MAAI,WAAW;AACb,WAAO,KAAK,QAAQ,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;AAAA,EAAK,MAAM,KAAK,IAAI,CAAC;AAAA,CAAI;AAAA,EAC5E;AAGA,MAAI,UAAU;AACd,aAAW,KAAK,KAAK,SAAS,kDAAkD,GAAG;AACjF,cAAU,KAAK,IAAI,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM;AAAA,EACnD;AACA,MAAI,YAAY,GAAI,QAAO,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA,EAAK,IAAI;AACvD,SAAO,GAAG,KAAK,MAAM,GAAG,OAAO,CAAC;AAAA,EAAK,MAAM,KAAK,IAAI,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC;AAC7E;AAGO,SAAS,gBAAgB,IAAqB;AACnD,SACE,CAAC,GAAG,SAAS,cAAc,KAC3B,CAAC,GAAG,SAAS,OAAO,KACpB,CAAC,GAAG,SAAS,MAAM,KACnB,qCAAqC,KAAK,EAAE;AAEhD;AC/DO,SAAS,gBAAgB,UAA6B,IAAiB;AAC5E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,MAAM,IAAI;AAClB,UAAI,CAAC,gBAAgB,EAAE,EAAG,QAAO;AACjC,YAAM,SAAS,gBAAgB,MAAM,OAAO;AAC5C,UAAI,WAAW,KAAM,QAAO;AAC5B,aAAO,EAAE,MAAM,QAAQ,KAAK,KAAA;AAAA,IAC9B;AAAA,EAAA;AAEJ;"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrrdev/fenix-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "FenixUI Design System Web nativo (Web Components + Shadow DOM + Design Tokens) com tree-shaking por componente.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "ISC",
|
|
7
|
-
"
|
|
8
|
-
|
|
7
|
+
"homepage": "https://wesley-reis.github.io/FenixUI/",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/wesley-reis/FenixUI.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/wesley-reis/FenixUI/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"UI",
|
|
17
|
+
"UX",
|
|
18
|
+
"Componentes",
|
|
19
|
+
"Fenix",
|
|
20
|
+
"FenixUI"
|
|
21
|
+
],
|
|
22
|
+
"files": [
|
|
9
23
|
"dist",
|
|
10
24
|
"README.md"
|
|
11
25
|
],
|
|
12
|
-
|
|
26
|
+
"publishConfig": {
|
|
13
27
|
"access": "public",
|
|
14
28
|
"tag": "latest"
|
|
15
29
|
},
|
|
16
|
-
|
|
17
30
|
"main": "./dist/index.js",
|
|
18
31
|
"module": "./dist/index.js",
|
|
19
32
|
"types": "./dist/index.d.ts",
|
|
@@ -143,6 +156,10 @@
|
|
|
143
156
|
"types": "./dist/core/jsx.d.ts",
|
|
144
157
|
"import": "./dist/core/jsx.js"
|
|
145
158
|
},
|
|
159
|
+
"./vue": {
|
|
160
|
+
"types": "./dist/core/vue.d.ts",
|
|
161
|
+
"import": "./dist/core/vue.js"
|
|
162
|
+
},
|
|
146
163
|
"./components/*": {
|
|
147
164
|
"types": "./dist/components/*/index.d.ts",
|
|
148
165
|
"import": "./dist/components/*/index.js"
|
|
@@ -155,6 +172,7 @@
|
|
|
155
172
|
"build:esm": "vite build --config vite.config.ts",
|
|
156
173
|
"build:types": "tsc -p tsconfig.build.json",
|
|
157
174
|
"build:cdn": "vite build --config vite.cdn.config.ts",
|
|
175
|
+
"build:docs": "vite build --config vite.docs.config.ts && node -e \"require('fs').writeFileSync('docs-dist/.nojekyll', '')\"",
|
|
158
176
|
"preview": "vite preview",
|
|
159
177
|
"typecheck": "tsc --noEmit",
|
|
160
178
|
"test": "vitest run",
|
|
@@ -163,11 +181,14 @@
|
|
|
163
181
|
"publish": "npm publish --access public --tag latest"
|
|
164
182
|
},
|
|
165
183
|
"devDependencies": {
|
|
184
|
+
"@babel/types": "^8.0.4",
|
|
166
185
|
"@types/node": "^22.7.4",
|
|
167
186
|
"jsdom": "^25.0.1",
|
|
168
187
|
"typescript": "^5.6.2",
|
|
169
188
|
"vite": "^5.4.8",
|
|
170
|
-
"vitest": "^2.1.2"
|
|
189
|
+
"vitest": "^2.1.2",
|
|
190
|
+
"vue": "^3.5.13",
|
|
191
|
+
"vue-tsc": "^3.0.4"
|
|
171
192
|
},
|
|
172
193
|
"dependencies": {
|
|
173
194
|
"postcss": "^8.5.26"
|