@thibezer/ui-components-kit 2.9.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +6 -3
  3. package/dist/camadas.cjs +53 -55
  4. package/dist/camadas.js +254 -242
  5. package/dist/campo-texto.cjs +1 -1
  6. package/dist/campo-texto.js +1 -1
  7. package/dist/canvas.cjs +54 -53
  8. package/dist/canvas.js +2074 -1907
  9. package/dist/card.cjs +1 -1
  10. package/dist/card.js +1 -1
  11. package/dist/components/ui-area-texto/area-texto-altura.d.ts +16 -0
  12. package/dist/components/ui-area-texto/area-texto-contador.d.ts +6 -0
  13. package/dist/components/ui-area-texto/area-texto-template.d.ts +2 -0
  14. package/dist/components/ui-area-texto/index.d.ts +3 -0
  15. package/dist/components/ui-area-texto/tipos.d.ts +19 -0
  16. package/dist/components/ui-area-texto/ui-area-texto.d.ts +100 -0
  17. package/dist/components/ui-campo-texto/campo-texto-estados.d.ts +5 -1
  18. package/dist/components/ui-campo-texto/ui-campo-texto.d.ts +1 -0
  19. package/dist/components/ui-canvas-cad/cad-acessibilidade.d.ts +7 -1
  20. package/dist/components/ui-canvas-cad/cad-recusas.d.ts +6 -0
  21. package/dist/components/ui-card/card-interacao.d.ts +17 -0
  22. package/dist/components/ui-card/card-secoes.d.ts +10 -0
  23. package/dist/components/ui-card/ui-card.d.ts +23 -0
  24. package/dist/components/ui-texto/ui-texto.d.ts +16 -0
  25. package/dist/core/alvo-digitavel.d.ts +5 -0
  26. package/dist/core/opcoes.d.ts +7 -0
  27. package/dist/cores.cjs +1 -1
  28. package/dist/cores.js +9 -8
  29. package/dist/custom-elements.json +18133 -15664
  30. package/dist/data.cjs +1 -1
  31. package/dist/data.js +1 -1
  32. package/dist/forms.cjs +1 -1
  33. package/dist/forms.d.ts +4 -0
  34. package/dist/forms.js +15 -12
  35. package/dist/gerencigeo-canvas/canvas_interacao.d.ts +2 -0
  36. package/dist/gerencigeo-canvas/feature_desenho.d.ts +13 -1
  37. package/dist/gerencigeo-canvas/feature_desenho_controle.d.ts +3 -0
  38. package/dist/gerencigeo-canvas/feature_edicao_ops.d.ts +9 -0
  39. package/dist/gerencigeo-canvas/feature_editor_vertices.d.ts +13 -2
  40. package/dist/gerencigeo-canvas/mapa_core.d.ts +4 -0
  41. package/dist/gerencigeo-canvas/popup_residual.d.ts +5 -0
  42. package/dist/index.cjs +1 -1
  43. package/dist/index.d.ts +4 -0
  44. package/dist/index.js +195 -191
  45. package/dist/opcoes-CupvWVIm.js +24 -0
  46. package/dist/opcoes-vdAUY5OI.cjs +1 -0
  47. package/dist/register.cjs +1 -1
  48. package/dist/register.js +9 -8
  49. package/dist/tipos-elementos.d.ts +74 -0
  50. package/dist/tipos-react.d.ts +4 -0
  51. package/dist/tipos-vue.d.ts +74 -0
  52. package/dist/{ui-badge-BWhoGgo9.js → ui-badge-B5J_c5P5.js} +1 -1
  53. package/dist/{ui-badge-SIR81R9l.cjs → ui-badge-DC4y6Dik.cjs} +1 -1
  54. package/dist/{ui-campo-texto-B_OHVGiN.js → ui-campo-texto-19tIrmBK.js} +91 -93
  55. package/dist/ui-campo-texto-CH8mzX61.cjs +16 -0
  56. package/dist/ui-card-0wu4rjEX.cjs +20 -0
  57. package/dist/ui-card-DRtpOo3l.js +143 -0
  58. package/dist/ui-controle-cores-BEUKOq4n.js +275 -0
  59. package/dist/ui-controle-cores-BLhrZHMh.cjs +32 -0
  60. package/dist/{ui-linha-BYAX4W6x.cjs → ui-linha-C306zxWG.cjs} +6 -6
  61. package/dist/{ui-linha-aqLlaYi7.js → ui-linha-C_azWkcG.js} +103 -99
  62. package/dist/ui-seletor-cor-2yGryC_Z.cjs +86 -0
  63. package/dist/ui-seletor-cor-BuyhoDZz.js +345 -0
  64. package/dist/{ui-switch-DO1R0Ce7.js → ui-switch-BL-x_-SM.js} +460 -173
  65. package/dist/ui-switch-C0i_3QXu.cjs +66 -0
  66. package/package.json +1 -1
  67. package/dist/opcoes-CJYLi6kd.js +0 -12
  68. package/dist/opcoes-CkyDxBuQ.cjs +0 -1
  69. package/dist/ui-campo-texto-DauJCde3.cjs +0 -16
  70. package/dist/ui-card-BNYCQ7g-.js +0 -119
  71. package/dist/ui-card-BrjBL-yo.cjs +0 -20
  72. package/dist/ui-controle-cores-DgEza3wF.js +0 -612
  73. package/dist/ui-controle-cores-uY__TgwW.cjs +0 -117
  74. package/dist/ui-switch-D9a8XlVX.cjs +0 -53
@@ -0,0 +1,20 @@
1
+ "use strict";var E=Object.defineProperty;var A=(t,i,e)=>i in t?E(t,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[i]=e;var s=(t,i,e)=>A(t,typeof i!="symbol"?i+"":i,e);const _=require("./listener-bag-D5omxZ9h.cjs"),g=require("./ssr-safe-CiHD1adl.cjs"),f=require("./opcoes-vdAUY5OI.cjs"),w=':host{display:block;width:100%;box-sizing:border-box}:host([hidden]){display:none}:host(.h-full),:host([style*="height: 100%"]){height:100%}.ui-card{display:flex;flex-direction:column;width:100%;height:100%;box-sizing:border-box;background-color:var(--ui-cor-fundo-card, #18181c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);overflow:hidden;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .2s cubic-bezier(.4,0,.2,1),border-color .2s ease;color:var(--ui-cor-texto, #e1e1e6);font-family:var(--ui-fonte-base, "Inter", sans-serif)}.ui-card--plano{background-color:var(--ui-cor-fundo-card, #18181c);box-shadow:none}.ui-card--elevado{background-color:var(--ui-cor-fundo-elevado, #1e1e24);box-shadow:var(--ui-sombra-lg, 0 8px 24px rgba(0, 0, 0, .4));border-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent)}.ui-card--destaque{border-color:var(--ui-cor-primaria, #00E08A);background-color:var(--ui-cor-fundo-card, #18181c);box-shadow:0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent)}.ui-card--clicavel{cursor:pointer;-webkit-user-select:none;user-select:none}@media (hover: hover){.ui-card--clicavel:hover{transform:translateY(-3px);border-color:var(--ui-cor-primaria, #00E08A);box-shadow:var(--ui-sombra-lg, 0 10px 30px rgba(0, 0, 0, .5)),0 0 15px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 15%,transparent)}}.ui-card--clicavel:active{transform:translateY(-1px)}.ui-card--clicavel:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:2px;border-color:var(--ui-cor-primaria, #00E08A)}@media (prefers-reduced-motion: reduce){.ui-card{transition:none}.ui-card--clicavel:hover,.ui-card--clicavel:active{transform:none}}.ui-card--disabled{opacity:.5;cursor:not-allowed!important;pointer-events:none}.ui-card__media{width:100%;overflow:hidden;display:block;line-height:0}::slotted([slot="midia"]),::slotted([slot="media"]){width:100%;height:auto;display:block;object-fit:cover}.ui-card__header{padding:14px 16px 8px;display:flex;align-items:center;justify-content:space-between;gap:12px;box-sizing:border-box}.ui-card__body{padding:12px 16px;flex:1;box-sizing:border-box}.ui-card__footer{padding:10px 16px 14px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);display:flex;align-items:center;justify-content:space-between;gap:12px;box-sizing:border-box}.ui-card--compacto .ui-card__header{padding:10px 12px 6px}.ui-card--compacto .ui-card__body{padding:8px 12px}.ui-card--compacto .ui-card__footer{padding:8px 12px 10px}',k=["button","a","input","select","textarea","label","summary","ui-botao","ui-switch","ui-checkbox","ui-radio","ui-campo-texto","ui-segmented",'[contenteditable]:not([contenteditable="false"])','[role="button"]','[role="link"]','[role="checkbox"]','[role="switch"]','[role="menuitem"]'].join(", ");function C(t,i){if(typeof Element>"u"||!(t instanceof Element))return!1;const e=t.closest(k);return e!==null&&e!==i&&i.contains(e)}function S(t,i){return t.key!=="Enter"&&t.key!==" "||t.repeat||t.ctrlKey||t.altKey||t.metaKey?!1:t.target===i}function q(t,i,e){return Array.from(i.children).some(r=>e.includes(r.getAttribute("slot")??""))?!0:t?Array.from(t.querySelectorAll("slot")).filter(r=>e.includes(r.name)).some(r=>r.assignedNodes({flatten:!0}).some(o=>o.nodeType===1||o.nodeType===3&&(o.textContent??"").trim()!=="")):!1}const x=["plano","elevado","destaque"];class y extends g.SafeHTMLElement{constructor(){super();s(this,"cardElement");s(this,"listeners",new _.ListenerBag);s(this,"handleSlotChange",()=>{this.syncState()});s(this,"handleClick",e=>{this.disabled||!this.clicavel||e&&C(e.target,this)||this.emitirClique()});s(this,"handleKeyDown",e=>{!this.clicavel||this.disabled||!S(e,this.cardElement)||(e.preventDefault(),this.emitirClique())});const e=this.attachShadow({mode:"open"});e.innerHTML=`
2
+ <style>${w}</style>
3
+ <div class="ui-card" part="base">
4
+ <div class="ui-card__media" part="midia">
5
+ <slot name="midia"></slot>
6
+ <slot name="media"></slot>
7
+ </div>
8
+ <div class="ui-card__header" part="cabecalho">
9
+ <slot name="cabecalho"></slot>
10
+ <slot name="header"></slot>
11
+ </div>
12
+ <div class="ui-card__body" part="corpo">
13
+ <slot></slot>
14
+ </div>
15
+ <div class="ui-card__footer" part="rodape">
16
+ <slot name="rodape"></slot>
17
+ <slot name="footer"></slot>
18
+ </div>
19
+ </div>
20
+ `,this.cardElement=e.querySelector(".ui-card")}static get observedAttributes(){return["elevacao","elevation","variante","variant","clicavel","clickable","compacto","compact","disabled","aria-label"]}connectedCallback(){var a;this.listeners.cleanup(),this.listeners.add(this.cardElement,"click",this.handleClick),this.listeners.add(this.cardElement,"keydown",this.handleKeyDown);const e=(a=this.shadowRoot)==null?void 0:a.querySelectorAll("slot");e==null||e.forEach(l=>this.listeners.add(l,"slotchange",this.handleSlotChange)),this.syncState()}disconnectedCallback(){this.listeners.cleanup()}attributeChangedCallback(e,a,l){this.syncState()}focus(e){this.clicavel&&!this.disabled?this.cardElement.focus(e):super.focus(e)}get clicavel(){return this.hasAttribute("clicavel")||this.hasAttribute("clickable")}set clicavel(e){e?this.setAttribute("clicavel",""):(this.removeAttribute("clicavel"),this.removeAttribute("clickable")),this.syncState()}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled"),this.syncState()}syncState(){var b,m,p,v;const e=f.escolherOpcao(this.getAttribute("elevacao")||this.getAttribute("elevation"),x,"plano"),a=f.escolherOpcaoOpcional(this.getAttribute("variante")||this.getAttribute("variant"),x),l=this.clicavel,r=this.hasAttribute("compacto")||this.hasAttribute("compact"),o=this.disabled;if(this.cardElement.className="ui-card",this.cardElement.classList.add(`ui-card--${e}`),a&&this.cardElement.classList.add(`ui-card--${a}`),l){this.cardElement.classList.add("ui-card--clicavel"),this.cardElement.setAttribute("role","button"),this.cardElement.setAttribute("tabindex",o?"-1":"0");const c=(b=this.getAttribute("aria-label"))==null?void 0:b.trim();c?this.cardElement.setAttribute("aria-label",c):this.cardElement.removeAttribute("aria-label")}else this.cardElement.removeAttribute("role"),this.cardElement.removeAttribute("tabindex"),this.cardElement.removeAttribute("aria-label");o?this.cardElement.setAttribute("aria-disabled","true"):this.cardElement.removeAttribute("aria-disabled"),r&&this.cardElement.classList.add("ui-card--compacto"),o&&this.cardElement.classList.add("ui-card--disabled");const n=(m=this.shadowRoot)==null?void 0:m.querySelector(".ui-card__header"),u=(p=this.shadowRoot)==null?void 0:p.querySelector(".ui-card__footer"),h=(v=this.shadowRoot)==null?void 0:v.querySelector(".ui-card__media"),d=c=>q(this.shadowRoot,this,c);h&&(h.style.display=d(["midia","media"])?"block":"none"),n&&(n.style.display=d(["cabecalho","header"])?"flex":"none"),u&&(u.style.display=d(["rodape","footer"])?"flex":"none")}emitirClique(){const e={id:this.id||"sem-id"};this.dispatchEvent(new CustomEvent("ui-click",{detail:e,bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("ui-clique",{detail:{...e},bubbles:!0,composed:!0}))}}g.definirCustomElement("ui-card",y);exports.UICard=y;
@@ -0,0 +1,143 @@
1
+ var x = Object.defineProperty;
2
+ var g = (t, i, e) => i in t ? x(t, i, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[i] = e;
3
+ var s = (t, i, e) => g(t, typeof i != "symbol" ? i + "" : i, e);
4
+ import { L as y } from "./listener-bag-DQgv7OON.js";
5
+ import { d as E, S as A } from "./ssr-safe-5cWfJP-s.js";
6
+ import { e as _, a as w } from "./opcoes-CupvWVIm.js";
7
+ const k = ':host{display:block;width:100%;box-sizing:border-box}:host([hidden]){display:none}:host(.h-full),:host([style*="height: 100%"]){height:100%}.ui-card{display:flex;flex-direction:column;width:100%;height:100%;box-sizing:border-box;background-color:var(--ui-cor-fundo-card, #18181c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);overflow:hidden;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .2s cubic-bezier(.4,0,.2,1),border-color .2s ease;color:var(--ui-cor-texto, #e1e1e6);font-family:var(--ui-fonte-base, "Inter", sans-serif)}.ui-card--plano{background-color:var(--ui-cor-fundo-card, #18181c);box-shadow:none}.ui-card--elevado{background-color:var(--ui-cor-fundo-elevado, #1e1e24);box-shadow:var(--ui-sombra-lg, 0 8px 24px rgba(0, 0, 0, .4));border-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent)}.ui-card--destaque{border-color:var(--ui-cor-primaria, #00E08A);background-color:var(--ui-cor-fundo-card, #18181c);box-shadow:0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent)}.ui-card--clicavel{cursor:pointer;-webkit-user-select:none;user-select:none}@media (hover: hover){.ui-card--clicavel:hover{transform:translateY(-3px);border-color:var(--ui-cor-primaria, #00E08A);box-shadow:var(--ui-sombra-lg, 0 10px 30px rgba(0, 0, 0, .5)),0 0 15px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 15%,transparent)}}.ui-card--clicavel:active{transform:translateY(-1px)}.ui-card--clicavel:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:2px;border-color:var(--ui-cor-primaria, #00E08A)}@media (prefers-reduced-motion: reduce){.ui-card{transition:none}.ui-card--clicavel:hover,.ui-card--clicavel:active{transform:none}}.ui-card--disabled{opacity:.5;cursor:not-allowed!important;pointer-events:none}.ui-card__media{width:100%;overflow:hidden;display:block;line-height:0}::slotted([slot="midia"]),::slotted([slot="media"]){width:100%;height:auto;display:block;object-fit:cover}.ui-card__header{padding:14px 16px 8px;display:flex;align-items:center;justify-content:space-between;gap:12px;box-sizing:border-box}.ui-card__body{padding:12px 16px;flex:1;box-sizing:border-box}.ui-card__footer{padding:10px 16px 14px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);display:flex;align-items:center;justify-content:space-between;gap:12px;box-sizing:border-box}.ui-card--compacto .ui-card__header{padding:10px 12px 6px}.ui-card--compacto .ui-card__body{padding:8px 12px}.ui-card--compacto .ui-card__footer{padding:8px 12px 10px}', C = [
8
+ "button",
9
+ "a",
10
+ "input",
11
+ "select",
12
+ "textarea",
13
+ "label",
14
+ "summary",
15
+ "ui-botao",
16
+ "ui-switch",
17
+ "ui-checkbox",
18
+ "ui-radio",
19
+ "ui-campo-texto",
20
+ "ui-segmented",
21
+ '[contenteditable]:not([contenteditable="false"])',
22
+ '[role="button"]',
23
+ '[role="link"]',
24
+ '[role="checkbox"]',
25
+ '[role="switch"]',
26
+ '[role="menuitem"]'
27
+ ].join(", ");
28
+ function S(t, i) {
29
+ if (typeof Element > "u" || !(t instanceof Element)) return !1;
30
+ const e = t.closest(C);
31
+ return e !== null && e !== i && i.contains(e);
32
+ }
33
+ function q(t, i) {
34
+ return t.key !== "Enter" && t.key !== " " || t.repeat || t.ctrlKey || t.altKey || t.metaKey ? !1 : t.target === i;
35
+ }
36
+ function L(t, i, e) {
37
+ return Array.from(i.children).some((r) => e.includes(r.getAttribute("slot") ?? "")) ? !0 : t ? Array.from(t.querySelectorAll("slot")).filter((r) => e.includes(r.name)).some(
38
+ (r) => r.assignedNodes({ flatten: !0 }).some(
39
+ (o) => o.nodeType === 1 || o.nodeType === 3 && (o.textContent ?? "").trim() !== ""
40
+ )
41
+ ) : !1;
42
+ }
43
+ const f = ["plano", "elevado", "destaque"];
44
+ class O extends A {
45
+ constructor() {
46
+ super();
47
+ s(this, "cardElement");
48
+ s(this, "listeners", new y());
49
+ s(this, "handleSlotChange", () => {
50
+ this.syncState();
51
+ });
52
+ s(this, "handleClick", (e) => {
53
+ this.disabled || !this.clicavel || e && S(e.target, this) || this.emitirClique();
54
+ });
55
+ s(this, "handleKeyDown", (e) => {
56
+ !this.clicavel || this.disabled || !q(e, this.cardElement) || (e.preventDefault(), this.emitirClique());
57
+ });
58
+ const e = this.attachShadow({ mode: "open" });
59
+ e.innerHTML = `
60
+ <style>${k}</style>
61
+ <div class="ui-card" part="base">
62
+ <div class="ui-card__media" part="midia">
63
+ <slot name="midia"></slot>
64
+ <slot name="media"></slot>
65
+ </div>
66
+ <div class="ui-card__header" part="cabecalho">
67
+ <slot name="cabecalho"></slot>
68
+ <slot name="header"></slot>
69
+ </div>
70
+ <div class="ui-card__body" part="corpo">
71
+ <slot></slot>
72
+ </div>
73
+ <div class="ui-card__footer" part="rodape">
74
+ <slot name="rodape"></slot>
75
+ <slot name="footer"></slot>
76
+ </div>
77
+ </div>
78
+ `, this.cardElement = e.querySelector(".ui-card");
79
+ }
80
+ static get observedAttributes() {
81
+ return [
82
+ "elevacao",
83
+ "elevation",
84
+ "variante",
85
+ "variant",
86
+ "clicavel",
87
+ "clickable",
88
+ "compacto",
89
+ "compact",
90
+ "disabled",
91
+ "aria-label"
92
+ ];
93
+ }
94
+ connectedCallback() {
95
+ var a;
96
+ this.listeners.cleanup(), this.listeners.add(this.cardElement, "click", this.handleClick), this.listeners.add(this.cardElement, "keydown", this.handleKeyDown);
97
+ const e = (a = this.shadowRoot) == null ? void 0 : a.querySelectorAll("slot");
98
+ e == null || e.forEach((l) => this.listeners.add(l, "slotchange", this.handleSlotChange)), this.syncState();
99
+ }
100
+ disconnectedCallback() {
101
+ this.listeners.cleanup();
102
+ }
103
+ attributeChangedCallback(e, a, l) {
104
+ this.syncState();
105
+ }
106
+ /** Leva o foco ao card clicável e habilitado; nos demais casos mantém o comportamento nativo do host. */
107
+ focus(e) {
108
+ this.clicavel && !this.disabled ? this.cardElement.focus(e) : super.focus(e);
109
+ }
110
+ get clicavel() {
111
+ return this.hasAttribute("clicavel") || this.hasAttribute("clickable");
112
+ }
113
+ set clicavel(e) {
114
+ e ? this.setAttribute("clicavel", "") : (this.removeAttribute("clicavel"), this.removeAttribute("clickable")), this.syncState();
115
+ }
116
+ get disabled() {
117
+ return this.hasAttribute("disabled");
118
+ }
119
+ set disabled(e) {
120
+ e ? this.setAttribute("disabled", "") : this.removeAttribute("disabled"), this.syncState();
121
+ }
122
+ syncState() {
123
+ var b, m, p, v;
124
+ const e = _(this.getAttribute("elevacao") || this.getAttribute("elevation"), f, "plano"), a = w(this.getAttribute("variante") || this.getAttribute("variant"), f), l = this.clicavel, r = this.hasAttribute("compacto") || this.hasAttribute("compact"), o = this.disabled;
125
+ if (this.cardElement.className = "ui-card", this.cardElement.classList.add(`ui-card--${e}`), a && this.cardElement.classList.add(`ui-card--${a}`), l) {
126
+ this.cardElement.classList.add("ui-card--clicavel"), this.cardElement.setAttribute("role", "button"), this.cardElement.setAttribute("tabindex", o ? "-1" : "0");
127
+ const c = (b = this.getAttribute("aria-label")) == null ? void 0 : b.trim();
128
+ c ? this.cardElement.setAttribute("aria-label", c) : this.cardElement.removeAttribute("aria-label");
129
+ } else
130
+ this.cardElement.removeAttribute("role"), this.cardElement.removeAttribute("tabindex"), this.cardElement.removeAttribute("aria-label");
131
+ o ? this.cardElement.setAttribute("aria-disabled", "true") : this.cardElement.removeAttribute("aria-disabled"), r && this.cardElement.classList.add("ui-card--compacto"), o && this.cardElement.classList.add("ui-card--disabled");
132
+ const n = (m = this.shadowRoot) == null ? void 0 : m.querySelector(".ui-card__header"), u = (p = this.shadowRoot) == null ? void 0 : p.querySelector(".ui-card__footer"), h = (v = this.shadowRoot) == null ? void 0 : v.querySelector(".ui-card__media"), d = (c) => L(this.shadowRoot, this, c);
133
+ h && (h.style.display = d(["midia", "media"]) ? "block" : "none"), n && (n.style.display = d(["cabecalho", "header"]) ? "flex" : "none"), u && (u.style.display = d(["rodape", "footer"]) ? "flex" : "none");
134
+ }
135
+ emitirClique() {
136
+ const e = { id: this.id || "sem-id" };
137
+ this.dispatchEvent(new CustomEvent("ui-click", { detail: e, bubbles: !0, composed: !0 })), this.dispatchEvent(new CustomEvent("ui-clique", { detail: { ...e }, bubbles: !0, composed: !0 }));
138
+ }
139
+ }
140
+ E("ui-card", O);
141
+ export {
142
+ O as U
143
+ };
@@ -0,0 +1,275 @@
1
+ var A = Object.defineProperty;
2
+ var k = (d, n, e) => n in d ? A(d, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : d[n] = e;
3
+ var i = (d, n, e) => k(d, typeof n != "symbol" ? n + "" : n, e);
4
+ import { d as z, S } from "./ssr-safe-5cWfJP-s.js";
5
+ import { L as w } from "./listener-bag-DQgv7OON.js";
6
+ import { n as f, c as q, b as P, a as $ } from "./ui-seletor-cor-BuyhoDZz.js";
7
+ const j = ':host{--_a: var(--ui-controle-cores-amostra, 26px);--_pilha: calc(var(--_a) * 5 / 3);--_borda: color-mix(in srgb, var(--ui-cor-texto, #e1e1e6) 30%, transparent);--_borda-forte: color-mix(in srgb, var(--ui-cor-texto, #e1e1e6) 70%, transparent);--_base: var(--ui-cor-superficie, #1d1d22);--_destaque: var(--ui-cor-primaria, #00e08a);--_vermelho: #ef4444;display:inline-block;flex-shrink:0;-webkit-user-select:none;user-select:none}:host([hidden]){display:none}*,*:before,*:after{box-sizing:border-box}.pilha{display:flex;align-items:stretch;gap:6px}.amostras{position:relative;flex:none;width:var(--_pilha);height:var(--_pilha)}.amostra{position:absolute;width:var(--_a);height:var(--_a);padding:0;background:var(--_base);border:1px solid var(--_borda);border-radius:6px;cursor:pointer;transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease,opacity .15s ease}.amostra--traco{right:0;bottom:0;z-index:1}.amostra--preenchimento{top:0;left:0;z-index:2;box-shadow:0 2px 6px #00000059}.amostra:hover{border-color:var(--_borda-forte);transform:scale(1.05)}.amostra:focus-visible{outline:2px solid var(--ui-cor-texto, #e1e1e6);outline-offset:2px}.amostra--ativa,.amostra--ativa:hover{z-index:3;border-color:var(--_destaque);box-shadow:0 0 0 1.5px var(--_destaque),0 2px 6px #00000059}:host([so-traco]) .amostra--preenchimento{opacity:.4}.face{position:absolute;top:3px;right:3px;bottom:3px;left:3px;border-radius:3.5px;pointer-events:none}.face--traco{background:transparent;border:4px solid #ffffff}.face--sem-cor{background:repeating-conic-gradient(#3a3a45,#3a3a45 25%,#24242b 0%,#24242b 50%) 50% / 6px 6px!important;border-color:#ef44448c!important;overflow:hidden}.face--sem-cor:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(to top right,transparent calc(50% - 1px),var(--_vermelho) calc(50% - 1px),var(--_vermelho) calc(50% + 1px),transparent calc(50% + 1px))}.face--misto{display:flex;align-items:center;justify-content:center;background:#2e2e38!important;border-color:#64748b!important}.face--misto:after{content:"?";color:#fff;font-size:12px;font-weight:800;line-height:1;text-shadow:0 1px 2px rgba(0,0,0,.8)}.acoes{display:flex;flex:none;flex-direction:column;gap:2px;width:16px}.acao{display:flex;flex:1;align-items:center;justify-content:center;min-height:0;padding:0;background:transparent;border:0;border-radius:4px;color:var(--ui-cor-texto-secundario, #9696a6);cursor:pointer;transition:color .15s ease,background .15s ease}.acao:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent);color:var(--_destaque)}.acao:focus-visible{outline:2px solid var(--ui-cor-texto, #e1e1e6);outline-offset:1px}.acao svg{width:12px;height:12px}.acao--sem-cor:hover{background:#ef444433;color:var(--_vermelho)}.icone-padrao{position:relative;width:11px;height:11px}.ponto{position:absolute;width:7px;height:7px;border-radius:1.5px}.ponto--preenchimento{top:0;left:0;background:#00e08a;border:1px solid var(--_borda-forte)}.ponto--traco{right:0;bottom:0;background:var(--_base);border:1.5px solid #ffffff}:host([desabilitado]) .pilha{opacity:.5}:host([desabilitado]) .amostra,:host([desabilitado]) .acao{cursor:not-allowed;pointer-events:none}@media (prefers-reduced-motion: reduce){.amostra,.acao{transition:none}.amostra:hover{transform:none}}';
8
+ class E extends S {
9
+ constructor() {
10
+ super();
11
+ i(this, "raiz");
12
+ i(this, "listeners", new w());
13
+ i(this, "renderizado", !1);
14
+ i(this, "_preenchimento", "#00e08a");
15
+ i(this, "_traco", "#ffffff");
16
+ i(this, "_opacidade", 0.35);
17
+ i(this, "_alvo", "preenchimento");
18
+ i(this, "_misto", { preenchimento: !1, traco: !1 });
19
+ i(this, "_padrao", { preenchimento: "#00e08a", traco: "#ffffff" });
20
+ i(this, "_coresProjeto", []);
21
+ i(this, "_atalhos", {});
22
+ i(this, "seletor", null);
23
+ i(this, "estadoAoAbrir", null);
24
+ this.raiz = this.attachShadow({ mode: "open" });
25
+ }
26
+ static get observedAttributes() {
27
+ return ["preenchimento", "traco", "opacidade", "alvo", "padrao-preenchimento", "padrao-traco", "desabilitado"];
28
+ }
29
+ connectedCallback() {
30
+ this.renderizado || this.renderizar(), this.listeners.cleanup(), this.vincularEventos(), this.atualizar();
31
+ }
32
+ disconnectedCallback() {
33
+ this.fecharSeletor(!0), this.listeners.cleanup();
34
+ }
35
+ attributeChangedCallback(e, t, o) {
36
+ if (t !== o) {
37
+ if (e === "desabilitado") {
38
+ this.hasAttribute("desabilitado") && this.fecharSeletor(!1), this.atualizar();
39
+ return;
40
+ }
41
+ if (o !== null) {
42
+ if (e === "preenchimento") this.definirCores({ preenchimento: o });
43
+ else if (e === "traco") this.definirCores({ traco: o });
44
+ else if (e === "opacidade") this.definirCores({ opacidade: Number(o) });
45
+ else if (e === "alvo") this.definirAlvo(o);
46
+ else if (e === "padrao-preenchimento" || e === "padrao-traco") {
47
+ const r = f(o);
48
+ if (!r) return;
49
+ e === "padrao-preenchimento" ? this._padrao.preenchimento = r : this._padrao.traco = r, this.atualizar();
50
+ }
51
+ }
52
+ }
53
+ }
54
+ /* ---------- Propriedades ---------- */
55
+ get preenchimento() {
56
+ return this._preenchimento;
57
+ }
58
+ set preenchimento(e) {
59
+ this.definirCores({ preenchimento: e });
60
+ }
61
+ get traco() {
62
+ return this._traco;
63
+ }
64
+ set traco(e) {
65
+ this.definirCores({ traco: e });
66
+ }
67
+ get opacidade() {
68
+ return this._opacidade;
69
+ }
70
+ set opacidade(e) {
71
+ this.definirCores({ opacidade: e });
72
+ }
73
+ get alvo() {
74
+ return this._alvo;
75
+ }
76
+ set alvo(e) {
77
+ this.definirAlvo(e);
78
+ }
79
+ /** Cores oferecidas em "Cores do projeto" no seletor. */
80
+ get coresProjeto() {
81
+ return [...this._coresProjeto];
82
+ }
83
+ set coresProjeto(e) {
84
+ this._coresProjeto = q(e);
85
+ }
86
+ /** Teclas exibidas nas dicas dos botões (ex.: `{ inverter: 'Shift+X' }`). */
87
+ get atalhos() {
88
+ return { ...this._atalhos };
89
+ }
90
+ set atalhos(e) {
91
+ this._atalhos = { ...e || {} }, this.atualizar();
92
+ }
93
+ get seletorAberto() {
94
+ var e;
95
+ return !!((e = this.seletor) != null && e.aberto);
96
+ }
97
+ /* ---------- Métodos (sem eventos) ---------- */
98
+ /** Define cores e/ou opacidade sem emitir eventos. Valores inválidos são ignorados; uma cor definida deixa de ser "mista". */
99
+ definirCores(e = {}) {
100
+ const t = f(e.preenchimento), o = f(e.traco);
101
+ t && (this._preenchimento = t, this._misto.preenchimento = !1), o && (this._traco = o, this._misto.traco = !1), e.opacidade !== void 0 && (this._opacidade = P(e.opacidade, this._opacidade)), this.atualizar();
102
+ }
103
+ obterCores() {
104
+ return { preenchimento: this._preenchimento, traco: this._traco, opacidade: this._opacidade, alvo: this._alvo };
105
+ }
106
+ /** Marca a amostra como ativa sem emitir eventos. */
107
+ definirAlvo(e) {
108
+ this._alvo = e === "traco" ? "traco" : "preenchimento", this.atualizar(), this.sincronizarSeletor();
109
+ }
110
+ /** Mostra "?" nas amostras cujas cores divergem na seleção atual. */
111
+ definirMisto(e = {}) {
112
+ this._misto = { preenchimento: !!e.preenchimento, traco: !!e.traco }, this.atualizar();
113
+ }
114
+ /* ---------- Ações (emitem eventos) ---------- */
115
+ /** Alterna o alvo ativo entre preenchimento e traço; emite `ui-alvo-change`. */
116
+ alternarAlvo() {
117
+ this.mudarAlvo(this._alvo === "traco" ? "preenchimento" : "traco");
118
+ }
119
+ /** Troca preenchimento e traço; emite `ui-cores-change` confirmado. */
120
+ inverter() {
121
+ const e = this._preenchimento;
122
+ this._preenchimento = this._traco, this._traco = e, this._misto = { preenchimento: this._misto.traco, traco: this._misto.preenchimento }, this.atualizar(), this.emitirCores(!0, ["preenchimento", "traco"], "inverter");
123
+ }
124
+ /** "Sem cor" no alvo indicado (padrão: o ativo); emite `ui-cores-change` confirmado. */
125
+ semCor(e = this._alvo) {
126
+ const t = e === "traco" ? "traco" : "preenchimento";
127
+ t === "traco" ? this._traco = "none" : this._preenchimento = "none", this._misto[t] = !1, this.atualizar(), this.emitirCores(!0, [t], "sem-cor");
128
+ }
129
+ /** Volta às cores de `padrao-preenchimento` e `padrao-traco`; emite `ui-cores-change` confirmado. */
130
+ restaurarPadrao() {
131
+ this._preenchimento = this._padrao.preenchimento, this._traco = this._padrao.traco, this._misto = { preenchimento: !1, traco: !1 }, this.atualizar(), this.emitirCores(!0, ["preenchimento", "traco"], "padrao");
132
+ }
133
+ /** Abre o seletor de cor ancorado na amostra do alvo (que passa a ser o ativo). Com `focar`, leva o foco do teclado para o painel. */
134
+ abrirSeletor(e = this._alvo, t = !1) {
135
+ if (this.hasAttribute("desabilitado") || (this.mudarAlvo(e === "traco" ? "traco" : "preenchimento"), this.seletorAberto)) return;
136
+ const o = this.raiz.querySelector(`[data-alvo="${this._alvo}"]`) || this;
137
+ this.estadoAoAbrir = this.obterCores(), this.seletor = $({
138
+ ancora: o,
139
+ titulo: this.getAttribute("titulo-seletor") || "Cores e estilo",
140
+ modo: "duplo",
141
+ alvo: this._alvo,
142
+ preenchimento: this._preenchimento,
143
+ traco: this._traco,
144
+ opacidade: this._opacidade,
145
+ misto: this._misto[this._alvo],
146
+ coresProjeto: this._coresProjeto,
147
+ focar: t,
148
+ aoAlterar: (r) => this.aplicarDoSeletor(r, !1),
149
+ aoConfirmar: (r) => {
150
+ this.seletor = null, this.aplicarDoSeletor(r, !0);
151
+ },
152
+ aoCancelar: () => {
153
+ this.seletor = null, this.estadoAoAbrir = null;
154
+ },
155
+ aoTrocarAlvo: (r) => this.mudarAlvo(r)
156
+ });
157
+ }
158
+ /**
159
+ * Fecha o seletor aberto por este controle. Com `confirmar` (padrão), grava o que foi editado;
160
+ * sem ele, cancela: as cores iniciais voltam (com um `ui-cores-change` não confirmado) e nada é confirmado.
161
+ */
162
+ fecharSeletor(e = !0) {
163
+ const t = this.seletor;
164
+ t && (e ? t.fechar(!0) : t.elemento.cancelar());
165
+ }
166
+ /* ---------- Interno ---------- */
167
+ mudarAlvo(e) {
168
+ e !== this._alvo && (this._alvo = e, this.atualizar(), this.sincronizarSeletor(), this.dispatchEvent(new CustomEvent("ui-alvo-change", { detail: { alvo: e }, bubbles: !0, composed: !0 })));
169
+ }
170
+ /** Mantém a aba do seletor aberto igual ao alvo do controle. */
171
+ sincronizarSeletor() {
172
+ var e, t;
173
+ (t = (e = this.seletor) == null ? void 0 : e.elemento) == null || t.trocarAlvo(this._alvo);
174
+ }
175
+ aplicarDoSeletor(e, t) {
176
+ const o = (a) => {
177
+ const p = [];
178
+ return e.preenchimento !== a.preenchimento && p.push("preenchimento"), e.traco !== a.traco && p.push("traco"), e.opacidade !== a.opacidade && p.push("opacidade"), p;
179
+ }, r = o(this.obterCores());
180
+ if (this._preenchimento = e.preenchimento, this._traco = e.traco, this._opacidade = e.opacidade, r.includes("preenchimento") && (this._misto.preenchimento = !1), r.includes("traco") && (this._misto.traco = !1), this.atualizar(), !t) {
181
+ r.length && this.emitirCores(!1, r, "seletor");
182
+ return;
183
+ }
184
+ this.emitirCores(!0, this.estadoAoAbrir ? o(this.estadoAoAbrir) : r, "seletor"), this.estadoAoAbrir = null;
185
+ }
186
+ emitirCores(e, t, o) {
187
+ const r = { ...this.obterCores(), confirmado: e, alterados: t, origem: o };
188
+ this.dispatchEvent(new CustomEvent("ui-cores-change", { detail: r, bubbles: !0, composed: !0 }));
189
+ }
190
+ dica(e, t) {
191
+ return t ? `${e} [${t}]` : e;
192
+ }
193
+ renderizar() {
194
+ this.raiz.innerHTML = `
195
+ <style>${j}</style>
196
+ <div class="pilha" part="pilha" role="group" aria-label="Cores de desenho">
197
+ <div class="amostras" part="amostras">
198
+ <button type="button" class="amostra amostra--traco" data-alvo="traco" part="amostra amostra-traco">
199
+ <span class="face face--traco"></span>
200
+ </button>
201
+ <button type="button" class="amostra amostra--preenchimento" data-alvo="preenchimento" part="amostra amostra-preenchimento">
202
+ <span class="face face--preenchimento"></span>
203
+ </button>
204
+ </div>
205
+ <div class="acoes" part="acoes">
206
+ <button type="button" class="acao acao--inverter" data-acao="inverter" part="acao acao-inverter" aria-label="Inverter preenchimento e traço">
207
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
208
+ <path d="m16 3 4 4-4 4"/><path d="M20 7H4"/><path d="m8 21-4-4 4-4"/><path d="M4 17h16"/>
209
+ </svg>
210
+ </button>
211
+ <button type="button" class="acao acao--sem-cor" data-acao="sem-cor" part="acao acao-sem-cor" aria-label="Sem cor">
212
+ <svg viewBox="0 0 24 24" fill="none" stroke-width="2.4" stroke-linecap="round" aria-hidden="true">
213
+ <circle cx="12" cy="12" r="8" stroke="currentColor"/>
214
+ <line x1="6.5" y1="6.5" x2="17.5" y2="17.5" stroke="#ef4444"/>
215
+ </svg>
216
+ </button>
217
+ <button type="button" class="acao acao--padrao" data-acao="padrao" part="acao acao-padrao" aria-label="Restaurar cores padrão">
218
+ <span class="icone-padrao" aria-hidden="true">
219
+ <span class="ponto ponto--preenchimento"></span>
220
+ <span class="ponto ponto--traco"></span>
221
+ </span>
222
+ </button>
223
+ </div>
224
+ </div>
225
+ `, this.renderizado = !0;
226
+ }
227
+ vincularEventos() {
228
+ const e = this.raiz;
229
+ e.querySelectorAll("[data-alvo]").forEach((o) => {
230
+ const r = o.dataset.alvo;
231
+ this.listeners.add(o, "click", (a) => {
232
+ a.stopPropagation(), r !== this._alvo ? this.mudarAlvo(r) : this.seletorAberto ? this.fecharSeletor(!0) : this.abrirSeletor(r);
233
+ }), this.listeners.add(o, "dblclick", (a) => {
234
+ a.stopPropagation(), this.abrirSeletor(r);
235
+ }), this.listeners.add(o, "keydown", (a) => {
236
+ a.key !== "Enter" && a.key !== " " || (a.preventDefault(), r === this._alvo && this.seletorAberto ? this.fecharSeletor(!0) : this.abrirSeletor(r, !0));
237
+ }), this.listeners.add(o, "keyup", (a) => {
238
+ a.key === " " && a.preventDefault();
239
+ });
240
+ });
241
+ const t = (o, r) => {
242
+ this.listeners.add(e.querySelector(`[data-acao="${o}"]`), "click", (a) => {
243
+ a.stopPropagation(), r();
244
+ });
245
+ };
246
+ t("inverter", () => this.inverter()), t("sem-cor", () => this.semCor()), t("padrao", () => this.restaurarPadrao());
247
+ }
248
+ atualizar() {
249
+ if (!this.renderizado) return;
250
+ const e = this.raiz, t = this._atalhos, o = this.hasAttribute("desabilitado"), r = (c, l) => l ? "Misto (?) [várias cores na seleção]" : c === "none" ? "Sem cor" : c, a = (c, l, h, g, C = "") => {
251
+ const s = e.querySelector(`[data-alvo="${c}"]`), u = s == null ? void 0 : s.querySelector(".face");
252
+ if (!s || !u) return;
253
+ const _ = this._alvo === c;
254
+ s.classList.toggle("amostra--ativa", _), s.setAttribute("aria-pressed", String(_)), s.disabled = o, u.classList.toggle("face--misto", h), u.classList.toggle("face--sem-cor", !h && l === "none");
255
+ const y = c === "traco" ? "borderColor" : "backgroundColor";
256
+ u.style[y] = h || l === "none" ? "" : l;
257
+ const x = `${g}: ${r(l, h)}${C}`;
258
+ s.title = this.dica(`${x} — clique para ativar, clique de novo para editar`, t.alternar), s.setAttribute("aria-label", x);
259
+ }, p = this._preenchimento === "none" || this._misto.preenchimento ? "" : `, opacidade ${Math.round(this._opacidade * 100)}%`;
260
+ a("preenchimento", this._preenchimento, this._misto.preenchimento, "Preenchimento", p), a("traco", this._traco, this._misto.traco, "Traço / contorno");
261
+ const m = (c, l) => {
262
+ const h = e.querySelector(`[data-acao="${c}"]`);
263
+ h && (h.title = l, h.disabled = o);
264
+ };
265
+ m("inverter", this.dica("Inverter preenchimento e traço", t.inverter)), m("sem-cor", this.dica("Sem cor no alvo ativo", t.semCor)), m("padrao", this.dica("Restaurar cores padrão", t.padrao));
266
+ const b = e.querySelector(".ponto--preenchimento");
267
+ b && (b.style.backgroundColor = this._padrao.preenchimento === "none" ? "transparent" : this._padrao.preenchimento);
268
+ const v = e.querySelector(".ponto--traco");
269
+ v && (v.style.borderColor = this._padrao.traco === "none" ? "#ef4444" : this._padrao.traco);
270
+ }
271
+ }
272
+ z("ui-controle-cores", E);
273
+ export {
274
+ E as U
275
+ };
@@ -0,0 +1,32 @@
1
+ "use strict";var k=Object.defineProperty;var S=(d,n,e)=>n in d?k(d,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):d[n]=e;var i=(d,n,e)=>S(d,typeof n!="symbol"?n+"":n,e);const x=require("./ssr-safe-CiHD1adl.cjs"),w=require("./listener-bag-D5omxZ9h.cjs"),u=require("./ui-seletor-cor-2yGryC_Z.cjs"),q=':host{--_a: var(--ui-controle-cores-amostra, 26px);--_pilha: calc(var(--_a) * 5 / 3);--_borda: color-mix(in srgb, var(--ui-cor-texto, #e1e1e6) 30%, transparent);--_borda-forte: color-mix(in srgb, var(--ui-cor-texto, #e1e1e6) 70%, transparent);--_base: var(--ui-cor-superficie, #1d1d22);--_destaque: var(--ui-cor-primaria, #00e08a);--_vermelho: #ef4444;display:inline-block;flex-shrink:0;-webkit-user-select:none;user-select:none}:host([hidden]){display:none}*,*:before,*:after{box-sizing:border-box}.pilha{display:flex;align-items:stretch;gap:6px}.amostras{position:relative;flex:none;width:var(--_pilha);height:var(--_pilha)}.amostra{position:absolute;width:var(--_a);height:var(--_a);padding:0;background:var(--_base);border:1px solid var(--_borda);border-radius:6px;cursor:pointer;transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease,opacity .15s ease}.amostra--traco{right:0;bottom:0;z-index:1}.amostra--preenchimento{top:0;left:0;z-index:2;box-shadow:0 2px 6px #00000059}.amostra:hover{border-color:var(--_borda-forte);transform:scale(1.05)}.amostra:focus-visible{outline:2px solid var(--ui-cor-texto, #e1e1e6);outline-offset:2px}.amostra--ativa,.amostra--ativa:hover{z-index:3;border-color:var(--_destaque);box-shadow:0 0 0 1.5px var(--_destaque),0 2px 6px #00000059}:host([so-traco]) .amostra--preenchimento{opacity:.4}.face{position:absolute;top:3px;right:3px;bottom:3px;left:3px;border-radius:3.5px;pointer-events:none}.face--traco{background:transparent;border:4px solid #ffffff}.face--sem-cor{background:repeating-conic-gradient(#3a3a45,#3a3a45 25%,#24242b 0%,#24242b 50%) 50% / 6px 6px!important;border-color:#ef44448c!important;overflow:hidden}.face--sem-cor:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(to top right,transparent calc(50% - 1px),var(--_vermelho) calc(50% - 1px),var(--_vermelho) calc(50% + 1px),transparent calc(50% + 1px))}.face--misto{display:flex;align-items:center;justify-content:center;background:#2e2e38!important;border-color:#64748b!important}.face--misto:after{content:"?";color:#fff;font-size:12px;font-weight:800;line-height:1;text-shadow:0 1px 2px rgba(0,0,0,.8)}.acoes{display:flex;flex:none;flex-direction:column;gap:2px;width:16px}.acao{display:flex;flex:1;align-items:center;justify-content:center;min-height:0;padding:0;background:transparent;border:0;border-radius:4px;color:var(--ui-cor-texto-secundario, #9696a6);cursor:pointer;transition:color .15s ease,background .15s ease}.acao:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent);color:var(--_destaque)}.acao:focus-visible{outline:2px solid var(--ui-cor-texto, #e1e1e6);outline-offset:1px}.acao svg{width:12px;height:12px}.acao--sem-cor:hover{background:#ef444433;color:var(--_vermelho)}.icone-padrao{position:relative;width:11px;height:11px}.ponto{position:absolute;width:7px;height:7px;border-radius:1.5px}.ponto--preenchimento{top:0;left:0;background:#00e08a;border:1px solid var(--_borda-forte)}.ponto--traco{right:0;bottom:0;background:var(--_base);border:1.5px solid #ffffff}:host([desabilitado]) .pilha{opacity:.5}:host([desabilitado]) .amostra,:host([desabilitado]) .acao{cursor:not-allowed;pointer-events:none}@media (prefers-reduced-motion: reduce){.amostra,.acao{transition:none}.amostra:hover{transform:none}}';class C extends x.SafeHTMLElement{constructor(){super();i(this,"raiz");i(this,"listeners",new w.ListenerBag);i(this,"renderizado",!1);i(this,"_preenchimento","#00e08a");i(this,"_traco","#ffffff");i(this,"_opacidade",.35);i(this,"_alvo","preenchimento");i(this,"_misto",{preenchimento:!1,traco:!1});i(this,"_padrao",{preenchimento:"#00e08a",traco:"#ffffff"});i(this,"_coresProjeto",[]);i(this,"_atalhos",{});i(this,"seletor",null);i(this,"estadoAoAbrir",null);this.raiz=this.attachShadow({mode:"open"})}static get observedAttributes(){return["preenchimento","traco","opacidade","alvo","padrao-preenchimento","padrao-traco","desabilitado"]}connectedCallback(){this.renderizado||this.renderizar(),this.listeners.cleanup(),this.vincularEventos(),this.atualizar()}disconnectedCallback(){this.fecharSeletor(!0),this.listeners.cleanup()}attributeChangedCallback(e,t,o){if(t!==o){if(e==="desabilitado"){this.hasAttribute("desabilitado")&&this.fecharSeletor(!1),this.atualizar();return}if(o!==null){if(e==="preenchimento")this.definirCores({preenchimento:o});else if(e==="traco")this.definirCores({traco:o});else if(e==="opacidade")this.definirCores({opacidade:Number(o)});else if(e==="alvo")this.definirAlvo(o);else if(e==="padrao-preenchimento"||e==="padrao-traco"){const r=u.normalizarCor(o);if(!r)return;e==="padrao-preenchimento"?this._padrao.preenchimento=r:this._padrao.traco=r,this.atualizar()}}}}get preenchimento(){return this._preenchimento}set preenchimento(e){this.definirCores({preenchimento:e})}get traco(){return this._traco}set traco(e){this.definirCores({traco:e})}get opacidade(){return this._opacidade}set opacidade(e){this.definirCores({opacidade:e})}get alvo(){return this._alvo}set alvo(e){this.definirAlvo(e)}get coresProjeto(){return[...this._coresProjeto]}set coresProjeto(e){this._coresProjeto=u.coresUnicas(e)}get atalhos(){return{...this._atalhos}}set atalhos(e){this._atalhos={...e||{}},this.atualizar()}get seletorAberto(){var e;return!!((e=this.seletor)!=null&&e.aberto)}definirCores(e={}){const t=u.normalizarCor(e.preenchimento),o=u.normalizarCor(e.traco);t&&(this._preenchimento=t,this._misto.preenchimento=!1),o&&(this._traco=o,this._misto.traco=!1),e.opacidade!==void 0&&(this._opacidade=u.normalizarOpacidade(e.opacidade,this._opacidade)),this.atualizar()}obterCores(){return{preenchimento:this._preenchimento,traco:this._traco,opacidade:this._opacidade,alvo:this._alvo}}definirAlvo(e){this._alvo=e==="traco"?"traco":"preenchimento",this.atualizar(),this.sincronizarSeletor()}definirMisto(e={}){this._misto={preenchimento:!!e.preenchimento,traco:!!e.traco},this.atualizar()}alternarAlvo(){this.mudarAlvo(this._alvo==="traco"?"preenchimento":"traco")}inverter(){const e=this._preenchimento;this._preenchimento=this._traco,this._traco=e,this._misto={preenchimento:this._misto.traco,traco:this._misto.preenchimento},this.atualizar(),this.emitirCores(!0,["preenchimento","traco"],"inverter")}semCor(e=this._alvo){const t=e==="traco"?"traco":"preenchimento";t==="traco"?this._traco="none":this._preenchimento="none",this._misto[t]=!1,this.atualizar(),this.emitirCores(!0,[t],"sem-cor")}restaurarPadrao(){this._preenchimento=this._padrao.preenchimento,this._traco=this._padrao.traco,this._misto={preenchimento:!1,traco:!1},this.atualizar(),this.emitirCores(!0,["preenchimento","traco"],"padrao")}abrirSeletor(e=this._alvo,t=!1){if(this.hasAttribute("desabilitado")||(this.mudarAlvo(e==="traco"?"traco":"preenchimento"),this.seletorAberto))return;const o=this.raiz.querySelector(`[data-alvo="${this._alvo}"]`)||this;this.estadoAoAbrir=this.obterCores(),this.seletor=u.abrirSeletorCor({ancora:o,titulo:this.getAttribute("titulo-seletor")||"Cores e estilo",modo:"duplo",alvo:this._alvo,preenchimento:this._preenchimento,traco:this._traco,opacidade:this._opacidade,misto:this._misto[this._alvo],coresProjeto:this._coresProjeto,focar:t,aoAlterar:r=>this.aplicarDoSeletor(r,!1),aoConfirmar:r=>{this.seletor=null,this.aplicarDoSeletor(r,!0)},aoCancelar:()=>{this.seletor=null,this.estadoAoAbrir=null},aoTrocarAlvo:r=>this.mudarAlvo(r)})}fecharSeletor(e=!0){const t=this.seletor;t&&(e?t.fechar(!0):t.elemento.cancelar())}mudarAlvo(e){e!==this._alvo&&(this._alvo=e,this.atualizar(),this.sincronizarSeletor(),this.dispatchEvent(new CustomEvent("ui-alvo-change",{detail:{alvo:e},bubbles:!0,composed:!0})))}sincronizarSeletor(){var e,t;(t=(e=this.seletor)==null?void 0:e.elemento)==null||t.trocarAlvo(this._alvo)}aplicarDoSeletor(e,t){const o=a=>{const p=[];return e.preenchimento!==a.preenchimento&&p.push("preenchimento"),e.traco!==a.traco&&p.push("traco"),e.opacidade!==a.opacidade&&p.push("opacidade"),p},r=o(this.obterCores());if(this._preenchimento=e.preenchimento,this._traco=e.traco,this._opacidade=e.opacidade,r.includes("preenchimento")&&(this._misto.preenchimento=!1),r.includes("traco")&&(this._misto.traco=!1),this.atualizar(),!t){r.length&&this.emitirCores(!1,r,"seletor");return}this.emitirCores(!0,this.estadoAoAbrir?o(this.estadoAoAbrir):r,"seletor"),this.estadoAoAbrir=null}emitirCores(e,t,o){const r={...this.obterCores(),confirmado:e,alterados:t,origem:o};this.dispatchEvent(new CustomEvent("ui-cores-change",{detail:r,bubbles:!0,composed:!0}))}dica(e,t){return t?`${e} [${t}]`:e}renderizar(){this.raiz.innerHTML=`
2
+ <style>${q}</style>
3
+ <div class="pilha" part="pilha" role="group" aria-label="Cores de desenho">
4
+ <div class="amostras" part="amostras">
5
+ <button type="button" class="amostra amostra--traco" data-alvo="traco" part="amostra amostra-traco">
6
+ <span class="face face--traco"></span>
7
+ </button>
8
+ <button type="button" class="amostra amostra--preenchimento" data-alvo="preenchimento" part="amostra amostra-preenchimento">
9
+ <span class="face face--preenchimento"></span>
10
+ </button>
11
+ </div>
12
+ <div class="acoes" part="acoes">
13
+ <button type="button" class="acao acao--inverter" data-acao="inverter" part="acao acao-inverter" aria-label="Inverter preenchimento e traço">
14
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
15
+ <path d="m16 3 4 4-4 4"/><path d="M20 7H4"/><path d="m8 21-4-4 4-4"/><path d="M4 17h16"/>
16
+ </svg>
17
+ </button>
18
+ <button type="button" class="acao acao--sem-cor" data-acao="sem-cor" part="acao acao-sem-cor" aria-label="Sem cor">
19
+ <svg viewBox="0 0 24 24" fill="none" stroke-width="2.4" stroke-linecap="round" aria-hidden="true">
20
+ <circle cx="12" cy="12" r="8" stroke="currentColor"/>
21
+ <line x1="6.5" y1="6.5" x2="17.5" y2="17.5" stroke="#ef4444"/>
22
+ </svg>
23
+ </button>
24
+ <button type="button" class="acao acao--padrao" data-acao="padrao" part="acao acao-padrao" aria-label="Restaurar cores padrão">
25
+ <span class="icone-padrao" aria-hidden="true">
26
+ <span class="ponto ponto--preenchimento"></span>
27
+ <span class="ponto ponto--traco"></span>
28
+ </span>
29
+ </button>
30
+ </div>
31
+ </div>
32
+ `,this.renderizado=!0}vincularEventos(){const e=this.raiz;e.querySelectorAll("[data-alvo]").forEach(o=>{const r=o.dataset.alvo;this.listeners.add(o,"click",a=>{a.stopPropagation(),r!==this._alvo?this.mudarAlvo(r):this.seletorAberto?this.fecharSeletor(!0):this.abrirSeletor(r)}),this.listeners.add(o,"dblclick",a=>{a.stopPropagation(),this.abrirSeletor(r)}),this.listeners.add(o,"keydown",a=>{a.key!=="Enter"&&a.key!==" "||(a.preventDefault(),r===this._alvo&&this.seletorAberto?this.fecharSeletor(!0):this.abrirSeletor(r,!0))}),this.listeners.add(o,"keyup",a=>{a.key===" "&&a.preventDefault()})});const t=(o,r)=>{this.listeners.add(e.querySelector(`[data-acao="${o}"]`),"click",a=>{a.stopPropagation(),r()})};t("inverter",()=>this.inverter()),t("sem-cor",()=>this.semCor()),t("padrao",()=>this.restaurarPadrao())}atualizar(){if(!this.renderizado)return;const e=this.raiz,t=this._atalhos,o=this.hasAttribute("desabilitado"),r=(c,l)=>l?"Misto (?) [várias cores na seleção]":c==="none"?"Sem cor":c,a=(c,l,h,y,z="")=>{const s=e.querySelector(`[data-alvo="${c}"]`),m=s==null?void 0:s.querySelector(".face");if(!s||!m)return;const _=this._alvo===c;s.classList.toggle("amostra--ativa",_),s.setAttribute("aria-pressed",String(_)),s.disabled=o,m.classList.toggle("face--misto",h),m.classList.toggle("face--sem-cor",!h&&l==="none");const A=c==="traco"?"borderColor":"backgroundColor";m.style[A]=h||l==="none"?"":l;const g=`${y}: ${r(l,h)}${z}`;s.title=this.dica(`${g} — clique para ativar, clique de novo para editar`,t.alternar),s.setAttribute("aria-label",g)},p=this._preenchimento==="none"||this._misto.preenchimento?"":`, opacidade ${Math.round(this._opacidade*100)}%`;a("preenchimento",this._preenchimento,this._misto.preenchimento,"Preenchimento",p),a("traco",this._traco,this._misto.traco,"Traço / contorno");const f=(c,l)=>{const h=e.querySelector(`[data-acao="${c}"]`);h&&(h.title=l,h.disabled=o)};f("inverter",this.dica("Inverter preenchimento e traço",t.inverter)),f("sem-cor",this.dica("Sem cor no alvo ativo",t.semCor)),f("padrao",this.dica("Restaurar cores padrão",t.padrao));const b=e.querySelector(".ponto--preenchimento");b&&(b.style.backgroundColor=this._padrao.preenchimento==="none"?"transparent":this._padrao.preenchimento);const v=e.querySelector(".ponto--traco");v&&(v.style.borderColor=this._padrao.traco==="none"?"#ef4444":this._padrao.traco)}}x.definirCustomElement("ui-controle-cores",C);exports.UIControleCores=C;