@wrrdev/fenix-ui 1.0.0
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 +117 -0
- package/dist/cdn.d.ts +6 -0
- package/dist/cdn.d.ts.map +1 -0
- package/dist/components/alert/alert.d.ts +14 -0
- package/dist/components/alert/alert.d.ts.map +1 -0
- package/dist/components/alert/alert.js +74 -0
- package/dist/components/alert/alert.js.map +1 -0
- package/dist/components/alert/index.d.ts +8 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js +7 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/autocomplete/autocomplete.d.ts +20 -0
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -0
- package/dist/components/autocomplete/autocomplete.js +144 -0
- package/dist/components/autocomplete/autocomplete.js.map +1 -0
- package/dist/components/autocomplete/index.d.ts +8 -0
- package/dist/components/autocomplete/index.d.ts.map +1 -0
- package/dist/components/autocomplete/index.js +7 -0
- package/dist/components/autocomplete/index.js.map +1 -0
- package/dist/components/badge/badge.d.ts +14 -0
- package/dist/components/badge/badge.d.ts.map +1 -0
- package/dist/components/badge/badge.js +46 -0
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/badge/index.d.ts +2 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +7 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/button/button.d.ts +30 -0
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/button/button.js +194 -0
- package/dist/components/button/button.js.map +1 -0
- package/dist/components/button/index.d.ts +2 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +7 -0
- package/dist/components/button/index.js.map +1 -0
- package/dist/components/calendar/calendar.d.ts +39 -0
- package/dist/components/calendar/calendar.d.ts.map +1 -0
- package/dist/components/calendar/calendar.js +346 -0
- package/dist/components/calendar/calendar.js.map +1 -0
- package/dist/components/calendar/index.d.ts +2 -0
- package/dist/components/calendar/index.d.ts.map +1 -0
- package/dist/components/calendar/index.js +7 -0
- package/dist/components/calendar/index.js.map +1 -0
- package/dist/components/checkbox/checkbox.d.ts +24 -0
- package/dist/components/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.js +142 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +7 -0
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/components/datepicker/datepicker.d.ts +62 -0
- package/dist/components/datepicker/datepicker.d.ts.map +1 -0
- package/dist/components/datepicker/datepicker.js +441 -0
- package/dist/components/datepicker/datepicker.js.map +1 -0
- package/dist/components/datepicker/index.d.ts +3 -0
- package/dist/components/datepicker/index.d.ts.map +1 -0
- package/dist/components/datepicker/index.js +8 -0
- package/dist/components/datepicker/index.js.map +1 -0
- package/dist/components/dialog/dialog.d.ts +19 -0
- package/dist/components/dialog/dialog.d.ts.map +1 -0
- package/dist/components/dialog/dialog.js +134 -0
- package/dist/components/dialog/dialog.js.map +1 -0
- package/dist/components/dialog/index.d.ts +8 -0
- package/dist/components/dialog/index.d.ts.map +1 -0
- package/dist/components/dialog/index.js +7 -0
- package/dist/components/dialog/index.js.map +1 -0
- package/dist/components/drawer/drawer.d.ts +27 -0
- package/dist/components/drawer/drawer.d.ts.map +1 -0
- package/dist/components/drawer/drawer.js +195 -0
- package/dist/components/drawer/drawer.js.map +1 -0
- package/dist/components/drawer/index.d.ts +8 -0
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/drawer/index.js +7 -0
- package/dist/components/drawer/index.js.map +1 -0
- package/dist/components/dropdown/dropdown.d.ts +28 -0
- package/dist/components/dropdown/dropdown.d.ts.map +1 -0
- package/dist/components/dropdown/dropdown.js +137 -0
- package/dist/components/dropdown/dropdown.js.map +1 -0
- package/dist/components/dropdown/index.d.ts +9 -0
- package/dist/components/dropdown/index.d.ts.map +1 -0
- package/dist/components/dropdown/index.js +9 -0
- package/dist/components/dropdown/index.js.map +1 -0
- package/dist/components/floatlabel/floatlabel.d.ts +42 -0
- package/dist/components/floatlabel/floatlabel.d.ts.map +1 -0
- package/dist/components/floatlabel/floatlabel.js +270 -0
- package/dist/components/floatlabel/floatlabel.js.map +1 -0
- package/dist/components/floatlabel/index.d.ts +2 -0
- package/dist/components/floatlabel/index.d.ts.map +1 -0
- package/dist/components/floatlabel/index.js +7 -0
- package/dist/components/floatlabel/index.js.map +1 -0
- package/dist/components/input/index.d.ts +2 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/index.js +7 -0
- package/dist/components/input/index.js.map +1 -0
- package/dist/components/input/input.d.ts +22 -0
- package/dist/components/input/input.d.ts.map +1 -0
- package/dist/components/input/input.js +169 -0
- package/dist/components/input/input.js.map +1 -0
- package/dist/components/multiselect/index.d.ts +2 -0
- package/dist/components/multiselect/index.d.ts.map +1 -0
- package/dist/components/multiselect/index.js +7 -0
- package/dist/components/multiselect/index.js.map +1 -0
- package/dist/components/multiselect/multiselect.d.ts +32 -0
- package/dist/components/multiselect/multiselect.d.ts.map +1 -0
- package/dist/components/multiselect/multiselect.js +389 -0
- package/dist/components/multiselect/multiselect.js.map +1 -0
- package/dist/components/pagination/index.d.ts +8 -0
- package/dist/components/pagination/index.d.ts.map +1 -0
- package/dist/components/pagination/index.js +7 -0
- package/dist/components/pagination/index.js.map +1 -0
- package/dist/components/pagination/pagination.d.ts +23 -0
- package/dist/components/pagination/pagination.d.ts.map +1 -0
- package/dist/components/pagination/pagination.js +121 -0
- package/dist/components/pagination/pagination.js.map +1 -0
- package/dist/components/progress/index.d.ts +8 -0
- package/dist/components/progress/index.d.ts.map +1 -0
- package/dist/components/progress/index.js +7 -0
- package/dist/components/progress/index.js.map +1 -0
- package/dist/components/progress/progress.d.ts +18 -0
- package/dist/components/progress/progress.d.ts.map +1 -0
- package/dist/components/progress/progress.js +99 -0
- package/dist/components/progress/progress.js.map +1 -0
- package/dist/components/radio/index.d.ts +2 -0
- package/dist/components/radio/index.d.ts.map +1 -0
- package/dist/components/radio/index.js +7 -0
- package/dist/components/radio/index.js.map +1 -0
- package/dist/components/radio/radio.d.ts +23 -0
- package/dist/components/radio/radio.d.ts.map +1 -0
- package/dist/components/radio/radio.js +133 -0
- package/dist/components/radio/radio.js.map +1 -0
- package/dist/components/select/index.d.ts +2 -0
- package/dist/components/select/index.d.ts.map +1 -0
- package/dist/components/select/index.js +7 -0
- package/dist/components/select/index.js.map +1 -0
- package/dist/components/select/select.d.ts +36 -0
- package/dist/components/select/select.d.ts.map +1 -0
- package/dist/components/select/select.js +287 -0
- package/dist/components/select/select.js.map +1 -0
- package/dist/components/skeleton/index.d.ts +8 -0
- package/dist/components/skeleton/index.d.ts.map +1 -0
- package/dist/components/skeleton/index.js +7 -0
- package/dist/components/skeleton/index.js.map +1 -0
- package/dist/components/skeleton/skeleton.d.ts +13 -0
- package/dist/components/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton/skeleton.js +57 -0
- package/dist/components/skeleton/skeleton.js.map +1 -0
- package/dist/components/spinner/index.d.ts +2 -0
- package/dist/components/spinner/index.d.ts.map +1 -0
- package/dist/components/spinner/index.js +7 -0
- package/dist/components/spinner/index.js.map +1 -0
- package/dist/components/spinner/spinner.d.ts +16 -0
- package/dist/components/spinner/spinner.d.ts.map +1 -0
- package/dist/components/spinner/spinner.js +50 -0
- package/dist/components/spinner/spinner.js.map +1 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/switch/index.d.ts.map +1 -0
- package/dist/components/switch/index.js +7 -0
- package/dist/components/switch/index.js.map +1 -0
- package/dist/components/switch/switch.d.ts +22 -0
- package/dist/components/switch/switch.d.ts.map +1 -0
- package/dist/components/switch/switch.js +115 -0
- package/dist/components/switch/switch.js.map +1 -0
- package/dist/components/table/index.d.ts +2 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/index.js +7 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/table.d.ts +38 -0
- package/dist/components/table/table.d.ts.map +1 -0
- package/dist/components/table/table.js +258 -0
- package/dist/components/table/table.js.map +1 -0
- package/dist/components/tabs/index.d.ts +9 -0
- package/dist/components/tabs/index.d.ts.map +1 -0
- package/dist/components/tabs/index.js +9 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/tabs/tabs.d.ts +38 -0
- package/dist/components/tabs/tabs.d.ts.map +1 -0
- package/dist/components/tabs/tabs.js +162 -0
- package/dist/components/tabs/tabs.js.map +1 -0
- package/dist/components/textarea/index.d.ts +8 -0
- package/dist/components/textarea/index.d.ts.map +1 -0
- package/dist/components/textarea/index.js +7 -0
- package/dist/components/textarea/index.js.map +1 -0
- package/dist/components/textarea/textarea.d.ts +19 -0
- package/dist/components/textarea/textarea.d.ts.map +1 -0
- package/dist/components/textarea/textarea.js +109 -0
- package/dist/components/textarea/textarea.js.map +1 -0
- package/dist/components/toast/index.d.ts +8 -0
- package/dist/components/toast/index.d.ts.map +1 -0
- package/dist/components/toast/index.js +8 -0
- package/dist/components/toast/index.js.map +1 -0
- package/dist/components/toast/toast.d.ts +40 -0
- package/dist/components/toast/toast.d.ts.map +1 -0
- package/dist/components/toast/toast.js +176 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +8 -0
- package/dist/components/tooltip/index.d.ts.map +1 -0
- package/dist/components/tooltip/index.js +7 -0
- package/dist/components/tooltip/index.js.map +1 -0
- package/dist/components/tooltip/tooltip.d.ts +14 -0
- package/dist/components/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip.js +86 -0
- package/dist/components/tooltip/tooltip.js.map +1 -0
- package/dist/core/base.d.ts +29 -0
- package/dist/core/base.d.ts.map +1 -0
- package/dist/core/base.js +41 -0
- package/dist/core/base.js.map +1 -0
- package/dist/core/css.d.ts +6 -0
- package/dist/core/css.d.ts.map +1 -0
- package/dist/core/css.js +11 -0
- package/dist/core/css.js.map +1 -0
- package/dist/core/define.d.ts +8 -0
- package/dist/core/define.d.ts.map +1 -0
- package/dist/core/define.js +10 -0
- package/dist/core/define.js.map +1 -0
- package/dist/core/presets.d.ts +40 -0
- package/dist/core/presets.d.ts.map +1 -0
- package/dist/core/presets.js +80 -0
- package/dist/core/presets.js.map +1 -0
- package/dist/core/theme.d.ts +47 -0
- package/dist/core/theme.d.ts.map +1 -0
- package/dist/core/theme.js +76 -0
- package/dist/core/theme.js.map +1 -0
- package/dist/core/tokens.d.ts +36 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/core/tokens.js +83 -0
- package/dist/core/tokens.js.map +1 -0
- package/dist/docs/app.d.ts +37 -0
- package/dist/docs/app.d.ts.map +1 -0
- package/dist/fenix-ui.esm.js +4471 -0
- package/dist/fenix-ui.esm.js.map +1 -0
- package/dist/fenix-ui.umd.min.js +2022 -0
- package/dist/fenix-ui2.esm.js +82 -0
- package/dist/fenix-ui2.esm.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/auto-import.d.ts +18 -0
- package/dist/plugins/auto-import.d.ts.map +1 -0
- package/dist/plugins/auto-import.js +69 -0
- package/dist/plugins/auto-import.js.map +1 -0
- package/dist/plugins/index.d.ts +25 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +21 -0
- package/dist/plugins/index.js.map +1 -0
- package/package.json +169 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["import { FxTooltip, defineFxTooltip } from './tooltip';\n\nexport { FxTooltip };\n\n\ndefineFxTooltip();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'fx-tooltip': FxTooltip;\n }\n}\n\r\n\r\n"],"names":[],"mappings":";;AAKA,gBAAA;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FxElement } from '../../core/base';
|
|
2
|
+
/**
|
|
3
|
+
* <fx-tooltip> — Dica flutuante ao passar o mouse/focar no elemento.
|
|
4
|
+
*
|
|
5
|
+
* Atributos: content (texto da dica), position (top|bottom|left|right, padrão top).
|
|
6
|
+
* Slot padrão: elemento que dispara a dica.
|
|
7
|
+
*/
|
|
8
|
+
export declare class FxTooltip extends FxElement {
|
|
9
|
+
static styles: string;
|
|
10
|
+
static get observedAttributes(): string[];
|
|
11
|
+
protected render(): void;
|
|
12
|
+
}
|
|
13
|
+
export declare function defineFxTooltip(): typeof FxTooltip;
|
|
14
|
+
//# sourceMappingURL=tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/tooltip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;GAKG;AACH,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAgB,MAAM,SA6DpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;cAEkB,MAAM,IAAI,IAAI;CAOlC;AAED,wBAAgB,eAAe,IAAI,OAAO,SAAS,CAElD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { FxElement } from "../../core/base.js";
|
|
2
|
+
import { css } from "../../core/css.js";
|
|
3
|
+
import { defineElement } from "../../core/define.js";
|
|
4
|
+
const _FxTooltip = class _FxTooltip extends FxElement {
|
|
5
|
+
static get observedAttributes() {
|
|
6
|
+
return ["content", "position"];
|
|
7
|
+
}
|
|
8
|
+
render() {
|
|
9
|
+
const content = this.getAttr("content");
|
|
10
|
+
this.setTemplate(`
|
|
11
|
+
<slot></slot>
|
|
12
|
+
<span class="bubble" part="bubble" role="tooltip">${content}</span>
|
|
13
|
+
`);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
_FxTooltip.styles = css`
|
|
17
|
+
:host {
|
|
18
|
+
position: relative;
|
|
19
|
+
display: inline-flex;
|
|
20
|
+
font-family: var(--fx-font-family);
|
|
21
|
+
}
|
|
22
|
+
.bubble {
|
|
23
|
+
position: absolute;
|
|
24
|
+
background: var(--fx-text-default, #1e293b);
|
|
25
|
+
color: var(--fx-surface-background, #fff);
|
|
26
|
+
font-size: calc(var(--fx-font-size, 14px) - 2px);
|
|
27
|
+
line-height: 1.45;
|
|
28
|
+
padding: var(--fx-space-xs) var(--fx-space-md);
|
|
29
|
+
border-radius: var(--fx-radius-sm);
|
|
30
|
+
box-shadow: var(--fx-shadow-md);
|
|
31
|
+
width: max-content;
|
|
32
|
+
min-width: 60px;
|
|
33
|
+
max-width: var(--fx-tooltip-max-width, 320px);
|
|
34
|
+
white-space: normal;
|
|
35
|
+
text-align: center;
|
|
36
|
+
opacity: 0;
|
|
37
|
+
visibility: hidden;
|
|
38
|
+
transition: opacity var(--fx-motion-duration-fast) var(--fx-motion-easing);
|
|
39
|
+
z-index: var(--fx-z-tooltip, 1050);
|
|
40
|
+
pointer-events: none;
|
|
41
|
+
}
|
|
42
|
+
:host(:hover) .bubble,
|
|
43
|
+
:host(:focus-within) .bubble {
|
|
44
|
+
opacity: 1;
|
|
45
|
+
visibility: visible;
|
|
46
|
+
}
|
|
47
|
+
/* position top (padrão) */
|
|
48
|
+
.bubble { bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%); }
|
|
49
|
+
.bubble::after {
|
|
50
|
+
content: '';
|
|
51
|
+
position: absolute;
|
|
52
|
+
top: 100%;
|
|
53
|
+
left: 50%;
|
|
54
|
+
transform: translateX(-50%);
|
|
55
|
+
border: 5px solid transparent;
|
|
56
|
+
border-top-color: var(--fx-text-default, #1e293b);
|
|
57
|
+
}
|
|
58
|
+
/* bottom */
|
|
59
|
+
:host([position='bottom']) .bubble { bottom: auto; top: calc(100% + 6px); }
|
|
60
|
+
:host([position='bottom']) .bubble::after { top: auto; bottom: 100%; border-top-color: transparent; border-bottom-color: var(--fx-text-default, #1e293b); }
|
|
61
|
+
/* left */
|
|
62
|
+
:host([position='left']) .bubble {
|
|
63
|
+
right: calc(100% + 6px); left: auto; top: 50%; bottom: auto; transform: translateY(-50%);
|
|
64
|
+
}
|
|
65
|
+
:host([position='left']) .bubble::after {
|
|
66
|
+
top: 50%; left: 100%; transform: translateY(-50%);
|
|
67
|
+
border: 5px solid transparent; border-left-color: var(--fx-text-default, #1e293b);
|
|
68
|
+
}
|
|
69
|
+
/* right */
|
|
70
|
+
:host([position='right']) .bubble {
|
|
71
|
+
right: auto; left: calc(100% + 6px); top: 50%; bottom: auto; transform: translateY(-50%);
|
|
72
|
+
}
|
|
73
|
+
:host([position='right']) .bubble::after {
|
|
74
|
+
top: 50%; left: auto; right: 100%; transform: translateY(-50%);
|
|
75
|
+
border: 5px solid transparent; border-right-color: var(--fx-text-default, #1e293b);
|
|
76
|
+
}
|
|
77
|
+
`;
|
|
78
|
+
let FxTooltip = _FxTooltip;
|
|
79
|
+
function defineFxTooltip() {
|
|
80
|
+
return defineElement("fx-tooltip", FxTooltip);
|
|
81
|
+
}
|
|
82
|
+
export {
|
|
83
|
+
FxTooltip,
|
|
84
|
+
defineFxTooltip
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.js","sources":["../../../src/components/tooltip/tooltip.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-tooltip> — Dica flutuante ao passar o mouse/focar no elemento.\n *\n * Atributos: content (texto da dica), position (top|bottom|left|right, padrão top).\n * Slot padrão: elemento que dispara a dica.\n */\nexport class FxTooltip extends FxElement {\n static override styles = css`\n :host {\n position: relative;\n display: inline-flex;\n font-family: var(--fx-font-family);\n }\n .bubble {\n position: absolute;\n background: var(--fx-text-default, #1e293b);\n color: var(--fx-surface-background, #fff);\n font-size: calc(var(--fx-font-size, 14px) - 2px);\n line-height: 1.45;\n padding: var(--fx-space-xs) var(--fx-space-md);\n border-radius: var(--fx-radius-sm);\n box-shadow: var(--fx-shadow-md);\n width: max-content;\n min-width: 60px;\n max-width: var(--fx-tooltip-max-width, 320px);\n white-space: normal;\n text-align: center;\n opacity: 0;\n visibility: hidden;\n transition: opacity var(--fx-motion-duration-fast) var(--fx-motion-easing);\n z-index: var(--fx-z-tooltip, 1050);\n pointer-events: none;\n }\n :host(:hover) .bubble,\n :host(:focus-within) .bubble {\n opacity: 1;\n visibility: visible;\n }\n /* position top (padrão) */\n .bubble { bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%); }\n .bubble::after {\n content: '';\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border: 5px solid transparent;\n border-top-color: var(--fx-text-default, #1e293b);\n }\n /* bottom */\n :host([position='bottom']) .bubble { bottom: auto; top: calc(100% + 6px); }\n :host([position='bottom']) .bubble::after { top: auto; bottom: 100%; border-top-color: transparent; border-bottom-color: var(--fx-text-default, #1e293b); }\n /* left */\n :host([position='left']) .bubble {\n right: calc(100% + 6px); left: auto; top: 50%; bottom: auto; transform: translateY(-50%);\n }\n :host([position='left']) .bubble::after {\n top: 50%; left: 100%; transform: translateY(-50%);\n border: 5px solid transparent; border-left-color: var(--fx-text-default, #1e293b);\n }\n /* right */\n :host([position='right']) .bubble {\n right: auto; left: calc(100% + 6px); top: 50%; bottom: auto; transform: translateY(-50%);\n }\n :host([position='right']) .bubble::after {\n top: 50%; left: auto; right: 100%; transform: translateY(-50%);\n border: 5px solid transparent; border-right-color: var(--fx-text-default, #1e293b);\n }\n `;\n\n static override get observedAttributes(): string[] {\n return ['content', 'position'];\n }\n\n protected override render(): void {\n const content = this.getAttr('content');\n this.setTemplate(`\n <slot></slot>\n <span class=\"bubble\" part=\"bubble\" role=\"tooltip\">${content}</span>\n `);\n }\n}\n\nexport function defineFxTooltip(): typeof FxTooltip {\n return defineElement('fx-tooltip', FxTooltip);\n}\n"],"names":[],"mappings":";;;AAUO,MAAM,aAAN,MAAM,mBAAkB,UAAU;AAAA,EAgEvC,WAAoB,qBAA+B;AACjD,WAAO,CAAC,WAAW,UAAU;AAAA,EAC/B;AAAA,EAEmB,SAAe;AAChC,UAAM,UAAU,KAAK,QAAQ,SAAS;AACtC,SAAK,YAAY;AAAA;AAAA,0DAEqC,OAAO;AAAA,KAC5D;AAAA,EACH;AACF;AA1EE,WAAgB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADpB,IAAM,YAAN;AA6EA,SAAS,kBAAoC;AAClD,SAAO,cAAc,cAAc,SAAS;AAC9C;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infraestrutura base de Web Component do FenixUI.
|
|
3
|
+
*
|
|
4
|
+
* Todo componente estende `FxElement`, que:
|
|
5
|
+
* - cria o Shadow Root (isolamento de estrutura e CSS);
|
|
6
|
+
* - injeta o CSS (tokens via `var(--fx-*)`) + template em cada render;
|
|
7
|
+
* - re-renderiza quando atributos observados mudam.
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class FxElement extends HTMLElement {
|
|
10
|
+
/** CSS isolado no Shadow DOM. Deve usar apenas `var(--fx-*)`. */
|
|
11
|
+
static styles: string;
|
|
12
|
+
static get observedAttributes(): string[];
|
|
13
|
+
protected readonly root: ShadowRoot;
|
|
14
|
+
constructor();
|
|
15
|
+
/** Chamado quando um atributo observado muda. */
|
|
16
|
+
protected attributeChangedCallback(): void;
|
|
17
|
+
/** Chamado quando o elemento é anexado ao DOM. */
|
|
18
|
+
protected connectedCallback(): void;
|
|
19
|
+
/** Chamado quando o elemento é removido do DOM (limpeza de recursos). */
|
|
20
|
+
protected disconnectedCallback(): void;
|
|
21
|
+
protected hasAttr(name: string): boolean;
|
|
22
|
+
protected getAttr(name: string, fallback?: string): string;
|
|
23
|
+
protected toggleAttr(name: string, on: boolean): void;
|
|
24
|
+
/** Injeta `<style>` + template no Shadow DOM. */
|
|
25
|
+
protected setTemplate(html: string): void;
|
|
26
|
+
/** Implementado por cada componente. */
|
|
27
|
+
protected abstract render(): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/core/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8BAAsB,SAAU,SAAQ,WAAW;IACjD,iEAAiE;IACjE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAE3B,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;;IAOpC,iDAAiD;IACjD,SAAS,CAAC,wBAAwB,IAAI,IAAI;IAI1C,kDAAkD;IAClD,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAInC,yEAAyE;IACzE,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAItC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM;IAItD,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI;IAKrD,iDAAiD;IACjD,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzC,wCAAwC;IACxC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI;CAClC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const _FxElement = class _FxElement extends HTMLElement {
|
|
2
|
+
static get observedAttributes() {
|
|
3
|
+
return [];
|
|
4
|
+
}
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this.root = this.attachShadow({ mode: "open" });
|
|
8
|
+
}
|
|
9
|
+
/** Chamado quando um atributo observado muda. */
|
|
10
|
+
attributeChangedCallback() {
|
|
11
|
+
if (this.isConnected) this.render();
|
|
12
|
+
}
|
|
13
|
+
/** Chamado quando o elemento é anexado ao DOM. */
|
|
14
|
+
connectedCallback() {
|
|
15
|
+
this.render();
|
|
16
|
+
}
|
|
17
|
+
/** Chamado quando o elemento é removido do DOM (limpeza de recursos). */
|
|
18
|
+
disconnectedCallback() {
|
|
19
|
+
}
|
|
20
|
+
hasAttr(name) {
|
|
21
|
+
return this.hasAttribute(name);
|
|
22
|
+
}
|
|
23
|
+
getAttr(name, fallback = "") {
|
|
24
|
+
return this.getAttribute(name) ?? fallback;
|
|
25
|
+
}
|
|
26
|
+
toggleAttr(name, on) {
|
|
27
|
+
if (on) this.setAttribute(name, "");
|
|
28
|
+
else this.removeAttribute(name);
|
|
29
|
+
}
|
|
30
|
+
/** Injeta `<style>` + template no Shadow DOM. */
|
|
31
|
+
setTemplate(html) {
|
|
32
|
+
const styles = this.constructor.styles;
|
|
33
|
+
this.root.innerHTML = `<style>${styles}</style>${html}`;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
_FxElement.styles = "";
|
|
37
|
+
let FxElement = _FxElement;
|
|
38
|
+
export {
|
|
39
|
+
FxElement
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sources":["../../src/core/base.ts"],"sourcesContent":["/**\n * Infraestrutura base de Web Component do FenixUI.\n *\n * Todo componente estende `FxElement`, que:\n * - cria o Shadow Root (isolamento de estrutura e CSS);\n * - injeta o CSS (tokens via `var(--fx-*)`) + template em cada render;\n * - re-renderiza quando atributos observados mudam.\n */\n\nexport abstract class FxElement extends HTMLElement {\n /** CSS isolado no Shadow DOM. Deve usar apenas `var(--fx-*)`. */\n static styles: string = '';\n\n static get observedAttributes(): string[] {\n return [];\n }\n\n protected readonly root: ShadowRoot;\n\n constructor() {\n super();\n this.root = this.attachShadow({ mode: 'open' });\n }\n\n /** Chamado quando um atributo observado muda. */\n protected attributeChangedCallback(): void {\n if (this.isConnected) this.render();\n }\n\n /** Chamado quando o elemento é anexado ao DOM. */\n protected connectedCallback(): void {\n this.render();\n }\n\n /** Chamado quando o elemento é removido do DOM (limpeza de recursos). */\n protected disconnectedCallback(): void {\n /* noop — sobrescreva para limpar observers/listeners. */\n }\n\n protected hasAttr(name: string): boolean {\n return this.hasAttribute(name);\n }\n\n protected getAttr(name: string, fallback = ''): string {\n return this.getAttribute(name) ?? fallback;\n }\n\n protected toggleAttr(name: string, on: boolean): void {\n if (on) this.setAttribute(name, '');\n else this.removeAttribute(name);\n }\n\n /** Injeta `<style>` + template no Shadow DOM. */\n protected setTemplate(html: string): void {\n const styles = (this.constructor as typeof FxElement).styles;\n this.root.innerHTML = `<style>${styles}</style>${html}`;\n }\n\n /** Implementado por cada componente. */\n protected abstract render(): void;\n}"],"names":[],"mappings":"AASO,MAAe,aAAf,MAAe,mBAAkB,YAAY;AAAA,EAIlD,WAAW,qBAA+B;AACxC,WAAO,CAAA;AAAA,EACT;AAAA,EAIA,cAAc;AACZ,UAAA;AACA,SAAK,OAAO,KAAK,aAAa,EAAE,MAAM,QAAQ;AAAA,EAChD;AAAA;AAAA,EAGU,2BAAiC;AACzC,QAAI,KAAK,YAAa,MAAK,OAAA;AAAA,EAC7B;AAAA;AAAA,EAGU,oBAA0B;AAClC,SAAK,OAAA;AAAA,EACP;AAAA;AAAA,EAGU,uBAA6B;AAAA,EAEvC;AAAA,EAEU,QAAQ,MAAuB;AACvC,WAAO,KAAK,aAAa,IAAI;AAAA,EAC/B;AAAA,EAEU,QAAQ,MAAc,WAAW,IAAY;AACrD,WAAO,KAAK,aAAa,IAAI,KAAK;AAAA,EACpC;AAAA,EAEU,WAAW,MAAc,IAAmB;AACpD,QAAI,GAAI,MAAK,aAAa,MAAM,EAAE;AAAA,QAC7B,MAAK,gBAAgB,IAAI;AAAA,EAChC;AAAA;AAAA,EAGU,YAAY,MAAoB;AACxC,UAAM,SAAU,KAAK,YAAiC;AACtD,SAAK,KAAK,YAAY,UAAU,MAAM,WAAW,IAAI;AAAA,EACvD;AAIF;AAjDE,WAAO,SAAiB;AAFnB,IAAe,YAAf;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Utilitários CSS compartilhados. */
|
|
2
|
+
/** Tagged template que apenas concatena — mantém nomes de classes e tokens legíveis. */
|
|
3
|
+
export declare function css(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
4
|
+
/** Converte `duration-fast` em `durationFast`. */
|
|
5
|
+
export declare function kebabToCamel(value: string): string;
|
|
6
|
+
//# sourceMappingURL=css.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/core/css.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,wFAAwF;AACxF,wBAAgB,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAE/E;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
package/dist/core/css.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function css(strings, ...values) {
|
|
2
|
+
return strings.reduce((acc, part, i) => acc + part + (i < values.length ? String(values[i]) : ""), "");
|
|
3
|
+
}
|
|
4
|
+
function kebabToCamel(value) {
|
|
5
|
+
return value.replace(/-+([a-z])/g, (_, c) => c.toUpperCase());
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
css,
|
|
9
|
+
kebabToCamel
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.js","sources":["../../src/core/css.ts"],"sourcesContent":["/** Utilitários CSS compartilhados. */\n\n/** Tagged template que apenas concatena — mantém nomes de classes e tokens legíveis. */\nexport function css(strings: TemplateStringsArray, ...values: unknown[]): string {\n return strings.reduce((acc, part, i) => acc + part + (i < values.length ? String(values[i]) : ''), '');\n}\n\n/** Converte `duration-fast` em `durationFast`. */\nexport function kebabToCamel(value: string): string {\n return value.replace(/-+([a-z])/g, (_, c: string) => c.toUpperCase());\n}"],"names":[],"mappings":"AAGO,SAAS,IAAI,YAAkC,QAA2B;AAC/E,SAAO,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,MAAM,QAAQ,IAAI,OAAO,SAAS,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK,EAAE;AACvG;AAGO,SAAS,aAAa,OAAuB;AAClD,SAAO,MAAM,QAAQ,cAAc,CAAC,GAAG,MAAc,EAAE,aAAa;AACtE;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registro seguro de Custom Elements.
|
|
3
|
+
*
|
|
4
|
+
* Usa `customElements.get()` antes de `define()` para que múltiplos imports
|
|
5
|
+
* (index + subpath, bundler + CDN) não lancem erro de re-definição.
|
|
6
|
+
*/
|
|
7
|
+
export declare function defineElement<T extends typeof HTMLElement>(tag: string, ctor: T): T;
|
|
8
|
+
//# sourceMappingURL=define.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/core/define.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,OAAO,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAKnF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function defineElement(tag, ctor) {
|
|
2
|
+
if (typeof customElements !== "undefined" && !customElements.get(tag)) {
|
|
3
|
+
customElements.define(tag, ctor);
|
|
4
|
+
}
|
|
5
|
+
return customElements.get(tag) ?? ctor;
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
defineElement
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=define.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.js","sources":["../../src/core/define.ts"],"sourcesContent":["/**\n * Registro seguro de Custom Elements.\n *\n * Usa `customElements.get()` antes de `define()` para que múltiplos imports\n * (index + subpath, bundler + CDN) não lancem erro de re-definição.\n */\nexport function defineElement<T extends typeof HTMLElement>(tag: string, ctor: T): T {\n if (typeof customElements !== 'undefined' && !customElements.get(tag)) {\n customElements.define(tag, ctor);\n }\n return (customElements.get(tag) as T) ?? ctor;\n}"],"names":[],"mappings":"AAMO,SAAS,cAA4C,KAAa,MAAY;AACnF,MAAI,OAAO,mBAAmB,eAAe,CAAC,eAAe,IAAI,GAAG,GAAG;AACrE,mBAAe,OAAO,KAAK,IAAI;AAAA,EACjC;AACA,SAAQ,eAAe,IAAI,GAAG,KAAW;AAC3C;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Presets de tema prontos para uso.
|
|
3
|
+
*
|
|
4
|
+
* Cada preset é um override parcial profundo sobre os tokens base.
|
|
5
|
+
* Combina com o modo claro/escuro: `applyPreset('seiya', 'dark')`.
|
|
6
|
+
*/
|
|
7
|
+
import { type DeepPartial, type FenixTokens } from './tokens';
|
|
8
|
+
export interface FenixPreset {
|
|
9
|
+
/** Identificador usado em `applyPreset(name)`. */
|
|
10
|
+
name: string;
|
|
11
|
+
/** Rótulo amigável para UIs (documentação/seletor). */
|
|
12
|
+
label: string;
|
|
13
|
+
/** Override parcial de tokens aplicado sobre o tema base. */
|
|
14
|
+
tokens: DeepPartial<FenixTokens>;
|
|
15
|
+
}
|
|
16
|
+
export declare const themePresets: {
|
|
17
|
+
readonly fenix: FenixPreset;
|
|
18
|
+
readonly seiya: FenixPreset;
|
|
19
|
+
readonly shiryu: FenixPreset;
|
|
20
|
+
readonly hyoga: FenixPreset;
|
|
21
|
+
readonly shun: FenixPreset;
|
|
22
|
+
readonly ikki: FenixPreset;
|
|
23
|
+
readonly aiolia: FenixPreset;
|
|
24
|
+
};
|
|
25
|
+
/** Lista todos os presets registrados (inclui os customizados). */
|
|
26
|
+
export declare function listPresets(): FenixPreset[];
|
|
27
|
+
/**
|
|
28
|
+
* Registra um preset personalizado, tornando-o disponível em `applyPreset`.
|
|
29
|
+
* Útil para o usuário criar seu próprio tema e reutilizá-lo na aplicação.
|
|
30
|
+
*/
|
|
31
|
+
export declare function defineCustomPreset(name: string, label: string, tokens: DeepPartial<FenixTokens>): FenixPreset;
|
|
32
|
+
/**
|
|
33
|
+
* Aplica um preset + modo de cor em runtime.
|
|
34
|
+
* @returns o estado ativo ({ theme }) repassado por `configure`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function applyPreset(presetName: string, mode?: 'light' | 'dark'): {
|
|
37
|
+
theme: 'light' | 'dark';
|
|
38
|
+
preset: string;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CAClC;AAaD,eAAO,MAAM,YAAY;;;;;;;;CAuDf,CAAC;AAEX,mEAAmE;AACnE,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAC/B,WAAW,CAEb;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,OAAO,GAAG,MAAgB,GAC/B;IAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAI7C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { configure } from "./theme.js";
|
|
2
|
+
const registry = /* @__PURE__ */ new Map();
|
|
3
|
+
function register(preset) {
|
|
4
|
+
registry.set(preset.name, preset);
|
|
5
|
+
return preset;
|
|
6
|
+
}
|
|
7
|
+
const themePresets = {
|
|
8
|
+
fenix: register({
|
|
9
|
+
name: "fenix",
|
|
10
|
+
label: "Fenix (padrão)",
|
|
11
|
+
tokens: {}
|
|
12
|
+
}),
|
|
13
|
+
seiya: register({
|
|
14
|
+
name: "seiya",
|
|
15
|
+
label: "Seiya",
|
|
16
|
+
tokens: {
|
|
17
|
+
color: { primary: "#e11d48", secondary: "#fb7185", info: "#f43f5e", danger: "#be123c" },
|
|
18
|
+
radius: { sm: "6px", md: "10px", lg: "16px" }
|
|
19
|
+
}
|
|
20
|
+
}),
|
|
21
|
+
shiryu: register({
|
|
22
|
+
name: "shiryu",
|
|
23
|
+
label: "Shiryu",
|
|
24
|
+
tokens: {
|
|
25
|
+
color: { primary: "#0d9488", secondary: "#2dd4bf", success: "#059669", info: "#14b8a6" },
|
|
26
|
+
radius: { sm: "4px", md: "8px", lg: "14px" }
|
|
27
|
+
}
|
|
28
|
+
}),
|
|
29
|
+
hyoga: register({
|
|
30
|
+
name: "hyoga",
|
|
31
|
+
label: "Hyoga",
|
|
32
|
+
tokens: {
|
|
33
|
+
color: { primary: "#0284c7", secondary: "#38bdf8", info: "#06b6d4", danger: "#e11d48" },
|
|
34
|
+
surface: { surface: "#f0f9ff", "surface-hover": "#e0f2fe" },
|
|
35
|
+
radius: { sm: "8px", md: "12px", lg: "18px" }
|
|
36
|
+
}
|
|
37
|
+
}),
|
|
38
|
+
shun: register({
|
|
39
|
+
name: "shun",
|
|
40
|
+
label: "Shun",
|
|
41
|
+
tokens: {
|
|
42
|
+
color: { primary: "#db2777", secondary: "#f472b6", info: "#ec4899", warning: "#c026d3" },
|
|
43
|
+
radius: { sm: "10px", md: "14px", lg: "20px" }
|
|
44
|
+
}
|
|
45
|
+
}),
|
|
46
|
+
ikki: register({
|
|
47
|
+
name: "ikki",
|
|
48
|
+
label: "Ikki",
|
|
49
|
+
tokens: {
|
|
50
|
+
color: { primary: "#ea580c", secondary: "#fb923c", danger: "#dc2626", warning: "#f59e0b" },
|
|
51
|
+
radius: { sm: "2px", md: "4px", lg: "6px" }
|
|
52
|
+
}
|
|
53
|
+
}),
|
|
54
|
+
aiolia: register({
|
|
55
|
+
name: "aiolia",
|
|
56
|
+
label: "Aiolia",
|
|
57
|
+
tokens: {
|
|
58
|
+
color: { primary: "#b45309", secondary: "#f59e0b", warning: "#eab308", info: "#84cc16" },
|
|
59
|
+
radius: { sm: "6px", md: "12px", lg: "20px" }
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
};
|
|
63
|
+
function listPresets() {
|
|
64
|
+
return [...registry.values()];
|
|
65
|
+
}
|
|
66
|
+
function defineCustomPreset(name, label, tokens) {
|
|
67
|
+
return register({ name, label, tokens });
|
|
68
|
+
}
|
|
69
|
+
function applyPreset(presetName, mode = "light") {
|
|
70
|
+
const preset = registry.get(presetName) ?? registry.get("fenix");
|
|
71
|
+
const state = configure({ theme: mode, tokens: preset.tokens });
|
|
72
|
+
return { ...state, preset: preset.name };
|
|
73
|
+
}
|
|
74
|
+
export {
|
|
75
|
+
applyPreset,
|
|
76
|
+
defineCustomPreset,
|
|
77
|
+
listPresets,
|
|
78
|
+
themePresets
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sources":["../../src/core/presets.ts"],"sourcesContent":["/**\n * Presets de tema prontos para uso.\n *\n * Cada preset é um override parcial profundo sobre os tokens base.\n * Combina com o modo claro/escuro: `applyPreset('seiya', 'dark')`.\n */\n\nimport { configure } from './theme';\nimport { type DeepPartial, type FenixTokens } from './tokens';\n\nexport interface FenixPreset {\n /** Identificador usado em `applyPreset(name)`. */\n name: string;\n /** Rótulo amigável para UIs (documentação/seletor). */\n label: string;\n /** Override parcial de tokens aplicado sobre o tema base. */\n tokens: DeepPartial<FenixTokens>;\n}\n\nconst registry = new Map<string, FenixPreset>();\n\nfunction register(preset: FenixPreset): FenixPreset {\n registry.set(preset.name, preset);\n return preset;\n}\n\n/* ------------------------------------------------------------------ */\n/* Cavaleiros do Zodíaco ✨ */\n/* ------------------------------------------------------------------ */\n\nexport const themePresets = {\n fenix: register({\n name: 'fenix',\n label: 'Fenix (padrão)',\n tokens: {},\n }),\n seiya: register({\n name: 'seiya',\n label: 'Seiya',\n tokens: {\n color: { primary: '#e11d48', secondary: '#fb7185', info: '#f43f5e', danger: '#be123c' },\n radius: { sm: '6px', md: '10px', lg: '16px' },\n },\n }),\n shiryu: register({\n name: 'shiryu',\n label: 'Shiryu',\n tokens: {\n color: { primary: '#0d9488', secondary: '#2dd4bf', success: '#059669', info: '#14b8a6' },\n radius: { sm: '4px', md: '8px', lg: '14px' },\n },\n }),\n hyoga: register({\n name: 'hyoga',\n label: 'Hyoga',\n tokens: {\n color: { primary: '#0284c7', secondary: '#38bdf8', info: '#06b6d4', danger: '#e11d48' },\n surface: { surface: '#f0f9ff', 'surface-hover': '#e0f2fe' },\n radius: { sm: '8px', md: '12px', lg: '18px' },\n },\n }),\n shun: register({\n name: 'shun',\n label: 'Shun',\n tokens: {\n color: { primary: '#db2777', secondary: '#f472b6', info: '#ec4899', warning: '#c026d3' },\n radius: { sm: '10px', md: '14px', lg: '20px' },\n },\n }),\n ikki: register({\n name: 'ikki',\n label: 'Ikki',\n tokens: {\n color: { primary: '#ea580c', secondary: '#fb923c', danger: '#dc2626', warning: '#f59e0b' },\n radius: { sm: '2px', md: '4px', lg: '6px' },\n },\n }),\n aiolia: register({\n name: 'aiolia',\n label: 'Aiolia',\n tokens: {\n color: { primary: '#b45309', secondary: '#f59e0b', warning: '#eab308', info: '#84cc16' },\n radius: { sm: '6px', md: '12px', lg: '20px' },\n },\n }),\n} as const;\n\n/** Lista todos os presets registrados (inclui os customizados). */\nexport function listPresets(): FenixPreset[] {\n return [...registry.values()];\n}\n\n/**\n * Registra um preset personalizado, tornando-o disponível em `applyPreset`.\n * Útil para o usuário criar seu próprio tema e reutilizá-lo na aplicação.\n */\nexport function defineCustomPreset(\n name: string,\n label: string,\n tokens: DeepPartial<FenixTokens>,\n): FenixPreset {\n return register({ name, label, tokens });\n}\n\n/**\n * Aplica um preset + modo de cor em runtime.\n * @returns o estado ativo ({ theme }) repassado por `configure`.\n */\nexport function applyPreset(\n presetName: string,\n mode: 'light' | 'dark' = 'light',\n): { theme: 'light' | 'dark'; preset: string } {\n const preset = registry.get(presetName) ?? registry.get('fenix')!;\n const state = configure({ theme: mode, tokens: preset.tokens });\n return { ...state, preset: preset.name };\n}"],"names":[],"mappings":";AAmBA,MAAM,+BAAe,IAAA;AAErB,SAAS,SAAS,QAAkC;AAClD,WAAS,IAAI,OAAO,MAAM,MAAM;AAChC,SAAO;AACT;AAMO,MAAM,eAAe;AAAA,EAC1B,OAAO,SAAS;AAAA,IACd,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ,CAAA;AAAA,EAAC,CACV;AAAA,EACD,OAAO,SAAS;AAAA,IACd,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO,EAAE,SAAS,WAAW,WAAW,WAAW,MAAM,WAAW,QAAQ,UAAA;AAAA,MAC5E,QAAQ,EAAE,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAA;AAAA,IAAO;AAAA,EAC9C,CACD;AAAA,EACD,QAAQ,SAAS;AAAA,IACf,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO,EAAE,SAAS,WAAW,WAAW,WAAW,SAAS,WAAW,MAAM,UAAA;AAAA,MAC7E,QAAQ,EAAE,IAAI,OAAO,IAAI,OAAO,IAAI,OAAA;AAAA,IAAO;AAAA,EAC7C,CACD;AAAA,EACD,OAAO,SAAS;AAAA,IACd,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO,EAAE,SAAS,WAAW,WAAW,WAAW,MAAM,WAAW,QAAQ,UAAA;AAAA,MAC5E,SAAS,EAAE,SAAS,WAAW,iBAAiB,UAAA;AAAA,MAChD,QAAQ,EAAE,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAA;AAAA,IAAO;AAAA,EAC9C,CACD;AAAA,EACD,MAAM,SAAS;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO,EAAE,SAAS,WAAW,WAAW,WAAW,MAAM,WAAW,SAAS,UAAA;AAAA,MAC7E,QAAQ,EAAE,IAAI,QAAQ,IAAI,QAAQ,IAAI,OAAA;AAAA,IAAO;AAAA,EAC/C,CACD;AAAA,EACD,MAAM,SAAS;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO,EAAE,SAAS,WAAW,WAAW,WAAW,QAAQ,WAAW,SAAS,UAAA;AAAA,MAC/E,QAAQ,EAAE,IAAI,OAAO,IAAI,OAAO,IAAI,MAAA;AAAA,IAAM;AAAA,EAC5C,CACD;AAAA,EACD,QAAQ,SAAS;AAAA,IACf,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO,EAAE,SAAS,WAAW,WAAW,WAAW,SAAS,WAAW,MAAM,UAAA;AAAA,MAC7E,QAAQ,EAAE,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAA;AAAA,IAAO;AAAA,EAC9C,CACD;AACH;AAGO,SAAS,cAA6B;AAC3C,SAAO,CAAC,GAAG,SAAS,QAAQ;AAC9B;AAMO,SAAS,mBACd,MACA,OACA,QACa;AACb,SAAO,SAAS,EAAE,MAAM,OAAO,QAAQ;AACzC;AAMO,SAAS,YACd,YACA,OAAyB,SACoB;AAC7C,QAAM,SAAS,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO;AAC/D,QAAM,QAAQ,UAAU,EAAE,OAAO,MAAM,QAAQ,OAAO,QAAQ;AAC9D,SAAO,EAAE,GAAG,OAAO,QAAQ,OAAO,KAAA;AACpC;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motor de Tema e API global do FenixUI.
|
|
3
|
+
*
|
|
4
|
+
* Aplica os Design Tokens como CSS Custom Properties (`--fx-*`) no elemento
|
|
5
|
+
* raiz. Como custom properties atravessam o Shadow DOM, TODOS os componentes
|
|
6
|
+
* passam a reagir ao novo tema em runtime, sem recompilar.
|
|
7
|
+
*/
|
|
8
|
+
import { type FenixTokens, type DeepPartial } from './tokens';
|
|
9
|
+
export declare const VERSION = "0.1.0";
|
|
10
|
+
export type ThemeName = 'light' | 'dark';
|
|
11
|
+
/** Mescla tokens por grupo, permitindo override parcial (ex.: só `color.primary`). */
|
|
12
|
+
export declare function deepMerge<T>(base: T, override: DeepPartial<T> | null): T;
|
|
13
|
+
/** Achatamento de tokens em pares `--fx-{grupo}-{chave}` -> valor. */
|
|
14
|
+
export declare function tokenCssVars(tokens: FenixTokens): Record<string, string>;
|
|
15
|
+
/** Aplica tokens no DOM (padrão: `:root`). Emite evento para notificar a aplicação. */
|
|
16
|
+
export declare function applyTokens(themeName: ThemeName, overrides: DeepPartial<FenixTokens> | null, target?: HTMLElement): void;
|
|
17
|
+
export interface ConfigureOptions {
|
|
18
|
+
theme?: ThemeName;
|
|
19
|
+
tokens?: DeepPartial<FenixTokens>;
|
|
20
|
+
}
|
|
21
|
+
/** Configura a biblioteca: tema e/ou tokens. Retorna o estado ativo. */
|
|
22
|
+
export declare function configure(options?: ConfigureOptions, target?: HTMLElement): {
|
|
23
|
+
theme: ThemeName;
|
|
24
|
+
};
|
|
25
|
+
/** Troca o tema para claro/escuro em runtime. */
|
|
26
|
+
export declare function theme(name: ThemeName): {
|
|
27
|
+
theme: ThemeName;
|
|
28
|
+
};
|
|
29
|
+
/** Define tokens customizados (override parcial profundo). */
|
|
30
|
+
export declare function setTokens(tokens: DeepPartial<FenixTokens>): {
|
|
31
|
+
theme: ThemeName;
|
|
32
|
+
};
|
|
33
|
+
/** Volta ao tema claro padrão sem overrides. */
|
|
34
|
+
export declare function resetTheme(): {
|
|
35
|
+
theme: ThemeName;
|
|
36
|
+
};
|
|
37
|
+
/** Namespace público (uso via ESM ou via global `FenixUI` no bundle CDN). */
|
|
38
|
+
export declare const FenixUI: {
|
|
39
|
+
version: string;
|
|
40
|
+
configure: typeof configure;
|
|
41
|
+
theme: typeof theme;
|
|
42
|
+
setTokens: typeof setTokens;
|
|
43
|
+
resetTheme: typeof resetTheme;
|
|
44
|
+
tokenCssVars: typeof tokenCssVars;
|
|
45
|
+
deepMerge: typeof deepMerge;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/core/theme.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA6B,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAGzF,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AASzC,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAYxE;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxE;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CACzB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,IAAI,EAC1C,MAAM,GAAE,WAAsC,GAC7C,IAAI,CAUN;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CACnC;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CACvB,OAAO,GAAE,gBAAqB,EAC9B,MAAM,GAAE,WAAsC,GAC7C;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAKtB;AAED,iDAAiD;AACjD,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAE3D;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAEhF;AAED,gDAAgD;AAChD,wBAAgB,UAAU,IAAI;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAIjD;AAED,6EAA6E;AAC7E,eAAO,MAAM,OAAO;;;;;;;;CAQnB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { darkTokens, defaultTokens } from "./tokens.js";
|
|
2
|
+
const PREFIX = "--fx";
|
|
3
|
+
const VERSION = "0.1.0";
|
|
4
|
+
let activeTheme = "light";
|
|
5
|
+
let activeOverrides = null;
|
|
6
|
+
function isPlainObject(value) {
|
|
7
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8
|
+
}
|
|
9
|
+
function deepMerge(base, override) {
|
|
10
|
+
if (!override) return base;
|
|
11
|
+
const out = { ...base };
|
|
12
|
+
for (const key of Object.keys(override)) {
|
|
13
|
+
const baseValue = base[key];
|
|
14
|
+
const overrideValue = override[key];
|
|
15
|
+
out[key] = isPlainObject(baseValue) && isPlainObject(overrideValue) ? deepMerge(baseValue, overrideValue) : overrideValue;
|
|
16
|
+
}
|
|
17
|
+
return out;
|
|
18
|
+
}
|
|
19
|
+
function tokenCssVars(tokens) {
|
|
20
|
+
const out = {};
|
|
21
|
+
for (const [group, values] of Object.entries(tokens)) {
|
|
22
|
+
for (const [key, value] of Object.entries(values)) {
|
|
23
|
+
out[`${PREFIX}-${group}-${key}`] = String(value);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
function applyTokens(themeName, overrides, target = document.documentElement) {
|
|
29
|
+
const base = themeName === "dark" ? darkTokens : defaultTokens;
|
|
30
|
+
const finalTokens = deepMerge(base, overrides);
|
|
31
|
+
const vars = tokenCssVars(finalTokens);
|
|
32
|
+
for (const [name, value] of Object.entries(vars)) {
|
|
33
|
+
target.style.setProperty(name, value);
|
|
34
|
+
}
|
|
35
|
+
if (typeof window !== "undefined") {
|
|
36
|
+
window.dispatchEvent(new CustomEvent("fenix:theme", { detail: { theme: themeName, tokens: finalTokens } }));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function configure(options = {}, target = document.documentElement) {
|
|
40
|
+
if (options.theme) activeTheme = options.theme;
|
|
41
|
+
if (options.tokens) activeOverrides = options.tokens;
|
|
42
|
+
applyTokens(activeTheme, activeOverrides, target);
|
|
43
|
+
return { theme: activeTheme };
|
|
44
|
+
}
|
|
45
|
+
function theme(name) {
|
|
46
|
+
return configure({ theme: name });
|
|
47
|
+
}
|
|
48
|
+
function setTokens(tokens) {
|
|
49
|
+
return configure({ tokens });
|
|
50
|
+
}
|
|
51
|
+
function resetTheme() {
|
|
52
|
+
activeTheme = "light";
|
|
53
|
+
activeOverrides = null;
|
|
54
|
+
return configure({ theme: "light" });
|
|
55
|
+
}
|
|
56
|
+
const FenixUI = {
|
|
57
|
+
version: VERSION,
|
|
58
|
+
configure,
|
|
59
|
+
theme,
|
|
60
|
+
setTokens,
|
|
61
|
+
resetTheme,
|
|
62
|
+
tokenCssVars,
|
|
63
|
+
deepMerge
|
|
64
|
+
};
|
|
65
|
+
export {
|
|
66
|
+
FenixUI,
|
|
67
|
+
VERSION,
|
|
68
|
+
applyTokens,
|
|
69
|
+
configure,
|
|
70
|
+
deepMerge,
|
|
71
|
+
resetTheme,
|
|
72
|
+
setTokens,
|
|
73
|
+
theme,
|
|
74
|
+
tokenCssVars
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sources":["../../src/core/theme.ts"],"sourcesContent":["/**\n * Motor de Tema e API global do FenixUI.\n *\n * Aplica os Design Tokens como CSS Custom Properties (`--fx-*`) no elemento\n * raiz. Como custom properties atravessam o Shadow DOM, TODOS os componentes\n * passam a reagir ao novo tema em runtime, sem recompilar.\n */\n\nimport { defaultTokens, darkTokens, type FenixTokens, type DeepPartial } from './tokens';\n\nconst PREFIX = '--fx';\nexport const VERSION = '0.1.0';\n\nexport type ThemeName = 'light' | 'dark';\n\nlet activeTheme: ThemeName = 'light';\nlet activeOverrides: DeepPartial<FenixTokens> | null = null;\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Mescla tokens por grupo, permitindo override parcial (ex.: só `color.primary`). */\nexport function deepMerge<T>(base: T, override: DeepPartial<T> | null): T {\n if (!override) return base;\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) };\n for (const key of Object.keys(override)) {\n const baseValue = (base as Record<string, unknown>)[key];\n const overrideValue = (override as Record<string, unknown>)[key];\n out[key] =\n isPlainObject(baseValue) && isPlainObject(overrideValue)\n ? deepMerge(baseValue, overrideValue)\n : (overrideValue as unknown);\n }\n return out as T;\n}\n\n/** Achatamento de tokens em pares `--fx-{grupo}-{chave}` -> valor. */\nexport function tokenCssVars(tokens: FenixTokens): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [group, values] of Object.entries(tokens)) {\n for (const [key, value] of Object.entries(values)) {\n out[`${PREFIX}-${group}-${key}`] = String(value);\n }\n }\n return out;\n}\n\n/** Aplica tokens no DOM (padrão: `:root`). Emite evento para notificar a aplicação. */\nexport function applyTokens(\n themeName: ThemeName,\n overrides: DeepPartial<FenixTokens> | null,\n target: HTMLElement = document.documentElement,\n): void {\n const base = themeName === 'dark' ? darkTokens : defaultTokens;\n const finalTokens = deepMerge(base, overrides);\n const vars = tokenCssVars(finalTokens);\n for (const [name, value] of Object.entries(vars)) {\n target.style.setProperty(name, value);\n }\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('fenix:theme', { detail: { theme: themeName, tokens: finalTokens } }));\n }\n}\n\nexport interface ConfigureOptions {\n theme?: ThemeName;\n tokens?: DeepPartial<FenixTokens>;\n}\n\n/** Configura a biblioteca: tema e/ou tokens. Retorna o estado ativo. */\nexport function configure(\n options: ConfigureOptions = {},\n target: HTMLElement = document.documentElement,\n): { theme: ThemeName } {\n if (options.theme) activeTheme = options.theme;\n if (options.tokens) activeOverrides = options.tokens;\n applyTokens(activeTheme, activeOverrides, target);\n return { theme: activeTheme };\n}\n\n/** Troca o tema para claro/escuro em runtime. */\nexport function theme(name: ThemeName): { theme: ThemeName } {\n return configure({ theme: name });\n}\n\n/** Define tokens customizados (override parcial profundo). */\nexport function setTokens(tokens: DeepPartial<FenixTokens>): { theme: ThemeName } {\n return configure({ tokens });\n}\n\n/** Volta ao tema claro padrão sem overrides. */\nexport function resetTheme(): { theme: ThemeName } {\n activeTheme = 'light';\n activeOverrides = null;\n return configure({ theme: 'light' });\n}\n\n/** Namespace público (uso via ESM ou via global `FenixUI` no bundle CDN). */\nexport const FenixUI = {\n version: VERSION,\n configure,\n theme,\n setTokens,\n resetTheme,\n tokenCssVars,\n deepMerge,\n};"],"names":[],"mappings":";AAUA,MAAM,SAAS;AACR,MAAM,UAAU;AAIvB,IAAI,cAAyB;AAC7B,IAAI,kBAAmD;AAEvD,SAAS,cAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAGO,SAAS,UAAa,MAAS,UAAoC;AACxE,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,MAA+B,EAAE,GAAI,KAAA;AAC3C,aAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACvC,UAAM,YAAa,KAAiC,GAAG;AACvD,UAAM,gBAAiB,SAAqC,GAAG;AAC/D,QAAI,GAAG,IACL,cAAc,SAAS,KAAK,cAAc,aAAa,IACnD,UAAU,WAAW,aAAa,IACjC;AAAA,EACT;AACA,SAAO;AACT;AAGO,SAAS,aAAa,QAA6C;AACxE,QAAM,MAA8B,CAAA;AACpC,aAAW,CAAC,OAAO,MAAM,KAAK,OAAO,QAAQ,MAAM,GAAG;AACpD,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,UAAI,GAAG,MAAM,IAAI,KAAK,IAAI,GAAG,EAAE,IAAI,OAAO,KAAK;AAAA,IACjD;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,YACd,WACA,WACA,SAAsB,SAAS,iBACzB;AACN,QAAM,OAAO,cAAc,SAAS,aAAa;AACjD,QAAM,cAAc,UAAU,MAAM,SAAS;AAC7C,QAAM,OAAO,aAAa,WAAW;AACrC,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAChD,WAAO,MAAM,YAAY,MAAM,KAAK;AAAA,EACtC;AACA,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,cAAc,IAAI,YAAY,eAAe,EAAE,QAAQ,EAAE,OAAO,WAAW,QAAQ,YAAA,EAAY,CAAG,CAAC;AAAA,EAC5G;AACF;AAQO,SAAS,UACd,UAA4B,CAAA,GAC5B,SAAsB,SAAS,iBACT;AACtB,MAAI,QAAQ,MAAO,eAAc,QAAQ;AACzC,MAAI,QAAQ,OAAQ,mBAAkB,QAAQ;AAC9C,cAAY,aAAa,iBAAiB,MAAM;AAChD,SAAO,EAAE,OAAO,YAAA;AAClB;AAGO,SAAS,MAAM,MAAuC;AAC3D,SAAO,UAAU,EAAE,OAAO,MAAM;AAClC;AAGO,SAAS,UAAU,QAAwD;AAChF,SAAO,UAAU,EAAE,QAAQ;AAC7B;AAGO,SAAS,aAAmC;AACjD,gBAAc;AACd,oBAAkB;AAClB,SAAO,UAAU,EAAE,OAAO,SAAS;AACrC;AAGO,MAAM,UAAU;AAAA,EACrB,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Tokens — camada de personalização do FenixUI.
|
|
3
|
+
*
|
|
4
|
+
* Os componentes consomem apenas `var(--fx-*)`, nunca valores fixos.
|
|
5
|
+
* Isso atravessa o Shadow DOM via CSS Custom Properties e permite
|
|
6
|
+
* trocar o tema em runtime sem recompilar a biblioteca.
|
|
7
|
+
*/
|
|
8
|
+
export interface FenixTokens {
|
|
9
|
+
/** Cores semânticas */ color: Record<'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info', string>;
|
|
10
|
+
/** Superfícies */ surface: Record<'background' | 'surface' | 'surface-hover', string>;
|
|
11
|
+
/** Texto */ text: Record<'default' | 'muted' | 'disabled', string>;
|
|
12
|
+
/** Bordas */ border: Record<'default' | 'hover', string>;
|
|
13
|
+
/** Tipografia */ font: Record<'family' | 'size' | 'weight' | 'line-height', string>;
|
|
14
|
+
/** Espaçamento */ space: Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', string>;
|
|
15
|
+
/** Radius */ radius: Record<'none' | 'sm' | 'md' | 'lg' | 'full', string>;
|
|
16
|
+
/** Altura dos controles (button, input, select, switch…). Personalizável por preset. */
|
|
17
|
+
size: Record<'sm' | 'md' | 'lg', string>;
|
|
18
|
+
/** Sombras */ shadow: Record<'sm' | 'md' | 'lg', string>;
|
|
19
|
+
/** Motion */ motion: Record<'duration-fast' | 'duration-normal' | 'easing', string>;
|
|
20
|
+
/** Efeitos visuais configuráveis (ripple, anel de foco dos campos). */
|
|
21
|
+
effect: {
|
|
22
|
+
ripple: string;
|
|
23
|
+
'focus-ring': string;
|
|
24
|
+
};
|
|
25
|
+
/** Z-index */ z: Record<'base' | 'dropdown' | 'modal' | 'toast', string>;
|
|
26
|
+
}
|
|
27
|
+
/** Tema claro (padrão). */
|
|
28
|
+
export declare const lightTokens: FenixTokens;
|
|
29
|
+
/** Tema escuro — os componentes reagem automaticamente às variáveis CSS. */
|
|
30
|
+
export declare const darkTokens: FenixTokens;
|
|
31
|
+
export declare const defaultTokens: FenixTokens;
|
|
32
|
+
/** Override parcial e profundo — permite customizar apenas alguns tokens por vez. */
|
|
33
|
+
export type DeepPartial<T> = {
|
|
34
|
+
[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/core/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,WAAW;IAC1B,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;IACnH,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,GAAG,SAAS,GAAG,eAAe,EAAE,MAAM,CAAC,CAAC;IACvF,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;IACpE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,EAAE,MAAM,CAAC,CAAC;IACrF,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3E,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3E,wFAAwF;IACxF,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1D,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,GAAG,iBAAiB,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrF,uEAAuE;IACvE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;CAC3E;AAED,2BAA2B;AAC3B,eAAO,MAAM,WAAW,EAAE,WAiDzB,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,UAAU,EAAE,WAyBxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAAyB,CAAC;AAEtD,qFAAqF;AACrF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC"}
|