@wrrdev/fenix-ui 1.0.9 → 1.0.10

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 CHANGED
@@ -18,7 +18,7 @@ import { FenixUI } from '@wrrdev/fenix-ui'; // API de tema/tokens (índice)
18
18
  FenixUI.theme('dark');
19
19
  ```
20
20
 
21
- > 📦 npm: [`@wrrdev/fenix-ui`](https://www.npmjs.com/package/@wrrdev/fenix-ui) — **v1.0.9**, acesso público.
21
+ > 📦 npm: [`@wrrdev/fenix-ui`](https://www.npmjs.com/package/@wrrdev/fenix-ui) — **v1.0.10**, acesso público.
22
22
  > Subpaths disponíveis: `./theme`, `./tokens`, `./jsx`, `./vue`, `./button`, `./badge`, `./spinner`, `./select`, `./input`, `./switch`, `./textarea`, `./checkbox`, `./radio`, `./calendar`, `./datepicker`, `./multiselect`, `./table`, `./floatlabel`, `./dialog`, `./toast`, `./tooltip`, `./tabs`, `./progress`, `./skeleton`, `./alert`, `./drawer`, `./dropdown`, `./sidebar`, `./pagination`, `./autocomplete`, `./auto-import` e o curinga `./components/*`.
23
23
 
24
24
 
@@ -65,7 +65,7 @@ Carregue o bundle **UMD** único: ele registra todos os componentes e expõe os
65
65
  <fx-toast></fx-toast>
66
66
 
67
67
  <!--
68
- 🔗 Links diretos para CDN (versão 1.0.9):
68
+ 🔗 Links diretos para CDN (versão 1.0.10):
69
69
  • https://cdn.jsdelivr.net/npm/@wrrdev/fenix-ui@latest/dist/fenix-ui.umd.min.js
70
70
  • https://unpkg.com/@wrrdev/fenix-ui@latest/dist/fenix-ui.umd.min.js
71
71
  -->
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/accordion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,OAAgB,MAAM,SA+DpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAEnB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAElB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAEtB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAEtB;cAEkB,iBAAiB,IAAI,IAAI;cAoBzB,oBAAoB,IAAI,IAAI;IAK/C,OAAO,CAAC,GAAG,CAAiC;cAEzB,MAAM,IAAI,IAAI;CAsBlC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,WAAY,SAAQ,SAAS;IACxC,OAAgB,MAAM,SAapB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAEtB;IAED,iCAAiC;IACjC,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAErB;cAEkB,iBAAiB,IAAI,IAAI;cASzB,oBAAoB,IAAI,IAAI;IAK/C,OAAO,CAAC,SAAS,CAAiC;cAE/B,MAAM,IAAI,IAAI;IAUjC,6DAA6D;IAC7D,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB,CAAS;IAEnC,mEAAmE;IACnE,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAqBrC,iCAAiC;IACjC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB,kCAAkC;IAClC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAI3B;AAED,wBAAgB,iBAAiB,IAAI,OAAO,WAAW,CAEtD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,gBAAgB,CAEhE"}
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/accordion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,OAAgB,MAAM,SAoEpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAEnB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAElB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAEtB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAEtB;cAEkB,iBAAiB,IAAI,IAAI;cAoBzB,oBAAoB,IAAI,IAAI;IAK/C,OAAO,CAAC,GAAG,CAAiC;cAEzB,MAAM,IAAI,IAAI;CAwBlC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,WAAY,SAAQ,SAAS;IACxC,OAAgB,MAAM,SAapB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAEtB;IAED,iCAAiC;IACjC,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAErB;cAEkB,iBAAiB,IAAI,IAAI;cASzB,oBAAoB,IAAI,IAAI;IAK/C,OAAO,CAAC,SAAS,CAAiC;cAE/B,MAAM,IAAI,IAAI;IAUjC,6DAA6D;IAC7D,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB,CAAS;IAEnC,mEAAmE;IACnE,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAqBrC,iCAAiC;IACjC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB,kCAAkC;IAClC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAI3B;AAED,wBAAgB,iBAAiB,IAAI,OAAO,WAAW,CAEtD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,gBAAgB,CAEhE"}
@@ -56,22 +56,24 @@ const _FxAccordionPanel = class _FxAccordionPanel extends FxElement {
56
56
  }
57
57
  render() {
58
58
  this.setTemplate(`
59
- <button type="button" class="header" part="header" role="button"
60
- aria-expanded="${this.expanded}"
61
- ${this.disabled ? 'aria-disabled="true"' : ""}>
62
- <span class="header-text" part="header-text">
63
- <slot name="header">${this.header}</slot>
64
- </span>
65
- <span class="chevron" part="chevron" aria-hidden="true">
66
- <svg width="14" height="14" viewBox="0 0 24 24" fill="none"
67
- stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
68
- <polyline points="6 9 12 15 18 9"></polyline>
69
- </svg>
70
- </span>
71
- </button>
72
- <div class="content" part="content" role="region">
73
- <div class="content-inner">
74
- <div class="content-pad" part="content-pad"><slot></slot></div>
59
+ <div class="panel" part="panel">
60
+ <button type="button" class="header" part="header" role="button"
61
+ aria-expanded="${this.expanded}"
62
+ ${this.disabled ? 'aria-disabled="true"' : ""}>
63
+ <span class="header-text" part="header-text">
64
+ <slot name="header">${this.header}</slot>
65
+ </span>
66
+ <span class="chevron" part="chevron" aria-hidden="true">
67
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none"
68
+ stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
69
+ <polyline points="6 9 12 15 18 9"></polyline>
70
+ </svg>
71
+ </span>
72
+ </button>
73
+ <div class="content" part="content" role="region">
74
+ <div class="content-inner">
75
+ <div class="content-pad" part="content-pad"><slot></slot></div>
76
+ </div>
75
77
  </div>
76
78
  </div>
77
79
  `);
@@ -83,9 +85,14 @@ _FxAccordionPanel.styles = css`
83
85
  font-family: var(--fx-font-family);
84
86
  font-size: var(--fx-font-size);
85
87
  color: var(--fx-text-default);
88
+ }
89
+ /* A borda fica no wrapper interno (nao no :host): regras do documento
90
+ externo (ex.: preflight do Tailwind com border-width: 0) vencem as
91
+ regras :host do shadow tree, o que apagaria a linha divisoria. */
92
+ .panel {
86
93
  border-bottom: 1px solid var(--fx-border-default);
87
94
  }
88
- :host(:last-child) { border-bottom: none; }
95
+ :host(:last-child) .panel { border-bottom: none; }
89
96
  :host([disabled]) { opacity: 0.6; pointer-events: none; }
90
97
  .header {
91
98
  display: flex;
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","sources":["../../../src/components/accordion/accordion.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\r\nimport { css } from '../../core/css';\r\nimport { defineElement } from '../../core/define';\r\n\r\n/**\r\n * <fx-accordion-panel> — Painel individual do accordion.\r\n *\r\n * Atributos:\r\n * - header: titulo exibido no cabecalho (ou use o slot \"header\").\r\n * - value: identificador unico do painel (usado pelo fx-accordion).\r\n * - expanded: presenca indica painel aberto (controlado pelo fx-accordion).\r\n * - disabled: impede a abertura do painel.\r\n */\r\nexport class FxAccordionPanel extends FxElement {\r\n static override styles = css`\r\n :host {\r\n display: block;\r\n font-family: var(--fx-font-family);\r\n font-size: var(--fx-font-size);\r\n color: var(--fx-text-default);\r\n border-bottom: 1px solid var(--fx-border-default);\r\n }\r\n :host(:last-child) { border-bottom: none; }\r\n :host([disabled]) { opacity: 0.6; pointer-events: none; }\r\n .header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--fx-space-md);\r\n width: 100%;\r\n box-sizing: border-box;\r\n padding: var(--fx-space-lg, 20px) var(--fx-space-md, 14px);\r\n border: none;\r\n background: transparent;\r\n font-family: inherit;\r\n font-size: inherit;\r\n font-weight: 500;\r\n color: var(--fx-text-muted);\r\n text-align: left;\r\n cursor: pointer;\r\n transition: color var(--fx-motion-duration-fast, 150ms) var(--fx-motion-easing, ease),\r\n background var(--fx-motion-duration-fast, 150ms) var(--fx-motion-easing, ease);\r\n }\r\n .header:hover { color: var(--fx-text-default); }\r\n .header:focus-visible {\r\n outline: none;\r\n box-shadow: var(--fx-effect-focus-ring, none);\r\n border-radius: var(--fx-radius-sm, 4px);\r\n }\r\n :host([expanded]) .header {\r\n color: var(--fx-text-default);\r\n font-weight: 700;\r\n }\r\n .header-text { flex: 1; min-width: 0; }\r\n .chevron {\r\n flex-shrink: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 24px;\r\n height: 24px;\r\n color: var(--fx-text-muted);\r\n transition: transform var(--fx-motion-duration-normal, 250ms) var(--fx-motion-easing, ease);\r\n }\r\n :host([expanded]) .chevron { transform: rotate(180deg); color: var(--fx-color-primary); }\r\n .content {\r\n display: grid;\r\n grid-template-rows: 0fr;\r\n transition: grid-template-rows var(--fx-motion-duration-normal, 250ms) var(--fx-motion-easing, ease);\r\n }\r\n :host([expanded]) .content { grid-template-rows: 1fr; }\r\n .content-inner { overflow: hidden; }\r\n .content-pad {\r\n padding: 0 var(--fx-space-md, 14px) var(--fx-space-lg, 20px);\r\n color: var(--fx-text-muted);\r\n line-height: 1.6;\r\n }\r\n `;\r\n\r\n static override get observedAttributes(): string[] {\r\n return ['header', 'expanded', 'disabled'];\r\n }\r\n\r\n get header(): string {\r\n return this.getAttr('header', '');\r\n }\r\n set header(v: string) {\r\n this.setAttribute('header', v);\r\n }\r\n\r\n get value(): string {\r\n return this.getAttr('value', '');\r\n }\r\n set value(v: string) {\r\n this.setAttribute('value', v);\r\n }\r\n\r\n get expanded(): boolean {\r\n return this.hasAttr('expanded');\r\n }\r\n set expanded(v: boolean) {\r\n this.toggleAttr('expanded', v);\r\n }\r\n\r\n get disabled(): boolean {\r\n return this.hasAttr('disabled');\r\n }\r\n set disabled(v: boolean) {\r\n this.toggleAttr('disabled', v);\r\n }\r\n\r\n protected override connectedCallback(): void {\r\n super.connectedCallback();\r\n // O clique vem do shadow root; composedPath() revela o alvo real.\r\n this.addEventListener('click', (e) => {\r\n const path = e.composedPath() as HTMLElement[];\r\n if (!path.some((el) => el.classList?.contains('header'))) return;\r\n if (this.disabled) return;\r\n this.dispatchEvent(\r\n new CustomEvent('fx-accordion-toggle', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { panel: this },\r\n }),\r\n );\r\n });\r\n // Re-render quando o atributo expanded muda (para aria-expanded).\r\n this._mo = new MutationObserver(() => this.render());\r\n this._mo.observe(this, { attributes: true, attributeFilter: ['expanded', 'header', 'disabled'] });\r\n }\r\n\r\n protected override disconnectedCallback(): void {\r\n this._mo?.disconnect();\r\n this._mo = null;\r\n }\r\n\r\n private _mo: MutationObserver | null = null;\r\n\r\n protected override render(): void {\r\n this.setTemplate(`\r\n <button type=\"button\" class=\"header\" part=\"header\" role=\"button\"\r\n aria-expanded=\"${this.expanded}\"\r\n ${this.disabled ? 'aria-disabled=\"true\"' : ''}>\r\n <span class=\"header-text\" part=\"header-text\">\r\n <slot name=\"header\">${this.header}</slot>\r\n </span>\r\n <span class=\"chevron\" part=\"chevron\" aria-hidden=\"true\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n </svg>\r\n </span>\r\n </button>\r\n <div class=\"content\" part=\"content\" role=\"region\">\r\n <div class=\"content-inner\">\r\n <div class=\"content-pad\" part=\"content-pad\"><slot></slot></div>\r\n </div>\r\n </div>\r\n `);\r\n }\r\n}\r\n\r\n/**\r\n * <fx-accordion> — Conjunto de paineis expansivos (estilo PrimeVue).\r\n *\r\n * Por padrao (modo single) abrir um painel fecha os outros.\r\n * Adicione o atributo `multiple` para permitir varios paineis abertos.\r\n *\r\n * Uso:\r\n * <fx-accordion value=\"p1\">\r\n * <fx-accordion-panel value=\"p1\" header=\"Titulo 1\">Conteudo…</fx-accordion-panel>\r\n * <fx-accordion-panel value=\"p2\" header=\"Titulo 2\">Conteudo…</fx-accordion-panel>\r\n * </fx-accordion>\r\n *\r\n * Atributos:\r\n * - value: valor(es) ativo(s), separados por virgula no modo multiple.\r\n * - multiple: permite manter varios paineis abertos ao mesmo tempo.\r\n *\r\n * Evento: `change` (composed, detail: { value: string[] }).\r\n */\r\nexport class FxAccordion extends FxElement {\r\n static override styles = css`\r\n :host {\r\n display: block;\r\n font-family: var(--fx-font-family);\r\n font-size: var(--fx-font-size);\r\n }\r\n .accordion {\r\n background: var(--fx-surface-background, #ffffff);\r\n border: 1px solid var(--fx-border-default);\r\n border-radius: var(--fx-radius-md, 8px);\r\n overflow: hidden;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\r\n }\r\n `;\r\n\r\n static override get observedAttributes(): string[] {\r\n return ['value', 'multiple'];\r\n }\r\n\r\n get multiple(): boolean {\r\n return this.hasAttr('multiple');\r\n }\r\n set multiple(v: boolean) {\r\n this.toggleAttr('multiple', v);\r\n }\r\n\r\n /** Valores ativos como array. */\r\n get values(): string[] {\r\n return this.getAttr('value', '').split(',').map(s => s.trim()).filter(Boolean);\r\n }\r\n set values(v: string[]) {\r\n this.setAttribute('value', v.join(','));\r\n }\r\n\r\n protected override connectedCallback(): void {\r\n this._observer = new MutationObserver(() => this._sync());\r\n this._observer.observe(this, { childList: true, subtree: true });\r\n super.connectedCallback();\r\n // Os paineis filhos podem ainda nao estar upgradados no primeiro sync;\r\n // reagenda para depois da fila de upgrade de custom elements.\r\n queueMicrotask(() => this._sync());\r\n }\r\n\r\n protected override disconnectedCallback(): void {\r\n this._observer?.disconnect();\r\n this._observer = null;\r\n }\r\n\r\n private _observer: MutationObserver | null = null;\r\n\r\n protected override render(): void {\r\n this.setTemplate(`\r\n <div class=\"accordion\" part=\"accordion\">\r\n <slot></slot>\r\n </div>\r\n `);\r\n this._sync();\r\n this._attachListeners();\r\n }\r\n\r\n /** Painéis do accordion (filhos diretos ou descendentes). */\r\n private get panels(): FxAccordionPanel[] {\r\n return Array.from(this.querySelectorAll<FxAccordionPanel>('fx-accordion-panel'));\r\n }\r\n\r\n private _sync(): void {\r\n const actives = this.values;\r\n // Leitura via getAttribute (nao via getters) porque os paineis filhos\r\n // podem ainda nao estar upgradados quando o accordion conecta.\r\n const panels = Array.from(this.querySelectorAll('fx-accordion-panel'));\r\n // Apenas na conexao inicial (sem valor definido): abre o primeiro painel.\r\n if (!this._initialized && actives.length === 0 && panels.length > 0) {\r\n this._initialized = true;\r\n const first = panels.find((p) => !p.hasAttribute('disabled'));\r\n if (first) {\r\n this.values = [first.getAttribute('value') || '0'];\r\n return;\r\n }\r\n }\r\n this._initialized = true;\r\n panels.forEach((p, i) => {\r\n const v = p.getAttribute('value') || String(i);\r\n if (!p.hasAttribute('value')) p.setAttribute('value', v);\r\n p.toggleAttribute('expanded', actives.includes(v));\r\n });\r\n }\r\n\r\n private _initialized = false;\r\n\r\n private _attachListeners(): void {\r\n if (this._listenersAttached) return;\r\n this._listenersAttached = true;\r\n // O painel emite 'fx-accordion-toggle' a partir do proprio host\r\n // (event retargeting do Shadow DOM impede usar closest('.header') aqui).\r\n this.addEventListener('fx-accordion-toggle', (e) => {\r\n const panel = (e as CustomEvent).detail?.panel as FxAccordionPanel | undefined;\r\n if (!panel || panel.disabled) return;\r\n this.toggle(panel);\r\n });\r\n }\r\n\r\n private _listenersAttached = false;\r\n\r\n /** Abre/fecha um painel respeitando o modo (single | multiple). */\r\n toggle(panel: FxAccordionPanel): void {\r\n const v = panel.value;\r\n let actives = this.values;\r\n if (panel.expanded) {\r\n actives = actives.filter(a => a !== v);\r\n } else if (this.multiple) {\r\n actives = [...actives, v];\r\n } else {\r\n actives = [v];\r\n }\r\n this.values = actives;\r\n this._sync();\r\n this.dispatchEvent(\r\n new CustomEvent('change', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { value: actives },\r\n }),\r\n );\r\n }\r\n\r\n /** Abre um painel pelo valor. */\r\n open(value: string): void {\r\n const panel = this.panels.find((p, i) => (p.value || String(i)) === value);\r\n if (panel && !panel.expanded) this.toggle(panel);\r\n }\r\n\r\n /** Fecha um painel pelo valor. */\r\n close(value: string): void {\r\n const panel = this.panels.find((p, i) => (p.value || String(i)) === value);\r\n if (panel && panel.expanded) this.toggle(panel);\r\n }\r\n}\r\n\r\nexport function defineFxAccordion(): typeof FxAccordion {\r\n return defineElement('fx-accordion', FxAccordion);\r\n}\r\n\r\nexport function defineFxAccordionPanel(): typeof FxAccordionPanel {\r\n return defineElement('fx-accordion-panel', FxAccordionPanel);\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accordion.js","sources":["../../../src/components/accordion/accordion.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\r\nimport { css } from '../../core/css';\r\nimport { defineElement } from '../../core/define';\r\n\r\n/**\r\n * <fx-accordion-panel> — Painel individual do accordion.\r\n *\r\n * Atributos:\r\n * - header: titulo exibido no cabecalho (ou use o slot \"header\").\r\n * - value: identificador unico do painel (usado pelo fx-accordion).\r\n * - expanded: presenca indica painel aberto (controlado pelo fx-accordion).\r\n * - disabled: impede a abertura do painel.\r\n */\r\nexport class FxAccordionPanel extends FxElement {\r\n static override styles = css`\r\n :host {\r\n display: block;\r\n font-family: var(--fx-font-family);\r\n font-size: var(--fx-font-size);\r\n color: var(--fx-text-default);\r\n }\r\n /* A borda fica no wrapper interno (nao no :host): regras do documento\r\n externo (ex.: preflight do Tailwind com border-width: 0) vencem as\r\n regras :host do shadow tree, o que apagaria a linha divisoria. */\r\n .panel {\r\n border-bottom: 1px solid var(--fx-border-default);\r\n }\r\n :host(:last-child) .panel { border-bottom: none; }\r\n :host([disabled]) { opacity: 0.6; pointer-events: none; }\r\n .header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--fx-space-md);\r\n width: 100%;\r\n box-sizing: border-box;\r\n padding: var(--fx-space-lg, 20px) var(--fx-space-md, 14px);\r\n border: none;\r\n background: transparent;\r\n font-family: inherit;\r\n font-size: inherit;\r\n font-weight: 500;\r\n color: var(--fx-text-muted);\r\n text-align: left;\r\n cursor: pointer;\r\n transition: color var(--fx-motion-duration-fast, 150ms) var(--fx-motion-easing, ease),\r\n background var(--fx-motion-duration-fast, 150ms) var(--fx-motion-easing, ease);\r\n }\r\n .header:hover { color: var(--fx-text-default); }\r\n .header:focus-visible {\r\n outline: none;\r\n box-shadow: var(--fx-effect-focus-ring, none);\r\n border-radius: var(--fx-radius-sm, 4px);\r\n }\r\n :host([expanded]) .header {\r\n color: var(--fx-text-default);\r\n font-weight: 700;\r\n }\r\n .header-text { flex: 1; min-width: 0; }\r\n .chevron {\r\n flex-shrink: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 24px;\r\n height: 24px;\r\n color: var(--fx-text-muted);\r\n transition: transform var(--fx-motion-duration-normal, 250ms) var(--fx-motion-easing, ease);\r\n }\r\n :host([expanded]) .chevron { transform: rotate(180deg); color: var(--fx-color-primary); }\r\n .content {\r\n display: grid;\r\n grid-template-rows: 0fr;\r\n transition: grid-template-rows var(--fx-motion-duration-normal, 250ms) var(--fx-motion-easing, ease);\r\n }\r\n :host([expanded]) .content { grid-template-rows: 1fr; }\r\n .content-inner { overflow: hidden; }\r\n .content-pad {\r\n padding: 0 var(--fx-space-md, 14px) var(--fx-space-lg, 20px);\r\n color: var(--fx-text-muted);\r\n line-height: 1.6;\r\n }\r\n `;\r\n\r\n static override get observedAttributes(): string[] {\r\n return ['header', 'expanded', 'disabled'];\r\n }\r\n\r\n get header(): string {\r\n return this.getAttr('header', '');\r\n }\r\n set header(v: string) {\r\n this.setAttribute('header', v);\r\n }\r\n\r\n get value(): string {\r\n return this.getAttr('value', '');\r\n }\r\n set value(v: string) {\r\n this.setAttribute('value', v);\r\n }\r\n\r\n get expanded(): boolean {\r\n return this.hasAttr('expanded');\r\n }\r\n set expanded(v: boolean) {\r\n this.toggleAttr('expanded', v);\r\n }\r\n\r\n get disabled(): boolean {\r\n return this.hasAttr('disabled');\r\n }\r\n set disabled(v: boolean) {\r\n this.toggleAttr('disabled', v);\r\n }\r\n\r\n protected override connectedCallback(): void {\r\n super.connectedCallback();\r\n // O clique vem do shadow root; composedPath() revela o alvo real.\r\n this.addEventListener('click', (e) => {\r\n const path = e.composedPath() as HTMLElement[];\r\n if (!path.some((el) => el.classList?.contains('header'))) return;\r\n if (this.disabled) return;\r\n this.dispatchEvent(\r\n new CustomEvent('fx-accordion-toggle', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { panel: this },\r\n }),\r\n );\r\n });\r\n // Re-render quando o atributo expanded muda (para aria-expanded).\r\n this._mo = new MutationObserver(() => this.render());\r\n this._mo.observe(this, { attributes: true, attributeFilter: ['expanded', 'header', 'disabled'] });\r\n }\r\n\r\n protected override disconnectedCallback(): void {\r\n this._mo?.disconnect();\r\n this._mo = null;\r\n }\r\n\r\n private _mo: MutationObserver | null = null;\r\n\r\n protected override render(): void {\r\n this.setTemplate(`\r\n <div class=\"panel\" part=\"panel\">\r\n <button type=\"button\" class=\"header\" part=\"header\" role=\"button\"\r\n aria-expanded=\"${this.expanded}\"\r\n ${this.disabled ? 'aria-disabled=\"true\"' : ''}>\r\n <span class=\"header-text\" part=\"header-text\">\r\n <slot name=\"header\">${this.header}</slot>\r\n </span>\r\n <span class=\"chevron\" part=\"chevron\" aria-hidden=\"true\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n </svg>\r\n </span>\r\n </button>\r\n <div class=\"content\" part=\"content\" role=\"region\">\r\n <div class=\"content-inner\">\r\n <div class=\"content-pad\" part=\"content-pad\"><slot></slot></div>\r\n </div>\r\n </div>\r\n </div>\r\n `);\r\n }\r\n}\r\n\r\n/**\r\n * <fx-accordion> — Conjunto de paineis expansivos (estilo PrimeVue).\r\n *\r\n * Por padrao (modo single) abrir um painel fecha os outros.\r\n * Adicione o atributo `multiple` para permitir varios paineis abertos.\r\n *\r\n * Uso:\r\n * <fx-accordion value=\"p1\">\r\n * <fx-accordion-panel value=\"p1\" header=\"Titulo 1\">Conteudo…</fx-accordion-panel>\r\n * <fx-accordion-panel value=\"p2\" header=\"Titulo 2\">Conteudo…</fx-accordion-panel>\r\n * </fx-accordion>\r\n *\r\n * Atributos:\r\n * - value: valor(es) ativo(s), separados por virgula no modo multiple.\r\n * - multiple: permite manter varios paineis abertos ao mesmo tempo.\r\n *\r\n * Evento: `change` (composed, detail: { value: string[] }).\r\n */\r\nexport class FxAccordion extends FxElement {\r\n static override styles = css`\r\n :host {\r\n display: block;\r\n font-family: var(--fx-font-family);\r\n font-size: var(--fx-font-size);\r\n }\r\n .accordion {\r\n background: var(--fx-surface-background, #ffffff);\r\n border: 1px solid var(--fx-border-default);\r\n border-radius: var(--fx-radius-md, 8px);\r\n overflow: hidden;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\r\n }\r\n `;\r\n\r\n static override get observedAttributes(): string[] {\r\n return ['value', 'multiple'];\r\n }\r\n\r\n get multiple(): boolean {\r\n return this.hasAttr('multiple');\r\n }\r\n set multiple(v: boolean) {\r\n this.toggleAttr('multiple', v);\r\n }\r\n\r\n /** Valores ativos como array. */\r\n get values(): string[] {\r\n return this.getAttr('value', '').split(',').map(s => s.trim()).filter(Boolean);\r\n }\r\n set values(v: string[]) {\r\n this.setAttribute('value', v.join(','));\r\n }\r\n\r\n protected override connectedCallback(): void {\r\n this._observer = new MutationObserver(() => this._sync());\r\n this._observer.observe(this, { childList: true, subtree: true });\r\n super.connectedCallback();\r\n // Os paineis filhos podem ainda nao estar upgradados no primeiro sync;\r\n // reagenda para depois da fila de upgrade de custom elements.\r\n queueMicrotask(() => this._sync());\r\n }\r\n\r\n protected override disconnectedCallback(): void {\r\n this._observer?.disconnect();\r\n this._observer = null;\r\n }\r\n\r\n private _observer: MutationObserver | null = null;\r\n\r\n protected override render(): void {\r\n this.setTemplate(`\r\n <div class=\"accordion\" part=\"accordion\">\r\n <slot></slot>\r\n </div>\r\n `);\r\n this._sync();\r\n this._attachListeners();\r\n }\r\n\r\n /** Painéis do accordion (filhos diretos ou descendentes). */\r\n private get panels(): FxAccordionPanel[] {\r\n return Array.from(this.querySelectorAll<FxAccordionPanel>('fx-accordion-panel'));\r\n }\r\n\r\n private _sync(): void {\r\n const actives = this.values;\r\n // Leitura via getAttribute (nao via getters) porque os paineis filhos\r\n // podem ainda nao estar upgradados quando o accordion conecta.\r\n const panels = Array.from(this.querySelectorAll('fx-accordion-panel'));\r\n // Apenas na conexao inicial (sem valor definido): abre o primeiro painel.\r\n if (!this._initialized && actives.length === 0 && panels.length > 0) {\r\n this._initialized = true;\r\n const first = panels.find((p) => !p.hasAttribute('disabled'));\r\n if (first) {\r\n this.values = [first.getAttribute('value') || '0'];\r\n return;\r\n }\r\n }\r\n this._initialized = true;\r\n panels.forEach((p, i) => {\r\n const v = p.getAttribute('value') || String(i);\r\n if (!p.hasAttribute('value')) p.setAttribute('value', v);\r\n p.toggleAttribute('expanded', actives.includes(v));\r\n });\r\n }\r\n\r\n private _initialized = false;\r\n\r\n private _attachListeners(): void {\r\n if (this._listenersAttached) return;\r\n this._listenersAttached = true;\r\n // O painel emite 'fx-accordion-toggle' a partir do proprio host\r\n // (event retargeting do Shadow DOM impede usar closest('.header') aqui).\r\n this.addEventListener('fx-accordion-toggle', (e) => {\r\n const panel = (e as CustomEvent).detail?.panel as FxAccordionPanel | undefined;\r\n if (!panel || panel.disabled) return;\r\n this.toggle(panel);\r\n });\r\n }\r\n\r\n private _listenersAttached = false;\r\n\r\n /** Abre/fecha um painel respeitando o modo (single | multiple). */\r\n toggle(panel: FxAccordionPanel): void {\r\n const v = panel.value;\r\n let actives = this.values;\r\n if (panel.expanded) {\r\n actives = actives.filter(a => a !== v);\r\n } else if (this.multiple) {\r\n actives = [...actives, v];\r\n } else {\r\n actives = [v];\r\n }\r\n this.values = actives;\r\n this._sync();\r\n this.dispatchEvent(\r\n new CustomEvent('change', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { value: actives },\r\n }),\r\n );\r\n }\r\n\r\n /** Abre um painel pelo valor. */\r\n open(value: string): void {\r\n const panel = this.panels.find((p, i) => (p.value || String(i)) === value);\r\n if (panel && !panel.expanded) this.toggle(panel);\r\n }\r\n\r\n /** Fecha um painel pelo valor. */\r\n close(value: string): void {\r\n const panel = this.panels.find((p, i) => (p.value || String(i)) === value);\r\n if (panel && panel.expanded) this.toggle(panel);\r\n }\r\n}\r\n\r\nexport function defineFxAccordion(): typeof FxAccordion {\r\n return defineElement('fx-accordion', FxAccordion);\r\n}\r\n\r\nexport function defineFxAccordionPanel(): typeof FxAccordionPanel {\r\n return defineElement('fx-accordion-panel', FxAccordionPanel);\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/button/button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACrC,OAAgB,MAAM,SAoGpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,+BAA+B;IAC/B,IAAI,IAAI,IAAI,MAAM,CAGjB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAE1B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;cAEkB,MAAM,IAAI,IAAI;cAmCd,iBAAiB,IAAI,IAAI;cAKzB,oBAAoB,IAAI,IAAI;IAK/C;;;;OAIG;IACH,OAAO,CAAC,WAAW,CAmBjB;CACH;AAED,wBAAgB,cAAc,IAAI,OAAO,QAAQ,CAEhD"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/button/button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACrC,OAAgB,MAAM,SAqGpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,+BAA+B;IAC/B,IAAI,IAAI,IAAI,MAAM,CAGjB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAE1B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;cAEkB,MAAM,IAAI,IAAI;cAmCd,iBAAiB,IAAI,IAAI;cAKzB,oBAAoB,IAAI,IAAI;IAK/C;;;;OAIG;IACH,OAAO,CAAC,WAAW,CAmBjB;CACH;AAED,wBAAgB,cAAc,IAAI,OAAO,QAAQ,CAEhD"}
@@ -131,6 +131,7 @@ _FxButton.styles = css`
131
131
  :host([variant='success']) .btn { background: var(--fx-color-success); }
132
132
  :host([variant='warning']) .btn { background: var(--fx-color-warning); }
133
133
  :host([variant='danger']) .btn { background: var(--fx-color-danger); }
134
+ :host([variant='info']) .btn { background: var(--fx-color-info); }
134
135
  :host([variant='ghost']) .btn { background: transparent; color: var(--fx-text-default); }
135
136
  :host([variant='ghost']) .btn:hover { background: var(--fx-surface-surface-hover); filter: none; }
136
137
  :host([variant='outline']) .btn { background: transparent; color: var(--fx-color-primary); border-color: var(--fx-color-primary); }
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","sources":["../../../src/components/button/button.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-button> — Componente de ação (piloto).\n *\n * Atributos: variant, size, disabled, loading, type, full.\n * Slots: default (rótulo), `icon` (ícone opcional).\n * Evento: `click` nativo atravessa o Shadow DOM (composed) — ouça no host.\n */\nexport class FxButton extends FxElement {\n static override styles = css`\n :host {\n display: inline-block;\n vertical-align: middle;\n }\n .btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: var(--fx-space-sm);\n font-family: var(--fx-font-family);\n font-size: var(--fx-font-size);\n font-weight: var(--fx-font-weight);\n line-height: var(--fx-font-line-height);\n padding: var(--fx-space-md) var(--fx-space-xl);\n border-radius: var(--fx-radius-md);\n border: 1px solid transparent;\n color: #fff;\n background: var(--fx-color-primary);\n cursor: pointer;\n user-select: none;\n text-decoration: none;\n transition:\n background-color var(--fx-motion-duration-normal) var(--fx-motion-easing),\n border-color var(--fx-motion-duration-normal) var(--fx-motion-easing),\n transform var(--fx-motion-duration-fast) var(--fx-motion-easing),\n box-shadow var(--fx-motion-duration-normal) var(--fx-motion-easing);\n }\n .btn:focus-visible {\n outline: 2px solid var(--fx-color-primary);\n outline-offset: 2px;\n }\n .btn:hover { filter: brightness(0.88); }\n .btn:active { transform: translateY(1px); }\n\n /* Tamanhos — alturas vindas dos tokens (personalizáveis por preset) */\n .btn { min-height: var(--fx-size-md); }\n :host([size='sm']) .btn { padding: var(--fx-space-sm) var(--fx-space-lg); font-size: var(--fx-font-size); min-height: var(--fx-size-sm); }\n :host([size='lg']) .btn { padding: var(--fx-space-lg) var(--fx-space-xl); font-size: calc(var(--fx-font-size) + 4px); min-height: var(--fx-size-lg); }\n\n /* Full width */\n :host([full]) .btn { width: 100%; }\n\n /* Variantes */\n :host([variant='secondary']) .btn { background: var(--fx-color-secondary); }\n :host([variant='success']) .btn { background: var(--fx-color-success); }\n :host([variant='warning']) .btn { background: var(--fx-color-warning); }\n :host([variant='danger']) .btn { background: var(--fx-color-danger); }\n :host([variant='ghost']) .btn { background: transparent; color: var(--fx-text-default); }\n :host([variant='ghost']) .btn:hover { background: var(--fx-surface-surface-hover); filter: none; }\n :host([variant='outline']) .btn { background: transparent; color: var(--fx-color-primary); border-color: var(--fx-color-primary); }\n :host([variant='outline']) .btn:hover { background: var(--fx-surface-surface-hover); filter: none; }\n\n /* Ícone e spinner */\n .btn__icon { display: inline-flex; }\n .btn__icon[hidden] { display: none; }\n .btn__label { display: inline-flex; align-items: center; justify-content: center; }\n .btn[hidden] { display: none; }\n .btn__spinner {\n width: 1em;\n height: 1em;\n border: 2px solid currentColor;\n border-top-color: transparent;\n border-radius: var(--fx-radius-full);\n animation: fx-spin var(--fx-motion-duration-normal) linear infinite;\n }\n @keyframes fx-spin { to { transform: rotate(360deg); } }\n\n /* Estados */\n :host([disabled]) .btn,\n :host([loading]) .btn {\n opacity: 0.55;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n /* Efeito ripple (). Desative com effect.ripple: '0' no preset. */\n .btn {\n position: relative;\n overflow: hidden;\n }\n .btn__ripple {\n position: absolute;\n border-radius: var(--fx-radius-full);\n background: currentColor;\n opacity: 0.28;\n transform: scale(0);\n animation: fx-ripple 600ms var(--fx-motion-easing) forwards;\n pointer-events: none;\n }\n @keyframes fx-ripple {\n to {\n transform: scale(2.6);\n opacity: 0;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .btn__ripple { display: none; }\n }\n `;\n\n static override get observedAttributes(): string[] {\n return ['variant', 'size', 'disabled', 'loading', 'type', 'full'];\n }\n\n /** Tamanho. Padrão: `'md'`. */\n get size(): string {\n const s = this.getAttr('size', 'md');\n return s === 'sm' || s === 'lg' ? s : 'md';\n }\n set size(value: string) {\n this.setAttribute('size', value);\n }\n\n get disabled(): boolean {\n return this.hasAttr('disabled');\n }\n set disabled(value: boolean) {\n this.toggleAttr('disabled', Boolean(value));\n }\n\n get loading(): boolean {\n return this.hasAttr('loading');\n }\n set loading(value: boolean) {\n this.toggleAttr('loading', Boolean(value));\n }\n\n protected override render(): void {\n const loading = this.hasAttr('loading');\n const disabled = this.hasAttr('disabled') || loading;\n const btnType = this.getAttr('type', 'button');\n\n this.setTemplate(`\n <button class=\"btn\" part=\"button\" type=\"${btnType}\">\n <span class=\"btn__icon\" part=\"icon\"><slot name=\"icon\"></slot></span>\n <span class=\"btn__label\" part=\"label\"><slot></slot></span>\n ${loading ? '<span class=\"btn__spinner\" aria-hidden=\"true\"></span>' : ''}\n </button>\n `);\n\n const btn = this.root.querySelector<HTMLButtonElement>('.btn');\n if (!btn) return;\n\n // Esconde o container do ícone quando o slot está vazio,\n // evitando espaço fantasma do `gap` que descentraliza o rótulo.\n const iconSlot = btn.querySelector<HTMLSlotElement>('.btn__icon slot');\n const iconWrap = this.root.querySelector<HTMLElement>('.btn__icon');\n const hasIcon = Boolean(iconSlot?.assignedNodes({ flatten: true }).some((n) =>\n n.nodeType === Node.ELEMENT_NODE || (n.textContent ?? '').trim() !== '',\n ));\n iconWrap?.toggleAttribute('hidden', !hasIcon);\n if (disabled) {\n btn.setAttribute('disabled', '');\n btn.setAttribute('aria-disabled', 'true');\n } else {\n btn.removeAttribute('disabled');\n btn.removeAttribute('aria-disabled');\n }\n if (loading) btn.setAttribute('aria-busy', 'true');\n else btn.removeAttribute('aria-busy');\n }\n\n protected override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('pointerdown', this.spawnRipple);\n }\n\n protected override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('pointerdown', this.spawnRipple);\n }\n\n /**\n * Efeito ripple : cria um círculo que expande do ponto\n * de clique e desaparece. Respeita o token `effect.ripple` ('0' desativa)\n * e `prefers-reduced-motion` (via CSS).\n */\n private spawnRipple = (event: PointerEvent): void => {\n if (this.hasAttr('disabled') || this.hasAttr('loading')) return;\n const enabled = getComputedStyle(this)\n .getPropertyValue('--fx-effect-ripple')\n .trim();\n if (enabled === '0' || enabled === 'false') return;\n\n const btn = this.root.querySelector<HTMLElement>('.btn');\n if (!btn) return;\n\n const rect = btn.getBoundingClientRect();\n const size = Math.max(rect.width, rect.height);\n const ripple = document.createElement('span');\n ripple.className = 'btn__ripple';\n ripple.style.width = ripple.style.height = `${size}px`;\n ripple.style.left = `${event.clientX - rect.left - size / 2}px`;\n ripple.style.top = `${event.clientY - rect.top - size / 2}px`;\n btn.appendChild(ripple);\n ripple.addEventListener('animationend', () => ripple.remove());\n };\n}\n\nexport function defineFxButton(): typeof FxButton {\n return defineElement('fx-button', FxButton);\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"button.js","sources":["../../../src/components/button/button.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-button> — Componente de ação (piloto).\n *\n * Atributos: variant, size, disabled, loading, type, full.\n * Slots: default (rótulo), `icon` (ícone opcional).\n * Evento: `click` nativo atravessa o Shadow DOM (composed) — ouça no host.\n */\nexport class FxButton extends FxElement {\n static override styles = css`\n :host {\n display: inline-block;\n vertical-align: middle;\n }\n .btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: var(--fx-space-sm);\n font-family: var(--fx-font-family);\n font-size: var(--fx-font-size);\n font-weight: var(--fx-font-weight);\n line-height: var(--fx-font-line-height);\n padding: var(--fx-space-md) var(--fx-space-xl);\n border-radius: var(--fx-radius-md);\n border: 1px solid transparent;\n color: #fff;\n background: var(--fx-color-primary);\n cursor: pointer;\n user-select: none;\n text-decoration: none;\n transition:\n background-color var(--fx-motion-duration-normal) var(--fx-motion-easing),\n border-color var(--fx-motion-duration-normal) var(--fx-motion-easing),\n transform var(--fx-motion-duration-fast) var(--fx-motion-easing),\n box-shadow var(--fx-motion-duration-normal) var(--fx-motion-easing);\n }\n .btn:focus-visible {\n outline: 2px solid var(--fx-color-primary);\n outline-offset: 2px;\n }\n .btn:hover { filter: brightness(0.88); }\n .btn:active { transform: translateY(1px); }\n\n /* Tamanhos — alturas vindas dos tokens (personalizáveis por preset) */\n .btn { min-height: var(--fx-size-md); }\n :host([size='sm']) .btn { padding: var(--fx-space-sm) var(--fx-space-lg); font-size: var(--fx-font-size); min-height: var(--fx-size-sm); }\n :host([size='lg']) .btn { padding: var(--fx-space-lg) var(--fx-space-xl); font-size: calc(var(--fx-font-size) + 4px); min-height: var(--fx-size-lg); }\n\n /* Full width */\n :host([full]) .btn { width: 100%; }\n\n /* Variantes */\n :host([variant='secondary']) .btn { background: var(--fx-color-secondary); }\n :host([variant='success']) .btn { background: var(--fx-color-success); }\n :host([variant='warning']) .btn { background: var(--fx-color-warning); }\n :host([variant='danger']) .btn { background: var(--fx-color-danger); }\n :host([variant='info']) .btn { background: var(--fx-color-info); }\n :host([variant='ghost']) .btn { background: transparent; color: var(--fx-text-default); }\n :host([variant='ghost']) .btn:hover { background: var(--fx-surface-surface-hover); filter: none; }\n :host([variant='outline']) .btn { background: transparent; color: var(--fx-color-primary); border-color: var(--fx-color-primary); }\n :host([variant='outline']) .btn:hover { background: var(--fx-surface-surface-hover); filter: none; }\n\n /* Ícone e spinner */\n .btn__icon { display: inline-flex; }\n .btn__icon[hidden] { display: none; }\n .btn__label { display: inline-flex; align-items: center; justify-content: center; }\n .btn[hidden] { display: none; }\n .btn__spinner {\n width: 1em;\n height: 1em;\n border: 2px solid currentColor;\n border-top-color: transparent;\n border-radius: var(--fx-radius-full);\n animation: fx-spin var(--fx-motion-duration-normal) linear infinite;\n }\n @keyframes fx-spin { to { transform: rotate(360deg); } }\n\n /* Estados */\n :host([disabled]) .btn,\n :host([loading]) .btn {\n opacity: 0.55;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n /* Efeito ripple (). Desative com effect.ripple: '0' no preset. */\n .btn {\n position: relative;\n overflow: hidden;\n }\n .btn__ripple {\n position: absolute;\n border-radius: var(--fx-radius-full);\n background: currentColor;\n opacity: 0.28;\n transform: scale(0);\n animation: fx-ripple 600ms var(--fx-motion-easing) forwards;\n pointer-events: none;\n }\n @keyframes fx-ripple {\n to {\n transform: scale(2.6);\n opacity: 0;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .btn__ripple { display: none; }\n }\n `;\n\n static override get observedAttributes(): string[] {\n return ['variant', 'size', 'disabled', 'loading', 'type', 'full'];\n }\n\n /** Tamanho. Padrão: `'md'`. */\n get size(): string {\n const s = this.getAttr('size', 'md');\n return s === 'sm' || s === 'lg' ? s : 'md';\n }\n set size(value: string) {\n this.setAttribute('size', value);\n }\n\n get disabled(): boolean {\n return this.hasAttr('disabled');\n }\n set disabled(value: boolean) {\n this.toggleAttr('disabled', Boolean(value));\n }\n\n get loading(): boolean {\n return this.hasAttr('loading');\n }\n set loading(value: boolean) {\n this.toggleAttr('loading', Boolean(value));\n }\n\n protected override render(): void {\n const loading = this.hasAttr('loading');\n const disabled = this.hasAttr('disabled') || loading;\n const btnType = this.getAttr('type', 'button');\n\n this.setTemplate(`\n <button class=\"btn\" part=\"button\" type=\"${btnType}\">\n <span class=\"btn__icon\" part=\"icon\"><slot name=\"icon\"></slot></span>\n <span class=\"btn__label\" part=\"label\"><slot></slot></span>\n ${loading ? '<span class=\"btn__spinner\" aria-hidden=\"true\"></span>' : ''}\n </button>\n `);\n\n const btn = this.root.querySelector<HTMLButtonElement>('.btn');\n if (!btn) return;\n\n // Esconde o container do ícone quando o slot está vazio,\n // evitando espaço fantasma do `gap` que descentraliza o rótulo.\n const iconSlot = btn.querySelector<HTMLSlotElement>('.btn__icon slot');\n const iconWrap = this.root.querySelector<HTMLElement>('.btn__icon');\n const hasIcon = Boolean(iconSlot?.assignedNodes({ flatten: true }).some((n) =>\n n.nodeType === Node.ELEMENT_NODE || (n.textContent ?? '').trim() !== '',\n ));\n iconWrap?.toggleAttribute('hidden', !hasIcon);\n if (disabled) {\n btn.setAttribute('disabled', '');\n btn.setAttribute('aria-disabled', 'true');\n } else {\n btn.removeAttribute('disabled');\n btn.removeAttribute('aria-disabled');\n }\n if (loading) btn.setAttribute('aria-busy', 'true');\n else btn.removeAttribute('aria-busy');\n }\n\n protected override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('pointerdown', this.spawnRipple);\n }\n\n protected override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('pointerdown', this.spawnRipple);\n }\n\n /**\n * Efeito ripple : cria um círculo que expande do ponto\n * de clique e desaparece. Respeita o token `effect.ripple` ('0' desativa)\n * e `prefers-reduced-motion` (via CSS).\n */\n private spawnRipple = (event: PointerEvent): void => {\n if (this.hasAttr('disabled') || this.hasAttr('loading')) return;\n const enabled = getComputedStyle(this)\n .getPropertyValue('--fx-effect-ripple')\n .trim();\n if (enabled === '0' || enabled === 'false') return;\n\n const btn = this.root.querySelector<HTMLElement>('.btn');\n if (!btn) return;\n\n const rect = btn.getBoundingClientRect();\n const size = Math.max(rect.width, rect.height);\n const ripple = document.createElement('span');\n ripple.className = 'btn__ripple';\n ripple.style.width = ripple.style.height = `${size}px`;\n ripple.style.left = `${event.clientX - rect.left - size / 2}px`;\n ripple.style.top = `${event.clientY - rect.top - size / 2}px`;\n btn.appendChild(ripple);\n ripple.addEventListener('animationend', () => ripple.remove());\n };\n}\n\nexport function defineFxButton(): typeof FxButton {\n return defineElement('fx-button', FxButton);\n}"],"names":[],"mappings":";;;AAWO,MAAM,YAAN,MAAM,kBAAiB,UAAU;AAAA,EAAjC,cAAA;AAAA,UAAA,GAAA,SAAA;AAqLL,SAAQ,cAAc,CAAC,UAA8B;AACnD,UAAI,KAAK,QAAQ,UAAU,KAAK,KAAK,QAAQ,SAAS,EAAG;AACzD,YAAM,UAAU,iBAAiB,IAAI,EAClC,iBAAiB,oBAAoB,EACrC,KAAA;AACH,UAAI,YAAY,OAAO,YAAY,QAAS;AAE5C,YAAM,MAAM,KAAK,KAAK,cAA2B,MAAM;AACvD,UAAI,CAAC,IAAK;AAEV,YAAM,OAAO,IAAI,sBAAA;AACjB,YAAM,OAAO,KAAK,IAAI,KAAK,OAAO,KAAK,MAAM;AAC7C,YAAM,SAAS,SAAS,cAAc,MAAM;AAC5C,aAAO,YAAY;AACnB,aAAO,MAAM,QAAQ,OAAO,MAAM,SAAS,GAAG,IAAI;AAClD,aAAO,MAAM,OAAO,GAAG,MAAM,UAAU,KAAK,OAAO,OAAO,CAAC;AAC3D,aAAO,MAAM,MAAM,GAAG,MAAM,UAAU,KAAK,MAAM,OAAO,CAAC;AACzD,UAAI,YAAY,MAAM;AACtB,aAAO,iBAAiB,gBAAgB,MAAM,OAAO,QAAQ;AAAA,IAC/D;AAAA,EAAA;AAAA,EAhGA,WAAoB,qBAA+B;AACjD,WAAO,CAAC,WAAW,QAAQ,YAAY,WAAW,QAAQ,MAAM;AAAA,EAClE;AAAA;AAAA,EAGA,IAAI,OAAe;AACjB,UAAM,IAAI,KAAK,QAAQ,QAAQ,IAAI;AACnC,WAAO,MAAM,QAAQ,MAAM,OAAO,IAAI;AAAA,EACxC;AAAA,EACA,IAAI,KAAK,OAAe;AACtB,SAAK,aAAa,QAAQ,KAAK;AAAA,EACjC;AAAA,EAEA,IAAI,WAAoB;AACtB,WAAO,KAAK,QAAQ,UAAU;AAAA,EAChC;AAAA,EACA,IAAI,SAAS,OAAgB;AAC3B,SAAK,WAAW,YAAY,QAAQ,KAAK,CAAC;AAAA,EAC5C;AAAA,EAEA,IAAI,UAAmB;AACrB,WAAO,KAAK,QAAQ,SAAS;AAAA,EAC/B;AAAA,EACA,IAAI,QAAQ,OAAgB;AAC1B,SAAK,WAAW,WAAW,QAAQ,KAAK,CAAC;AAAA,EAC3C;AAAA,EAEmB,SAAe;AAChC,UAAM,UAAU,KAAK,QAAQ,SAAS;AACtC,UAAM,WAAW,KAAK,QAAQ,UAAU,KAAK;AAC7C,UAAM,UAAU,KAAK,QAAQ,QAAQ,QAAQ;AAE7C,SAAK,YAAY;AAAA,gDAC2B,OAAO;AAAA;AAAA;AAAA,UAG7C,UAAU,0DAA0D,EAAE;AAAA;AAAA,KAE3E;AAED,UAAM,MAAM,KAAK,KAAK,cAAiC,MAAM;AAC7D,QAAI,CAAC,IAAK;AAIV,UAAM,WAAW,IAAI,cAA+B,iBAAiB;AACrE,UAAM,WAAW,KAAK,KAAK,cAA2B,YAAY;AAClE,UAAM,UAAU,QAAQ,UAAU,cAAc,EAAE,SAAS,KAAA,CAAM,EAAE;AAAA,MAAK,CAAC,MACvE,EAAE,aAAa,KAAK,iBAAiB,EAAE,eAAe,IAAI,WAAW;AAAA,IAAA,CACtE;AACD,cAAU,gBAAgB,UAAU,CAAC,OAAO;AAC5C,QAAI,UAAU;AACZ,UAAI,aAAa,YAAY,EAAE;AAC/B,UAAI,aAAa,iBAAiB,MAAM;AAAA,IAC1C,OAAO;AACL,UAAI,gBAAgB,UAAU;AAC9B,UAAI,gBAAgB,eAAe;AAAA,IACrC;AACA,QAAI,QAAS,KAAI,aAAa,aAAa,MAAM;AAAA,QAC5C,KAAI,gBAAgB,WAAW;AAAA,EACtC;AAAA,EAEmB,oBAA0B;AAC3C,UAAM,kBAAA;AACN,SAAK,iBAAiB,eAAe,KAAK,WAAW;AAAA,EACvD;AAAA,EAEmB,uBAA6B;AAC9C,UAAM,qBAAA;AACN,SAAK,oBAAoB,eAAe,KAAK,WAAW;AAAA,EAC1D;AA2BF;AAxME,UAAgB,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;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,WAAN;AA2MA,SAAS,iBAAkC;AAChD,SAAO,cAAc,aAAa,QAAQ;AAC5C;"}
@@ -1 +1 @@
1
- {"version":3,"file":"orderlist.js","sources":["../../../src/components/orderlist/orderlist.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\nexport interface OrderListItem {\n [key: string]: unknown;\n}\n\n/**\n * <fx-orderlist> - Componente para ordenar uma colecao de itens.\n *\n * Permite reordenar itens arrastando ou usando botoes de controle.\n * Suporta filtro, selecao, checkbox e templates customizados.\n *\n * Atributos: data, data-key, filter, filter-by, filter-placeholder, breakpoint,\n * dragdrop, selection-mode, striped, show-select-all.\n * Evento: `reorder` (composed, detail: { items }).\n * Evento: `selection-change` (composed, detail: { selection }).\n */\nexport class FxOrderList extends FxElement {\n static override styles = css`\n\n :host {\n display: block;\n font-family: var(--fx-font-family);\n font-size: var(--fx-font-size);\n --orderlist-primary: var(--fx-color-primary, #3b82f6);\n --orderlist-border: var(--fx-border-default, #e2e8f0);\n --orderlist-bg: var(--fx-surface-background, #ffffff);\n --orderlist-bg-hover: var(--fx-surface-surface-hover, #f1f5f9);\n --orderlist-text: var(--fx-text-default, #1e293b);\n --orderlist-text-muted: var(--fx-text-muted, #64748b);\n --orderlist-radius: var(--fx-radius-md, 8px);\n --orderlist-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n --orderlist-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n }\n * { box-sizing: border-box; }\n .container { display: flex; flex-direction: column; gap: var(--fx-space-md, 16px); }\n .list-wrapper { display: flex; flex-direction: column; gap: var(--fx-space-sm, 8px); flex: 1; min-width: 0; }\n .select-all-bar { display: flex; align-items: center; justify-content: space-between; padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px); background: linear-gradient(135deg, var(--orderlist-bg), var(--orderlist-bg-hover)); border: 1px solid var(--orderlist-border); border-radius: var(--orderlist-radius); font-size: 0.9em; font-weight: 500; }\n .select-all-bar label { display: flex; align-items: center; gap: var(--fx-space-sm, 10px); cursor: pointer; user-select: none; color: var(--orderlist-text); }\n .select-all-bar input[type=\"checkbox\"] { width: 18px; height: 18px; accent-color: var(--orderlist-primary); cursor: pointer; }\n .filter-wrapper { margin-bottom: var(--fx-space-xs, 4px); }\n .filter-input { width: 100%; padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px); padding-left: 42px; border: 1.5px solid var(--orderlist-border); border-radius: var(--orderlist-radius); font-family: inherit; font-size: inherit; color: var(--orderlist-text); background: var(--orderlist-bg) url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E\") no-repeat 14px center; transition: var(--orderlist-transition); }\n .filter-input:focus { outline: none; border-color: var(--orderlist-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--orderlist-primary) 20%, transparent); }\n .filter-input::placeholder { color: var(--orderlist-text-muted); }\n .main-row { display: flex; align-items: stretch; gap: var(--fx-space-sm, 8px); }\n .list { list-style: none; margin: 0; padding: 0; border: 1px solid var(--orderlist-border); border-radius: var(--orderlist-radius); overflow: hidden; box-shadow: var(--orderlist-shadow); max-height: 450px; overflow-y: auto; flex: 1; }\n .list::-webkit-scrollbar { width: 6px; }\n .list::-webkit-scrollbar-track { background: transparent; }\n .list::-webkit-scrollbar-thumb { background: var(--orderlist-border); border-radius: 3px; }\n .list::-webkit-scrollbar-thumb:hover { background: var(--orderlist-text-muted); }\n .selection-count { font-size: 0.85em; color: var(--orderlist-primary); background: color-mix(in srgb, var(--orderlist-primary) 12%, transparent); padding: 4px 12px; border-radius: 20px; font-weight: 600; }\n :host([striped]) .list-item:nth-child(even) { background: var(--fx-surface-surface, #f8fafc); }\n .list-item { display: flex; align-items: center; gap: var(--fx-space-sm, 10px); padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px); background: var(--orderlist-bg); border-bottom: 1px solid var(--orderlist-border); cursor: pointer; user-select: none; transition: var(--orderlist-transition); }\n .list-item:last-child { border-bottom: none; }\n .list-item:hover { background: var(--orderlist-bg-hover); }\n .list-item.selected { background: color-mix(in srgb, var(--orderlist-primary) 8%, transparent); border-left: 3px solid var(--orderlist-primary); padding-left: 11px; }\n .list-item:focus-visible { outline: none; background: color-mix(in srgb, var(--orderlist-primary) 15%, transparent); }\n .list-item.dragging { opacity: 0.5; background: var(--orderlist-bg-hover); }\n .list-item.drag-over { border-top: 2px solid var(--orderlist-primary); }\n .drag-handle { color: var(--orderlist-text-muted); cursor: grab; flex-shrink: 0; font-size: 1.2em; opacity: 0.6; transition: var(--orderlist-transition); }\n .drag-handle:hover { opacity: 1; }\n .drag-handle:active { cursor: grabbing; }\n .item-content { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .checkbox { flex-shrink: 0; width: 18px; height: 18px; accent-color: var(--orderlist-primary); cursor: pointer; transition: var(--orderlist-transition); }\n .checkbox:hover { transform: scale(1.1); }\n .empty-message { padding: var(--fx-space-xl, 32px); text-align: center; color: var(--orderlist-text-muted); font-style: italic; }\n .controls-bar {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: var(--fx-space-xs, 6px);\n background: var(--orderlist-bg);\n border: 1px solid var(--orderlist-border);\n border-radius: var(--orderlist-radius);\n box-shadow: var(--orderlist-shadow);\n height: fit-content;\n position: sticky;\n top: 0;\n align-self: flex-start;\n }\n .control-group { display: flex; flex-direction: column; gap: 3px; }\n .control-group + .control-group { margin-top: 4px; padding-top: 6px; border-top: 1px solid var(--orderlist-border); }\n button.control-btn { display: flex; align-items: center; justify-content: center; width: 42px; height: 38px; padding: 0; border: none; border-radius: 8px; background: transparent; color: var(--orderlist-text-muted); cursor: pointer; font-size: 16px; line-height: 1; transition: var(--orderlist-transition); position: relative; }\n button.control-btn:hover:not(:disabled) { background: var(--orderlist-bg-hover); color: var(--orderlist-primary); transform: scale(1.1); }\n button.control-btn:active:not(:disabled) { transform: scale(0.92); background: color-mix(in srgb, var(--orderlist-primary) 15%, transparent); }\n button.control-btn:focus-visible { outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--orderlist-primary) 30%, transparent); }\n button.control-btn:disabled { opacity: 0.3; cursor: not-allowed; transform: none; }\n .control-btn-icon { font-size: 18px; line-height: 1; }\n /* Tooltip nos botoes */\n button.control-btn:hover::after { opacity: 1; transform: translateY(-50%) translateX(0); }\n @media (max-width: 640px) { .main-row { flex-direction: column; } .controls-bar { flex-direction: row; flex-wrap: wrap; justify-content: center; position: relative; } .control-group { flex-direction: row; } .control-group + .control-group { margin-top: 0; margin-left: 4px; padding-top: 0; padding-left: 4px; border-top: none; border-left: 1px solid var(--orderlist-border); } button.control-btn { width: 44px; height: 40px; } button.control-btn::after { display: none; } .list { max-height: 300px; } }\n @keyframes slideIn { from { opacity: 0; transform: translateX(-10px); } to { opacity: 1; transform: translateX(0); } }\n .list-item { animation: slideIn 0.2s ease-out; }\n @media (prefers-color-scheme: dark) { :host { --orderlist-border: #334155; --orderlist-bg: #1e293b; --orderlist-bg-hover: #334155; --orderlist-text: #f1f5f9; --orderlist-text-muted: #94a3b8; --orderlist-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); } }\n `;\n\n static override get observedAttributes(): string[] {\n return [\n 'data',\n 'data-key',\n 'filter',\n 'filter-by',\n 'filter-placeholder',\n 'breakpoint',\n 'controls-location',\n 'dragdrop',\n 'striped',\n 'selection-mode',\n 'show-select-all',\n ]\n }\n\n set data(value: OrderListItem[]) {\n this._data = value;\n this._filteredData = null;\n this.render();\n }\n get data(): OrderListItem[] {\n return this._data;\n }\n private _data: OrderListItem[] = [];\n private _filteredData: OrderListItem[] | null = null;\n\n set selection(value: OrderListItem[]) {\n this._selection = value;\n this.render();\n }\n get selection(): OrderListItem[] {\n return this._selection;\n }\n private _selection: OrderListItem[] = [];\n\n get dataKey(): string {\n return this.getAttr('data-key', '');\n }\n set dataKey(v: string) {\n this.setAttribute('data-key', v);\n }\n\n get filter(): boolean {\n return this.hasAttr('filter');\n }\n set filter(v: boolean) {\n this.toggleAttr('filter', v);\n }\n\n get filterBy(): string {\n return this.getAttr('filter-by', 'label');\n }\n set filterBy(v: string) {\n this.setAttribute('filter-by', v);\n }\n\n get filterPlaceholder(): string {\n return this.getAttr('filter-placeholder', 'Buscar...');\n }\n set filterPlaceholder(v: string) {\n this.setAttribute('filter-placeholder', v);\n }\n\n get breakpoint(): string {\n return this.getAttr('breakpoint', '960px');\n }\n set breakpoint(v: string) {\n this.setAttribute('breakpoint', v);\n }\n\n get dragdrop(): boolean {\n return this.hasAttr('dragdrop');\n }\n set dragdrop(v: boolean) {\n this.toggleAttr('dragdrop', v);\n }\n\n get striped(): boolean {\n return this.hasAttr('striped');\n }\n set striped(v: boolean) {\n this.toggleAttr('striped', v);\n }\n\n get selectionMode(): string {\n const s = this.getAttr('selection-mode', '');\n return s === 'single' || s === 'multiple' ? s : '';\n }\n set selectionMode(v: string) {\n this.setAttribute('selection-mode', v);\n }\n\n get showSelectAll(): boolean {\n return this.hasAttr('show-select-all');\n }\n set showSelectAll(v: boolean) {\n this.toggleAttr('show-select-all', v);\n }\n\n get filterValue(): string {\n return this._filterValue;\n }\n set filterValue(v: string) {\n this._filterValue = v;\n this._applyFilter();\n this._updateListDisplay();\n }\n private _filterValue = '';\n\n private _draggedIndex: number | null = null;\n private _listenersAttached = false;\n private _optionTemplate: ((item: OrderListItem) => string) | null = null;\n\n setOptionTemplate(template: (item: OrderListItem) => string): void {\n this._optionTemplate = template;\n this.render();\n }\n\n protected override connectedCallback(): void {\n this._parseDataAttribute();\n super.connectedCallback();\n }\n\n protected override attributeChangedCallback(): void {\n if (this.getAttr('data', '') !== '') {\n this._parseDataAttribute();\n }\n super.attributeChangedCallback();\n }\n\n private _parseDataAttribute(): void {\n const dataAttr = this.getAttr('data', '');\n if (dataAttr) {\n try {\n this._data = JSON.parse(dataAttr);\n this._filteredData = null;\n } catch {\n this._data = [];\n }\n }\n }\n\n private _applyFilter(): void {\n if (!this._filterValue) {\n this._filteredData = null;\n return;\n }\n const filterFields = this.filterBy.split(',').map(f => f.trim());\n this._filteredData = this._data.filter(item => {\n return filterFields.some(field => {\n const value = item[field];\n if (value == null) return false;\n return String(value).toLowerCase().includes(this._filterValue.toLowerCase());\n });\n });\n }\n\n private _getDisplayData(): OrderListItem[] {\n return this._filteredData || this._data;\n }\n\n private _getItemKey(item: OrderListItem, index: number): string {\n if (this.dataKey && item[this.dataKey] != null) {\n return String(item[this.dataKey]);\n }\n if (item['id'] != null) return String(item['id']);\n if (item['key'] != null) return String(item['key']);\n if (item['label'] != null) return String(item['label']);\n if (item['name'] != null) return String(item['name']);\n if (item['value'] != null) return String(item['value']);\n return String(index);\n }\n\n private _getItemLabel(item: OrderListItem): string {\n const fields = ['label', 'name', 'title', 'text', 'value'];\n for (const field of fields) {\n if (item[field] != null) {\n return String(item[field]);\n }\n }\n return JSON.stringify(item);\n }\n\n private _isSelected(item: OrderListItem): boolean {\n return this._selection.some(s => this._getItemKey(s, -1) === this._getItemKey(item, -1));\n }\n\n private _moveItem(fromIndex: number, toIndex: number): void {\n const actualFrom = this._getActualIndex(fromIndex);\n const actualTo = this._getActualIndex(toIndex);\n if (actualFrom === -1 || actualTo === -1) return;\n const item = this._data.splice(actualFrom, 1)[0];\n this._data.splice(actualTo, 0, item);\n this._applyFilter();\n this._updateListDisplay();\n this._updateControlsState();\n this._emitReorder();\n }\n\n private _getActualIndex(displayIndex: number): number {\n if (this._filteredData) {\n const item = this._filteredData[displayIndex];\n return this._data.findIndex(d => this._getItemKey(d, -1) === this._getItemKey(item, -1));\n }\n return displayIndex;\n }\n\n private _emitReorder(): void {\n this.dispatchEvent(new CustomEvent('reorder', {\n bubbles: true,\n composed: true,\n detail: { items: [...this._data] },\n }));\n }\n\n private _emitSelectionChange(): void {\n this.dispatchEvent(new CustomEvent('selection-change', {\n bubbles: true,\n composed: true,\n detail: { selection: [...this._selection] },\n }));\n }\n\n private _toggleSelection(item: OrderListItem): void {\n const key = this._getItemKey(item, -1);\n const index = this._selection.findIndex(s => this._getItemKey(s, -1) === key);\n if (index >= 0) {\n this._selection.splice(index, 1);\n } else if (this.selectionMode === 'multiple') {\n this._selection.push(item);\n } else {\n this._selection = [item];\n }\n this._emitSelectionChange();\n this._updateListDisplay();\n this._updateControlsState();\n }\n\n private _selectAll(): void {\n const displayData = this._getDisplayData();\n this._selection = [...displayData];\n this._emitSelectionChange();\n this._updateListDisplay();\n this._updateControlsState();\n }\n\n private _deselectAll(): void {\n this._selection = [];\n this._emitSelectionChange();\n this._updateListDisplay();\n this._updateControlsState();\n }\n\n private _toggleSelectAll(): void {\n const displayData = this._getDisplayData();\n if (this._selection.length === displayData.length) {\n this._deselectAll();\n } else {\n this._selectAll();\n }\n }\n\n protected override render(): void {\n const displayData = this._getDisplayData();\n const hasSelection = this.selectionMode;\n const hasMultipleSelection = this.selectionMode === 'multiple';\n const allSelected = hasMultipleSelection && displayData.length > 0 && this._selection.length === displayData.length;\n\n this.setTemplate(`\n <div class=\"container\" part=\"container\">\n ${this.filter ? `\n <div class=\"filter-wrapper\" part=\"filter-wrapper\">\n <input type=\"text\" class=\"filter-input\" part=\"filter-input\"\n placeholder=\"${this.filterPlaceholder}\"\n value=\"${esc(this._filterValue)}\"\n aria-label=\"Filtrar lista\" />\n </div>\n ` : ''}\n <div class=\"main-row\" part=\"main-row\">\n <div class=\"controls-bar\" part=\"controls-bar\">\n <div class=\"control-group\">\n <button class=\"control-btn\" data-action=\"top\" part=\"control-btn\" aria-label=\"Mover para o inicio\">\n <span class=\"control-btn-icon\">\\u00AB</span>\n </button>\n <button class=\"control-btn\" data-action=\"up\" part=\"control-btn\" aria-label=\"Mover para cima\">\n <span class=\"control-btn-icon\">\\u2191</span>\n </button>\n </div>\n <div class=\"control-group\">\n <button class=\"control-btn\" data-action=\"down\" part=\"control-btn\" aria-label=\"Mover para baixo\">\n <span class=\"control-btn-icon\">\\u2193</span>\n </button>\n <button class=\"control-btn\" data-action=\"bottom\" part=\"control-btn\" aria-label=\"Mover para o fim\">\n <span class=\"control-btn-icon\">\\u00BB</span>\n </button>\n </div>\n </div>\n <div class=\"list-wrapper\" part=\"list-wrapper\">\n ${hasMultipleSelection && this.showSelectAll ? `\n <div class=\"select-all-bar\" part=\"select-all-bar\">\n <label>\n <input type=\"checkbox\" class=\"select-all-checkbox\"\n ${allSelected ? 'checked' : ''}\n aria-label=\"Selecionar todos\" />\n Selecionar Todos\n </label>\n <span class=\"selection-count\">${this._selection.length} selecionado(s)</span>\n </div>\n ` : ''}\n <ul class=\"list\" part=\"list\" role=\"listbox\"\n aria-multiselectable=\"${hasMultipleSelection}\"\n tabindex=\"0\">\n ${displayData.length === 0 ? `\n <li class=\"empty-message\" part=\"empty-message\">\n ${this.filter ? 'Nenhum resultado encontrado' : 'Nenhum item disponivel'}\n </li>\n ` : displayData.map((item, index) => {\n const key = this._getItemKey(item, index);\n const label = this._getItemLabel(item);\n const isSelected = this._isSelected(item);\n const content = this._optionTemplate ? this._optionTemplate(item) : esc(label);\n return `\n <li class=\"list-item${isSelected ? ' selected' : ''}\" part=\"list-item\"\n data-index=\"${index}\" data-key=\"${esc(key)}\"\n role=\"option\" aria-selected=\"${isSelected}\"\n ${this.dragdrop ? 'draggable=\"true\"' : ''}\n tabindex=\"0\">\n ${this.dragdrop ? '<span class=\"drag-handle\" part=\"drag-handle\" aria-label=\"Arrastar\">\\u22EE\\u22EE</span>' : ''}\n ${hasSelection ? `\n <input type=\"checkbox\" class=\"checkbox\" part=\"checkbox\"\n ${isSelected ? 'checked' : ''}\n aria-label=\"Selecionar ${esc(label)}\" />\n ` : ''}\n <span class=\"item-content\" part=\"item-content\">${content}</span>\n </li>\n `;\n }).join('')}\n </ul>\n </div>\n </div>\n </div>\n `);\n\n this._attachListeners();\n this._attachItemListeners(this.root.querySelector('.list') as HTMLElement);\n this._updateControlsState();\n }\n\n private _attachListeners(): void {\n if (this._listenersAttached) return;\n this._listenersAttached = true;\n const root = this.root;\n\n // Filtro - delega input\n root.addEventListener('input', (e) => {\n const t = e.target as HTMLElement;\n if (t.classList.contains('filter-input')) {\n this.filterValue = (t as HTMLInputElement).value;\n }\n });\n\n // Selecionar todos - delega change\n root.addEventListener('change', (e) => {\n const t = e.target as HTMLElement;\n if (t.classList.contains('select-all-checkbox')) {\n this._toggleSelectAll();\n }\n });\n\n // Clique - delega click nos botoes (itens anexados direto em cada render)\n root.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const btn = target.closest('.control-btn') as HTMLButtonElement;\n if (btn) {\n this._handleMoveAction(btn.dataset.action);\n }\n });\n\n // Drag and drop\n // Drag and drop - delega no root\n let dragOverElement: HTMLElement | null = null;\n root.addEventListener('dragstart', (e) => {\n const target = (e.target as HTMLElement).closest('.list-item') as HTMLElement;\n if (!target) return;\n this._draggedIndex = Number(target.dataset.index);\n target.classList.add('dragging');\n (e as DragEvent).dataTransfer!.effectAllowed = 'move';\n });\n root.addEventListener('dragend', (e) => {\n const target = e.target as HTMLElement;\n target.classList.remove('dragging');\n this._draggedIndex = null;\n root.querySelectorAll('.drag-over').forEach(el => el.classList.remove('drag-over'));\n dragOverElement = null;\n });\n root.addEventListener('dragover', (e) => {\n e.preventDefault();\n const target = (e.target as HTMLElement).closest('.list-item') as HTMLElement;\n if (!target || target.classList.contains('dragging')) return;\n if (dragOverElement) dragOverElement.classList.remove('drag-over');\n target.classList.add('drag-over');\n dragOverElement = target;\n });\n root.addEventListener('drop', (e) => {\n e.preventDefault();\n if (this._draggedIndex === null) return;\n const target = (e.target as HTMLElement).closest('.list-item') as HTMLElement;\n if (!target) return;\n const toIndex = Number(target.dataset.index);\n target.classList.remove('drag-over');\n dragOverElement = null;\n this._moveItem(this._draggedIndex, toIndex);\n this._draggedIndex = null;\n });\n this._updateControlsState();\n }\n\n private _attachItemListeners(list: HTMLElement): void {\n if (!list) return;\n list.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const itemEl = target.closest('.list-item') as HTMLElement;\n if (!itemEl) return;\n if (target.classList.contains('checkbox')) {\n e.stopPropagation();\n const idxC = Number(itemEl.dataset.index);\n this._toggleSelection(this._getDisplayData()[idxC]);\n return;\n }\n const idxI = Number(itemEl.dataset.index);\n this._toggleSelection(this._getDisplayData()[idxI]);\n });\n list.addEventListener('keydown', (e) => {\n const target = e.target as HTMLElement;\n if (!target.classList.contains('list-item')) return;\n const items = Array.from(list.querySelectorAll('.list-item')) as HTMLElement[];\n const currentIndex = items.indexOf(target);\n const ke = e as KeyboardEvent;\n switch (ke.key) {\n case 'ArrowUp':\n e.preventDefault();\n if (currentIndex > 0) items[currentIndex - 1].focus();\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (currentIndex < items.length - 1) items[currentIndex + 1].focus();\n break;\n case ' ':\n case 'Enter':\n e.preventDefault();\n if (this.selectionMode) {\n const index = Number(target.dataset.index);\n this._toggleSelection(this._getDisplayData()[index]);\n }\n break;\n }\n });\n }\n private _updateListDisplay(): void {\n const listWrapper = this.root.querySelector('.list-wrapper');\n if (!listWrapper) {\n this.render();\n return;\n }\n const displayData = this._getDisplayData();\n const hasSelection = this.selectionMode;\n const hasMultipleSelection = this.selectionMode === 'multiple';\n const allSelected = hasMultipleSelection && displayData.length > 0 && this._selection.length === displayData.length;\n\n listWrapper.innerHTML = `\n ${hasMultipleSelection && this.showSelectAll ? `\n <div class=\"select-all-bar\" part=\"select-all-bar\">\n <label>\n <input type=\"checkbox\" class=\"select-all-checkbox\"\n ${allSelected ? 'checked' : ''}\n aria-label=\"Selecionar todos\" />\n Selecionar Todos\n </label>\n <span class=\"selection-count\">${this._selection.length} selecionado(s)</span>\n </div>\n ` : ''}\n <ul class=\"list\" part=\"list\" role=\"listbox\"\n aria-multiselectable=\"${hasMultipleSelection}\"\n tabindex=\"0\">\n ${displayData.length === 0 ? `\n <li class=\"empty-message\" part=\"empty-message\">\n ${this.filter ? 'Nenhum resultado encontrado' : 'Nenhum item disponivel'}\n </li>\n ` : displayData.map((item, index) => {\n const key = this._getItemKey(item, index);\n const label = this._getItemLabel(item);\n const isSelected = this._isSelected(item);\n const content = this._optionTemplate ? this._optionTemplate(item) : esc(label);\n return `\n <li class=\"list-item${isSelected ? ' selected' : ''}\" part=\"list-item\"\n data-index=\"${index}\" data-key=\"${esc(key)}\"\n role=\"option\" aria-selected=\"${isSelected}\"\n ${this.dragdrop ? 'draggable=\"true\"' : ''}\n tabindex=\"0\">\n ${this.dragdrop ? '<span class=\"drag-handle\" part=\"drag-handle\" aria-label=\"Arrastar\">\\u22EE\\u22EE</span>' : ''}\n ${hasSelection ? `\n <input type=\"checkbox\" class=\"checkbox\" part=\"checkbox\"\n ${isSelected ? 'checked' : ''}\n aria-label=\"Selecionar ${esc(label)}\" />\n ` : ''}\n <span class=\"item-content\" part=\"item-content\">${content}</span>\n </li>\n `;\n }).join('')}\n </ul>\n `;\n this._attachListeners();\n this._attachItemListeners(this.root.querySelector('.list') as HTMLElement);\n }\n\n\n private _handleMoveAction(action: string | undefined): void {\n if (!this._selection.length) return;\n const displayData = this._getDisplayData();\n const selectedIndices = this._selection\n .map(s => displayData.findIndex(d => this._getItemKey(d, -1) === this._getItemKey(s, -1)))\n .filter(i => i >= 0)\n .sort((a, b) => a - b);\n\n if (selectedIndices.length === 0) return;\n\n switch (action) {\n case 'top':\n this._moveSelectedToStart(selectedIndices);\n break;\n case 'up':\n this._moveSelectedByOne(selectedIndices, -1);\n break;\n case 'down':\n this._moveSelectedByOne(selectedIndices, 1);\n break;\n case 'bottom':\n this._moveSelectedToEnd(selectedIndices);\n break;\n }\n }\n\n private _moveSelectedToStart(indices: number[]): void {\n const items: OrderListItem[] = [];\n const actualIndices: number[] = [];\n\n for (const idx of indices) {\n const actualIdx = this._getActualIndex(idx);\n items.push(this._data[actualIdx]);\n actualIndices.push(actualIdx);\n }\n\n actualIndices.sort((a, b) => b - a).forEach(i => this._data.splice(i, 1));\n\n const insertIdx = this._getActualIndex(0);\n this._data.splice(insertIdx, 0, ...items);\n\n this._applyFilter();\n this._updateListDisplay();\n this._updateControlsState();\n this._emitReorder();\n }\n\n private _moveSelectedToEnd(indices: number[]): void {\n const items: OrderListItem[] = [];\n const actualIndices: number[] = [];\n\n for (const idx of indices) {\n const actualIdx = this._getActualIndex(idx);\n items.push(this._data[actualIdx]);\n actualIndices.push(actualIdx);\n }\n\n actualIndices.sort((a, b) => b - a).forEach(i => this._data.splice(i, 1));\n\n const displayData = this._getDisplayData();\n const insertIdx = this._getActualIndex(displayData.length - 1);\n this._data.splice(insertIdx + 1, 0, ...items);\n\n this._applyFilter();\n this._updateListDisplay();\n this._updateControlsState();\n this._emitReorder();\n }\n\n private _moveSelectedByOne(indices: number[], delta: number): void {\n const displayData = this._getDisplayData();\n if (displayData.length === 0) return;\n\n // Get actual indices in _data array and sort them\n const actualIndices = indices\n .map(idx => this._getActualIndex(idx))\n .filter(idx => idx >= 0)\n .sort((a, b) => a - b);\n\n if (actualIndices.length === 0) return;\n\n // Check if movement is possible\n if (delta < 0 && actualIndices[0] <= 0) return;\n if (delta > 0 && actualIndices[actualIndices.length - 1] >= this._data.length - 1) return;\n\n // Extract selected items in order\n const selectedItems = actualIndices.map(idx => this._data[idx]);\n\n // Remove selected items from data (from highest to lowest to preserve indices)\n for (let i = actualIndices.length - 1; i >= 0; i--) {\n this._data.splice(actualIndices[i], 1);\n }\n\n // Calculate new insertion point\n let insertIndex: number;\n if (delta < 0) {\n // Moving up: insert before the first selected item position\n insertIndex = actualIndices[0] - 1;\n } else {\n // Moving down: insert after the last selected item position\n // Since we removed items, we need to adjust\n insertIndex = actualIndices[actualIndices.length - 1] - actualIndices.length + 1 + 1;\n }\n\n // Ensure insertIndex is within bounds\n insertIndex = Math.max(0, Math.min(insertIndex, this._data.length));\n\n // Insert items at new position\n this._data.splice(insertIndex, 0, ...selectedItems);\n\n this._applyFilter();\n this._updateListDisplay();\n this._updateControlsState();\n this._emitReorder();\n }\n\n private _updateControlsState(): void {\n const displayData = this._getDisplayData();\n const selectedIndices = this._selection\n .map(s => displayData.findIndex(d => this._getItemKey(d, -1) === this._getItemKey(s, -1)))\n .filter(i => i >= 0);\n\n const buttons = this.root.querySelectorAll<HTMLButtonElement>('.control-btn');\n buttons.forEach(btn => {\n const action = btn.dataset.action;\n let disabled = selectedIndices.length === 0;\n\n if (!disabled) {\n switch (action) {\n case 'top':\n case 'up':\n disabled = selectedIndices[0] === 0;\n break;\n case 'bottom':\n case 'down':\n disabled = selectedIndices[selectedIndices.length - 1] === displayData.length - 1;\n break;\n }\n }\n\n btn.disabled = disabled;\n });\n }\n}\n\nfunction esc(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\nexport function defineFxOrderList(): typeof FxOrderList {\n return defineElement('fx-orderlist', FxOrderList);\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orderlist.js","sources":["../../../src/components/orderlist/orderlist.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\r\nimport { css } from '../../core/css';\r\nimport { defineElement } from '../../core/define';\r\n\r\nexport interface OrderListItem {\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * <fx-orderlist> - Componente para ordenar uma colecao de itens.\r\n *\r\n * Permite reordenar itens arrastando ou usando botoes de controle.\r\n * Suporta filtro, selecao, checkbox e templates customizados.\r\n *\r\n * Atributos: data, data-key, filter, filter-by, filter-placeholder, breakpoint,\r\n * dragdrop, selection-mode, striped, show-select-all.\r\n * Evento: `reorder` (composed, detail: { items }).\r\n * Evento: `selection-change` (composed, detail: { selection }).\r\n */\r\nexport class FxOrderList extends FxElement {\r\n static override styles = css`\r\n\r\n :host {\r\n display: block;\r\n font-family: var(--fx-font-family);\r\n font-size: var(--fx-font-size);\r\n --orderlist-primary: var(--fx-color-primary, #3b82f6);\r\n --orderlist-border: var(--fx-border-default, #e2e8f0);\r\n --orderlist-bg: var(--fx-surface-background, #ffffff);\r\n --orderlist-bg-hover: var(--fx-surface-surface-hover, #f1f5f9);\r\n --orderlist-text: var(--fx-text-default, #1e293b);\r\n --orderlist-text-muted: var(--fx-text-muted, #64748b);\r\n --orderlist-radius: var(--fx-radius-md, 8px);\r\n --orderlist-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n --orderlist-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\r\n }\r\n * { box-sizing: border-box; }\r\n .container { display: flex; flex-direction: column; gap: var(--fx-space-md, 16px); }\r\n .list-wrapper { display: flex; flex-direction: column; gap: var(--fx-space-sm, 8px); flex: 1; min-width: 0; }\r\n .select-all-bar { display: flex; align-items: center; justify-content: space-between; padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px); background: linear-gradient(135deg, var(--orderlist-bg), var(--orderlist-bg-hover)); border: 1px solid var(--orderlist-border); border-radius: var(--orderlist-radius); font-size: 0.9em; font-weight: 500; }\r\n .select-all-bar label { display: flex; align-items: center; gap: var(--fx-space-sm, 10px); cursor: pointer; user-select: none; color: var(--orderlist-text); }\r\n .select-all-bar input[type=\"checkbox\"] { width: 18px; height: 18px; accent-color: var(--orderlist-primary); cursor: pointer; }\r\n .filter-wrapper { margin-bottom: var(--fx-space-xs, 4px); }\r\n .filter-input { width: 100%; padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px); padding-left: 42px; border: 1.5px solid var(--orderlist-border); border-radius: var(--orderlist-radius); font-family: inherit; font-size: inherit; color: var(--orderlist-text); background: var(--orderlist-bg) url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E\") no-repeat 14px center; transition: var(--orderlist-transition); }\r\n .filter-input:focus { outline: none; border-color: var(--orderlist-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--orderlist-primary) 20%, transparent); }\r\n .filter-input::placeholder { color: var(--orderlist-text-muted); }\r\n .main-row { display: flex; align-items: stretch; gap: var(--fx-space-sm, 8px); }\r\n .list { list-style: none; margin: 0; padding: 0; border: 1px solid var(--orderlist-border); border-radius: var(--orderlist-radius); overflow: hidden; box-shadow: var(--orderlist-shadow); max-height: 450px; overflow-y: auto; flex: 1; }\r\n .list::-webkit-scrollbar { width: 6px; }\r\n .list::-webkit-scrollbar-track { background: transparent; }\r\n .list::-webkit-scrollbar-thumb { background: var(--orderlist-border); border-radius: 3px; }\r\n .list::-webkit-scrollbar-thumb:hover { background: var(--orderlist-text-muted); }\r\n .selection-count { font-size: 0.85em; color: var(--orderlist-primary); background: color-mix(in srgb, var(--orderlist-primary) 12%, transparent); padding: 4px 12px; border-radius: 20px; font-weight: 600; }\r\n :host([striped]) .list-item:nth-child(even) { background: var(--fx-surface-surface, #f8fafc); }\r\n .list-item { display: flex; align-items: center; gap: var(--fx-space-sm, 10px); padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px); background: var(--orderlist-bg); border-bottom: 1px solid var(--orderlist-border); cursor: pointer; user-select: none; transition: var(--orderlist-transition); }\r\n .list-item:last-child { border-bottom: none; }\r\n .list-item:hover { background: var(--orderlist-bg-hover); }\r\n .list-item.selected { background: color-mix(in srgb, var(--orderlist-primary) 8%, transparent); border-left: 3px solid var(--orderlist-primary); padding-left: 11px; }\r\n .list-item:focus-visible { outline: none; background: color-mix(in srgb, var(--orderlist-primary) 15%, transparent); }\r\n .list-item.dragging { opacity: 0.5; background: var(--orderlist-bg-hover); }\r\n .list-item.drag-over { border-top: 2px solid var(--orderlist-primary); }\r\n .drag-handle { color: var(--orderlist-text-muted); cursor: grab; flex-shrink: 0; font-size: 1.2em; opacity: 0.6; transition: var(--orderlist-transition); }\r\n .drag-handle:hover { opacity: 1; }\r\n .drag-handle:active { cursor: grabbing; }\r\n .item-content { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\r\n .checkbox { flex-shrink: 0; width: 18px; height: 18px; accent-color: var(--orderlist-primary); cursor: pointer; transition: var(--orderlist-transition); }\r\n .checkbox:hover { transform: scale(1.1); }\r\n .empty-message { padding: var(--fx-space-xl, 32px); text-align: center; color: var(--orderlist-text-muted); font-style: italic; }\r\n .controls-bar {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n padding: var(--fx-space-xs, 6px);\r\n background: var(--orderlist-bg);\r\n border: 1px solid var(--orderlist-border);\r\n border-radius: var(--orderlist-radius);\r\n box-shadow: var(--orderlist-shadow);\r\n height: fit-content;\r\n position: sticky;\r\n top: 0;\r\n align-self: flex-start;\r\n }\r\n .control-group { display: flex; flex-direction: column; gap: 3px; }\r\n .control-group + .control-group { margin-top: 4px; padding-top: 6px; border-top: 1px solid var(--orderlist-border); }\r\n button.control-btn { display: flex; align-items: center; justify-content: center; width: 42px; height: 38px; padding: 0; border: none; border-radius: 8px; background: transparent; color: var(--orderlist-text-muted); cursor: pointer; font-size: 16px; line-height: 1; transition: var(--orderlist-transition); position: relative; }\r\n button.control-btn:hover:not(:disabled) { background: var(--orderlist-bg-hover); color: var(--orderlist-primary); transform: scale(1.1); }\r\n button.control-btn:active:not(:disabled) { transform: scale(0.92); background: color-mix(in srgb, var(--orderlist-primary) 15%, transparent); }\r\n button.control-btn:focus-visible { outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--orderlist-primary) 30%, transparent); }\r\n button.control-btn:disabled { opacity: 0.3; cursor: not-allowed; transform: none; }\r\n .control-btn-icon { font-size: 18px; line-height: 1; }\r\n /* Tooltip nos botoes */\r\n button.control-btn:hover::after { opacity: 1; transform: translateY(-50%) translateX(0); }\r\n @media (max-width: 640px) { .main-row { flex-direction: column; } .controls-bar { flex-direction: row; flex-wrap: wrap; justify-content: center; position: relative; } .control-group { flex-direction: row; } .control-group + .control-group { margin-top: 0; margin-left: 4px; padding-top: 0; padding-left: 4px; border-top: none; border-left: 1px solid var(--orderlist-border); } button.control-btn { width: 44px; height: 40px; } button.control-btn::after { display: none; } .list { max-height: 300px; } }\r\n @keyframes slideIn { from { opacity: 0; transform: translateX(-10px); } to { opacity: 1; transform: translateX(0); } }\r\n .list-item { animation: slideIn 0.2s ease-out; }\r\n @media (prefers-color-scheme: dark) { :host { --orderlist-border: #334155; --orderlist-bg: #1e293b; --orderlist-bg-hover: #334155; --orderlist-text: #f1f5f9; --orderlist-text-muted: #94a3b8; --orderlist-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); } }\r\n `;\r\n\r\n static override get observedAttributes(): string[] {\r\n return [\r\n 'data',\r\n 'data-key',\r\n 'filter',\r\n 'filter-by',\r\n 'filter-placeholder',\r\n 'breakpoint',\r\n 'controls-location',\r\n 'dragdrop',\r\n 'striped',\r\n 'selection-mode',\r\n 'show-select-all',\r\n ]\r\n }\r\n\r\n set data(value: OrderListItem[]) {\r\n this._data = value;\r\n this._filteredData = null;\r\n this.render();\r\n }\r\n get data(): OrderListItem[] {\r\n return this._data;\r\n }\r\n private _data: OrderListItem[] = [];\r\n private _filteredData: OrderListItem[] | null = null;\r\n\r\n set selection(value: OrderListItem[]) {\r\n this._selection = value;\r\n this.render();\r\n }\r\n get selection(): OrderListItem[] {\r\n return this._selection;\r\n }\r\n private _selection: OrderListItem[] = [];\r\n\r\n get dataKey(): string {\r\n return this.getAttr('data-key', '');\r\n }\r\n set dataKey(v: string) {\r\n this.setAttribute('data-key', v);\r\n }\r\n\r\n get filter(): boolean {\r\n return this.hasAttr('filter');\r\n }\r\n set filter(v: boolean) {\r\n this.toggleAttr('filter', v);\r\n }\r\n\r\n get filterBy(): string {\r\n return this.getAttr('filter-by', 'label');\r\n }\r\n set filterBy(v: string) {\r\n this.setAttribute('filter-by', v);\r\n }\r\n\r\n get filterPlaceholder(): string {\r\n return this.getAttr('filter-placeholder', 'Buscar...');\r\n }\r\n set filterPlaceholder(v: string) {\r\n this.setAttribute('filter-placeholder', v);\r\n }\r\n\r\n get breakpoint(): string {\r\n return this.getAttr('breakpoint', '960px');\r\n }\r\n set breakpoint(v: string) {\r\n this.setAttribute('breakpoint', v);\r\n }\r\n\r\n get dragdrop(): boolean {\r\n return this.hasAttr('dragdrop');\r\n }\r\n set dragdrop(v: boolean) {\r\n this.toggleAttr('dragdrop', v);\r\n }\r\n\r\n get striped(): boolean {\r\n return this.hasAttr('striped');\r\n }\r\n set striped(v: boolean) {\r\n this.toggleAttr('striped', v);\r\n }\r\n\r\n get selectionMode(): string {\r\n const s = this.getAttr('selection-mode', '');\r\n return s === 'single' || s === 'multiple' ? s : '';\r\n }\r\n set selectionMode(v: string) {\r\n this.setAttribute('selection-mode', v);\r\n }\r\n\r\n get showSelectAll(): boolean {\r\n return this.hasAttr('show-select-all');\r\n }\r\n set showSelectAll(v: boolean) {\r\n this.toggleAttr('show-select-all', v);\r\n }\r\n\r\n get filterValue(): string {\r\n return this._filterValue;\r\n }\r\n set filterValue(v: string) {\r\n this._filterValue = v;\r\n this._applyFilter();\r\n this._updateListDisplay();\r\n }\r\n private _filterValue = '';\r\n\r\n private _draggedIndex: number | null = null;\r\n private _listenersAttached = false;\r\n private _optionTemplate: ((item: OrderListItem) => string) | null = null;\r\n\r\n setOptionTemplate(template: (item: OrderListItem) => string): void {\r\n this._optionTemplate = template;\r\n this.render();\r\n }\r\n\r\n protected override connectedCallback(): void {\r\n this._parseDataAttribute();\r\n super.connectedCallback();\r\n }\r\n\r\n protected override attributeChangedCallback(): void {\r\n if (this.getAttr('data', '') !== '') {\r\n this._parseDataAttribute();\r\n }\r\n super.attributeChangedCallback();\r\n }\r\n\r\n private _parseDataAttribute(): void {\r\n const dataAttr = this.getAttr('data', '');\r\n if (dataAttr) {\r\n try {\r\n this._data = JSON.parse(dataAttr);\r\n this._filteredData = null;\r\n } catch {\r\n this._data = [];\r\n }\r\n }\r\n }\r\n\r\n private _applyFilter(): void {\r\n if (!this._filterValue) {\r\n this._filteredData = null;\r\n return;\r\n }\r\n const filterFields = this.filterBy.split(',').map(f => f.trim());\r\n this._filteredData = this._data.filter(item => {\r\n return filterFields.some(field => {\r\n const value = item[field];\r\n if (value == null) return false;\r\n return String(value).toLowerCase().includes(this._filterValue.toLowerCase());\r\n });\r\n });\r\n }\r\n\r\n private _getDisplayData(): OrderListItem[] {\r\n return this._filteredData || this._data;\r\n }\r\n\r\n private _getItemKey(item: OrderListItem, index: number): string {\r\n if (this.dataKey && item[this.dataKey] != null) {\r\n return String(item[this.dataKey]);\r\n }\r\n if (item['id'] != null) return String(item['id']);\r\n if (item['key'] != null) return String(item['key']);\r\n if (item['label'] != null) return String(item['label']);\r\n if (item['name'] != null) return String(item['name']);\r\n if (item['value'] != null) return String(item['value']);\r\n return String(index);\r\n }\r\n\r\n private _getItemLabel(item: OrderListItem): string {\r\n const fields = ['label', 'name', 'title', 'text', 'value'];\r\n for (const field of fields) {\r\n if (item[field] != null) {\r\n return String(item[field]);\r\n }\r\n }\r\n return JSON.stringify(item);\r\n }\r\n\r\n private _isSelected(item: OrderListItem): boolean {\r\n return this._selection.some(s => this._getItemKey(s, -1) === this._getItemKey(item, -1));\r\n }\r\n\r\n private _moveItem(fromIndex: number, toIndex: number): void {\r\n const actualFrom = this._getActualIndex(fromIndex);\r\n const actualTo = this._getActualIndex(toIndex);\r\n if (actualFrom === -1 || actualTo === -1) return;\r\n const item = this._data.splice(actualFrom, 1)[0];\r\n this._data.splice(actualTo, 0, item);\r\n this._applyFilter();\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitReorder();\r\n }\r\n\r\n private _getActualIndex(displayIndex: number): number {\r\n if (this._filteredData) {\r\n const item = this._filteredData[displayIndex];\r\n return this._data.findIndex(d => this._getItemKey(d, -1) === this._getItemKey(item, -1));\r\n }\r\n return displayIndex;\r\n }\r\n\r\n private _emitReorder(): void {\r\n this.dispatchEvent(new CustomEvent('reorder', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { items: [...this._data] },\r\n }));\r\n }\r\n\r\n private _emitSelectionChange(): void {\r\n this.dispatchEvent(new CustomEvent('selection-change', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { selection: [...this._selection] },\r\n }));\r\n }\r\n\r\n private _toggleSelection(item: OrderListItem): void {\r\n const key = this._getItemKey(item, -1);\r\n const index = this._selection.findIndex(s => this._getItemKey(s, -1) === key);\r\n if (index >= 0) {\r\n this._selection.splice(index, 1);\r\n } else if (this.selectionMode === 'multiple') {\r\n this._selection.push(item);\r\n } else {\r\n this._selection = [item];\r\n }\r\n this._emitSelectionChange();\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n }\r\n\r\n private _selectAll(): void {\r\n const displayData = this._getDisplayData();\r\n this._selection = [...displayData];\r\n this._emitSelectionChange();\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n }\r\n\r\n private _deselectAll(): void {\r\n this._selection = [];\r\n this._emitSelectionChange();\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n }\r\n\r\n private _toggleSelectAll(): void {\r\n const displayData = this._getDisplayData();\r\n if (this._selection.length === displayData.length) {\r\n this._deselectAll();\r\n } else {\r\n this._selectAll();\r\n }\r\n }\r\n\r\n protected override render(): void {\r\n const displayData = this._getDisplayData();\r\n const hasSelection = this.selectionMode;\r\n const hasMultipleSelection = this.selectionMode === 'multiple';\r\n const allSelected = hasMultipleSelection && displayData.length > 0 && this._selection.length === displayData.length;\r\n\r\n this.setTemplate(`\r\n <div class=\"container\" part=\"container\">\r\n ${this.filter ? `\r\n <div class=\"filter-wrapper\" part=\"filter-wrapper\">\r\n <input type=\"text\" class=\"filter-input\" part=\"filter-input\"\r\n placeholder=\"${this.filterPlaceholder}\"\r\n value=\"${esc(this._filterValue)}\"\r\n aria-label=\"Filtrar lista\" />\r\n </div>\r\n ` : ''}\r\n <div class=\"main-row\" part=\"main-row\">\r\n <div class=\"controls-bar\" part=\"controls-bar\">\r\n <div class=\"control-group\">\r\n <button class=\"control-btn\" data-action=\"top\" part=\"control-btn\" aria-label=\"Mover para o inicio\">\r\n <span class=\"control-btn-icon\">\\u00AB</span>\r\n </button>\r\n <button class=\"control-btn\" data-action=\"up\" part=\"control-btn\" aria-label=\"Mover para cima\">\r\n <span class=\"control-btn-icon\">\\u2191</span>\r\n </button>\r\n </div>\r\n <div class=\"control-group\">\r\n <button class=\"control-btn\" data-action=\"down\" part=\"control-btn\" aria-label=\"Mover para baixo\">\r\n <span class=\"control-btn-icon\">\\u2193</span>\r\n </button>\r\n <button class=\"control-btn\" data-action=\"bottom\" part=\"control-btn\" aria-label=\"Mover para o fim\">\r\n <span class=\"control-btn-icon\">\\u00BB</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"list-wrapper\" part=\"list-wrapper\">\r\n ${hasMultipleSelection && this.showSelectAll ? `\r\n <div class=\"select-all-bar\" part=\"select-all-bar\">\r\n <label>\r\n <input type=\"checkbox\" class=\"select-all-checkbox\"\r\n ${allSelected ? 'checked' : ''}\r\n aria-label=\"Selecionar todos\" />\r\n Selecionar Todos\r\n </label>\r\n <span class=\"selection-count\">${this._selection.length} selecionado(s)</span>\r\n </div>\r\n ` : ''}\r\n <ul class=\"list\" part=\"list\" role=\"listbox\"\r\n aria-multiselectable=\"${hasMultipleSelection}\"\r\n tabindex=\"0\">\r\n ${displayData.length === 0 ? `\r\n <li class=\"empty-message\" part=\"empty-message\">\r\n ${this.filter ? 'Nenhum resultado encontrado' : 'Nenhum item disponivel'}\r\n </li>\r\n ` : displayData.map((item, index) => {\r\n const key = this._getItemKey(item, index);\r\n const label = this._getItemLabel(item);\r\n const isSelected = this._isSelected(item);\r\n const content = this._optionTemplate ? this._optionTemplate(item) : esc(label);\r\n return `\r\n <li class=\"list-item${isSelected ? ' selected' : ''}\" part=\"list-item\"\r\n data-index=\"${index}\" data-key=\"${esc(key)}\"\r\n role=\"option\" aria-selected=\"${isSelected}\"\r\n ${this.dragdrop ? 'draggable=\"true\"' : ''}\r\n tabindex=\"0\">\r\n ${this.dragdrop ? '<span class=\"drag-handle\" part=\"drag-handle\" aria-label=\"Arrastar\">\\u22EE\\u22EE</span>' : ''}\r\n ${hasSelection ? `\r\n <input type=\"checkbox\" class=\"checkbox\" part=\"checkbox\"\r\n ${isSelected ? 'checked' : ''}\r\n aria-label=\"Selecionar ${esc(label)}\" />\r\n ` : ''}\r\n <span class=\"item-content\" part=\"item-content\">${content}</span>\r\n </li>\r\n `;\r\n }).join('')}\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n `);\r\n\r\n this._attachListeners();\r\n this._attachItemListeners(this.root.querySelector('.list') as HTMLElement);\r\n this._updateControlsState();\r\n }\r\n\r\n private _attachListeners(): void {\r\n if (this._listenersAttached) return;\r\n this._listenersAttached = true;\r\n const root = this.root;\r\n\r\n // Filtro - delega input\r\n root.addEventListener('input', (e) => {\r\n const t = e.target as HTMLElement;\r\n if (t.classList.contains('filter-input')) {\r\n this.filterValue = (t as HTMLInputElement).value;\r\n }\r\n });\r\n\r\n // Selecionar todos - delega change\r\n root.addEventListener('change', (e) => {\r\n const t = e.target as HTMLElement;\r\n if (t.classList.contains('select-all-checkbox')) {\r\n this._toggleSelectAll();\r\n }\r\n });\r\n\r\n // Clique - delega click nos botoes (itens anexados direto em cada render)\r\n root.addEventListener('click', (e) => {\r\n const target = e.target as HTMLElement;\r\n const btn = target.closest('.control-btn') as HTMLButtonElement;\r\n if (btn) {\r\n this._handleMoveAction(btn.dataset.action);\r\n }\r\n });\r\n\r\n // Drag and drop\r\n // Drag and drop - delega no root\r\n let dragOverElement: HTMLElement | null = null;\r\n root.addEventListener('dragstart', (e) => {\r\n const target = (e.target as HTMLElement).closest('.list-item') as HTMLElement;\r\n if (!target) return;\r\n this._draggedIndex = Number(target.dataset.index);\r\n target.classList.add('dragging');\r\n (e as DragEvent).dataTransfer!.effectAllowed = 'move';\r\n });\r\n root.addEventListener('dragend', (e) => {\r\n const target = e.target as HTMLElement;\r\n target.classList.remove('dragging');\r\n this._draggedIndex = null;\r\n root.querySelectorAll('.drag-over').forEach(el => el.classList.remove('drag-over'));\r\n dragOverElement = null;\r\n });\r\n root.addEventListener('dragover', (e) => {\r\n e.preventDefault();\r\n const target = (e.target as HTMLElement).closest('.list-item') as HTMLElement;\r\n if (!target || target.classList.contains('dragging')) return;\r\n if (dragOverElement) dragOverElement.classList.remove('drag-over');\r\n target.classList.add('drag-over');\r\n dragOverElement = target;\r\n });\r\n root.addEventListener('drop', (e) => {\r\n e.preventDefault();\r\n if (this._draggedIndex === null) return;\r\n const target = (e.target as HTMLElement).closest('.list-item') as HTMLElement;\r\n if (!target) return;\r\n const toIndex = Number(target.dataset.index);\r\n target.classList.remove('drag-over');\r\n dragOverElement = null;\r\n this._moveItem(this._draggedIndex, toIndex);\r\n this._draggedIndex = null;\r\n });\r\n this._updateControlsState();\r\n }\r\n\r\n private _attachItemListeners(list: HTMLElement): void {\r\n if (!list) return;\r\n list.addEventListener('click', (e) => {\r\n const target = e.target as HTMLElement;\r\n const itemEl = target.closest('.list-item') as HTMLElement;\r\n if (!itemEl) return;\r\n if (target.classList.contains('checkbox')) {\r\n e.stopPropagation();\r\n const idxC = Number(itemEl.dataset.index);\r\n this._toggleSelection(this._getDisplayData()[idxC]);\r\n return;\r\n }\r\n const idxI = Number(itemEl.dataset.index);\r\n this._toggleSelection(this._getDisplayData()[idxI]);\r\n });\r\n list.addEventListener('keydown', (e) => {\r\n const target = e.target as HTMLElement;\r\n if (!target.classList.contains('list-item')) return;\r\n const items = Array.from(list.querySelectorAll('.list-item')) as HTMLElement[];\r\n const currentIndex = items.indexOf(target);\r\n const ke = e as KeyboardEvent;\r\n switch (ke.key) {\r\n case 'ArrowUp':\r\n e.preventDefault();\r\n if (currentIndex > 0) items[currentIndex - 1].focus();\r\n break;\r\n case 'ArrowDown':\r\n e.preventDefault();\r\n if (currentIndex < items.length - 1) items[currentIndex + 1].focus();\r\n break;\r\n case ' ':\r\n case 'Enter':\r\n e.preventDefault();\r\n if (this.selectionMode) {\r\n const index = Number(target.dataset.index);\r\n this._toggleSelection(this._getDisplayData()[index]);\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n private _updateListDisplay(): void {\r\n const listWrapper = this.root.querySelector('.list-wrapper');\r\n if (!listWrapper) {\r\n this.render();\r\n return;\r\n }\r\n const displayData = this._getDisplayData();\r\n const hasSelection = this.selectionMode;\r\n const hasMultipleSelection = this.selectionMode === 'multiple';\r\n const allSelected = hasMultipleSelection && displayData.length > 0 && this._selection.length === displayData.length;\r\n\r\n listWrapper.innerHTML = `\r\n ${hasMultipleSelection && this.showSelectAll ? `\r\n <div class=\"select-all-bar\" part=\"select-all-bar\">\r\n <label>\r\n <input type=\"checkbox\" class=\"select-all-checkbox\"\r\n ${allSelected ? 'checked' : ''}\r\n aria-label=\"Selecionar todos\" />\r\n Selecionar Todos\r\n </label>\r\n <span class=\"selection-count\">${this._selection.length} selecionado(s)</span>\r\n </div>\r\n ` : ''}\r\n <ul class=\"list\" part=\"list\" role=\"listbox\"\r\n aria-multiselectable=\"${hasMultipleSelection}\"\r\n tabindex=\"0\">\r\n ${displayData.length === 0 ? `\r\n <li class=\"empty-message\" part=\"empty-message\">\r\n ${this.filter ? 'Nenhum resultado encontrado' : 'Nenhum item disponivel'}\r\n </li>\r\n ` : displayData.map((item, index) => {\r\n const key = this._getItemKey(item, index);\r\n const label = this._getItemLabel(item);\r\n const isSelected = this._isSelected(item);\r\n const content = this._optionTemplate ? this._optionTemplate(item) : esc(label);\r\n return `\r\n <li class=\"list-item${isSelected ? ' selected' : ''}\" part=\"list-item\"\r\n data-index=\"${index}\" data-key=\"${esc(key)}\"\r\n role=\"option\" aria-selected=\"${isSelected}\"\r\n ${this.dragdrop ? 'draggable=\"true\"' : ''}\r\n tabindex=\"0\">\r\n ${this.dragdrop ? '<span class=\"drag-handle\" part=\"drag-handle\" aria-label=\"Arrastar\">\\u22EE\\u22EE</span>' : ''}\r\n ${hasSelection ? `\r\n <input type=\"checkbox\" class=\"checkbox\" part=\"checkbox\"\r\n ${isSelected ? 'checked' : ''}\r\n aria-label=\"Selecionar ${esc(label)}\" />\r\n ` : ''}\r\n <span class=\"item-content\" part=\"item-content\">${content}</span>\r\n </li>\r\n `;\r\n }).join('')}\r\n </ul>\r\n `;\r\n this._attachListeners();\r\n this._attachItemListeners(this.root.querySelector('.list') as HTMLElement);\r\n }\r\n\r\n\r\n private _handleMoveAction(action: string | undefined): void {\r\n if (!this._selection.length) return;\r\n const displayData = this._getDisplayData();\r\n const selectedIndices = this._selection\r\n .map(s => displayData.findIndex(d => this._getItemKey(d, -1) === this._getItemKey(s, -1)))\r\n .filter(i => i >= 0)\r\n .sort((a, b) => a - b);\r\n\r\n if (selectedIndices.length === 0) return;\r\n\r\n switch (action) {\r\n case 'top':\r\n this._moveSelectedToStart(selectedIndices);\r\n break;\r\n case 'up':\r\n this._moveSelectedByOne(selectedIndices, -1);\r\n break;\r\n case 'down':\r\n this._moveSelectedByOne(selectedIndices, 1);\r\n break;\r\n case 'bottom':\r\n this._moveSelectedToEnd(selectedIndices);\r\n break;\r\n }\r\n }\r\n\r\n private _moveSelectedToStart(indices: number[]): void {\r\n const items: OrderListItem[] = [];\r\n const actualIndices: number[] = [];\r\n\r\n for (const idx of indices) {\r\n const actualIdx = this._getActualIndex(idx);\r\n items.push(this._data[actualIdx]);\r\n actualIndices.push(actualIdx);\r\n }\r\n\r\n actualIndices.sort((a, b) => b - a).forEach(i => this._data.splice(i, 1));\r\n\r\n const insertIdx = this._getActualIndex(0);\r\n this._data.splice(insertIdx, 0, ...items);\r\n\r\n this._applyFilter();\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitReorder();\r\n }\r\n\r\n private _moveSelectedToEnd(indices: number[]): void {\r\n const items: OrderListItem[] = [];\r\n const actualIndices: number[] = [];\r\n\r\n for (const idx of indices) {\r\n const actualIdx = this._getActualIndex(idx);\r\n items.push(this._data[actualIdx]);\r\n actualIndices.push(actualIdx);\r\n }\r\n\r\n actualIndices.sort((a, b) => b - a).forEach(i => this._data.splice(i, 1));\r\n\r\n const displayData = this._getDisplayData();\r\n const insertIdx = this._getActualIndex(displayData.length - 1);\r\n this._data.splice(insertIdx + 1, 0, ...items);\r\n\r\n this._applyFilter();\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitReorder();\r\n }\r\n\r\n private _moveSelectedByOne(indices: number[], delta: number): void {\r\n const displayData = this._getDisplayData();\r\n if (displayData.length === 0) return;\r\n\r\n // Get actual indices in _data array and sort them\r\n const actualIndices = indices\r\n .map(idx => this._getActualIndex(idx))\r\n .filter(idx => idx >= 0)\r\n .sort((a, b) => a - b);\r\n\r\n if (actualIndices.length === 0) return;\r\n\r\n // Check if movement is possible\r\n if (delta < 0 && actualIndices[0] <= 0) return;\r\n if (delta > 0 && actualIndices[actualIndices.length - 1] >= this._data.length - 1) return;\r\n\r\n // Extract selected items in order\r\n const selectedItems = actualIndices.map(idx => this._data[idx]);\r\n\r\n // Remove selected items from data (from highest to lowest to preserve indices)\r\n for (let i = actualIndices.length - 1; i >= 0; i--) {\r\n this._data.splice(actualIndices[i], 1);\r\n }\r\n\r\n // Calculate new insertion point\r\n let insertIndex: number;\r\n if (delta < 0) {\r\n // Moving up: insert before the first selected item position\r\n insertIndex = actualIndices[0] - 1;\r\n } else {\r\n // Moving down: insert after the last selected item position\r\n // Since we removed items, we need to adjust\r\n insertIndex = actualIndices[actualIndices.length - 1] - actualIndices.length + 1 + 1;\r\n }\r\n\r\n // Ensure insertIndex is within bounds\r\n insertIndex = Math.max(0, Math.min(insertIndex, this._data.length));\r\n\r\n // Insert items at new position\r\n this._data.splice(insertIndex, 0, ...selectedItems);\r\n\r\n this._applyFilter();\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitReorder();\r\n }\r\n\r\n private _updateControlsState(): void {\r\n const displayData = this._getDisplayData();\r\n const selectedIndices = this._selection\r\n .map(s => displayData.findIndex(d => this._getItemKey(d, -1) === this._getItemKey(s, -1)))\r\n .filter(i => i >= 0);\r\n\r\n const buttons = this.root.querySelectorAll<HTMLButtonElement>('.control-btn');\r\n buttons.forEach(btn => {\r\n const action = btn.dataset.action;\r\n let disabled = selectedIndices.length === 0;\r\n\r\n if (!disabled) {\r\n switch (action) {\r\n case 'top':\r\n case 'up':\r\n disabled = selectedIndices[0] === 0;\r\n break;\r\n case 'bottom':\r\n case 'down':\r\n disabled = selectedIndices[selectedIndices.length - 1] === displayData.length - 1;\r\n break;\r\n }\r\n }\r\n\r\n btn.disabled = disabled;\r\n });\r\n }\r\n}\r\n\r\nfunction esc(s: string): string {\r\n return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\r\n}\r\n\r\nexport function defineFxOrderList(): typeof FxOrderList {\r\n return defineElement('fx-orderlist', FxOrderList);\r\n}"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  import type { FxElementProps, FxSize } from './types';
15
15
  /** Marcador de runtime: permite `import '@wrrdev/fenix-ui/jsx'` como side-effect import. */
16
16
  export declare const FX_JSX_TYPES: true;
17
- export type FxButtonVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'ghost' | 'outline';
17
+ export type FxButtonVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' | 'ghost' | 'outline';
18
18
  export type FxBadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';
19
19
  export type FxAlertVariant = 'info' | 'success' | 'warning' | 'danger';
20
20
  export type FxProgressVariant = 'primary' | 'success' | 'warning' | 'danger';
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../../src/core/jsx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../../src/core/jsx.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.js","sources":["../../src/core/jsx.ts"],"sourcesContent":["/**\r\n * Tipagens de propriedades + augmentations JSX do FenixUI.\r\n *\r\n * Importar este módulo — diretamente (`@wrrdev/fenix-ui/jsx`) ou via o\r\n * índice principal (`@wrrdev/fenix-ui`) — habilita, no TypeScript:\r\n *\r\n * 1. autocomplete + validação de atributos em templates JSX/TSX;\r\n * 2. tipos nomeados (`FxButtonProps`, `FxInputProps`, …) para wrappers ou código imperativo.\r\n *\r\n * A biblioteca NÃO depende de React/Vue: os atributos comuns\r\n * (`className`, `onClick`, `style`, `children`, …) são aceitos via assinatura\r\n * de índice, funcionando com qualquer runtime JSX.\r\n */\r\n\r\nimport type { FxElementProps, FxSize } from './types';\r\n\r\n/** Marcador de runtime: permite `import '@wrrdev/fenix-ui/jsx'` como side-effect import. */\r\nexport const FX_JSX_TYPES = true as const;\r\n\r\n/* Uniões auxiliares (variants, enums) */\r\nexport type FxButtonVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'ghost' | 'outline';\r\nexport type FxBadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\r\nexport type FxAlertVariant = 'info' | 'success' | 'warning' | 'danger';\r\nexport type FxProgressVariant = 'primary' | 'success' | 'warning' | 'danger';\r\nexport type FxSkeletonVariant = 'text' | 'circle' | 'rect';\r\nexport type FxFloatlabelVariant = 'on' | 'in' | 'over';\r\nexport type FxInputType = 'text' | 'number' | 'email' | 'password' | 'search' | 'tel' | 'url';\r\nexport type FxFieldStatus = 'error' | 'invalid' | 'success' | 'valid';\r\nexport type FxToastKind = 'success' | 'error' | 'info' | 'warning';\r\nexport type FxToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';\r\nexport type FxTooltipPosition = 'top' | 'bottom' | 'left' | 'right';\r\nexport type FxDrawerPosition = 'left' | 'right' | 'top' | 'bottom';\r\nexport type FxDropdownPosition = 'left' | 'center' | 'right' | 'bottom-left' | 'bottom-right';\r\nexport type FxPaginationPosition = 'left' | 'center' | 'right';\r\n\r\n/* Props por componente */\r\nexport interface FxButtonProps extends FxElementProps {\r\n variant?: FxButtonVariant;\r\n type?: 'button' | 'submit' | 'reset';\r\n size?: FxSize;\r\n loading?: boolean;\r\n full?: boolean;\r\n}\r\nexport interface FxBadgeProps extends FxElementProps {\r\n variant?: FxBadgeVariant;\r\n round?: boolean;\r\n}\r\nexport interface FxSpinnerProps extends FxElementProps { size?: FxSize; }\r\nexport interface FxInputProps extends FxElementProps {\r\n type?: FxInputType;\r\n size?: FxSize;\r\n placeholder?: string;\r\n readonly?: boolean;\r\n min?: string | number;\r\n max?: string | number;\r\n step?: string | number;\r\n clearable?: boolean;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxSelectProps extends FxElementProps {\r\n value?: string;\r\n size?: FxSize;\r\n placeholder?: string;\r\n searchable?: boolean;\r\n clearable?: boolean;\r\n 'search-placeholder'?: string;\r\n 'no-results'?: string;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxSwitchProps extends FxElementProps { checked?: boolean; size?: FxSize; }\r\nexport interface FxCheckboxProps extends FxElementProps {\r\n checked?: boolean;\r\n indeterminate?: boolean;\r\n value?: string;\r\n size?: FxSize;\r\n}\r\nexport interface FxRadioProps extends FxElementProps {\r\n checked?: boolean;\r\n value?: string;\r\n name?: string;\r\n size?: FxSize;\r\n}\r\nexport interface FxTextareaProps extends FxElementProps {\r\n value?: string;\r\n size?: FxSize;\r\n placeholder?: string;\r\n readonly?: boolean;\r\n rows?: number;\r\n maxlength?: number;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxMultiselectProps extends FxElementProps {\r\n values?: string;\r\n size?: FxSize;\r\n placeholder?: string;\r\n searchable?: boolean;\r\n clearable?: boolean;\r\n open?: boolean;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxCalendarProps extends FxElementProps {\r\n value?: string;\r\n start?: string;\r\n end?: string;\r\n min?: string;\r\n max?: string;\r\n mode?: 'single' | 'range' | 'multiple';\r\n values?: string;\r\n locale?: string;\r\n disabled?: boolean;\r\n}\r\nexport interface FxDatepickerProps extends FxElementProps {\r\n value?: string;\r\n start?: string;\r\n end?: string;\r\n values?: string;\r\n mode?: 'single' | 'range' | 'multiple';\r\n min?: string;\r\n max?: string;\r\n placeholder?: string;\r\n size?: FxSize;\r\n format?: string;\r\n 'show-time'?: boolean;\r\n 'free-text'?: boolean;\r\n clearable?: boolean;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxTableProps extends FxElementProps {\r\n pagination?: boolean;\r\n rows?: number;\r\n 'rows-options'?: string;\r\n striped?: boolean;\r\n 'empty-message'?: string;\r\n 'pagination-position'?: FxPaginationPosition;\r\n total?: number;\r\n page?: number;\r\n}\r\nexport interface FxFloatlabelProps extends FxElementProps {\r\n variant?: FxFloatlabelVariant;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n active?: boolean;\r\n 'error-text'?: string;\r\n}\r\nexport interface FxDialogProps extends FxElementProps { open?: boolean; size?: FxSize; heading?: string; }\r\nexport interface FxDrawerProps extends FxElementProps { open?: boolean; title?: string; position?: FxDrawerPosition; }\r\nexport interface FxToastProps extends FxElementProps {\r\n kind?: FxToastKind;\r\n title?: string;\r\n message?: string;\r\n duration?: number;\r\n position?: FxToastPosition;\r\n}\r\nexport interface FxTooltipProps extends FxElementProps { content?: string; position?: FxTooltipPosition; }\r\nexport interface FxTabsProps extends FxElementProps { value?: string; }\r\nexport interface FxTabPanelProps extends FxElementProps { tab?: string; hidden?: boolean; }\r\nexport interface FxProgressProps extends FxElementProps {\r\n value?: number;\r\n indeterminate?: boolean;\r\n variant?: FxProgressVariant;\r\n label?: string;\r\n 'hide-label'?: boolean;\r\n size?: FxSize;\r\n}\r\nexport interface FxSkeletonProps extends FxElementProps {\r\n variant?: FxSkeletonVariant;\r\n width?: string;\r\n height?: string;\r\n lines?: number;\r\n}\r\nexport interface FxAlertProps extends FxElementProps { variant?: FxAlertVariant; title?: string; dismissible?: boolean; }\r\nexport interface FxDropdownProps extends FxElementProps { label?: string; position?: FxDropdownPosition; open?: boolean; }\r\nexport interface FxDropdownItemProps extends FxElementProps { value?: string; }\r\nexport interface FxPaginationProps extends FxElementProps {\r\n page?: number;\r\n total?: number;\r\n rows?: number;\r\n 'rows-options'?: string;\r\n position?: FxPaginationPosition;\r\n}\r\nexport interface FxAutocompleteProps extends FxElementProps {\r\n value?: string;\r\n size?: FxSize;\r\n placeholder?: string;\r\n source?: string;\r\n disabled?: boolean;\r\n 'min-chars'?: number;\r\n}\r\n/* Augmentation global de JSX (React/TSX, Preact, Vue JSX, …).\r\n Cada tag fx-* recebe autocomplete + validação de atributos. */\r\ndeclare global {\r\n namespace JSX {\r\n interface IntrinsicElements {\r\n 'fx-button': FxButtonProps;\r\n 'fx-badge': FxBadgeProps;\r\n 'fx-spinner': FxSpinnerProps;\r\n 'fx-input': FxInputProps;\r\n 'fx-select': FxSelectProps;\r\n 'fx-switch': FxSwitchProps;\r\n 'fx-checkbox': FxCheckboxProps;\r\n 'fx-radio': FxRadioProps;\r\n 'fx-textarea': FxTextareaProps;\r\n 'fx-multiselect': FxMultiselectProps;\r\n 'fx-calendar': FxCalendarProps;\r\n 'fx-datepicker': FxDatepickerProps;\r\n 'fx-table': FxTableProps;\r\n 'fx-floatlabel': FxFloatlabelProps;\r\n 'fx-dialog': FxDialogProps;\r\n 'fx-drawer': FxDrawerProps;\r\n 'fx-toast': FxToastProps;\r\n 'fx-tooltip': FxTooltipProps;\r\n 'fx-tabs': FxTabsProps;\r\n 'fx-tab-panel': FxTabPanelProps;\r\n 'fx-progress': FxProgressProps;\r\n 'fx-skeleton': FxSkeletonProps;\r\n 'fx-alert': FxAlertProps;\r\n 'fx-dropdown': FxDropdownProps;\r\n 'fx-dropdown-item': FxDropdownItemProps;\r\n 'fx-pagination': FxPaginationProps;\r\n 'fx-autocomplete': FxAutocompleteProps;\r\n }\r\n }\r\n}\r\n\r\n/* Tipagem imperativa: document.createElement('fx-...').\r\n As tags abaixo não declaradas nos próprios componentes ganham tipagem aqui;\r\n as demais (alert, dialog, drawer, dropdown, pagination, progress, skeleton,\r\n tabs, textarea, toast, tooltip, autocomplete) já são tipadas com a classe\r\n concreta nos respectivos index.ts. */\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'fx-button': HTMLElement;\r\n 'fx-badge': HTMLElement;\r\n 'fx-spinner': HTMLElement;\r\n 'fx-input': HTMLElement;\r\n 'fx-select': HTMLElement;\r\n 'fx-switch': HTMLElement;\r\n 'fx-checkbox': HTMLElement;\r\n 'fx-radio': HTMLElement;\r\n 'fx-multiselect': HTMLElement;\r\n 'fx-calendar': HTMLElement;\r\n 'fx-datepicker': HTMLElement;\r\n 'fx-table': HTMLElement;\r\n 'fx-floatlabel': HTMLElement;\r\n }\r\n}\r\n"],"names":[],"mappings":"AAiBO,MAAM,eAAe;"}
1
+ {"version":3,"file":"jsx.js","sources":["../../src/core/jsx.ts"],"sourcesContent":["/**\r\n * Tipagens de propriedades + augmentations JSX do FenixUI.\r\n *\r\n * Importar este módulo — diretamente (`@wrrdev/fenix-ui/jsx`) ou via o\r\n * índice principal (`@wrrdev/fenix-ui`) — habilita, no TypeScript:\r\n *\r\n * 1. autocomplete + validação de atributos em templates JSX/TSX;\r\n * 2. tipos nomeados (`FxButtonProps`, `FxInputProps`, …) para wrappers ou código imperativo.\r\n *\r\n * A biblioteca NÃO depende de React/Vue: os atributos comuns\r\n * (`className`, `onClick`, `style`, `children`, …) são aceitos via assinatura\r\n * de índice, funcionando com qualquer runtime JSX.\r\n */\r\n\r\nimport type { FxElementProps, FxSize } from './types';\r\n\r\n/** Marcador de runtime: permite `import '@wrrdev/fenix-ui/jsx'` como side-effect import. */\r\nexport const FX_JSX_TYPES = true as const;\r\n\r\n/* Uniões auxiliares (variants, enums) */\r\nexport type FxButtonVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' | 'ghost' | 'outline';\r\nexport type FxBadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\r\nexport type FxAlertVariant = 'info' | 'success' | 'warning' | 'danger';\r\nexport type FxProgressVariant = 'primary' | 'success' | 'warning' | 'danger';\r\nexport type FxSkeletonVariant = 'text' | 'circle' | 'rect';\r\nexport type FxFloatlabelVariant = 'on' | 'in' | 'over';\r\nexport type FxInputType = 'text' | 'number' | 'email' | 'password' | 'search' | 'tel' | 'url';\r\nexport type FxFieldStatus = 'error' | 'invalid' | 'success' | 'valid';\r\nexport type FxToastKind = 'success' | 'error' | 'info' | 'warning';\r\nexport type FxToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';\r\nexport type FxTooltipPosition = 'top' | 'bottom' | 'left' | 'right';\r\nexport type FxDrawerPosition = 'left' | 'right' | 'top' | 'bottom';\r\nexport type FxDropdownPosition = 'left' | 'center' | 'right' | 'bottom-left' | 'bottom-right';\r\nexport type FxPaginationPosition = 'left' | 'center' | 'right';\r\n\r\n/* Props por componente */\r\nexport interface FxButtonProps extends FxElementProps {\r\n variant?: FxButtonVariant;\r\n type?: 'button' | 'submit' | 'reset';\r\n size?: FxSize;\r\n loading?: boolean;\r\n full?: boolean;\r\n}\r\nexport interface FxBadgeProps extends FxElementProps {\r\n variant?: FxBadgeVariant;\r\n round?: boolean;\r\n}\r\nexport interface FxSpinnerProps extends FxElementProps { size?: FxSize; }\r\nexport interface FxInputProps extends FxElementProps {\r\n type?: FxInputType;\r\n size?: FxSize;\r\n placeholder?: string;\r\n readonly?: boolean;\r\n min?: string | number;\r\n max?: string | number;\r\n step?: string | number;\r\n clearable?: boolean;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxSelectProps extends FxElementProps {\r\n value?: string;\r\n size?: FxSize;\r\n placeholder?: string;\r\n searchable?: boolean;\r\n clearable?: boolean;\r\n 'search-placeholder'?: string;\r\n 'no-results'?: string;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxSwitchProps extends FxElementProps { checked?: boolean; size?: FxSize; }\r\nexport interface FxCheckboxProps extends FxElementProps {\r\n checked?: boolean;\r\n indeterminate?: boolean;\r\n value?: string;\r\n size?: FxSize;\r\n}\r\nexport interface FxRadioProps extends FxElementProps {\r\n checked?: boolean;\r\n value?: string;\r\n name?: string;\r\n size?: FxSize;\r\n}\r\nexport interface FxTextareaProps extends FxElementProps {\r\n value?: string;\r\n size?: FxSize;\r\n placeholder?: string;\r\n readonly?: boolean;\r\n rows?: number;\r\n maxlength?: number;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxMultiselectProps extends FxElementProps {\r\n values?: string;\r\n size?: FxSize;\r\n placeholder?: string;\r\n searchable?: boolean;\r\n clearable?: boolean;\r\n open?: boolean;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxCalendarProps extends FxElementProps {\r\n value?: string;\r\n start?: string;\r\n end?: string;\r\n min?: string;\r\n max?: string;\r\n mode?: 'single' | 'range' | 'multiple';\r\n values?: string;\r\n locale?: string;\r\n disabled?: boolean;\r\n}\r\nexport interface FxDatepickerProps extends FxElementProps {\r\n value?: string;\r\n start?: string;\r\n end?: string;\r\n values?: string;\r\n mode?: 'single' | 'range' | 'multiple';\r\n min?: string;\r\n max?: string;\r\n placeholder?: string;\r\n size?: FxSize;\r\n format?: string;\r\n 'show-time'?: boolean;\r\n 'free-text'?: boolean;\r\n clearable?: boolean;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n}\r\nexport interface FxTableProps extends FxElementProps {\r\n pagination?: boolean;\r\n rows?: number;\r\n 'rows-options'?: string;\r\n striped?: boolean;\r\n 'empty-message'?: string;\r\n 'pagination-position'?: FxPaginationPosition;\r\n total?: number;\r\n page?: number;\r\n}\r\nexport interface FxFloatlabelProps extends FxElementProps {\r\n variant?: FxFloatlabelVariant;\r\n error?: boolean;\r\n invalid?: boolean;\r\n success?: boolean;\r\n valid?: boolean;\r\n active?: boolean;\r\n 'error-text'?: string;\r\n}\r\nexport interface FxDialogProps extends FxElementProps { open?: boolean; size?: FxSize; heading?: string; }\r\nexport interface FxDrawerProps extends FxElementProps { open?: boolean; title?: string; position?: FxDrawerPosition; }\r\nexport interface FxToastProps extends FxElementProps {\r\n kind?: FxToastKind;\r\n title?: string;\r\n message?: string;\r\n duration?: number;\r\n position?: FxToastPosition;\r\n}\r\nexport interface FxTooltipProps extends FxElementProps { content?: string; position?: FxTooltipPosition; }\r\nexport interface FxTabsProps extends FxElementProps { value?: string; }\r\nexport interface FxTabPanelProps extends FxElementProps { tab?: string; hidden?: boolean; }\r\nexport interface FxProgressProps extends FxElementProps {\r\n value?: number;\r\n indeterminate?: boolean;\r\n variant?: FxProgressVariant;\r\n label?: string;\r\n 'hide-label'?: boolean;\r\n size?: FxSize;\r\n}\r\nexport interface FxSkeletonProps extends FxElementProps {\r\n variant?: FxSkeletonVariant;\r\n width?: string;\r\n height?: string;\r\n lines?: number;\r\n}\r\nexport interface FxAlertProps extends FxElementProps { variant?: FxAlertVariant; title?: string; dismissible?: boolean; }\r\nexport interface FxDropdownProps extends FxElementProps { label?: string; position?: FxDropdownPosition; open?: boolean; }\r\nexport interface FxDropdownItemProps extends FxElementProps { value?: string; }\r\nexport interface FxPaginationProps extends FxElementProps {\r\n page?: number;\r\n total?: number;\r\n rows?: number;\r\n 'rows-options'?: string;\r\n position?: FxPaginationPosition;\r\n}\r\nexport interface FxAutocompleteProps extends FxElementProps {\r\n value?: string;\r\n size?: FxSize;\r\n placeholder?: string;\r\n source?: string;\r\n disabled?: boolean;\r\n 'min-chars'?: number;\r\n}\r\n/* Augmentation global de JSX (React/TSX, Preact, Vue JSX, …).\r\n Cada tag fx-* recebe autocomplete + validação de atributos. */\r\ndeclare global {\r\n namespace JSX {\r\n interface IntrinsicElements {\r\n 'fx-button': FxButtonProps;\r\n 'fx-badge': FxBadgeProps;\r\n 'fx-spinner': FxSpinnerProps;\r\n 'fx-input': FxInputProps;\r\n 'fx-select': FxSelectProps;\r\n 'fx-switch': FxSwitchProps;\r\n 'fx-checkbox': FxCheckboxProps;\r\n 'fx-radio': FxRadioProps;\r\n 'fx-textarea': FxTextareaProps;\r\n 'fx-multiselect': FxMultiselectProps;\r\n 'fx-calendar': FxCalendarProps;\r\n 'fx-datepicker': FxDatepickerProps;\r\n 'fx-table': FxTableProps;\r\n 'fx-floatlabel': FxFloatlabelProps;\r\n 'fx-dialog': FxDialogProps;\r\n 'fx-drawer': FxDrawerProps;\r\n 'fx-toast': FxToastProps;\r\n 'fx-tooltip': FxTooltipProps;\r\n 'fx-tabs': FxTabsProps;\r\n 'fx-tab-panel': FxTabPanelProps;\r\n 'fx-progress': FxProgressProps;\r\n 'fx-skeleton': FxSkeletonProps;\r\n 'fx-alert': FxAlertProps;\r\n 'fx-dropdown': FxDropdownProps;\r\n 'fx-dropdown-item': FxDropdownItemProps;\r\n 'fx-pagination': FxPaginationProps;\r\n 'fx-autocomplete': FxAutocompleteProps;\r\n }\r\n }\r\n}\r\n\r\n/* Tipagem imperativa: document.createElement('fx-...').\r\n As tags abaixo não declaradas nos próprios componentes ganham tipagem aqui;\r\n as demais (alert, dialog, drawer, dropdown, pagination, progress, skeleton,\r\n tabs, textarea, toast, tooltip, autocomplete) já são tipadas com a classe\r\n concreta nos respectivos index.ts. */\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'fx-button': HTMLElement;\r\n 'fx-badge': HTMLElement;\r\n 'fx-spinner': HTMLElement;\r\n 'fx-input': HTMLElement;\r\n 'fx-select': HTMLElement;\r\n 'fx-switch': HTMLElement;\r\n 'fx-checkbox': HTMLElement;\r\n 'fx-radio': HTMLElement;\r\n 'fx-multiselect': HTMLElement;\r\n 'fx-calendar': HTMLElement;\r\n 'fx-datepicker': HTMLElement;\r\n 'fx-table': HTMLElement;\r\n 'fx-floatlabel': HTMLElement;\r\n }\r\n}\r\n"],"names":[],"mappings":"AAiBO,MAAM,eAAe;"}
@@ -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;AAChE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AA2D5B,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmC9C;AA46BD,eAAO,MAAM,iBAAiB,QAAO,OAAO,CAAC,IAAI,CAAgB,CAAC"}
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;AAChE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AA2D5B,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmC9C;AA86BD,eAAO,MAAM,iBAAiB,QAAO,OAAO,CAAC,IAAI,CAAgB,CAAC"}