xertica-ui 2.3.0 → 2.4.1

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 (105) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/README.md +33 -22
  3. package/bin/cli.ts +136 -47
  4. package/bin/language-config.ts +5 -8
  5. package/components/assistant/modern-chat-input/ModernChatInput.tsx +17 -7
  6. package/components/assistant/xertica-assistant/parts/AssistantConversationList.tsx +1 -3
  7. package/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.tsx +13 -3
  8. package/components/assistant/xertica-assistant/parts/AssistantMessageBubble.tsx +10 -6
  9. package/components/assistant/xertica-assistant/xertica-assistant.tsx +1 -3
  10. package/components/blocks/card-patterns/FeatureCardSkeleton.tsx +1 -6
  11. package/components/blocks/card-patterns/ProfileCard.tsx +1 -3
  12. package/components/blocks/card-patterns/ProjectCardSkeleton.tsx +1 -6
  13. package/components/brand/language-selector/language-selector.stories.tsx +1 -4
  14. package/components/brand/theme-toggle/ThemeToggle.tsx +5 -1
  15. package/components/brand/xertica-provider/XerticaProvider.tsx +1 -4
  16. package/components/index.ts +1 -5
  17. package/components/layout/sidebar/sidebar.tsx +9 -3
  18. package/components/media/audio-player/AudioPlayer.tsx +4 -2
  19. package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +188 -188
  20. package/components/pages/home-content/HomeContent.tsx +55 -55
  21. package/components/pages/home-page/HomePage.tsx +5 -1
  22. package/components/pages/login-page/LoginPage.tsx +4 -2
  23. package/components/pages/reset-password-page/ResetPasswordPage.tsx +7 -3
  24. package/components/pages/template-content/TemplateContent.tsx +268 -149
  25. package/components/pages/verify-email-page/VerifyEmailPage.tsx +9 -9
  26. package/components/shared/error-boundary.stories.tsx +114 -132
  27. package/components/shared/error-boundary.tsx +150 -154
  28. package/components/shared/error-fallbacks.tsx +222 -226
  29. package/components/ui/stats-card/stats-card-skeleton.tsx +1 -3
  30. package/components/ui/stats-card/stats-card.stories.tsx +18 -0
  31. package/components/ui/stats-card/stats-card.tsx +18 -2
  32. package/components.json +512 -892
  33. package/contexts/AuthContext.tsx +121 -118
  34. package/contexts/LanguageContext.tsx +1 -2
  35. package/dist/AssistantChart-BKVtGUKF.js +3383 -0
  36. package/dist/AssistantChart-WeycT5Pd.cjs +3551 -0
  37. package/dist/VerifyEmailPage-Bp1XXl3H.cjs +3305 -0
  38. package/dist/VerifyEmailPage-DGhuIqkb.js +3296 -0
  39. package/dist/XerticaProvider-BErr83Bg.js +42 -0
  40. package/dist/XerticaProvider-CwOkHxiT.cjs +44 -0
  41. package/dist/XerticaXLogo-BX3ueACh.js +255 -0
  42. package/dist/XerticaXLogo-qBPhwK3g.cjs +260 -0
  43. package/dist/assistant.cjs.js +1 -1
  44. package/dist/assistant.es.js +1 -1
  45. package/dist/brand.cjs.js +2 -2
  46. package/dist/brand.es.js +2 -2
  47. package/dist/cli.js +90 -37
  48. package/dist/components/brand/theme-toggle/ThemeToggle.d.ts +1 -1
  49. package/dist/components/index.d.ts +1 -1
  50. package/dist/components/ui/stats-card/stats-card.d.ts +10 -0
  51. package/dist/index.cjs.js +6 -6
  52. package/dist/index.es.js +6 -6
  53. package/dist/layout.cjs.js +1 -1
  54. package/dist/layout.es.js +1 -1
  55. package/dist/pages.cjs.js +1 -1
  56. package/dist/pages.es.js +1 -1
  57. package/dist/sidebar-B4ZWaMrE.js +792 -0
  58. package/dist/sidebar-BS1p2V7t.cjs +795 -0
  59. package/dist/ui.cjs.js +1 -1
  60. package/dist/ui.es.js +1 -1
  61. package/dist/xertica-assistant-B1NaSFFj.js +2173 -0
  62. package/dist/xertica-assistant-CIaUlbIt.cjs +2180 -0
  63. package/dist/xertica-ui.css +1 -1
  64. package/docs/architecture-improvements.md +5 -5
  65. package/docs/architecture.md +16 -10
  66. package/docs/components/card-patterns.md +19 -17
  67. package/docs/components/error-boundary.md +201 -191
  68. package/docs/components/hooks.md +15 -13
  69. package/docs/components/language-selector.md +20 -16
  70. package/docs/components/pages.md +323 -309
  71. package/docs/components/stats-card.md +20 -2
  72. package/docs/doc-audit.md +12 -11
  73. package/docs/getting-started.md +41 -28
  74. package/docs/guidelines.md +14 -12
  75. package/docs/i18n.md +61 -57
  76. package/docs/installation.md +268 -267
  77. package/docs/llms.md +17 -17
  78. package/docs/state-management.md +17 -17
  79. package/guidelines/Guidelines.md +17 -14
  80. package/llms-compact.txt +1 -1
  81. package/llms-full.txt +11553 -7133
  82. package/llms.txt +1 -1
  83. package/package.json +1 -1
  84. package/styles/xertica/base.css +90 -84
  85. package/templates/CLAUDE.md +16 -1
  86. package/templates/guidelines/Guidelines.md +42 -18
  87. package/templates/package.json +3 -3
  88. package/templates/src/app/components/AuthGuard.tsx +131 -82
  89. package/templates/src/features/auth/ui/AuthPageShell.tsx +32 -32
  90. package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +1 -3
  91. package/templates/src/features/auth/ui/ResetPasswordContent.tsx +6 -2
  92. package/templates/src/features/auth/ui/VerifyEmailContent.tsx +2 -6
  93. package/templates/src/features/home/data/mock.ts +41 -35
  94. package/templates/src/features/home/ui/HomeContent.tsx +62 -64
  95. package/templates/src/features/template/ui/CrudTemplate.tsx +1 -4
  96. package/templates/src/features/template/ui/LoginTemplate.tsx +1 -1
  97. package/templates/src/features/template/ui/TemplateContent.tsx +28 -20
  98. package/templates/src/locales/en/pages/templates.json +17 -17
  99. package/templates/src/locales/es/pages/templates.json +17 -17
  100. package/templates/src/locales/pt-BR/pages/templates.json +17 -17
  101. package/templates/src/pages/AssistantPage.tsx +26 -20
  102. package/templates/src/pages/HomePage.tsx +5 -1
  103. package/templates/src/shared/error-boundary.tsx +150 -154
  104. package/templates/src/shared/error-fallbacks.tsx +222 -226
  105. package/templates/vite.config.ts +12 -9
@@ -45,10 +45,7 @@ export function HomeContent() {
45
45
  <Header
46
46
  showThemeToggle={true}
47
47
  showLanguageSelector={true}
48
- breadcrumbs={[
49
- { label: t('nav.designSystem'), href: '/home' },
50
- { label: t('nav.home') },
51
- ]}
48
+ breadcrumbs={[{ label: t('nav.designSystem'), href: '/home' }, { label: t('nav.home') }]}
52
49
  renderLink={(href, props) => <Link to={href} {...props} />}
53
50
  />
54
51
 
@@ -56,60 +53,63 @@ export function HomeContent() {
56
53
  <ScrollArea className="h-full">
57
54
  <div className="p-5 sm:p-4 md:p-6">
58
55
  <div className="max-w-6xl mx-auto space-y-8">
59
- <PageHeader
60
- title={t('home.welcome')}
61
- subtitle={t('home.subtitle')}
62
- />
56
+ <PageHeader title={t('home.welcome')} subtitle={t('home.subtitle')} />
63
57
 
64
58
  <SectionErrorBoundary>
65
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
66
- {isLoading ? (
67
- <>
68
- <FeatureCardSkeleton showAction />
69
- <FeatureCardSkeleton showAction />
70
- <FeatureCardSkeleton showAction />
71
- </>
72
- ) : (
73
- featureCards.map(card => (
74
- <Card
75
- key={card.id}
76
- className="hover:shadow-xl transition-shadow duration-200 flex flex-col h-full"
77
- >
78
- <CardHeader>
79
- <div className="flex items-center gap-3">
80
- <div className="p-2 bg-[var(--chart-2)]/20 rounded-[var(--radius)]">
81
- <FileText className="w-6 h-6 text-[var(--chart-2)]" />
59
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
60
+ {isLoading ? (
61
+ <>
62
+ <FeatureCardSkeleton showAction />
63
+ <FeatureCardSkeleton showAction />
64
+ <FeatureCardSkeleton showAction />
65
+ </>
66
+ ) : (
67
+ featureCards.map(card => (
68
+ <Card
69
+ key={card.id}
70
+ className="hover:shadow-xl transition-shadow duration-200 flex flex-col h-full"
71
+ >
72
+ <CardHeader>
73
+ <div className="flex items-center gap-3">
74
+ <div className="p-2 bg-[var(--chart-2)]/20 rounded-[var(--radius)]">
75
+ <FileText className="w-6 h-6 text-[var(--chart-2)]" />
76
+ </div>
77
+ <div className="flex items-center gap-2">
78
+ <CardTitle className="text-sm">
79
+ {t(`home.${card.id.replace(/-/g, '')}Title`, {
80
+ defaultValue: card.title,
81
+ })}
82
+ </CardTitle>
83
+ {card.badge && (
84
+ <Badge variant="default" className="text-xs">
85
+ {t(`home.${card.id.replace(/-/g, '')}badge`, {
86
+ defaultValue: card.badge,
87
+ })}
88
+ </Badge>
89
+ )}
90
+ </div>
82
91
  </div>
83
- <div className="flex items-center gap-2">
84
- <CardTitle className="text-sm">
85
- {t(`home.${card.id.replace(/-/g, '')}Title`, { defaultValue: card.title })}
86
- </CardTitle>
87
- {card.badge && (
88
- <Badge variant="default" className="text-xs">
89
- {t(`home.${card.id.replace(/-/g, '')}badge`, { defaultValue: card.badge })}
90
- </Badge>
91
- )}
92
- </div>
93
- </div>
94
- </CardHeader>
95
- <CardContent className="flex-1">
96
- <p className="text-muted-foreground">
97
- {t(`home.${card.id.replace(/-/g, '')}Description`, { defaultValue: card.description })}
98
- </p>
99
- </CardContent>
100
- <CardFooter>
101
- <Button
102
- variant="outline"
103
- className="w-full"
104
- onClick={() => navigate(card.href)}
105
- >
106
- {t('common.view')}
107
- </Button>
108
- </CardFooter>
109
- </Card>
110
- ))
111
- )}
112
- </div>
92
+ </CardHeader>
93
+ <CardContent className="flex-1">
94
+ <p className="text-muted-foreground">
95
+ {t(`home.${card.id.replace(/-/g, '')}Description`, {
96
+ defaultValue: card.description,
97
+ })}
98
+ </p>
99
+ </CardContent>
100
+ <CardFooter>
101
+ <Button
102
+ variant="outline"
103
+ className="w-full"
104
+ onClick={() => navigate(card.href)}
105
+ >
106
+ {t('common.view')}
107
+ </Button>
108
+ </CardFooter>
109
+ </Card>
110
+ ))
111
+ )}
112
+ </div>
113
113
  </SectionErrorBoundary>
114
114
  </div>
115
115
  </div>
@@ -7,7 +7,11 @@ import { gerarResposta } from '../../shared/assistant-utils';
7
7
  import { routes } from '../../shared/navigation';
8
8
  import { useOptionalLayout } from '../../../contexts/LayoutContext';
9
9
  import { useAuth } from '../../../contexts/AuthContext';
10
- import { useAssistantConfig, getMockRichSuggestions, getMockFeedbackOptions } from '../../../features/assistant';
10
+ import {
11
+ useAssistantConfig,
12
+ getMockRichSuggestions,
13
+ getMockFeedbackOptions,
14
+ } from '../../../features/assistant';
11
15
 
12
16
  /**
13
17
  * Root Dashboard page component.
@@ -64,7 +64,7 @@ export function LoginPage({ onLogin }: LoginPageProps) {
64
64
  };
65
65
 
66
66
  return (
67
- <div className="min-h-screen flex">
67
+ <div className="h-screen w-full flex overflow-y-auto">
68
68
  {/* Left side - Full background image */}
69
69
  <div className="hidden lg:flex lg:flex-1 relative overflow-hidden">
70
70
  {/* Background image filling all space */}
@@ -153,7 +153,9 @@ export function LoginPage({ onLogin }: LoginPageProps) {
153
153
  <div className="w-full border-t border-border"></div>
154
154
  </div>
155
155
  <div className="relative flex justify-center text-sm">
156
- <span className="bg-muted px-2 text-muted-foreground">{t('login.orContinueWith')}</span>
156
+ <span className="bg-muted px-2 text-muted-foreground">
157
+ {t('login.orContinueWith')}
158
+ </span>
157
159
  </div>
158
160
  </div>
159
161
 
@@ -108,7 +108,7 @@ export function ResetPasswordPage() {
108
108
  };
109
109
 
110
110
  return (
111
- <div className="min-h-screen flex">
111
+ <div className="h-screen w-full flex overflow-y-auto">
112
112
  {/* Left side - Full background image */}
113
113
  <div className="hidden lg:flex lg:flex-1 relative overflow-hidden">
114
114
  {/* Background image filling all space */}
@@ -210,13 +210,17 @@ export function ResetPasswordPage() {
210
210
  <CheckCircle2
211
211
  className={`w-4 h-4 ${password.length >= 6 ? 'text-[var(--chart-2)]' : 'text-muted-foreground'}`}
212
212
  />
213
- <span className="text-sm text-muted-foreground">{t('resetPassword.requirementMinChars')}</span>
213
+ <span className="text-sm text-muted-foreground">
214
+ {t('resetPassword.requirementMinChars')}
215
+ </span>
214
216
  </div>
215
217
  <div className="flex items-center gap-2">
216
218
  <CheckCircle2
217
219
  className={`w-4 h-4 ${password === confirmPassword && password.length > 0 ? 'text-[var(--chart-2)]' : 'text-muted-foreground'}`}
218
220
  />
219
- <span className="text-sm text-muted-foreground">{t('resetPassword.requirementMatch')}</span>
221
+ <span className="text-sm text-muted-foreground">
222
+ {t('resetPassword.requirementMatch')}
223
+ </span>
220
224
  </div>
221
225
  </div>
222
226
  </div>