@thibezer/ui-components-kit 2.17.0 → 2.17.2

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 (127) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/camadas.cjs +85 -86
  3. package/dist/camadas.js +1380 -1331
  4. package/dist/components/ui-camadas/camadas-colecao.d.ts +3 -0
  5. package/dist/components/ui-camadas/camadas-drag-drop.d.ts +3 -1
  6. package/dist/components/ui-camadas/camadas-selecao-api.d.ts +1 -0
  7. package/dist/cores.cjs +1 -1
  8. package/dist/cores.js +2 -2
  9. package/dist/custom-elements.json +19922 -19922
  10. package/dist/index.cjs +1 -1
  11. package/dist/index.js +2 -2
  12. package/dist/register.cjs +1 -1
  13. package/dist/register.js +2 -2
  14. package/dist/{ui-controle-cores-Bq_XUrIQ.cjs → ui-controle-cores-B1w_Yl69.cjs} +1 -1
  15. package/dist/{ui-controle-cores-BtA6yzu3.js → ui-controle-cores-BRjMvmMn.js} +1 -1
  16. package/dist/ui-seletor-cor-CMuuW-Ym.cjs +83 -0
  17. package/dist/ui-seletor-cor-DFIQ1sin.js +405 -0
  18. package/package.json +1 -1
  19. package/dist/form-validacao-BIOXxt-1.js +0 -140
  20. package/dist/form-validacao-ytRYSF3E.cjs +0 -1
  21. package/dist/gerencigeo-canvas/layer_defaults.d.ts +0 -3
  22. package/dist/gerencigeo-canvas/layer_instance_ops.d.ts +0 -6
  23. package/dist/gerencigeo-canvas/layer_state_ops.d.ts +0 -6
  24. package/dist/leaflet-DcO7uRC-.cjs +0 -1
  25. package/dist/leaflet-PPDKB6Dd.js +0 -69
  26. package/dist/motor-BCWqlv3e.cjs +0 -1
  27. package/dist/motor-CXjQjVba.js +0 -1386
  28. package/dist/svg-seguro-BsbNQqpd.js +0 -50
  29. package/dist/svg-seguro-C76iLlAZ.cjs +0 -1
  30. package/dist/ui-badge-1UU8vT-b.js +0 -198
  31. package/dist/ui-badge-B5J_c5P5.js +0 -197
  32. package/dist/ui-badge-BxT-sDmV.cjs +0 -28
  33. package/dist/ui-badge-C0eKBI8E.js +0 -183
  34. package/dist/ui-badge-CKKKPdt8.cjs +0 -28
  35. package/dist/ui-badge-DC4y6Dik.cjs +0 -28
  36. package/dist/ui-botao-BOOnP8ds.cjs +0 -12
  37. package/dist/ui-botao-D24oXySA.cjs +0 -12
  38. package/dist/ui-botao-DfqSivHl.js +0 -165
  39. package/dist/ui-botao-Dsj08jjw.js +0 -165
  40. package/dist/ui-botao-OGJV6Vfk.js +0 -165
  41. package/dist/ui-botao-bU_bf6SU.js +0 -166
  42. package/dist/ui-botao-psS1juof.cjs +0 -12
  43. package/dist/ui-botao-xTbH5mpH.cjs +0 -12
  44. package/dist/ui-campo-texto-19tIrmBK.js +0 -377
  45. package/dist/ui-campo-texto-CH8mzX61.cjs +0 -16
  46. package/dist/ui-campo-texto-Cnn2UAkS.cjs +0 -16
  47. package/dist/ui-campo-texto-DVU_sWV1.cjs +0 -16
  48. package/dist/ui-campo-texto-Uu2dJE_0.js +0 -379
  49. package/dist/ui-campo-texto-W5M0gNE4.js +0 -377
  50. package/dist/ui-card-0wu4rjEX.cjs +0 -20
  51. package/dist/ui-card-B86lJXTP.cjs +0 -20
  52. package/dist/ui-card-BYyYxxY1.cjs +0 -20
  53. package/dist/ui-card-C_o5_0cB.js +0 -111
  54. package/dist/ui-card-CojoGXaT.js +0 -144
  55. package/dist/ui-card-DRtpOo3l.js +0 -143
  56. package/dist/ui-controle-cores-B4R6ct4I.js +0 -291
  57. package/dist/ui-controle-cores-BS0WYPdi.js +0 -572
  58. package/dist/ui-controle-cores-C8um-If9.cjs +0 -32
  59. package/dist/ui-controle-cores-CHMKGemo.cjs +0 -141
  60. package/dist/ui-controle-cores-C_cVXxCn.js +0 -291
  61. package/dist/ui-controle-cores-CuDFS8Y8.cjs +0 -32
  62. package/dist/ui-controle-cores-Dog7ERYv.js +0 -697
  63. package/dist/ui-controle-cores-Er6ZcQ7U.cjs +0 -111
  64. package/dist/ui-linha-BxhEBn27.js +0 -749
  65. package/dist/ui-linha-C306zxWG.cjs +0 -19
  66. package/dist/ui-linha-C_azWkcG.js +0 -517
  67. package/dist/ui-linha-CcalUBDw.cjs +0 -38
  68. package/dist/ui-linha-DAz6DBcl.cjs +0 -38
  69. package/dist/ui-linha-DkxwMhD-.js +0 -749
  70. package/dist/ui-modal-4nU-tXjO.cjs +0 -18
  71. package/dist/ui-modal-BkYvNP0G.js +0 -214
  72. package/dist/ui-modal-BwB9fksp.js +0 -214
  73. package/dist/ui-modal-CUNbpbZ1.cjs +0 -18
  74. package/dist/ui-modal-CvGFGh1h.cjs +0 -18
  75. package/dist/ui-modal-DBOtSTbR.js +0 -238
  76. package/dist/ui-paleta-ferramentas-BXXrI1Y7.js +0 -1233
  77. package/dist/ui-paleta-ferramentas-CEZYcN4J.js +0 -624
  78. package/dist/ui-paleta-ferramentas-CU4icLl0.js +0 -1171
  79. package/dist/ui-paleta-ferramentas-Ccmo-rB5.cjs +0 -21
  80. package/dist/ui-paleta-ferramentas-CsPMTY0G.cjs +0 -21
  81. package/dist/ui-paleta-ferramentas-DLwZHIDv.cjs +0 -21
  82. package/dist/ui-paleta-ferramentas-DNN5i6nL.js +0 -860
  83. package/dist/ui-paleta-ferramentas-Dbj1kBS9.cjs +0 -18
  84. package/dist/ui-paleta-ferramentas-DbwdWVtT.js +0 -1173
  85. package/dist/ui-paleta-ferramentas-bvqxj1Yd.cjs +0 -21
  86. package/dist/ui-segmented-D6b6zxVs.cjs +0 -19
  87. package/dist/ui-segmented-DyF5YLsV.js +0 -418
  88. package/dist/ui-segmented-rn9RxRGM.cjs +0 -19
  89. package/dist/ui-segmented-wUraId2e.js +0 -412
  90. package/dist/ui-seletor-cor-C4U2eqxY.cjs +0 -82
  91. package/dist/ui-seletor-cor-D2_C6Aor.js +0 -391
  92. package/dist/ui-seletor-cor-DPKqf5wb.cjs +0 -82
  93. package/dist/ui-seletor-cor-FYtRccnK.js +0 -396
  94. package/dist/ui-skeleton-B2Rgrv8o.js +0 -648
  95. package/dist/ui-skeleton-DEHwpDqa.js +0 -648
  96. package/dist/ui-skeleton-DI4_9WOX.js +0 -428
  97. package/dist/ui-skeleton-DiOxTBZK.cjs +0 -52
  98. package/dist/ui-skeleton-SPYqku8P.cjs +0 -52
  99. package/dist/ui-skeleton-W9uwIceA.js +0 -585
  100. package/dist/ui-skeleton-elhKIh2B.cjs +0 -33
  101. package/dist/ui-skeleton-sIphhOSx.cjs +0 -52
  102. package/dist/ui-switch-BL-x_-SM.js +0 -1202
  103. package/dist/ui-switch-BcOqOkiV.js +0 -856
  104. package/dist/ui-switch-C0i_3QXu.cjs +0 -66
  105. package/dist/ui-switch-D7iPKDj-.cjs +0 -53
  106. package/dist/ui-switch-DAIgOhqr.cjs +0 -66
  107. package/dist/ui-switch-_F8yubdX.js +0 -1203
  108. package/dist/ui-tabela-propriedades-2bq2nX-b.js +0 -3202
  109. package/dist/ui-tabela-propriedades-8IAYmk3P.cjs +0 -142
  110. package/dist/ui-tabela-propriedades-B8AwlpqL.cjs +0 -141
  111. package/dist/ui-tabela-propriedades-BBr5sqki.cjs +0 -145
  112. package/dist/ui-tabela-propriedades-BecPqC-e.cjs +0 -141
  113. package/dist/ui-tabela-propriedades-BoYXzP5Z.js +0 -3191
  114. package/dist/ui-tabela-propriedades-BokvDD3b.js +0 -2648
  115. package/dist/ui-tabela-propriedades-Boy7I5yW.js +0 -2412
  116. package/dist/ui-tabela-propriedades-C-PeuW1i.cjs +0 -141
  117. package/dist/ui-tabela-propriedades-C5YYnod1.js +0 -3053
  118. package/dist/ui-tabela-propriedades-CnfW9DZG.cjs +0 -142
  119. package/dist/ui-tabela-propriedades-CyPyKXtB.js +0 -3013
  120. package/dist/ui-tabela-propriedades-DWOKznMN.cjs +0 -142
  121. package/dist/ui-tabela-propriedades-Df9ajC6M.js +0 -2648
  122. package/dist/ui-tabela-propriedades-DqvPilK_.cjs +0 -142
  123. package/dist/ui-tabela-propriedades-DuaC4sFX.js +0 -2767
  124. package/dist/ui-toast-Bp_NlM5G.js +0 -156
  125. package/dist/ui-toast-DGTZKne5.cjs +0 -20
  126. package/dist/zero-js-triggers-C_KrvFOQ.js +0 -244
  127. package/dist/zero-js-triggers-C_gtaojZ.cjs +0 -1
@@ -1,697 +0,0 @@
1
- var L = Object.defineProperty;
2
- var O = (n, o, e) => o in n ? L(n, o, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[o] = e;
3
- var c = (n, o, e) => O(n, typeof o != "symbol" ? o + "" : o, e);
4
- import { d as M, S as j } from "./ssr-safe-5cWfJP-s.js";
5
- import { L as q } from "./listener-bag-DQgv7OON.js";
6
- const P = [
7
- "#00e08a",
8
- "#38bdf8",
9
- "#3b82f6",
10
- "#6366f1",
11
- "#a855f7",
12
- "#ec4899",
13
- "#ef4444",
14
- "#f97316",
15
- "#eab308",
16
- "#84cc16",
17
- "#14b8a6",
18
- "#ffffff",
19
- "#94a3b8",
20
- "#0f172a"
21
- ];
22
- function w(n) {
23
- if (typeof n != "string") return null;
24
- const o = n.trim().toLowerCase();
25
- if (o === "none" || o === "transparent") return "none";
26
- if (/^#[0-9a-f]{6}$/.test(o)) return o;
27
- const e = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(o);
28
- return e ? `#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}` : null;
29
- }
30
- function A(n, o = 0.35) {
31
- const e = typeof n == "string" ? parseFloat(n) : Number(n);
32
- return Number.isFinite(e) ? Math.max(0, Math.min(1, e)) : o;
33
- }
34
- function E(n, o = 2.5) {
35
- const e = typeof n == "string" ? parseFloat(n) : Number(n);
36
- if (!Number.isFinite(e)) return o;
37
- const a = Math.round(e * 10) / 10;
38
- return Math.max(0.5, Math.min(50, a));
39
- }
40
- function $(n) {
41
- if (!Array.isArray(n)) return [];
42
- const o = /* @__PURE__ */ new Set();
43
- for (const e of n) {
44
- const a = w(e);
45
- a && a !== "none" && o.add(a);
46
- }
47
- return [...o];
48
- }
49
- function N(n) {
50
- return String(n ?? "").replace(/[&<>"']/g, (o) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[o]);
51
- }
52
- const D = ':host{--_t: var(--ui-cor-texto, #e1e1e6);--_t2: var(--ui-cor-texto-secundario, #9696a6);--_linha: var(--ui-cor-borda, rgba(255, 255, 255, .12));--_realce: color-mix(in srgb, var(--_t) 8%, transparent);--_realce-forte: color-mix(in srgb, var(--_t) 16%, transparent);--_campo: color-mix(in srgb, var(--ui-cor-fundo, #0b0b0d) 70%, transparent);--_destaque: var(--ui-cor-primaria, #00e08a);--_sobre-destaque: var(--ui-cor-texto-sobre-primaria, #000000);--_vermelho: #ef4444;position:fixed;top:0;left:0;z-index:var(--ui-seletor-cor-z, 10000);display:block;width:268px;max-height:calc(100vh - 20px);overflow-y:auto;box-sizing:border-box;padding:13px;background:var(--ui-seletor-cor-fundo, color-mix(in srgb, var(--ui-cor-fundo-menu, #16161a) 96%, transparent));backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border:1px solid var(--_linha);border-radius:12px;box-shadow:var(--ui-sombra-lg, 0 20px 48px -4px rgba(0, 0, 0, .7)),0 0 0 1px #ffffff0d,inset 0 1px #ffffff14;color:var(--_t);font-family:var(--ui-fonte-base, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);font-size:12px;-webkit-user-select:none;user-select:none;animation:ui-seletor-cor-entrada .18s cubic-bezier(.16,1,.3,1)}:host([hidden]){display:none}:host([inline]),:host([embutido]){position:relative;top:auto;left:auto;z-index:auto;animation:none;box-shadow:var(--ui-sombra-md, 0 8px 24px rgba(0, 0, 0, .45))}:host(:focus){outline:none}*,*:before,*:after{box-sizing:border-box}@keyframes ui-seletor-cor-entrada{0%{opacity:0;transform:scale(.96) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}button{font-family:inherit}.cabecalho{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--_linha)}.titulo{display:flex;align-items:center;gap:7px;font-weight:600;font-size:12.5px;color:var(--_t);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:.15px}.titulo svg{flex-shrink:0;color:var(--_destaque)}.fechar{display:flex;align-items:center;justify-content:center;width:22px;height:22px;flex-shrink:0;padding:0;background:transparent;border:none;border-radius:5px;color:var(--_t2);font-size:13px;cursor:pointer;transition:all .15s ease}.fechar:hover{background:var(--_realce-forte);color:var(--_t)}.abas{display:flex;gap:3px;margin-bottom:11px;padding:3px;background:var(--_campo);border:1px solid var(--_linha);border-radius:8px}.aba{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:5px 8px;background:transparent;border:none;border-radius:6px;color:var(--_t2);font-size:11px;font-weight:600;cursor:pointer;transition:all .15s ease}.aba:hover{background:var(--_realce);color:var(--_t)}.aba[aria-selected=true]{background:var(--_realce-forte);color:var(--_t);box-shadow:0 1px 3px #00000059}.aba-amostra{width:12px;height:12px;border:1px solid var(--_linha);border-radius:3px;flex-shrink:0}.aba-amostra--sem-cor{background:linear-gradient(to top right,transparent calc(50% - 1px),var(--_vermelho) calc(50% - 1px),var(--_vermelho) calc(50% + 1px),transparent calc(50% + 1px)),var(--_realce-forte)}.aba-amostra--traco{border:2.5px solid #ffffff;background:transparent}.previa{display:flex;height:42px;margin-bottom:11px;overflow:hidden;background:var(--_campo);border:1px solid var(--_linha);border-radius:8px;box-shadow:inset 0 1px 3px #0000004d}.previa-metade{flex:1;position:relative;display:flex;align-items:center;justify-content:center;background-image:linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.05) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.05) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.05) 75%);background-size:10px 10px;background-position:0 0,0 5px,5px -5px,-5px 0;overflow:hidden}.previa-metade+.previa-metade{border-left:1px solid var(--_linha)}.previa-cor{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;transition:background-color .12s ease}.previa-cor--sem-cor{background:transparent!important}.previa-cor--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));opacity:.85}.previa-linha-traco{width:78%;height:var(--traco-px, 2.5px);min-height:1px;max-height:22px;background-color:var(--traco-cor, #ffffff);border-radius:999px;box-shadow:0 1px 3px #0006;transition:height .12s ease,background-color .12s ease}.previa-linha-traco--sem-cor{background:repeating-linear-gradient(90deg,var(--_vermelho) 0,var(--_vermelho) 4px,transparent 4px,transparent 8px);height:2px!important;opacity:.9}.previa-metade span.previa-badge{position:absolute;bottom:4px;z-index:3;padding:1px 5px;background:#000000b8;border:1px solid rgba(255,255,255,.1);border-radius:4px;font-size:9px;font-weight:700;letter-spacing:.4px;color:#ffffffe6;pointer-events:none}.linha-hex{display:flex;align-items:center;gap:8px;margin-bottom:11px}.hex{flex:1;position:relative;display:flex;align-items:center}.hex-prefixo{position:absolute;left:9px;color:var(--_t2);font-weight:600;font-size:11px;pointer-events:none}.hex input{width:100%;height:30px;padding:0 8px 0 21px;background:var(--_campo);border:1px solid var(--_linha);border-radius:6px;outline:none;color:var(--_t);font-family:var(--ui-fonte-codigo, ui-monospace, "Cascadia Mono", Consolas, monospace);font-size:12px;letter-spacing:.5px;text-transform:uppercase;-webkit-user-select:text;user-select:text;transition:border-color .15s ease,box-shadow .15s ease}.hex input::placeholder{color:var(--_t2);opacity:.7}.hex input:hover{border-color:color-mix(in srgb,var(--_t) 35%,transparent)}.hex input:focus{border-color:var(--_destaque);box-shadow:0 0 0 2px color-mix(in srgb,var(--_destaque) 25%,transparent)}.nativo{position:relative;display:flex;align-items:center;justify-content:center;width:30px;height:30px;flex-shrink:0;overflow:hidden;background:var(--_realce);border:1px solid var(--_linha);border-radius:6px;color:var(--_t2);cursor:pointer;transition:border-color .15s ease,color .15s ease,transform .1s ease}.nativo:hover,.nativo:focus-within{border-color:color-mix(in srgb,var(--_t) 45%,transparent);color:var(--_t);transform:scale(1.04)}.nativo input{position:absolute;top:-8px;right:-8px;bottom:-8px;left:-8px;width:150%;height:150%;opacity:0;cursor:pointer}.espessura{margin-bottom:11px;padding:9px;background:var(--_campo);border:1px solid var(--_linha);border-radius:8px;animation:ui-seletor-cor-entrada .15s ease}.espessura[hidden]{display:none}.espessura-cabecalho{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px;color:var(--_t2);font-size:11px}.espessura-titulo{display:flex;align-items:center;gap:5px;font-weight:500;color:var(--_t)}.espessura-titulo svg{color:var(--_destaque);flex-shrink:0}.espessura-valor{font-weight:700;font-variant-numeric:tabular-nums;color:var(--_destaque)}.espessura input[type=range],.opacidade input[type=range]{width:100%;height:14px;margin:0;background:transparent;outline:none;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}.espessura input[type=range]::-webkit-slider-runnable-track{height:6px;background:linear-gradient(to right,var(--_destaque) var(--pct-espessura, 0%),var(--_realce-forte) var(--pct-espessura, 0%));border-radius:3px}.espessura input[type=range]::-moz-range-track{height:6px;background:var(--_realce-forte);border-radius:3px}.espessura input[type=range]::-moz-range-progress{height:6px;background:var(--_destaque);border-radius:3px}.espessura input[type=range]::-webkit-slider-thumb,.opacidade input[type=range]::-webkit-slider-thumb{width:14px;height:14px;margin-top:-4px;background:#fff;border:2px solid var(--_destaque);border-radius:50%;box-shadow:0 1px 4px #00000080;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:transform .1s ease}.espessura input[type=range]::-webkit-slider-thumb:hover,.opacidade input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.15)}.espessura input[type=range]::-moz-range-thumb,.opacidade input[type=range]::-moz-range-thumb{width:12px;height:12px;background:#fff;border:2px solid var(--_destaque);border-radius:50%;box-shadow:0 1px 4px #00000080;cursor:pointer}.espessura-atalhos,.opacidade-atalhos{display:flex;gap:4px;margin-top:8px}.espessura-atalhos button,.opacidade-atalhos button{flex:1;padding:3px 0;background:var(--_realce);border:1px solid var(--_linha);border-radius:5px;color:var(--_t2);font-size:10px;font-weight:500;text-align:center;cursor:pointer;transition:all .12s ease}.espessura-atalhos button:hover,.opacidade-atalhos button:hover{background:var(--_realce-forte);color:var(--_t)}.espessura-atalhos button.ativo,.opacidade-atalhos button.ativo{background:var(--_destaque);border-color:var(--_destaque);color:var(--_sobre-destaque);font-weight:700}.opacidade{margin-bottom:11px;padding:9px;background:var(--_campo);border:1px solid var(--_linha);border-radius:8px;animation:ui-seletor-cor-entrada .15s ease}.opacidade[hidden]{display:none}.opacidade-cabecalho{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px;color:var(--_t2);font-size:11px}.opacidade-valor{font-weight:700;font-variant-numeric:tabular-nums;color:var(--_destaque)}.opacidade input[type=range]::-webkit-slider-runnable-track{height:6px;background:linear-gradient(to right,var(--_destaque) var(--pct, 0%),var(--_realce-forte) var(--pct, 0%));border-radius:3px}.opacidade input[type=range]::-moz-range-track{height:6px;background:var(--_realce-forte);border-radius:3px}.opacidade input[type=range]::-moz-range-progress{height:6px;background:var(--_destaque);border-radius:3px}.rotulo-secao{margin:10px 0 6px;color:var(--_t2);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.6px}.amostras{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-bottom:8px}.amostra{position:relative;aspect-ratio:1;padding:0;border:1px solid color-mix(in srgb,var(--_t) 20%,transparent);border-radius:5px;cursor:pointer;transition:transform .12s cubic-bezier(.16,1,.3,1),border-color .12s ease,box-shadow .12s ease}.amostra:hover{z-index:2;border-color:#fff;transform:scale(1.15);box-shadow:0 2px 6px #0006}.amostra.ativo{z-index:1;border:2px solid #ffffff;box-shadow:0 0 0 2px var(--_destaque),0 2px 6px #00000080}.sem-cor{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;margin-top:8px;padding:7px 10px;background:color-mix(in srgb,var(--_vermelho) 10%,transparent);border:1px solid rgba(239,68,68,.32);border-radius:7px;color:var(--ui-cor-texto-erro, #fca5a5);font-size:11.5px;font-weight:600;cursor:pointer;transition:all .15s ease}.sem-cor svg{flex-shrink:0}.sem-cor:hover{background:color-mix(in srgb,var(--_vermelho) 22%,transparent);border-color:var(--_vermelho);color:#fff}.sem-cor.ativo{background:var(--_vermelho);border-color:var(--_vermelho);color:#fff;box-shadow:0 0 0 2px color-mix(in srgb,var(--_vermelho) 40%,transparent)}.rodape{display:flex;justify-content:flex-end;gap:6px;margin-top:11px;padding-top:9px;border-top:1px solid var(--_linha)}.rodape button{padding:6px 14px;border:none;border-radius:6px;font-size:11.5px;font-weight:600;cursor:pointer;transition:all .15s ease}.botao-concluir{background:var(--_destaque);color:var(--_sobre-destaque);box-shadow:0 1px 3px #0000004d}.botao-concluir:hover{filter:brightness(1.1);transform:translateY(-.5px)}.botao-concluir:active{transform:translateY(0)}.botao-cancelar{background:var(--_realce);color:var(--_t2)}.botao-cancelar:hover{background:var(--_realce-forte);color:var(--_t)}button:focus-visible,input:focus-visible,.nativo:focus-within{outline:2px solid var(--_destaque);outline-offset:1px}.hex input:focus-visible{outline:none}@media (prefers-reduced-motion: reduce){:host{animation:none}.amostra,.amostra:hover,.espessura,.opacidade{transition:none;transform:none;animation:none}}', V = [0.25, 0.35, 0.5, 0.75, 1], B = [1, 2, 2.5, 4, 6, 8];
53
- class H extends j {
54
- constructor() {
55
- super();
56
- c(this, "raiz");
57
- c(this, "listeners", new q());
58
- c(this, "_titulo", "Cores & Estilo CAD");
59
- c(this, "_duplo", !0);
60
- c(this, "_alvo", "preenchimento");
61
- c(this, "_preenchimento", "#00e08a");
62
- c(this, "_traco", "#ffffff");
63
- c(this, "_opacidade", 0.35);
64
- c(this, "_mostrarOpacidade");
65
- c(this, "_espessura", 2.5);
66
- c(this, "_mostrarEspessura");
67
- c(this, "_misto", !1);
68
- c(this, "_coresProjeto", []);
69
- c(this, "_paleta", [...P]);
70
- c(this, "inicial", {
71
- preenchimento: "#00e08a",
72
- traco: "#ffffff",
73
- opacidade: 0.35,
74
- espessuraTraco: 2.5
75
- });
76
- this.raiz = this.attachShadow({ mode: "open" });
77
- }
78
- connectedCallback() {
79
- this.hasAttribute("role") || this.setAttribute("role", "dialog"), this.hasAttribute("tabindex") || this.setAttribute("tabindex", "-1"), this.renderizar();
80
- }
81
- disconnectedCallback() {
82
- this.listeners.cleanup();
83
- }
84
- /* ---------- API pública ---------- */
85
- /** Define o estado inicial (também usado pelo "Cancelar" para restaurar). */
86
- configurar(e = {}) {
87
- this._titulo = e.titulo || "Cores & Estilo CAD";
88
- const a = e.preenchimento !== void 0 && e.traco !== void 0;
89
- this._duplo = e.modo ? e.modo === "duplo" : a, this._alvo = e.alvo === "traco" ? "traco" : "preenchimento";
90
- const t = w(e.cor);
91
- this._preenchimento = w(e.preenchimento) ?? (this._alvo === "preenchimento" ? t : null) ?? "#00e08a", this._traco = w(e.traco) ?? (this._alvo === "traco" ? t : null) ?? "#ffffff", this._opacidade = A(e.opacidade), this._mostrarOpacidade = e.mostrarOpacidade, this._espessura = E(e.espessuraTraco, 2.5), this._mostrarEspessura = e.mostrarEspessura, this._misto = e.misto === !0, this._coresProjeto = $(e.coresProjeto), this._paleta = e.paleta ? $(e.paleta) : [...P], this.inicial = {
92
- preenchimento: this._preenchimento,
93
- traco: this._traco,
94
- opacidade: this._opacidade,
95
- espessuraTraco: this._espessura
96
- }, this.isConnected && this.renderizar();
97
- }
98
- get alvo() {
99
- return this._alvo;
100
- }
101
- /** Cor do alvo em edição. */
102
- get cor() {
103
- return this._alvo === "traco" ? this._traco : this._preenchimento;
104
- }
105
- get opacidade() {
106
- return this._opacidade;
107
- }
108
- get espessura() {
109
- return this._espessura;
110
- }
111
- obterEstado() {
112
- return {
113
- alvo: this._alvo,
114
- cor: this.cor,
115
- preenchimento: this._preenchimento,
116
- traco: this._traco,
117
- opacidade: this._opacidade,
118
- espessuraTraco: this._espessura
119
- };
120
- }
121
- /** Alterna entre Preenchimento e Traço (só no modo duplo). */
122
- trocarAlvo(e) {
123
- const a = e === "traco" ? "traco" : "preenchimento";
124
- !this._duplo || a === this._alvo || (this._alvo = a, this.atualizarVisual(), this.emitir("ui-alvo-change", { alvo: a }));
125
- }
126
- /** Aplica uma cor ao alvo em edição e emite `ui-cor-input`. Cores inválidas são ignoradas. */
127
- definirCor(e) {
128
- const a = w(e);
129
- a && (this._alvo === "traco" ? this._traco = a : this._preenchimento = a, this._misto = !1, this.atualizarVisual(), this.emitir("ui-cor-input", this.obterEstado()));
130
- }
131
- /** Opacidade do preenchimento (0 a 1); emite `ui-cor-input`. */
132
- definirOpacidade(e) {
133
- this._opacidade = A(e, this._opacidade), this.atualizarVisual(), this.emitir("ui-cor-input", this.obterEstado());
134
- }
135
- /** Espessura do traço em pixels (0.5 a 50); emite `ui-cor-input`. */
136
- definirEspessura(e) {
137
- this._espessura = E(e, this._espessura), this.atualizarVisual(), this.emitir("ui-cor-input", this.obterEstado());
138
- }
139
- confirmar() {
140
- this.emitir("ui-cor-confirmar", this.obterEstado());
141
- }
142
- /** Restaura os valores iniciais (emitindo `ui-cor-input`) e emite `ui-cor-cancelar`. */
143
- cancelar() {
144
- this._preenchimento = this.inicial.preenchimento, this._traco = this.inicial.traco, this._opacidade = this.inicial.opacidade, this._espessura = this.inicial.espessuraTraco, this.atualizarVisual(), this.emitir("ui-cor-input", this.obterEstado()), this.emitir("ui-cor-cancelar", this.obterEstado());
145
- }
146
- /* ---------- Renderização ---------- */
147
- get opacidadeVisivel() {
148
- return this._mostrarOpacidade ?? this._alvo === "preenchimento";
149
- }
150
- get espessuraVisivel() {
151
- return this._mostrarEspessura ?? this._alvo === "traco";
152
- }
153
- renderizar() {
154
- this.listeners.cleanup(), this.setAttribute("aria-label", this._titulo);
155
- const e = (a) => a.map((t) => `
156
- <button type="button" class="amostra" data-cor="${t}" style="background-color: ${t};" title="${t.toUpperCase()}" aria-label="Cor ${t.toUpperCase()}" aria-pressed="false"></button>
157
- `).join("");
158
- this.raiz.innerHTML = `
159
- <style>${D}</style>
160
- <div class="cabecalho">
161
- <span class="titulo">
162
- <svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
163
- <path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"/>
164
- </svg>
165
- <span>${N(this._titulo)}</span>
166
- </span>
167
- <button type="button" class="fechar" data-acao="fechar" title="Fechar (Esc)" aria-label="Fechar">✕</button>
168
- </div>
169
-
170
- ${this._duplo ? `
171
- <div class="abas" role="tablist" aria-label="Alvo da cor">
172
- <button type="button" class="aba" role="tab" data-alvo="preenchimento" title="Preenchimento">
173
- <span class="aba-amostra aba-amostra--preenchimento"></span>
174
- Preenchimento
175
- </button>
176
- <button type="button" class="aba" role="tab" data-alvo="traco" title="Traço / contorno">
177
- <span class="aba-amostra aba-amostra--traco"></span>
178
- Traço
179
- </button>
180
- </div>
181
- ` : ""}
182
-
183
- <div class="previa" aria-label="Comparativo de cor antes e depois">
184
- <div class="previa-metade" title="Cor original">
185
- <div class="previa-cor previa-cor--original">
186
- <div class="previa-linha-traco previa-linha-traco--original"></div>
187
- </div>
188
- <span class="previa-badge">ORIGINAL</span>
189
- </div>
190
- <div class="previa-metade" title="Nova cor">
191
- <div class="previa-cor previa-cor--nova">
192
- <div class="previa-linha-traco previa-linha-traco--nova"></div>
193
- </div>
194
- <span class="previa-badge previa-rotulo-nova">NOVA</span>
195
- </div>
196
- </div>
197
-
198
- <div class="linha-hex">
199
- <label class="hex">
200
- <span class="hex-prefixo">#</span>
201
- <input type="text" class="hex-entrada" maxlength="7" spellcheck="false" autocomplete="off" aria-label="Cor em hexadecimal" />
202
- </label>
203
- <label class="nativo" title="Abrir o seletor de cor do sistema">
204
- <svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
205
- <circle cx="12" cy="12" r="10"/>
206
- <path d="M12 2a10 10 0 0 1 10 10"/>
207
- </svg>
208
- <input type="color" class="nativo-entrada" aria-label="Seletor de cor do sistema" />
209
- </label>
210
- </div>
211
-
212
- <!-- Seção de Espessura do Traçado (CAD) -->
213
- <div class="espessura">
214
- <div class="espessura-cabecalho">
215
- <span class="espessura-titulo">
216
- <svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
217
- <line x1="3" y1="12" x2="21" y2="12" stroke-width="3" />
218
- <line x1="3" y1="6" x2="21" y2="6" stroke-width="1.5" />
219
- <line x1="3" y1="18" x2="21" y2="18" stroke-width="4.5" />
220
- </svg>
221
- <span>Espessura do traçado</span>
222
- </span>
223
- <span class="espessura-valor"></span>
224
- </div>
225
- <input type="range" class="espessura-entrada" min="0.5" max="15" step="0.5" aria-label="Espessura do traçado em pixels" />
226
- <div class="espessura-atalhos">
227
- ${B.map((a) => `<button type="button" data-espessura="${a}">${a}px</button>`).join("")}
228
- </div>
229
- </div>
230
-
231
- <!-- Seção de Opacidade do Preenchimento -->
232
- <div class="opacidade">
233
- <div class="opacidade-cabecalho">
234
- <span>Opacidade do preenchimento</span>
235
- <span class="opacidade-valor"></span>
236
- </div>
237
- <input type="range" class="opacidade-entrada" min="0" max="100" step="1" aria-label="Opacidade do preenchimento" />
238
- <div class="opacidade-atalhos">
239
- ${V.map((a) => `<button type="button" data-opacidade="${a}">${Math.round(a * 100)}%</button>`).join("")}
240
- </div>
241
- </div>
242
-
243
- ${this._coresProjeto.length ? `
244
- <div class="rotulo-secao">Cores do projeto</div>
245
- <div class="amostras">${e(this._coresProjeto)}</div>
246
- ` : ""}
247
-
248
- ${this._paleta.length ? `
249
- <div class="rotulo-secao">Paleta padrão</div>
250
- <div class="amostras">${e(this._paleta)}</div>
251
- ` : ""}
252
-
253
- <button type="button" class="sem-cor" data-cor="none" aria-pressed="false" title="Sem cor (vazado / transparente)">
254
- <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true">
255
- <circle cx="12" cy="12" r="9"/>
256
- <line x1="5.5" y1="5.5" x2="18.5" y2="18.5"/>
257
- </svg>
258
- Sem cor (vazado / transparente)
259
- </button>
260
-
261
- <div class="rodape">
262
- <button type="button" class="botao-cancelar" data-acao="cancelar">Cancelar</button>
263
- <button type="button" class="botao-concluir" data-acao="concluir">Concluir</button>
264
- </div>
265
- `, this.vincularEventos(), this.atualizarVisual();
266
- }
267
- atualizarVisual() {
268
- const e = (f) => this.raiz.querySelector(f), a = this.cor, t = a === "none", i = this._alvo === "traco";
269
- this.raiz.querySelectorAll("[data-alvo]").forEach((f) => {
270
- f.setAttribute("aria-selected", String(f.dataset.alvo === this._alvo));
271
- });
272
- const s = e(".aba-amostra--preenchimento");
273
- s && (s.classList.toggle("aba-amostra--sem-cor", this._preenchimento === "none"), s.style.backgroundColor = this._preenchimento === "none" ? "" : this._preenchimento);
274
- const l = e(".aba-amostra--traco");
275
- l && (l.style.borderColor = this._traco === "none" ? "#ef4444" : this._traco, l.style.borderWidth = `${Math.max(1.5, Math.min(3.5, this._espessura))}px`);
276
- const p = e(".opacidade");
277
- p && (p.hidden = !this.opacidadeVisivel);
278
- const u = e(".espessura");
279
- u && (u.hidden = !this.espessuraVisivel);
280
- const g = i ? this.inicial.traco : this.inicial.preenchimento, v = g === "none", d = e(".previa-cor--original"), r = e(".previa-cor--nova"), h = e(".previa-linha-traco--original"), m = e(".previa-linha-traco--nova");
281
- i ? (d && (d.style.backgroundColor = "transparent", d.classList.remove("previa-cor--sem-cor")), r && (r.style.backgroundColor = "transparent", r.classList.remove("previa-cor--sem-cor")), h && (h.style.display = "block", h.classList.toggle("previa-linha-traco--sem-cor", v), h.style.setProperty("--traco-px", `${Math.max(1, this.inicial.espessuraTraco)}px`), h.style.setProperty("--traco-cor", v ? "" : g)), m && (m.style.display = "block", m.classList.toggle("previa-linha-traco--sem-cor", t), m.style.setProperty("--traco-px", `${Math.max(1, this._espessura)}px`), m.style.setProperty("--traco-cor", t ? "" : a))) : (h && (h.style.display = "none"), m && (m.style.display = "none"), d && (d.classList.toggle("previa-cor--sem-cor", v), d.style.backgroundColor = v ? "" : g, d.style.opacity = v ? "" : String(this.inicial.opacidade)), r && (r.classList.toggle("previa-cor--sem-cor", t), r.style.backgroundColor = t ? "" : a, r.style.opacity = t ? "" : String(this._opacidade)));
282
- const z = e(".previa-rotulo-nova");
283
- z && (z.textContent = this._misto ? "MISTO (?)" : "NOVA");
284
- const b = e(".hex-entrada");
285
- b && !this.campoEmFoco(b) && (b.value = t ? "" : a.slice(1).toUpperCase(), b.placeholder = t ? "NENHUM" : "00E08A");
286
- const k = e(".nativo-entrada");
287
- if (k && (k.value = t ? "#00e08a" : a), this.espessuraVisivel) {
288
- const f = e(".espessura-entrada"), x = Math.round((this._espessura - 0.5) / (15 - 0.5) * 100);
289
- f && (f.value = String(this._espessura), f.style.setProperty("--pct-espessura", `${Math.max(0, Math.min(100, x))}%`), f.setAttribute("aria-valuetext", `${this._espessura}px`));
290
- const C = e(".espessura-valor");
291
- C && (C.textContent = `${this._espessura} px`), this.raiz.querySelectorAll("[data-espessura]").forEach((S) => {
292
- S.classList.toggle("ativo", Math.abs(Number(S.dataset.espessura) - this._espessura) < 0.1);
293
- });
294
- }
295
- if (this.opacidadeVisivel) {
296
- const f = Math.round(this._opacidade * 100), x = e(".opacidade-entrada");
297
- x && (x.value = String(f), x.style.setProperty("--pct", `${f}%`), x.setAttribute("aria-valuetext", `${f}%`));
298
- const C = e(".opacidade-valor");
299
- C && (C.textContent = `${f}%`), this.raiz.querySelectorAll("[data-opacidade]").forEach((S) => {
300
- S.classList.toggle("ativo", Math.abs(Number(S.dataset.opacidade) - this._opacidade) < 0.02);
301
- });
302
- }
303
- this.raiz.querySelectorAll(".amostra").forEach((f) => {
304
- const x = f.dataset.cor === a;
305
- f.classList.toggle("ativo", x), f.setAttribute("aria-pressed", String(x));
306
- });
307
- const _ = e(".sem-cor");
308
- _ == null || _.classList.toggle("ativo", t), _ == null || _.setAttribute("aria-pressed", String(t));
309
- }
310
- /** `activeElement` lança em alguns DOMs simulados quando o foco está em outra árvore de sombra. */
311
- campoEmFoco(e) {
312
- try {
313
- return this.raiz.activeElement === e;
314
- } catch {
315
- return !1;
316
- }
317
- }
318
- vincularEventos() {
319
- const e = this.raiz;
320
- e.querySelectorAll("[data-alvo]").forEach((p) => {
321
- this.listeners.add(p, "click", () => this.trocarAlvo(p.dataset.alvo));
322
- }), e.querySelectorAll("[data-cor]").forEach((p) => {
323
- this.listeners.add(p, "click", () => this.definirCor(p.dataset.cor || ""));
324
- }), e.querySelectorAll("[data-espessura]").forEach((p) => {
325
- this.listeners.add(p, "click", () => this.definirEspessura(Number(p.dataset.espessura)));
326
- });
327
- const a = e.querySelector(".espessura-entrada");
328
- a && this.listeners.add(a, "input", () => this.definirEspessura(Number(a.value))), e.querySelectorAll("[data-opacidade]").forEach((p) => {
329
- this.listeners.add(p, "click", () => this.definirOpacidade(Number(p.dataset.opacidade)));
330
- });
331
- const t = e.querySelector(".opacidade-entrada");
332
- t && this.listeners.add(t, "input", () => this.definirOpacidade(Number(t.value) / 100));
333
- const i = e.querySelector(".hex-entrada"), s = (p) => {
334
- const u = i.value.trim().replace(/^#/, "");
335
- (/^[0-9a-f]{6}$/i.test(u) || p && /^[0-9a-f]{3}$/i.test(u)) && this.definirCor(`#${u}`);
336
- };
337
- i && (this.listeners.add(i, "input", () => s(!1)), this.listeners.add(i, "change", () => {
338
- s(!0), this.atualizarVisual();
339
- }), this.listeners.add(i, "keydown", (p) => {
340
- p.key === "Enter" && (p.preventDefault(), s(!0), this.confirmar());
341
- }));
342
- const l = e.querySelector(".nativo-entrada");
343
- l && this.listeners.add(l, "input", () => this.definirCor(l.value)), this.listeners.add(e.querySelector('[data-acao="fechar"]'), "click", () => this.confirmar()), this.listeners.add(e.querySelector('[data-acao="concluir"]'), "click", () => this.confirmar()), this.listeners.add(e.querySelector('[data-acao="cancelar"]'), "click", () => this.cancelar());
344
- }
345
- emitir(e, a) {
346
- this.dispatchEvent(new CustomEvent(e, { detail: a, bubbles: !0, composed: !0 }));
347
- }
348
- }
349
- M("ui-seletor-cor", H);
350
- let y = null;
351
- function I(n) {
352
- y == null || y.descartar();
353
- const o = document.createElement("ui-seletor-cor"), { ancora: e, focar: a, aoAlterar: t, aoConfirmar: i, aoCancelar: s, aoTrocarAlvo: l, ...p } = n;
354
- o.configurar(p);
355
- const u = new q();
356
- let g = !0;
357
- const v = () => {
358
- if (!g) return !1;
359
- g = !1, u.cleanup();
360
- const r = document.activeElement === o;
361
- return o.remove(), r && e instanceof HTMLElement && e.isConnected && e.focus({ preventScroll: !0 }), y === d && (y = null), !0;
362
- }, d = {
363
- elemento: o,
364
- get aberto() {
365
- return g;
366
- },
367
- fechar(r = !0) {
368
- r ? o.confirmar() : v();
369
- },
370
- descartar() {
371
- v();
372
- }
373
- };
374
- return u.add(o, "ui-cor-input", (r) => t == null ? void 0 : t(r.detail)), u.add(o, "ui-cor-confirmar", (r) => {
375
- v() && (i == null || i(r.detail));
376
- }), u.add(o, "ui-cor-cancelar", (r) => {
377
- v() && (s == null || s(r.detail));
378
- }), u.add(o, "ui-alvo-change", (r) => {
379
- r.stopPropagation(), l == null || l(r.detail.alvo);
380
- }), u.add(o, "pointerdown", (r) => r.stopPropagation()), u.add(o, "click", (r) => r.stopPropagation()), document.body.appendChild(o), T(o, e), y = d, a && o.focus({ preventScroll: !0 }), u.add(window, "resize", () => T(o, e)), u.add(window, "pointerdown", (r) => {
381
- const h = r.composedPath();
382
- !h.includes(o) && !h.includes(e) && d.fechar(!0);
383
- }, !0), u.add(window, "keydown", (r) => {
384
- var m, z;
385
- if (r.key === "Escape") {
386
- r.preventDefault(), r.stopPropagation(), d.fechar(!0);
387
- return;
388
- }
389
- const h = (z = (m = r.composedPath()[0]) == null ? void 0 : m.matches) == null ? void 0 : z.call(m, 'input[type="text"]');
390
- (r.key === "x" || r.key === "X") && !r.ctrlKey && !r.metaKey && !r.altKey && !r.shiftKey && !h && (r.preventDefault(), r.stopPropagation(), o.trocarAlvo(o.alvo === "preenchimento" ? "traco" : "preenchimento"));
391
- }, !0), d;
392
- }
393
- function Y(n = !0) {
394
- y == null || y.fechar(n);
395
- }
396
- function T(n, o) {
397
- const a = o.getBoundingClientRect(), t = n.offsetWidth, i = n.offsetHeight;
398
- let s = a.right + 10;
399
- s + t > window.innerWidth - 10 && (s = Math.max(10, a.left - t - 10));
400
- let l = a.top;
401
- l + i > window.innerHeight - 10 && (l = Math.max(10, window.innerHeight - i - 10)), n.style.left = `${Math.round(s)}px`, n.style.top = `${Math.round(l)}px`;
402
- }
403
- const U = ':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}}';
404
- class F extends j {
405
- constructor() {
406
- super();
407
- c(this, "raiz");
408
- c(this, "listeners", new q());
409
- c(this, "renderizado", !1);
410
- c(this, "_preenchimento", "#00e08a");
411
- c(this, "_traco", "#ffffff");
412
- c(this, "_opacidade", 0.35);
413
- c(this, "_espessuraTraco", 2.5);
414
- c(this, "_alvo", "preenchimento");
415
- c(this, "_misto", { preenchimento: !1, traco: !1 });
416
- c(this, "_padrao", { preenchimento: "#00e08a", traco: "#ffffff" });
417
- c(this, "_coresProjeto", []);
418
- c(this, "_atalhos", {});
419
- c(this, "seletor", null);
420
- c(this, "estadoAoAbrir", null);
421
- this.raiz = this.attachShadow({ mode: "open" });
422
- }
423
- static get observedAttributes() {
424
- return ["preenchimento", "traco", "opacidade", "espessura-traco", "alvo", "padrao-preenchimento", "padrao-traco", "desabilitado"];
425
- }
426
- connectedCallback() {
427
- this.renderizado || this.renderizar(), this.listeners.cleanup(), this.vincularEventos(), this.atualizar();
428
- }
429
- disconnectedCallback() {
430
- this.fecharSeletor(!0), this.listeners.cleanup();
431
- }
432
- attributeChangedCallback(e, a, t) {
433
- if (a !== t) {
434
- if (e === "desabilitado") {
435
- this.hasAttribute("desabilitado") && this.fecharSeletor(!1), this.atualizar();
436
- return;
437
- }
438
- if (t !== null) {
439
- if (e === "preenchimento") this.definirCores({ preenchimento: t });
440
- else if (e === "traco") this.definirCores({ traco: t });
441
- else if (e === "opacidade") this.definirCores({ opacidade: Number(t) });
442
- else if (e === "espessura-traco") this.definirCores({ espessuraTraco: Number(t) });
443
- else if (e === "alvo") this.definirAlvo(t);
444
- else if (e === "padrao-preenchimento" || e === "padrao-traco") {
445
- const i = w(t);
446
- if (!i) return;
447
- e === "padrao-preenchimento" ? this._padrao.preenchimento = i : this._padrao.traco = i, this.atualizar();
448
- }
449
- }
450
- }
451
- }
452
- /* ---------- Propriedades ---------- */
453
- get preenchimento() {
454
- return this._preenchimento;
455
- }
456
- set preenchimento(e) {
457
- this.definirCores({ preenchimento: e });
458
- }
459
- get traco() {
460
- return this._traco;
461
- }
462
- set traco(e) {
463
- this.definirCores({ traco: e });
464
- }
465
- get opacidade() {
466
- return this._opacidade;
467
- }
468
- set opacidade(e) {
469
- this.definirCores({ opacidade: e });
470
- }
471
- get espessuraTraco() {
472
- return this._espessuraTraco;
473
- }
474
- set espessuraTraco(e) {
475
- this.definirCores({ espessuraTraco: e });
476
- }
477
- get alvo() {
478
- return this._alvo;
479
- }
480
- set alvo(e) {
481
- this.definirAlvo(e);
482
- }
483
- /** Cores oferecidas em "Cores do projeto" no seletor. */
484
- get coresProjeto() {
485
- return [...this._coresProjeto];
486
- }
487
- set coresProjeto(e) {
488
- this._coresProjeto = $(e);
489
- }
490
- /** Teclas exibidas nas dicas dos botões (ex.: `{ inverter: 'Shift+X' }`). */
491
- get atalhos() {
492
- return { ...this._atalhos };
493
- }
494
- set atalhos(e) {
495
- this._atalhos = { ...e || {} }, this.atualizar();
496
- }
497
- get seletorAberto() {
498
- var e;
499
- return !!((e = this.seletor) != null && e.aberto);
500
- }
501
- /* ---------- Métodos (sem eventos) ---------- */
502
- /** Define cores, opacidade e/ou espessura sem emitir eventos. Valores inválidos são ignorados; uma cor definida deixa de ser "mista". */
503
- definirCores(e = {}) {
504
- const a = w(e.preenchimento), t = w(e.traco);
505
- a && (this._preenchimento = a, this._misto.preenchimento = !1), t && (this._traco = t, this._misto.traco = !1), e.opacidade !== void 0 && (this._opacidade = A(e.opacidade, this._opacidade)), e.espessuraTraco !== void 0 && (this._espessuraTraco = E(e.espessuraTraco, this._espessuraTraco)), this.atualizar();
506
- }
507
- obterCores() {
508
- return {
509
- preenchimento: this._preenchimento,
510
- traco: this._traco,
511
- opacidade: this._opacidade,
512
- espessuraTraco: this._espessuraTraco,
513
- alvo: this._alvo
514
- };
515
- }
516
- /** Marca a amostra como ativa sem emitir eventos. */
517
- definirAlvo(e) {
518
- this._alvo = e === "traco" ? "traco" : "preenchimento", this.atualizar(), this.sincronizarSeletor();
519
- }
520
- /** Mostra "?" nas amostras cujas cores divergem na seleção atual. */
521
- definirMisto(e = {}) {
522
- this._misto = { preenchimento: !!e.preenchimento, traco: !!e.traco }, this.atualizar();
523
- }
524
- /* ---------- Ações (emitem eventos) ---------- */
525
- /** Alterna o alvo ativo entre preenchimento e traço; emite `ui-alvo-change`. */
526
- alternarAlvo() {
527
- this.mudarAlvo(this._alvo === "traco" ? "preenchimento" : "traco");
528
- }
529
- /** Troca preenchimento e traço; emite `ui-cores-change` confirmado. */
530
- inverter() {
531
- const e = this._preenchimento;
532
- 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");
533
- }
534
- /** "Sem cor" no alvo indicado (padrão: o ativo); emite `ui-cores-change` confirmado. */
535
- semCor(e = this._alvo) {
536
- const a = e === "traco" ? "traco" : "preenchimento";
537
- a === "traco" ? this._traco = "none" : this._preenchimento = "none", this._misto[a] = !1, this.atualizar(), this.emitirCores(!0, [a], "sem-cor");
538
- }
539
- /** Volta às cores de `padrao-preenchimento` e `padrao-traco`; emite `ui-cores-change` confirmado. */
540
- restaurarPadrao() {
541
- this._preenchimento = this._padrao.preenchimento, this._traco = this._padrao.traco, this._misto = { preenchimento: !1, traco: !1 }, this.atualizar(), this.emitirCores(!0, ["preenchimento", "traco"], "padrao");
542
- }
543
- /** Abre o seletor de cor ancorado na amostra do alvo (que passa a ser o ativo). */
544
- abrirSeletor(e = this._alvo, a = !1) {
545
- if (this.hasAttribute("desabilitado") || (this.mudarAlvo(e === "traco" ? "traco" : "preenchimento"), this.seletorAberto)) return;
546
- const t = this.raiz.querySelector(`[data-alvo="${this._alvo}"]`) || this;
547
- this.estadoAoAbrir = this.obterCores(), this.seletor = I({
548
- ancora: t,
549
- titulo: this.getAttribute("titulo-seletor") || "Cores & Estilo CAD",
550
- modo: "duplo",
551
- alvo: this._alvo,
552
- preenchimento: this._preenchimento,
553
- traco: this._traco,
554
- opacidade: this._opacidade,
555
- espessuraTraco: this._espessuraTraco,
556
- misto: this._misto[this._alvo],
557
- coresProjeto: this._coresProjeto,
558
- focar: a,
559
- aoAlterar: (i) => this.aplicarDoSeletor(i, !1),
560
- aoConfirmar: (i) => {
561
- this.seletor = null, this.aplicarDoSeletor(i, !0);
562
- },
563
- aoCancelar: () => {
564
- this.seletor = null, this.estadoAoAbrir = null;
565
- },
566
- aoTrocarAlvo: (i) => this.mudarAlvo(i)
567
- });
568
- }
569
- /**
570
- * Fecha o seletor aberto por este controle. Com `confirmar` (padrão), grava o que foi editado;
571
- * sem ele, cancela: as cores iniciais voltam (com um `ui-cores-change` não confirmado) e nada é confirmado.
572
- */
573
- fecharSeletor(e = !0) {
574
- const a = this.seletor;
575
- a && (e ? a.fechar(!0) : a.elemento.cancelar());
576
- }
577
- /* ---------- Interno ---------- */
578
- mudarAlvo(e) {
579
- e !== this._alvo && (this._alvo = e, this.atualizar(), this.sincronizarSeletor(), this.dispatchEvent(new CustomEvent("ui-alvo-change", { detail: { alvo: e }, bubbles: !0, composed: !0 })));
580
- }
581
- /** Mantém a aba do seletor aberto igual ao alvo do controle. */
582
- sincronizarSeletor() {
583
- var e, a;
584
- (a = (e = this.seletor) == null ? void 0 : e.elemento) == null || a.trocarAlvo(this._alvo);
585
- }
586
- aplicarDoSeletor(e, a) {
587
- const t = (s) => {
588
- const l = [];
589
- return e.preenchimento !== s.preenchimento && l.push("preenchimento"), e.traco !== s.traco && l.push("traco"), e.opacidade !== s.opacidade && l.push("opacidade"), e.espessuraTraco !== void 0 && Math.abs(e.espessuraTraco - s.espessuraTraco) > 0.05 && l.push("espessuraTraco"), l;
590
- }, i = t(this.obterCores());
591
- if (this._preenchimento = e.preenchimento, this._traco = e.traco, this._opacidade = e.opacidade, e.espessuraTraco !== void 0 && (this._espessuraTraco = e.espessuraTraco), i.includes("preenchimento") && (this._misto.preenchimento = !1), i.includes("traco") && (this._misto.traco = !1), this.atualizar(), !a) {
592
- i.length && this.emitirCores(!1, i, "seletor");
593
- return;
594
- }
595
- this.emitirCores(!0, this.estadoAoAbrir ? t(this.estadoAoAbrir) : i, "seletor"), this.estadoAoAbrir = null;
596
- }
597
- emitirCores(e, a, t) {
598
- const i = { ...this.obterCores(), confirmado: e, alterados: a, origem: t };
599
- this.dispatchEvent(new CustomEvent("ui-cores-change", { detail: i, bubbles: !0, composed: !0 }));
600
- }
601
- dica(e, a) {
602
- return a ? `${e} [${a}]` : e;
603
- }
604
- renderizar() {
605
- this.raiz.innerHTML = `
606
- <style>${U}</style>
607
- <div class="pilha" part="pilha" role="group" aria-label="Cores de desenho">
608
- <div class="amostras" part="amostras">
609
- <button type="button" class="amostra amostra--traco" data-alvo="traco" part="amostra amostra-traco">
610
- <span class="face face--traco"></span>
611
- </button>
612
- <button type="button" class="amostra amostra--preenchimento" data-alvo="preenchimento" part="amostra amostra-preenchimento">
613
- <span class="face face--preenchimento"></span>
614
- </button>
615
- </div>
616
- <div class="acoes" part="acoes">
617
- <button type="button" class="acao acao--inverter" data-acao="inverter" part="acao acao-inverter" aria-label="Inverter preenchimento e traço">
618
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
619
- <path d="m16 3 4 4-4 4"/><path d="M20 7H4"/><path d="m8 21-4-4 4-4"/><path d="M4 17h16"/>
620
- </svg>
621
- </button>
622
- <button type="button" class="acao acao--sem-cor" data-acao="sem-cor" part="acao acao-sem-cor" aria-label="Sem cor">
623
- <svg viewBox="0 0 24 24" fill="none" stroke-width="2.4" stroke-linecap="round" aria-hidden="true">
624
- <circle cx="12" cy="12" r="8" stroke="currentColor"/>
625
- <line x1="6.5" y1="6.5" x2="17.5" y2="17.5" stroke="#ef4444"/>
626
- </svg>
627
- </button>
628
- <button type="button" class="acao acao--padrao" data-acao="padrao" part="acao acao-padrao" aria-label="Restaurar cores padrão">
629
- <span class="icone-padrao" aria-hidden="true">
630
- <span class="ponto ponto--preenchimento"></span>
631
- <span class="ponto ponto--traco"></span>
632
- </span>
633
- </button>
634
- </div>
635
- </div>
636
- `, this.renderizado = !0;
637
- }
638
- vincularEventos() {
639
- const e = this.raiz;
640
- e.querySelectorAll("[data-alvo]").forEach((t) => {
641
- const i = t.dataset.alvo;
642
- this.listeners.add(t, "click", (s) => {
643
- s.stopPropagation(), i !== this._alvo ? this.mudarAlvo(i) : this.seletorAberto ? this.fecharSeletor(!0) : this.abrirSeletor(i);
644
- }), this.listeners.add(t, "dblclick", (s) => {
645
- s.stopPropagation(), this.abrirSeletor(i);
646
- }), this.listeners.add(t, "keydown", (s) => {
647
- s.key !== "Enter" && s.key !== " " || (s.preventDefault(), i === this._alvo && this.seletorAberto ? this.fecharSeletor(!0) : this.abrirSeletor(i, !0));
648
- }), this.listeners.add(t, "keyup", (s) => {
649
- s.key === " " && s.preventDefault();
650
- });
651
- });
652
- const a = (t, i) => {
653
- this.listeners.add(e.querySelector(`[data-acao="${t}"]`), "click", (s) => {
654
- s.stopPropagation(), i();
655
- });
656
- };
657
- a("inverter", () => this.inverter()), a("sem-cor", () => this.semCor()), a("padrao", () => this.restaurarPadrao());
658
- }
659
- atualizar() {
660
- if (!this.renderizado) return;
661
- const e = this.raiz, a = this._atalhos, t = this.hasAttribute("desabilitado"), i = (d, r) => r ? "Misto (?) [várias cores na seleção]" : d === "none" ? "Sem cor" : d, s = (d, r, h, m, z = "") => {
662
- const b = e.querySelector(`[data-alvo="${d}"]`), k = b == null ? void 0 : b.querySelector(".face");
663
- if (!b || !k) return;
664
- const _ = this._alvo === d;
665
- b.classList.toggle("amostra--ativa", _), b.setAttribute("aria-pressed", String(_)), b.disabled = t, k.classList.toggle("face--misto", h), k.classList.toggle("face--sem-cor", !h && r === "none");
666
- const f = d === "traco" ? "borderColor" : "backgroundColor";
667
- k.style[f] = h || r === "none" ? "" : r, d === "traco" && r !== "none" && !h && (k.style.borderWidth = `${Math.max(2, Math.min(4.5, this._espessuraTraco))}px`);
668
- const x = `${m}: ${i(r, h)}${z}`;
669
- b.title = this.dica(`${x} — clique para ativar, clique de novo para editar`, a.alternar), b.setAttribute("aria-label", x);
670
- }, l = this._preenchimento === "none" || this._misto.preenchimento ? "" : `, opacidade ${Math.round(this._opacidade * 100)}%`;
671
- s("preenchimento", this._preenchimento, this._misto.preenchimento, "Preenchimento", l);
672
- const p = this._traco === "none" || this._misto.traco ? "" : `, espessura ${this._espessuraTraco}px`;
673
- s("traco", this._traco, this._misto.traco, "Traço / contorno", p);
674
- const u = (d, r) => {
675
- const h = e.querySelector(`[data-acao="${d}"]`);
676
- h && (h.title = r, h.disabled = t);
677
- };
678
- u("inverter", this.dica("Inverter preenchimento e traço", a.inverter)), u("sem-cor", this.dica("Sem cor no alvo ativo", a.semCor)), u("padrao", this.dica("Restaurar cores padrão", a.padrao));
679
- const g = e.querySelector(".ponto--preenchimento");
680
- g && (g.style.backgroundColor = this._padrao.preenchimento === "none" ? "transparent" : this._padrao.preenchimento);
681
- const v = e.querySelector(".ponto--traco");
682
- v && (v.style.borderColor = this._padrao.traco === "none" ? "#ef4444" : this._padrao.traco);
683
- }
684
- }
685
- M("ui-controle-cores", F);
686
- export {
687
- P,
688
- F as U,
689
- H as a,
690
- I as b,
691
- $ as c,
692
- E as d,
693
- N as e,
694
- Y as f,
695
- A as g,
696
- w as n
697
- };