@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.
Files changed (267) hide show
  1. package/README.md +134 -0
  2. package/dist/chunk-32QWDFOV.js +96 -0
  3. package/dist/chunk-32QWDFOV.js.map +1 -0
  4. package/dist/chunk-4EEFY4FU.cjs +96 -0
  5. package/dist/chunk-4EEFY4FU.cjs.map +1 -0
  6. package/dist/chunk-562W4FCG.cjs +88 -0
  7. package/dist/chunk-562W4FCG.cjs.map +1 -0
  8. package/dist/chunk-5SCF3EGT.cjs +13 -0
  9. package/dist/chunk-5SCF3EGT.cjs.map +1 -0
  10. package/dist/chunk-5XB7CPVP.cjs +34 -0
  11. package/dist/chunk-5XB7CPVP.cjs.map +1 -0
  12. package/dist/chunk-62OTWTBL.cjs +274 -0
  13. package/dist/chunk-62OTWTBL.cjs.map +1 -0
  14. package/dist/chunk-6GT2L3FX.js +63 -0
  15. package/dist/chunk-6GT2L3FX.js.map +1 -0
  16. package/dist/chunk-6HFYY5KR.cjs +67 -0
  17. package/dist/chunk-6HFYY5KR.cjs.map +1 -0
  18. package/dist/chunk-6NZHRSXB.cjs +61 -0
  19. package/dist/chunk-6NZHRSXB.cjs.map +1 -0
  20. package/dist/chunk-76G7PKIJ.cjs +42 -0
  21. package/dist/chunk-76G7PKIJ.cjs.map +1 -0
  22. package/dist/chunk-7PRTXARY.js +87 -0
  23. package/dist/chunk-7PRTXARY.js.map +1 -0
  24. package/dist/chunk-A665K552.cjs +75 -0
  25. package/dist/chunk-A665K552.cjs.map +1 -0
  26. package/dist/chunk-ABFMWZVI.cjs +89 -0
  27. package/dist/chunk-ABFMWZVI.cjs.map +1 -0
  28. package/dist/chunk-ACADNUHF.js +196 -0
  29. package/dist/chunk-ACADNUHF.js.map +1 -0
  30. package/dist/chunk-AFMNLT45.js +70 -0
  31. package/dist/chunk-AFMNLT45.js.map +1 -0
  32. package/dist/chunk-BAUTON3J.js +89 -0
  33. package/dist/chunk-BAUTON3J.js.map +1 -0
  34. package/dist/chunk-BNDEIZZQ.js +40 -0
  35. package/dist/chunk-BNDEIZZQ.js.map +1 -0
  36. package/dist/chunk-BXKWAQYI.cjs +157 -0
  37. package/dist/chunk-BXKWAQYI.cjs.map +1 -0
  38. package/dist/chunk-COFNZ2CM.js +70 -0
  39. package/dist/chunk-COFNZ2CM.js.map +1 -0
  40. package/dist/chunk-COV6FW4J.cjs +63 -0
  41. package/dist/chunk-COV6FW4J.cjs.map +1 -0
  42. package/dist/chunk-CUW7MUCY.js +55 -0
  43. package/dist/chunk-CUW7MUCY.js.map +1 -0
  44. package/dist/chunk-DKHG23OR.js +61 -0
  45. package/dist/chunk-DKHG23OR.js.map +1 -0
  46. package/dist/chunk-EMKU3IZY.js +85 -0
  47. package/dist/chunk-EMKU3IZY.js.map +1 -0
  48. package/dist/chunk-FZD2ZXN2.js +81 -0
  49. package/dist/chunk-FZD2ZXN2.js.map +1 -0
  50. package/dist/chunk-FZFA24YL.js +90 -0
  51. package/dist/chunk-FZFA24YL.js.map +1 -0
  52. package/dist/chunk-G5SLIXQ5.cjs +87 -0
  53. package/dist/chunk-G5SLIXQ5.cjs.map +1 -0
  54. package/dist/chunk-G6T2BYPC.js +88 -0
  55. package/dist/chunk-G6T2BYPC.js.map +1 -0
  56. package/dist/chunk-GGZSDAN3.cjs +43 -0
  57. package/dist/chunk-GGZSDAN3.cjs.map +1 -0
  58. package/dist/chunk-GLMTTY4G.js +34 -0
  59. package/dist/chunk-GLMTTY4G.js.map +1 -0
  60. package/dist/chunk-JQ5LATTJ.cjs +196 -0
  61. package/dist/chunk-JQ5LATTJ.cjs.map +1 -0
  62. package/dist/chunk-KLHQMRAY.js +42 -0
  63. package/dist/chunk-KLHQMRAY.js.map +1 -0
  64. package/dist/chunk-KQJCGTS3.js +13 -0
  65. package/dist/chunk-KQJCGTS3.js.map +1 -0
  66. package/dist/chunk-LBHO3VC4.cjs +81 -0
  67. package/dist/chunk-LBHO3VC4.cjs.map +1 -0
  68. package/dist/chunk-LUQS7LYG.cjs +85 -0
  69. package/dist/chunk-LUQS7LYG.cjs.map +1 -0
  70. package/dist/chunk-MMQZ7YMO.js +274 -0
  71. package/dist/chunk-MMQZ7YMO.js.map +1 -0
  72. package/dist/chunk-N7M2UZM6.js +67 -0
  73. package/dist/chunk-N7M2UZM6.js.map +1 -0
  74. package/dist/chunk-NLOLOFBX.js +43 -0
  75. package/dist/chunk-NLOLOFBX.js.map +1 -0
  76. package/dist/chunk-NPXSB4WO.js +48 -0
  77. package/dist/chunk-NPXSB4WO.js.map +1 -0
  78. package/dist/chunk-NVCGKCTH.cjs +90 -0
  79. package/dist/chunk-NVCGKCTH.cjs.map +1 -0
  80. package/dist/chunk-NZOAZF3W.cjs +67 -0
  81. package/dist/chunk-NZOAZF3W.cjs.map +1 -0
  82. package/dist/chunk-OS2O66IV.cjs +40 -0
  83. package/dist/chunk-OS2O66IV.cjs.map +1 -0
  84. package/dist/chunk-P5BKGZY2.cjs +55 -0
  85. package/dist/chunk-P5BKGZY2.cjs.map +1 -0
  86. package/dist/chunk-POMJPII4.cjs +70 -0
  87. package/dist/chunk-POMJPII4.cjs.map +1 -0
  88. package/dist/chunk-QSRVMLAL.cjs +40 -0
  89. package/dist/chunk-QSRVMLAL.cjs.map +1 -0
  90. package/dist/chunk-R5SUYP2F.cjs +14 -0
  91. package/dist/chunk-R5SUYP2F.cjs.map +1 -0
  92. package/dist/chunk-RBPMBCU3.js +157 -0
  93. package/dist/chunk-RBPMBCU3.js.map +1 -0
  94. package/dist/chunk-RZQAADXK.cjs +274 -0
  95. package/dist/chunk-RZQAADXK.cjs.map +1 -0
  96. package/dist/chunk-SPAC4VNO.js +67 -0
  97. package/dist/chunk-SPAC4VNO.js.map +1 -0
  98. package/dist/chunk-TONUCO3E.cjs +70 -0
  99. package/dist/chunk-TONUCO3E.cjs.map +1 -0
  100. package/dist/chunk-V7DPKW5E.cjs +48 -0
  101. package/dist/chunk-V7DPKW5E.cjs.map +1 -0
  102. package/dist/chunk-W3H3KWRL.js +274 -0
  103. package/dist/chunk-W3H3KWRL.js.map +1 -0
  104. package/dist/chunk-XFMTGORU.js +40 -0
  105. package/dist/chunk-XFMTGORU.js.map +1 -0
  106. package/dist/chunk-YVPOTKKQ.js +75 -0
  107. package/dist/chunk-YVPOTKKQ.js.map +1 -0
  108. package/dist/chunk-ZYPEUNSY.js +14 -0
  109. package/dist/chunk-ZYPEUNSY.js.map +1 -0
  110. package/dist/components/alert.cjs +9 -0
  111. package/dist/components/alert.cjs.map +1 -0
  112. package/dist/components/alert.d.cts +17 -0
  113. package/dist/components/alert.d.ts +17 -0
  114. package/dist/components/alert.js +9 -0
  115. package/dist/components/alert.js.map +1 -0
  116. package/dist/components/avatar.cjs +9 -0
  117. package/dist/components/avatar.cjs.map +1 -0
  118. package/dist/components/avatar.d.cts +12 -0
  119. package/dist/components/avatar.d.ts +12 -0
  120. package/dist/components/avatar.js +9 -0
  121. package/dist/components/avatar.js.map +1 -0
  122. package/dist/components/badge.cjs +11 -0
  123. package/dist/components/badge.cjs.map +1 -0
  124. package/dist/components/badge.d.cts +12 -0
  125. package/dist/components/badge.d.ts +12 -0
  126. package/dist/components/badge.js +11 -0
  127. package/dist/components/badge.js.map +1 -0
  128. package/dist/components/bulk-bar.cjs +11 -0
  129. package/dist/components/bulk-bar.cjs.map +1 -0
  130. package/dist/components/bulk-bar.d.cts +19 -0
  131. package/dist/components/bulk-bar.d.ts +19 -0
  132. package/dist/components/bulk-bar.js +11 -0
  133. package/dist/components/bulk-bar.js.map +1 -0
  134. package/dist/components/button.cjs +11 -0
  135. package/dist/components/button.cjs.map +1 -0
  136. package/dist/components/button.d.cts +15 -0
  137. package/dist/components/button.d.ts +15 -0
  138. package/dist/components/button.js +11 -0
  139. package/dist/components/button.js.map +1 -0
  140. package/dist/components/card.cjs +15 -0
  141. package/dist/components/card.cjs.map +1 -0
  142. package/dist/components/card.d.cts +8 -0
  143. package/dist/components/card.d.ts +8 -0
  144. package/dist/components/card.js +15 -0
  145. package/dist/components/card.js.map +1 -0
  146. package/dist/components/data-table.cjs +10 -0
  147. package/dist/components/data-table.cjs.map +1 -0
  148. package/dist/components/data-table.d.cts +33 -0
  149. package/dist/components/data-table.d.ts +33 -0
  150. package/dist/components/data-table.js +10 -0
  151. package/dist/components/data-table.js.map +1 -0
  152. package/dist/components/date-picker.cjs +10 -0
  153. package/dist/components/date-picker.cjs.map +1 -0
  154. package/dist/components/date-picker.d.cts +16 -0
  155. package/dist/components/date-picker.d.ts +16 -0
  156. package/dist/components/date-picker.js +10 -0
  157. package/dist/components/date-picker.js.map +1 -0
  158. package/dist/components/destructive-dialog.cjs +13 -0
  159. package/dist/components/destructive-dialog.cjs.map +1 -0
  160. package/dist/components/destructive-dialog.d.cts +19 -0
  161. package/dist/components/destructive-dialog.d.ts +19 -0
  162. package/dist/components/destructive-dialog.js +13 -0
  163. package/dist/components/destructive-dialog.js.map +1 -0
  164. package/dist/components/dropdown-menu.cjs +38 -0
  165. package/dist/components/dropdown-menu.cjs.map +1 -0
  166. package/dist/components/dropdown-menu.d.cts +32 -0
  167. package/dist/components/dropdown-menu.d.ts +32 -0
  168. package/dist/components/dropdown-menu.js +38 -0
  169. package/dist/components/dropdown-menu.js.map +1 -0
  170. package/dist/components/empty-state.cjs +10 -0
  171. package/dist/components/empty-state.cjs.map +1 -0
  172. package/dist/components/empty-state.d.cts +23 -0
  173. package/dist/components/empty-state.d.ts +23 -0
  174. package/dist/components/empty-state.js +10 -0
  175. package/dist/components/empty-state.js.map +1 -0
  176. package/dist/components/filter-chips.cjs +9 -0
  177. package/dist/components/filter-chips.cjs.map +1 -0
  178. package/dist/components/filter-chips.d.cts +15 -0
  179. package/dist/components/filter-chips.d.ts +15 -0
  180. package/dist/components/filter-chips.js +9 -0
  181. package/dist/components/filter-chips.js.map +1 -0
  182. package/dist/components/input.cjs +9 -0
  183. package/dist/components/input.cjs.map +1 -0
  184. package/dist/components/input.d.cts +10 -0
  185. package/dist/components/input.d.ts +10 -0
  186. package/dist/components/input.js +9 -0
  187. package/dist/components/input.js.map +1 -0
  188. package/dist/components/kpi-cards.cjs +8 -0
  189. package/dist/components/kpi-cards.cjs.map +1 -0
  190. package/dist/components/kpi-cards.d.cts +15 -0
  191. package/dist/components/kpi-cards.d.ts +15 -0
  192. package/dist/components/kpi-cards.js +8 -0
  193. package/dist/components/kpi-cards.js.map +1 -0
  194. package/dist/components/list-page.cjs +21 -0
  195. package/dist/components/list-page.cjs.map +1 -0
  196. package/dist/components/list-page.d.cts +87 -0
  197. package/dist/components/list-page.d.ts +87 -0
  198. package/dist/components/list-page.js +21 -0
  199. package/dist/components/list-page.js.map +1 -0
  200. package/dist/components/modal.cjs +10 -0
  201. package/dist/components/modal.cjs.map +1 -0
  202. package/dist/components/modal.d.cts +16 -0
  203. package/dist/components/modal.d.ts +16 -0
  204. package/dist/components/modal.js +10 -0
  205. package/dist/components/modal.js.map +1 -0
  206. package/dist/components/pagination-bar.cjs +10 -0
  207. package/dist/components/pagination-bar.cjs.map +1 -0
  208. package/dist/components/pagination-bar.d.cts +11 -0
  209. package/dist/components/pagination-bar.d.ts +11 -0
  210. package/dist/components/pagination-bar.js +10 -0
  211. package/dist/components/pagination-bar.js.map +1 -0
  212. package/dist/components/progress-bar.cjs +9 -0
  213. package/dist/components/progress-bar.cjs.map +1 -0
  214. package/dist/components/progress-bar.d.cts +21 -0
  215. package/dist/components/progress-bar.d.ts +21 -0
  216. package/dist/components/progress-bar.js +9 -0
  217. package/dist/components/progress-bar.js.map +1 -0
  218. package/dist/components/radio-group.cjs +12 -0
  219. package/dist/components/radio-group.cjs.map +1 -0
  220. package/dist/components/radio-group.d.cts +22 -0
  221. package/dist/components/radio-group.d.ts +22 -0
  222. package/dist/components/radio-group.js +12 -0
  223. package/dist/components/radio-group.js.map +1 -0
  224. package/dist/components/sidebar.cjs +11 -0
  225. package/dist/components/sidebar.cjs.map +1 -0
  226. package/dist/components/sidebar.d.cts +24 -0
  227. package/dist/components/sidebar.d.ts +24 -0
  228. package/dist/components/sidebar.js +11 -0
  229. package/dist/components/sidebar.js.map +1 -0
  230. package/dist/components/skeleton.cjs +17 -0
  231. package/dist/components/skeleton.cjs.map +1 -0
  232. package/dist/components/skeleton.d.cts +15 -0
  233. package/dist/components/skeleton.d.ts +15 -0
  234. package/dist/components/skeleton.js +17 -0
  235. package/dist/components/skeleton.js.map +1 -0
  236. package/dist/components/status-tag.cjs +9 -0
  237. package/dist/components/status-tag.cjs.map +1 -0
  238. package/dist/components/status-tag.d.cts +11 -0
  239. package/dist/components/status-tag.d.ts +11 -0
  240. package/dist/components/status-tag.js +9 -0
  241. package/dist/components/status-tag.js.map +1 -0
  242. package/dist/components/tabs.cjs +16 -0
  243. package/dist/components/tabs.cjs.map +1 -0
  244. package/dist/components/tabs.d.cts +9 -0
  245. package/dist/components/tabs.d.ts +9 -0
  246. package/dist/components/tabs.js +16 -0
  247. package/dist/components/tabs.js.map +1 -0
  248. package/dist/components/toggle.cjs +10 -0
  249. package/dist/components/toggle.cjs.map +1 -0
  250. package/dist/components/toggle.d.cts +14 -0
  251. package/dist/components/toggle.d.ts +14 -0
  252. package/dist/components/toggle.js +10 -0
  253. package/dist/components/toggle.js.map +1 -0
  254. package/dist/components/tooltip.cjs +10 -0
  255. package/dist/components/tooltip.cjs.map +1 -0
  256. package/dist/components/tooltip.d.cts +13 -0
  257. package/dist/components/tooltip.d.ts +13 -0
  258. package/dist/components/tooltip.js +10 -0
  259. package/dist/components/tooltip.js.map +1 -0
  260. package/dist/index.cjs +160 -0
  261. package/dist/index.cjs.map +1 -0
  262. package/dist/index.d.cts +32 -0
  263. package/dist/index.d.ts +32 -0
  264. package/dist/index.js +160 -0
  265. package/dist/index.js.map +1 -0
  266. package/dist/styles/global.css +322 -0
  267. 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":"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","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"]}