@fluencypassdevs/cycle 1.30.0 → 1.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,9 +42,8 @@ var ERROR_STATE_PRESETS = {
42
42
  icon: TriangleAlert,
43
43
  severity: "critical",
44
44
  title: "Este conte\xFAdo n\xE3o carregou",
45
- description: "Tente novamente. O resto da p\xE1gina continua funcionando.",
46
- pageTitle: "Esta p\xE1gina n\xE3o carregou",
47
- pageDescription: "Tente novamente em alguns instantes."
45
+ description: "Tente novamente em alguns instantes.",
46
+ pageTitle: "Esta p\xE1gina n\xE3o carregou"
48
47
  }
49
48
  };
50
49
  var ErrorStateContext = React.createContext({
@@ -270,5 +269,5 @@ function ErrorState(_a) {
270
269
  }
271
270
 
272
271
  export { ERROR_STATE_PRESETS, ErrorState, ErrorStateActions, ErrorStateDescription, ErrorStateMedia, ErrorStateMeta, ErrorStateTitle };
273
- //# sourceMappingURL=chunk-TJ4O3VAL.js.map
274
- //# sourceMappingURL=chunk-TJ4O3VAL.js.map
272
+ //# sourceMappingURL=chunk-QAABULI4.js.map
273
+ //# sourceMappingURL=chunk-QAABULI4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../core/src/components/ui/error-state.tsx"],"names":["ErrorStateTitle","_a","_b"],"mappings":"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","file":"chunk-QAABULI4.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n Check,\n Copy,\n Lock,\n LogIn,\n RefreshCw,\n SearchX,\n ServerCrash,\n TriangleAlert,\n WifiOff,\n type LucideIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"@core/lib/utils\"\nimport { CycleIcon } from \"@core/components/icons\"\nimport { Button } from \"@core/components/ui/button\"\nimport { Badge } from \"@core/components/ui/badge\"\n\n/* ─── Tipos ───────────────────────────────────────────────────── */\n\nexport type ErrorStateKind = \"not-found\" | \"forbidden\" | \"unauthorized\" | \"server\" | \"offline\" | \"generic\"\nexport type ErrorStateSize = \"page\" | \"section\"\nexport type ErrorStateSeverity = \"neutral\" | \"warning\" | \"critical\"\n\nexport interface ErrorStatePreset {\n icon: LucideIcon\n severity: ErrorStateSeverity\n title: string\n description: string\n /** Título alternativo quando size=\"page\" (só o generic usa). */\n pageTitle?: string\n /** Descrição alternativa quando size=\"page\" (só o generic usa). */\n pageDescription?: string\n}\n\n/**\n * Presets por cenário. Copy em português correto — texto que o aluno lê.\n * Regra: o default só afirma o que o componente garante sozinho. Reportar, reconectar,\n * salvar dados são do app — quem faz isso sobrescreve title/description.\n * Severidade: vermelho só em falha real do sistema.\n */\nexport const ERROR_STATE_PRESETS: Record<ErrorStateKind, ErrorStatePreset> = {\n \"not-found\": {\n icon: SearchX,\n severity: \"neutral\",\n title: \"Página não encontrada\",\n description:\n \"O link pode estar quebrado ou a página pode ter sido movida. Confira o endereço ou vá para o início.\",\n },\n forbidden: {\n icon: Lock,\n severity: \"neutral\",\n title: \"Você não tem acesso a esta página\",\n description: \"Esta área é restrita. Se você precisa dela, peça acesso a quem administra sua conta.\",\n },\n unauthorized: {\n icon: LogIn,\n severity: \"neutral\",\n title: \"Sua sessão expirou\",\n description: \"Entre novamente para continuar de onde parou.\",\n },\n server: {\n icon: ServerCrash,\n severity: \"critical\",\n title: \"Algo deu errado do nosso lado\",\n description: \"Tente novamente em alguns instantes. Se continuar, fale com o suporte.\",\n },\n offline: {\n icon: WifiOff,\n severity: \"warning\",\n title: \"Você está sem conexão\",\n description:\n \"Confira o Wi-Fi ou os dados móveis e tente novamente quando a conexão voltar.\",\n },\n generic: {\n icon: TriangleAlert,\n severity: \"critical\",\n title: \"Este conteúdo não carregou\",\n description: \"Tente novamente em alguns instantes.\",\n pageTitle: \"Esta página não carregou\",\n },\n}\n\n/* ─── Contexto interno (size/severity para os sub-componentes) ── */\n\ninterface ErrorStateContextValue {\n size: ErrorStateSize\n severity: ErrorStateSeverity\n}\n\nconst ErrorStateContext = React.createContext<ErrorStateContextValue>({\n size: \"section\",\n severity: \"neutral\",\n})\n\nfunction useErrorStateContext() {\n return React.useContext(ErrorStateContext)\n}\n\n/* ─── Sub-componentes ─────────────────────────────────────────── */\n\nconst MEDIA_SEVERITY: Record<ErrorStateSeverity, string> = {\n neutral: \"bg-muted text-foreground border border-border\",\n warning: \"theme-warning bg-background text-foreground\",\n critical: \"theme-critical bg-background text-foreground\",\n}\n\nconst MEDIA_SIZE: Record<ErrorStateSize, string> = {\n page: \"size-14 rounded-xl\",\n section: \"size-8 rounded-lg\",\n}\n\nfunction ErrorStateMedia({ className, ...props }: React.ComponentProps<\"div\">) {\n const { size, severity } = useErrorStateContext()\n return (\n <div\n data-slot=\"error-state-media\"\n className={cn(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n MEDIA_SIZE[size],\n MEDIA_SEVERITY[severity],\n className\n )}\n {...props}\n />\n )\n}\n\ntype HeadingTag = \"h1\" | \"h2\" | \"h3\" | \"h4\"\n\ninterface ErrorStateTitleProps extends React.ComponentProps<\"h2\"> {\n /** Nível do heading. Default: 1 em page, 2 em section. */\n level?: 1 | 2 | 3 | 4\n}\n\nconst ErrorStateTitle = React.forwardRef<HTMLHeadingElement, ErrorStateTitleProps>(\n function ErrorStateTitle({ className, level, ...props }, ref) {\n const { size } = useErrorStateContext()\n const Tag = (`h${level ?? (size === \"page\" ? 1 : 2)}`) as HeadingTag\n return (\n <Tag\n ref={ref}\n data-slot=\"error-state-title\"\n // outline-none: foco é programático (focus() no mount de page, p/ leitor de tela\n // anunciar a troca de rota) — não queremos o anel visual de foco aqui.\n className={cn(\n \"text-balance outline-none\",\n size === \"page\" ? \"text-2xl font-semibold tracking-tight\" : \"text-sm font-semibold tracking-tight\",\n className\n )}\n {...props}\n />\n )\n }\n)\n\nfunction ErrorStateDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { size } = useErrorStateContext()\n return (\n <p\n data-slot=\"error-state-description\"\n className={cn(\n \"text-balance text-muted-foreground\",\n size === \"page\" ? \"text-sm max-w-md\" : \"text-xs/relaxed max-w-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ErrorStateActions({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"error-state-actions\"\n className={cn(\"mt-3 flex flex-wrap items-center justify-center gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction ErrorStateMeta({ className, ...props }: React.ComponentProps<\"div\">) {\n const { size } = useErrorStateContext()\n return (\n <div\n data-slot=\"error-state-meta\"\n className={cn(\n \"flex flex-wrap items-center justify-center gap-2 font-mono text-xs/relaxed text-muted-foreground\",\n size === \"page\" ? \"mt-3\" : \"mt-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CopyReference({ value }: { value: string }) {\n const [copied, setCopied] = React.useState(false)\n\n React.useEffect(() => {\n if (!copied) return\n const id = setTimeout(() => setCopied(false), 2000)\n return () => clearTimeout(id)\n }, [copied])\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(value)\n setCopied(true)\n } catch {\n // Sem clipboard (permissão negada): nada a fazer, o id continua visível para cópia manual.\n }\n }\n\n return (\n <Button\n type=\"button\"\n variant=\"link\"\n size=\"xs\"\n onClick={handleCopy}\n aria-label={copied ? \"Copiado\" : \"Copiar referência\"}\n className=\"font-sans\"\n >\n <CycleIcon icon={copied ? Check : Copy} size=\"2xs\" decorative />\n <span aria-live=\"polite\">{copied ? \"Copiado\" : \"Copiar\"}</span>\n </Button>\n )\n}\n\n/* ─── Componente principal ────────────────────────────────────── */\n\nexport interface ErrorStateProps extends Omit<React.ComponentProps<\"div\">, \"title\" | \"role\" | \"aria-live\"> {\n kind?: ErrorStateKind\n size?: ErrorStateSize\n severity?: ErrorStateSeverity\n title?: React.ReactNode\n description?: React.ReactNode\n /** Substitui o ícone default (ex.: ilustração). */\n media?: React.ReactNode\n /** Badge mono opcional (\"404\", \"500\"). */\n code?: string | number\n /** \"Referência xxxx\" com botão copiar, opcional. */\n referenceId?: string\n onRetry?: () => void\n retryLabel?: string\n onReport?: () => void\n reportLabel?: string\n /** Botões do consumidor. Renderizados antes do retry. */\n actions?: React.ReactNode\n /** section: borda tracejada como o Empty. */\n bordered?: boolean\n /** page: foca o título ao montar. Default true. */\n autoFocus?: boolean\n /** Tag do título. Default 1 em page, 2 em section. */\n headingLevel?: 1 | 2 | 3 | 4\n}\n\nfunction ErrorState({\n kind = \"generic\",\n size = \"section\",\n severity: severityProp,\n title,\n description,\n media,\n code,\n referenceId,\n onRetry,\n retryLabel = \"Tentar novamente\",\n onReport,\n reportLabel = \"Relatar problema\",\n actions,\n bordered = false,\n autoFocus = true,\n headingLevel,\n className,\n ...props\n}: ErrorStateProps) {\n const preset = ERROR_STATE_PRESETS[kind]\n const severity = severityProp ?? preset.severity\n const titleRef = React.useRef<HTMLHeadingElement>(null)\n\n React.useEffect(() => {\n if (size === \"page\" && autoFocus) {\n titleRef.current?.focus({ preventScroll: true })\n }\n }, [size, autoFocus])\n\n const resolvedTitle =\n title ?? (size === \"page\" ? preset.pageTitle ?? preset.title : preset.title)\n const resolvedDescription =\n description ??\n (size === \"page\" ? preset.pageDescription ?? preset.description : preset.description)\n\n // Página: sem role (o foco no h1 já anuncia). Seção: alert se crítico, status se não.\n const liveProps =\n size === \"section\"\n ? severity === \"critical\"\n ? { role: \"alert\" as const }\n : { role: \"status\" as const, \"aria-live\": \"polite\" as const }\n : {}\n\n return (\n <ErrorStateContext.Provider value={{ size, severity }}>\n <div\n data-slot=\"error-state\"\n data-kind={kind}\n data-size={size}\n data-severity={severity}\n className={cn(\n \"flex flex-col items-center text-center gap-2\",\n size === \"page\" ? \"flex-1 justify-center px-6 py-16\" : \"p-6\",\n size === \"section\" && bordered && \"rounded-lg border border-dashed border-border\",\n className\n )}\n {...props}\n {...liveProps}\n >\n {media ?? (\n <ErrorStateMedia>\n <CycleIcon icon={preset.icon} size={size === \"page\" ? \"md\" : \"xs\"} decorative />\n </ErrorStateMedia>\n )}\n <ErrorStateTitle ref={titleRef} level={headingLevel} tabIndex={size === \"page\" ? -1 : undefined}>\n {resolvedTitle}\n </ErrorStateTitle>\n {resolvedDescription && <ErrorStateDescription>{resolvedDescription}</ErrorStateDescription>}\n {(actions || onRetry) && (\n <ErrorStateActions>\n {actions}\n {onRetry && (\n <Button type=\"button\" size={size === \"page\" ? \"default\" : \"sm\"} onClick={onRetry}>\n <CycleIcon icon={RefreshCw} size=\"xs\" decorative />\n {retryLabel}\n </Button>\n )}\n </ErrorStateActions>\n )}\n {(code != null || referenceId) && (\n <ErrorStateMeta>\n {code != null && (\n <Badge\n variant=\"outline\"\n size=\"sm\"\n className={cn(\n \"font-mono\",\n severity === \"critical\" && \"theme-critical bg-background text-foreground border-border\"\n )}\n >\n {code}\n </Badge>\n )}\n {referenceId && (\n <span className=\"inline-flex items-center gap-1.5\">\n <span>Referência</span>\n <code className=\"rounded-sm bg-accent px-1.5 py-0.5 text-foreground\">{referenceId}</code>\n <CopyReference value={referenceId} />\n </span>\n )}\n </ErrorStateMeta>\n )}\n {onReport && (\n <Button type=\"button\" variant=\"link\" size=\"sm\" onClick={onReport} className=\"mt-1 text-muted-foreground\">\n {reportLabel}\n </Button>\n )}\n </div>\n </ErrorStateContext.Provider>\n )\n}\n\nexport {\n ErrorState,\n ErrorStateMedia,\n ErrorStateTitle,\n ErrorStateDescription,\n ErrorStateActions,\n ErrorStateMeta,\n}\n"]}
package/dist/index.js CHANGED
@@ -34,7 +34,7 @@ export { MessageBar } from './chunk-5AH2PNYW.js';
34
34
  export { ProgressStage } from './chunk-OM4W6UQG.js';
35
35
  export { ProgressDot, dotVariants, progressDotVariants } from './chunk-E7MMJTJY.js';
36
36
  export { CircularProgress, circularProgressVariants } from './chunk-KNJTTOAD.js';
37
- export { ERROR_STATE_PRESETS, ErrorState, ErrorStateActions, ErrorStateDescription, ErrorStateMedia, ErrorStateMeta, ErrorStateTitle } from './chunk-TJ4O3VAL.js';
37
+ export { ERROR_STATE_PRESETS, ErrorState, ErrorStateActions, ErrorStateDescription, ErrorStateMedia, ErrorStateMeta, ErrorStateTitle } from './chunk-QAABULI4.js';
38
38
  export { StatusBanner, useCountdown } from './chunk-VMUNB4RA.js';
39
39
  export { Container, containerVariants } from './chunk-JRQLKRNY.js';
40
40
  export { Stack } from './chunk-ICNOGTXR.js';
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- export { ERROR_STATE_PRESETS, ErrorState, ErrorStateActions, ErrorStateDescription, ErrorStateMedia, ErrorStateMeta, ErrorStateTitle } from '../chunk-TJ4O3VAL.js';
2
+ export { ERROR_STATE_PRESETS, ErrorState, ErrorStateActions, ErrorStateDescription, ErrorStateMedia, ErrorStateMeta, ErrorStateTitle } from '../chunk-QAABULI4.js';
3
3
  import '../chunk-KLX547KZ.js';
4
4
  import '../chunk-US5LXJTO.js';
5
5
  import '../chunk-W62WANUP.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluencypassdevs/cycle",
3
- "version": "1.30.0",
3
+ "version": "1.30.1",
4
4
  "description": "Cycle Design System — UI component library by Fluencypass (produto)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../core/src/components/ui/error-state.tsx"],"names":["ErrorStateTitle","_a","_b"],"mappings":"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","file":"chunk-TJ4O3VAL.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n Check,\n Copy,\n Lock,\n LogIn,\n RefreshCw,\n SearchX,\n ServerCrash,\n TriangleAlert,\n WifiOff,\n type LucideIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"@core/lib/utils\"\nimport { CycleIcon } from \"@core/components/icons\"\nimport { Button } from \"@core/components/ui/button\"\nimport { Badge } from \"@core/components/ui/badge\"\n\n/* ─── Tipos ───────────────────────────────────────────────────── */\n\nexport type ErrorStateKind = \"not-found\" | \"forbidden\" | \"unauthorized\" | \"server\" | \"offline\" | \"generic\"\nexport type ErrorStateSize = \"page\" | \"section\"\nexport type ErrorStateSeverity = \"neutral\" | \"warning\" | \"critical\"\n\nexport interface ErrorStatePreset {\n icon: LucideIcon\n severity: ErrorStateSeverity\n title: string\n description: string\n /** Título alternativo quando size=\"page\" (só o generic usa). */\n pageTitle?: string\n /** Descrição alternativa quando size=\"page\" (só o generic usa). */\n pageDescription?: string\n}\n\n/**\n * Presets por cenário. Copy em português correto — texto que o aluno lê.\n * Regra: o default só afirma o que o componente garante sozinho. Reportar, reconectar,\n * salvar dados são do app — quem faz isso sobrescreve title/description.\n * Severidade: vermelho só em falha real do sistema.\n */\nexport const ERROR_STATE_PRESETS: Record<ErrorStateKind, ErrorStatePreset> = {\n \"not-found\": {\n icon: SearchX,\n severity: \"neutral\",\n title: \"Página não encontrada\",\n description:\n \"O link pode estar quebrado ou a página pode ter sido movida. Confira o endereço ou vá para o início.\",\n },\n forbidden: {\n icon: Lock,\n severity: \"neutral\",\n title: \"Você não tem acesso a esta página\",\n description: \"Esta área é restrita. Se você precisa dela, peça acesso a quem administra sua conta.\",\n },\n unauthorized: {\n icon: LogIn,\n severity: \"neutral\",\n title: \"Sua sessão expirou\",\n description: \"Entre novamente para continuar de onde parou.\",\n },\n server: {\n icon: ServerCrash,\n severity: \"critical\",\n title: \"Algo deu errado do nosso lado\",\n description: \"Tente novamente em alguns instantes. Se continuar, fale com o suporte.\",\n },\n offline: {\n icon: WifiOff,\n severity: \"warning\",\n title: \"Você está sem conexão\",\n description:\n \"Confira o Wi-Fi ou os dados móveis e tente novamente quando a conexão voltar.\",\n },\n generic: {\n icon: TriangleAlert,\n severity: \"critical\",\n title: \"Este conteúdo não carregou\",\n description: \"Tente novamente. O resto da página continua funcionando.\",\n pageTitle: \"Esta página não carregou\",\n pageDescription: \"Tente novamente em alguns instantes.\",\n },\n}\n\n/* ─── Contexto interno (size/severity para os sub-componentes) ── */\n\ninterface ErrorStateContextValue {\n size: ErrorStateSize\n severity: ErrorStateSeverity\n}\n\nconst ErrorStateContext = React.createContext<ErrorStateContextValue>({\n size: \"section\",\n severity: \"neutral\",\n})\n\nfunction useErrorStateContext() {\n return React.useContext(ErrorStateContext)\n}\n\n/* ─── Sub-componentes ─────────────────────────────────────────── */\n\nconst MEDIA_SEVERITY: Record<ErrorStateSeverity, string> = {\n neutral: \"bg-muted text-foreground border border-border\",\n warning: \"theme-warning bg-background text-foreground\",\n critical: \"theme-critical bg-background text-foreground\",\n}\n\nconst MEDIA_SIZE: Record<ErrorStateSize, string> = {\n page: \"size-14 rounded-xl\",\n section: \"size-8 rounded-lg\",\n}\n\nfunction ErrorStateMedia({ className, ...props }: React.ComponentProps<\"div\">) {\n const { size, severity } = useErrorStateContext()\n return (\n <div\n data-slot=\"error-state-media\"\n className={cn(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n MEDIA_SIZE[size],\n MEDIA_SEVERITY[severity],\n className\n )}\n {...props}\n />\n )\n}\n\ntype HeadingTag = \"h1\" | \"h2\" | \"h3\" | \"h4\"\n\ninterface ErrorStateTitleProps extends React.ComponentProps<\"h2\"> {\n /** Nível do heading. Default: 1 em page, 2 em section. */\n level?: 1 | 2 | 3 | 4\n}\n\nconst ErrorStateTitle = React.forwardRef<HTMLHeadingElement, ErrorStateTitleProps>(\n function ErrorStateTitle({ className, level, ...props }, ref) {\n const { size } = useErrorStateContext()\n const Tag = (`h${level ?? (size === \"page\" ? 1 : 2)}`) as HeadingTag\n return (\n <Tag\n ref={ref}\n data-slot=\"error-state-title\"\n // outline-none: foco é programático (focus() no mount de page, p/ leitor de tela\n // anunciar a troca de rota) — não queremos o anel visual de foco aqui.\n className={cn(\n \"text-balance outline-none\",\n size === \"page\" ? \"text-2xl font-semibold tracking-tight\" : \"text-sm font-semibold tracking-tight\",\n className\n )}\n {...props}\n />\n )\n }\n)\n\nfunction ErrorStateDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { size } = useErrorStateContext()\n return (\n <p\n data-slot=\"error-state-description\"\n className={cn(\n \"text-balance text-muted-foreground\",\n size === \"page\" ? \"text-sm max-w-md\" : \"text-xs/relaxed max-w-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ErrorStateActions({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"error-state-actions\"\n className={cn(\"mt-3 flex flex-wrap items-center justify-center gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction ErrorStateMeta({ className, ...props }: React.ComponentProps<\"div\">) {\n const { size } = useErrorStateContext()\n return (\n <div\n data-slot=\"error-state-meta\"\n className={cn(\n \"flex flex-wrap items-center justify-center gap-2 font-mono text-xs/relaxed text-muted-foreground\",\n size === \"page\" ? \"mt-3\" : \"mt-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CopyReference({ value }: { value: string }) {\n const [copied, setCopied] = React.useState(false)\n\n React.useEffect(() => {\n if (!copied) return\n const id = setTimeout(() => setCopied(false), 2000)\n return () => clearTimeout(id)\n }, [copied])\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(value)\n setCopied(true)\n } catch {\n // Sem clipboard (permissão negada): nada a fazer, o id continua visível para cópia manual.\n }\n }\n\n return (\n <Button\n type=\"button\"\n variant=\"link\"\n size=\"xs\"\n onClick={handleCopy}\n aria-label={copied ? \"Copiado\" : \"Copiar referência\"}\n className=\"font-sans\"\n >\n <CycleIcon icon={copied ? Check : Copy} size=\"2xs\" decorative />\n <span aria-live=\"polite\">{copied ? \"Copiado\" : \"Copiar\"}</span>\n </Button>\n )\n}\n\n/* ─── Componente principal ────────────────────────────────────── */\n\nexport interface ErrorStateProps extends Omit<React.ComponentProps<\"div\">, \"title\" | \"role\" | \"aria-live\"> {\n kind?: ErrorStateKind\n size?: ErrorStateSize\n severity?: ErrorStateSeverity\n title?: React.ReactNode\n description?: React.ReactNode\n /** Substitui o ícone default (ex.: ilustração). */\n media?: React.ReactNode\n /** Badge mono opcional (\"404\", \"500\"). */\n code?: string | number\n /** \"Referência xxxx\" com botão copiar, opcional. */\n referenceId?: string\n onRetry?: () => void\n retryLabel?: string\n onReport?: () => void\n reportLabel?: string\n /** Botões do consumidor. Renderizados antes do retry. */\n actions?: React.ReactNode\n /** section: borda tracejada como o Empty. */\n bordered?: boolean\n /** page: foca o título ao montar. Default true. */\n autoFocus?: boolean\n /** Tag do título. Default 1 em page, 2 em section. */\n headingLevel?: 1 | 2 | 3 | 4\n}\n\nfunction ErrorState({\n kind = \"generic\",\n size = \"section\",\n severity: severityProp,\n title,\n description,\n media,\n code,\n referenceId,\n onRetry,\n retryLabel = \"Tentar novamente\",\n onReport,\n reportLabel = \"Relatar problema\",\n actions,\n bordered = false,\n autoFocus = true,\n headingLevel,\n className,\n ...props\n}: ErrorStateProps) {\n const preset = ERROR_STATE_PRESETS[kind]\n const severity = severityProp ?? preset.severity\n const titleRef = React.useRef<HTMLHeadingElement>(null)\n\n React.useEffect(() => {\n if (size === \"page\" && autoFocus) {\n titleRef.current?.focus({ preventScroll: true })\n }\n }, [size, autoFocus])\n\n const resolvedTitle =\n title ?? (size === \"page\" ? preset.pageTitle ?? preset.title : preset.title)\n const resolvedDescription =\n description ??\n (size === \"page\" ? preset.pageDescription ?? preset.description : preset.description)\n\n // Página: sem role (o foco no h1 já anuncia). Seção: alert se crítico, status se não.\n const liveProps =\n size === \"section\"\n ? severity === \"critical\"\n ? { role: \"alert\" as const }\n : { role: \"status\" as const, \"aria-live\": \"polite\" as const }\n : {}\n\n return (\n <ErrorStateContext.Provider value={{ size, severity }}>\n <div\n data-slot=\"error-state\"\n data-kind={kind}\n data-size={size}\n data-severity={severity}\n className={cn(\n \"flex flex-col items-center text-center gap-2\",\n size === \"page\" ? \"flex-1 justify-center px-6 py-16\" : \"p-6\",\n size === \"section\" && bordered && \"rounded-lg border border-dashed border-border\",\n className\n )}\n {...props}\n {...liveProps}\n >\n {media ?? (\n <ErrorStateMedia>\n <CycleIcon icon={preset.icon} size={size === \"page\" ? \"md\" : \"xs\"} decorative />\n </ErrorStateMedia>\n )}\n <ErrorStateTitle ref={titleRef} level={headingLevel} tabIndex={size === \"page\" ? -1 : undefined}>\n {resolvedTitle}\n </ErrorStateTitle>\n {resolvedDescription && <ErrorStateDescription>{resolvedDescription}</ErrorStateDescription>}\n {(actions || onRetry) && (\n <ErrorStateActions>\n {actions}\n {onRetry && (\n <Button type=\"button\" size={size === \"page\" ? \"default\" : \"sm\"} onClick={onRetry}>\n <CycleIcon icon={RefreshCw} size=\"xs\" decorative />\n {retryLabel}\n </Button>\n )}\n </ErrorStateActions>\n )}\n {(code != null || referenceId) && (\n <ErrorStateMeta>\n {code != null && (\n <Badge\n variant=\"outline\"\n size=\"sm\"\n className={cn(\n \"font-mono\",\n severity === \"critical\" && \"theme-critical bg-background text-foreground border-border\"\n )}\n >\n {code}\n </Badge>\n )}\n {referenceId && (\n <span className=\"inline-flex items-center gap-1.5\">\n <span>Referência</span>\n <code className=\"rounded-sm bg-accent px-1.5 py-0.5 text-foreground\">{referenceId}</code>\n <CopyReference value={referenceId} />\n </span>\n )}\n </ErrorStateMeta>\n )}\n {onReport && (\n <Button type=\"button\" variant=\"link\" size=\"sm\" onClick={onReport} className=\"mt-1 text-muted-foreground\">\n {reportLabel}\n </Button>\n )}\n </div>\n </ErrorStateContext.Provider>\n )\n}\n\nexport {\n ErrorState,\n ErrorStateMedia,\n ErrorStateTitle,\n ErrorStateDescription,\n ErrorStateActions,\n ErrorStateMeta,\n}\n"]}