@wrrdev/fenix-ui 1.1.4 → 1.1.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.
Files changed (87) hide show
  1. package/README.md +72 -2
  2. package/dist/assets/base-css-Be_r8aTo.js +74 -0
  3. package/dist/assets/base-css-Be_r8aTo.js.map +1 -0
  4. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  5. package/dist/components/autocomplete/autocomplete.js +28 -8
  6. package/dist/components/autocomplete/autocomplete.js.map +1 -1
  7. package/dist/components/button/button.d.ts +4 -2
  8. package/dist/components/button/button.d.ts.map +1 -1
  9. package/dist/components/button/button.js +31 -11
  10. package/dist/components/button/button.js.map +1 -1
  11. package/dist/components/card/card.d.ts +2 -1
  12. package/dist/components/card/card.d.ts.map +1 -1
  13. package/dist/components/card/card.js +5 -2
  14. package/dist/components/card/card.js.map +1 -1
  15. package/dist/components/chip/chip.d.ts.map +1 -1
  16. package/dist/components/chip/chip.js +4 -2
  17. package/dist/components/chip/chip.js.map +1 -1
  18. package/dist/components/datepicker/datepicker.d.ts.map +1 -1
  19. package/dist/components/datepicker/datepicker.js +5 -1
  20. package/dist/components/datepicker/datepicker.js.map +1 -1
  21. package/dist/components/empty-state/empty-state.d.ts.map +1 -1
  22. package/dist/components/empty-state/empty-state.js +4 -1
  23. package/dist/components/empty-state/empty-state.js.map +1 -1
  24. package/dist/components/fileupload/fileupload.d.ts.map +1 -1
  25. package/dist/components/fileupload/fileupload.js +15 -3
  26. package/dist/components/fileupload/fileupload.js.map +1 -1
  27. package/dist/components/floatlabel/floatlabel.d.ts +8 -0
  28. package/dist/components/floatlabel/floatlabel.d.ts.map +1 -1
  29. package/dist/components/floatlabel/floatlabel.js +66 -3
  30. package/dist/components/floatlabel/floatlabel.js.map +1 -1
  31. package/dist/components/input/input.d.ts +7 -1
  32. package/dist/components/input/input.d.ts.map +1 -1
  33. package/dist/components/input/input.js +82 -6
  34. package/dist/components/input/input.js.map +1 -1
  35. package/dist/components/multiselect/multiselect.d.ts.map +1 -1
  36. package/dist/components/multiselect/multiselect.js +13 -4
  37. package/dist/components/multiselect/multiselect.js.map +1 -1
  38. package/dist/components/select/select.d.ts.map +1 -1
  39. package/dist/components/select/select.js +14 -3
  40. package/dist/components/select/select.js.map +1 -1
  41. package/dist/components/textarea/textarea.d.ts.map +1 -1
  42. package/dist/components/textarea/textarea.js +14 -4
  43. package/dist/components/textarea/textarea.js.map +1 -1
  44. package/dist/core/jsx.d.ts +235 -28
  45. package/dist/core/jsx.d.ts.map +1 -1
  46. package/dist/core/jsx.js.map +1 -1
  47. package/dist/core/presets.js +1 -1
  48. package/dist/core/presets.js.map +1 -1
  49. package/dist/core/react.d.ts +20 -0
  50. package/dist/core/react.d.ts.map +1 -0
  51. package/dist/core/react.js +5 -0
  52. package/dist/core/react.js.map +1 -0
  53. package/dist/core/vue.d.ts +47 -2
  54. package/dist/core/vue.d.ts.map +1 -1
  55. package/dist/core/vue.js.map +1 -1
  56. package/dist/docs/app.d.ts +6 -0
  57. package/dist/docs/app.d.ts.map +1 -1
  58. package/dist/docs/componentes/alert.doc.d.ts.map +1 -1
  59. package/dist/docs/componentes/autocomplete.doc.d.ts.map +1 -1
  60. package/dist/docs/componentes/button.doc.d.ts.map +1 -1
  61. package/dist/docs/componentes/card.doc.d.ts.map +1 -1
  62. package/dist/docs/componentes/confirmpopup.doc.d.ts.map +1 -1
  63. package/dist/docs/componentes/datepicker.doc.d.ts.map +1 -1
  64. package/dist/docs/componentes/fileupload.doc.d.ts.map +1 -1
  65. package/dist/docs/componentes/floatlabel.doc.d.ts.map +1 -1
  66. package/dist/docs/componentes/input.doc.d.ts.map +1 -1
  67. package/dist/docs/componentes/multiselect.doc.d.ts.map +1 -1
  68. package/dist/docs/componentes/select.doc.d.ts.map +1 -1
  69. package/dist/docs/componentes/textarea.doc.d.ts.map +1 -1
  70. package/dist/fenix-ui.esm.js +2 -2
  71. package/dist/fenix-ui.esm.js.map +1 -1
  72. package/dist/fenix-ui.umd.min.js +409 -241
  73. package/dist/fenix-ui2.esm.js +2 -4321
  74. package/dist/fenix-ui2.esm.js.map +1 -1
  75. package/dist/fenix-ui3.esm.js +4316 -10466
  76. package/dist/fenix-ui3.esm.js.map +1 -1
  77. package/dist/fenix-ui4.esm.js +10669 -106
  78. package/dist/fenix-ui4.esm.js.map +1 -1
  79. package/dist/fenix-ui5.esm.js +110 -0
  80. package/dist/fenix-ui5.esm.js.map +1 -0
  81. package/dist/icons/base-css.d.ts +16 -0
  82. package/dist/icons/base-css.d.ts.map +1 -1
  83. package/dist/icons/base-css.js +10 -0
  84. package/dist/icons/base-css.js.map +1 -1
  85. package/package.json +6 -5
  86. package/dist/assets/base-css-BifSeW2H.js +0 -31
  87. package/dist/assets/base-css-BifSeW2H.js.map +0 -1
@@ -0,0 +1,110 @@
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-confirmpopup": "@wrrdev/fenix-ui/confirmpopup",
18
+ "fx-fileupload": "@wrrdev/fenix-ui/fileupload",
19
+ "fx-slider": "@wrrdev/fenix-ui/slider",
20
+ "fx-chip": "@wrrdev/fenix-ui/chip",
21
+ "fx-avatar": "@wrrdev/fenix-ui/avatar",
22
+ "fx-card": "@wrrdev/fenix-ui/card",
23
+ "fx-breadcrumb": "@wrrdev/fenix-ui/breadcrumb",
24
+ "fx-popover": "@wrrdev/fenix-ui/popover",
25
+ "fx-stepper": "@wrrdev/fenix-ui/stepper",
26
+ "fx-rating": "@wrrdev/fenix-ui/rating",
27
+ "fx-menu": "@wrrdev/fenix-ui/menu",
28
+ "fx-toggle-button-group": "@wrrdev/fenix-ui/toggle-button-group",
29
+ "fx-empty-state": "@wrrdev/fenix-ui/empty-state",
30
+ "fx-password-strength": "@wrrdev/fenix-ui/password-strength",
31
+ "fx-timeline": "@wrrdev/fenix-ui/timeline",
32
+ "fx-carousel": "@wrrdev/fenix-ui/carousel",
33
+ "fx-tree": "@wrrdev/fenix-ui/tree",
34
+ "fx-drawer": "@wrrdev/fenix-ui/drawer",
35
+ "fx-toast": "@wrrdev/fenix-ui/toast",
36
+ "fx-tooltip": "@wrrdev/fenix-ui/tooltip",
37
+ "fx-tabs": "@wrrdev/fenix-ui/tabs",
38
+ "fx-tab-panel": "@wrrdev/fenix-ui/tabs",
39
+ "fx-progress": "@wrrdev/fenix-ui/progress",
40
+ "fx-skeleton": "@wrrdev/fenix-ui/skeleton",
41
+ "fx-alert": "@wrrdev/fenix-ui/alert",
42
+ "fx-dropdown": "@wrrdev/fenix-ui/dropdown",
43
+ "fx-dropdown-item": "@wrrdev/fenix-ui/dropdown",
44
+ "fx-pagination": "@wrrdev/fenix-ui/pagination",
45
+ "fx-autocomplete": "@wrrdev/fenix-ui/autocomplete",
46
+ "fx-knob": "@wrrdev/fenix-ui/knob",
47
+ "fx-accordion": "@wrrdev/fenix-ui/accordion",
48
+ "fx-accordion-panel": "@wrrdev/fenix-ui/accordion",
49
+ "fx-orderlist": "@wrrdev/fenix-ui/orderlist",
50
+ "fx-picklist": "@wrrdev/fenix-ui/picklist",
51
+ "fx-column": "@wrrdev/fenix-ui/table"
52
+ };
53
+ const TAG_RE = /<(fx-[a-z][a-z-]*)(?=[\s/>])/g;
54
+ const FENIX_ICON_CLASS_RE = /\bfx-icon(?:-[a-z0-9_]+)*\b/;
55
+ function transformSource(code, options = {}) {
56
+ const pkg = options.packageName ?? "@wrrdev/fenix-ui";
57
+ const resolve = (sub) => pkg === "@wrrdev/fenix-ui" ? sub : sub.replace("@wrrdev/fenix-ui", pkg);
58
+ const needed = /* @__PURE__ */ new Set();
59
+ for (const m of code.matchAll(TAG_RE)) {
60
+ const sub = fenixComponentMap[m[1]];
61
+ if (sub) {
62
+ const target = resolve(sub);
63
+ if (!code.includes(`'${target}'`) && !code.includes(`"${target}"`)) {
64
+ needed.add(target);
65
+ }
66
+ }
67
+ }
68
+ const iconsSub = resolve("@wrrdev/fenix-ui/icons");
69
+ if (FENIX_ICON_CLASS_RE.test(code) && !code.includes(`'${iconsSub}'`) && !code.includes(`"${iconsSub}"`)) {
70
+ needed.add(iconsSub);
71
+ }
72
+ if (!needed.size) return code;
73
+ const lines = [...needed].map((s) => `import '${s}';`);
74
+ const vueScript = /(<script[^>]*>)\n/.exec(code);
75
+ if (vueScript) {
76
+ return code.replace(vueScript[0], `${vueScript[1]}
77
+ ${lines.join("\n")}
78
+ `);
79
+ }
80
+ let lastEnd = -1;
81
+ for (const m of code.matchAll(/^[ \t]*import\b[^;]*?['"][^'"]+['"];?[^\S\n]*$/gm)) {
82
+ lastEnd = Math.max(lastEnd, m.index + m[0].length);
83
+ }
84
+ if (lastEnd === -1) return `${lines.join("\n")}
85
+ ${code}`;
86
+ return `${code.slice(0, lastEnd)}
87
+ ${lines.join("\n")}${code.slice(lastEnd)}`;
88
+ }
89
+ function shouldTransform(id) {
90
+ return !id.includes("node_modules") && !id.endsWith(".d.ts") && !id.endsWith(".css") && /\.(ts|js|tsx|jsx|vue|html|svelte)$/.test(id);
91
+ }
92
+ function FenixAutoImport(options = {}) {
93
+ return {
94
+ name: "fenix-ui-auto-import",
95
+ enforce: "pre",
96
+ transform(code, id) {
97
+ if (!shouldTransform(id)) return void 0;
98
+ const result = transformSource(code, options);
99
+ if (result === code) return void 0;
100
+ return { code: result, map: null };
101
+ }
102
+ };
103
+ }
104
+ export {
105
+ FenixAutoImport,
106
+ fenixComponentMap,
107
+ shouldTransform,
108
+ transformSource
109
+ };
110
+ //# sourceMappingURL=fenix-ui5.esm.js.map
@@ -0,0 +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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"}
@@ -18,4 +18,20 @@ export declare const FENIX_ICON_FONT_VAR = "var(--fx-icon-font, Fenix Icons)";
18
18
  export declare const FENIX_ICON_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";
19
19
  /** Verifica se o valor parece um nome de ícone da Fenix Icons (e não emoji/texto livre). */
20
20
  export declare function isFenixIconName(value: string): boolean;
21
+ /**
22
+ * HTML do ícone para uso DENTRO de Shadow DOM (concatenar ao template).
23
+ *
24
+ * - Nome válido da Fenix Icons (ex.: `home`) → glifo via LIGADURA: o nome
25
+ * vira o conteúdo de texto do elemento com a font-family de ícones.
26
+ * Isso é obrigatório dentro de Shadow DOM: as regras
27
+ * `.fx-icon-<nome>::before` são injetadas no <head> do documento e NÃO
28
+ * atravessam a fronteira do shadow root (apenas o @font-face vale
29
+ * dentro dele) — a classe vazia renderizaria um elemento sem glifo.
30
+ * - Qualquer outro valor (emoji, texto) → texto puro escapado.
31
+ *
32
+ * A classe base `.fx-icon` é fornecida por `FENIX_ICON_BASE_CSS`
33
+ * (concatenada às `static styles` do componente); o @font-face vem do
34
+ * `@wrrdev/fenix-ui/icons` (injetado no <head>).
35
+ */
36
+ export declare function fenixIconHtml(icon: string): string;
21
37
  //# sourceMappingURL=base-css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-css.d.ts","sourceRoot":"","sources":["../../src/icons/base-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AAEpD,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,qCAAmD,CAAC;AAEpF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,moBAmB/B,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD"}
1
+ {"version":3,"file":"base-css.d.ts","sourceRoot":"","sources":["../../src/icons/base-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AAEpD,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,qCAAmD,CAAC;AAEpF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,moBAmB/B,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOlD"}
@@ -1,3 +1,4 @@
1
+ import { esc } from "../core/sanitize.js";
1
2
  const FENIX_ICON_FONT_FAMILY = "Fenix Icons";
2
3
  const FENIX_ICON_FONT_VAR = `var(--fx-icon-font, ${FENIX_ICON_FONT_FAMILY})`;
3
4
  const FENIX_ICON_BASE_CSS = `
@@ -23,10 +24,19 @@ const FENIX_ICON_BASE_CSS = `
23
24
  function isFenixIconName(value) {
24
25
  return /^[a-z][a-z0-9_]*$/.test(value.trim());
25
26
  }
27
+ function fenixIconHtml(icon) {
28
+ const value = (icon ?? "").trim();
29
+ if (!value) return "";
30
+ if (isFenixIconName(value)) {
31
+ return `<i class="fx-icon" aria-hidden="true">${value}</i>`;
32
+ }
33
+ return `<span aria-hidden="true">${esc(value)}</span>`;
34
+ }
26
35
  export {
27
36
  FENIX_ICON_BASE_CSS,
28
37
  FENIX_ICON_FONT_FAMILY,
29
38
  FENIX_ICON_FONT_VAR,
39
+ fenixIconHtml,
30
40
  isFenixIconName
31
41
  };
32
42
  //# sourceMappingURL=base-css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-css.js","sources":["../../src/icons/base-css.ts"],"sourcesContent":["/**\n * CSS base da biblioteca de ícones — módulo LEVE (não importa a lista de nomes\n * nem dispara o carregamento da fonte). Usado dentro dos Shadow DOMs dos\n * componentes que suportam o atributo `icon`.\n *\n * O @font-face em si é injetado no <head> por `@wrrdev/fenix-ui/icons`\n * (ver ./index.ts) — @font-face registrado no documento também se aplica\n * dentro dos Shadow DOMs.\n */\n\n/** Nome da família de fontes dos ícones (self-hosted, sem dependência externa). */\nexport const FENIX_ICON_FONT_FAMILY = 'Fenix Icons';\n\n/** Família configurável via CSS custom property (fallback para o nome padrão). */\nexport const FENIX_ICON_FONT_VAR = `var(--fx-icon-font, ${FENIX_ICON_FONT_FAMILY})`;\n\n/**\n * Regras da classe `.fx-icon` para uso DENTRO de Shadow DOM\n * (concatene às `static styles` do componente).\n */\nexport const FENIX_ICON_BASE_CSS = `\n.fx-icon {\n font-family: ${FENIX_ICON_FONT_VAR};\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`;\n\n/** Verifica se o valor parece um nome de ícone da Fenix Icons (e não emoji/texto livre). */\nexport function isFenixIconName(value: string): boolean {\n return /^[a-z][a-z0-9_]*$/.test(value.trim());\n}\n"],"names":[],"mappings":"AAWO,MAAM,yBAAyB;AAG/B,MAAM,sBAAsB,uBAAuB,sBAAsB;AAMzE,MAAM,sBAAsB;AAAA;AAAA,iBAElB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoB7B,SAAS,gBAAgB,OAAwB;AACtD,SAAO,oBAAoB,KAAK,MAAM,KAAA,CAAM;AAC9C;"}
1
+ {"version":3,"file":"base-css.js","sources":["../../src/icons/base-css.ts"],"sourcesContent":["/**\n * CSS base da biblioteca de ícones — módulo LEVE (não importa a lista de nomes\n * nem dispara o carregamento da fonte). Usado dentro dos Shadow DOMs dos\n * componentes que suportam o atributo `icon`.\n *\n * O @font-face em si é injetado no <head> por `@wrrdev/fenix-ui/icons`\n * (ver ./index.ts) — @font-face registrado no documento também se aplica\n * dentro dos Shadow DOMs.\n */\n\nimport { esc } from '../core/sanitize';\n\n/** Nome da família de fontes dos ícones (self-hosted, sem dependência externa). */\nexport const FENIX_ICON_FONT_FAMILY = 'Fenix Icons';\n\n/** Família configurável via CSS custom property (fallback para o nome padrão). */\nexport const FENIX_ICON_FONT_VAR = `var(--fx-icon-font, ${FENIX_ICON_FONT_FAMILY})`;\n\n/**\n * Regras da classe `.fx-icon` para uso DENTRO de Shadow DOM\n * (concatene às `static styles` do componente).\n */\nexport const FENIX_ICON_BASE_CSS = `\n.fx-icon {\n font-family: ${FENIX_ICON_FONT_VAR};\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`;\n\n/** Verifica se o valor parece um nome de ícone da Fenix Icons (e não emoji/texto livre). */\nexport function isFenixIconName(value: string): boolean {\n return /^[a-z][a-z0-9_]*$/.test(value.trim());\n}\n\n/**\n * HTML do ícone para uso DENTRO de Shadow DOM (concatenar ao template).\n *\n * - Nome válido da Fenix Icons (ex.: `home`) → glifo via LIGADURA: o nome\n * vira o conteúdo de texto do elemento com a font-family de ícones.\n * Isso é obrigatório dentro de Shadow DOM: as regras\n * `.fx-icon-<nome>::before` são injetadas no <head> do documento e NÃO\n * atravessam a fronteira do shadow root (apenas o @font-face vale\n * dentro dele) — a classe vazia renderizaria um elemento sem glifo.\n * - Qualquer outro valor (emoji, texto) → texto puro escapado.\n *\n * A classe base `.fx-icon` é fornecida por `FENIX_ICON_BASE_CSS`\n * (concatenada às `static styles` do componente); o @font-face vem do\n * `@wrrdev/fenix-ui/icons` (injetado no <head>).\n */\nexport function fenixIconHtml(icon: string): string {\n const value = (icon ?? '').trim();\n if (!value) return '';\n if (isFenixIconName(value)) {\n return `<i class=\"fx-icon\" aria-hidden=\"true\">${value}</i>`;\n }\n return `<span aria-hidden=\"true\">${esc(value)}</span>`;\n}\n"],"names":[],"mappings":";AAaO,MAAM,yBAAyB;AAG/B,MAAM,sBAAsB,uBAAuB,sBAAsB;AAMzE,MAAM,sBAAsB;AAAA;AAAA,iBAElB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoB7B,SAAS,gBAAgB,OAAwB;AACtD,SAAO,oBAAoB,KAAK,MAAM,KAAA,CAAM;AAC9C;AAiBO,SAAS,cAAc,MAAsB;AAClD,QAAM,SAAS,QAAQ,IAAI,KAAA;AAC3B,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO,yCAAyC,KAAK;AAAA,EACvD;AACA,SAAO,4BAA4B,IAAI,KAAK,CAAC;AAC/C;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrrdev/fenix-ui",
3
- "version": "1.1.4",
3
+ "version": "1.1.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",
@@ -48,6 +48,7 @@
48
48
  "devDependencies": {
49
49
  "@babel/types": "^8.0.4",
50
50
  "@types/node": "^22.7.4",
51
+ "@types/react": "18.3.31",
51
52
  "jsdom": "^25.0.1",
52
53
  "typescript": "^5.6.2",
53
54
  "vite": "^5.4.8",
@@ -224,10 +225,6 @@
224
225
  "types": "./dist/components/dropdown/index.d.ts",
225
226
  "import": "./dist/components/dropdown/index.js"
226
227
  },
227
- "./sidebar": {
228
- "types": "./dist/components/sidebar/index.d.ts",
229
- "import": "./dist/components/sidebar/index.js"
230
- },
231
228
  "./pagination": {
232
229
  "types": "./dist/components/pagination/index.d.ts",
233
230
  "import": "./dist/components/pagination/index.js"
@@ -276,6 +273,10 @@
276
273
  "types": "./dist/core/vue.d.ts",
277
274
  "import": "./dist/core/vue.js"
278
275
  },
276
+ "./react": {
277
+ "types": "./dist/core/react.d.ts",
278
+ "import": "./dist/core/react.js"
279
+ },
279
280
  "./components/*": {
280
281
  "types": "./dist/components/*/index.d.ts",
281
282
  "import": "./dist/components/*/index.js"
@@ -1,31 +0,0 @@
1
- const FENIX_ICON_FONT_FAMILY = "Fenix Icons";
2
- const FENIX_ICON_FONT_VAR = `var(--fx-icon-font, ${FENIX_ICON_FONT_FAMILY})`;
3
- const FENIX_ICON_BASE_CSS = `
4
- .fx-icon {
5
- font-family: ${FENIX_ICON_FONT_VAR};
6
- font-weight: normal;
7
- font-style: normal;
8
- line-height: 1;
9
- letter-spacing: normal;
10
- text-transform: none;
11
- display: inline-block;
12
- white-space: nowrap;
13
- word-wrap: normal;
14
- direction: ltr;
15
- font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
16
- -webkit-font-smoothing: antialiased;
17
- text-rendering: optimizeLegibility;
18
- user-select: none;
19
- }
20
- .fx-icon.fx-icon-fill { font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24; }
21
- .fx-icon.fx-icon-bold { font-variation-settings: 'FILL' 0, 'wght' 600, 'GRAD' 0, 'opsz' 24; }
22
- `;
23
- function isFenixIconName(value) {
24
- return /^[a-z][a-z0-9_]*$/.test(value.trim());
25
- }
26
- export {
27
- FENIX_ICON_FONT_FAMILY as F,
28
- FENIX_ICON_BASE_CSS as a,
29
- isFenixIconName as i
30
- };
31
- //# sourceMappingURL=base-css-BifSeW2H.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-css-BifSeW2H.js","sources":["../../src/icons/base-css.ts"],"sourcesContent":["/**\n * CSS base da biblioteca de ícones — módulo LEVE (não importa a lista de nomes\n * nem dispara o carregamento da fonte). Usado dentro dos Shadow DOMs dos\n * componentes que suportam o atributo `icon`.\n *\n * O @font-face em si é injetado no <head> por `@wrrdev/fenix-ui/icons`\n * (ver ./index.ts) — @font-face registrado no documento também se aplica\n * dentro dos Shadow DOMs.\n */\n\n/** Nome da família de fontes dos ícones (self-hosted, sem dependência externa). */\nexport const FENIX_ICON_FONT_FAMILY = 'Fenix Icons';\n\n/** Família configurável via CSS custom property (fallback para o nome padrão). */\nexport const FENIX_ICON_FONT_VAR = `var(--fx-icon-font, ${FENIX_ICON_FONT_FAMILY})`;\n\n/**\n * Regras da classe `.fx-icon` para uso DENTRO de Shadow DOM\n * (concatene às `static styles` do componente).\n */\nexport const FENIX_ICON_BASE_CSS = `\n.fx-icon {\n font-family: ${FENIX_ICON_FONT_VAR};\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`;\n\n/** Verifica se o valor parece um nome de ícone da Fenix Icons (e não emoji/texto livre). */\nexport function isFenixIconName(value: string): boolean {\n return /^[a-z][a-z0-9_]*$/.test(value.trim());\n}\n"],"names":[],"mappings":"AAWO,MAAM,yBAAyB;AAG/B,MAAM,sBAAsB,uBAAuB,sBAAsB;AAMzE,MAAM,sBAAsB;AAAA;AAAA,iBAElB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoB7B,SAAS,gBAAgB,OAAwB;AACtD,SAAO,oBAAoB,KAAK,MAAM,KAAA,CAAM;AAC9C;"}