xertica-ui 1.0.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 (141) hide show
  1. package/App.tsx +182 -0
  2. package/README.md +330 -0
  3. package/assets/xertica-logo.svg +38 -0
  4. package/assets/xertica-x-logo.svg +21 -0
  5. package/bin/cli.ts +193 -0
  6. package/components/AssistenteXertica.tsx +2003 -0
  7. package/components/AudioPlayer.tsx +203 -0
  8. package/components/CodeBlock.tsx +242 -0
  9. package/components/DocumentEditor.tsx +504 -0
  10. package/components/ForgotPasswordPage.tsx +170 -0
  11. package/components/FormattedDocument.tsx +87 -0
  12. package/components/HomeContent.tsx +123 -0
  13. package/components/HomePage.tsx +70 -0
  14. package/components/LanguageSelector.tsx +54 -0
  15. package/components/LoginPage.tsx +199 -0
  16. package/components/MarkdownMessage.tsx +62 -0
  17. package/components/ModernChatInput.tsx +502 -0
  18. package/components/PodcastPlayer.tsx +409 -0
  19. package/components/ResetPasswordPage.tsx +234 -0
  20. package/components/Sidebar.tsx +489 -0
  21. package/components/TemplateContent.tsx +629 -0
  22. package/components/TemplatePage.tsx +70 -0
  23. package/components/ThemeToggle.tsx +65 -0
  24. package/components/VerifyEmailPage.tsx +187 -0
  25. package/components/XerticaLogo.tsx +69 -0
  26. package/components/XerticaOrbe.tsx +1339 -0
  27. package/components/XerticaXLogo.tsx +53 -0
  28. package/components/examples/DrawingMapExample.tsx +530 -0
  29. package/components/examples/FilterableMapExample.tsx +380 -0
  30. package/components/examples/LocationPickerExample.tsx +330 -0
  31. package/components/examples/MapExamples.tsx +280 -0
  32. package/components/examples/MapShowcase.tsx +446 -0
  33. package/components/examples/RouteMapExamples.tsx +329 -0
  34. package/components/examples/SimpleFilterableMap.tsx +192 -0
  35. package/components/examples/index.ts +52 -0
  36. package/components/figma/ImageWithFallback.tsx +27 -0
  37. package/components/index.ts +44 -0
  38. package/components/media/AudioPlayer.tsx +278 -0
  39. package/components/media/FloatingMediaWrapper.tsx +166 -0
  40. package/components/media/VideoPlayer.tsx +285 -0
  41. package/components/ui/accordion.tsx +66 -0
  42. package/components/ui/alert-dialog.tsx +159 -0
  43. package/components/ui/alert.tsx +91 -0
  44. package/components/ui/aspect-ratio.tsx +11 -0
  45. package/components/ui/avatar.tsx +65 -0
  46. package/components/ui/badge.tsx +55 -0
  47. package/components/ui/breadcrumb.tsx +109 -0
  48. package/components/ui/button.tsx +78 -0
  49. package/components/ui/calendar.tsx +235 -0
  50. package/components/ui/card.tsx +92 -0
  51. package/components/ui/carousel.tsx +241 -0
  52. package/components/ui/chart.tsx +353 -0
  53. package/components/ui/checkbox.tsx +32 -0
  54. package/components/ui/collapsible.tsx +33 -0
  55. package/components/ui/command.tsx +177 -0
  56. package/components/ui/context-menu.tsx +252 -0
  57. package/components/ui/dialog.tsx +138 -0
  58. package/components/ui/drawer.tsx +134 -0
  59. package/components/ui/dropdown-menu.tsx +257 -0
  60. package/components/ui/empty.tsx +90 -0
  61. package/components/ui/file-upload.tsx +152 -0
  62. package/components/ui/form.tsx +195 -0
  63. package/components/ui/google-maps-loader.tsx +379 -0
  64. package/components/ui/hover-card.tsx +44 -0
  65. package/components/ui/index.ts +242 -0
  66. package/components/ui/input-otp.tsx +77 -0
  67. package/components/ui/input.tsx +38 -0
  68. package/components/ui/label.tsx +24 -0
  69. package/components/ui/map-config.ts +12 -0
  70. package/components/ui/map-layers.tsx +129 -0
  71. package/components/ui/map.exports.ts +31 -0
  72. package/components/ui/map.tsx +412 -0
  73. package/components/ui/menubar.tsx +276 -0
  74. package/components/ui/navigation-menu.tsx +162 -0
  75. package/components/ui/notification-badge.tsx +61 -0
  76. package/components/ui/page-header.tsx +229 -0
  77. package/components/ui/pagination.tsx +127 -0
  78. package/components/ui/popover.tsx +48 -0
  79. package/components/ui/progress.tsx +31 -0
  80. package/components/ui/radio-group.tsx +56 -0
  81. package/components/ui/rating.tsx +102 -0
  82. package/components/ui/resizable.tsx +405 -0
  83. package/components/ui/route-map.tsx +246 -0
  84. package/components/ui/scroll-area.tsx +58 -0
  85. package/components/ui/search.tsx +70 -0
  86. package/components/ui/select.tsx +176 -0
  87. package/components/ui/separator.tsx +28 -0
  88. package/components/ui/sheet.tsx +138 -0
  89. package/components/ui/sidebar.tsx +726 -0
  90. package/components/ui/simple-map.tsx +92 -0
  91. package/components/ui/skeleton.tsx +13 -0
  92. package/components/ui/slider.tsx +58 -0
  93. package/components/ui/sonner.tsx +77 -0
  94. package/components/ui/stats-card.tsx +84 -0
  95. package/components/ui/stepper.tsx +126 -0
  96. package/components/ui/switch.tsx +34 -0
  97. package/components/ui/table.tsx +116 -0
  98. package/components/ui/tabs.tsx +66 -0
  99. package/components/ui/textarea.tsx +26 -0
  100. package/components/ui/timeline.tsx +140 -0
  101. package/components/ui/toggle-group.tsx +71 -0
  102. package/components/ui/toggle.tsx +46 -0
  103. package/components/ui/tooltip.tsx +61 -0
  104. package/components/ui/tree-view.tsx +123 -0
  105. package/components/ui/use-mobile.ts +24 -0
  106. package/components/ui/utils.ts +6 -0
  107. package/components/ui/xertica-assistant.tsx +1420 -0
  108. package/contexts/ApiKeyContext.tsx +123 -0
  109. package/contexts/AssistenteContext.tsx +118 -0
  110. package/contexts/BrandColorsContext.tsx +551 -0
  111. package/contexts/LanguageContext.tsx +36 -0
  112. package/contexts/ThemeContext.tsx +85 -0
  113. package/dist/cli.js +20922 -0
  114. package/eslint.config.js +41 -0
  115. package/guidelines/Guidelines.md +61 -0
  116. package/hooks/useTheme.ts +4 -0
  117. package/imports/Podcast.tsx +389 -0
  118. package/imports/XerticaAi.tsx +46 -0
  119. package/imports/XerticaX.tsx +20 -0
  120. package/imports/svg-aueiaqngck.ts +11 -0
  121. package/imports/svg-v9krss1ozd.ts +16 -0
  122. package/imports/svg-vhrdofe3qe.ts +5 -0
  123. package/index.css +4448 -0
  124. package/index.html +14 -0
  125. package/main.tsx +10 -0
  126. package/package.json +119 -0
  127. package/postcss.config.js +6 -0
  128. package/routes.tsx +33 -0
  129. package/styles/globals.css +15 -0
  130. package/styles/xertica/app-overrides/chat.css +61 -0
  131. package/styles/xertica/app-overrides/scrollbar.css +33 -0
  132. package/styles/xertica/base.css +70 -0
  133. package/styles/xertica/integrations/google-maps.css +76 -0
  134. package/styles/xertica/integrations/sonner.css +73 -0
  135. package/styles/xertica/theme-map.css +88 -0
  136. package/styles/xertica/tokens.css +190 -0
  137. package/tsconfig.json +31 -0
  138. package/tsconfig.node.json +10 -0
  139. package/utils/gemini.ts +140 -0
  140. package/vite-env.d.ts +12 -0
  141. package/vite.config.ts +36 -0
package/index.html ADDED
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html lang="pt-BR">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/assets/xertica-x-logo.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <meta name="description" content="Xertica UI - Design System completo com componentes React e Tailwind CSS" />
8
+ <title>Xertica UI</title>
9
+ </head>
10
+ <body>
11
+ <div id="root"></div>
12
+ <script type="module" src="/main.tsx"></script>
13
+ </body>
14
+ </html>
package/main.tsx ADDED
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+ import App from './App';
4
+ import './styles/globals.css';
5
+
6
+ ReactDOM.createRoot(document.getElementById('root')!).render(
7
+ <React.StrictMode>
8
+ <App />
9
+ </React.StrictMode>
10
+ );
package/package.json ADDED
@@ -0,0 +1,119 @@
1
+ {
2
+ "name": "xertica-ui",
3
+ "version": "1.0.0",
4
+ "description": "Xertica UI - Design System completo com componentes React e Tailwind CSS",
5
+ "type": "module",
6
+ "bin": "./dist/cli.js",
7
+ "scripts": {
8
+ "dev": "vite",
9
+ "build": "vite build",
10
+ "build:production": "npm run build",
11
+ "build:cli": "tsup bin/cli.ts --format esm --clean",
12
+ "preview": "vite preview",
13
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
14
+ "type-check": "tsc --noEmit"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "bin",
19
+ "components",
20
+ "contexts",
21
+ "styles",
22
+ "hooks",
23
+ "assets",
24
+ "imports",
25
+ "utils",
26
+ "guidelines",
27
+ "App.tsx",
28
+ "main.tsx",
29
+ "index.css",
30
+ "index.html",
31
+ "routes.tsx",
32
+ "vite.config.ts",
33
+ "tsconfig.json",
34
+ "tsconfig.node.json",
35
+ "postcss.config.js",
36
+ "vite-env.d.ts",
37
+ "eslint.config.js"
38
+ ],
39
+ "dependencies": {
40
+ "@google/generative-ai": "^0.21.0",
41
+ "@hookform/resolvers": "^3.9.1",
42
+ "@radix-ui/react-accordion": "^1.2.2",
43
+ "@radix-ui/react-alert-dialog": "^1.1.4",
44
+ "@radix-ui/react-aspect-ratio": "^1.1.1",
45
+ "@radix-ui/react-avatar": "^1.1.2",
46
+ "@radix-ui/react-checkbox": "^1.1.3",
47
+ "@radix-ui/react-collapsible": "^1.1.2",
48
+ "@radix-ui/react-context-menu": "^2.2.4",
49
+ "@radix-ui/react-dialog": "^1.1.4",
50
+ "@radix-ui/react-dropdown-menu": "^2.1.4",
51
+ "@radix-ui/react-hover-card": "^1.1.4",
52
+ "@radix-ui/react-label": "^2.1.1",
53
+ "@radix-ui/react-menubar": "^1.1.4",
54
+ "@radix-ui/react-navigation-menu": "^1.2.3",
55
+ "@radix-ui/react-popover": "^1.1.4",
56
+ "@radix-ui/react-progress": "^1.1.1",
57
+ "@radix-ui/react-radio-group": "^1.2.3",
58
+ "@radix-ui/react-scroll-area": "^1.2.2",
59
+ "@radix-ui/react-select": "^2.1.4",
60
+ "@radix-ui/react-separator": "^1.1.1",
61
+ "@radix-ui/react-slider": "^1.2.1",
62
+ "@radix-ui/react-slot": "^1.1.1",
63
+ "@radix-ui/react-switch": "^1.1.3",
64
+ "@radix-ui/react-tabs": "^1.1.2",
65
+ "@radix-ui/react-toggle": "^1.1.1",
66
+ "@radix-ui/react-toggle-group": "^1.1.1",
67
+ "@radix-ui/react-tooltip": "^1.1.6",
68
+ "chalk": "^5.6.2",
69
+ "class-variance-authority": "^0.7.1",
70
+ "clsx": "^2.1.1",
71
+ "cmdk": "^1.0.4",
72
+ "commander": "^14.0.2",
73
+ "date-fns": "^3.6.0",
74
+ "embla-carousel-react": "^8.5.2",
75
+ "execa": "^9.6.1",
76
+ "framer-motion": "^11.15.0",
77
+ "fs-extra": "^11.3.3",
78
+ "input-otp": "^1.4.1",
79
+ "lucide-react": "^0.469.0",
80
+ "ora": "^9.1.0",
81
+ "prompts": "^2.4.2",
82
+ "re-resizable": "^6.9.17",
83
+ "react": "^18.3.1",
84
+ "react-day-picker": "^9.13.0",
85
+ "react-dom": "^18.3.1",
86
+ "react-hook-form": "^7.55.0",
87
+ "react-resizable-panels": "^2.1.7",
88
+ "react-router-dom": "^7.1.3",
89
+ "react-syntax-highlighter": "^15.6.1",
90
+ "recharts": "^2.15.0",
91
+ "sonner": "^1.7.3",
92
+ "tailwind-merge": "^2.6.0",
93
+ "tailwindcss-animate": "^1.0.7",
94
+ "vaul": "^1.1.2",
95
+ "zod": "^3.24.1"
96
+ },
97
+ "devDependencies": {
98
+ "@tailwindcss/postcss": "^4.0.0",
99
+ "@types/fs-extra": "^11.0.4",
100
+ "@types/node": "^22.19.7",
101
+ "@types/prompts": "^2.4.9",
102
+ "@types/react": "^18.3.18",
103
+ "@types/react-dom": "^18.3.5",
104
+ "@types/react-syntax-highlighter": "^15.5.13",
105
+ "@typescript-eslint/eslint-plugin": "^8.19.1",
106
+ "@typescript-eslint/parser": "^8.19.1",
107
+ "@vitejs/plugin-react": "^4.3.4",
108
+ "autoprefixer": "^10.4.20",
109
+ "eslint": "^9.18.0",
110
+ "eslint-plugin-react-hooks": "^5.1.0",
111
+ "eslint-plugin-react-refresh": "^0.4.16",
112
+ "globals": "^15.14.0",
113
+ "postcss": "^8.4.49",
114
+ "tailwindcss": "^4.0.0",
115
+ "tsup": "^8.5.1",
116
+ "typescript": "^5.7.2",
117
+ "vite": "^6.0.5"
118
+ }
119
+ }
@@ -0,0 +1,6 @@
1
+ export default {
2
+ plugins: {
3
+ "@tailwindcss/postcss": {},
4
+ autoprefixer: {},
5
+ },
6
+ };
package/routes.tsx ADDED
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { Home, FileText } from 'lucide-react';
3
+
4
+ export interface RouteConfig {
5
+ path: string;
6
+ label: string;
7
+ icon: React.ComponentType<any>;
8
+ component?: React.ComponentType<any>;
9
+ }
10
+
11
+ // Available routes configuration
12
+ export const routes: RouteConfig[] = [
13
+ {
14
+ path: '/home',
15
+ label: 'Home',
16
+ icon: Home,
17
+ },
18
+ {
19
+ path: '/template',
20
+ label: 'Template',
21
+ icon: FileText,
22
+ },
23
+ ];
24
+
25
+ // Helper function to get route by path
26
+ export const getRouteByPath = (path: string): RouteConfig | undefined => {
27
+ return routes.find(route => route.path === path);
28
+ };
29
+
30
+ // Helper function to check if a path is valid
31
+ export const isValidRoute = (path: string): boolean => {
32
+ return routes.some(route => route.path === path);
33
+ };
@@ -0,0 +1,15 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;600;700;800&display=swap');
2
+
3
+ /* Core Design System */
4
+ @import "./xertica/base.css";
5
+ @import "./xertica/tokens.css";
6
+ @import "./xertica/theme-map.css";
7
+
8
+ /* Integrations */
9
+ @import "./xertica/integrations/sonner.css";
10
+ /* @import "./xertica/integrations/calendar.css"; */
11
+ @import "./xertica/integrations/google-maps.css";
12
+
13
+ /* App Specific Overrides */
14
+ /* @import "./xertica/app-overrides/chat.css"; */
15
+ /* @import "./xertica/app-overrides/scrollbar.css"; */
@@ -0,0 +1,61 @@
1
+ /* ============================================
2
+ 🔧 APP OVERRIDE: CHAT
3
+ ============================================ */
4
+
5
+ /* All rules scoped to [data-chat-message-container] */
6
+
7
+ [data-chat-message-container] .break-words img,
8
+ [data-chat-message-container] .overflow-wrap-anywhere img {
9
+ max-width: 100%;
10
+ height: auto;
11
+ }
12
+
13
+ [data-chat-message-container] .break-words pre,
14
+ [data-chat-message-container] .overflow-wrap-anywhere pre {
15
+ max-width: 100%;
16
+ overflow-x: auto;
17
+ white-space: pre-wrap;
18
+ word-wrap: break-word;
19
+ }
20
+
21
+ [data-chat-message-container] .break-words table,
22
+ [data-chat-message-container] .overflow-wrap-anywhere table {
23
+ max-width: 100%;
24
+ overflow-x: auto;
25
+ display: block;
26
+ }
27
+
28
+ [data-chat-message-container] .break-words > *,
29
+ [data-chat-message-container] .overflow-hidden > * {
30
+ max-width: 100%;
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ [data-chat-message-container] audio,
35
+ [data-chat-message-container] video,
36
+ [data-chat-message-container] iframe {
37
+ max-width: 100%;
38
+ width: 100%;
39
+ }
40
+
41
+ /* Prevent horizontal overflow in chat */
42
+ [data-chat-message-container] [data-slot="scroll-area-viewport"] {
43
+ overflow-x: hidden !important;
44
+ }
45
+
46
+ /* Chat message container - prevent overflow */
47
+ [data-chat-message-container] {
48
+ width: auto;
49
+ max-width: 100%;
50
+ overflow-x: hidden;
51
+ box-sizing: border-box;
52
+ }
53
+
54
+ [data-chat-message-container] * {
55
+ box-sizing: border-box;
56
+ }
57
+
58
+ [data-chat-message-container] > div {
59
+ max-width: 100%;
60
+ overflow-x: hidden;
61
+ }
@@ -0,0 +1,33 @@
1
+ /* ============================================
2
+ 🔧 APP OVERRIDE: SCROLLBAR
3
+ ============================================ */
4
+
5
+ /* Custom scrollbar */
6
+ [data-custom-scrollbar]::-webkit-scrollbar {
7
+ width: 8px;
8
+ }
9
+
10
+ [data-custom-scrollbar]::-webkit-scrollbar-track {
11
+ background: var(--muted);
12
+ border-radius: var(--radius);
13
+ }
14
+
15
+ [data-custom-scrollbar]::-webkit-scrollbar-thumb {
16
+ background: linear-gradient(180deg, var(--primary) 0%, var(--xertica-dark) 100%);
17
+ border-radius: var(--radius);
18
+ transition: background 0.3s ease;
19
+ }
20
+
21
+ [data-custom-scrollbar]::-webkit-scrollbar-thumb:hover {
22
+ background: var(--primary);
23
+ }
24
+
25
+ [data-custom-scrollbar]::-webkit-scrollbar-thumb:active {
26
+ background: var(--xertica-dark);
27
+ }
28
+
29
+ /* Firefox */
30
+ [data-custom-scrollbar] {
31
+ scrollbar-width: thin;
32
+ scrollbar-color: var(--primary) var(--muted);
33
+ }
@@ -0,0 +1,70 @@
1
+ /* ============================================
2
+ 🧱 BASE STYLES
3
+ ============================================ */
4
+
5
+ @import "tailwindcss";
6
+
7
+ @custom-variant dark (&:is(.dark *));
8
+
9
+ @layer base {
10
+ * {
11
+ @apply border-border outline-ring/50;
12
+ }
13
+
14
+ body {
15
+ @apply bg-background text-foreground;
16
+ font-family: 'Roboto', sans-serif;
17
+ }
18
+
19
+ html {
20
+ font-size: var(--font-size);
21
+ }
22
+
23
+ h1 {
24
+ font-size: var(--text-h1);
25
+ font-weight: var(--font-weight-extrabold);
26
+ line-height: 1.2;
27
+ }
28
+
29
+ h2 {
30
+ font-size: var(--text-h2);
31
+ font-weight: var(--font-weight-semibold);
32
+ line-height: 1.2;
33
+ }
34
+
35
+ h3 {
36
+ font-size: var(--text-h3);
37
+ font-weight: var(--font-weight-semibold);
38
+ line-height: 1.2;
39
+ }
40
+
41
+ h4 {
42
+ font-size: var(--text-h4);
43
+ font-weight: var(--font-weight-semibold);
44
+ line-height: 1.2;
45
+ }
46
+
47
+ p {
48
+ font-size: var(--text-p);
49
+ font-weight: var(--font-weight-regular);
50
+ line-height: 1.5;
51
+ }
52
+
53
+ label {
54
+ font-size: var(--text-label);
55
+ font-weight: var(--font-weight-semibold);
56
+ line-height: 1.3;
57
+ }
58
+
59
+ button {
60
+ font-size: var(--text-small);
61
+ font-weight: var(--font-weight-medium);
62
+ line-height: 1.4;
63
+ }
64
+
65
+ input {
66
+ font-size: var(--text-small);
67
+ font-weight: var(--font-weight-regular);
68
+ line-height: 1.4;
69
+ }
70
+ }
@@ -0,0 +1,76 @@
1
+ /* ============================================
2
+ 🧩 INTEGRATION: GOOGLE MAPS
3
+ ============================================ */
4
+
5
+ /* Google Maps InfoWindow Customization */
6
+ .gm-style .gm-style-iw-c {
7
+ background-color: var(--popover) !important;
8
+ border-radius: var(--radius-lg) !important;
9
+ box-shadow: var(--elevation-sm) !important;
10
+ padding: 0 !important;
11
+ border: 1px solid var(--border) !important;
12
+ }
13
+
14
+ .gm-style .gm-style-iw-d {
15
+ overflow: auto !important;
16
+ max-height: none !important;
17
+ }
18
+
19
+ /* Fix for Native POIs */
20
+ .gm-style .gm-style-iw-c .gm-style-iw-ch {
21
+ padding-top: var(--spacing-3) !important;
22
+ padding-left: var(--spacing-4) !important;
23
+ padding-right: var(--spacing-8) !important;
24
+ padding-bottom: var(--spacing-2) !important;
25
+ }
26
+
27
+ .gm-style .gm-style-iw-c .gm-style-iw-d .poi-info-window,
28
+ .gm-style .gm-style-iw-c .gm-style-iw-d .transit-container {
29
+ padding: var(--spacing-4) !important;
30
+ padding-top: 0 !important;
31
+ }
32
+
33
+ /* Close button - popover style */
34
+ .gm-style .gm-ui-hover-effect {
35
+ opacity: 1 !important;
36
+ width: 32px !important;
37
+ height: 32px !important;
38
+ top: 8px !important;
39
+ right: 8px !important;
40
+ background-color: var(--muted) !important;
41
+ border-radius: var(--radius) !important;
42
+ transition: all 0.2s ease !important;
43
+ }
44
+
45
+ .gm-style .gm-ui-hover-effect:hover {
46
+ background-color: var(--accent) !important;
47
+ }
48
+
49
+ .gm-style .gm-ui-hover-effect > span {
50
+ background-color: var(--foreground) !important;
51
+ width: 14px !important;
52
+ height: 14px !important;
53
+ margin: 9px !important;
54
+ }
55
+
56
+ /* InfoWindow Tip - popover style */
57
+ .gm-style .gm-style-iw-t::after {
58
+ background: var(--popover) !important;
59
+ box-shadow: -2px 2px 2px 0 rgba(0, 0, 0, 0.1) !important;
60
+ border: 1px solid var(--border) !important;
61
+ }
62
+
63
+ /* Custom Content Class */
64
+ .xertica-infowindow-content {
65
+ font-family: 'Roboto', sans-serif !important;
66
+ color: var(--popover-foreground) !important;
67
+ }
68
+
69
+ .xertica-infowindow-content * {
70
+ font-family: 'Roboto', sans-serif !important;
71
+ }
72
+
73
+ /* Standard content override */
74
+ .gm-style .gm-style-iw-c * {
75
+ font-family: 'Roboto', sans-serif !important;
76
+ }
@@ -0,0 +1,73 @@
1
+ /* ============================================
2
+ 🧩 INTEGRATION: SONNER
3
+ ============================================ */
4
+
5
+ /* Sonner Toast customization - styling Alert-like (borderless, flat, colored icons) */
6
+ [data-sonner-toast] {
7
+ font-family: 'Roboto', sans-serif !important;
8
+ border-radius: var(--radius) !important;
9
+ background: var(--card) !important;
10
+ border: 0 !important;
11
+ border-left: 4px solid transparent !important;
12
+ box-shadow: var(--elevation-sm) !important;
13
+ color: var(--foreground) !important;
14
+ padding: 1rem !important;
15
+ }
16
+
17
+ [data-sonner-toast][data-type="success"] {
18
+ background: var(--toast-success-bg) !important;
19
+ border-left-color: var(--toast-success-border) !important;
20
+ }
21
+
22
+ [data-sonner-toast][data-type="success"] [data-icon] {
23
+ color: var(--toast-success-icon) !important;
24
+ }
25
+
26
+ [data-sonner-toast][data-type="warning"] {
27
+ background: var(--toast-warning-bg) !important;
28
+ border-left-color: var(--toast-warning-border) !important;
29
+ }
30
+
31
+ [data-sonner-toast][data-type="warning"] [data-icon] {
32
+ color: var(--toast-warning-icon) !important;
33
+ }
34
+
35
+ [data-sonner-toast][data-type="info"] {
36
+ background: var(--toast-info-bg) !important;
37
+ border-left-color: var(--toast-info-border) !important;
38
+ }
39
+
40
+ [data-sonner-toast][data-type="info"] [data-icon] {
41
+ color: var(--toast-info-icon) !important;
42
+ }
43
+
44
+ [data-sonner-toast][data-type="error"] {
45
+ background: var(--toast-error-bg) !important;
46
+ border-left-color: var(--toast-error-border) !important;
47
+ }
48
+
49
+ [data-sonner-toast][data-type="error"] [data-icon] {
50
+ color: var(--toast-error-icon) !important;
51
+ }
52
+
53
+ /* Toast description text */
54
+ [data-sonner-toast] [data-description] {
55
+ color: var(--foreground) !important;
56
+ opacity: 0.9;
57
+ }
58
+
59
+ /* Toast buttons */
60
+ [data-sonner-toast] [data-button] {
61
+ font-family: 'Roboto', sans-serif !important;
62
+ border-radius: var(--radius) !important;
63
+ }
64
+
65
+ [data-sonner-toast] [data-button][data-primary] {
66
+ background: var(--primary) !important;
67
+ color: var(--primary-foreground) !important;
68
+ }
69
+
70
+ [data-sonner-toast] [data-button][data-cancel] {
71
+ background: var(--muted) !important;
72
+ color: var(--muted-foreground) !important;
73
+ }
@@ -0,0 +1,88 @@
1
+ /* ============================================
2
+ 🎨 THEME MAPPING
3
+ ============================================ */
4
+
5
+ @theme inline {
6
+ --color-background: var(--background);
7
+ --color-foreground: var(--foreground);
8
+ --color-card: var(--card);
9
+ --color-card-foreground: var(--card-foreground);
10
+ --color-popover: var(--popover);
11
+ --color-popover-foreground: var(--popover-foreground);
12
+
13
+ --color-primary: var(--primary);
14
+ --color-primary-foreground: var(--primary-foreground);
15
+ --color-primary-light: var(--primary-light);
16
+ --color-primary-light-foreground: var(--primary-light-foreground);
17
+
18
+ --color-secondary: var(--secondary);
19
+ --color-secondary-foreground: var(--secondary-foreground);
20
+
21
+ --color-muted: var(--muted);
22
+ --color-muted-foreground: var(--muted-foreground);
23
+
24
+ --color-accent: var(--accent);
25
+ --color-accent-foreground: var(--accent-foreground);
26
+
27
+ --color-destructive: var(--destructive);
28
+ --color-destructive-foreground: var(--destructive-foreground);
29
+
30
+ --color-border: var(--border);
31
+ --color-input: var(--input);
32
+ --color-input-background: var(--input-background);
33
+ --color-ring: var(--ring);
34
+
35
+ /* Sidebar */
36
+ --color-sidebar: var(--sidebar);
37
+ --color-sidebar-foreground: var(--sidebar-foreground);
38
+ --color-sidebar-primary: var(--sidebar-primary);
39
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
40
+ --color-sidebar-accent: var(--sidebar-accent);
41
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
42
+ --color-sidebar-border: var(--sidebar-border);
43
+ --color-sidebar-ring: var(--sidebar-ring);
44
+
45
+ /* Charts */
46
+ --color-chart-1: var(--chart-1);
47
+ --color-chart-2: var(--chart-2);
48
+ --color-chart-3: var(--chart-3);
49
+ --color-chart-4: var(--chart-4);
50
+ --color-chart-5: var(--chart-5);
51
+
52
+ /* Radius */
53
+ --radius-sm: calc(var(--radius) - 2px);
54
+ --radius-md: var(--radius);
55
+ --radius-lg: calc(var(--radius) + 6px);
56
+ --radius-xl: calc(var(--radius) + 12px);
57
+ --radius-button: var(--radius-button);
58
+ --radius-card: var(--radius-card);
59
+
60
+ /* Shadow */
61
+ --shadow-elevation-sm: var(--elevation-sm);
62
+
63
+ /* Brand Specific (for fallbacks) */
64
+ --color-xertica-primary: var(--xertica-primary);
65
+ --color-xertica-dark: var(--xertica-dark);
66
+
67
+ /* Gradients */
68
+ --image-gradient-diagonal: var(--gradient-diagonal);
69
+
70
+ /* Typography */
71
+ --text-h1: var(--text-h1);
72
+ --text-h2: var(--text-h2);
73
+ --text-h3: var(--text-h3);
74
+ --text-h4: var(--text-h4);
75
+ --text-base: var(--text-base);
76
+ --text-p: var(--text-p);
77
+ --text-label: var(--text-label);
78
+ --text-small: var(--text-small);
79
+ --text-xs: var(--text-xs);
80
+ --text-muted: var(--text-muted);
81
+ --text-table-head: var(--text-table-head);
82
+
83
+ --font-weight-regular: var(--font-weight-regular);
84
+ --font-weight-medium: var(--font-weight-medium);
85
+ --font-weight-semibold: var(--font-weight-semibold);
86
+ --font-weight-bold: var(--font-weight-bold);
87
+ --font-weight-extrabold: var(--font-weight-extrabold);
88
+ }