@wrrdev/fenix-ui 1.1.13 → 1.1.14
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 +3 -3
- package/dist/components/autocomplete/autocomplete.d.ts +11 -5
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/autocomplete/autocomplete.js +18 -2
- package/dist/components/autocomplete/autocomplete.js.map +1 -1
- package/dist/components/button/button.d.ts +15 -0
- package/dist/components/button/button.d.ts.map +1 -1
- package/dist/components/button/button.js +20 -1
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/checkbox/checkbox.d.ts +20 -4
- package/dist/components/checkbox/checkbox.d.ts.map +1 -1
- package/dist/components/checkbox/checkbox.js +39 -2
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/datepicker/datepicker.d.ts +16 -2
- package/dist/components/datepicker/datepicker.d.ts.map +1 -1
- package/dist/components/datepicker/datepicker.js +46 -2
- package/dist/components/datepicker/datepicker.js.map +1 -1
- package/dist/components/fileupload/fileupload.d.ts +10 -2
- package/dist/components/fileupload/fileupload.d.ts.map +1 -1
- package/dist/components/fileupload/fileupload.js +17 -2
- package/dist/components/fileupload/fileupload.js.map +1 -1
- package/dist/components/floatlabel/floatlabel.d.ts +9 -3
- package/dist/components/floatlabel/floatlabel.d.ts.map +1 -1
- package/dist/components/floatlabel/floatlabel.js +22 -7
- package/dist/components/floatlabel/floatlabel.js.map +1 -1
- package/dist/components/input/input.d.ts +14 -7
- package/dist/components/input/input.d.ts.map +1 -1
- package/dist/components/input/input.js +18 -2
- package/dist/components/input/input.js.map +1 -1
- package/dist/components/knob/knob.d.ts +7 -3
- package/dist/components/knob/knob.d.ts.map +1 -1
- package/dist/components/knob/knob.js +4 -2
- package/dist/components/knob/knob.js.map +1 -1
- package/dist/components/multiselect/multiselect.d.ts +13 -3
- package/dist/components/multiselect/multiselect.d.ts.map +1 -1
- package/dist/components/multiselect/multiselect.js +27 -2
- package/dist/components/multiselect/multiselect.js.map +1 -1
- package/dist/components/radio/radio.d.ts +27 -4
- package/dist/components/radio/radio.d.ts.map +1 -1
- package/dist/components/radio/radio.js +67 -8
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/rating/rating.d.ts +8 -4
- package/dist/components/rating/rating.d.ts.map +1 -1
- package/dist/components/rating/rating.js +5 -2
- package/dist/components/rating/rating.js.map +1 -1
- package/dist/components/select/select.d.ts +9 -3
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/select/select.js +11 -2
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/slider/slider.d.ts +12 -6
- package/dist/components/slider/slider.d.ts.map +1 -1
- package/dist/components/slider/slider.js +10 -2
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/switch/switch.d.ts +20 -4
- package/dist/components/switch/switch.d.ts.map +1 -1
- package/dist/components/switch/switch.js +40 -2
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/textarea/textarea.d.ts +12 -5
- package/dist/components/textarea/textarea.d.ts.map +1 -1
- package/dist/components/textarea/textarea.js +12 -2
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/toast/toast.d.ts +17 -5
- package/dist/components/toast/toast.d.ts.map +1 -1
- package/dist/components/toast/toast.js +161 -21
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toggle-button-group/toggle-button-group.d.ts +13 -5
- package/dist/components/toggle-button-group/toggle-button-group.d.ts.map +1 -1
- package/dist/components/toggle-button-group/toggle-button-group.js +19 -2
- package/dist/components/toggle-button-group/toggle-button-group.js.map +1 -1
- package/dist/core/base.d.ts +7 -0
- package/dist/core/base.d.ts.map +1 -1
- package/dist/core/base.js +4 -1
- package/dist/core/base.js.map +1 -1
- package/dist/core/form-element.d.ts +81 -0
- package/dist/core/form-element.d.ts.map +1 -0
- package/dist/core/form-element.js +129 -0
- package/dist/core/form-element.js.map +1 -0
- package/dist/core/presets.d.ts +8 -3
- package/dist/core/presets.d.ts.map +1 -1
- package/dist/core/presets.js +6 -17
- package/dist/core/presets.js.map +1 -1
- package/dist/core/types.d.ts +4 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/docs/app.d.ts.map +1 -1
- package/dist/docs/componentes/autocomplete.doc.d.ts.map +1 -1
- package/dist/docs/componentes/checkbox.doc.d.ts.map +1 -1
- package/dist/docs/componentes/datepicker.doc.d.ts.map +1 -1
- package/dist/docs/componentes/fileupload.doc.d.ts.map +1 -1
- package/dist/docs/componentes/input.doc.d.ts.map +1 -1
- package/dist/docs/componentes/knob.doc.d.ts.map +1 -1
- package/dist/docs/componentes/multiselect.doc.d.ts.map +1 -1
- package/dist/docs/componentes/rating.doc.d.ts.map +1 -1
- package/dist/docs/componentes/select.doc.d.ts.map +1 -1
- package/dist/docs/componentes/slider.doc.d.ts.map +1 -1
- package/dist/docs/componentes/switch.doc.d.ts.map +1 -1
- package/dist/docs/componentes/textarea.doc.d.ts.map +1 -1
- package/dist/docs/componentes/toast.doc.d.ts.map +1 -1
- package/dist/docs/componentes/toggle-button-group.doc.d.ts.map +1 -1
- package/dist/docs/frameworks.d.ts +75 -0
- package/dist/docs/frameworks.d.ts.map +1 -0
- package/dist/docs/ui/code.d.ts +4 -0
- package/dist/docs/ui/code.d.ts.map +1 -1
- package/dist/fenix-ui.umd.min.js +214 -176
- package/dist/fenix-ui4.esm.js +657 -67
- package/dist/fenix-ui4.esm.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/core/base.js
CHANGED
|
@@ -4,7 +4,9 @@ const _FxElement = class _FxElement extends HTMLElement {
|
|
|
4
4
|
}
|
|
5
5
|
constructor() {
|
|
6
6
|
super();
|
|
7
|
-
this.root = this.attachShadow(
|
|
7
|
+
this.root = this.attachShadow(
|
|
8
|
+
this.constructor.shadowOptions
|
|
9
|
+
);
|
|
8
10
|
}
|
|
9
11
|
/** Chamado quando um atributo observado muda. */
|
|
10
12
|
attributeChangedCallback(_name, _oldValue, _newValue) {
|
|
@@ -34,6 +36,7 @@ const _FxElement = class _FxElement extends HTMLElement {
|
|
|
34
36
|
}
|
|
35
37
|
};
|
|
36
38
|
_FxElement.styles = "";
|
|
39
|
+
_FxElement.shadowOptions = { mode: "open" };
|
|
37
40
|
let FxElement = _FxElement;
|
|
38
41
|
export {
|
|
39
42
|
FxElement
|
package/dist/core/base.js.map
CHANGED
|
@@ -1 +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(
|
|
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 /**\n * Opções do `attachShadow` — sobrescreva por componente quando precisar.\n * `delegatesFocus` (usado pelos componentes de formulário, via FxFormElement)\n * faz `focus()`, `autofocus` e o clique em `<label for>` atingirem o\n * controle interno do Shadow DOM, e não só o host.\n */\n static shadowOptions: ShadowRootInit = { mode: 'open' };\n\n protected readonly root: ShadowRoot;\n\n constructor() {\n super();\n this.root = this.attachShadow(\n (this.constructor as typeof FxElement).shadowOptions,\n );\n }\n\n /** Chamado quando um atributo observado muda. */\n protected attributeChangedCallback(_name: string, _oldValue: string | null, _newValue: string | null): 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,EAYA,cAAc;AACZ,UAAA;AACA,SAAK,OAAO,KAAK;AAAA,MACd,KAAK,YAAiC;AAAA,IAAA;AAAA,EAE3C;AAAA;AAAA,EAGU,yBAAyB,OAAe,WAA0B,WAAgC;AAC1G,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;AA3DE,WAAO,SAAiB;AAYxB,WAAO,gBAAgC,EAAE,MAAM,OAAA;AAd1C,IAAe,YAAf;"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base dos componentes de formulário — Form-Associated Custom Element.
|
|
3
|
+
*
|
|
4
|
+
* Por que ela existe: um `<input>` interno do Shadow DOM **não se associa** ao
|
|
5
|
+
* `<form>` do light DOM (a associação por árvore não cruza a fronteira do
|
|
6
|
+
* shadow). Sem `formAssociated: true` + `ElementInternals`, o componente fica
|
|
7
|
+
* invisível para o form: `new FormData(form)` não o inclui, Enter não submete,
|
|
8
|
+
* `form.elements`/validação/`reset` não o enxergam e `<label for>` não o foca.
|
|
9
|
+
*
|
|
10
|
+
* O que esta base entrega:
|
|
11
|
+
* - `static formAssociated = true` → o HOST vira campo do form (entra em
|
|
12
|
+
* `form.elements`, `FormData`, `checkValidity`, `reset`, e é labelable);
|
|
13
|
+
* - `delegatesFocus: true` → `focus()`, `autofocus` e clique em
|
|
14
|
+
* `<label for="idDoHost">` focam o controle interno;
|
|
15
|
+
* - `updateFormValue()` → publica `name`/`value` no form via `internals`;
|
|
16
|
+
* - `formDisabledCallback` → `<fieldset disabled>` desabilita o controle;
|
|
17
|
+
* - `formResetCallback` → `form.reset()` restaura o valor inicial;
|
|
18
|
+
* - getters nativos: `name`, `form`, `type`, `validity`, `labels`,
|
|
19
|
+
* `checkValidity()`, `reportValidity()`.
|
|
20
|
+
*/
|
|
21
|
+
import { FxElement } from './base';
|
|
22
|
+
export declare abstract class FxFormElement extends FxElement {
|
|
23
|
+
/** Participa de <form> como campo nativo (FormData, reset, validação, label). */
|
|
24
|
+
static formAssociated: boolean;
|
|
25
|
+
/** focus()/autofocus/<label for> atingem o controle interno do Shadow DOM. */
|
|
26
|
+
static shadowOptions: ShadowRootInit;
|
|
27
|
+
protected readonly internals: ElementInternals | null;
|
|
28
|
+
/** Valor do atributo `value` quando o componente entrou no form (reset). */
|
|
29
|
+
protected _initialValue: string;
|
|
30
|
+
private _initialCaptured;
|
|
31
|
+
private _autofocused;
|
|
32
|
+
constructor();
|
|
33
|
+
/** Nome do campo no FormData (atributo `name`, como no nativo). */
|
|
34
|
+
get name(): string;
|
|
35
|
+
/** Form ao qual o componente está associado (null se fora de um form). */
|
|
36
|
+
get form(): HTMLFormElement | null;
|
|
37
|
+
get type(): string;
|
|
38
|
+
get willValidate(): boolean;
|
|
39
|
+
get validity(): ValidityState | null;
|
|
40
|
+
get validationMessage(): string;
|
|
41
|
+
get labels(): NodeList;
|
|
42
|
+
checkValidity(): boolean;
|
|
43
|
+
reportValidity(): boolean;
|
|
44
|
+
protected connectedCallback(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Foca o controle interno: primeiro o HOST (com `delegatesFocus` o browser
|
|
47
|
+
* repassa ao controle interno) e, se nada for focado (ex.: ambientes sem
|
|
48
|
+
* delegatesFocus, como jsdom nos testes), o primeiro focável do shadow.
|
|
49
|
+
*/
|
|
50
|
+
private focusInnerControl;
|
|
51
|
+
/**
|
|
52
|
+
* Valor publicado no FormData. Sobrescreva quando o valor NÃO é o atributo
|
|
53
|
+
* `value` (checkbox/switch enviariam `value || 'on'` quando marcados,
|
|
54
|
+
* seleção múltipla enviaria várias entradas, fileupload enviaria arquivos).
|
|
55
|
+
*/
|
|
56
|
+
protected getFormValue(): string | FormData | null;
|
|
57
|
+
/**
|
|
58
|
+
* Sincroniza o campo interno, publica name/value no form (ElementInternals)
|
|
59
|
+
* e emite `input` (v-model do Vue) + `valueChange` ([(value)] do Angular).
|
|
60
|
+
*
|
|
61
|
+
* Chame quando o valor mudar — junto do evento semântico (`change`,
|
|
62
|
+
* `select`, ...) que o componente já dispara. `detail` opcional complementa
|
|
63
|
+
* o payload (ex.: { start, end } do fx-datepicker).
|
|
64
|
+
*/
|
|
65
|
+
protected emitValueEvents(detail?: Record<string, unknown>): void;
|
|
66
|
+
/** Sincroniza name/value com o form (ElementInternals). */
|
|
67
|
+
protected updateFormValue(): void;
|
|
68
|
+
/**
|
|
69
|
+
* <form disabled>/<fieldset disabled>: espelha no atributo `disabled`
|
|
70
|
+
* observado — o re-render desabilita o controle interno.
|
|
71
|
+
*/
|
|
72
|
+
formDisabledCallback(disabled: boolean): void;
|
|
73
|
+
/** form.reset(): restaura o valor inicial e sincroniza o campo interno. */
|
|
74
|
+
formResetCallback(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Hook: empurra o valor atual do atributo `value` para o controle interno
|
|
77
|
+
* SEM re-renderizar (componentes com campo nativo interno sobrescrevem).
|
|
78
|
+
*/
|
|
79
|
+
protected syncInternalControl(): void;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=form-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-element.d.ts","sourceRoot":"","sources":["../../src/core/form-element.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,8BAAsB,aAAc,SAAQ,SAAS;IACnD,iFAAiF;IACjF,MAAM,CAAC,cAAc,UAAQ;IAC7B,8EAA8E;IAC9E,OAAgB,aAAa,EAAE,cAAc,CAG3C;IAEF,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtD,4EAA4E;IAC5E,SAAS,CAAC,aAAa,SAAM;IAC7B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAS;;IAU7B,mEAAmE;IACnE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0EAA0E;IAC1E,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAIjC;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,QAAQ,IAAI,aAAa,GAAG,IAAI,CAEnC;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,MAAM,IAAI,QAAQ,CAErB;IAED,aAAa,IAAI,OAAO;IAIxB,cAAc,IAAI,OAAO;cAIN,iBAAiB,IAAI,IAAI;IAkB5C;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;OAIG;IACH,SAAS,CAAC,YAAY,IAAI,MAAM,GAAG,QAAQ,GAAG,IAAI;IAIlD;;;;;;;OAOG;IACH,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAgBjE,2DAA2D;IAC3D,SAAS,CAAC,eAAe,IAAI,IAAI;IAKjC;;;OAGG;IACH,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAK7C,2EAA2E;IAC3E,iBAAiB,IAAI,IAAI;IAMzB;;;OAGG;IACH,SAAS,CAAC,mBAAmB,IAAI,IAAI;CAGtC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { FxElement } from "./base.js";
|
|
2
|
+
const _FxFormElement = class _FxFormElement extends FxElement {
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
this._initialValue = "";
|
|
6
|
+
this._initialCaptured = false;
|
|
7
|
+
this._autofocused = false;
|
|
8
|
+
this.internals = typeof this.attachInternals === "function" ? this.attachInternals() : null;
|
|
9
|
+
}
|
|
10
|
+
/** Nome do campo no FormData (atributo `name`, como no nativo). */
|
|
11
|
+
get name() {
|
|
12
|
+
return this.getAttribute("name") ?? "";
|
|
13
|
+
}
|
|
14
|
+
/** Form ao qual o componente está associado (null se fora de um form). */
|
|
15
|
+
get form() {
|
|
16
|
+
return this.internals?.form ?? this.closest("form");
|
|
17
|
+
}
|
|
18
|
+
get type() {
|
|
19
|
+
return this.localName;
|
|
20
|
+
}
|
|
21
|
+
get willValidate() {
|
|
22
|
+
return this.internals?.willValidate ?? false;
|
|
23
|
+
}
|
|
24
|
+
get validity() {
|
|
25
|
+
return this.internals?.validity ?? null;
|
|
26
|
+
}
|
|
27
|
+
get validationMessage() {
|
|
28
|
+
return this.internals?.validationMessage ?? "";
|
|
29
|
+
}
|
|
30
|
+
get labels() {
|
|
31
|
+
return this.internals?.labels ?? this.childNodes;
|
|
32
|
+
}
|
|
33
|
+
checkValidity() {
|
|
34
|
+
return this.internals?.checkValidity?.() ?? true;
|
|
35
|
+
}
|
|
36
|
+
reportValidity() {
|
|
37
|
+
return this.internals?.reportValidity?.() ?? true;
|
|
38
|
+
}
|
|
39
|
+
connectedCallback() {
|
|
40
|
+
super.connectedCallback();
|
|
41
|
+
if (!this._initialCaptured) {
|
|
42
|
+
this._initialCaptured = true;
|
|
43
|
+
this._initialValue = this.getAttr("value");
|
|
44
|
+
}
|
|
45
|
+
this.updateFormValue();
|
|
46
|
+
if (!this._autofocused && this.hasAttr("autofocus")) {
|
|
47
|
+
this._autofocused = true;
|
|
48
|
+
queueMicrotask(() => {
|
|
49
|
+
if (this.isConnected && this.hasAttr("autofocus")) this.focusInnerControl();
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Foca o controle interno: primeiro o HOST (com `delegatesFocus` o browser
|
|
55
|
+
* repassa ao controle interno) e, se nada for focado (ex.: ambientes sem
|
|
56
|
+
* delegatesFocus, como jsdom nos testes), o primeiro focável do shadow.
|
|
57
|
+
*/
|
|
58
|
+
focusInnerControl() {
|
|
59
|
+
this.focus();
|
|
60
|
+
if (!this.root.activeElement) {
|
|
61
|
+
const first = this.root.querySelector(
|
|
62
|
+
'input, textarea, button, select, [tabindex]:not([tabindex="-1"])'
|
|
63
|
+
);
|
|
64
|
+
first?.focus();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Valor publicado no FormData. Sobrescreva quando o valor NÃO é o atributo
|
|
69
|
+
* `value` (checkbox/switch enviariam `value || 'on'` quando marcados,
|
|
70
|
+
* seleção múltipla enviaria várias entradas, fileupload enviaria arquivos).
|
|
71
|
+
*/
|
|
72
|
+
getFormValue() {
|
|
73
|
+
return this.getAttr("value") || null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Sincroniza o campo interno, publica name/value no form (ElementInternals)
|
|
77
|
+
* e emite `input` (v-model do Vue) + `valueChange` ([(value)] do Angular).
|
|
78
|
+
*
|
|
79
|
+
* Chame quando o valor mudar — junto do evento semântico (`change`,
|
|
80
|
+
* `select`, ...) que o componente já dispara. `detail` opcional complementa
|
|
81
|
+
* o payload (ex.: { start, end } do fx-datepicker).
|
|
82
|
+
*/
|
|
83
|
+
emitValueEvents(detail) {
|
|
84
|
+
const value = this.getAttr("value");
|
|
85
|
+
this.syncInternalControl();
|
|
86
|
+
this.updateFormValue();
|
|
87
|
+
const payload = { value, ...detail };
|
|
88
|
+
for (const type of ["input", "valueChange"]) {
|
|
89
|
+
this.dispatchEvent(
|
|
90
|
+
new CustomEvent(type, { bubbles: true, composed: true, detail: payload })
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Sincroniza name/value com o form (ElementInternals). */
|
|
95
|
+
updateFormValue() {
|
|
96
|
+
if (!this.internals || typeof this.internals.setFormValue !== "function") return;
|
|
97
|
+
this.internals.setFormValue(this.getFormValue());
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* <form disabled>/<fieldset disabled>: espelha no atributo `disabled`
|
|
101
|
+
* observado — o re-render desabilita o controle interno.
|
|
102
|
+
*/
|
|
103
|
+
formDisabledCallback(disabled) {
|
|
104
|
+
if (disabled) this.setAttribute("disabled", "");
|
|
105
|
+
else this.removeAttribute("disabled");
|
|
106
|
+
}
|
|
107
|
+
/** form.reset(): restaura o valor inicial e sincroniza o campo interno. */
|
|
108
|
+
formResetCallback() {
|
|
109
|
+
this.setAttribute("value", this._initialValue);
|
|
110
|
+
this.syncInternalControl();
|
|
111
|
+
this.updateFormValue();
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Hook: empurra o valor atual do atributo `value` para o controle interno
|
|
115
|
+
* SEM re-renderizar (componentes com campo nativo interno sobrescrevem).
|
|
116
|
+
*/
|
|
117
|
+
syncInternalControl() {
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
_FxFormElement.formAssociated = true;
|
|
121
|
+
_FxFormElement.shadowOptions = {
|
|
122
|
+
mode: "open",
|
|
123
|
+
delegatesFocus: true
|
|
124
|
+
};
|
|
125
|
+
let FxFormElement = _FxFormElement;
|
|
126
|
+
export {
|
|
127
|
+
FxFormElement
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=form-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-element.js","sources":["../../src/core/form-element.ts"],"sourcesContent":["/**\n * Base dos componentes de formulário — Form-Associated Custom Element.\n *\n * Por que ela existe: um `<input>` interno do Shadow DOM **não se associa** ao\n * `<form>` do light DOM (a associação por árvore não cruza a fronteira do\n * shadow). Sem `formAssociated: true` + `ElementInternals`, o componente fica\n * invisível para o form: `new FormData(form)` não o inclui, Enter não submete,\n * `form.elements`/validação/`reset` não o enxergam e `<label for>` não o foca.\n *\n * O que esta base entrega:\n * - `static formAssociated = true` → o HOST vira campo do form (entra em\n * `form.elements`, `FormData`, `checkValidity`, `reset`, e é labelable);\n * - `delegatesFocus: true` → `focus()`, `autofocus` e clique em\n * `<label for=\"idDoHost\">` focam o controle interno;\n * - `updateFormValue()` → publica `name`/`value` no form via `internals`;\n * - `formDisabledCallback` → `<fieldset disabled>` desabilita o controle;\n * - `formResetCallback` → `form.reset()` restaura o valor inicial;\n * - getters nativos: `name`, `form`, `type`, `validity`, `labels`,\n * `checkValidity()`, `reportValidity()`.\n */\n\nimport { FxElement } from './base';\n\nexport abstract class FxFormElement extends FxElement {\n /** Participa de <form> como campo nativo (FormData, reset, validação, label). */\n static formAssociated = true;\n /** focus()/autofocus/<label for> atingem o controle interno do Shadow DOM. */\n static override shadowOptions: ShadowRootInit = {\n mode: 'open',\n delegatesFocus: true,\n };\n\n protected readonly internals: ElementInternals | null;\n /** Valor do atributo `value` quando o componente entrou no form (reset). */\n protected _initialValue = '';\n private _initialCaptured = false;\n private _autofocused = false;\n\n constructor() {\n super();\n // Ambientes sem ElementInternals (ex.: jsdom nos testes) funcionam sem a\n // integração nativa de form — tudo aqui é defensivo.\n this.internals =\n typeof this.attachInternals === 'function' ? this.attachInternals() : null;\n }\n\n /** Nome do campo no FormData (atributo `name`, como no nativo). */\n get name(): string {\n return this.getAttribute('name') ?? '';\n }\n\n /** Form ao qual o componente está associado (null se fora de um form). */\n get form(): HTMLFormElement | null {\n return (\n this.internals?.form ?? (this.closest('form') as HTMLFormElement | null)\n );\n }\n\n get type(): string {\n return this.localName;\n }\n\n get willValidate(): boolean {\n return this.internals?.willValidate ?? false;\n }\n\n get validity(): ValidityState | null {\n return this.internals?.validity ?? null;\n }\n\n get validationMessage(): string {\n return this.internals?.validationMessage ?? '';\n }\n\n get labels(): NodeList {\n return this.internals?.labels ?? this.childNodes;\n }\n\n checkValidity(): boolean {\n return this.internals?.checkValidity?.() ?? true;\n }\n\n reportValidity(): boolean {\n return this.internals?.reportValidity?.() ?? true;\n }\n\n protected override connectedCallback(): void {\n super.connectedCallback(); // render inicial\n if (!this._initialCaptured) {\n this._initialCaptured = true;\n this._initialValue = this.getAttr('value');\n }\n this.updateFormValue();\n // autofocus: nem todo browser foca form-associated custom elements (em\n // especial dentro de shadow DOM do app consumidor) — garante aqui. O\n // delegatesFocus leva o foco ao controle interno.\n if (!this._autofocused && this.hasAttr('autofocus')) {\n this._autofocused = true;\n queueMicrotask(() => {\n if (this.isConnected && this.hasAttr('autofocus')) this.focusInnerControl();\n });\n }\n }\n\n /**\n * Foca o controle interno: primeiro o HOST (com `delegatesFocus` o browser\n * repassa ao controle interno) e, se nada for focado (ex.: ambientes sem\n * delegatesFocus, como jsdom nos testes), o primeiro focável do shadow.\n */\n private focusInnerControl(): void {\n this.focus();\n if (!this.root.activeElement) {\n const first = this.root.querySelector<HTMLElement>(\n 'input, textarea, button, select, [tabindex]:not([tabindex=\"-1\"])',\n );\n first?.focus();\n }\n }\n\n /**\n * Valor publicado no FormData. Sobrescreva quando o valor NÃO é o atributo\n * `value` (checkbox/switch enviariam `value || 'on'` quando marcados,\n * seleção múltipla enviaria várias entradas, fileupload enviaria arquivos).\n */\n protected getFormValue(): string | FormData | null {\n return this.getAttr('value') || null;\n }\n\n /**\n * Sincroniza o campo interno, publica name/value no form (ElementInternals)\n * e emite `input` (v-model do Vue) + `valueChange` ([(value)] do Angular).\n *\n * Chame quando o valor mudar — junto do evento semântico (`change`,\n * `select`, ...) que o componente já dispara. `detail` opcional complementa\n * o payload (ex.: { start, end } do fx-datepicker).\n */\n protected emitValueEvents(detail?: Record<string, unknown>): void {\n const value = this.getAttr('value');\n\n // Empurra o valor para o controle interno SEM re-renderizar (hook —\n // componentes com máscara/campo customizado sobrescrevem).\n this.syncInternalControl();\n this.updateFormValue();\n\n const payload = { value, ...detail };\n for (const type of ['input', 'valueChange'] as const) {\n this.dispatchEvent(\n new CustomEvent(type, { bubbles: true, composed: true, detail: payload }),\n );\n }\n }\n\n /** Sincroniza name/value com o form (ElementInternals). */\n protected updateFormValue(): void {\n if (!this.internals || typeof this.internals.setFormValue !== 'function') return;\n this.internals.setFormValue(this.getFormValue());\n }\n\n /**\n * <form disabled>/<fieldset disabled>: espelha no atributo `disabled`\n * observado — o re-render desabilita o controle interno.\n */\n formDisabledCallback(disabled: boolean): void {\n if (disabled) this.setAttribute('disabled', '');\n else this.removeAttribute('disabled');\n }\n\n /** form.reset(): restaura o valor inicial e sincroniza o campo interno. */\n formResetCallback(): void {\n this.setAttribute('value', this._initialValue);\n this.syncInternalControl();\n this.updateFormValue();\n }\n\n /**\n * Hook: empurra o valor atual do atributo `value` para o controle interno\n * SEM re-renderizar (componentes com campo nativo interno sobrescrevem).\n */\n protected syncInternalControl(): void {\n /* opcional */\n }\n}\n"],"names":[],"mappings":";AAuBO,MAAe,iBAAf,MAAe,uBAAsB,UAAU;AAAA,EAepD,cAAc;AACZ,UAAA;AALF,SAAU,gBAAgB;AAC1B,SAAQ,mBAAmB;AAC3B,SAAQ,eAAe;AAMrB,SAAK,YACH,OAAO,KAAK,oBAAoB,aAAa,KAAK,oBAAoB;AAAA,EAC1E;AAAA;AAAA,EAGA,IAAI,OAAe;AACjB,WAAO,KAAK,aAAa,MAAM,KAAK;AAAA,EACtC;AAAA;AAAA,EAGA,IAAI,OAA+B;AACjC,WACE,KAAK,WAAW,QAAS,KAAK,QAAQ,MAAM;AAAA,EAEhD;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAwB;AAC1B,WAAO,KAAK,WAAW,gBAAgB;AAAA,EACzC;AAAA,EAEA,IAAI,WAAiC;AACnC,WAAO,KAAK,WAAW,YAAY;AAAA,EACrC;AAAA,EAEA,IAAI,oBAA4B;AAC9B,WAAO,KAAK,WAAW,qBAAqB;AAAA,EAC9C;AAAA,EAEA,IAAI,SAAmB;AACrB,WAAO,KAAK,WAAW,UAAU,KAAK;AAAA,EACxC;AAAA,EAEA,gBAAyB;AACvB,WAAO,KAAK,WAAW,gBAAA,KAAqB;AAAA,EAC9C;AAAA,EAEA,iBAA0B;AACxB,WAAO,KAAK,WAAW,iBAAA,KAAsB;AAAA,EAC/C;AAAA,EAEmB,oBAA0B;AAC3C,UAAM,kBAAA;AACN,QAAI,CAAC,KAAK,kBAAkB;AAC1B,WAAK,mBAAmB;AACxB,WAAK,gBAAgB,KAAK,QAAQ,OAAO;AAAA,IAC3C;AACA,SAAK,gBAAA;AAIL,QAAI,CAAC,KAAK,gBAAgB,KAAK,QAAQ,WAAW,GAAG;AACnD,WAAK,eAAe;AACpB,qBAAe,MAAM;AACnB,YAAI,KAAK,eAAe,KAAK,QAAQ,WAAW,QAAQ,kBAAA;AAAA,MAC1D,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,oBAA0B;AAChC,SAAK,MAAA;AACL,QAAI,CAAC,KAAK,KAAK,eAAe;AAC5B,YAAM,QAAQ,KAAK,KAAK;AAAA,QACtB;AAAA,MAAA;AAEF,aAAO,MAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,eAAyC;AACjD,WAAO,KAAK,QAAQ,OAAO,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUU,gBAAgB,QAAwC;AAChE,UAAM,QAAQ,KAAK,QAAQ,OAAO;AAIlC,SAAK,oBAAA;AACL,SAAK,gBAAA;AAEL,UAAM,UAAU,EAAE,OAAO,GAAG,OAAA;AAC5B,eAAW,QAAQ,CAAC,SAAS,aAAa,GAAY;AACpD,WAAK;AAAA,QACH,IAAI,YAAY,MAAM,EAAE,SAAS,MAAM,UAAU,MAAM,QAAQ,QAAA,CAAS;AAAA,MAAA;AAAA,IAE5E;AAAA,EACF;AAAA;AAAA,EAGU,kBAAwB;AAChC,QAAI,CAAC,KAAK,aAAa,OAAO,KAAK,UAAU,iBAAiB,WAAY;AAC1E,SAAK,UAAU,aAAa,KAAK,aAAA,CAAc;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAqB,UAAyB;AAC5C,QAAI,SAAU,MAAK,aAAa,YAAY,EAAE;AAAA,QACzC,MAAK,gBAAgB,UAAU;AAAA,EACtC;AAAA;AAAA,EAGA,oBAA0B;AACxB,SAAK,aAAa,SAAS,KAAK,aAAa;AAC7C,SAAK,oBAAA;AACL,SAAK,gBAAA;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA,EAMU,sBAA4B;AAAA,EAEtC;AACF;AA5JE,eAAO,iBAAiB;AAExB,eAAgB,gBAAgC;AAAA,EAC9C,MAAM;AAAA,EACN,gBAAgB;AAAA;AANb,IAAe,gBAAf;"}
|
package/dist/core/presets.d.ts
CHANGED
|
@@ -2,9 +2,15 @@
|
|
|
2
2
|
* Presets de tema prontos para uso.
|
|
3
3
|
*
|
|
4
4
|
* Cada preset é um override parcial profundo sobre os tokens base.
|
|
5
|
-
* Combina com o modo claro/escuro: `applyPreset('
|
|
5
|
+
* Combina com o modo claro/escuro: `applyPreset('ikki', 'dark')`.
|
|
6
|
+
*
|
|
7
|
+
* `ikki` é o preset **padrão**: usa a identidade base (paleta indigo do tema
|
|
8
|
+
* claro/escuro) e apenas desliga o anel de foco. Os demais presets trazem
|
|
9
|
+
* paletas/raios próprios.
|
|
6
10
|
*/
|
|
7
11
|
import { type DeepPartial, type FenixTokens } from './tokens';
|
|
12
|
+
/** Nome do preset padrão (fallback de `applyPreset` e boot da documentação). */
|
|
13
|
+
export declare const DEFAULT_PRESET = "ikki";
|
|
8
14
|
export interface FenixPreset {
|
|
9
15
|
/** Identificador usado em `applyPreset(name)`. */
|
|
10
16
|
name: string;
|
|
@@ -14,12 +20,11 @@ export interface FenixPreset {
|
|
|
14
20
|
tokens: DeepPartial<FenixTokens>;
|
|
15
21
|
}
|
|
16
22
|
export declare const themePresets: {
|
|
17
|
-
readonly
|
|
23
|
+
readonly ikki: FenixPreset;
|
|
18
24
|
readonly seiya: FenixPreset;
|
|
19
25
|
readonly shiryu: FenixPreset;
|
|
20
26
|
readonly hyoga: FenixPreset;
|
|
21
27
|
readonly shun: FenixPreset;
|
|
22
|
-
readonly ikki: FenixPreset;
|
|
23
28
|
readonly aiolia: FenixPreset;
|
|
24
29
|
};
|
|
25
30
|
/** Lista todos os presets registrados (inclui os customizados). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9D,gFAAgF;AAChF,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,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;;;;;;;CAiFf,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,CAK7C"}
|
package/dist/core/presets.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { configure } from "./theme.js";
|
|
2
|
+
const DEFAULT_PRESET = "ikki";
|
|
2
3
|
const registry = /* @__PURE__ */ new Map();
|
|
3
4
|
function register(preset) {
|
|
4
5
|
registry.set(preset.name, preset);
|
|
5
6
|
return preset;
|
|
6
7
|
}
|
|
7
8
|
const themePresets = {
|
|
8
|
-
|
|
9
|
-
name: "
|
|
10
|
-
label: "
|
|
9
|
+
ikki: register({
|
|
10
|
+
name: "ikki",
|
|
11
|
+
label: "Ikki (padrão)",
|
|
11
12
|
tokens: { effect: { "focus-ring": "none" } }
|
|
12
13
|
}),
|
|
13
14
|
seiya: register({
|
|
@@ -69,19 +70,6 @@ const themePresets = {
|
|
|
69
70
|
radius: { sm: "10px", md: "14px", lg: "20px" }
|
|
70
71
|
}
|
|
71
72
|
}),
|
|
72
|
-
ikki: register({
|
|
73
|
-
name: "ikki",
|
|
74
|
-
label: "Ikki",
|
|
75
|
-
tokens: {
|
|
76
|
-
color: {
|
|
77
|
-
primary: "#ea580c",
|
|
78
|
-
secondary: "#fb923c",
|
|
79
|
-
danger: "#dc2626",
|
|
80
|
-
warning: "#f59e0b"
|
|
81
|
-
},
|
|
82
|
-
radius: { sm: "2px", md: "4px", lg: "6px" }
|
|
83
|
-
}
|
|
84
|
-
}),
|
|
85
73
|
aiolia: register({
|
|
86
74
|
name: "aiolia",
|
|
87
75
|
label: "Aiolia",
|
|
@@ -106,11 +94,12 @@ function defineCustomPreset(name, label, tokens) {
|
|
|
106
94
|
return register({ name, label, tokens });
|
|
107
95
|
}
|
|
108
96
|
function applyPreset(presetName, mode = "light") {
|
|
109
|
-
const preset = registry.get(presetName) ?? registry.get(
|
|
97
|
+
const preset = registry.get(presetName) ?? registry.get(DEFAULT_PRESET);
|
|
110
98
|
const state = configure({ theme: mode, tokens: preset.tokens });
|
|
111
99
|
return { ...state, preset: preset.name };
|
|
112
100
|
}
|
|
113
101
|
export {
|
|
102
|
+
DEFAULT_PRESET,
|
|
114
103
|
applyPreset,
|
|
115
104
|
defineCustomPreset,
|
|
116
105
|
listPresets,
|
package/dist/core/presets.js.map
CHANGED
|
@@ -1 +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('
|
|
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('ikki', 'dark')`.\n *\n * `ikki` é o preset **padrão**: usa a identidade base (paleta indigo do tema\n * claro/escuro) e apenas desliga o anel de foco. Os demais presets trazem\n * paletas/raios próprios.\n */\n\nimport { configure } from './theme';\nimport { type DeepPartial, type FenixTokens } from './tokens';\n\n/** Nome do preset padrão (fallback de `applyPreset` e boot da documentação). */\nexport const DEFAULT_PRESET = 'ikki';\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\tikki: register({\n\t\tname: \"ikki\",\n\t\tlabel: \"Ikki (padrão)\",\n\t\ttokens: { effect: { \"focus-ring\": \"none\" } },\n\t}),\n\tseiya: register({\n\t\tname: \"seiya\",\n\t\tlabel: \"Seiya\",\n\t\ttokens: {\n\t\t\tcolor: {\n\t\t\t\tprimary: \"#e11d48\",\n\t\t\t\tsecondary: \"#fb7185\",\n\t\t\t\tinfo: \"#f43f5e\",\n\t\t\t\tdanger: \"#be123c\",\n\t\t\t},\n\t\t\tradius: { sm: \"6px\", md: \"10px\", lg: \"16px\" },\n\t\t\teffect: {\n\t\t\t\t\"focus-ring\": \"none\",\n\t\t\t},\n\t\t},\n\t}),\n\tshiryu: register({\n\t\tname: \"shiryu\",\n\t\tlabel: \"Shiryu\",\n\t\ttokens: {\n\t\t\tcolor: {\n\t\t\t\tprimary: \"#0d9488\",\n\t\t\t\tsecondary: \"#2dd4bf\",\n\t\t\t\tsuccess: \"#059669\",\n\t\t\t\tinfo: \"#14b8a6\",\n\t\t\t},\n\t\t\tradius: { sm: \"4px\", md: \"8px\", lg: \"14px\" },\n\t\t\teffect: {\n\t\t\t\t\"focus-ring\": \"none\",\n\t\t\t},\n\t\t},\n\t}),\n\thyoga: register({\n\t\tname: \"hyoga\",\n\t\tlabel: \"Hyoga\",\n\t\ttokens: {\n\t\t\tcolor: {\n\t\t\t\tprimary: \"#0284c7\",\n\t\t\t\tsecondary: \"#38bdf8\",\n\t\t\t\tinfo: \"#06b6d4\",\n\t\t\t\tdanger: \"#e11d48\",\n\t\t\t},\n\t\t\tsurface: { surface: \"#f0f9ff\", \"surface-hover\": \"#e0f2fe\" },\n\t\t\tradius: { sm: \"8px\", md: \"12px\", lg: \"18px\" },\n\t\t},\n\t}),\n\tshun: register({\n\t\tname: \"shun\",\n\t\tlabel: \"Shun\",\n\t\ttokens: {\n\t\t\tcolor: {\n\t\t\t\tprimary: \"#db2777\",\n\t\t\t\tsecondary: \"#f472b6\",\n\t\t\t\tinfo: \"#ec4899\",\n\t\t\t\twarning: \"#c026d3\",\n\t\t\t},\n\t\t\tradius: { sm: \"10px\", md: \"14px\", lg: \"20px\" },\n\t\t},\n\t}),\n\taiolia: register({\n\t\tname: \"aiolia\",\n\t\tlabel: \"Aiolia\",\n\t\ttokens: {\n\t\t\tcolor: {\n\t\t\t\tprimary: \"#b45309\",\n\t\t\t\tsecondary: \"#f59e0b\",\n\t\t\t\twarning: \"#eab308\",\n\t\t\t\tinfo: \"#84cc16\",\n\t\t\t},\n\t\t\tradius: { sm: \"6px\", md: \"12px\", lg: \"20px\" },\n\t\t\teffect: {\n\t\t\t\t\"focus-ring\": \"none\",\n\t\t\t},\n\t\t},\n\t}),\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 // Preset desconhecido (ou o antigo nome \"fenix\") cai no padrão atual.\n const preset = registry.get(presetName) ?? registry.get(DEFAULT_PRESET)!;\n const state = configure({ theme: mode, tokens: preset.tokens });\n return { ...state, preset: preset.name };\n}"],"names":[],"mappings":";AAeO,MAAM,iBAAiB;AAW9B,MAAM,+BAAe,IAAA;AAErB,SAAS,SAAS,QAAkC;AAClD,WAAS,IAAI,OAAO,MAAM,MAAM;AAChC,SAAO;AACT;AAMO,MAAM,eAAe;AAAA,EAC3B,MAAM,SAAS;AAAA,IACd,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ,EAAE,QAAQ,EAAE,cAAc,SAAO;AAAA,EAAE,CAC3C;AAAA,EACD,OAAO,SAAS;AAAA,IACf,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACP,OAAO;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,QACX,MAAM;AAAA,QACN,QAAQ;AAAA,MAAA;AAAA,MAET,QAAQ,EAAE,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAA;AAAA,MACrC,QAAQ;AAAA,QACP,cAAc;AAAA,MAAA;AAAA,IACf;AAAA,EACD,CACA;AAAA,EACD,QAAQ,SAAS;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACP,OAAO;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,MAAM;AAAA,MAAA;AAAA,MAEP,QAAQ,EAAE,IAAI,OAAO,IAAI,OAAO,IAAI,OAAA;AAAA,MACpC,QAAQ;AAAA,QACP,cAAc;AAAA,MAAA;AAAA,IACf;AAAA,EACD,CACA;AAAA,EACD,OAAO,SAAS;AAAA,IACf,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACP,OAAO;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,QACX,MAAM;AAAA,QACN,QAAQ;AAAA,MAAA;AAAA,MAET,SAAS,EAAE,SAAS,WAAW,iBAAiB,UAAA;AAAA,MAChD,QAAQ,EAAE,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAA;AAAA,IAAO;AAAA,EAC7C,CACA;AAAA,EACD,MAAM,SAAS;AAAA,IACd,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACP,OAAO;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,QACX,MAAM;AAAA,QACN,SAAS;AAAA,MAAA;AAAA,MAEV,QAAQ,EAAE,IAAI,QAAQ,IAAI,QAAQ,IAAI,OAAA;AAAA,IAAO;AAAA,EAC9C,CACA;AAAA,EACD,QAAQ,SAAS;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACP,OAAO;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,MAAM;AAAA,MAAA;AAAA,MAEP,QAAQ,EAAE,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAA;AAAA,MACrC,QAAQ;AAAA,QACP,cAAc;AAAA,MAAA;AAAA,IACf;AAAA,EACD,CACA;AACF;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;AAE7C,QAAM,SAAS,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,cAAc;AACtE,QAAM,QAAQ,UAAU,EAAE,OAAO,MAAM,QAAQ,OAAO,QAAQ;AAC9D,SAAO,EAAE,GAAG,OAAO,QAAQ,OAAO,KAAA;AACpC;"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -28,6 +28,10 @@ export interface FxElementProps {
|
|
|
28
28
|
full?: boolean;
|
|
29
29
|
/** Texto/label do controle. */
|
|
30
30
|
label?: string;
|
|
31
|
+
/** Nome do campo no FormData quando dentro de um <form>. */
|
|
32
|
+
name?: string;
|
|
33
|
+
/** Foca o controle interno ao entrar na tela (componentes de formulário). */
|
|
34
|
+
autofocus?: boolean;
|
|
31
35
|
/** Texto de apoio/placeholder. */
|
|
32
36
|
placeholder?: string;
|
|
33
37
|
/** Valor do controle (string ou número). */
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,6BAA6B;AAC7B,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvC,oEAAoE;AACpE,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sEAAsE;IACtE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,4DAA4D;IAC5D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,6BAA6B;AAC7B,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvC,oEAAoE;AACpE,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sEAAsE;IACtE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,4DAA4D;IAC5D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
package/dist/docs/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/docs/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAAiB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAY5B,OAAO,EAAa,aAAa,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/docs/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAAiB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAY5B,OAAO,EAAa,aAAa,EAAgB,MAAM,WAAW,CAAC;AAInE,OAAO,EAAE,aAAa,EAAE,CAAC;AAkEzB,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmC9C;AA6xED,eAAO,MAAM,iBAAiB,QAAO,OAAO,CAAC,IAAI,CAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/autocomplete.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"autocomplete.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/autocomplete.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,eAAe,EAAE,YAuG7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/checkbox.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"checkbox.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/checkbox.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,WAAW,EAAE,YA8DzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/datepicker.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"datepicker.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/datepicker.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,aAAa,EAAE,YAsK3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileupload.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/fileupload.doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"fileupload.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/fileupload.doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,YAoE3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/input.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"input.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/input.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,QAAQ,EAAE,YA+NtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knob.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/knob.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"knob.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/knob.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,OAAO,EAAE,YAuKrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiselect.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/multiselect.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"multiselect.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/multiselect.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,cAAc,EAAE,YA0I5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rating.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/rating.doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"rating.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/rating.doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,YA8BvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/select.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"select.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/select.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,SAAS,EAAE,YAoKvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/slider.doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"slider.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/slider.doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,YAsCvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/switch.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"switch.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/switch.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,eAAO,MAAM,SAAS,EAAE,YA2DvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/textarea.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"textarea.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/textarea.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,WAAW,EAAE,YAuGzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toast.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/toast.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"toast.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/toast.doc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,QAAQ,EAAE,YAkJtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle-button-group.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/toggle-button-group.doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"toggle-button-group.doc.d.ts","sourceRoot":"","sources":["../../../src/docs/componentes/toggle-button-group.doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,oBAAoB,EAAE,YA2BlC,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export type FrameworkId = 'html' | 'vue' | 'react' | 'angular' | 'svelte';
|
|
2
|
+
export declare const FRAMEWORKS: {
|
|
3
|
+
id: FrameworkId;
|
|
4
|
+
label: string;
|
|
5
|
+
}[];
|
|
6
|
+
export declare const FRAMEWORK_STORAGE_KEY = "fenix:doc:framework-tab";
|
|
7
|
+
export interface ParsedAttr {
|
|
8
|
+
name: string;
|
|
9
|
+
/** `true` = booleano presente sem valor (`disabled`, `clearable`…). */
|
|
10
|
+
value: string | true;
|
|
11
|
+
/** Aspas originais — JSON com `"` precisa continuar em aspas simples. */
|
|
12
|
+
quote?: '"' | "'";
|
|
13
|
+
}
|
|
14
|
+
/** Parse de atributos: aceita `name="x"`, `name='x'` e booleanos. */
|
|
15
|
+
export declare function parseAttrs(src: string): ParsedAttr[];
|
|
16
|
+
/** Extrai tag raiz + inner do 1º `<fx-*>` do HTML. */
|
|
17
|
+
export declare function splitTag(html: string): {
|
|
18
|
+
tag: string;
|
|
19
|
+
attrs: ParsedAttr[];
|
|
20
|
+
inner: string;
|
|
21
|
+
} | null;
|
|
22
|
+
export interface TagToken {
|
|
23
|
+
tag: string;
|
|
24
|
+
attrs: string;
|
|
25
|
+
selfClose: boolean;
|
|
26
|
+
close: boolean;
|
|
27
|
+
/** Índice do `<` no HTML original. */
|
|
28
|
+
start: number;
|
|
29
|
+
/** Índice logo após o `>`. */
|
|
30
|
+
end: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Scanner linear de tags (sem regex com backtracking).
|
|
34
|
+
*
|
|
35
|
+
* Atributos com JSON (`data='[{"a":1}]'`) quebravam o regex por causa das
|
|
36
|
+
* aspas aninhadas — o custo explodia e a página travava.
|
|
37
|
+
*/
|
|
38
|
+
export declare function scanTags(html: string): TagToken[];
|
|
39
|
+
/** Imports dos subpaths dos componentes presentes no fragmento. */
|
|
40
|
+
export declare function importsForHtml(html: string, imports?: string[]): string[];
|
|
41
|
+
/**
|
|
42
|
+
* Gera as 5 versões de um FRAGMENTO HTML (um ou vários componentes) — é o
|
|
43
|
+
* caminho usado pelos modelos de formulário e pelos casos de uso da Home.
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildFragmentSnippets(opts: {
|
|
46
|
+
html: string;
|
|
47
|
+
imports?: string[];
|
|
48
|
+
/** Inclui handler de clique nos `fx-button` (playground). */
|
|
49
|
+
withClick?: boolean;
|
|
50
|
+
}): Record<FrameworkId, string>;
|
|
51
|
+
/** Compat: playground (um componente, já formatado). */
|
|
52
|
+
export declare function buildSnippets(opts: {
|
|
53
|
+
tag: string;
|
|
54
|
+
imports: string[];
|
|
55
|
+
prettyHtml: string;
|
|
56
|
+
rawHtml: string;
|
|
57
|
+
events?: {
|
|
58
|
+
name: string;
|
|
59
|
+
}[];
|
|
60
|
+
}): Record<FrameworkId, string>;
|
|
61
|
+
/** Compat: cards de caso de uso. */
|
|
62
|
+
export declare function buildSnippetsForHtml(opts: {
|
|
63
|
+
tag: string;
|
|
64
|
+
imports: string[];
|
|
65
|
+
html: string;
|
|
66
|
+
events?: {
|
|
67
|
+
name: string;
|
|
68
|
+
}[];
|
|
69
|
+
}): Record<FrameworkId, string>;
|
|
70
|
+
/** Bloco de abas (contrato: `.fw-tabs > button[data-fw]` + `.fw-pane[data-pane]`). */
|
|
71
|
+
export declare function frameworkTabsHtml(snippets: Record<FrameworkId, string>, active?: FrameworkId): string;
|
|
72
|
+
export declare function readSavedFramework(): FrameworkId;
|
|
73
|
+
/** Troca de abas + persistência em localStorage (mesmo padrão da sidebar). */
|
|
74
|
+
export declare function wireFrameworkTabs(root: ParentNode): void;
|
|
75
|
+
//# sourceMappingURL=frameworks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frameworks.d.ts","sourceRoot":"","sources":["../../src/docs/frameworks.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1E,eAAO,MAAM,UAAU,EAAE;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAM1D,CAAC;AAEF,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yEAAyE;IACzE,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CACnB;AAED,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CAYpD;AA4DD,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUjG;AAyHD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAwCjD;AAoCD,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQzE;AA6GD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAqB9B;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7B,GAAG,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAE9B;AAED,oCAAoC;AACpC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7B,GAAG,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAE9B;AAMD,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAE,WAAoB,GAAG,MAAM,CAqB7G;AAED,wBAAgB,kBAAkB,IAAI,WAAW,CAQhD;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CA+CxD"}
|
package/dist/docs/ui/code.d.ts
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* light/dark automaticamente. O texto fora dos tokens passa por `esc`.
|
|
5
5
|
*/
|
|
6
6
|
export declare function highlightCode(code: string): string;
|
|
7
|
+
/** Realce com cache + teto de tamanho (mantém o texto idêntico). */
|
|
8
|
+
export declare function highlightCached(code: string): string;
|
|
9
|
+
/** Liga os botões "Copiar" de todos os blocos dentro de `root` (idempotente). */
|
|
10
|
+
export declare function wireCodeCopy(root: ParentNode): void;
|
|
7
11
|
/**
|
|
8
12
|
* Bloco de código completo (contrato de DOM usado pelos testes):
|
|
9
13
|
* `.code-block > .code-head > .copy-btn` + `pre > code`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../../src/docs/ui/code.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../../src/docs/ui/code.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BlD;AAyED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAYnD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C"}
|