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.
- package/App.tsx +182 -0
- package/README.md +330 -0
- package/assets/xertica-logo.svg +38 -0
- package/assets/xertica-x-logo.svg +21 -0
- package/bin/cli.ts +193 -0
- package/components/AssistenteXertica.tsx +2003 -0
- package/components/AudioPlayer.tsx +203 -0
- package/components/CodeBlock.tsx +242 -0
- package/components/DocumentEditor.tsx +504 -0
- package/components/ForgotPasswordPage.tsx +170 -0
- package/components/FormattedDocument.tsx +87 -0
- package/components/HomeContent.tsx +123 -0
- package/components/HomePage.tsx +70 -0
- package/components/LanguageSelector.tsx +54 -0
- package/components/LoginPage.tsx +199 -0
- package/components/MarkdownMessage.tsx +62 -0
- package/components/ModernChatInput.tsx +502 -0
- package/components/PodcastPlayer.tsx +409 -0
- package/components/ResetPasswordPage.tsx +234 -0
- package/components/Sidebar.tsx +489 -0
- package/components/TemplateContent.tsx +629 -0
- package/components/TemplatePage.tsx +70 -0
- package/components/ThemeToggle.tsx +65 -0
- package/components/VerifyEmailPage.tsx +187 -0
- package/components/XerticaLogo.tsx +69 -0
- package/components/XerticaOrbe.tsx +1339 -0
- package/components/XerticaXLogo.tsx +53 -0
- package/components/examples/DrawingMapExample.tsx +530 -0
- package/components/examples/FilterableMapExample.tsx +380 -0
- package/components/examples/LocationPickerExample.tsx +330 -0
- package/components/examples/MapExamples.tsx +280 -0
- package/components/examples/MapShowcase.tsx +446 -0
- package/components/examples/RouteMapExamples.tsx +329 -0
- package/components/examples/SimpleFilterableMap.tsx +192 -0
- package/components/examples/index.ts +52 -0
- package/components/figma/ImageWithFallback.tsx +27 -0
- package/components/index.ts +44 -0
- package/components/media/AudioPlayer.tsx +278 -0
- package/components/media/FloatingMediaWrapper.tsx +166 -0
- package/components/media/VideoPlayer.tsx +285 -0
- package/components/ui/accordion.tsx +66 -0
- package/components/ui/alert-dialog.tsx +159 -0
- package/components/ui/alert.tsx +91 -0
- package/components/ui/aspect-ratio.tsx +11 -0
- package/components/ui/avatar.tsx +65 -0
- package/components/ui/badge.tsx +55 -0
- package/components/ui/breadcrumb.tsx +109 -0
- package/components/ui/button.tsx +78 -0
- package/components/ui/calendar.tsx +235 -0
- package/components/ui/card.tsx +92 -0
- package/components/ui/carousel.tsx +241 -0
- package/components/ui/chart.tsx +353 -0
- package/components/ui/checkbox.tsx +32 -0
- package/components/ui/collapsible.tsx +33 -0
- package/components/ui/command.tsx +177 -0
- package/components/ui/context-menu.tsx +252 -0
- package/components/ui/dialog.tsx +138 -0
- package/components/ui/drawer.tsx +134 -0
- package/components/ui/dropdown-menu.tsx +257 -0
- package/components/ui/empty.tsx +90 -0
- package/components/ui/file-upload.tsx +152 -0
- package/components/ui/form.tsx +195 -0
- package/components/ui/google-maps-loader.tsx +379 -0
- package/components/ui/hover-card.tsx +44 -0
- package/components/ui/index.ts +242 -0
- package/components/ui/input-otp.tsx +77 -0
- package/components/ui/input.tsx +38 -0
- package/components/ui/label.tsx +24 -0
- package/components/ui/map-config.ts +12 -0
- package/components/ui/map-layers.tsx +129 -0
- package/components/ui/map.exports.ts +31 -0
- package/components/ui/map.tsx +412 -0
- package/components/ui/menubar.tsx +276 -0
- package/components/ui/navigation-menu.tsx +162 -0
- package/components/ui/notification-badge.tsx +61 -0
- package/components/ui/page-header.tsx +229 -0
- package/components/ui/pagination.tsx +127 -0
- package/components/ui/popover.tsx +48 -0
- package/components/ui/progress.tsx +31 -0
- package/components/ui/radio-group.tsx +56 -0
- package/components/ui/rating.tsx +102 -0
- package/components/ui/resizable.tsx +405 -0
- package/components/ui/route-map.tsx +246 -0
- package/components/ui/scroll-area.tsx +58 -0
- package/components/ui/search.tsx +70 -0
- package/components/ui/select.tsx +176 -0
- package/components/ui/separator.tsx +28 -0
- package/components/ui/sheet.tsx +138 -0
- package/components/ui/sidebar.tsx +726 -0
- package/components/ui/simple-map.tsx +92 -0
- package/components/ui/skeleton.tsx +13 -0
- package/components/ui/slider.tsx +58 -0
- package/components/ui/sonner.tsx +77 -0
- package/components/ui/stats-card.tsx +84 -0
- package/components/ui/stepper.tsx +126 -0
- package/components/ui/switch.tsx +34 -0
- package/components/ui/table.tsx +116 -0
- package/components/ui/tabs.tsx +66 -0
- package/components/ui/textarea.tsx +26 -0
- package/components/ui/timeline.tsx +140 -0
- package/components/ui/toggle-group.tsx +71 -0
- package/components/ui/toggle.tsx +46 -0
- package/components/ui/tooltip.tsx +61 -0
- package/components/ui/tree-view.tsx +123 -0
- package/components/ui/use-mobile.ts +24 -0
- package/components/ui/utils.ts +6 -0
- package/components/ui/xertica-assistant.tsx +1420 -0
- package/contexts/ApiKeyContext.tsx +123 -0
- package/contexts/AssistenteContext.tsx +118 -0
- package/contexts/BrandColorsContext.tsx +551 -0
- package/contexts/LanguageContext.tsx +36 -0
- package/contexts/ThemeContext.tsx +85 -0
- package/dist/cli.js +20922 -0
- package/eslint.config.js +41 -0
- package/guidelines/Guidelines.md +61 -0
- package/hooks/useTheme.ts +4 -0
- package/imports/Podcast.tsx +389 -0
- package/imports/XerticaAi.tsx +46 -0
- package/imports/XerticaX.tsx +20 -0
- package/imports/svg-aueiaqngck.ts +11 -0
- package/imports/svg-v9krss1ozd.ts +16 -0
- package/imports/svg-vhrdofe3qe.ts +5 -0
- package/index.css +4448 -0
- package/index.html +14 -0
- package/main.tsx +10 -0
- package/package.json +119 -0
- package/postcss.config.js +6 -0
- package/routes.tsx +33 -0
- package/styles/globals.css +15 -0
- package/styles/xertica/app-overrides/chat.css +61 -0
- package/styles/xertica/app-overrides/scrollbar.css +33 -0
- package/styles/xertica/base.css +70 -0
- package/styles/xertica/integrations/google-maps.css +76 -0
- package/styles/xertica/integrations/sonner.css +73 -0
- package/styles/xertica/theme-map.css +88 -0
- package/styles/xertica/tokens.css +190 -0
- package/tsconfig.json +31 -0
- package/tsconfig.node.json +10 -0
- package/utils/gemini.ts +140 -0
- package/vite-env.d.ts +12 -0
- 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
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
|
+
}
|
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
|
+
}
|