@vegait/lyra-ds-v2 0.1.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/README.md +134 -0
- package/dist/chunk-32QWDFOV.js +96 -0
- package/dist/chunk-32QWDFOV.js.map +1 -0
- package/dist/chunk-4EEFY4FU.cjs +96 -0
- package/dist/chunk-4EEFY4FU.cjs.map +1 -0
- package/dist/chunk-562W4FCG.cjs +88 -0
- package/dist/chunk-562W4FCG.cjs.map +1 -0
- package/dist/chunk-5SCF3EGT.cjs +13 -0
- package/dist/chunk-5SCF3EGT.cjs.map +1 -0
- package/dist/chunk-5XB7CPVP.cjs +34 -0
- package/dist/chunk-5XB7CPVP.cjs.map +1 -0
- package/dist/chunk-62OTWTBL.cjs +274 -0
- package/dist/chunk-62OTWTBL.cjs.map +1 -0
- package/dist/chunk-6GT2L3FX.js +63 -0
- package/dist/chunk-6GT2L3FX.js.map +1 -0
- package/dist/chunk-6HFYY5KR.cjs +67 -0
- package/dist/chunk-6HFYY5KR.cjs.map +1 -0
- package/dist/chunk-6NZHRSXB.cjs +61 -0
- package/dist/chunk-6NZHRSXB.cjs.map +1 -0
- package/dist/chunk-76G7PKIJ.cjs +42 -0
- package/dist/chunk-76G7PKIJ.cjs.map +1 -0
- package/dist/chunk-7PRTXARY.js +87 -0
- package/dist/chunk-7PRTXARY.js.map +1 -0
- package/dist/chunk-A665K552.cjs +75 -0
- package/dist/chunk-A665K552.cjs.map +1 -0
- package/dist/chunk-ABFMWZVI.cjs +89 -0
- package/dist/chunk-ABFMWZVI.cjs.map +1 -0
- package/dist/chunk-ACADNUHF.js +196 -0
- package/dist/chunk-ACADNUHF.js.map +1 -0
- package/dist/chunk-AFMNLT45.js +70 -0
- package/dist/chunk-AFMNLT45.js.map +1 -0
- package/dist/chunk-BAUTON3J.js +89 -0
- package/dist/chunk-BAUTON3J.js.map +1 -0
- package/dist/chunk-BNDEIZZQ.js +40 -0
- package/dist/chunk-BNDEIZZQ.js.map +1 -0
- package/dist/chunk-BXKWAQYI.cjs +157 -0
- package/dist/chunk-BXKWAQYI.cjs.map +1 -0
- package/dist/chunk-COFNZ2CM.js +70 -0
- package/dist/chunk-COFNZ2CM.js.map +1 -0
- package/dist/chunk-COV6FW4J.cjs +63 -0
- package/dist/chunk-COV6FW4J.cjs.map +1 -0
- package/dist/chunk-CUW7MUCY.js +55 -0
- package/dist/chunk-CUW7MUCY.js.map +1 -0
- package/dist/chunk-DKHG23OR.js +61 -0
- package/dist/chunk-DKHG23OR.js.map +1 -0
- package/dist/chunk-EMKU3IZY.js +85 -0
- package/dist/chunk-EMKU3IZY.js.map +1 -0
- package/dist/chunk-FZD2ZXN2.js +81 -0
- package/dist/chunk-FZD2ZXN2.js.map +1 -0
- package/dist/chunk-FZFA24YL.js +90 -0
- package/dist/chunk-FZFA24YL.js.map +1 -0
- package/dist/chunk-G5SLIXQ5.cjs +87 -0
- package/dist/chunk-G5SLIXQ5.cjs.map +1 -0
- package/dist/chunk-G6T2BYPC.js +88 -0
- package/dist/chunk-G6T2BYPC.js.map +1 -0
- package/dist/chunk-GGZSDAN3.cjs +43 -0
- package/dist/chunk-GGZSDAN3.cjs.map +1 -0
- package/dist/chunk-GLMTTY4G.js +34 -0
- package/dist/chunk-GLMTTY4G.js.map +1 -0
- package/dist/chunk-JQ5LATTJ.cjs +196 -0
- package/dist/chunk-JQ5LATTJ.cjs.map +1 -0
- package/dist/chunk-KLHQMRAY.js +42 -0
- package/dist/chunk-KLHQMRAY.js.map +1 -0
- package/dist/chunk-KQJCGTS3.js +13 -0
- package/dist/chunk-KQJCGTS3.js.map +1 -0
- package/dist/chunk-LBHO3VC4.cjs +81 -0
- package/dist/chunk-LBHO3VC4.cjs.map +1 -0
- package/dist/chunk-LUQS7LYG.cjs +85 -0
- package/dist/chunk-LUQS7LYG.cjs.map +1 -0
- package/dist/chunk-MMQZ7YMO.js +274 -0
- package/dist/chunk-MMQZ7YMO.js.map +1 -0
- package/dist/chunk-N7M2UZM6.js +67 -0
- package/dist/chunk-N7M2UZM6.js.map +1 -0
- package/dist/chunk-NLOLOFBX.js +43 -0
- package/dist/chunk-NLOLOFBX.js.map +1 -0
- package/dist/chunk-NPXSB4WO.js +48 -0
- package/dist/chunk-NPXSB4WO.js.map +1 -0
- package/dist/chunk-NVCGKCTH.cjs +90 -0
- package/dist/chunk-NVCGKCTH.cjs.map +1 -0
- package/dist/chunk-NZOAZF3W.cjs +67 -0
- package/dist/chunk-NZOAZF3W.cjs.map +1 -0
- package/dist/chunk-OS2O66IV.cjs +40 -0
- package/dist/chunk-OS2O66IV.cjs.map +1 -0
- package/dist/chunk-P5BKGZY2.cjs +55 -0
- package/dist/chunk-P5BKGZY2.cjs.map +1 -0
- package/dist/chunk-POMJPII4.cjs +70 -0
- package/dist/chunk-POMJPII4.cjs.map +1 -0
- package/dist/chunk-QSRVMLAL.cjs +40 -0
- package/dist/chunk-QSRVMLAL.cjs.map +1 -0
- package/dist/chunk-R5SUYP2F.cjs +14 -0
- package/dist/chunk-R5SUYP2F.cjs.map +1 -0
- package/dist/chunk-RBPMBCU3.js +157 -0
- package/dist/chunk-RBPMBCU3.js.map +1 -0
- package/dist/chunk-RZQAADXK.cjs +274 -0
- package/dist/chunk-RZQAADXK.cjs.map +1 -0
- package/dist/chunk-SPAC4VNO.js +67 -0
- package/dist/chunk-SPAC4VNO.js.map +1 -0
- package/dist/chunk-TONUCO3E.cjs +70 -0
- package/dist/chunk-TONUCO3E.cjs.map +1 -0
- package/dist/chunk-V7DPKW5E.cjs +48 -0
- package/dist/chunk-V7DPKW5E.cjs.map +1 -0
- package/dist/chunk-W3H3KWRL.js +274 -0
- package/dist/chunk-W3H3KWRL.js.map +1 -0
- package/dist/chunk-XFMTGORU.js +40 -0
- package/dist/chunk-XFMTGORU.js.map +1 -0
- package/dist/chunk-YVPOTKKQ.js +75 -0
- package/dist/chunk-YVPOTKKQ.js.map +1 -0
- package/dist/chunk-ZYPEUNSY.js +14 -0
- package/dist/chunk-ZYPEUNSY.js.map +1 -0
- package/dist/components/alert.cjs +9 -0
- package/dist/components/alert.cjs.map +1 -0
- package/dist/components/alert.d.cts +17 -0
- package/dist/components/alert.d.ts +17 -0
- package/dist/components/alert.js +9 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/avatar.cjs +9 -0
- package/dist/components/avatar.cjs.map +1 -0
- package/dist/components/avatar.d.cts +12 -0
- package/dist/components/avatar.d.ts +12 -0
- package/dist/components/avatar.js +9 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.cjs +11 -0
- package/dist/components/badge.cjs.map +1 -0
- package/dist/components/badge.d.cts +12 -0
- package/dist/components/badge.d.ts +12 -0
- package/dist/components/badge.js +11 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/bulk-bar.cjs +11 -0
- package/dist/components/bulk-bar.cjs.map +1 -0
- package/dist/components/bulk-bar.d.cts +19 -0
- package/dist/components/bulk-bar.d.ts +19 -0
- package/dist/components/bulk-bar.js +11 -0
- package/dist/components/bulk-bar.js.map +1 -0
- package/dist/components/button.cjs +11 -0
- package/dist/components/button.cjs.map +1 -0
- package/dist/components/button.d.cts +15 -0
- package/dist/components/button.d.ts +15 -0
- package/dist/components/button.js +11 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/card.cjs +15 -0
- package/dist/components/card.cjs.map +1 -0
- package/dist/components/card.d.cts +8 -0
- package/dist/components/card.d.ts +8 -0
- package/dist/components/card.js +15 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/data-table.cjs +10 -0
- package/dist/components/data-table.cjs.map +1 -0
- package/dist/components/data-table.d.cts +33 -0
- package/dist/components/data-table.d.ts +33 -0
- package/dist/components/data-table.js +10 -0
- package/dist/components/data-table.js.map +1 -0
- package/dist/components/date-picker.cjs +10 -0
- package/dist/components/date-picker.cjs.map +1 -0
- package/dist/components/date-picker.d.cts +16 -0
- package/dist/components/date-picker.d.ts +16 -0
- package/dist/components/date-picker.js +10 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/destructive-dialog.cjs +13 -0
- package/dist/components/destructive-dialog.cjs.map +1 -0
- package/dist/components/destructive-dialog.d.cts +19 -0
- package/dist/components/destructive-dialog.d.ts +19 -0
- package/dist/components/destructive-dialog.js +13 -0
- package/dist/components/destructive-dialog.js.map +1 -0
- package/dist/components/dropdown-menu.cjs +38 -0
- package/dist/components/dropdown-menu.cjs.map +1 -0
- package/dist/components/dropdown-menu.d.cts +32 -0
- package/dist/components/dropdown-menu.d.ts +32 -0
- package/dist/components/dropdown-menu.js +38 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty-state.cjs +10 -0
- package/dist/components/empty-state.cjs.map +1 -0
- package/dist/components/empty-state.d.cts +23 -0
- package/dist/components/empty-state.d.ts +23 -0
- package/dist/components/empty-state.js +10 -0
- package/dist/components/empty-state.js.map +1 -0
- package/dist/components/filter-chips.cjs +9 -0
- package/dist/components/filter-chips.cjs.map +1 -0
- package/dist/components/filter-chips.d.cts +15 -0
- package/dist/components/filter-chips.d.ts +15 -0
- package/dist/components/filter-chips.js +9 -0
- package/dist/components/filter-chips.js.map +1 -0
- package/dist/components/input.cjs +9 -0
- package/dist/components/input.cjs.map +1 -0
- package/dist/components/input.d.cts +10 -0
- package/dist/components/input.d.ts +10 -0
- package/dist/components/input.js +9 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/kpi-cards.cjs +8 -0
- package/dist/components/kpi-cards.cjs.map +1 -0
- package/dist/components/kpi-cards.d.cts +15 -0
- package/dist/components/kpi-cards.d.ts +15 -0
- package/dist/components/kpi-cards.js +8 -0
- package/dist/components/kpi-cards.js.map +1 -0
- package/dist/components/list-page.cjs +21 -0
- package/dist/components/list-page.cjs.map +1 -0
- package/dist/components/list-page.d.cts +87 -0
- package/dist/components/list-page.d.ts +87 -0
- package/dist/components/list-page.js +21 -0
- package/dist/components/list-page.js.map +1 -0
- package/dist/components/modal.cjs +10 -0
- package/dist/components/modal.cjs.map +1 -0
- package/dist/components/modal.d.cts +16 -0
- package/dist/components/modal.d.ts +16 -0
- package/dist/components/modal.js +10 -0
- package/dist/components/modal.js.map +1 -0
- package/dist/components/pagination-bar.cjs +10 -0
- package/dist/components/pagination-bar.cjs.map +1 -0
- package/dist/components/pagination-bar.d.cts +11 -0
- package/dist/components/pagination-bar.d.ts +11 -0
- package/dist/components/pagination-bar.js +10 -0
- package/dist/components/pagination-bar.js.map +1 -0
- package/dist/components/progress-bar.cjs +9 -0
- package/dist/components/progress-bar.cjs.map +1 -0
- package/dist/components/progress-bar.d.cts +21 -0
- package/dist/components/progress-bar.d.ts +21 -0
- package/dist/components/progress-bar.js +9 -0
- package/dist/components/progress-bar.js.map +1 -0
- package/dist/components/radio-group.cjs +12 -0
- package/dist/components/radio-group.cjs.map +1 -0
- package/dist/components/radio-group.d.cts +22 -0
- package/dist/components/radio-group.d.ts +22 -0
- package/dist/components/radio-group.js +12 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/sidebar.cjs +11 -0
- package/dist/components/sidebar.cjs.map +1 -0
- package/dist/components/sidebar.d.cts +24 -0
- package/dist/components/sidebar.d.ts +24 -0
- package/dist/components/sidebar.js +11 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton.cjs +17 -0
- package/dist/components/skeleton.cjs.map +1 -0
- package/dist/components/skeleton.d.cts +15 -0
- package/dist/components/skeleton.d.ts +15 -0
- package/dist/components/skeleton.js +17 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/status-tag.cjs +9 -0
- package/dist/components/status-tag.cjs.map +1 -0
- package/dist/components/status-tag.d.cts +11 -0
- package/dist/components/status-tag.d.ts +11 -0
- package/dist/components/status-tag.js +9 -0
- package/dist/components/status-tag.js.map +1 -0
- package/dist/components/tabs.cjs +16 -0
- package/dist/components/tabs.cjs.map +1 -0
- package/dist/components/tabs.d.cts +9 -0
- package/dist/components/tabs.d.ts +9 -0
- package/dist/components/tabs.js +16 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/toggle.cjs +10 -0
- package/dist/components/toggle.cjs.map +1 -0
- package/dist/components/toggle.d.cts +14 -0
- package/dist/components/toggle.d.ts +14 -0
- package/dist/components/toggle.js +10 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/tooltip.cjs +10 -0
- package/dist/components/tooltip.cjs.map +1 -0
- package/dist/components/tooltip.d.cts +13 -0
- package/dist/components/tooltip.d.ts +13 -0
- package/dist/components/tooltip.js +10 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/index.cjs +160 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +32 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.js +160 -0
- package/dist/index.js.map +1 -0
- package/dist/styles/global.css +322 -0
- package/package.json +71 -0
package/README.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# @vegait/lyra-ds
|
|
2
|
+
|
|
3
|
+
Biblioteca de componentes do Lyra Design System. Construída com Radix UI + CVA + Tailwind v4, distribuída como pacote npm.
|
|
4
|
+
|
|
5
|
+
## Instalação
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @vegait/lyra-ds tw-animate-css
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
`tw-animate-css` é peerDependency obrigatória: provê os utilitários de animação (`animate-in`, `fade-in-0`, `zoom-in-95`, `slide-in-from-*`) usados em Modal, DropdownMenu, Tooltip e DatePicker. Sem ele, overlays abrem sem animação.
|
|
12
|
+
|
|
13
|
+
Importe o CSS global da lib uma vez no entry point da aplicação:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import "@vegait/lyra-ds/styles";
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
E adicione o import do `tw-animate-css` no mesmo arquivo CSS onde Tailwind é inicializado (ex: `app/globals.css`):
|
|
20
|
+
|
|
21
|
+
```css
|
|
22
|
+
@import "tailwindcss";
|
|
23
|
+
@import "tw-animate-css";
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
> Por que dois lugares: o CSS da lib só transporta tokens. As classes utilitárias do Tailwind v4 (incluindo as do `tw-animate-css`) precisam ser geradas no arquivo do consumidor que tem `@import "tailwindcss"`, porque `@utility` directives são processados no escopo desse arquivo.
|
|
27
|
+
|
|
28
|
+
## Uso
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import { Button, Input, Badge } from "@vegait/lyra-ds";
|
|
32
|
+
|
|
33
|
+
export function Example() {
|
|
34
|
+
return (
|
|
35
|
+
<div>
|
|
36
|
+
<Button variant="primary">Salvar</Button>
|
|
37
|
+
<Input label="Nome" placeholder="Digite seu nome" />
|
|
38
|
+
<Badge variant="success">Ativo</Badge>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Stack técnica
|
|
45
|
+
|
|
46
|
+
- **Radix UI** — primitivos acessíveis (focus trap, keyboard nav, ARIA)
|
|
47
|
+
- **CVA** (class-variance-authority) — variantes de componentes
|
|
48
|
+
- **Tailwind v4** — utilitários e tokens CSS
|
|
49
|
+
- **tsup** — build ESM + CJS com `sideEffects: false`
|
|
50
|
+
|
|
51
|
+
Esta biblioteca usa o modelo de distribuição npm (não shadcn copy-paste). Ver decisão em `lyra-ds-v2-decisao-shadcn`.
|
|
52
|
+
|
|
53
|
+
## Tokens CSS
|
|
54
|
+
|
|
55
|
+
Os tokens são importados via `@vegait/lyra-ds/styles`. Cadeia de tokens:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Primitivos → Brand → Semânticos → Componente
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Exemplos: `--color-action-primary`, `--color-feedback-error`, `--color-background-page`.
|
|
62
|
+
|
|
63
|
+
## Componentes disponíveis
|
|
64
|
+
|
|
65
|
+
| Componente | Descrição |
|
|
66
|
+
|------------|-----------|
|
|
67
|
+
| `Button` | Ações primárias, secundárias, destrutivas e de ícone |
|
|
68
|
+
| `Input` | Campo de texto com label, helper e estado de erro |
|
|
69
|
+
| `Badge` | Rótulos de status compactos |
|
|
70
|
+
| `Card` / `CardHeader` / `CardContent` | Container de conteúdo |
|
|
71
|
+
| `Alert` | Feedback de sistema (info, success, warning, error) |
|
|
72
|
+
| `Modal` | Dialog genérico com header, body e footer |
|
|
73
|
+
| `DestructiveDialog` | Confirmação de ação destrutiva com input opcional |
|
|
74
|
+
| `Tabs` / `TabsRoot` / `TabsList` / `TabsTrigger` / `TabsContent` | Navegação intra-página |
|
|
75
|
+
| `StatusTag` | Tag semântica (active, invited, pending, suspended, inactive) |
|
|
76
|
+
| `EmptyState` | Tela vazia (no-data, no-results, error, no-permission) |
|
|
77
|
+
| `ListPage` | Template de página de listagem com filtro, tabela e paginação |
|
|
78
|
+
| `Avatar` | Imagem ou iniciais de usuário |
|
|
79
|
+
| `Skeleton` / `SkeletonText` / `SkeletonAvatar` / `SkeletonCard` / `SkeletonButton` | Placeholders de carregamento |
|
|
80
|
+
| `Tooltip` | Texto auxiliar em hover/focus |
|
|
81
|
+
| `Toggle` | Switch ligado/desligado |
|
|
82
|
+
| `DropdownMenu` | Menu suspenso com grupos, labels e separadores |
|
|
83
|
+
| `Sidebar` | Menu lateral com logo, nav items e perfil |
|
|
84
|
+
|
|
85
|
+
## Criando um novo componente
|
|
86
|
+
|
|
87
|
+
1. Crie `packages/lyra-ds/src/components/nome-do-componente.tsx`
|
|
88
|
+
2. Use Radix UI como primitivo quando disponível
|
|
89
|
+
3. Defina variantes com CVA e aplique tokens CSS (nunca valores hardcoded)
|
|
90
|
+
4. Exporte do `src/index.ts`
|
|
91
|
+
5. Crie a página de showcase em `apps/showcase/app/style-guides/nome-do-componente/page.tsx`
|
|
92
|
+
6. Rode `pnpm lint` e `pnpm typecheck` antes de commitar
|
|
93
|
+
|
|
94
|
+
### Template mínimo
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
"use client";
|
|
98
|
+
|
|
99
|
+
import * as React from "react";
|
|
100
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
101
|
+
import { cn } from "../lib/utils";
|
|
102
|
+
|
|
103
|
+
const componentVariants = cva("base-classes", {
|
|
104
|
+
variants: {
|
|
105
|
+
variant: {
|
|
106
|
+
default: "...",
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
defaultVariants: {
|
|
110
|
+
variant: "default",
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
export interface ComponentProps
|
|
115
|
+
extends React.HTMLAttributes<HTMLDivElement>,
|
|
116
|
+
VariantProps<typeof componentVariants> {}
|
|
117
|
+
|
|
118
|
+
function Component({ className, variant, ...props }: ComponentProps) {
|
|
119
|
+
return (
|
|
120
|
+
<div className={cn(componentVariants({ variant }), className)} {...props} />
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export { Component };
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Contribuindo
|
|
128
|
+
|
|
129
|
+
- `pnpm dev` para desenvolvimento com hot reload
|
|
130
|
+
- `pnpm lint` deve passar sem erros antes de qualquer PR
|
|
131
|
+
- `pnpm typecheck` deve passar sem erros antes de qualquer PR
|
|
132
|
+
- Tokens CSS sempre, zero valores hardcoded
|
|
133
|
+
- `focus-visible:` para estados de foco (não `focus:`)
|
|
134
|
+
- Adicionar `"use client"` em componentes que usam hooks de estado ou eventos de browser
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
Button
|
|
4
|
+
} from "./chunk-EMKU3IZY.js";
|
|
5
|
+
import {
|
|
6
|
+
cn
|
|
7
|
+
} from "./chunk-KQJCGTS3.js";
|
|
8
|
+
|
|
9
|
+
// src/components/empty-state.tsx
|
|
10
|
+
import { Inbox, SearchX, AlertCircle, Lock } from "lucide-react";
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
var DEFAULT_ICONS = {
|
|
13
|
+
"no-data": Inbox,
|
|
14
|
+
"no-results": SearchX,
|
|
15
|
+
error: AlertCircle,
|
|
16
|
+
"no-permission": Lock
|
|
17
|
+
};
|
|
18
|
+
function EmptyState({
|
|
19
|
+
className,
|
|
20
|
+
variant,
|
|
21
|
+
title,
|
|
22
|
+
description,
|
|
23
|
+
primaryAction,
|
|
24
|
+
secondaryAction,
|
|
25
|
+
icon: IconProp,
|
|
26
|
+
size = "inline",
|
|
27
|
+
...props
|
|
28
|
+
}) {
|
|
29
|
+
const Icon = IconProp ?? DEFAULT_ICONS[variant];
|
|
30
|
+
const isError = variant === "error";
|
|
31
|
+
const iconContainerSize = size === "full" ? "size-16" : "size-12";
|
|
32
|
+
const iconSize = size === "full" ? "size-8" : "size-6";
|
|
33
|
+
const titleClass = size === "full" ? "text-display-sm" : "text-heading";
|
|
34
|
+
const hasActions = primaryAction || secondaryAction;
|
|
35
|
+
return /* @__PURE__ */ jsxs(
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
className: cn(
|
|
39
|
+
"flex flex-col items-center justify-center text-center",
|
|
40
|
+
size === "full" ? "py-16 gap-4" : "py-10 gap-3",
|
|
41
|
+
className
|
|
42
|
+
),
|
|
43
|
+
...props,
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ jsx(
|
|
46
|
+
"div",
|
|
47
|
+
{
|
|
48
|
+
className: cn(
|
|
49
|
+
"rounded-full flex items-center justify-center bg-[var(--color-surf-container-high)]",
|
|
50
|
+
iconContainerSize
|
|
51
|
+
),
|
|
52
|
+
children: /* @__PURE__ */ jsx(
|
|
53
|
+
Icon,
|
|
54
|
+
{
|
|
55
|
+
className: cn(
|
|
56
|
+
iconSize,
|
|
57
|
+
isError ? "text-[var(--color-error)]" : "text-[var(--color-on-surface-var)]"
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
),
|
|
63
|
+
/* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-1", size === "full" ? "max-w-sm" : "max-w-xs"), children: [
|
|
64
|
+
/* @__PURE__ */ jsx("p", { className: cn(titleClass, "text-[var(--color-on-surface)]"), children: title }),
|
|
65
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-body-md text-[var(--color-on-surface-var)]", children: description })
|
|
66
|
+
] }),
|
|
67
|
+
hasActions && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 mt-1", children: [
|
|
68
|
+
primaryAction && variant !== "no-permission" && /* @__PURE__ */ jsx(
|
|
69
|
+
Button,
|
|
70
|
+
{
|
|
71
|
+
variant: "primary",
|
|
72
|
+
size: size === "full" ? "md" : "sm",
|
|
73
|
+
onClick: primaryAction.onClick,
|
|
74
|
+
loading: primaryAction.loading,
|
|
75
|
+
children: primaryAction.label
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
secondaryAction && /* @__PURE__ */ jsx(
|
|
79
|
+
"button",
|
|
80
|
+
{
|
|
81
|
+
type: "button",
|
|
82
|
+
onClick: secondaryAction.onClick,
|
|
83
|
+
className: "text-body-sm font-semibold text-[var(--color-primary)] underline hover:no-underline",
|
|
84
|
+
children: secondaryAction.label
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
] })
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export {
|
|
94
|
+
EmptyState
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=chunk-32QWDFOV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/empty-state.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Inbox, SearchX, AlertCircle, Lock } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { cn } from \"../lib/utils\";\n\nconst DEFAULT_ICONS: Record<string, LucideIcon> = {\n \"no-data\": Inbox,\n \"no-results\": SearchX,\n error: AlertCircle,\n \"no-permission\": Lock,\n};\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n variant: \"no-data\" | \"no-results\" | \"error\" | \"no-permission\";\n title: string;\n description?: string;\n primaryAction?: {\n label: string;\n onClick: () => void;\n loading?: boolean;\n };\n secondaryAction?: {\n label: string;\n onClick: () => void;\n };\n icon?: LucideIcon;\n size?: \"full\" | \"inline\";\n}\n\nfunction EmptyState({\n className,\n variant,\n title,\n description,\n primaryAction,\n secondaryAction,\n icon: IconProp,\n size = \"inline\",\n ...props\n}: EmptyStateProps) {\n const Icon = IconProp ?? DEFAULT_ICONS[variant];\n const isError = variant === \"error\";\n const iconContainerSize = size === \"full\" ? \"size-16\" : \"size-12\";\n const iconSize = size === \"full\" ? \"size-8\" : \"size-6\";\n const titleClass = size === \"full\" ? \"text-display-sm\" : \"text-heading\";\n const hasActions = primaryAction || secondaryAction;\n\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center text-center\",\n size === \"full\" ? \"py-16 gap-4\" : \"py-10 gap-3\",\n className\n )}\n {...props}\n >\n <div\n className={cn(\n \"rounded-full flex items-center justify-center bg-[var(--color-surf-container-high)]\",\n iconContainerSize\n )}\n >\n <Icon\n className={cn(\n iconSize,\n isError\n ? \"text-[var(--color-error)]\"\n : \"text-[var(--color-on-surface-var)]\"\n )}\n />\n </div>\n\n <div className={cn(\"flex flex-col gap-1\", size === \"full\" ? \"max-w-sm\" : \"max-w-xs\")}>\n <p className={cn(titleClass, \"text-[var(--color-on-surface)]\")}>{title}</p>\n {description && (\n <p className=\"text-body-md text-[var(--color-on-surface-var)]\">{description}</p>\n )}\n </div>\n\n {hasActions && (\n <div className=\"flex items-center gap-3 mt-1\">\n {primaryAction && variant !== \"no-permission\" && (\n <Button\n variant=\"primary\"\n size={size === \"full\" ? \"md\" : \"sm\"}\n onClick={primaryAction.onClick}\n loading={primaryAction.loading}\n >\n {primaryAction.label}\n </Button>\n )}\n {secondaryAction && (\n <button\n type=\"button\"\n onClick={secondaryAction.onClick}\n className=\"text-body-sm font-semibold text-[var(--color-primary)] underline hover:no-underline\"\n >\n {secondaryAction.label}\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { EmptyState };\n"],"mappings":";;;;;;;;;AACA,SAAS,OAAO,SAAS,aAAa,YAAY;AA8D1C,cAUF,YAVE;AAzDR,IAAM,gBAA4C;AAAA,EAChD,WAAW;AAAA,EACX,cAAc;AAAA,EACd,OAAO;AAAA,EACP,iBAAiB;AACnB;AAmBA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN,OAAO;AAAA,EACP,GAAG;AACL,GAAoB;AAClB,QAAM,OAAO,YAAY,cAAc,OAAO;AAC9C,QAAM,UAAU,YAAY;AAC5B,QAAM,oBAAoB,SAAS,SAAS,YAAY;AACxD,QAAM,WAAW,SAAS,SAAS,WAAW;AAC9C,QAAM,aAAa,SAAS,SAAS,oBAAoB;AACzD,QAAM,aAAa,iBAAiB;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,SAAS,SAAS,gBAAgB;AAAA,QAClC;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,UACI,8BACA;AAAA,gBACN;AAAA;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAEA,qBAAC,SAAI,WAAW,GAAG,uBAAuB,SAAS,SAAS,aAAa,UAAU,GACjF;AAAA,8BAAC,OAAE,WAAW,GAAG,YAAY,gCAAgC,GAAI,iBAAM;AAAA,UACtE,eACC,oBAAC,OAAE,WAAU,mDAAmD,uBAAY;AAAA,WAEhF;AAAA,QAEC,cACC,qBAAC,SAAI,WAAU,gCACZ;AAAA,2BAAiB,YAAY,mBAC5B;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAM,SAAS,SAAS,OAAO;AAAA,cAC/B,SAAS,cAAc;AAAA,cACvB,SAAS,cAAc;AAAA,cAEtB,wBAAc;AAAA;AAAA,UACjB;AAAA,UAED,mBACC;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,gBAAgB;AAAA,cACzB,WAAU;AAAA,cAET,0BAAgB;AAAA;AAAA,UACnB;AAAA,WAEJ;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkLUQS7LYGcjs = require('./chunk-LUQS7LYG.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunk5SCF3EGTcjs = require('./chunk-5SCF3EGT.cjs');
|
|
8
|
+
|
|
9
|
+
// src/components/empty-state.tsx
|
|
10
|
+
var _lucidereact = require('lucide-react');
|
|
11
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
12
|
+
var DEFAULT_ICONS = {
|
|
13
|
+
"no-data": _lucidereact.Inbox,
|
|
14
|
+
"no-results": _lucidereact.SearchX,
|
|
15
|
+
error: _lucidereact.AlertCircle,
|
|
16
|
+
"no-permission": _lucidereact.Lock
|
|
17
|
+
};
|
|
18
|
+
function EmptyState({
|
|
19
|
+
className,
|
|
20
|
+
variant,
|
|
21
|
+
title,
|
|
22
|
+
description,
|
|
23
|
+
primaryAction,
|
|
24
|
+
secondaryAction,
|
|
25
|
+
icon: IconProp,
|
|
26
|
+
size = "inline",
|
|
27
|
+
...props
|
|
28
|
+
}) {
|
|
29
|
+
const Icon = _nullishCoalesce(IconProp, () => ( DEFAULT_ICONS[variant]));
|
|
30
|
+
const isError = variant === "error";
|
|
31
|
+
const iconContainerSize = size === "full" ? "size-16" : "size-12";
|
|
32
|
+
const iconSize = size === "full" ? "size-8" : "size-6";
|
|
33
|
+
const titleClass = size === "full" ? "text-display-sm" : "text-heading";
|
|
34
|
+
const hasActions = primaryAction || secondaryAction;
|
|
35
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
className: _chunk5SCF3EGTcjs.cn.call(void 0,
|
|
39
|
+
"flex flex-col items-center justify-center text-center",
|
|
40
|
+
size === "full" ? "py-16 gap-4" : "py-10 gap-3",
|
|
41
|
+
className
|
|
42
|
+
),
|
|
43
|
+
...props,
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
46
|
+
"div",
|
|
47
|
+
{
|
|
48
|
+
className: _chunk5SCF3EGTcjs.cn.call(void 0,
|
|
49
|
+
"rounded-full flex items-center justify-center bg-[var(--color-surf-container-high)]",
|
|
50
|
+
iconContainerSize
|
|
51
|
+
),
|
|
52
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
53
|
+
Icon,
|
|
54
|
+
{
|
|
55
|
+
className: _chunk5SCF3EGTcjs.cn.call(void 0,
|
|
56
|
+
iconSize,
|
|
57
|
+
isError ? "text-[var(--color-error)]" : "text-[var(--color-on-surface-var)]"
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
),
|
|
63
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk5SCF3EGTcjs.cn.call(void 0, "flex flex-col gap-1", size === "full" ? "max-w-sm" : "max-w-xs"), children: [
|
|
64
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: _chunk5SCF3EGTcjs.cn.call(void 0, titleClass, "text-[var(--color-on-surface)]"), children: title }),
|
|
65
|
+
description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-body-md text-[var(--color-on-surface-var)]", children: description })
|
|
66
|
+
] }),
|
|
67
|
+
hasActions && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3 mt-1", children: [
|
|
68
|
+
primaryAction && variant !== "no-permission" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
69
|
+
_chunkLUQS7LYGcjs.Button,
|
|
70
|
+
{
|
|
71
|
+
variant: "primary",
|
|
72
|
+
size: size === "full" ? "md" : "sm",
|
|
73
|
+
onClick: primaryAction.onClick,
|
|
74
|
+
loading: primaryAction.loading,
|
|
75
|
+
children: primaryAction.label
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
secondaryAction && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
79
|
+
"button",
|
|
80
|
+
{
|
|
81
|
+
type: "button",
|
|
82
|
+
onClick: secondaryAction.onClick,
|
|
83
|
+
className: "text-body-sm font-semibold text-[var(--color-primary)] underline hover:no-underline",
|
|
84
|
+
children: secondaryAction.label
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
] })
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
exports.EmptyState = EmptyState;
|
|
96
|
+
//# sourceMappingURL=chunk-4EEFY4FU.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/isaac/vega/lyra/lyra-ds.v3/packages/lyra-ds/dist/chunk-4EEFY4FU.cjs","../src/components/empty-state.tsx"],"names":[],"mappings":"AAAA,yLAAY;AACZ;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACPA,2CAAkD;AA8D1C,+CAAA;AAzDR,IAAM,cAAA,EAA4C;AAAA,EAChD,SAAA,EAAW,kBAAA;AAAA,EACX,YAAA,EAAc,oBAAA;AAAA,EACd,KAAA,EAAO,wBAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAmBA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAoB;AAClB,EAAA,MAAM,KAAA,mBAAO,QAAA,UAAY,aAAA,CAAc,OAAO,GAAA;AAC9C,EAAA,MAAM,QAAA,EAAU,QAAA,IAAY,OAAA;AAC5B,EAAA,MAAM,kBAAA,EAAoB,KAAA,IAAS,OAAA,EAAS,UAAA,EAAY,SAAA;AACxD,EAAA,MAAM,SAAA,EAAW,KAAA,IAAS,OAAA,EAAS,SAAA,EAAW,QAAA;AAC9C,EAAA,MAAM,WAAA,EAAa,KAAA,IAAS,OAAA,EAAS,kBAAA,EAAoB,cAAA;AACzD,EAAA,MAAM,WAAA,EAAa,cAAA,GAAiB,eAAA;AAEpC,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,kCAAA;AAAA,QACT,uDAAA;AAAA,QACA,KAAA,IAAS,OAAA,EAAS,cAAA,EAAgB,aAAA;AAAA,QAClC;AAAA,MACF,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,6BAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,kCAAA;AAAA,cACT,qFAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YAEA,QAAA,kBAAA,6BAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,kCAAA;AAAA,kBACT,QAAA;AAAA,kBACA,QAAA,EACI,4BAAA,EACA;AAAA,gBACN;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QACF,CAAA;AAAA,wBAEA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAW,kCAAA,qBAAG,EAAuB,KAAA,IAAS,OAAA,EAAS,WAAA,EAAa,UAAU,CAAA,EACjF,QAAA,EAAA;AAAA,0BAAA,6BAAA,GAAC,EAAA,EAAE,SAAA,EAAW,kCAAA,UAAG,EAAY,gCAAgC,CAAA,EAAI,QAAA,EAAA,MAAA,CAAM,CAAA;AAAA,UACtE,YAAA,mBACC,6BAAA,GAAC,EAAA,EAAE,SAAA,EAAU,iDAAA,EAAmD,QAAA,EAAA,YAAA,CAAY;AAAA,QAAA,EAAA,CAEhF,CAAA;AAAA,QAEC,WAAA,mBACC,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,8BAAA,EACZ,QAAA,EAAA;AAAA,UAAA,cAAA,GAAiB,QAAA,IAAY,gBAAA,mBAC5B,6BAAA;AAAA,YAAC,wBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAM,KAAA,IAAS,OAAA,EAAS,KAAA,EAAO,IAAA;AAAA,cAC/B,OAAA,EAAS,aAAA,CAAc,OAAA;AAAA,cACvB,OAAA,EAAS,aAAA,CAAc,OAAA;AAAA,cAEtB,QAAA,EAAA,aAAA,CAAc;AAAA,YAAA;AAAA,UACjB,CAAA;AAAA,UAED,gBAAA,mBACC,6BAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,eAAA,CAAgB,OAAA;AAAA,cACzB,SAAA,EAAU,qFAAA;AAAA,cAET,QAAA,EAAA,eAAA,CAAgB;AAAA,YAAA;AAAA,UACnB;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,CAAA;AAEJ;ADdA;AACA;AACE;AACF,gCAAC","file":"/home/isaac/vega/lyra/lyra-ds.v3/packages/lyra-ds/dist/chunk-4EEFY4FU.cjs","sourcesContent":[null,"import * as React from \"react\";\nimport { Inbox, SearchX, AlertCircle, Lock } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { cn } from \"../lib/utils\";\n\nconst DEFAULT_ICONS: Record<string, LucideIcon> = {\n \"no-data\": Inbox,\n \"no-results\": SearchX,\n error: AlertCircle,\n \"no-permission\": Lock,\n};\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n variant: \"no-data\" | \"no-results\" | \"error\" | \"no-permission\";\n title: string;\n description?: string;\n primaryAction?: {\n label: string;\n onClick: () => void;\n loading?: boolean;\n };\n secondaryAction?: {\n label: string;\n onClick: () => void;\n };\n icon?: LucideIcon;\n size?: \"full\" | \"inline\";\n}\n\nfunction EmptyState({\n className,\n variant,\n title,\n description,\n primaryAction,\n secondaryAction,\n icon: IconProp,\n size = \"inline\",\n ...props\n}: EmptyStateProps) {\n const Icon = IconProp ?? DEFAULT_ICONS[variant];\n const isError = variant === \"error\";\n const iconContainerSize = size === \"full\" ? \"size-16\" : \"size-12\";\n const iconSize = size === \"full\" ? \"size-8\" : \"size-6\";\n const titleClass = size === \"full\" ? \"text-display-sm\" : \"text-heading\";\n const hasActions = primaryAction || secondaryAction;\n\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center text-center\",\n size === \"full\" ? \"py-16 gap-4\" : \"py-10 gap-3\",\n className\n )}\n {...props}\n >\n <div\n className={cn(\n \"rounded-full flex items-center justify-center bg-[var(--color-surf-container-high)]\",\n iconContainerSize\n )}\n >\n <Icon\n className={cn(\n iconSize,\n isError\n ? \"text-[var(--color-error)]\"\n : \"text-[var(--color-on-surface-var)]\"\n )}\n />\n </div>\n\n <div className={cn(\"flex flex-col gap-1\", size === \"full\" ? \"max-w-sm\" : \"max-w-xs\")}>\n <p className={cn(titleClass, \"text-[var(--color-on-surface)]\")}>{title}</p>\n {description && (\n <p className=\"text-body-md text-[var(--color-on-surface-var)]\">{description}</p>\n )}\n </div>\n\n {hasActions && (\n <div className=\"flex items-center gap-3 mt-1\">\n {primaryAction && variant !== \"no-permission\" && (\n <Button\n variant=\"primary\"\n size={size === \"full\" ? \"md\" : \"sm\"}\n onClick={primaryAction.onClick}\n loading={primaryAction.loading}\n >\n {primaryAction.label}\n </Button>\n )}\n {secondaryAction && (\n <button\n type=\"button\"\n onClick={secondaryAction.onClick}\n className=\"text-body-sm font-semibold text-[var(--color-primary)] underline hover:no-underline\"\n >\n {secondaryAction.label}\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { EmptyState };\n"]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunk5SCF3EGTcjs = require('./chunk-5SCF3EGT.cjs');
|
|
5
|
+
|
|
6
|
+
// src/components/radio-group.tsx
|
|
7
|
+
var _react = require('react'); var React = _interopRequireWildcard(_react);
|
|
8
|
+
var _reactradiogroup = require('@radix-ui/react-radio-group'); var RadixRadioGroup = _interopRequireWildcard(_reactradiogroup);
|
|
9
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
10
|
+
var RadioGroup = React.forwardRef(
|
|
11
|
+
({
|
|
12
|
+
value,
|
|
13
|
+
defaultValue,
|
|
14
|
+
onValueChange,
|
|
15
|
+
disabled,
|
|
16
|
+
orientation = "vertical",
|
|
17
|
+
className,
|
|
18
|
+
children
|
|
19
|
+
}, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
20
|
+
RadixRadioGroup.Root,
|
|
21
|
+
{
|
|
22
|
+
ref,
|
|
23
|
+
value,
|
|
24
|
+
defaultValue,
|
|
25
|
+
onValueChange,
|
|
26
|
+
disabled,
|
|
27
|
+
orientation,
|
|
28
|
+
className: _chunk5SCF3EGTcjs.cn.call(void 0,
|
|
29
|
+
"flex",
|
|
30
|
+
orientation === "vertical" ? "flex-col gap-2" : "flex-row flex-wrap gap-4",
|
|
31
|
+
className
|
|
32
|
+
),
|
|
33
|
+
children
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
);
|
|
37
|
+
var RadioGroupItem = React.forwardRef(({ value, label, description, disabled, id: idProp }, ref) => {
|
|
38
|
+
const generatedId = React.useId();
|
|
39
|
+
const id = _nullishCoalesce(idProp, () => ( generatedId));
|
|
40
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk5SCF3EGTcjs.cn.call(void 0, "flex items-start gap-3", disabled && "opacity-50 cursor-not-allowed"), children: [
|
|
41
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
42
|
+
RadixRadioGroup.Item,
|
|
43
|
+
{
|
|
44
|
+
ref,
|
|
45
|
+
id,
|
|
46
|
+
value,
|
|
47
|
+
disabled,
|
|
48
|
+
className: _chunk5SCF3EGTcjs.cn.call(void 0,
|
|
49
|
+
"mt-0.5 size-4 shrink-0 rounded-full border-2 border-[var(--color-outline)]",
|
|
50
|
+
"transition-colors duration-[var(--duration-fast)]",
|
|
51
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--state-focus-ring)] focus-visible:ring-offset-2",
|
|
52
|
+
"data-[state=checked]:border-[var(--color-primary)] data-[state=checked]:bg-[var(--color-primary)]",
|
|
53
|
+
"disabled:cursor-not-allowed",
|
|
54
|
+
"relative flex items-center justify-center"
|
|
55
|
+
),
|
|
56
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
57
|
+
RadixRadioGroup.Indicator,
|
|
58
|
+
{
|
|
59
|
+
className: "flex items-center justify-center",
|
|
60
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "size-1.5 rounded-full bg-white block" })
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
),
|
|
65
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col", children: [
|
|
66
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
67
|
+
"label",
|
|
68
|
+
{
|
|
69
|
+
htmlFor: id,
|
|
70
|
+
className: _chunk5SCF3EGTcjs.cn.call(void 0,
|
|
71
|
+
"text-body-md cursor-pointer text-[var(--color-on-surface)] leading-none pt-0.5",
|
|
72
|
+
disabled && "cursor-not-allowed"
|
|
73
|
+
),
|
|
74
|
+
children: label
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-body-sm text-[var(--color-on-surface-var)] mt-0.5", children: description })
|
|
78
|
+
] })
|
|
79
|
+
] });
|
|
80
|
+
});
|
|
81
|
+
RadioGroup.displayName = "RadioGroup";
|
|
82
|
+
RadioGroupItem.displayName = "RadioGroupItem";
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
exports.RadioGroup = RadioGroup; exports.RadioGroupItem = RadioGroupItem;
|
|
88
|
+
//# sourceMappingURL=chunk-562W4FCG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/isaac/vega/lyra/lyra-ds.v3/packages/lyra-ds/dist/chunk-562W4FCG.cjs","../src/components/radio-group.tsx"],"names":[],"mappings":"AAAA,2cAAY;AACZ;AACE;AACF,wDAA6B;AAC7B;AACA;ACHA,2EAAuB;AACvB,+HAAiC;AA6B7B,+CAAA;AAhBJ,IAAM,WAAA,EAAmB,KAAA,CAAA,UAAA;AAAA,EAIvB,CACE;AAAA,IACE,KAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA,EAAc,UAAA;AAAA,IACd,SAAA;AAAA,IACA;AAAA,EACF,CAAA,EACA,GAAA,EAAA,mBAEA,6BAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,GAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,kCAAA;AAAA,QACT,MAAA;AAAA,QACA,YAAA,IAAgB,WAAA,EAAa,iBAAA,EAAmB,0BAAA;AAAA,QAChD;AAAA,MACF,CAAA;AAAA,MAEC;AAAA,IAAA;AAAA,EACH;AAEJ,CAAA;AAUA,IAAM,eAAA,EAAuB,KAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,KAAA,EAAO,KAAA,EAAO,WAAA,EAAa,QAAA,EAAU,EAAA,EAAI,OAAO,CAAA,EAAG,GAAA,EAAA,GAAQ;AAC9D,EAAA,MAAM,YAAA,EAAoB,KAAA,CAAA,KAAA,CAAM,CAAA;AAChC,EAAA,MAAM,GAAA,mBAAK,MAAA,UAAU,aAAA;AAErB,EAAA,uBACE,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAW,kCAAA,wBAAG,EAA0B,SAAA,GAAY,+BAA+B,CAAA,EACtF,QAAA,EAAA;AAAA,oBAAA,6BAAA;AAAA,MAAiB,eAAA,CAAA,IAAA;AAAA,MAAhB;AAAA,QACC,GAAA;AAAA,QACA,EAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA,EAAW,kCAAA;AAAA,UACT,4EAAA;AAAA,UACA,mDAAA;AAAA,UACA,0HAAA;AAAA,UACA,mGAAA;AAAA,UACA,6BAAA;AAAA,UACA;AAAA,QACF,CAAA;AAAA,QAEA,QAAA,kBAAA,6BAAA;AAAA,UAAiB,eAAA,CAAA,SAAA;AAAA,UAAhB;AAAA,YACC,SAAA,EAAU,kCAAA;AAAA,YAEV,QAAA,kBAAA,6BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,uCAAA,CAAuC;AAAA,UAAA;AAAA,QACzD;AAAA,MAAA;AAAA,IACF,CAAA;AAAA,oBAEA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAA,6BAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,EAAA;AAAA,UACT,SAAA,EAAW,kCAAA;AAAA,YACT,gFAAA;AAAA,YACA,SAAA,GAAY;AAAA,UACd,CAAA;AAAA,UAEC,QAAA,EAAA;AAAA,QAAA;AAAA,MACH,CAAA;AAAA,MACC,YAAA,mBACC,6BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,wDAAA,EACb,QAAA,EAAA,YAAA,CACH;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,EAAA,CACF,CAAA;AAEJ,CAAC,CAAA;AAED,UAAA,CAAW,YAAA,EAAc,YAAA;AACzB,cAAA,CAAe,YAAA,EAAc,gBAAA;AD3B7B;AACA;AACE;AACA;AACF,yEAAC","file":"/home/isaac/vega/lyra/lyra-ds.v3/packages/lyra-ds/dist/chunk-562W4FCG.cjs","sourcesContent":[null,"\"use client\";\n\nimport * as React from \"react\";\nimport * as RadixRadioGroup from \"@radix-ui/react-radio-group\";\nimport { cn } from \"../lib/utils\";\n\nexport interface RadioGroupProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n disabled?: boolean;\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n children: React.ReactNode;\n}\n\nconst RadioGroup = React.forwardRef<\n React.ComponentRef<typeof RadixRadioGroup.Root>,\n RadioGroupProps\n>(\n (\n {\n value,\n defaultValue,\n onValueChange,\n disabled,\n orientation = \"vertical\",\n className,\n children,\n },\n ref\n ) => (\n <RadixRadioGroup.Root\n ref={ref}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n disabled={disabled}\n orientation={orientation}\n className={cn(\n \"flex\",\n orientation === \"vertical\" ? \"flex-col gap-2\" : \"flex-row flex-wrap gap-4\",\n className\n )}\n >\n {children}\n </RadixRadioGroup.Root>\n )\n);\n\nexport interface RadioGroupItemProps {\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n id?: string;\n}\n\nconst RadioGroupItem = React.forwardRef<\n React.ComponentRef<typeof RadixRadioGroup.Item>,\n RadioGroupItemProps\n>(({ value, label, description, disabled, id: idProp }, ref) => {\n const generatedId = React.useId();\n const id = idProp ?? generatedId;\n\n return (\n <div className={cn(\"flex items-start gap-3\", disabled && \"opacity-50 cursor-not-allowed\")}>\n <RadixRadioGroup.Item\n ref={ref}\n id={id}\n value={value}\n disabled={disabled}\n className={cn(\n \"mt-0.5 size-4 shrink-0 rounded-full border-2 border-[var(--color-outline)]\",\n \"transition-colors duration-[var(--duration-fast)]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--state-focus-ring)] focus-visible:ring-offset-2\",\n \"data-[state=checked]:border-[var(--color-primary)] data-[state=checked]:bg-[var(--color-primary)]\",\n \"disabled:cursor-not-allowed\",\n \"relative flex items-center justify-center\"\n )}\n >\n <RadixRadioGroup.Indicator\n className=\"flex items-center justify-center\"\n >\n <span className=\"size-1.5 rounded-full bg-white block\" />\n </RadixRadioGroup.Indicator>\n </RadixRadioGroup.Item>\n\n <div className=\"flex flex-col\">\n <label\n htmlFor={id}\n className={cn(\n \"text-body-md cursor-pointer text-[var(--color-on-surface)] leading-none pt-0.5\",\n disabled && \"cursor-not-allowed\"\n )}\n >\n {label}\n </label>\n {description && (\n <span className=\"text-body-sm text-[var(--color-on-surface-var)] mt-0.5\">\n {description}\n </span>\n )}\n </div>\n </div>\n );\n});\n\nRadioGroup.displayName = \"RadioGroup\";\nRadioGroupItem.displayName = \"RadioGroupItem\";\n\nexport { RadioGroup, RadioGroupItem };\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
// src/lib/utils.ts
|
|
4
|
+
var _clsx = require('clsx');
|
|
5
|
+
var _tailwindmerge = require('tailwind-merge');
|
|
6
|
+
function cn(...inputs) {
|
|
7
|
+
return _tailwindmerge.twMerge.call(void 0, _clsx.clsx.call(void 0, inputs));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
exports.cn = cn;
|
|
13
|
+
//# sourceMappingURL=chunk-5SCF3EGT.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/isaac/vega/lyra/lyra-ds.v3/packages/lyra-ds/dist/chunk-5SCF3EGT.cjs","../src/lib/utils.ts"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACA;ACFA,4BAAsC;AACtC,+CAAwB;AAEjB,SAAS,EAAA,CAAA,GAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,oCAAA,wBAAQ,MAAW,CAAC,CAAA;AAC7B;ADGA;AACA;AACE;AACF,gBAAC","file":"/home/isaac/vega/lyra/lyra-ds.v3/packages/lyra-ds/dist/chunk-5SCF3EGT.cjs","sourcesContent":[null,"import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunk5SCF3EGTcjs = require('./chunk-5SCF3EGT.cjs');
|
|
5
|
+
|
|
6
|
+
// src/components/filter-chips.tsx
|
|
7
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
8
|
+
function FilterChips({ filters, active, onChange }) {
|
|
9
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-1 overflow-x-auto", children: filters.map((f) => {
|
|
10
|
+
const isActive = f.value === active;
|
|
11
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
12
|
+
"button",
|
|
13
|
+
{
|
|
14
|
+
type: "button",
|
|
15
|
+
onClick: () => onChange(f.value),
|
|
16
|
+
className: _chunk5SCF3EGTcjs.cn.call(void 0,
|
|
17
|
+
"inline-flex items-center gap-1 px-3 py-1 rounded-[var(--radius-md)] text-[13px] font-semibold whitespace-nowrap transition-colors",
|
|
18
|
+
isActive ? "bg-[var(--color-primary)] text-white" : "bg-transparent text-[var(--color-on-surface-var)] hover:bg-[var(--color-surf-container-low)]"
|
|
19
|
+
),
|
|
20
|
+
children: [
|
|
21
|
+
f.label,
|
|
22
|
+
" ",
|
|
23
|
+
f.count
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
f.value
|
|
27
|
+
);
|
|
28
|
+
}) });
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
exports.FilterChips = FilterChips;
|
|
34
|
+
//# sourceMappingURL=chunk-5XB7CPVP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/isaac/vega/lyra/lyra-ds.v3/packages/lyra-ds/dist/chunk-5XB7CPVP.cjs","../src/components/filter-chips.tsx"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,wDAA6B;AAC7B;AACA;ACYI,+CAAA;AAFJ,SAAS,WAAA,CAAY,EAAE,OAAA,EAAS,MAAA,EAAQ,SAAS,CAAA,EAAqB;AACpE,EAAA,uBACE,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,yCAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAA,GAAM;AAClB,IAAA,MAAM,SAAA,EAAW,CAAA,CAAE,MAAA,IAAU,MAAA;AAC7B,IAAA,uBACE,8BAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,CAAA,EAAA,GAAM,QAAA,CAAS,CAAA,CAAE,KAAK,CAAA;AAAA,QAC/B,SAAA,EAAW,kCAAA;AAAA,UACT,mIAAA;AAAA,UACA,SAAA,EACI,uCAAA,EACA;AAAA,QACN,CAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,CAAA,CAAE,KAAA;AAAA,UAAM,GAAA;AAAA,UAAE,CAAA,CAAE;AAAA,QAAA;AAAA,MAAA,CAAA;AAAA,MAVR,CAAA,CAAE;AAAA,IAWT,CAAA;AAAA,EAEJ,CAAC,EAAA,CACH,CAAA;AAEJ;ADTA;AACA;AACE;AACF,kCAAC","file":"/home/isaac/vega/lyra/lyra-ds.v3/packages/lyra-ds/dist/chunk-5XB7CPVP.cjs","sourcesContent":[null,"import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface ListPageFilter {\n label: string;\n value: string;\n count: number;\n}\n\nexport interface FilterChipsProps {\n filters: ListPageFilter[];\n active: string;\n onChange: (value: string) => void;\n}\n\nfunction FilterChips({ filters, active, onChange }: FilterChipsProps) {\n return (\n <div className=\"flex items-center gap-1 overflow-x-auto\">\n {filters.map((f) => {\n const isActive = f.value === active;\n return (\n <button\n key={f.value}\n type=\"button\"\n onClick={() => onChange(f.value)}\n className={cn(\n \"inline-flex items-center gap-1 px-3 py-1 rounded-[var(--radius-md)] text-[13px] font-semibold whitespace-nowrap transition-colors\",\n isActive\n ? \"bg-[var(--color-primary)] text-white\"\n : \"bg-transparent text-[var(--color-on-surface-var)] hover:bg-[var(--color-surf-container-low)]\"\n )}\n >\n {f.label} {f.count}\n </button>\n );\n })}\n </div>\n );\n}\n\nexport { FilterChips };\n"]}
|