@wrrdev/fenix-ui 1.1.6 → 1.1.8
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 +23 -3
- package/dist/assets/{base-css-Be_r8aTo.js → font-CF0TXsAP.js} +39 -3
- package/dist/assets/font-CF0TXsAP.js.map +1 -0
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/autocomplete/autocomplete.js +9 -6
- package/dist/components/autocomplete/autocomplete.js.map +1 -1
- package/dist/components/button/button.d.ts.map +1 -1
- package/dist/components/button/button.js +5 -3
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/datepicker/datepicker.d.ts.map +1 -1
- package/dist/components/datepicker/datepicker.js +11 -6
- package/dist/components/datepicker/datepicker.js.map +1 -1
- package/dist/components/fileupload/fileupload.d.ts +1 -1
- package/dist/components/fileupload/fileupload.d.ts.map +1 -1
- package/dist/components/fileupload/fileupload.js +5 -3
- package/dist/components/fileupload/fileupload.js.map +1 -1
- package/dist/components/icon/icon.d.ts +40 -0
- package/dist/components/icon/icon.d.ts.map +1 -0
- package/dist/components/icon/icon.js +79 -0
- package/dist/components/icon/icon.js.map +1 -0
- package/dist/components/icon/index.d.ts +8 -0
- package/dist/components/icon/index.d.ts.map +1 -0
- package/dist/components/icon/index.js +7 -0
- package/dist/components/icon/index.js.map +1 -0
- package/dist/components/input/input.d.ts.map +1 -1
- package/dist/components/input/input.js +12 -6
- package/dist/components/input/input.js.map +1 -1
- package/dist/components/knob/knob.d.ts +1 -1
- package/dist/components/knob/knob.d.ts.map +1 -1
- package/dist/components/knob/knob.js +3 -1
- package/dist/components/knob/knob.js.map +1 -1
- package/dist/components/multiselect/multiselect.d.ts.map +1 -1
- package/dist/components/multiselect/multiselect.js +8 -3
- package/dist/components/multiselect/multiselect.js.map +1 -1
- package/dist/components/orderlist/orderlist.js +2 -2
- package/dist/components/orderlist/orderlist.js.map +1 -1
- package/dist/components/picklist/picklist.js +2 -2
- package/dist/components/picklist/picklist.js.map +1 -1
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/select/select.js +9 -3
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/textarea/textarea.d.ts.map +1 -1
- package/dist/components/textarea/textarea.js +7 -3
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/toggle-button-group/toggle-button-group.d.ts.map +1 -1
- package/dist/components/toggle-button-group/toggle-button-group.js +3 -1
- package/dist/components/toggle-button-group/toggle-button-group.js.map +1 -1
- package/dist/core/jsx.d.ts +22 -0
- package/dist/core/jsx.d.ts.map +1 -1
- package/dist/core/jsx.js.map +1 -1
- package/dist/core/theme.d.ts.map +1 -1
- package/dist/core/theme.js +12 -0
- package/dist/core/theme.js.map +1 -1
- package/dist/core/tokens.d.ts +4 -0
- package/dist/core/tokens.d.ts.map +1 -1
- package/dist/core/tokens.js +9 -1
- package/dist/core/tokens.js.map +1 -1
- package/dist/core/vue.d.ts +3 -1
- package/dist/core/vue.d.ts.map +1 -1
- package/dist/core/vue.js.map +1 -1
- package/dist/docs/app.d.ts.map +1 -1
- package/dist/docs/componentes/icon.doc.d.ts +9 -0
- package/dist/docs/componentes/icon.doc.d.ts.map +1 -0
- package/dist/docs/componentes/index.d.ts.map +1 -1
- package/dist/fenix-ui.umd.min.js +195 -138
- package/dist/fenix-ui2.esm.js.map +1 -1
- package/dist/fenix-ui3.esm.js +10 -14
- package/dist/fenix-ui3.esm.js.map +1 -1
- package/dist/fenix-ui4.esm.js +187 -60
- package/dist/fenix-ui4.esm.js.map +1 -1
- package/dist/fenix-ui5.esm.js +41 -15
- package/dist/fenix-ui5.esm.js.map +1 -1
- package/dist/icons/font.d.ts +26 -0
- package/dist/icons/font.d.ts.map +1 -0
- package/dist/icons/font.js +42 -0
- package/dist/icons/font.js.map +1 -0
- package/dist/icons/index.d.ts +3 -1
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/index.js +11 -13
- package/dist/icons/index.js.map +1 -1
- package/dist/icons/name-union.d.ts +11 -0
- package/dist/icons/name-union.d.ts.map +1 -0
- package/dist/icons/names.d.ts +0 -1
- package/dist/icons/names.d.ts.map +1 -1
- package/dist/icons/names.js.map +1 -1
- package/dist/icons/types.d.ts +14 -0
- package/dist/icons/types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/plugins/auto-import.d.ts +19 -2
- package/dist/plugins/auto-import.d.ts.map +1 -1
- package/dist/plugins/auto-import.js +40 -14
- package/dist/plugins/auto-import.js.map +1 -1
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/index.js.map +1 -1
- package/package.json +5 -1
- package/dist/assets/base-css-Be_r8aTo.js.map +0 -1
package/dist/fenix-ui5.esm.js
CHANGED
|
@@ -19,6 +19,7 @@ const fenixComponentMap = {
|
|
|
19
19
|
"fx-slider": "@wrrdev/fenix-ui/slider",
|
|
20
20
|
"fx-chip": "@wrrdev/fenix-ui/chip",
|
|
21
21
|
"fx-avatar": "@wrrdev/fenix-ui/avatar",
|
|
22
|
+
"fx-icon": "@wrrdev/fenix-ui/icon",
|
|
22
23
|
"fx-card": "@wrrdev/fenix-ui/card",
|
|
23
24
|
"fx-breadcrumb": "@wrrdev/fenix-ui/breadcrumb",
|
|
24
25
|
"fx-popover": "@wrrdev/fenix-ui/popover",
|
|
@@ -51,31 +52,56 @@ const fenixComponentMap = {
|
|
|
51
52
|
"fx-column": "@wrrdev/fenix-ui/table"
|
|
52
53
|
};
|
|
53
54
|
const TAG_RE = /<(fx-[a-z][a-z-]*)(?=[\s/>])/g;
|
|
54
|
-
const FENIX_ICON_CLASS_RE =
|
|
55
|
-
|
|
55
|
+
const FENIX_ICON_CLASS_RE = /(?:^|[^</\w-])fx-icon(?:-[a-z0-9_]+)*\b/;
|
|
56
|
+
const INLINE_SCRIPT_RE = /<script\b(?![^>]*\bsrc=)[^>]*>/i;
|
|
57
|
+
function isMarkup(id, code) {
|
|
58
|
+
return /\.(vue|svelte|html?)$/i.test(id) || /^\s*<(?:template|script|style|!doctype|html)\b/i.test(code);
|
|
59
|
+
}
|
|
60
|
+
function eolOf(code) {
|
|
61
|
+
return code.includes("\r\n") ? "\r\n" : "\n";
|
|
62
|
+
}
|
|
63
|
+
function injectIntoScriptBlock(code, lines) {
|
|
64
|
+
const open = INLINE_SCRIPT_RE.exec(code);
|
|
65
|
+
if (!open) return null;
|
|
66
|
+
const at = open.index + open[0].length;
|
|
67
|
+
const br = eolOf(code);
|
|
68
|
+
return `${code.slice(0, at)}${br}${lines.join(br)}${code.slice(at)}`;
|
|
69
|
+
}
|
|
70
|
+
function createScriptBlock(code, lines, html) {
|
|
71
|
+
const br = eolOf(code);
|
|
72
|
+
const body = `${br}${lines.join(br)}${br}`;
|
|
73
|
+
if (!html) return `<script>${body}<\/script>${br}${code}`;
|
|
74
|
+
const block = `<script type="module">${body}<\/script>${br}`;
|
|
75
|
+
const bodyAt = code.search(/<\/body\s*>/i);
|
|
76
|
+
if (bodyAt >= 0) return `${code.slice(0, bodyAt)}${block}${code.slice(bodyAt)}`;
|
|
77
|
+
return `${block}${code}`;
|
|
78
|
+
}
|
|
79
|
+
function transformSource(code, options = {}, id = "") {
|
|
56
80
|
const pkg = options.packageName ?? "@wrrdev/fenix-ui";
|
|
57
81
|
const resolve = (sub) => pkg === "@wrrdev/fenix-ui" ? sub : sub.replace("@wrrdev/fenix-ui", pkg);
|
|
82
|
+
const hasImport = (target) => code.includes(`'${target}'`) || code.includes(`"${target}"`);
|
|
58
83
|
const needed = /* @__PURE__ */ new Set();
|
|
59
84
|
for (const m of code.matchAll(TAG_RE)) {
|
|
60
85
|
const sub = fenixComponentMap[m[1]];
|
|
61
|
-
if (sub)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
needed.add(target);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
86
|
+
if (!sub) continue;
|
|
87
|
+
const target = resolve(sub);
|
|
88
|
+
if (!hasImport(target)) needed.add(target);
|
|
67
89
|
}
|
|
68
90
|
const iconsSub = resolve("@wrrdev/fenix-ui/icons");
|
|
69
|
-
if (FENIX_ICON_CLASS_RE.test(code) && !
|
|
91
|
+
if (FENIX_ICON_CLASS_RE.test(code) && !hasImport(iconsSub)) {
|
|
70
92
|
needed.add(iconsSub);
|
|
71
93
|
}
|
|
94
|
+
const markup = isMarkup(id, code);
|
|
95
|
+
const vueSub = resolve("@wrrdev/fenix-ui/vue");
|
|
96
|
+
if (options.vueTypes !== false && /\.vue$/i.test(id) && needed.size > 0 && !hasImport(vueSub)) {
|
|
97
|
+
needed.add(vueSub);
|
|
98
|
+
}
|
|
72
99
|
if (!needed.size) return code;
|
|
73
100
|
const lines = [...needed].map((s) => `import '${s}';`);
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
`);
|
|
101
|
+
if (markup) {
|
|
102
|
+
const injected = injectIntoScriptBlock(code, lines);
|
|
103
|
+
if (injected) return injected;
|
|
104
|
+
return createScriptBlock(code, lines, /\.html?$/i.test(id));
|
|
79
105
|
}
|
|
80
106
|
let lastEnd = -1;
|
|
81
107
|
for (const m of code.matchAll(/^[ \t]*import\b[^;]*?['"][^'"]+['"];?[^\S\n]*$/gm)) {
|
|
@@ -95,7 +121,7 @@ function FenixAutoImport(options = {}) {
|
|
|
95
121
|
enforce: "pre",
|
|
96
122
|
transform(code, id) {
|
|
97
123
|
if (!shouldTransform(id)) return void 0;
|
|
98
|
-
const result = transformSource(code, options);
|
|
124
|
+
const result = transformSource(code, options, id);
|
|
99
125
|
if (result === code) return void 0;
|
|
100
126
|
return { code: result, map: null };
|
|
101
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fenix-ui5.esm.js","sources":["../src/plugins/auto-import.ts","../src/plugins/index.ts"],"sourcesContent":["/**\n * Registro de tags → subpaths para o auto-import.\n * Mantido em um módulo próprio (sem depender de DOM) para ser usado\n * também no build do cliente via plugin.\n */\nexport const fenixComponentMap: Record<string, string> = {\n 'fx-button': '@wrrdev/fenix-ui/button',\n 'fx-badge': '@wrrdev/fenix-ui/badge',\n 'fx-spinner': '@wrrdev/fenix-ui/spinner',\n 'fx-select': '@wrrdev/fenix-ui/select',\n 'fx-multiselect': '@wrrdev/fenix-ui/multiselect',\n 'fx-input': '@wrrdev/fenix-ui/input',\n 'fx-switch': '@wrrdev/fenix-ui/switch',\n 'fx-calendar': '@wrrdev/fenix-ui/calendar',\n 'fx-datepicker': '@wrrdev/fenix-ui/datepicker',\n 'fx-checkbox': '@wrrdev/fenix-ui/checkbox',\n 'fx-radio': '@wrrdev/fenix-ui/radio',\n 'fx-table': '@wrrdev/fenix-ui/table',\n 'fx-floatlabel': '@wrrdev/fenix-ui/floatlabel',\n 'fx-textarea': '@wrrdev/fenix-ui/textarea',\n 'fx-dialog': '@wrrdev/fenix-ui/dialog',\n 'fx-confirmpopup': '@wrrdev/fenix-ui/confirmpopup',\n 'fx-fileupload': '@wrrdev/fenix-ui/fileupload',\n 'fx-slider': '@wrrdev/fenix-ui/slider',\n 'fx-chip': '@wrrdev/fenix-ui/chip',\n 'fx-avatar': '@wrrdev/fenix-ui/avatar',\n 'fx-card': '@wrrdev/fenix-ui/card',\n 'fx-breadcrumb': '@wrrdev/fenix-ui/breadcrumb',\n 'fx-popover': '@wrrdev/fenix-ui/popover',\n 'fx-stepper': '@wrrdev/fenix-ui/stepper',\n 'fx-rating': '@wrrdev/fenix-ui/rating',\n 'fx-menu': '@wrrdev/fenix-ui/menu',\n 'fx-toggle-button-group': '@wrrdev/fenix-ui/toggle-button-group',\n 'fx-empty-state': '@wrrdev/fenix-ui/empty-state',\n 'fx-password-strength': '@wrrdev/fenix-ui/password-strength',\n 'fx-timeline': '@wrrdev/fenix-ui/timeline',\n 'fx-carousel': '@wrrdev/fenix-ui/carousel',\n 'fx-tree': '@wrrdev/fenix-ui/tree',\n 'fx-drawer': '@wrrdev/fenix-ui/drawer',\n 'fx-toast': '@wrrdev/fenix-ui/toast',\n 'fx-tooltip': '@wrrdev/fenix-ui/tooltip',\n 'fx-tabs': '@wrrdev/fenix-ui/tabs',\n 'fx-tab-panel': '@wrrdev/fenix-ui/tabs',\n 'fx-progress': '@wrrdev/fenix-ui/progress',\n 'fx-skeleton': '@wrrdev/fenix-ui/skeleton',\n 'fx-alert': '@wrrdev/fenix-ui/alert',\n 'fx-dropdown': '@wrrdev/fenix-ui/dropdown',\n 'fx-dropdown-item': '@wrrdev/fenix-ui/dropdown',\n 'fx-pagination': '@wrrdev/fenix-ui/pagination',\n 'fx-autocomplete': '@wrrdev/fenix-ui/autocomplete',\n 'fx-knob': '@wrrdev/fenix-ui/knob',\n 'fx-accordion': '@wrrdev/fenix-ui/accordion',\n 'fx-accordion-panel': '@wrrdev/fenix-ui/accordion',\n 'fx-orderlist': '@wrrdev/fenix-ui/orderlist',\n 'fx-picklist': '@wrrdev/fenix-ui/picklist',\n 'fx-column': '@wrrdev/fenix-ui/table',\n};\n\nconst TAG_RE = /<(fx-[a-z][a-z-]*)(?=[\\s/>])/g;\n\n/** Detecta uso da biblioteca de ícones por classe (fx-icon / fx-icon-home etc.). */\nexport const FENIX_ICON_CLASS_RE = /\\bfx-icon(?:-[a-z0-9_]+)*\\b/;\n\nexport interface AutoImportOptions {\n /** Prefixo do pacote (padrão '@wrrdev/fenix-ui'). */\n packageName?: string;\n}\n\n/**\n * Injeta `import '<subpath>'` para cada componente fx-* usado no código\n * que ainda não foi importado. Retorna o código transformado ou o original.\n */\nexport function transformSource(code: string, options: AutoImportOptions = {}): string {\n const pkg = options.packageName ?? '@wrrdev/fenix-ui';\n // Subpaths do mapa são reescritos quando um pacote custom é informado.\n const resolve = (sub: string): string =>\n pkg === '@wrrdev/fenix-ui' ? sub : sub.replace('@wrrdev/fenix-ui', pkg);\n\n // Componentes usados e ainda não importados explicitamente.\n const needed = new Set<string>();\n for (const m of code.matchAll(TAG_RE)) {\n const sub = fenixComponentMap[m[1]];\n if (sub) {\n const target = resolve(sub);\n if (!code.includes(`'${target}'`) && !code.includes(`\"${target}\"`)) {\n needed.add(target);\n }\n }\n }\n // Biblioteca de ícones: classes fx-icon / fx-icon-<nome> injetam o subpath /icons.\n const iconsSub = resolve('@wrrdev/fenix-ui/icons');\n if (FENIX_ICON_CLASS_RE.test(code) && !code.includes(`'${iconsSub}'`) && !code.includes(`\"${iconsSub}\"`)) {\n needed.add(iconsSub);\n }\n if (!needed.size) return code;\n\n const lines = [...needed].map((s) => `import '${s}';`);\n\n // Arquivo único (.vue): injeta logo após a abertura do <script>.\n const vueScript = /(<script[^>]*>)\\n/.exec(code);\n if (vueScript) {\n return code.replace(vueScript[0], `${vueScript[1]}\\n${lines.join('\\n')}\\n`);\n }\n\n // TS/JS: injeta após o último import existente (ou no topo).\n let lastEnd = -1;\n for (const m of code.matchAll(/^[ \\t]*import\\b[^;]*?['\"][^'\"]+['\"];?[^\\S\\n]*$/gm)) {\n lastEnd = Math.max(lastEnd, m.index + m[0].length);\n }\n if (lastEnd === -1) return `${lines.join('\\n')}\\n${code}`;\n return `${code.slice(0, lastEnd)}\\n${lines.join('\\n')}${code.slice(lastEnd)}`;\n}\n\n/** Verifica se o arquivo deve ser transformado. */\nexport function shouldTransform(id: string): boolean {\n return (\n !id.includes('node_modules') &&\n !id.endsWith('.d.ts') &&\n !id.endsWith('.css') &&\n /\\.(ts|js|tsx|jsx|vue|html|svelte)$/.test(id)\n );\n}\n\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":"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"}
|
|
1
|
+
{"version":3,"file":"fenix-ui5.esm.js","sources":["../src/plugins/auto-import.ts","../src/plugins/index.ts"],"sourcesContent":["/**\n * Registro de tags → subpaths para o auto-import.\n * Mantido em um módulo próprio (sem depender de DOM) para ser usado\n * também no build do cliente via plugin.\n */\nexport const fenixComponentMap: Record<string, string> = {\n 'fx-button': '@wrrdev/fenix-ui/button',\n 'fx-badge': '@wrrdev/fenix-ui/badge',\n 'fx-spinner': '@wrrdev/fenix-ui/spinner',\n 'fx-select': '@wrrdev/fenix-ui/select',\n 'fx-multiselect': '@wrrdev/fenix-ui/multiselect',\n 'fx-input': '@wrrdev/fenix-ui/input',\n 'fx-switch': '@wrrdev/fenix-ui/switch',\n 'fx-calendar': '@wrrdev/fenix-ui/calendar',\n 'fx-datepicker': '@wrrdev/fenix-ui/datepicker',\n 'fx-checkbox': '@wrrdev/fenix-ui/checkbox',\n 'fx-radio': '@wrrdev/fenix-ui/radio',\n 'fx-table': '@wrrdev/fenix-ui/table',\n 'fx-floatlabel': '@wrrdev/fenix-ui/floatlabel',\n 'fx-textarea': '@wrrdev/fenix-ui/textarea',\n 'fx-dialog': '@wrrdev/fenix-ui/dialog',\n 'fx-confirmpopup': '@wrrdev/fenix-ui/confirmpopup',\n 'fx-fileupload': '@wrrdev/fenix-ui/fileupload',\n 'fx-slider': '@wrrdev/fenix-ui/slider',\n 'fx-chip': '@wrrdev/fenix-ui/chip',\n 'fx-avatar': '@wrrdev/fenix-ui/avatar',\n 'fx-icon': '@wrrdev/fenix-ui/icon',\n 'fx-card': '@wrrdev/fenix-ui/card',\n 'fx-breadcrumb': '@wrrdev/fenix-ui/breadcrumb',\n 'fx-popover': '@wrrdev/fenix-ui/popover',\n 'fx-stepper': '@wrrdev/fenix-ui/stepper',\n 'fx-rating': '@wrrdev/fenix-ui/rating',\n 'fx-menu': '@wrrdev/fenix-ui/menu',\n 'fx-toggle-button-group': '@wrrdev/fenix-ui/toggle-button-group',\n 'fx-empty-state': '@wrrdev/fenix-ui/empty-state',\n 'fx-password-strength': '@wrrdev/fenix-ui/password-strength',\n 'fx-timeline': '@wrrdev/fenix-ui/timeline',\n 'fx-carousel': '@wrrdev/fenix-ui/carousel',\n 'fx-tree': '@wrrdev/fenix-ui/tree',\n 'fx-drawer': '@wrrdev/fenix-ui/drawer',\n 'fx-toast': '@wrrdev/fenix-ui/toast',\n 'fx-tooltip': '@wrrdev/fenix-ui/tooltip',\n 'fx-tabs': '@wrrdev/fenix-ui/tabs',\n 'fx-tab-panel': '@wrrdev/fenix-ui/tabs',\n 'fx-progress': '@wrrdev/fenix-ui/progress',\n 'fx-skeleton': '@wrrdev/fenix-ui/skeleton',\n 'fx-alert': '@wrrdev/fenix-ui/alert',\n 'fx-dropdown': '@wrrdev/fenix-ui/dropdown',\n 'fx-dropdown-item': '@wrrdev/fenix-ui/dropdown',\n 'fx-pagination': '@wrrdev/fenix-ui/pagination',\n 'fx-autocomplete': '@wrrdev/fenix-ui/autocomplete',\n 'fx-knob': '@wrrdev/fenix-ui/knob',\n 'fx-accordion': '@wrrdev/fenix-ui/accordion',\n 'fx-accordion-panel': '@wrrdev/fenix-ui/accordion',\n 'fx-orderlist': '@wrrdev/fenix-ui/orderlist',\n 'fx-picklist': '@wrrdev/fenix-ui/picklist',\n 'fx-column': '@wrrdev/fenix-ui/table',\n};\n\nconst TAG_RE = /<(fx-[a-z][a-z-]*)(?=[\\s/>])/g;\n\n/**\n * Detecta o uso da biblioteca de ícones por CLASSE (`class=\"fx-icon fx-icon-home\"`).\n *\n * O prefixo `(?:^|[^</\\w-])` ignora a TAG `<fx-icon…>` / `</fx-icon>`: o\n * componente carrega o @font-face leve por conta própria e não precisa das\n * ~4.300 regras `.fx-icon-<nome>` que o subpath `/icons` injeta. Também ignora\n * nomes compostos (`meu-fx-icon`), `fx-icons`, `fx-iconHome` etc.\n */\nexport const FENIX_ICON_CLASS_RE = /(?:^|[^</\\w-])fx-icon(?:-[a-z0-9_]+)*\\b/;\n\nexport interface AutoImportOptions {\n /** Prefixo do pacote (padrão '@wrrdev/fenix-ui'). */\n packageName?: string;\n /**\n * Em arquivos `.vue`, injeta também `import '@wrrdev/fenix-ui/vue'` junto com\n * o primeiro componente detectado. É a augmentação que habilita o\n * autocomplete/validação dos atributos `fx-*` no Volar/vue-tsc — sem passo\n * manual no `main.ts`. Padrão: `true`.\n */\n vueTypes?: boolean;\n}\n\n/* ------------------------------------------------------------------ */\n/* Injeção em arquivos com markup (SFC Vue/Svelte e HTML) */\n/* ------------------------------------------------------------------ */\n\n/** Bloco `<script>` INLINE (sem `src=`) — é dentro dele que o import entra. */\nconst INLINE_SCRIPT_RE = /<script\\b(?![^>]*\\bsrc=)[^>]*>/i;\n\n/** Arquivo com markup (SFC Vue/Svelte ou HTML) — detectado pelo id ou conteúdo. */\nfunction isMarkup(id: string, code: string): boolean {\n return (\n /\\.(vue|svelte|html?)$/i.test(id) ||\n /^\\s*<(?:template|script|style|!doctype|html)\\b/i.test(code)\n );\n}\n\n/** Quebra de linha do arquivo — preserva o CRLF de projetos Windows. */\nfunction eolOf(code: string): string {\n return code.includes('\\r\\n') ? '\\r\\n' : '\\n';\n}\n\n/**\n * Injeta os imports como primeira linha do bloco `<script>`.\n *\n * Tolerante a CRLF e a conteúdo na mesma linha da tag (`<script setup>const a=1`)\n * — a versão antiga exigia `>\\n` e, no Windows, colava os imports FORA do\n * `<script>`, onde o compilador de SFC os descarta (componente nunca registrado).\n */\nfunction injectIntoScriptBlock(code: string, lines: string[]): string | null {\n const open = INLINE_SCRIPT_RE.exec(code);\n if (!open) return null;\n const at = open.index + open[0].length;\n const br = eolOf(code);\n return `${code.slice(0, at)}${br}${lines.join(br)}${code.slice(at)}`;\n}\n\n/**\n * Cria o bloco `<script>` quando o arquivo não tem nenhum.\n *\n * Um `import` fora de `<script>` é descartado pelo compilador de SFC — este é o\n * único fallback válido para um `.vue`/`.svelte` que só tem `<template>`.\n */\nfunction createScriptBlock(code: string, lines: string[], html: boolean): string {\n const br = eolOf(code);\n const body = `${br}${lines.join(br)}${br}`;\n if (!html) return `<script>${body}</script>${br}${code}`;\n // HTML: `<script type=\"module\">` inline (o Vite transforma) antes do </body>.\n const block = `<script type=\"module\">${body}</script>${br}`;\n const bodyAt = code.search(/<\\/body\\s*>/i);\n if (bodyAt >= 0) return `${code.slice(0, bodyAt)}${block}${code.slice(bodyAt)}`;\n return `${block}${code}`;\n}\n\n/**\n * Injeta `import '<subpath>'` para cada componente fx-* usado no código\n * que ainda não foi importado. Retorna o código transformado ou o original.\n *\n * `id` (caminho do módulo, opcional) habilita os tratamentos de arquivo com\n * markup: injeção dentro do `<script>` e augmentação de tipos do Vue (SFC).\n */\nexport function transformSource(\n code: string,\n options: AutoImportOptions = {},\n id = '',\n): string {\n const pkg = options.packageName ?? '@wrrdev/fenix-ui';\n // Subpaths do mapa são reescritos quando um pacote custom é informado.\n const resolve = (sub: string): string =>\n pkg === '@wrrdev/fenix-ui' ? sub : sub.replace('@wrrdev/fenix-ui', pkg);\n const hasImport = (target: string): boolean =>\n code.includes(`'${target}'`) || code.includes(`\"${target}\"`);\n\n // Componentes usados e ainda não importados explicitamente.\n const needed = new Set<string>();\n for (const m of code.matchAll(TAG_RE)) {\n const sub = fenixComponentMap[m[1]];\n if (!sub) continue;\n const target = resolve(sub);\n if (!hasImport(target)) needed.add(target);\n }\n // Biblioteca de ícones: classes fx-icon / fx-icon-<nome> injetam o subpath /icons.\n const iconsSub = resolve('@wrrdev/fenix-ui/icons');\n if (FENIX_ICON_CLASS_RE.test(code) && !hasImport(iconsSub)) {\n needed.add(iconsSub);\n }\n\n const markup = isMarkup(id, code);\n // Vue (SFC): a augmentação de tipos entra junto do primeiro import injetado.\n const vueSub = resolve('@wrrdev/fenix-ui/vue');\n if (options.vueTypes !== false && /\\.vue$/i.test(id) && needed.size > 0 && !hasImport(vueSub)) {\n needed.add(vueSub);\n }\n if (!needed.size) return code;\n\n const lines = [...needed].map((s) => `import '${s}';`);\n\n // SFC (Vue/Svelte) e HTML: o import precisa ficar DENTRO de um <script>.\n if (markup) {\n const injected = injectIntoScriptBlock(code, lines);\n if (injected) return injected;\n return createScriptBlock(code, lines, /\\.html?$/i.test(id));\n }\n\n // TS/JS: injeta após o último import existente (ou no topo).\n let lastEnd = -1;\n for (const m of code.matchAll(/^[ \\t]*import\\b[^;]*?['\"][^'\"]+['\"];?[^\\S\\n]*$/gm)) {\n lastEnd = Math.max(lastEnd, m.index + m[0].length);\n }\n if (lastEnd === -1) return `${lines.join('\\n')}\\n${code}`;\n return `${code.slice(0, lastEnd)}\\n${lines.join('\\n')}${code.slice(lastEnd)}`;\n}\n\n/** Verifica se o arquivo deve ser transformado. */\nexport function shouldTransform(id: string): boolean {\n return (\n !id.includes('node_modules') &&\n !id.endsWith('.d.ts') &&\n !id.endsWith('.css') &&\n /\\.(ts|js|tsx|jsx|vue|html|svelte)$/.test(id)\n );\n}\n\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 * Também cuida dos arquivos com markup: em SFC (`.vue`/`.svelte`) e HTML o import é inserido\n * DENTRO do bloco `<script>` (criado quando o SFC só tem `<template>`), e nos arquivos `.vue`\n * injeta junto `import '@wrrdev/fenix-ui/vue'` (augmentação de tipos do Volar/vue-tsc).\n * Desligue os tipos do Vue com `FenixAutoImport({ vueTypes: false })`.\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 // `id` permite os tratamentos de arquivo com markup (SFC Vue/Svelte/HTML).\n const result = transformSource(code, options, id);\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":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Carregamento LEVE da fonte de ícones (@font-face + classe base).
|
|
3
|
+
*
|
|
4
|
+
* Separado de ./index de propósito: importar este módulo NÃO injeta o CSS
|
|
5
|
+
* completo com as ~4.300 regras `fx-icon-<nome>`. É o que o <fx-icon> usa —
|
|
6
|
+
* dentro do Shadow DOM o glifo vem da ligadura (o nome como conteúdo), então
|
|
7
|
+
* as classes por ícone não atravessam a fronteira do shadow root.
|
|
8
|
+
*/
|
|
9
|
+
/** URL resolvida da fonte (reutilizada por ./index para o CSS completo). */
|
|
10
|
+
export declare const FENIX_ICONS_FONT_URL: string;
|
|
11
|
+
/** Id do <style> com @font-face + classe base. */
|
|
12
|
+
export declare const FENIX_ICONS_FONT_STYLE_ID = "fenix-icons-font";
|
|
13
|
+
/** Id do <style> com o CSS completo (@font-face + base + classes por ícone). */
|
|
14
|
+
export declare const FENIX_ICONS_STYLE_ID = "fenix-icons";
|
|
15
|
+
/** CSS do @font-face. */
|
|
16
|
+
export declare function buildFenixIconsFontFaceCss(): string;
|
|
17
|
+
/** CSS leve: @font-face + classe base (sem as classes por ícone). */
|
|
18
|
+
export declare function buildFenixIconsFontCss(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Injeta @font-face + classe base no <head> (idempotente). Não duplica quando
|
|
21
|
+
* o CSS completo (`fenix-icons`) já foi carregado por `import '.../icons'`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function loadFenixIconsFont(target?: Document | undefined): void;
|
|
24
|
+
/** Reseta o estado de injeção da fonte (uso interno/testes). */
|
|
25
|
+
export declare function __resetFenixIconsFontInjection(): void;
|
|
26
|
+
//# sourceMappingURL=font.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../../src/icons/font.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,QAAmB,CAAC;AAErD,kDAAkD;AAClD,eAAO,MAAM,yBAAyB,qBAAqB,CAAC;AAE5D,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAElD,yBAAyB;AACzB,wBAAgB,0BAA0B,IAAI,MAAM,CAKnD;AAED,qEAAqE;AACrE,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,GAAE,QAAQ,GAAG,SAAkE,GACpF,IAAI,CAWN;AAED,gEAAgE;AAChE,wBAAgB,8BAA8B,IAAI,IAAI,CAErD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { FENIX_ICON_FONT_FAMILY, FENIX_ICON_BASE_CSS } from "./base-css.js";
|
|
2
|
+
function resolveFontUrl() {
|
|
3
|
+
if (typeof __FENIX_ICONS_FONT_URL__ !== "undefined" && __FENIX_ICONS_FONT_URL__) {
|
|
4
|
+
return __FENIX_ICONS_FONT_URL__;
|
|
5
|
+
}
|
|
6
|
+
return new URL("" + new URL("../assets/fenix-icons-DmgotBzD.woff2", import.meta.url).href, import.meta.url).toString();
|
|
7
|
+
}
|
|
8
|
+
const FENIX_ICONS_FONT_URL = resolveFontUrl();
|
|
9
|
+
const FENIX_ICONS_FONT_STYLE_ID = "fenix-icons-font";
|
|
10
|
+
const FENIX_ICONS_STYLE_ID = "fenix-icons";
|
|
11
|
+
function buildFenixIconsFontFaceCss() {
|
|
12
|
+
return `@font-face{font-family:'${FENIX_ICON_FONT_FAMILY}';font-style:normal;font-weight:100 700;font-display:block;src:url('${FENIX_ICONS_FONT_URL}') format('woff2');}`;
|
|
13
|
+
}
|
|
14
|
+
function buildFenixIconsFontCss() {
|
|
15
|
+
return buildFenixIconsFontFaceCss() + FENIX_ICON_BASE_CSS;
|
|
16
|
+
}
|
|
17
|
+
let fontInjected = false;
|
|
18
|
+
function loadFenixIconsFont(target = typeof document !== "undefined" ? document : void 0) {
|
|
19
|
+
if (fontInjected || !target) return;
|
|
20
|
+
if (target.getElementById(FENIX_ICONS_STYLE_ID)) {
|
|
21
|
+
fontInjected = true;
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const style = target.createElement("style");
|
|
25
|
+
style.id = FENIX_ICONS_FONT_STYLE_ID;
|
|
26
|
+
style.textContent = buildFenixIconsFontCss();
|
|
27
|
+
target.head.appendChild(style);
|
|
28
|
+
fontInjected = true;
|
|
29
|
+
}
|
|
30
|
+
function __resetFenixIconsFontInjection() {
|
|
31
|
+
fontInjected = false;
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
FENIX_ICONS_FONT_STYLE_ID,
|
|
35
|
+
FENIX_ICONS_FONT_URL,
|
|
36
|
+
FENIX_ICONS_STYLE_ID,
|
|
37
|
+
__resetFenixIconsFontInjection,
|
|
38
|
+
buildFenixIconsFontCss,
|
|
39
|
+
buildFenixIconsFontFaceCss,
|
|
40
|
+
loadFenixIconsFont
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=font.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font.js","sources":["../../src/icons/font.ts"],"sourcesContent":["/**\n * Carregamento LEVE da fonte de ícones (@font-face + classe base).\n *\n * Separado de ./index de propósito: importar este módulo NÃO injeta o CSS\n * completo com as ~4.300 regras `fx-icon-<nome>`. É o que o <fx-icon> usa —\n * dentro do Shadow DOM o glifo vem da ligadura (o nome como conteúdo), então\n * as classes por ícone não atravessam a fronteira do shadow root.\n */\n\nimport { FENIX_ICON_BASE_CSS, FENIX_ICON_FONT_FAMILY } from './base-css';\n\n/** URL da fonte woff2: no build ESM a fonte vive na mesma pasta do módulo (dist/icons). */\ndeclare const __FENIX_ICONS_FONT_URL__: string | undefined;\n\nfunction resolveFontUrl(): string {\n if (typeof __FENIX_ICONS_FONT_URL__ !== 'undefined' && __FENIX_ICONS_FONT_URL__) {\n return __FENIX_ICONS_FONT_URL__;\n }\n // IMPORTANTE: o `import.meta.url` precisa ser usado DIRETAMENTE como 2º\n // argumento de `new URL` (sem variável intermediária). É assim que Vite,\n // webpack e Rollup reconhecem o padrão de asset e copiam/reescrevem a URL\n // da fonte no build do PROJETO CONSUMIDOR — com variável, a URL permanece\n // dinâmica e quebra em produção (a fonte 404 e os ícones viram texto).\n return new URL('./fenix-icons.woff2', import.meta.url).toString();\n}\n\n/** URL resolvida da fonte (reutilizada por ./index para o CSS completo). */\nexport const FENIX_ICONS_FONT_URL = resolveFontUrl();\n\n/** Id do <style> com @font-face + classe base. */\nexport const FENIX_ICONS_FONT_STYLE_ID = 'fenix-icons-font';\n\n/** Id do <style> com o CSS completo (@font-face + base + classes por ícone). */\nexport const FENIX_ICONS_STYLE_ID = 'fenix-icons';\n\n/** CSS do @font-face. */\nexport function buildFenixIconsFontFaceCss(): string {\n return (\n `@font-face{font-family:'${FENIX_ICON_FONT_FAMILY}';font-style:normal;font-weight:100 700;` +\n `font-display:block;src:url('${FENIX_ICONS_FONT_URL}') format('woff2');}`\n );\n}\n\n/** CSS leve: @font-face + classe base (sem as classes por ícone). */\nexport function buildFenixIconsFontCss(): string {\n return buildFenixIconsFontFaceCss() + FENIX_ICON_BASE_CSS;\n}\n\nlet fontInjected = false;\n\n/**\n * Injeta @font-face + classe base no <head> (idempotente). Não duplica quando\n * o CSS completo (`fenix-icons`) já foi carregado por `import '.../icons'`.\n */\nexport function loadFenixIconsFont(\n target: Document | undefined = typeof document !== 'undefined' ? document : undefined,\n): void {\n if (fontInjected || !target) return;\n if (target.getElementById(FENIX_ICONS_STYLE_ID)) {\n fontInjected = true;\n return;\n }\n const style = target.createElement('style');\n style.id = FENIX_ICONS_FONT_STYLE_ID;\n style.textContent = buildFenixIconsFontCss();\n target.head.appendChild(style);\n fontInjected = true;\n}\n\n/** Reseta o estado de injeção da fonte (uso interno/testes). */\nexport function __resetFenixIconsFontInjection(): void {\n fontInjected = false;\n}"],"names":[],"mappings":";AAcA,SAAS,iBAAyB;AAChC,MAAI,OAAO,6BAA6B,eAAe,0BAA0B;AAC/E,WAAO;AAAA,EACT;AAMA,SAAO,IAAA,IAAA,4EAAA,YAAA,GAAA,EAAgD,SAAA;AACzD;AAGO,MAAM,uBAAuB,eAAA;AAG7B,MAAM,4BAA4B;AAGlC,MAAM,uBAAuB;AAG7B,SAAS,6BAAqC;AACnD,SACE,2BAA2B,sBAAsB,uEAClB,oBAAoB;AAEvD;AAGO,SAAS,yBAAiC;AAC/C,SAAO,+BAA+B;AACxC;AAEA,IAAI,eAAe;AAMZ,SAAS,mBACd,SAA+B,OAAO,aAAa,cAAc,WAAW,QACtE;AACN,MAAI,gBAAgB,CAAC,OAAQ;AAC7B,MAAI,OAAO,eAAe,oBAAoB,GAAG;AAC/C,mBAAe;AACf;AAAA,EACF;AACA,QAAM,QAAQ,OAAO,cAAc,OAAO;AAC1C,QAAM,KAAK;AACX,QAAM,cAAc,uBAAA;AACpB,SAAO,KAAK,YAAY,KAAK;AAC7B,iBAAe;AACjB;AAGO,SAAS,iCAAuC;AACrD,iBAAe;AACjB;"}
|
package/dist/icons/index.d.ts
CHANGED
|
@@ -9,13 +9,15 @@
|
|
|
9
9
|
*
|
|
10
10
|
* <i class="fx-icon fx-icon-home"></i>
|
|
11
11
|
* <span class="fx-icon">settings</span> (nome do ícone como conteúdo)
|
|
12
|
+
* <fx-icon name="home" /> (com autocomplete no editor)
|
|
12
13
|
*
|
|
13
14
|
* Modificadores: fx-icon-fill (preenchido), fx-icon-bold (peso maior).
|
|
14
15
|
* Tamanho via font-size, cor via currentColor.
|
|
15
16
|
*/
|
|
16
17
|
export { FENIX_ICON_NAMES } from './names';
|
|
17
|
-
export type { FenixIconName } from './
|
|
18
|
+
export type { FenixIconName, FenixIconKnownName } from './types';
|
|
18
19
|
export { FENIX_ICON_BASE_CSS, FENIX_ICON_FONT_FAMILY, isFenixIconName } from './base-css';
|
|
20
|
+
export { buildFenixIconsFontCss, loadFenixIconsFont, __resetFenixIconsFontInjection } from './font';
|
|
19
21
|
/** CSS base compartilhado (usado também dentro dos Shadow DOMs dos componentes). */
|
|
20
22
|
export declare const FENIX_ICON_DOC_BASE_CSS = "\n.fx-icon {\n font-family: var(--fx-icon-font, Fenix Icons);\n font-weight: normal;\n font-style: normal;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n white-space: nowrap;\n word-wrap: normal;\n direction: ltr;\n font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;\n -webkit-font-smoothing: antialiased;\n text-rendering: optimizeLegibility;\n user-select: none;\n}\n.fx-icon.fx-icon-fill { font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24; }\n.fx-icon.fx-icon-bold { font-variation-settings: 'FILL' 0, 'wght' 600, 'GRAD' 0, 'opsz' 24; }\n";
|
|
21
23
|
/** Monta o CSS completo (@font-face + base + classes por ícone). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,MAAM,QAAQ,CAAC;AAEpG,oFAAoF;AACpF,eAAO,MAAM,uBAAuB,moBAAsB,CAAC;AAW3D,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,GAAE,QAAQ,GAAG,SAAkE,GAAG,IAAI,CAO1H;AAED,uDAAuD;AACvD,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD"}
|
package/dist/icons/index.js
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
import { FENIX_ICON_NAMES } from "./names.js";
|
|
2
|
-
import {
|
|
3
|
-
import { isFenixIconName } from "./base-css.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return __FENIX_ICONS_FONT_URL__;
|
|
7
|
-
}
|
|
8
|
-
return new URL("" + new URL("../assets/fenix-icons-DmgotBzD.woff2", import.meta.url).href, import.meta.url).toString();
|
|
9
|
-
}
|
|
10
|
-
const FONT_URL = resolveFontUrl();
|
|
11
|
-
const STYLE_ID = "fenix-icons";
|
|
2
|
+
import { FENIX_ICON_BASE_CSS } from "./base-css.js";
|
|
3
|
+
import { FENIX_ICON_FONT_FAMILY, isFenixIconName } from "./base-css.js";
|
|
4
|
+
import { FENIX_ICONS_STYLE_ID, buildFenixIconsFontFaceCss, __resetFenixIconsFontInjection } from "./font.js";
|
|
5
|
+
import { buildFenixIconsFontCss, loadFenixIconsFont } from "./font.js";
|
|
12
6
|
const FENIX_ICON_DOC_BASE_CSS = FENIX_ICON_BASE_CSS;
|
|
13
7
|
function buildClassRules() {
|
|
14
8
|
let rules = "";
|
|
@@ -18,19 +12,20 @@ function buildClassRules() {
|
|
|
18
12
|
return rules;
|
|
19
13
|
}
|
|
20
14
|
function buildFenixIconsCss() {
|
|
21
|
-
return
|
|
15
|
+
return buildFenixIconsFontFaceCss() + FENIX_ICON_DOC_BASE_CSS + buildClassRules();
|
|
22
16
|
}
|
|
23
17
|
let injected = false;
|
|
24
18
|
function loadFenixIcons(target = typeof document !== "undefined" ? document : void 0) {
|
|
25
19
|
if (injected || !target) return;
|
|
26
20
|
const style = target.createElement("style");
|
|
27
|
-
style.id =
|
|
21
|
+
style.id = FENIX_ICONS_STYLE_ID;
|
|
28
22
|
style.textContent = buildFenixIconsCss();
|
|
29
23
|
target.head.appendChild(style);
|
|
30
24
|
injected = true;
|
|
31
25
|
}
|
|
32
26
|
function __resetFenixIconsInjection() {
|
|
33
27
|
injected = false;
|
|
28
|
+
__resetFenixIconsFontInjection();
|
|
34
29
|
}
|
|
35
30
|
loadFenixIcons();
|
|
36
31
|
export {
|
|
@@ -38,9 +33,12 @@ export {
|
|
|
38
33
|
FENIX_ICON_DOC_BASE_CSS,
|
|
39
34
|
FENIX_ICON_FONT_FAMILY,
|
|
40
35
|
FENIX_ICON_NAMES,
|
|
36
|
+
__resetFenixIconsFontInjection,
|
|
41
37
|
__resetFenixIconsInjection,
|
|
42
38
|
buildFenixIconsCss,
|
|
39
|
+
buildFenixIconsFontCss,
|
|
43
40
|
isFenixIconName,
|
|
44
|
-
loadFenixIcons
|
|
41
|
+
loadFenixIcons,
|
|
42
|
+
loadFenixIconsFont
|
|
45
43
|
};
|
|
46
44
|
//# sourceMappingURL=index.js.map
|
package/dist/icons/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/icons/index.ts"],"sourcesContent":["/**\n * Fenix Icons — biblioteca de ícones padrão do FenixUI.\n *\n * Fonte self-hosted (`fenix-icons.woff2`, Material Symbols Rounded, Apache 2.0)\n * com TODOS os ícones embarcados — nenhuma requisição externa, nenhum CDN.\n *\n * Uso geral (basta importar `@wrrdev/fenix-ui/icons` UMA vez — o auto-import\n * faz isso automaticamente quando detecta `fx-icon` no código):\n *\n * <i class=\"fx-icon fx-icon-home\"></i>\n * <span class=\"fx-icon\">settings</span> (nome do ícone como conteúdo)\n *\n * Modificadores: fx-icon-fill (preenchido), fx-icon-bold (peso maior).\n * Tamanho via font-size, cor via currentColor.\n */\n\nimport { FENIX_ICON_NAMES } from './names';\nimport { FENIX_ICON_BASE_CSS
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/icons/index.ts"],"sourcesContent":["/**\n * Fenix Icons — biblioteca de ícones padrão do FenixUI.\n *\n * Fonte self-hosted (`fenix-icons.woff2`, Material Symbols Rounded, Apache 2.0)\n * com TODOS os ícones embarcados — nenhuma requisição externa, nenhum CDN.\n *\n * Uso geral (basta importar `@wrrdev/fenix-ui/icons` UMA vez — o auto-import\n * faz isso automaticamente quando detecta `fx-icon` no código):\n *\n * <i class=\"fx-icon fx-icon-home\"></i>\n * <span class=\"fx-icon\">settings</span> (nome do ícone como conteúdo)\n * <fx-icon name=\"home\" /> (com autocomplete no editor)\n *\n * Modificadores: fx-icon-fill (preenchido), fx-icon-bold (peso maior).\n * Tamanho via font-size, cor via currentColor.\n */\n\nimport { FENIX_ICON_NAMES } from './names';\nimport { FENIX_ICON_BASE_CSS } from './base-css';\nimport {\n FENIX_ICONS_STYLE_ID,\n buildFenixIconsFontFaceCss,\n __resetFenixIconsFontInjection,\n} from './font';\n\nexport { FENIX_ICON_NAMES } from './names';\nexport type { FenixIconName, FenixIconKnownName } from './types';\nexport { FENIX_ICON_BASE_CSS, FENIX_ICON_FONT_FAMILY, isFenixIconName } from './base-css';\n// Carregamento leve da fonte (usado pelo <fx-icon>) — ver ./font.\nexport { buildFenixIconsFontCss, loadFenixIconsFont, __resetFenixIconsFontInjection } from './font';\n\n/** CSS base compartilhado (usado também dentro dos Shadow DOMs dos componentes). */\nexport const FENIX_ICON_DOC_BASE_CSS = FENIX_ICON_BASE_CSS;\n\n/** Gera as regras `fx-icon-<nome>::before { content: '<nome>' }` (via ligaduras). */\nfunction buildClassRules(): string {\n let rules = '';\n for (const name of FENIX_ICON_NAMES) {\n rules += `.fx-icon-${name}::before{content:\"${name}\"}`;\n }\n return rules;\n}\n\n/** Monta o CSS completo (@font-face + base + classes por ícone). */\nexport function buildFenixIconsCss(): string {\n return buildFenixIconsFontFaceCss() + FENIX_ICON_DOC_BASE_CSS + buildClassRules();\n}\n\nlet injected = false;\n\n/**\n * Injeta o CSS dos ícones no `<head>` do documento (idempotente).\n * Chamado automaticamente ao importar `@wrrdev/fenix-ui/icons`.\n * O `@font-face` registrado no documento também vale dentro dos Shadow DOMs.\n */\nexport function loadFenixIcons(target: Document | undefined = typeof document !== 'undefined' ? document : undefined): void {\n if (injected || !target) return;\n const style = target.createElement('style');\n style.id = FENIX_ICONS_STYLE_ID;\n style.textContent = buildFenixIconsCss();\n target.head.appendChild(style);\n injected = true;\n}\n\n/** Reseta o estado de injeção (uso interno/testes). */\nexport function __resetFenixIconsInjection(): void {\n injected = false;\n __resetFenixIconsFontInjection();\n}\n\n// Import com efeito colateral: `import '@wrrdev/fenix-ui/icons'` já carrega tudo.\nloadFenixIcons();"],"names":[],"mappings":";;;;;AAgCO,MAAM,0BAA0B;AAGvC,SAAS,kBAA0B;AACjC,MAAI,QAAQ;AACZ,aAAW,QAAQ,kBAAkB;AACnC,aAAS,YAAY,IAAI,qBAAqB,IAAI;AAAA,EACpD;AACA,SAAO;AACT;AAGO,SAAS,qBAA6B;AAC3C,SAAO,2BAAA,IAA+B,0BAA0B,gBAAA;AAClE;AAEA,IAAI,WAAW;AAOR,SAAS,eAAe,SAA+B,OAAO,aAAa,cAAc,WAAW,QAAiB;AAC1H,MAAI,YAAY,CAAC,OAAQ;AACzB,QAAM,QAAQ,OAAO,cAAc,OAAO;AAC1C,QAAM,KAAK;AACX,QAAM,cAAc,mBAAA;AACpB,SAAO,KAAK,YAAY,KAAK;AAC7B,aAAW;AACb;AAGO,SAAS,6BAAmC;AACjD,aAAW;AACX,iCAAA;AACF;AAGA,eAAA;"}
|