@fluencypassdevs/cycle 1.5.1 → 1.7.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/bin/mcp.mjs CHANGED
@@ -248,6 +248,104 @@ const COMPONENTS = [
248
248
  <ProgressDot current={1} total={3} size="lg" theme="brand" />`,
249
249
  keywords: ["progress", "dot", "ponto", "indicador", "carousel", "slide", "paginacao"],
250
250
  },
251
+ {
252
+ name: "CircularProgress",
253
+ import: `import { CircularProgress } from "@fluencypassdevs/cycle"`,
254
+ description: "Indicador de progresso circular com porcentagem 0-100 no centro. 4 sizes (xs=48px, sm=64px, default=80px, lg=120px). Prop autoTheme escolhe cor baseada no value (0-33 critical, 34-66 warning, 67-100 positive). Prop theme aceita qualquer dos 8 temas Cycle.",
255
+ props: [
256
+ { name: "value", type: "number (0-100)", default: "-" },
257
+ { name: "size", type: '"xs" | "sm" | "default" | "lg"', default: '"default"' },
258
+ { name: "theme", type: "string", default: "-" },
259
+ { name: "autoTheme", type: "boolean", default: "false" },
260
+ { name: "showLabel", type: "boolean", default: "true" },
261
+ { name: "label", type: "string", default: "-" },
262
+ ],
263
+ example: `<CircularProgress value={70} />
264
+ <CircularProgress value={25} autoTheme />
265
+ <CircularProgress value={80} theme="theme-class" size="lg" />
266
+ <CircularProgress value={50} showLabel={false} />`,
267
+ keywords: ["progress", "circular", "circle", "anel", "ring", "porcentagem", "percentage", "score", "nota", "aproveitamento"],
268
+ },
269
+ {
270
+ name: "Container",
271
+ import: `import { Container } from "@fluencypassdevs/cycle"`,
272
+ description: "Layout primitive: wrapper centralizado com max-width e margin LOCKED do design system (16/24px). Use sempre como wrapper de paginas/secoes. Margin custom (ex: 40px desktop) via className override.",
273
+ props: [
274
+ { name: "size", type: '"prose" | "default" | "wide" | "full"', default: '"default"' },
275
+ { name: "padding", type: '"default" | "none"', default: '"default"' },
276
+ { name: "as", type: '"div" | "section" | "main" | "article"', default: '"div"' },
277
+ ],
278
+ example: `<Container>conteudo principal (max 1380px, margin 16/24)</Container>
279
+ <Container size="prose">leitura/forms (max 860px)</Container>
280
+ <Container padding="none">hero full-bleed</Container>
281
+
282
+ {/* Override custom (raro) */}
283
+ <Container className="sm:px-10">conteudo com mais respiro (40px desktop)</Container>`,
284
+ keywords: ["container", "wrapper", "max-width", "centralizar", "layout", "secao", "pagina", "margin"],
285
+ },
286
+ {
287
+ name: "Stack",
288
+ import: `import { Stack } from "@fluencypassdevs/cycle"`,
289
+ description: "Layout primitive: flex com gap, direction e alinhamento. Use em vez de flex flex-col gap-X manual. Gap tokens xs=4 sm=8 md=12 lg=16 xl=24 px.",
290
+ props: [
291
+ { name: "direction", type: '"col" | "row"', default: '"col"' },
292
+ { name: "directionSm", type: '"col" | "row"', default: "-" },
293
+ { name: "directionLg", type: '"col" | "row"', default: "-" },
294
+ { name: "gap", type: '"xs" | "sm" | "md" | "lg" | "xl"', default: '"lg"' },
295
+ { name: "gapSm", type: '"xs" | "sm" | "md" | "lg" | "xl"', default: "-" },
296
+ { name: "align", type: '"start" | "center" | "end" | "stretch"', default: "-" },
297
+ { name: "justify", type: '"start" | "center" | "end" | "between"', default: "-" },
298
+ ],
299
+ example: `<Stack gap="xl">vertical</Stack>
300
+ <Stack direction="col" directionSm="row" justify="between">action bar responsivo</Stack>
301
+ <Stack gap="md" gapSm="xl">gap responsivo</Stack>`,
302
+ keywords: ["stack", "flex", "vstack", "hstack", "vertical", "horizontal", "gap", "espacamento"],
303
+ },
304
+ {
305
+ name: "Grid",
306
+ import: `import { Grid, GridItem } from "@fluencypassdevs/cycle"`,
307
+ description: "Layout primitive: CSS grid totalmente prescrito. 12 colunas FIXAS, gutter LOCKED (16px mobile, 24px desktop). Items usam GridItem com size 1-12 para ocupar fracoes. Sem props pra cols/gap — sistema decide tudo. Apenas minItemWidth para galerias auto-fit.",
308
+ props: [
309
+ { name: "minItemWidth", type: "string", default: "-" },
310
+ ],
311
+ example: `{/* 3 cards iguais (1 mobile, 3 desktop) */}
312
+ <Grid>
313
+ <GridItem size={12} sizeMd={4}>Card</GridItem>
314
+ <GridItem size={12} sizeMd={4}>Card</GridItem>
315
+ <GridItem size={12} sizeMd={4}>Card</GridItem>
316
+ </Grid>
317
+
318
+ {/* Hero + 2 metades */}
319
+ <Grid>
320
+ <GridItem size={12}>Hero</GridItem>
321
+ <GridItem size={12} sizeMd={6}>Card A</GridItem>
322
+ <GridItem size={12} sizeMd={6}>Card B</GridItem>
323
+ </Grid>
324
+
325
+ {/* Galeria auto-fit */}
326
+ <Grid minItemWidth="280px">cards</Grid>`,
327
+ keywords: ["grid", "colunas", "cols", "responsive", "layout", "cards", "12-col"],
328
+ },
329
+ {
330
+ name: "GridItem",
331
+ import: `import { GridItem } from "@fluencypassdevs/cycle"`,
332
+ description: "Filho do Grid. Define quantas das 12 colunas ocupar em cada breakpoint via size/sizeSm/sizeMd/sizeLg. Pense em fracoes: size=12 (full), size=6 (1/2), size=4 (1/3), size=3 (1/4).",
333
+ props: [
334
+ { name: "size", type: "1 a 12", default: "-" },
335
+ { name: "sizeSm", type: "1 a 12", default: "-" },
336
+ { name: "sizeMd", type: "1 a 12", default: "-" },
337
+ { name: "sizeLg", type: "1 a 12", default: "-" },
338
+ ],
339
+ example: `{/* Full no mobile, metade no desktop */}
340
+ <GridItem size={12} sizeMd={6}>Card</GridItem>
341
+
342
+ {/* Sempre um terco */}
343
+ <GridItem size={4}>1/3</GridItem>
344
+
345
+ {/* Sidebar 1/4 desktop */}
346
+ <GridItem size={12} sizeMd={3}>Sidebar</GridItem>`,
347
+ keywords: ["grid", "item", "size", "col-span", "colunas", "child", "fracao"],
348
+ },
251
349
  {
252
350
  name: "FileCard",
253
351
  import: `import { FileCard } from "@fluencypassdevs/cycle"`,
@@ -0,0 +1,130 @@
1
+ import { cn } from './chunk-TYCPXAXF.js';
2
+ import { __objRest, __spreadProps, __spreadValues } from './chunk-YINJ5YZ5.js';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var SIZE_CONFIG = {
7
+ xs: { px: 48, stroke: 4, fontClass: "text-sm font-semibold" },
8
+ sm: { px: 64, stroke: 5, fontClass: "text-base font-semibold" },
9
+ default: { px: 80, stroke: 6, fontClass: "text-2xl font-semibold" },
10
+ lg: { px: 120, stroke: 8, fontClass: "text-3xl font-semibold" }
11
+ };
12
+ var circularProgressVariants = cva("relative inline-flex shrink-0", {
13
+ variants: {
14
+ size: {
15
+ xs: "size-12",
16
+ sm: "size-16",
17
+ default: "size-20",
18
+ lg: "size-30"
19
+ }
20
+ },
21
+ defaultVariants: {
22
+ size: "default"
23
+ }
24
+ });
25
+ function getAutoTheme(value) {
26
+ if (value < 34) return "theme-critical";
27
+ if (value < 67) return "theme-warning";
28
+ return "theme-positive";
29
+ }
30
+ function CircularProgress(_a) {
31
+ var _b = _a, {
32
+ value,
33
+ size = "default",
34
+ theme,
35
+ autoTheme = false,
36
+ showLabel = true,
37
+ label,
38
+ className
39
+ } = _b, props = __objRest(_b, [
40
+ "value",
41
+ "size",
42
+ "theme",
43
+ "autoTheme",
44
+ "showLabel",
45
+ "label",
46
+ "className"
47
+ ]);
48
+ const clamped = Math.min(100, Math.max(0, value));
49
+ const config = SIZE_CONFIG[size != null ? size : "default"];
50
+ const { px, stroke, fontClass } = config;
51
+ const radius = (px - stroke) / 2;
52
+ const circumference = 2 * Math.PI * radius;
53
+ const dash = clamped / 100 * circumference;
54
+ const resolvedTheme = theme != null ? theme : autoTheme ? getAutoTheme(clamped) : void 0;
55
+ const displayLabel = label != null ? label : `${Math.round(clamped)}%`;
56
+ return /* @__PURE__ */ jsxs(
57
+ "div",
58
+ __spreadProps(__spreadValues({
59
+ "data-slot": "circular-progress",
60
+ role: "progressbar",
61
+ "aria-valuenow": clamped,
62
+ "aria-valuemin": 0,
63
+ "aria-valuemax": 100,
64
+ "aria-label": !showLabel && !label ? `Progress: ${Math.round(clamped)}%` : void 0,
65
+ className: cn(circularProgressVariants({ size }), resolvedTheme, className),
66
+ style: { width: px, height: px }
67
+ }, props), {
68
+ children: [
69
+ /* @__PURE__ */ jsx(
70
+ "div",
71
+ {
72
+ className: cn(
73
+ "absolute rounded-full",
74
+ resolvedTheme ? "bg-accent" : "bg-neutral-input/40"
75
+ ),
76
+ style: { inset: stroke }
77
+ }
78
+ ),
79
+ /* @__PURE__ */ jsxs(
80
+ "svg",
81
+ {
82
+ className: "absolute inset-0 size-full -rotate-90",
83
+ viewBox: `0 0 ${px} ${px}`,
84
+ "aria-hidden": "true",
85
+ children: [
86
+ /* @__PURE__ */ jsx(
87
+ "circle",
88
+ {
89
+ cx: px / 2,
90
+ cy: px / 2,
91
+ r: radius,
92
+ fill: "none",
93
+ strokeWidth: stroke,
94
+ className: cn(resolvedTheme ? "stroke-muted" : "stroke-neutral-input")
95
+ }
96
+ ),
97
+ /* @__PURE__ */ jsx(
98
+ "circle",
99
+ {
100
+ cx: px / 2,
101
+ cy: px / 2,
102
+ r: radius,
103
+ fill: "none",
104
+ strokeWidth: stroke,
105
+ strokeLinecap: "round",
106
+ strokeDasharray: `${dash} ${circumference}`,
107
+ className: cn("transition-[stroke-dasharray] duration-500", resolvedTheme ? "stroke-primary" : "stroke-neutral-foreground")
108
+ }
109
+ )
110
+ ]
111
+ }
112
+ ),
113
+ showLabel && /* @__PURE__ */ jsx(
114
+ "span",
115
+ {
116
+ className: cn(
117
+ "relative z-10 flex size-full items-center justify-center text-neutral-foreground",
118
+ fontClass
119
+ ),
120
+ children: displayLabel
121
+ }
122
+ )
123
+ ]
124
+ })
125
+ );
126
+ }
127
+
128
+ export { CircularProgress, circularProgressVariants };
129
+ //# sourceMappingURL=chunk-A3Z5GGAI.js.map
130
+ //# sourceMappingURL=chunk-A3Z5GGAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/circular-progress.tsx"],"names":[],"mappings":"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","file":"chunk-A3Z5GGAI.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\n/* ─── Size config ─── */\n\nconst SIZE_CONFIG = {\n xs: { px: 48, stroke: 4, fontClass: \"text-sm font-semibold\" },\n sm: { px: 64, stroke: 5, fontClass: \"text-base font-semibold\" },\n default: { px: 80, stroke: 6, fontClass: \"text-2xl font-semibold\" },\n lg: { px: 120, stroke: 8, fontClass: \"text-3xl font-semibold\" },\n} as const\n\nconst circularProgressVariants = cva(\"relative inline-flex shrink-0\", {\n variants: {\n size: {\n xs: \"size-12\",\n sm: \"size-16\",\n default: \"size-20\",\n lg: \"size-30\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\n/* ─── Auto-theme thresholds ─── */\n\nfunction getAutoTheme(value: number): string {\n if (value < 34) return \"theme-critical\"\n if (value < 67) return \"theme-warning\"\n return \"theme-positive\"\n}\n\nexport interface CircularProgressProps\n extends Omit<React.ComponentProps<\"div\">, \"children\">,\n VariantProps<typeof circularProgressVariants> {\n /** Valor de 0 a 100 (clamped) */\n value: number\n /** Classe de tema fixa (ex: \"theme-brand\", \"theme-class\"). Tem precedencia sobre autoTheme. */\n theme?: string\n /** Se true, escolhe o tema automaticamente: 0–33 critical, 34–66 warning, 67–100 positive. */\n autoTheme?: boolean\n /** Mostrar label central com a porcentagem (default true) */\n showLabel?: boolean\n /** Label customizado — sobrescreve `${value}%` */\n label?: string\n}\n\nfunction CircularProgress({\n value,\n size = \"default\",\n theme,\n autoTheme = false,\n showLabel = true,\n label,\n className,\n ...props\n}: CircularProgressProps) {\n const clamped = Math.min(100, Math.max(0, value))\n const config = SIZE_CONFIG[size ?? \"default\"]\n const { px, stroke, fontClass } = config\n\n const radius = (px - stroke) / 2\n const circumference = 2 * Math.PI * radius\n const dash = (clamped / 100) * circumference\n\n const resolvedTheme = theme ?? (autoTheme ? getAutoTheme(clamped) : undefined)\n const displayLabel = label ?? `${Math.round(clamped)}%`\n\n return (\n <div\n data-slot=\"circular-progress\"\n role=\"progressbar\"\n aria-valuenow={clamped}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={!showLabel && !label ? `Progress: ${Math.round(clamped)}%` : undefined}\n className={cn(circularProgressVariants({ size }), resolvedTheme, className)}\n style={{ width: px, height: px }}\n {...props}\n >\n {/* Inner pastel fill */}\n <div\n className={cn(\n \"absolute rounded-full\",\n resolvedTheme ? \"bg-accent\" : \"bg-neutral-input/40\"\n )}\n style={{ inset: stroke }}\n />\n\n {/* Progress arcs */}\n <svg\n className=\"absolute inset-0 size-full -rotate-90\"\n viewBox={`0 0 ${px} ${px}`}\n aria-hidden=\"true\"\n >\n <circle\n cx={px / 2}\n cy={px / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n className={cn(resolvedTheme ? \"stroke-muted\" : \"stroke-neutral-input\")}\n />\n <circle\n cx={px / 2}\n cy={px / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={`${dash} ${circumference}`}\n className={cn(\"transition-[stroke-dasharray] duration-500\", resolvedTheme ? \"stroke-primary\" : \"stroke-neutral-foreground\")}\n />\n </svg>\n\n {/* Center label */}\n {showLabel && (\n <span\n className={cn(\n \"relative z-10 flex size-full items-center justify-center text-neutral-foreground\",\n fontClass\n )}\n >\n {displayLabel}\n </span>\n )}\n </div>\n )\n}\n\nexport { CircularProgress, circularProgressVariants }\n"]}
@@ -0,0 +1,84 @@
1
+ import { cn } from './chunk-TYCPXAXF.js';
2
+ import { __objRest, __spreadValues } from './chunk-YINJ5YZ5.js';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var DIRECTION = {
6
+ col: "flex-col",
7
+ row: "flex-row"
8
+ };
9
+ var DIRECTION_SM = {
10
+ col: "sm:flex-col",
11
+ row: "sm:flex-row"
12
+ };
13
+ var DIRECTION_LG = {
14
+ col: "lg:flex-col",
15
+ row: "lg:flex-row"
16
+ };
17
+ var GAP = {
18
+ xs: "gap-1",
19
+ sm: "gap-2",
20
+ md: "gap-3",
21
+ lg: "gap-4",
22
+ xl: "gap-6"
23
+ };
24
+ var GAP_SM = {
25
+ xs: "sm:gap-1",
26
+ sm: "sm:gap-2",
27
+ md: "sm:gap-3",
28
+ lg: "sm:gap-4",
29
+ xl: "sm:gap-6"
30
+ };
31
+ var ALIGN = {
32
+ start: "items-start",
33
+ center: "items-center",
34
+ end: "items-end",
35
+ stretch: "items-stretch"
36
+ };
37
+ var JUSTIFY = {
38
+ start: "justify-start",
39
+ center: "justify-center",
40
+ end: "justify-end",
41
+ between: "justify-between"
42
+ };
43
+ function Stack(_a) {
44
+ var _b = _a, {
45
+ direction = "col",
46
+ directionSm,
47
+ directionLg,
48
+ gap = "lg",
49
+ gapSm,
50
+ align,
51
+ justify,
52
+ className
53
+ } = _b, props = __objRest(_b, [
54
+ "direction",
55
+ "directionSm",
56
+ "directionLg",
57
+ "gap",
58
+ "gapSm",
59
+ "align",
60
+ "justify",
61
+ "className"
62
+ ]);
63
+ return /* @__PURE__ */ jsx(
64
+ "div",
65
+ __spreadValues({
66
+ "data-slot": "stack",
67
+ className: cn(
68
+ "flex",
69
+ DIRECTION[direction],
70
+ directionSm && DIRECTION_SM[directionSm],
71
+ directionLg && DIRECTION_LG[directionLg],
72
+ GAP[gap],
73
+ gapSm && GAP_SM[gapSm],
74
+ align && ALIGN[align],
75
+ justify && JUSTIFY[justify],
76
+ className
77
+ )
78
+ }, props)
79
+ );
80
+ }
81
+
82
+ export { Stack };
83
+ //# sourceMappingURL=chunk-I5A3CME4.js.map
84
+ //# sourceMappingURL=chunk-I5A3CME4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/stack.tsx"],"names":[],"mappings":";;;;AAKA,IAAM,SAAA,GAAY;AAAA,EAChB,GAAA,EAAK,UAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAEA,IAAM,YAAA,GAAe;AAAA,EACnB,GAAA,EAAK,aAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAEA,IAAM,YAAA,GAAe;AAAA,EACnB,GAAA,EAAK,aAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAEA,IAAM,GAAA,GAAgC;AAAA,EACpC,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,MAAA,GAAmC;AAAA,EACvC,EAAA,EAAI,UAAA;AAAA,EACJ,EAAA,EAAI,UAAA;AAAA,EACJ,EAAA,EAAI,UAAA;AAAA,EACJ,EAAA,EAAI,UAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,KAAA,GAAQ;AAAA,EACZ,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,GAAA,EAAK,WAAA;AAAA,EACL,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,OAAA,GAAU;AAAA,EACd,KAAA,EAAO,eAAA;AAAA,EACP,MAAA,EAAQ,gBAAA;AAAA,EACR,GAAA,EAAK,aAAA;AAAA,EACL,OAAA,EAAS;AACX,CAAA;AAmBA,SAAS,MAAM,EAAA,EAUA;AAVA,EAAA,IAAA,EAAA,GAAA,EAAA,EACb;AAAA,IAAA,SAAA,GAAY,KAAA;AAAA,IACZ,WAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAA,GAAM,IAAA;AAAA,IACN,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GA3EF,GAmEe,EAAA,EASV,KAAA,GAAA,SAAA,CATU,EAAA,EASV;AAAA,IARH,WAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,MAAA;AAAA,QACA,UAAU,SAAS,CAAA;AAAA,QACnB,WAAA,IAAe,aAAa,WAAW,CAAA;AAAA,QACvC,WAAA,IAAe,aAAa,WAAW,CAAA;AAAA,QACvC,IAAI,GAAG,CAAA;AAAA,QACP,KAAA,IAAS,OAAO,KAAK,CAAA;AAAA,QACrB,KAAA,IAAS,MAAM,KAAK,CAAA;AAAA,QACpB,OAAA,IAAW,QAAQ,OAAO,CAAA;AAAA,QAC1B;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ","file":"chunk-I5A3CME4.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport type { GapToken } from \"./types\"\n\nconst DIRECTION = {\n col: \"flex-col\",\n row: \"flex-row\",\n} as const\n\nconst DIRECTION_SM = {\n col: \"sm:flex-col\",\n row: \"sm:flex-row\",\n} as const\n\nconst DIRECTION_LG = {\n col: \"lg:flex-col\",\n row: \"lg:flex-row\",\n} as const\n\nconst GAP: Record<GapToken, string> = {\n xs: \"gap-1\",\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-4\",\n xl: \"gap-6\",\n}\n\nconst GAP_SM: Record<GapToken, string> = {\n xs: \"sm:gap-1\",\n sm: \"sm:gap-2\",\n md: \"sm:gap-3\",\n lg: \"sm:gap-4\",\n xl: \"sm:gap-6\",\n}\n\nconst ALIGN = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n} as const\n\nconst JUSTIFY = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n} as const\n\nexport interface StackProps extends React.ComponentProps<\"div\"> {\n /** Flex direction (default: col) */\n direction?: keyof typeof DIRECTION\n /** Direction at sm breakpoint (>= 640px) */\n directionSm?: keyof typeof DIRECTION_SM\n /** Direction at lg breakpoint (>= 1024px) */\n directionLg?: keyof typeof DIRECTION_LG\n /** Gap between items (default: lg = 16px) */\n gap?: GapToken\n /** Gap at sm breakpoint */\n gapSm?: GapToken\n /** Cross-axis alignment */\n align?: keyof typeof ALIGN\n /** Main-axis alignment */\n justify?: keyof typeof JUSTIFY\n}\n\nfunction Stack({\n direction = \"col\",\n directionSm,\n directionLg,\n gap = \"lg\",\n gapSm,\n align,\n justify,\n className,\n ...props\n}: StackProps) {\n return (\n <div\n data-slot=\"stack\"\n className={cn(\n \"flex\",\n DIRECTION[direction],\n directionSm && DIRECTION_SM[directionSm],\n directionLg && DIRECTION_LG[directionLg],\n GAP[gap],\n gapSm && GAP_SM[gapSm],\n align && ALIGN[align],\n justify && JUSTIFY[justify],\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Stack }\n"]}
@@ -0,0 +1,118 @@
1
+ import { cn } from './chunk-TYCPXAXF.js';
2
+ import { __objRest, __spreadValues } from './chunk-YINJ5YZ5.js';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var SIZE_BASE = {
6
+ 1: "col-span-1",
7
+ 2: "col-span-2",
8
+ 3: "col-span-3",
9
+ 4: "col-span-4",
10
+ 5: "col-span-5",
11
+ 6: "col-span-6",
12
+ 7: "col-span-7",
13
+ 8: "col-span-8",
14
+ 9: "col-span-9",
15
+ 10: "col-span-10",
16
+ 11: "col-span-11",
17
+ 12: "col-span-12"
18
+ };
19
+ var SIZE_SM = {
20
+ 1: "sm:col-span-1",
21
+ 2: "sm:col-span-2",
22
+ 3: "sm:col-span-3",
23
+ 4: "sm:col-span-4",
24
+ 5: "sm:col-span-5",
25
+ 6: "sm:col-span-6",
26
+ 7: "sm:col-span-7",
27
+ 8: "sm:col-span-8",
28
+ 9: "sm:col-span-9",
29
+ 10: "sm:col-span-10",
30
+ 11: "sm:col-span-11",
31
+ 12: "sm:col-span-12"
32
+ };
33
+ var SIZE_MD = {
34
+ 1: "md:col-span-1",
35
+ 2: "md:col-span-2",
36
+ 3: "md:col-span-3",
37
+ 4: "md:col-span-4",
38
+ 5: "md:col-span-5",
39
+ 6: "md:col-span-6",
40
+ 7: "md:col-span-7",
41
+ 8: "md:col-span-8",
42
+ 9: "md:col-span-9",
43
+ 10: "md:col-span-10",
44
+ 11: "md:col-span-11",
45
+ 12: "md:col-span-12"
46
+ };
47
+ var SIZE_LG = {
48
+ 1: "lg:col-span-1",
49
+ 2: "lg:col-span-2",
50
+ 3: "lg:col-span-3",
51
+ 4: "lg:col-span-4",
52
+ 5: "lg:col-span-5",
53
+ 6: "lg:col-span-6",
54
+ 7: "lg:col-span-7",
55
+ 8: "lg:col-span-8",
56
+ 9: "lg:col-span-9",
57
+ 10: "lg:col-span-10",
58
+ 11: "lg:col-span-11",
59
+ 12: "lg:col-span-12"
60
+ };
61
+ function Grid(_a) {
62
+ var _b = _a, {
63
+ minItemWidth,
64
+ className,
65
+ style
66
+ } = _b, props = __objRest(_b, [
67
+ "minItemWidth",
68
+ "className",
69
+ "style"
70
+ ]);
71
+ const useAutoFit = !!minItemWidth;
72
+ return /* @__PURE__ */ jsx(
73
+ "div",
74
+ __spreadValues({
75
+ "data-slot": "grid",
76
+ className: cn(
77
+ "grid gap-4 sm:gap-6",
78
+ !useAutoFit && "grid-cols-12",
79
+ className
80
+ ),
81
+ style: useAutoFit ? __spreadValues({
82
+ gridTemplateColumns: `repeat(auto-fit, minmax(${minItemWidth}, 1fr))`
83
+ }, style) : style
84
+ }, props)
85
+ );
86
+ }
87
+ function GridItem(_a) {
88
+ var _b = _a, {
89
+ size,
90
+ sizeSm,
91
+ sizeMd,
92
+ sizeLg,
93
+ className
94
+ } = _b, props = __objRest(_b, [
95
+ "size",
96
+ "sizeSm",
97
+ "sizeMd",
98
+ "sizeLg",
99
+ "className"
100
+ ]);
101
+ return /* @__PURE__ */ jsx(
102
+ "div",
103
+ __spreadValues({
104
+ "data-slot": "grid-item",
105
+ className: cn(
106
+ size && SIZE_BASE[size],
107
+ sizeSm && SIZE_SM[sizeSm],
108
+ sizeMd && SIZE_MD[sizeMd],
109
+ sizeLg && SIZE_LG[sizeLg],
110
+ className
111
+ )
112
+ }, props)
113
+ );
114
+ }
115
+
116
+ export { Grid, GridItem };
117
+ //# sourceMappingURL=chunk-JRJBKPXW.js.map
118
+ //# sourceMappingURL=chunk-JRJBKPXW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/grid.tsx"],"names":[],"mappings":"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","file":"chunk-JRJBKPXW.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport type { ColCount } from \"./types\"\n\n/**\n * Grid — sistema de grid com 12 colunas FIXAS e gutter locked.\n *\n * Valores travados pelo design system (nao configuraveis):\n * - Columns: sempre 12\n * - Gutter (gap): 16px mobile / 24px desktop (`gap-4 sm:gap-6`)\n *\n * Items usam <GridItem size={N}> com N de 1 a 12 para ocupar fracoes da linha.\n * Para galerias auto-fit (sem cols fixas), use a prop `minItemWidth`.\n */\n\n/* ─── Size maps (1–12) — para GridItem ─────────────────────────── */\n\nconst SIZE_BASE: Record<ColCount, string> = {\n 1: \"col-span-1\", 2: \"col-span-2\", 3: \"col-span-3\", 4: \"col-span-4\",\n 5: \"col-span-5\", 6: \"col-span-6\", 7: \"col-span-7\", 8: \"col-span-8\",\n 9: \"col-span-9\", 10: \"col-span-10\", 11: \"col-span-11\", 12: \"col-span-12\",\n}\n\nconst SIZE_SM: Record<ColCount, string> = {\n 1: \"sm:col-span-1\", 2: \"sm:col-span-2\", 3: \"sm:col-span-3\", 4: \"sm:col-span-4\",\n 5: \"sm:col-span-5\", 6: \"sm:col-span-6\", 7: \"sm:col-span-7\", 8: \"sm:col-span-8\",\n 9: \"sm:col-span-9\", 10: \"sm:col-span-10\", 11: \"sm:col-span-11\", 12: \"sm:col-span-12\",\n}\n\nconst SIZE_MD: Record<ColCount, string> = {\n 1: \"md:col-span-1\", 2: \"md:col-span-2\", 3: \"md:col-span-3\", 4: \"md:col-span-4\",\n 5: \"md:col-span-5\", 6: \"md:col-span-6\", 7: \"md:col-span-7\", 8: \"md:col-span-8\",\n 9: \"md:col-span-9\", 10: \"md:col-span-10\", 11: \"md:col-span-11\", 12: \"md:col-span-12\",\n}\n\nconst SIZE_LG: Record<ColCount, string> = {\n 1: \"lg:col-span-1\", 2: \"lg:col-span-2\", 3: \"lg:col-span-3\", 4: \"lg:col-span-4\",\n 5: \"lg:col-span-5\", 6: \"lg:col-span-6\", 7: \"lg:col-span-7\", 8: \"lg:col-span-8\",\n 9: \"lg:col-span-9\", 10: \"lg:col-span-10\", 11: \"lg:col-span-11\", 12: \"lg:col-span-12\",\n}\n\n/* ─── Grid (container) ──────────────────────────────────────────── */\n\nexport interface GridProps extends React.ComponentProps<\"div\"> {\n /**\n * Auto-fit gallery: largura minima por item. Quando setado, sobrescreve\n * o sistema 12-col padrao com `repeat(auto-fit, minmax(X, 1fr))`.\n * Use para galerias uniformes onde nao se controla o numero de items por linha.\n */\n minItemWidth?: string\n}\n\nfunction Grid({\n minItemWidth,\n className,\n style,\n ...props\n}: GridProps) {\n const useAutoFit = !!minItemWidth\n\n return (\n <div\n data-slot=\"grid\"\n className={cn(\n \"grid gap-4 sm:gap-6\",\n !useAutoFit && \"grid-cols-12\",\n className\n )}\n style={\n useAutoFit\n ? {\n gridTemplateColumns: `repeat(auto-fit, minmax(${minItemWidth}, 1fr))`,\n ...style,\n }\n : style\n }\n {...props}\n />\n )\n}\n\n/* ─── GridItem (filho) ──────────────────────────────────────────── */\n\nexport interface GridItemProps extends React.ComponentProps<\"div\"> {\n /** Quantas colunas (de 12) o item ocupa no mobile. Sem size, ocupa 1 col. */\n size?: ColCount\n /** Cols em sm (>= 640px) */\n sizeSm?: ColCount\n /** Cols em md (>= 768px) */\n sizeMd?: ColCount\n /** Cols em lg (>= 1024px) */\n sizeLg?: ColCount\n}\n\nfunction GridItem({\n size,\n sizeSm,\n sizeMd,\n sizeLg,\n className,\n ...props\n}: GridItemProps) {\n return (\n <div\n data-slot=\"grid-item\"\n className={cn(\n size && SIZE_BASE[size],\n sizeSm && SIZE_SM[sizeSm],\n sizeMd && SIZE_MD[sizeMd],\n sizeLg && SIZE_LG[sizeLg],\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Grid, GridItem }\n"]}
@@ -1,5 +1,5 @@
1
- import { Avatar, AvatarImage, AvatarFallback } from './chunk-MSLQRGSP.js';
2
1
  import { CycleIcon } from './chunk-V7M2NHUO.js';
2
+ import { Avatar, AvatarImage, AvatarFallback } from './chunk-MSLQRGSP.js';
3
3
  import { Badge } from './chunk-W4GSXVJ2.js';
4
4
  import { cn } from './chunk-TYCPXAXF.js';
5
5
  import * as React from 'react';
@@ -93,5 +93,5 @@ function LiveWaiting({
93
93
  }
94
94
 
95
95
  export { LiveWaiting };
96
- //# sourceMappingURL=chunk-PCLVQPIG.js.map
97
- //# sourceMappingURL=chunk-PCLVQPIG.js.map
96
+ //# sourceMappingURL=chunk-L2DJS6PG.js.map
97
+ //# sourceMappingURL=chunk-L2DJS6PG.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/live-waiting.tsx"],"names":[],"mappings":"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","file":"chunk-PCLVQPIG.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { RadioIcon } from \"lucide-react\"\nimport { CycleIcon } from \"@/components/icons/CycleIcon\"\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { cn } from \"@/lib/utils\"\n\n/* ─── Types ─── */\n\nexport interface LiveWaitingProps {\n /** Scheduled start time of the live */\n scheduledAt: Date\n /** Teacher/instructor display name */\n teacherName?: string\n /** Teacher avatar URL */\n teacherAvatar?: string\n /** Live class topic/subject */\n topic?: string\n className?: string\n}\n\n/* ─── Helpers ─── */\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n total: number\n}\n\nfunction calcTimeLeft(target: Date): TimeLeft {\n const total = Math.max(0, target.getTime() - Date.now())\n return {\n days: Math.floor(total / (1000 * 60 * 60 * 24)),\n hours: Math.floor((total / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((total / (1000 * 60)) % 60),\n seconds: Math.floor((total / 1000) % 60),\n total,\n }\n}\n\nfunction padTwo(n: number): string {\n return n.toString().padStart(2, \"0\")\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .slice(0, 2)\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n}\n\n/* ─── Sub-components ─── */\n\nfunction CountdownUnit({ value, label }: { value: string; label: string }) {\n return (\n <div className=\"flex flex-col items-center gap-1\">\n <div className=\"flex items-center justify-center size-14 sm:size-16 rounded-xl bg-muted border border-border text-2xl sm:text-3xl font-bold text-foreground tabular-nums\">\n {value}\n </div>\n <span className=\"text-[11px] text-muted-foreground uppercase tracking-wider font-medium\">\n {label}\n </span>\n </div>\n )\n}\n\n/* ─── Component ─── */\n\nfunction LiveWaiting({\n scheduledAt,\n teacherName,\n teacherAvatar,\n topic,\n className,\n}: LiveWaitingProps) {\n const [timeLeft, setTimeLeft] = React.useState<TimeLeft>(() =>\n calcTimeLeft(scheduledAt)\n )\n\n React.useEffect(() => {\n const timer = setInterval(() => {\n setTimeLeft(calcTimeLeft(scheduledAt))\n }, 1000)\n return () => clearInterval(timer)\n }, [scheduledAt])\n\n const hasStarted = timeLeft.total === 0\n\n return (\n <div\n data-slot=\"live-waiting\"\n className={cn(\n \"flex flex-col items-center justify-center gap-6 py-12 sm:py-16 px-4\",\n className\n )}\n >\n {/* Live badge */}\n <Badge variant=\"destructive\" size=\"lg\" className=\"gap-1.5\">\n <CycleIcon icon={RadioIcon} size=\"2xs\" decorative />\n {hasStarted ? \"Começando...\" : \"Aula ao Vivo\"}\n </Badge>\n\n {/* Topic */}\n {topic && (\n <h2 className=\"text-lg sm:text-xl font-semibold text-foreground text-center max-w-md leading-snug\">\n {topic}\n </h2>\n )}\n\n {/* Countdown */}\n {!hasStarted && (\n <div className=\"flex items-center gap-3\">\n {timeLeft.days > 0 && (\n <>\n <CountdownUnit value={padTwo(timeLeft.days)} label=\"Dias\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n </>\n )}\n <CountdownUnit value={padTwo(timeLeft.hours)} label=\"Horas\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n <CountdownUnit value={padTwo(timeLeft.minutes)} label=\"Min\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n <CountdownUnit value={padTwo(timeLeft.seconds)} label=\"Seg\" />\n </div>\n )}\n\n {/* Scheduled date */}\n <p className=\"text-sm text-muted-foreground\">\n {scheduledAt.toLocaleDateString(\"pt-BR\", {\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </p>\n\n {/* Teacher info */}\n {teacherName && (\n <div className=\"flex items-center gap-3 mt-2\">\n <Avatar size=\"lg\">\n {teacherAvatar && (\n <AvatarImage src={teacherAvatar} alt={teacherName} />\n )}\n <AvatarFallback className=\"bg-primary text-primary-foreground\">\n {getInitials(teacherName)}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {teacherName}\n </span>\n <span className=\"text-xs text-muted-foreground\">Professor(a)</span>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport { LiveWaiting }\n"]}
1
+ {"version":3,"sources":["../src/components/ui/live-waiting.tsx"],"names":[],"mappings":"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","file":"chunk-L2DJS6PG.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { RadioIcon } from \"lucide-react\"\nimport { CycleIcon } from \"@/components/icons/CycleIcon\"\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { cn } from \"@/lib/utils\"\n\n/* ─── Types ─── */\n\nexport interface LiveWaitingProps {\n /** Scheduled start time of the live */\n scheduledAt: Date\n /** Teacher/instructor display name */\n teacherName?: string\n /** Teacher avatar URL */\n teacherAvatar?: string\n /** Live class topic/subject */\n topic?: string\n className?: string\n}\n\n/* ─── Helpers ─── */\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n total: number\n}\n\nfunction calcTimeLeft(target: Date): TimeLeft {\n const total = Math.max(0, target.getTime() - Date.now())\n return {\n days: Math.floor(total / (1000 * 60 * 60 * 24)),\n hours: Math.floor((total / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((total / (1000 * 60)) % 60),\n seconds: Math.floor((total / 1000) % 60),\n total,\n }\n}\n\nfunction padTwo(n: number): string {\n return n.toString().padStart(2, \"0\")\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .slice(0, 2)\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n}\n\n/* ─── Sub-components ─── */\n\nfunction CountdownUnit({ value, label }: { value: string; label: string }) {\n return (\n <div className=\"flex flex-col items-center gap-1\">\n <div className=\"flex items-center justify-center size-14 sm:size-16 rounded-xl bg-muted border border-border text-2xl sm:text-3xl font-bold text-foreground tabular-nums\">\n {value}\n </div>\n <span className=\"text-[11px] text-muted-foreground uppercase tracking-wider font-medium\">\n {label}\n </span>\n </div>\n )\n}\n\n/* ─── Component ─── */\n\nfunction LiveWaiting({\n scheduledAt,\n teacherName,\n teacherAvatar,\n topic,\n className,\n}: LiveWaitingProps) {\n const [timeLeft, setTimeLeft] = React.useState<TimeLeft>(() =>\n calcTimeLeft(scheduledAt)\n )\n\n React.useEffect(() => {\n const timer = setInterval(() => {\n setTimeLeft(calcTimeLeft(scheduledAt))\n }, 1000)\n return () => clearInterval(timer)\n }, [scheduledAt])\n\n const hasStarted = timeLeft.total === 0\n\n return (\n <div\n data-slot=\"live-waiting\"\n className={cn(\n \"flex flex-col items-center justify-center gap-6 py-12 sm:py-16 px-4\",\n className\n )}\n >\n {/* Live badge */}\n <Badge variant=\"destructive\" size=\"lg\" className=\"gap-1.5\">\n <CycleIcon icon={RadioIcon} size=\"2xs\" decorative />\n {hasStarted ? \"Começando...\" : \"Aula ao Vivo\"}\n </Badge>\n\n {/* Topic */}\n {topic && (\n <h2 className=\"text-lg sm:text-xl font-semibold text-foreground text-center max-w-md leading-snug\">\n {topic}\n </h2>\n )}\n\n {/* Countdown */}\n {!hasStarted && (\n <div className=\"flex items-center gap-3\">\n {timeLeft.days > 0 && (\n <>\n <CountdownUnit value={padTwo(timeLeft.days)} label=\"Dias\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n </>\n )}\n <CountdownUnit value={padTwo(timeLeft.hours)} label=\"Horas\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n <CountdownUnit value={padTwo(timeLeft.minutes)} label=\"Min\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n <CountdownUnit value={padTwo(timeLeft.seconds)} label=\"Seg\" />\n </div>\n )}\n\n {/* Scheduled date */}\n <p className=\"text-sm text-muted-foreground\">\n {scheduledAt.toLocaleDateString(\"pt-BR\", {\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </p>\n\n {/* Teacher info */}\n {teacherName && (\n <div className=\"flex items-center gap-3 mt-2\">\n <Avatar size=\"lg\">\n {teacherAvatar && (\n <AvatarImage src={teacherAvatar} alt={teacherName} />\n )}\n <AvatarFallback className=\"bg-primary text-primary-foreground\">\n {getInitials(teacherName)}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {teacherName}\n </span>\n <span className=\"text-xs text-muted-foreground\">Professor(a)</span>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport { LiveWaiting }\n"]}
@@ -0,0 +1,50 @@
1
+ import { cn } from './chunk-TYCPXAXF.js';
2
+ import { __objRest, __spreadValues } from './chunk-YINJ5YZ5.js';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var containerVariants = cva("mx-auto w-full", {
7
+ variants: {
8
+ size: {
9
+ prose: "max-w-[860px]",
10
+ default: "max-w-[1380px]",
11
+ wide: "max-w-[1440px]",
12
+ full: ""
13
+ },
14
+ padding: {
15
+ /** 16px mobile / 24px desktop (system margin) */
16
+ default: "px-4 sm:px-6",
17
+ /** Sem padding — para hero/banner full-bleed */
18
+ none: ""
19
+ }
20
+ },
21
+ defaultVariants: {
22
+ size: "default",
23
+ padding: "default"
24
+ }
25
+ });
26
+ function Container(_a) {
27
+ var _b = _a, {
28
+ size,
29
+ padding,
30
+ as = "div",
31
+ className
32
+ } = _b, props = __objRest(_b, [
33
+ "size",
34
+ "padding",
35
+ "as",
36
+ "className"
37
+ ]);
38
+ const Component = as;
39
+ return /* @__PURE__ */ jsx(
40
+ Component,
41
+ __spreadValues({
42
+ "data-slot": "container",
43
+ className: cn(containerVariants({ size, padding }), className)
44
+ }, props)
45
+ );
46
+ }
47
+
48
+ export { Container, containerVariants };
49
+ //# sourceMappingURL=chunk-QANROH2K.js.map
50
+ //# sourceMappingURL=chunk-QANROH2K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/container.tsx"],"names":[],"mappings":";;;;;AAaA,IAAM,iBAAA,GAAoB,IAAI,gBAAA,EAAkB;AAAA,EAC9C,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,eAAA;AAAA,MACP,OAAA,EAAS,gBAAA;AAAA,MACT,IAAA,EAAM,gBAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAAA,IACA,OAAA,EAAS;AAAA;AAAA,MAEP,OAAA,EAAS,cAAA;AAAA;AAAA,MAET,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS;AAAA;AAEb,CAAC;AASD,SAAS,UAAU,EAAA,EAMA;AANA,EAAA,IAAA,EAAA,GAAA,EAAA,EACjB;AAAA,IAAA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,EAAA,GAAK,KAAA;AAAA,IACL;AAAA,GA7CF,GAyCmB,EAAA,EAKd,KAAA,GAAA,SAAA,CALc,EAAA,EAKd;AAAA,IAJH,MAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,SAAA,GAAY,EAAA;AAClB,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,GAAG,iBAAA,CAAkB,EAAE,MAAM,OAAA,EAAS,GAAG,SAAS;AAAA,KAAA,EACzD,KAAA;AAAA,GACN;AAEJ","file":"chunk-QANROH2K.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\n/**\n * Container — wrapper centralizado com max-width e margin lateral.\n *\n * Margin (locked system value): 16px mobile / 24px desktop. Para casos especiais\n * que pedem mais respiro (ex: conteudo luxuoso), use override via className: `sm:px-10`.\n *\n * O Container nao define gutter ou colunas — isso e responsabilidade do Grid interno.\n */\nconst containerVariants = cva(\"mx-auto w-full\", {\n variants: {\n size: {\n prose: \"max-w-[860px]\",\n default: \"max-w-[1380px]\",\n wide: \"max-w-[1440px]\",\n full: \"\",\n },\n padding: {\n /** 16px mobile / 24px desktop (system margin) */\n default: \"px-4 sm:px-6\",\n /** Sem padding — para hero/banner full-bleed */\n none: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n padding: \"default\",\n },\n})\n\nexport interface ContainerProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof containerVariants> {\n /** HTML element to render (default: div) */\n as?: \"div\" | \"section\" | \"main\" | \"article\"\n}\n\nfunction Container({\n size,\n padding,\n as = \"div\",\n className,\n ...props\n}: ContainerProps) {\n const Component = as as React.ElementType\n return (\n <Component\n data-slot=\"container\"\n className={cn(containerVariants({ size, padding }), className)}\n {...props}\n />\n )\n}\n\nexport { Container, containerVariants }\n"]}
package/dist/index.d.ts CHANGED
@@ -20,6 +20,11 @@ export { Toggle, ToggleProps, toggleVariants } from './ui/toggle.js';
20
20
  export { Progress, ProgressProps, indicatorVariants, progressVariants } from './ui/progress.js';
21
21
  export { ProgressStage, ProgressStageProps } from './ui/progress-stage.js';
22
22
  export { ProgressDot, ProgressDotProps, dotVariants, progressDotVariants } from './ui/progress-dot.js';
23
+ export { CircularProgress, CircularProgressProps, circularProgressVariants } from './ui/circular-progress.js';
24
+ export { Container, ContainerProps, containerVariants } from './layout/container.js';
25
+ export { Stack, StackProps } from './layout/stack.js';
26
+ export { Grid, GridItem, GridItemProps, GridProps } from './layout/grid.js';
27
+ export { C as ColCount, G as GapToken } from './types-CVdl5nka.js';
23
28
  export { FileCard, FileCardProps, fileCardVariants } from './ui/file-card.js';
24
29
  export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage } from './ui/avatar.js';
25
30
  export { ChatBubble, ChatBubbleProps, chatBubbleVariants } from './ui/chat-bubble.js';
package/dist/index.js CHANGED
@@ -1,33 +1,37 @@
1
+ export { Spinner } from './chunk-5XNYJECW.js';
2
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './chunk-5NKTYXWQ.js';
3
+ export { Fab, fabVariants } from './chunk-7NFHHOAE.js';
4
+ export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './chunk-YJ4U7ISM.js';
1
5
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './chunk-NOMLQHZS.js';
2
6
  export { Editor } from './chunk-D4UH2HJQ.js';
3
7
  export { ClassLogo, GroupTalkLogo, PrivateTalkLogo, ProductLogo } from './chunk-66CU7J2I.js';
4
8
  export { FluencypassIcon, FluencypassLogo } from './chunk-5LZHXNBV.js';
9
+ export { Alert, AlertAction, AlertClose, AlertDescription, AlertTitle, alertVariants } from './chunk-7ZXAU2CD.js';
10
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger } from './chunk-3EFI7PYC.js';
11
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue } from './chunk-SZUWVHP4.js';
12
+ export { Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from './chunk-EF6FQT4Y.js';
5
13
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './chunk-IGMII4BK.js';
6
14
  export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from './chunk-PY2BIZNB.js';
7
15
  export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from './chunk-F2Q3E2ZM.js';
8
16
  export { Skeleton } from './chunk-2EKU7RP4.js';
9
- export { Spinner } from './chunk-5XNYJECW.js';
10
- export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './chunk-5NKTYXWQ.js';
11
- export { Fab, fabVariants } from './chunk-7NFHHOAE.js';
12
- export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './chunk-YJ4U7ISM.js';
17
+ export { ChatPanel } from './chunk-L32AMI4K.js';
18
+ export { ChatBubble, chatBubbleVariants } from './chunk-HZJRM5EK.js';
19
+ export { LikeDislike, likeDislikeVariants } from './chunk-F2XA2Z75.js';
20
+ export { LiveWaiting } from './chunk-L2DJS6PG.js';
13
21
  export { AudioPlayer } from './chunk-DCNZ2DRR.js';
14
22
  export { VideoPlayer } from './chunk-V3CBOIGK.js';
15
23
  export { playerLocales } from './chunk-C6BQAAHX.js';
16
24
  export { Toaster, cycleToast } from './chunk-ELZCZ6ZH.js';
17
- export { Alert, AlertAction, AlertClose, AlertDescription, AlertTitle, alertVariants } from './chunk-7ZXAU2CD.js';
18
- export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger } from './chunk-3EFI7PYC.js';
19
- export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue } from './chunk-SZUWVHP4.js';
20
- export { Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from './chunk-EF6FQT4Y.js';
25
+ export { Achievement, Ai, Answer, Badge as BadgeIcon, Certificate, Chat as ChatIcon, Checkpoint, Completion, Conversation, Course, Deadline, Dialogue, Dictionary, Diploma, DotLive, Exercise, Feedback, Flashcard, Fluency, Goal, Grammar, GroupClass, Highlight, Language, Lesson, Listening, Live, MemoryCard, Milestone, Module, Presentation, PrivateClass, Progress as ProgressIcon, Question, Quiz, Ray, Reading, Recap, RecordedClass, Recurring, Repetition, Required, Schedule, Sentence, Streak, Task, Translate, Unit, Vocabulary, Whiteboard } from './chunk-JPEDYOV7.js';
26
+ export { CycleIcon, ICON_SIZES } from './chunk-V7M2NHUO.js';
21
27
  export { ProgressStage } from './chunk-NYJMA2T7.js';
22
28
  export { ProgressDot, dotVariants, progressDotVariants } from './chunk-ZTANTDKS.js';
29
+ export { CircularProgress, circularProgressVariants } from './chunk-A3Z5GGAI.js';
30
+ export { Container, containerVariants } from './chunk-QANROH2K.js';
31
+ export { Stack } from './chunk-I5A3CME4.js';
32
+ export { Grid, GridItem } from './chunk-JRJBKPXW.js';
23
33
  export { FileCard, fileCardVariants } from './chunk-JMNMW54C.js';
24
- export { ChatPanel } from './chunk-L32AMI4K.js';
25
- export { ChatBubble, chatBubbleVariants } from './chunk-HZJRM5EK.js';
26
- export { LikeDislike, likeDislikeVariants } from './chunk-F2XA2Z75.js';
27
- export { Achievement, Ai, Answer, Badge as BadgeIcon, Certificate, Chat as ChatIcon, Checkpoint, Completion, Conversation, Course, Deadline, Dialogue, Dictionary, Diploma, DotLive, Exercise, Feedback, Flashcard, Fluency, Goal, Grammar, GroupClass, Highlight, Language, Lesson, Listening, Live, MemoryCard, Milestone, Module, Presentation, PrivateClass, Progress as ProgressIcon, Question, Quiz, Ray, Reading, Recap, RecordedClass, Recurring, Repetition, Required, Schedule, Sentence, Streak, Task, Translate, Unit, Vocabulary, Whiteboard } from './chunk-JPEDYOV7.js';
28
- export { LiveWaiting } from './chunk-PCLVQPIG.js';
29
34
  export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage } from './chunk-MSLQRGSP.js';
30
- export { CycleIcon, ICON_SIZES } from './chunk-V7M2NHUO.js';
31
35
  export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from './chunk-QZVQPUVT.js';
32
36
  export { ScrollArea, ScrollBar } from './chunk-3LXU5C35.js';
33
37
  export { Checkbox, checkboxVariants } from './chunk-5BNTQSCS.js';
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import * as React from 'react';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ /**
7
+ * Container — wrapper centralizado com max-width e margin lateral.
8
+ *
9
+ * Margin (locked system value): 16px mobile / 24px desktop. Para casos especiais
10
+ * que pedem mais respiro (ex: conteudo luxuoso), use override via className: `sm:px-10`.
11
+ *
12
+ * O Container nao define gutter ou colunas — isso e responsabilidade do Grid interno.
13
+ */
14
+ declare const containerVariants: (props?: ({
15
+ size?: "default" | "prose" | "wide" | "full" | null | undefined;
16
+ padding?: "none" | "default" | null | undefined;
17
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
18
+ interface ContainerProps extends React.ComponentProps<"div">, VariantProps<typeof containerVariants> {
19
+ /** HTML element to render (default: div) */
20
+ as?: "div" | "section" | "main" | "article";
21
+ }
22
+ declare function Container({ size, padding, as, className, ...props }: ContainerProps): react_jsx_runtime.JSX.Element;
23
+
24
+ export { Container, type ContainerProps, containerVariants };
@@ -0,0 +1,5 @@
1
+ export { Container, containerVariants } from '../chunk-QANROH2K.js';
2
+ import '../chunk-TYCPXAXF.js';
3
+ import '../chunk-YINJ5YZ5.js';
4
+ //# sourceMappingURL=container.js.map
5
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"container.js"}
@@ -0,0 +1,26 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { C as ColCount } from '../types-CVdl5nka.js';
4
+
5
+ interface GridProps extends React.ComponentProps<"div"> {
6
+ /**
7
+ * Auto-fit gallery: largura minima por item. Quando setado, sobrescreve
8
+ * o sistema 12-col padrao com `repeat(auto-fit, minmax(X, 1fr))`.
9
+ * Use para galerias uniformes onde nao se controla o numero de items por linha.
10
+ */
11
+ minItemWidth?: string;
12
+ }
13
+ declare function Grid({ minItemWidth, className, style, ...props }: GridProps): react_jsx_runtime.JSX.Element;
14
+ interface GridItemProps extends React.ComponentProps<"div"> {
15
+ /** Quantas colunas (de 12) o item ocupa no mobile. Sem size, ocupa 1 col. */
16
+ size?: ColCount;
17
+ /** Cols em sm (>= 640px) */
18
+ sizeSm?: ColCount;
19
+ /** Cols em md (>= 768px) */
20
+ sizeMd?: ColCount;
21
+ /** Cols em lg (>= 1024px) */
22
+ sizeLg?: ColCount;
23
+ }
24
+ declare function GridItem({ size, sizeSm, sizeMd, sizeLg, className, ...props }: GridItemProps): react_jsx_runtime.JSX.Element;
25
+
26
+ export { Grid, GridItem, type GridItemProps, type GridProps };
@@ -0,0 +1,5 @@
1
+ export { Grid, GridItem } from '../chunk-JRJBKPXW.js';
2
+ import '../chunk-TYCPXAXF.js';
3
+ import '../chunk-YINJ5YZ5.js';
4
+ //# sourceMappingURL=grid.js.map
5
+ //# sourceMappingURL=grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"grid.js"}
@@ -0,0 +1,47 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { G as GapToken } from '../types-CVdl5nka.js';
4
+
5
+ declare const DIRECTION: {
6
+ readonly col: "flex-col";
7
+ readonly row: "flex-row";
8
+ };
9
+ declare const DIRECTION_SM: {
10
+ readonly col: "sm:flex-col";
11
+ readonly row: "sm:flex-row";
12
+ };
13
+ declare const DIRECTION_LG: {
14
+ readonly col: "lg:flex-col";
15
+ readonly row: "lg:flex-row";
16
+ };
17
+ declare const ALIGN: {
18
+ readonly start: "items-start";
19
+ readonly center: "items-center";
20
+ readonly end: "items-end";
21
+ readonly stretch: "items-stretch";
22
+ };
23
+ declare const JUSTIFY: {
24
+ readonly start: "justify-start";
25
+ readonly center: "justify-center";
26
+ readonly end: "justify-end";
27
+ readonly between: "justify-between";
28
+ };
29
+ interface StackProps extends React.ComponentProps<"div"> {
30
+ /** Flex direction (default: col) */
31
+ direction?: keyof typeof DIRECTION;
32
+ /** Direction at sm breakpoint (>= 640px) */
33
+ directionSm?: keyof typeof DIRECTION_SM;
34
+ /** Direction at lg breakpoint (>= 1024px) */
35
+ directionLg?: keyof typeof DIRECTION_LG;
36
+ /** Gap between items (default: lg = 16px) */
37
+ gap?: GapToken;
38
+ /** Gap at sm breakpoint */
39
+ gapSm?: GapToken;
40
+ /** Cross-axis alignment */
41
+ align?: keyof typeof ALIGN;
42
+ /** Main-axis alignment */
43
+ justify?: keyof typeof JUSTIFY;
44
+ }
45
+ declare function Stack({ direction, directionSm, directionLg, gap, gapSm, align, justify, className, ...props }: StackProps): react_jsx_runtime.JSX.Element;
46
+
47
+ export { Stack, type StackProps };
@@ -0,0 +1,5 @@
1
+ export { Stack } from '../chunk-I5A3CME4.js';
2
+ import '../chunk-TYCPXAXF.js';
3
+ import '../chunk-YINJ5YZ5.js';
4
+ //# sourceMappingURL=stack.js.map
5
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"stack.js"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared types for layout primitives (Container, Stack, Grid, GridItem).
3
+ */
4
+ /** Semantic gap tokens — used by Stack only (Grid has locked gutter). Maps to Tailwind gap-1/2/3/4/6 (4/8/12/16/24 px) */
5
+ type GapToken = "xs" | "sm" | "md" | "lg" | "xl";
6
+ /** Allowed column count for GridItem `size` (1–12) — based on the locked 12-col grid */
7
+ type ColCount = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
8
+
9
+ export type { ColCount as C, GapToken as G };
@@ -1,7 +1,7 @@
1
1
  export { ChatPanel } from '../chunk-L32AMI4K.js';
2
2
  import '../chunk-HZJRM5EK.js';
3
- import '../chunk-MSLQRGSP.js';
4
3
  import '../chunk-V7M2NHUO.js';
4
+ import '../chunk-MSLQRGSP.js';
5
5
  import '../chunk-3LXU5C35.js';
6
6
  import '../chunk-5I4PGGLN.js';
7
7
  import '../chunk-TYCPXAXF.js';
@@ -0,0 +1,23 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import * as React from 'react';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const circularProgressVariants: (props?: ({
7
+ size?: "xs" | "sm" | "lg" | "default" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface CircularProgressProps extends Omit<React.ComponentProps<"div">, "children">, VariantProps<typeof circularProgressVariants> {
10
+ /** Valor de 0 a 100 (clamped) */
11
+ value: number;
12
+ /** Classe de tema fixa (ex: "theme-brand", "theme-class"). Tem precedencia sobre autoTheme. */
13
+ theme?: string;
14
+ /** Se true, escolhe o tema automaticamente: 0–33 critical, 34–66 warning, 67–100 positive. */
15
+ autoTheme?: boolean;
16
+ /** Mostrar label central com a porcentagem (default true) */
17
+ showLabel?: boolean;
18
+ /** Label customizado — sobrescreve `${value}%` */
19
+ label?: string;
20
+ }
21
+ declare function CircularProgress({ value, size, theme, autoTheme, showLabel, label, className, ...props }: CircularProgressProps): react_jsx_runtime.JSX.Element;
22
+
23
+ export { CircularProgress, type CircularProgressProps, circularProgressVariants };
@@ -0,0 +1,5 @@
1
+ export { CircularProgress, circularProgressVariants } from '../chunk-A3Z5GGAI.js';
2
+ import '../chunk-TYCPXAXF.js';
3
+ import '../chunk-YINJ5YZ5.js';
4
+ //# sourceMappingURL=circular-progress.js.map
5
+ //# sourceMappingURL=circular-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"circular-progress.js"}
@@ -1,6 +1,6 @@
1
- export { LiveWaiting } from '../chunk-PCLVQPIG.js';
2
- import '../chunk-MSLQRGSP.js';
1
+ export { LiveWaiting } from '../chunk-L2DJS6PG.js';
3
2
  import '../chunk-V7M2NHUO.js';
3
+ import '../chunk-MSLQRGSP.js';
4
4
  import '../chunk-W4GSXVJ2.js';
5
5
  import '../chunk-TYCPXAXF.js';
6
6
  import '../chunk-YINJ5YZ5.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluencypassdevs/cycle",
3
- "version": "1.5.1",
3
+ "version": "1.7.0",
4
4
  "description": "Cycle Design System — UI component library by Fluencypass",
5
5
  "license": "MIT",
6
6
  "repository": {