@cupcodev/ui 1.0.2 → 1.2.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ## @cupcodev/ui
2
2
 
3
- Design system Cupcode pronto para uso (componentes React + estilos + presets Tailwind).
3
+ Design system Cupcode pronto para uso (componentes React + estilos + preset Tailwind).
4
4
 
5
5
  ### Instalação
6
6
 
@@ -11,8 +11,8 @@ npm install @cupcodev/ui
11
11
  Além do pacote, instale as peer dependencies listadas em `peerDependencies` (React 18, Tailwind 3, Radix UI, etc.). Um comando típico:
12
12
 
13
13
  ```bash
14
- npm install react react-dom tailwindcss class-variance-authority tailwind-merge lucide-react next-themes react-router-dom \
15
- cmdk embla-carousel-react input-otp react-day-picker react-resizable-panels recharts sonner vaul \
14
+ npm install react react-dom tailwindcss class-variance-authority tailwind-merge lucide-react \
15
+ cmdk date-fns embla-carousel-react input-otp react-day-picker react-resizable-panels recharts sonner vaul \
16
16
  @radix-ui/react-accordion @radix-ui/react-alert-dialog @radix-ui/react-aspect-ratio @radix-ui/react-avatar \
17
17
  @radix-ui/react-checkbox @radix-ui/react-collapsible @radix-ui/react-context-menu @radix-ui/react-dialog \
18
18
  @radix-ui/react-dropdown-menu @radix-ui/react-hover-card @radix-ui/react-label @radix-ui/react-menubar \
@@ -22,7 +22,11 @@ cmdk embla-carousel-react input-otp react-day-picker react-resizable-panels rech
22
22
  @radix-ui/react-toggle-group @radix-ui/react-tooltip tailwindcss-animate @tailwindcss/typography
23
23
  ```
24
24
 
25
- ### Tailwind
25
+ Compatibilidade de runtime: Node.js `>=18.18.0`.
26
+ Compatibilidade de estilo: Tailwind CSS v3 (`tailwindcss@^3.4.x`).
27
+ Gerenciador oficial: `npm` (lockfile único: `package-lock.json`).
28
+
29
+ ### Tailwind (obrigatorio para `styles.css`)
26
30
 
27
31
  Use o preset disponibilizado pelo pacote:
28
32
 
@@ -31,18 +35,29 @@ Use o preset disponibilizado pelo pacote:
31
35
  module.exports = {
32
36
  presets: [require("@cupcodev/ui/tailwind-preset.cjs")],
33
37
  content: [
34
- "./src/**/*.{ts,tsx}", // ajuste para o seu projeto
35
- "./node_modules/@cupcodev/ui/dist/**/*.{js,jsx}", // necessário para as classes dos componentes
38
+ "./src/**/*.{ts,tsx}",
39
+ "./node_modules/@cupcodev/ui/dist/**/*.{js,jsx}",
36
40
  ],
37
41
  };
38
42
  ```
39
43
 
40
- E importe os estilos globais (tokens + reset):
44
+ E importe os estilos completos:
45
+
46
+ ```ts
47
+ import "@cupcodev/ui/styles.css";
48
+ ```
49
+
50
+ Se voce quiser apenas variaveis + base minima (sem classes utilitarias/glass/dock), use:
41
51
 
42
52
  ```ts
43
- import "@cupcodev/ui/styles/global.css";
53
+ import "@cupcodev/ui/styles/base.css";
44
54
  ```
45
55
 
56
+ Importante:
57
+ - `styles.css` pressupoe Tailwind + preset configurados no app consumidor.
58
+ - `styles/global.css` nao deve ser usado isoladamente, porque nao inclui os tokens.
59
+ - `styles/base.css` e o entrypoint seguro para tema/tokens quando voce nao quer carregar o pacote visual completo.
60
+
46
61
  ### Uso básico
47
62
 
48
63
  ```tsx
@@ -53,30 +68,85 @@ export default function Example() {
53
68
  }
54
69
  ```
55
70
 
56
- Todos os componentes Cupcode e shadcn/ui base são reexportados de `@cupcodev/ui`. Exemplo:
57
-
58
- ```ts
59
- import { NavbarCupcode, ThemeToggle, Card } from "@cupcodev/ui";
60
- ```
71
+ Todos os componentes Cupcode e shadcn/ui base são reexportados de `@cupcodev/ui`.
61
72
 
62
- Para importações segmentadas, submódulos como `@cupcodev/ui/charts`, que expõe apenas os componentes de gráficos/carrossel.
73
+ ### MainNavbar sem router obrigatório
63
74
 
64
- ### Tema / Dark mode
65
-
66
- O `ThemeToggle` depende de [next-themes](https://github.com/pacocoursey/next-themes). Adicione o provider na raiz do app:
75
+ `MainNavbar` não depende de `react-router-dom`. Para integração SPA, passe `pathname` e `onNavigate`:
67
76
 
68
77
  ```tsx
69
- import { ThemeProvider } from "next-themes";
78
+ import { MainNavbar } from "@cupcodev/ui";
79
+ import { useLocation, useNavigate } from "react-router-dom";
80
+
81
+ export function Header() {
82
+ const location = useLocation();
83
+ const navigate = useNavigate();
70
84
 
71
- export function App() {
72
85
  return (
73
- <ThemeProvider attribute="class" defaultTheme="system" enableSystem>
74
- {/* sua aplicação */}
75
- </ThemeProvider>
86
+ <MainNavbar
87
+ pathname={location.pathname}
88
+ onNavigate={(href) => navigate(href)}
89
+ />
76
90
  );
77
91
  }
92
+ ```
93
+
94
+ ### ThemeToggle sem next-themes obrigatório
95
+
96
+ `ThemeToggle` alterna a classe `dark` no `document.documentElement` quando usado de forma não-controlada:
97
+
98
+ ```tsx
99
+ import { ThemeToggle } from "@cupcodev/ui";
100
+
101
+ export function HeaderActions() {
102
+ return <ThemeToggle />;
103
+ }
104
+ ```
105
+
106
+ Modo controlado (opcional):
78
107
 
79
- No Next.js (app router), coloque o provider em `layout.tsx`; em Vite/CRA, envolva a raiz.
108
+ ```tsx
109
+ <ThemeToggle theme={theme} onThemeChange={setTheme} />
110
+ ```
111
+
112
+ ### Qualidade e CI
113
+
114
+ Validações automatizadas disponíveis no projeto:
115
+
116
+ ```bash
117
+ npm run lint
118
+ npm run typecheck
119
+ npm run build:lib
120
+ npm run build:site
121
+ npm run test:consumer
122
+ ```
123
+
124
+ - `lint` roda com `--max-warnings=0` (qualquer warning quebra o gate).
125
+ - `typecheck`: valida tipos com `tsc -b` usando as configs estritas do projeto.
126
+ - `build:lib`: gera o pacote publicável (`dist`) via `tsup` sem sourcemaps.
127
+ - `build:site`: gera somente o site/docs via Vite.
128
+ - `test:consumer`: cria um projeto externo temporário, instala o tarball de `@cupcodev/ui` e valida `typecheck + build`.
129
+ - `prepublishOnly` executa `check:release` (`lint + typecheck + build:lib`) antes de qualquer publicação.
130
+ - Pipeline CI em `.github/workflows/ci.yml` roda `check:release`, `build:site` e `test:consumer` em todo push/PR.
131
+
132
+ App de consumo real versionado: `examples/vite-consumer`.
133
+
134
+ ### Setup do chat (Supabase + Realtime)
135
+
136
+ Para configurar o chat com dados reais e notificacoes em tempo real:
137
+
138
+ 1. Use `.env.chat.example` como referencia para preencher seu `.env.local`.
139
+ 2. Rode no SQL Editor do Supabase:
140
+ - `scripts/supabase/chat/00_bootstrap_chat_public.sql`
141
+ - `scripts/supabase/chat/01_confirm_tables.sql`
142
+ - `scripts/supabase/chat/02_confirm_columns.sql`
143
+ - `scripts/supabase/chat/03_enable_realtime.sql`
144
+ - `scripts/supabase/chat/04_verify_realtime.sql`
145
+ - `scripts/supabase/chat/06_fix_rls_and_avatars_for_external_auth.sql` (se usar auth externa)
146
+ 3. Reinicie o app: `npm run dev`.
147
+ 4. Valide o fluxo com `scripts/supabase/chat/05_acceptance_checks.sql`.
148
+
149
+ Guia completo: `docs/chat-supabase-setup.md`.
80
150
 
81
151
  ### Peers
82
152
 
@@ -86,14 +156,12 @@ No Next.js (app router), coloque o provider em `layout.tsx`; em Vite/CRA, envolv
86
156
  | `tailwindcss` | ^3.4.17 | util classes + preset |
87
157
  | `class-variance-authority`, `tailwind-merge` | ^0.7.1 / ^2.6.0 | variantes e merge de classes |
88
158
  | `lucide-react` | ^0.462.0 | ícones |
89
- | `next-themes` | ^0.3.0 | controle de tema (ThemeToggle) |
90
159
  | `@radix-ui/*` | conforme `package.json` | primitives dos componentes shadcn |
91
- | `cmdk`, `embla-carousel-react`, `react-day-picker`, `input-otp`, `react-resizable-panels`, `recharts`, `sonner`, `vaul` | conforme `package.json` | componentes específicos (command palette, carousel, calendário, OTP, panels, charts, toasts, drawers) |
160
+ | `cmdk`, `date-fns`, `embla-carousel-react`, `react-day-picker`, `input-otp`, `react-resizable-panels`, `recharts`, `sonner`, `vaul` | conforme `package.json` | componentes específicos |
92
161
  | `tailwindcss-animate`, `@tailwindcss/typography` | ^1.0.7 / ^0.5.16 | plugins usados pelo preset |
93
162
 
94
163
  Consulte `peerDependencies` para a lista completa ao instalar.
95
- ```
96
164
 
97
165
  ### Tipos e superfícies
98
166
 
99
- Os componentes são exportados via `export { Component }` (ex.: `export { default as DockWrapper }`). Importe sempre de `@cupcodev/ui` para garantir que os tipos e estilos correspondentes estejam alinhados.
167
+ Importe de `@cupcodev/ui` para manter tipos e estilos alinhados. Para gráficos, use também o submódulo `@cupcodev/ui/charts`.
@@ -9,10 +9,10 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
9
9
  import { VariantProps } from 'class-variance-authority';
10
10
  import useEmblaCarousel, { UseEmblaCarouselType } from 'embla-carousel-react';
11
11
 
12
- declare const buttonVariants: (props?: {
13
- variant?: "link" | "default" | "secondary" | "outline" | "destructive" | "ghost";
14
- size?: "default" | "sm" | "lg" | "icon";
15
- } & class_variance_authority_types.ClassProp) => string;
12
+ declare const buttonVariants: (props?: ({
13
+ variant?: "link" | "secondary" | "outline" | "default" | "destructive" | "ghost" | null | undefined;
14
+ size?: "sm" | "lg" | "default" | "icon" | null | undefined;
15
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
16
16
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
17
17
  asChild?: boolean;
18
18
  }
@@ -57,7 +57,7 @@ declare const ChartContainer: React.ForwardRefExoticComponent<Omit<React.ClassAt
57
57
  declare const ChartStyle: ({ id, config }: {
58
58
  id: string;
59
59
  config: ChartConfig;
60
- }) => react_jsx_runtime.JSX.Element;
60
+ }) => react_jsx_runtime.JSX.Element | null;
61
61
  declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
62
62
  declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<RechartsPrimitive.DefaultTooltipContentProps<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType> & {
63
63
  accessibilityLayer?: boolean;
@@ -66,14 +66,14 @@ declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<Recharts
66
66
  allowEscapeViewBox?: recharts_types_util_types.AllowInDimension;
67
67
  animationDuration?: recharts_types_util_types.AnimationDuration;
68
68
  animationEasing?: recharts_types_util_types.AnimationTiming;
69
- content?: recharts_types_component_Tooltip.ContentType<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType>;
69
+ content?: recharts_types_component_Tooltip.ContentType<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType> | undefined;
70
70
  coordinate?: Partial<recharts_types_util_types.Coordinate>;
71
71
  cursor?: boolean | React.ReactElement | React.SVGProps<SVGElement>;
72
72
  filterNull?: boolean;
73
73
  defaultIndex?: number;
74
74
  isAnimationActive?: boolean;
75
75
  offset?: number;
76
- payloadUniqBy?: recharts_types_util_payload_getUniqPayload.UniqueOption<recharts_types_component_DefaultTooltipContent.Payload<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType>>;
76
+ payloadUniqBy?: recharts_types_util_payload_getUniqPayload.UniqueOption<recharts_types_component_DefaultTooltipContent.Payload<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType>> | undefined;
77
77
  position?: Partial<recharts_types_util_types.Coordinate>;
78
78
  reverseDirection?: recharts_types_util_types.AllowInDimension;
79
79
  shared?: boolean;
@@ -89,7 +89,7 @@ declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<Recharts
89
89
  labelKey?: string;
90
90
  }, "ref"> & React.RefAttributes<HTMLDivElement>>;
91
91
  declare const ChartLegend: typeof RechartsPrimitive.Legend;
92
- declare const ChartLegendContent: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & Pick<RechartsPrimitive.LegendProps, "verticalAlign" | "payload"> & {
92
+ declare const ChartLegendContent: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
93
93
  hideIcon?: boolean;
94
94
  nameKey?: string;
95
95
  }, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -9,10 +9,10 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
9
9
  import { VariantProps } from 'class-variance-authority';
10
10
  import useEmblaCarousel, { UseEmblaCarouselType } from 'embla-carousel-react';
11
11
 
12
- declare const buttonVariants: (props?: {
13
- variant?: "link" | "default" | "secondary" | "outline" | "destructive" | "ghost";
14
- size?: "default" | "sm" | "lg" | "icon";
15
- } & class_variance_authority_types.ClassProp) => string;
12
+ declare const buttonVariants: (props?: ({
13
+ variant?: "link" | "secondary" | "outline" | "default" | "destructive" | "ghost" | null | undefined;
14
+ size?: "sm" | "lg" | "default" | "icon" | null | undefined;
15
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
16
16
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
17
17
  asChild?: boolean;
18
18
  }
@@ -57,7 +57,7 @@ declare const ChartContainer: React.ForwardRefExoticComponent<Omit<React.ClassAt
57
57
  declare const ChartStyle: ({ id, config }: {
58
58
  id: string;
59
59
  config: ChartConfig;
60
- }) => react_jsx_runtime.JSX.Element;
60
+ }) => react_jsx_runtime.JSX.Element | null;
61
61
  declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
62
62
  declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<RechartsPrimitive.DefaultTooltipContentProps<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType> & {
63
63
  accessibilityLayer?: boolean;
@@ -66,14 +66,14 @@ declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<Recharts
66
66
  allowEscapeViewBox?: recharts_types_util_types.AllowInDimension;
67
67
  animationDuration?: recharts_types_util_types.AnimationDuration;
68
68
  animationEasing?: recharts_types_util_types.AnimationTiming;
69
- content?: recharts_types_component_Tooltip.ContentType<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType>;
69
+ content?: recharts_types_component_Tooltip.ContentType<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType> | undefined;
70
70
  coordinate?: Partial<recharts_types_util_types.Coordinate>;
71
71
  cursor?: boolean | React.ReactElement | React.SVGProps<SVGElement>;
72
72
  filterNull?: boolean;
73
73
  defaultIndex?: number;
74
74
  isAnimationActive?: boolean;
75
75
  offset?: number;
76
- payloadUniqBy?: recharts_types_util_payload_getUniqPayload.UniqueOption<recharts_types_component_DefaultTooltipContent.Payload<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType>>;
76
+ payloadUniqBy?: recharts_types_util_payload_getUniqPayload.UniqueOption<recharts_types_component_DefaultTooltipContent.Payload<recharts_types_component_DefaultTooltipContent.ValueType, recharts_types_component_DefaultTooltipContent.NameType>> | undefined;
77
77
  position?: Partial<recharts_types_util_types.Coordinate>;
78
78
  reverseDirection?: recharts_types_util_types.AllowInDimension;
79
79
  shared?: boolean;
@@ -89,7 +89,7 @@ declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<Recharts
89
89
  labelKey?: string;
90
90
  }, "ref"> & React.RefAttributes<HTMLDivElement>>;
91
91
  declare const ChartLegend: typeof RechartsPrimitive.Legend;
92
- declare const ChartLegendContent: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & Pick<RechartsPrimitive.LegendProps, "verticalAlign" | "payload"> & {
92
+ declare const ChartLegendContent: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
93
93
  hideIcon?: boolean;
94
94
  nameKey?: string;
95
95
  }, "ref"> & React.RefAttributes<HTMLDivElement>>;
package/dist/charts.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -497,4 +498,3 @@ CarouselNext.displayName = "CarouselNext";
497
498
  ChartTooltip,
498
499
  ChartTooltipContent
499
500
  });
500
- //# sourceMappingURL=charts.cjs.map
package/dist/charts.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export { c as Carousel, C as CarouselApi, d as CarouselContent, e as CarouselItem, g as CarouselNext, f as CarouselPrevious, n as ChartConfig, h as ChartContainer, k as ChartLegend, l as ChartLegendContent, m as ChartStyle, i as ChartTooltip, j as ChartTooltipContent } from './charts-KwYmX5He.cjs';
1
+ export { c as Carousel, C as CarouselApi, d as CarouselContent, e as CarouselItem, g as CarouselNext, f as CarouselPrevious, n as ChartConfig, h as ChartContainer, k as ChartLegend, l as ChartLegendContent, m as ChartStyle, i as ChartTooltip, j as ChartTooltipContent } from './charts-DqY2Q-7w.cjs';
2
2
  import 'recharts/types/util/payload/getUniqPayload';
3
3
  import 'recharts/types/component/Tooltip';
4
4
  import 'recharts/types/util/types';
package/dist/charts.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { c as Carousel, C as CarouselApi, d as CarouselContent, e as CarouselItem, g as CarouselNext, f as CarouselPrevious, n as ChartConfig, h as ChartContainer, k as ChartLegend, l as ChartLegendContent, m as ChartStyle, i as ChartTooltip, j as ChartTooltipContent } from './charts-KwYmX5He.js';
1
+ export { c as Carousel, C as CarouselApi, d as CarouselContent, e as CarouselItem, g as CarouselNext, f as CarouselPrevious, n as ChartConfig, h as ChartContainer, k as ChartLegend, l as ChartLegendContent, m as ChartStyle, i as ChartTooltip, j as ChartTooltipContent } from './charts-DqY2Q-7w.js';
2
2
  import 'recharts/types/util/payload/getUniqPayload';
3
3
  import 'recharts/types/component/Tooltip';
4
4
  import 'recharts/types/util/types';
package/dist/charts.js CHANGED
@@ -451,4 +451,3 @@ export {
451
451
  ChartTooltip,
452
452
  ChartTooltipContent
453
453
  };
454
- //# sourceMappingURL=charts.js.map