xertica-ui 2.7.0 → 2.8.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 (228) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +19 -11
  3. package/bin/generate-tokens.ts +25 -9
  4. package/components/assistant/xertica-assistant/xertica-assistant.tsx +1 -1
  5. package/components/ui/button/button.test.tsx +2 -2
  6. package/components/ui/button/button.tsx +6 -6
  7. package/components/ui/card/card.tsx +14 -2
  8. package/components/ui/input/input.tsx +1 -1
  9. package/components/ui/input-otp/input-otp.tsx +1 -1
  10. package/components/ui/search/search.tsx +1 -1
  11. package/components/ui/select/select.tsx +2 -2
  12. package/components/ui/switch/switch.tsx +1 -1
  13. package/components/ui/textarea/textarea.tsx +1 -1
  14. package/contexts/BrandColorsContext.tsx +50 -2
  15. package/contexts/theme-data.ts +100 -3
  16. package/dist/AssistantChart-BFBJXVcm.js +3383 -0
  17. package/dist/AssistantChart-BTnE94FR.cjs +3551 -0
  18. package/dist/AssistantChart-BvccsQMx.cjs +3551 -0
  19. package/dist/AssistantChart-CkskcBVD.js +3383 -0
  20. package/dist/AssistantChart-CrPkO9ip.js +3383 -0
  21. package/dist/AssistantChart-DKz2O1R8.cjs +3551 -0
  22. package/dist/AssistantChart-DYL6UEvo.cjs +3551 -0
  23. package/dist/AssistantChart-keo-ogKi.js +3383 -0
  24. package/dist/AudioPlayer-AoU5MTiM.cjs +1282 -0
  25. package/dist/AudioPlayer-Bx1vrblm.js +1278 -0
  26. package/dist/AudioPlayer-D0-I6J3J.cjs +1282 -0
  27. package/dist/AudioPlayer-DIWX_Yg7.cjs +1282 -0
  28. package/dist/AudioPlayer-DrWJnS7c.js +1278 -0
  29. package/dist/AudioPlayer-_P-Z7pAK.js +1278 -0
  30. package/dist/BrandColorsContext-B25Bpr3b.cjs +819 -0
  31. package/dist/BrandColorsContext-BCieATdW.js +812 -0
  32. package/dist/BrandColorsContext-DP0DXAXS.js +824 -0
  33. package/dist/BrandColorsContext-DjpC9wR_.cjs +798 -0
  34. package/dist/BrandColorsContext-MpXFhte7.cjs +831 -0
  35. package/dist/BrandColorsContext-V3tOc-Zw.js +791 -0
  36. package/dist/CodeBlock-CK4rO6lM.js +221 -0
  37. package/dist/CodeBlock-CKXamfVd.cjs +223 -0
  38. package/dist/CodeBlock-CVmE7isS.cjs +223 -0
  39. package/dist/CodeBlock-D7i5-cMv.js +221 -0
  40. package/dist/CodeBlock-Dg56j2ut.cjs +223 -0
  41. package/dist/CodeBlock-Dt6nUQoo.js +221 -0
  42. package/dist/CustomTooltipContent-Bxynuq7T.js +33 -0
  43. package/dist/CustomTooltipContent-BzjOSA0P.cjs +54 -0
  44. package/dist/CustomTooltipContent-C-ZeCNsf.js +33 -0
  45. package/dist/CustomTooltipContent-CON_QrXm.cjs +54 -0
  46. package/dist/CustomTooltipContent-UR_n2QfW.js +33 -0
  47. package/dist/CustomTooltipContent-v1SXjoFn.cjs +54 -0
  48. package/dist/FeatureCard-4n_8a63v.cjs +497 -0
  49. package/dist/FeatureCard-BLiAWT3w.js +485 -0
  50. package/dist/FeatureCard-BXRW97Ef.cjs +497 -0
  51. package/dist/FeatureCard-CDgLlWE2.js +485 -0
  52. package/dist/FeatureCard-CgQ8lq-I.cjs +497 -0
  53. package/dist/FeatureCard-Cp8cVC6T.cjs +497 -0
  54. package/dist/FeatureCard-D0MwrTRP.js +485 -0
  55. package/dist/FeatureCard-uE5i0in_.js +485 -0
  56. package/dist/ImageWithFallback-BOh1FM3I.js +98 -0
  57. package/dist/ImageWithFallback-BQO7952C.js +98 -0
  58. package/dist/ImageWithFallback-BkMXHCvV.cjs +122 -0
  59. package/dist/ImageWithFallback-C72nwszA.cjs +122 -0
  60. package/dist/ImageWithFallback-CCUMDuEC.cjs +122 -0
  61. package/dist/ImageWithFallback-DQD5TTlY.js +98 -0
  62. package/dist/LanguageSelector-1XhM7R1i.cjs +48 -0
  63. package/dist/LanguageSelector-B3ZVNc55.js +46 -0
  64. package/dist/LanguageSelector-Cj6zl0CM.js +46 -0
  65. package/dist/LanguageSelector-DK1zD4VH.cjs +48 -0
  66. package/dist/LanguageSelector-DseCAa0p.cjs +48 -0
  67. package/dist/LanguageSelector-Du09anfM.js +46 -0
  68. package/dist/LanguageSelector-PZHlFfEs.cjs +48 -0
  69. package/dist/LanguageSelector-SB-NJSmx.js +46 -0
  70. package/dist/PasswordStrengthMeter-B3S6i_k4.cjs +179 -0
  71. package/dist/PasswordStrengthMeter-B8ky1nJI.js +173 -0
  72. package/dist/PasswordStrengthMeter-C5VEopH-.cjs +179 -0
  73. package/dist/PasswordStrengthMeter-CIm7_jNT.js +173 -0
  74. package/dist/PasswordStrengthMeter-DKSAbQzu.js +173 -0
  75. package/dist/PasswordStrengthMeter-DxLu54p-.cjs +179 -0
  76. package/dist/PasswordStrengthMeter-k-e9Pole.cjs +179 -0
  77. package/dist/PasswordStrengthMeter-pAi2viq5.js +173 -0
  78. package/dist/ThemeToggle-4pQbVkpK.js +215 -0
  79. package/dist/ThemeToggle-B6rIVLvC.cjs +219 -0
  80. package/dist/ThemeToggle-BUOTps5l.cjs +219 -0
  81. package/dist/ThemeToggle-CO5mPl6e.js +215 -0
  82. package/dist/ThemeToggle-DbZQ0JSV.cjs +219 -0
  83. package/dist/ThemeToggle-vLXEq2TS.js +215 -0
  84. package/dist/VerifyEmailPage-BTjI2c9n.js +2954 -0
  85. package/dist/VerifyEmailPage-CJGfDSOx.js +2954 -0
  86. package/dist/VerifyEmailPage-DOlZUNc0.cjs +2963 -0
  87. package/dist/VerifyEmailPage-DQPRl_RJ.js +2954 -0
  88. package/dist/VerifyEmailPage-DrdqMbLC.cjs +2963 -0
  89. package/dist/VerifyEmailPage-hyDfeCRa.cjs +2963 -0
  90. package/dist/VerifyEmailPage-kKSXl8vu.cjs +2963 -0
  91. package/dist/VerifyEmailPage-w4N-bDhU.js +2954 -0
  92. package/dist/XerticaOrbe-B9tegV1n.js +1925 -0
  93. package/dist/XerticaOrbe-BQ_NjwPS.cjs +1927 -0
  94. package/dist/XerticaOrbe-BdUX171Q.cjs +1927 -0
  95. package/dist/XerticaOrbe-BdlKXRHU.cjs +1927 -0
  96. package/dist/XerticaOrbe-CByPAFE5.js +1925 -0
  97. package/dist/XerticaOrbe-Ccu9eFMu.js +1925 -0
  98. package/dist/XerticaProvider-BVid1oqn.cjs +46 -0
  99. package/dist/XerticaProvider-Bz_YfNY4.js +44 -0
  100. package/dist/XerticaProvider-CtvYfRbZ.cjs +46 -0
  101. package/dist/XerticaProvider-DMiyExQS.js +44 -0
  102. package/dist/XerticaProvider-DP2lzKip.cjs +46 -0
  103. package/dist/XerticaProvider-De79hhgp.js +44 -0
  104. package/dist/XerticaProvider-Dkk1Vbsy.js +44 -0
  105. package/dist/XerticaProvider-EdzH9Nrw.cjs +46 -0
  106. package/dist/alert-dialog-9XYAn5z5.js +819 -0
  107. package/dist/alert-dialog-B281hud0.cjs +872 -0
  108. package/dist/alert-dialog-BVWbrcrw.cjs +872 -0
  109. package/dist/alert-dialog-B_Ko1xpu.js +819 -0
  110. package/dist/alert-dialog-CIxE8T-J.cjs +872 -0
  111. package/dist/alert-dialog-DW-_iPuf.js +819 -0
  112. package/dist/assistant.cjs.js +2 -2
  113. package/dist/assistant.es.js +2 -2
  114. package/dist/avatar-BJwIMbZ_.js +54 -0
  115. package/dist/avatar-C4Zh5fAJ.cjs +77 -0
  116. package/dist/avatar-CTEUKZUT.js +54 -0
  117. package/dist/avatar-D1bZhlhL.cjs +77 -0
  118. package/dist/avatar-DKIxHeKG.cjs +77 -0
  119. package/dist/avatar-v16eZC8p.js +54 -0
  120. package/dist/blocks.cjs.js +2 -2
  121. package/dist/blocks.es.js +2 -2
  122. package/dist/brand.cjs.js +4 -4
  123. package/dist/brand.es.js +4 -4
  124. package/dist/breadcrumb-B1mUiaWB.cjs +98 -0
  125. package/dist/breadcrumb-BIRgmem-.js +90 -0
  126. package/dist/breadcrumb-BSng-oUf.cjs +98 -0
  127. package/dist/breadcrumb-CES7furU.js +90 -0
  128. package/dist/breadcrumb-CP275kbF.cjs +98 -0
  129. package/dist/breadcrumb-D7hr1EvJ.js +90 -0
  130. package/dist/button-BYtQygX5.cjs +85 -0
  131. package/dist/button-BnAW-a_w.js +62 -0
  132. package/dist/button-CUPDQews.js +62 -0
  133. package/dist/button-DFa-rtPy.js +62 -0
  134. package/dist/button-DV1G6XrI.cjs +85 -0
  135. package/dist/button-Kd9Fj53S.cjs +85 -0
  136. package/dist/cli.js +94 -10
  137. package/dist/components/ui/card/card.d.ts +11 -1
  138. package/dist/contexts/theme-data.d.ts +15 -1
  139. package/dist/dropdown-menu-B9wTZ0uX.cjs +225 -0
  140. package/dist/dropdown-menu-BeBtZOrs.cjs +225 -0
  141. package/dist/dropdown-menu-D7mRDGis.js +190 -0
  142. package/dist/dropdown-menu-D8ZmqHB7.js +190 -0
  143. package/dist/dropdown-menu-_AWBeOts.cjs +225 -0
  144. package/dist/dropdown-menu-qGzLO_HO.js +190 -0
  145. package/dist/hooks.cjs.js +1 -1
  146. package/dist/hooks.es.js +1 -1
  147. package/dist/index.cjs.js +24 -24
  148. package/dist/index.es.js +24 -24
  149. package/dist/input-B53E6K8G.js +65 -0
  150. package/dist/input-B7Q7vcoG.cjs +91 -0
  151. package/dist/input-BysqLMK1.js +65 -0
  152. package/dist/input-CStdFsaH.cjs +91 -0
  153. package/dist/input-CXYth6nW.cjs +91 -0
  154. package/dist/input-CX_fWE2D.cjs +91 -0
  155. package/dist/input-CitUVnEn.js +65 -0
  156. package/dist/input-wkBYTp-B.js +65 -0
  157. package/dist/layout.cjs.js +1 -1
  158. package/dist/layout.es.js +1 -1
  159. package/dist/media.cjs.js +1 -1
  160. package/dist/media.es.js +1 -1
  161. package/dist/pages.cjs.js +1 -1
  162. package/dist/pages.es.js +1 -1
  163. package/dist/rich-text-editor-BHiRUzWZ.js +2894 -0
  164. package/dist/rich-text-editor-BWMRUMJ2.js +2894 -0
  165. package/dist/rich-text-editor-BoE6Ks5x.cjs +2968 -0
  166. package/dist/rich-text-editor-BzuEwR_X.js +2894 -0
  167. package/dist/rich-text-editor-CcopGbQ-.js +2894 -0
  168. package/dist/rich-text-editor-CmxSRJIi.cjs +2968 -0
  169. package/dist/rich-text-editor-DyYAu28v.cjs +2968 -0
  170. package/dist/rich-text-editor-JS_eMQCC.cjs +2968 -0
  171. package/dist/select-BNfFJwYp.js +130 -0
  172. package/dist/select-CN8IDjGB.js +130 -0
  173. package/dist/select-CwRzQHA7.cjs +161 -0
  174. package/dist/select-CwgD3nMD.js +130 -0
  175. package/dist/select-DEHUm_AC.cjs +161 -0
  176. package/dist/select-DJDgpVm3.cjs +161 -0
  177. package/dist/select-DSLWQLmo.cjs +161 -0
  178. package/dist/select-YFx0wCYT.js +130 -0
  179. package/dist/sidebar-BF7JEL7U.js +1151 -0
  180. package/dist/sidebar-Bjr2doX5.cjs +1154 -0
  181. package/dist/sidebar-CMrNCmhb.cjs +1154 -0
  182. package/dist/sidebar-CO9x8AVn.cjs +1154 -0
  183. package/dist/sidebar-Cn_KB4c6.js +1151 -0
  184. package/dist/sidebar-Db_C30ph.cjs +1154 -0
  185. package/dist/sidebar-miPHsRz4.js +1151 -0
  186. package/dist/sidebar-pZF8mLLu.js +1151 -0
  187. package/dist/skeleton-BX2XTjMO.cjs +87 -0
  188. package/dist/skeleton-BoLK0iV7.js +78 -0
  189. package/dist/skeleton-Bysq8yeB.js +79 -0
  190. package/dist/skeleton-C7nspYnC.cjs +87 -0
  191. package/dist/skeleton-DL4V5Vub.cjs +87 -0
  192. package/dist/skeleton-DSMhdqp1.js +78 -0
  193. package/dist/skeleton-DhJswvTW.cjs +88 -0
  194. package/dist/skeleton-DicUfozA.js +78 -0
  195. package/dist/slider-77T_Eqw4.js +56 -0
  196. package/dist/slider-B6puMLXS.cjs +78 -0
  197. package/dist/slider-B785N7lZ.js +56 -0
  198. package/dist/slider-C6yssKyZ.cjs +78 -0
  199. package/dist/slider-CKZO9gVh.cjs +78 -0
  200. package/dist/slider-Cn-ImSze.js +56 -0
  201. package/dist/tooltip-BiJVGob3.cjs +72 -0
  202. package/dist/tooltip-D2OPn-1v.cjs +72 -0
  203. package/dist/tooltip-DlCHQuh1.js +48 -0
  204. package/dist/tooltip-fQ2Va0G8.cjs +72 -0
  205. package/dist/tooltip-oAw00FX2.js +48 -0
  206. package/dist/tooltip-u147L0wD.js +48 -0
  207. package/dist/ui.cjs.js +13 -13
  208. package/dist/ui.es.js +13 -13
  209. package/dist/xertica-assistant-C2A0R94j.js +2173 -0
  210. package/dist/xertica-assistant-CSUprvTR.js +2173 -0
  211. package/dist/xertica-assistant-Caubm0HR.js +2173 -0
  212. package/dist/xertica-assistant-DEexPM2u.cjs +2180 -0
  213. package/dist/xertica-assistant-Dh1dmEx3.cjs +2180 -0
  214. package/dist/xertica-assistant-GGcyHEZG.cjs +2180 -0
  215. package/dist/xertica-assistant-USefPe2L.js +2173 -0
  216. package/dist/xertica-assistant-cwSHFwfv.cjs +2180 -0
  217. package/dist/xertica-ui.css +1 -1
  218. package/package.json +3 -2
  219. package/styles/xertica/base.css +38 -0
  220. package/styles/xertica/tokens.css +9 -0
  221. package/templates/src/app/App.tsx +5 -1
  222. package/templates/src/features/home/ui/HomeContent.tsx +12 -13
  223. package/templates/src/features/template/ui/TemplateContent.tsx +569 -26
  224. package/templates/src/locales/en/pages/templates.json +112 -4
  225. package/templates/src/locales/es/pages/templates.json +112 -4
  226. package/templates/src/locales/pt-BR/pages/templates.json +112 -4
  227. package/templates/src/styles/xertica/tokens.css +9 -0
  228. package/templates/vite.config.ts +25 -0
@@ -0,0 +1,98 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Slot, Slottable } from '@radix-ui/react-slot';
3
+ import { cva } from 'class-variance-authority';
4
+ import { c as cn } from './button-BnAW-a_w.js';
5
+ import * as ProgressPrimitive from '@radix-ui/react-progress';
6
+ import { useState } from 'react';
7
+
8
+ const badgeVariants = cva(
9
+ "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
10
+ {
11
+ variants: {
12
+ variant: {
13
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
14
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
15
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
16
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
17
+ success: "border-transparent bg-success text-success-foreground",
18
+ warning: "border-transparent bg-warning text-warning-foreground",
19
+ info: "border-transparent bg-info text-info-foreground"
20
+ }
21
+ },
22
+ defaultVariants: {
23
+ variant: "default"
24
+ }
25
+ }
26
+ );
27
+ function Badge({
28
+ className,
29
+ variant,
30
+ asChild = false,
31
+ children,
32
+ ...props
33
+ }) {
34
+ const Comp = asChild ? Slot : "span";
35
+ return /* @__PURE__ */ jsx(Comp, { "data-slot": "badge", className: cn(badgeVariants({ variant }), className), ...props, children: /* @__PURE__ */ jsx(Slottable, { children }) });
36
+ }
37
+
38
+ const trackVariants = {
39
+ default: "bg-primary/20",
40
+ success: "bg-success/20",
41
+ info: "bg-info/20",
42
+ warning: "bg-warning/20",
43
+ destructive: "bg-destructive/20"
44
+ };
45
+ const indicatorVariants = {
46
+ default: "bg-primary",
47
+ success: "bg-success",
48
+ info: "bg-info",
49
+ warning: "bg-warning",
50
+ destructive: "bg-destructive"
51
+ };
52
+ function Progress({
53
+ className,
54
+ value,
55
+ variant = "default",
56
+ ...props
57
+ }) {
58
+ return /* @__PURE__ */ jsx(
59
+ ProgressPrimitive.Root,
60
+ {
61
+ "data-slot": "progress",
62
+ "aria-label": props["aria-label"] || "Progresso",
63
+ className: cn(
64
+ "relative h-2 w-full overflow-hidden rounded-full",
65
+ trackVariants[variant],
66
+ className
67
+ ),
68
+ ...props,
69
+ children: /* @__PURE__ */ jsx(
70
+ ProgressPrimitive.Indicator,
71
+ {
72
+ "data-slot": "progress-indicator",
73
+ className: cn("h-full w-full flex-1 transition-all", indicatorVariants[variant]),
74
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
75
+ }
76
+ )
77
+ }
78
+ );
79
+ }
80
+
81
+ const ERROR_IMG_SRC = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==";
82
+ function ImageWithFallback(props) {
83
+ const [didError, setDidError] = useState(false);
84
+ const handleError = () => {
85
+ setDidError(true);
86
+ };
87
+ const { src, alt, style, className, ...rest } = props;
88
+ return didError ? /* @__PURE__ */ jsx(
89
+ "div",
90
+ {
91
+ className: `inline-block bg-gray-100 text-center align-middle ${className ?? ""}`,
92
+ style,
93
+ children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center w-full h-full", children: /* @__PURE__ */ jsx("img", { src: ERROR_IMG_SRC, alt: "Error loading image", ...rest, "data-original-url": src }) })
94
+ }
95
+ ) : /* @__PURE__ */ jsx("img", { src, alt, className, style, ...rest, onError: handleError });
96
+ }
97
+
98
+ export { Badge as B, ImageWithFallback as I, Progress as P, badgeVariants as b };
@@ -0,0 +1,122 @@
1
+ 'use strict';
2
+
3
+ const jsxRuntime = require('react/jsx-runtime');
4
+ const reactSlot = require('@radix-ui/react-slot');
5
+ const classVarianceAuthority = require('class-variance-authority');
6
+ const button = require('./button-Kd9Fj53S.cjs');
7
+ const ProgressPrimitive = require('@radix-ui/react-progress');
8
+ const React = require('react');
9
+
10
+ function _interopNamespaceDefault(e) {
11
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
12
+ if (e) {
13
+ for (const k in e) {
14
+ if (k !== 'default') {
15
+ const d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: () => e[k]
19
+ });
20
+ }
21
+ }
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ const ProgressPrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(ProgressPrimitive);
28
+
29
+ const badgeVariants = classVarianceAuthority.cva(
30
+ "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
31
+ {
32
+ variants: {
33
+ variant: {
34
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
35
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
36
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
37
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
38
+ success: "border-transparent bg-success text-success-foreground",
39
+ warning: "border-transparent bg-warning text-warning-foreground",
40
+ info: "border-transparent bg-info text-info-foreground"
41
+ }
42
+ },
43
+ defaultVariants: {
44
+ variant: "default"
45
+ }
46
+ }
47
+ );
48
+ function Badge({
49
+ className,
50
+ variant,
51
+ asChild = false,
52
+ children,
53
+ ...props
54
+ }) {
55
+ const Comp = asChild ? reactSlot.Slot : "span";
56
+ return /* @__PURE__ */ jsxRuntime.jsx(Comp, { "data-slot": "badge", className: button.cn(badgeVariants({ variant }), className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slottable, { children }) });
57
+ }
58
+
59
+ const trackVariants = {
60
+ default: "bg-primary/20",
61
+ success: "bg-success/20",
62
+ info: "bg-info/20",
63
+ warning: "bg-warning/20",
64
+ destructive: "bg-destructive/20"
65
+ };
66
+ const indicatorVariants = {
67
+ default: "bg-primary",
68
+ success: "bg-success",
69
+ info: "bg-info",
70
+ warning: "bg-warning",
71
+ destructive: "bg-destructive"
72
+ };
73
+ function Progress({
74
+ className,
75
+ value,
76
+ variant = "default",
77
+ ...props
78
+ }) {
79
+ return /* @__PURE__ */ jsxRuntime.jsx(
80
+ ProgressPrimitive__namespace.Root,
81
+ {
82
+ "data-slot": "progress",
83
+ "aria-label": props["aria-label"] || "Progresso",
84
+ className: button.cn(
85
+ "relative h-2 w-full overflow-hidden rounded-full",
86
+ trackVariants[variant],
87
+ className
88
+ ),
89
+ ...props,
90
+ children: /* @__PURE__ */ jsxRuntime.jsx(
91
+ ProgressPrimitive__namespace.Indicator,
92
+ {
93
+ "data-slot": "progress-indicator",
94
+ className: button.cn("h-full w-full flex-1 transition-all", indicatorVariants[variant]),
95
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
96
+ }
97
+ )
98
+ }
99
+ );
100
+ }
101
+
102
+ const ERROR_IMG_SRC = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==";
103
+ function ImageWithFallback(props) {
104
+ const [didError, setDidError] = React.useState(false);
105
+ const handleError = () => {
106
+ setDidError(true);
107
+ };
108
+ const { src, alt, style, className, ...rest } = props;
109
+ return didError ? /* @__PURE__ */ jsxRuntime.jsx(
110
+ "div",
111
+ {
112
+ className: `inline-block bg-gray-100 text-center align-middle ${className ?? ""}`,
113
+ style,
114
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center w-full h-full", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: ERROR_IMG_SRC, alt: "Error loading image", ...rest, "data-original-url": src }) })
115
+ }
116
+ ) : /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, className, style, ...rest, onError: handleError });
117
+ }
118
+
119
+ exports.Badge = Badge;
120
+ exports.ImageWithFallback = ImageWithFallback;
121
+ exports.Progress = Progress;
122
+ exports.badgeVariants = badgeVariants;
@@ -0,0 +1,122 @@
1
+ 'use strict';
2
+
3
+ const jsxRuntime = require('react/jsx-runtime');
4
+ const reactSlot = require('@radix-ui/react-slot');
5
+ const classVarianceAuthority = require('class-variance-authority');
6
+ const button = require('./button-DV1G6XrI.cjs');
7
+ const ProgressPrimitive = require('@radix-ui/react-progress');
8
+ const React = require('react');
9
+
10
+ function _interopNamespaceDefault(e) {
11
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
12
+ if (e) {
13
+ for (const k in e) {
14
+ if (k !== 'default') {
15
+ const d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: () => e[k]
19
+ });
20
+ }
21
+ }
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ const ProgressPrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(ProgressPrimitive);
28
+
29
+ const badgeVariants = classVarianceAuthority.cva(
30
+ "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
31
+ {
32
+ variants: {
33
+ variant: {
34
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
35
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
36
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
37
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
38
+ success: "border-transparent bg-success text-success-foreground",
39
+ warning: "border-transparent bg-warning text-warning-foreground",
40
+ info: "border-transparent bg-info text-info-foreground"
41
+ }
42
+ },
43
+ defaultVariants: {
44
+ variant: "default"
45
+ }
46
+ }
47
+ );
48
+ function Badge({
49
+ className,
50
+ variant,
51
+ asChild = false,
52
+ children,
53
+ ...props
54
+ }) {
55
+ const Comp = asChild ? reactSlot.Slot : "span";
56
+ return /* @__PURE__ */ jsxRuntime.jsx(Comp, { "data-slot": "badge", className: button.cn(badgeVariants({ variant }), className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slottable, { children }) });
57
+ }
58
+
59
+ const trackVariants = {
60
+ default: "bg-primary/20",
61
+ success: "bg-success/20",
62
+ info: "bg-info/20",
63
+ warning: "bg-warning/20",
64
+ destructive: "bg-destructive/20"
65
+ };
66
+ const indicatorVariants = {
67
+ default: "bg-primary",
68
+ success: "bg-success",
69
+ info: "bg-info",
70
+ warning: "bg-warning",
71
+ destructive: "bg-destructive"
72
+ };
73
+ function Progress({
74
+ className,
75
+ value,
76
+ variant = "default",
77
+ ...props
78
+ }) {
79
+ return /* @__PURE__ */ jsxRuntime.jsx(
80
+ ProgressPrimitive__namespace.Root,
81
+ {
82
+ "data-slot": "progress",
83
+ "aria-label": props["aria-label"] || "Progresso",
84
+ className: button.cn(
85
+ "relative h-2 w-full overflow-hidden rounded-full",
86
+ trackVariants[variant],
87
+ className
88
+ ),
89
+ ...props,
90
+ children: /* @__PURE__ */ jsxRuntime.jsx(
91
+ ProgressPrimitive__namespace.Indicator,
92
+ {
93
+ "data-slot": "progress-indicator",
94
+ className: button.cn("h-full w-full flex-1 transition-all", indicatorVariants[variant]),
95
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
96
+ }
97
+ )
98
+ }
99
+ );
100
+ }
101
+
102
+ const ERROR_IMG_SRC = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==";
103
+ function ImageWithFallback(props) {
104
+ const [didError, setDidError] = React.useState(false);
105
+ const handleError = () => {
106
+ setDidError(true);
107
+ };
108
+ const { src, alt, style, className, ...rest } = props;
109
+ return didError ? /* @__PURE__ */ jsxRuntime.jsx(
110
+ "div",
111
+ {
112
+ className: `inline-block bg-gray-100 text-center align-middle ${className ?? ""}`,
113
+ style,
114
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center w-full h-full", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: ERROR_IMG_SRC, alt: "Error loading image", ...rest, "data-original-url": src }) })
115
+ }
116
+ ) : /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, className, style, ...rest, onError: handleError });
117
+ }
118
+
119
+ exports.Badge = Badge;
120
+ exports.ImageWithFallback = ImageWithFallback;
121
+ exports.Progress = Progress;
122
+ exports.badgeVariants = badgeVariants;
@@ -0,0 +1,122 @@
1
+ 'use strict';
2
+
3
+ const jsxRuntime = require('react/jsx-runtime');
4
+ const reactSlot = require('@radix-ui/react-slot');
5
+ const classVarianceAuthority = require('class-variance-authority');
6
+ const button = require('./button-BYtQygX5.cjs');
7
+ const ProgressPrimitive = require('@radix-ui/react-progress');
8
+ const React = require('react');
9
+
10
+ function _interopNamespaceDefault(e) {
11
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
12
+ if (e) {
13
+ for (const k in e) {
14
+ if (k !== 'default') {
15
+ const d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: () => e[k]
19
+ });
20
+ }
21
+ }
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ const ProgressPrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(ProgressPrimitive);
28
+
29
+ const badgeVariants = classVarianceAuthority.cva(
30
+ "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
31
+ {
32
+ variants: {
33
+ variant: {
34
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
35
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
36
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
37
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
38
+ success: "border-transparent bg-success text-success-foreground",
39
+ warning: "border-transparent bg-warning text-warning-foreground",
40
+ info: "border-transparent bg-info text-info-foreground"
41
+ }
42
+ },
43
+ defaultVariants: {
44
+ variant: "default"
45
+ }
46
+ }
47
+ );
48
+ function Badge({
49
+ className,
50
+ variant,
51
+ asChild = false,
52
+ children,
53
+ ...props
54
+ }) {
55
+ const Comp = asChild ? reactSlot.Slot : "span";
56
+ return /* @__PURE__ */ jsxRuntime.jsx(Comp, { "data-slot": "badge", className: button.cn(badgeVariants({ variant }), className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slottable, { children }) });
57
+ }
58
+
59
+ const trackVariants = {
60
+ default: "bg-primary/20",
61
+ success: "bg-success/20",
62
+ info: "bg-info/20",
63
+ warning: "bg-warning/20",
64
+ destructive: "bg-destructive/20"
65
+ };
66
+ const indicatorVariants = {
67
+ default: "bg-primary",
68
+ success: "bg-success",
69
+ info: "bg-info",
70
+ warning: "bg-warning",
71
+ destructive: "bg-destructive"
72
+ };
73
+ function Progress({
74
+ className,
75
+ value,
76
+ variant = "default",
77
+ ...props
78
+ }) {
79
+ return /* @__PURE__ */ jsxRuntime.jsx(
80
+ ProgressPrimitive__namespace.Root,
81
+ {
82
+ "data-slot": "progress",
83
+ "aria-label": props["aria-label"] || "Progresso",
84
+ className: button.cn(
85
+ "relative h-2 w-full overflow-hidden rounded-full",
86
+ trackVariants[variant],
87
+ className
88
+ ),
89
+ ...props,
90
+ children: /* @__PURE__ */ jsxRuntime.jsx(
91
+ ProgressPrimitive__namespace.Indicator,
92
+ {
93
+ "data-slot": "progress-indicator",
94
+ className: button.cn("h-full w-full flex-1 transition-all", indicatorVariants[variant]),
95
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
96
+ }
97
+ )
98
+ }
99
+ );
100
+ }
101
+
102
+ const ERROR_IMG_SRC = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==";
103
+ function ImageWithFallback(props) {
104
+ const [didError, setDidError] = React.useState(false);
105
+ const handleError = () => {
106
+ setDidError(true);
107
+ };
108
+ const { src, alt, style, className, ...rest } = props;
109
+ return didError ? /* @__PURE__ */ jsxRuntime.jsx(
110
+ "div",
111
+ {
112
+ className: `inline-block bg-gray-100 text-center align-middle ${className ?? ""}`,
113
+ style,
114
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center w-full h-full", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: ERROR_IMG_SRC, alt: "Error loading image", ...rest, "data-original-url": src }) })
115
+ }
116
+ ) : /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, className, style, ...rest, onError: handleError });
117
+ }
118
+
119
+ exports.Badge = Badge;
120
+ exports.ImageWithFallback = ImageWithFallback;
121
+ exports.Progress = Progress;
122
+ exports.badgeVariants = badgeVariants;
@@ -0,0 +1,98 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Slot, Slottable } from '@radix-ui/react-slot';
3
+ import { cva } from 'class-variance-authority';
4
+ import { c as cn } from './button-CUPDQews.js';
5
+ import * as ProgressPrimitive from '@radix-ui/react-progress';
6
+ import { useState } from 'react';
7
+
8
+ const badgeVariants = cva(
9
+ "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
10
+ {
11
+ variants: {
12
+ variant: {
13
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
14
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
15
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
16
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
17
+ success: "border-transparent bg-success text-success-foreground",
18
+ warning: "border-transparent bg-warning text-warning-foreground",
19
+ info: "border-transparent bg-info text-info-foreground"
20
+ }
21
+ },
22
+ defaultVariants: {
23
+ variant: "default"
24
+ }
25
+ }
26
+ );
27
+ function Badge({
28
+ className,
29
+ variant,
30
+ asChild = false,
31
+ children,
32
+ ...props
33
+ }) {
34
+ const Comp = asChild ? Slot : "span";
35
+ return /* @__PURE__ */ jsx(Comp, { "data-slot": "badge", className: cn(badgeVariants({ variant }), className), ...props, children: /* @__PURE__ */ jsx(Slottable, { children }) });
36
+ }
37
+
38
+ const trackVariants = {
39
+ default: "bg-primary/20",
40
+ success: "bg-success/20",
41
+ info: "bg-info/20",
42
+ warning: "bg-warning/20",
43
+ destructive: "bg-destructive/20"
44
+ };
45
+ const indicatorVariants = {
46
+ default: "bg-primary",
47
+ success: "bg-success",
48
+ info: "bg-info",
49
+ warning: "bg-warning",
50
+ destructive: "bg-destructive"
51
+ };
52
+ function Progress({
53
+ className,
54
+ value,
55
+ variant = "default",
56
+ ...props
57
+ }) {
58
+ return /* @__PURE__ */ jsx(
59
+ ProgressPrimitive.Root,
60
+ {
61
+ "data-slot": "progress",
62
+ "aria-label": props["aria-label"] || "Progresso",
63
+ className: cn(
64
+ "relative h-2 w-full overflow-hidden rounded-full",
65
+ trackVariants[variant],
66
+ className
67
+ ),
68
+ ...props,
69
+ children: /* @__PURE__ */ jsx(
70
+ ProgressPrimitive.Indicator,
71
+ {
72
+ "data-slot": "progress-indicator",
73
+ className: cn("h-full w-full flex-1 transition-all", indicatorVariants[variant]),
74
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
75
+ }
76
+ )
77
+ }
78
+ );
79
+ }
80
+
81
+ const ERROR_IMG_SRC = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==";
82
+ function ImageWithFallback(props) {
83
+ const [didError, setDidError] = useState(false);
84
+ const handleError = () => {
85
+ setDidError(true);
86
+ };
87
+ const { src, alt, style, className, ...rest } = props;
88
+ return didError ? /* @__PURE__ */ jsx(
89
+ "div",
90
+ {
91
+ className: `inline-block bg-gray-100 text-center align-middle ${className ?? ""}`,
92
+ style,
93
+ children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center w-full h-full", children: /* @__PURE__ */ jsx("img", { src: ERROR_IMG_SRC, alt: "Error loading image", ...rest, "data-original-url": src }) })
94
+ }
95
+ ) : /* @__PURE__ */ jsx("img", { src, alt, className, style, ...rest, onError: handleError });
96
+ }
97
+
98
+ export { Badge as B, ImageWithFallback as I, Progress as P, badgeVariants as b };
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ const jsxRuntime = require('react/jsx-runtime');
4
+ const select = require('./select-CwRzQHA7.cjs');
5
+ const lucideReact = require('lucide-react');
6
+ const reactI18next = require('react-i18next');
7
+ const LanguageContext = require('./LanguageContext-CjhSSqJT.cjs');
8
+
9
+ function LanguageSelector({
10
+ showLabel = false,
11
+ variant = "default",
12
+ showIcon = true,
13
+ className = "",
14
+ showWhenMonolingual = false
15
+ }) {
16
+ const { language, setLanguage, availableLanguages, isMonolingual } = LanguageContext.useLanguage();
17
+ const { t } = reactI18next.useTranslation();
18
+ if (isMonolingual && !showWhenMonolingual) {
19
+ return null;
20
+ }
21
+ const items = availableLanguages.map((lang) => {
22
+ const knownLabelKey = lang.code === "pt-BR" ? "languageSelector.ptBR" : lang.code === "en" ? "languageSelector.en" : lang.code === "es" ? "languageSelector.es" : null;
23
+ return {
24
+ value: lang.code,
25
+ label: knownLabelKey ? t(knownLabelKey, lang.label) : lang.label,
26
+ // Fall back to the first two characters of the code if no shortLabel given
27
+ minimalLabel: lang.shortLabel ?? lang.code.slice(0, 2).toUpperCase()
28
+ };
29
+ });
30
+ const currentItem = items.find((l) => l.value === language) ?? items[0];
31
+ const displayLabel = variant === "minimal" ? currentItem.minimalLabel : currentItem.label;
32
+ return /* @__PURE__ */ jsxRuntime.jsxs(select.Select, { value: language, onValueChange: (val) => setLanguage(val), children: [
33
+ /* @__PURE__ */ jsxRuntime.jsxs(
34
+ select.SelectTrigger,
35
+ {
36
+ className: `h-9 gap-2 px-3 border-none shadow-none focus:ring-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground ${className}`,
37
+ "aria-label": t("languageSelector.label", "Selecionar idioma"),
38
+ children: [
39
+ showIcon && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Globe, { className: "h-4 w-4 shrink-0" }),
40
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: displayLabel })
41
+ ]
42
+ }
43
+ ),
44
+ /* @__PURE__ */ jsxRuntime.jsx(select.SelectContent, { align: "end", children: items.map(({ value, label }) => /* @__PURE__ */ jsxRuntime.jsx(select.SelectItem, { value, children: label }, value)) })
45
+ ] });
46
+ }
47
+
48
+ exports.LanguageSelector = LanguageSelector;
@@ -0,0 +1,46 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { S as Select, h as SelectTrigger, a as SelectContent, c as SelectItem } from './select-BNfFJwYp.js';
3
+ import { Globe } from 'lucide-react';
4
+ import { useTranslation } from 'react-i18next';
5
+ import { u as useLanguage } from './LanguageContext-CX_zdxre.js';
6
+
7
+ function LanguageSelector({
8
+ showLabel = false,
9
+ variant = "default",
10
+ showIcon = true,
11
+ className = "",
12
+ showWhenMonolingual = false
13
+ }) {
14
+ const { language, setLanguage, availableLanguages, isMonolingual } = useLanguage();
15
+ const { t } = useTranslation();
16
+ if (isMonolingual && !showWhenMonolingual) {
17
+ return null;
18
+ }
19
+ const items = availableLanguages.map((lang) => {
20
+ const knownLabelKey = lang.code === "pt-BR" ? "languageSelector.ptBR" : lang.code === "en" ? "languageSelector.en" : lang.code === "es" ? "languageSelector.es" : null;
21
+ return {
22
+ value: lang.code,
23
+ label: knownLabelKey ? t(knownLabelKey, lang.label) : lang.label,
24
+ // Fall back to the first two characters of the code if no shortLabel given
25
+ minimalLabel: lang.shortLabel ?? lang.code.slice(0, 2).toUpperCase()
26
+ };
27
+ });
28
+ const currentItem = items.find((l) => l.value === language) ?? items[0];
29
+ const displayLabel = variant === "minimal" ? currentItem.minimalLabel : currentItem.label;
30
+ return /* @__PURE__ */ jsxs(Select, { value: language, onValueChange: (val) => setLanguage(val), children: [
31
+ /* @__PURE__ */ jsxs(
32
+ SelectTrigger,
33
+ {
34
+ className: `h-9 gap-2 px-3 border-none shadow-none focus:ring-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground ${className}`,
35
+ "aria-label": t("languageSelector.label", "Selecionar idioma"),
36
+ children: [
37
+ showIcon && /* @__PURE__ */ jsx(Globe, { className: "h-4 w-4 shrink-0" }),
38
+ /* @__PURE__ */ jsx("span", { className: "text-sm", children: displayLabel })
39
+ ]
40
+ }
41
+ ),
42
+ /* @__PURE__ */ jsx(SelectContent, { align: "end", children: items.map(({ value, label }) => /* @__PURE__ */ jsx(SelectItem, { value, children: label }, value)) })
43
+ ] });
44
+ }
45
+
46
+ export { LanguageSelector as L };