@ishtar-sink/vega 0.0.0-stage → 0.2.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 (104) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +135 -2
  3. package/dist/app-shell/app-shell.constants.d.ts +13 -0
  4. package/dist/app-shell/app-shell.d.ts +6 -0
  5. package/dist/app-shell/app-shell.types.d.ts +20 -0
  6. package/dist/app-shell/bottom-nav.d.ts +3 -0
  7. package/dist/app-shell/bottom-nav.types.d.ts +12 -0
  8. package/dist/app-shell/nav-link.d.ts +11 -0
  9. package/dist/app-shell/nav.types.d.ts +22 -0
  10. package/dist/app-shell/sidebar.d.ts +3 -0
  11. package/dist/app-shell/sidebar.types.d.ts +22 -0
  12. package/dist/app-shell/topbar.d.ts +3 -0
  13. package/dist/app-shell/topbar.types.d.ts +9 -0
  14. package/dist/app-shell/use-focus-trap.d.ts +6 -0
  15. package/dist/app-shell/use-media-query.d.ts +2 -0
  16. package/dist/autocomplete/autocomplete.d.ts +37 -0
  17. package/dist/badge/badge.d.ts +8 -0
  18. package/dist/bottom-sheet/bottom-sheet.constants.d.ts +3 -0
  19. package/dist/bottom-sheet/bottom-sheet.d.ts +3 -0
  20. package/dist/bottom-sheet/bottom-sheet.types.d.ts +26 -0
  21. package/dist/bottom-sheet/use-bottom-sheet.d.ts +14 -0
  22. package/dist/brand-logo/brand-logo.d.ts +9 -0
  23. package/dist/button/button.d.ts +15 -0
  24. package/dist/calendar/calendar.d.ts +28 -0
  25. package/dist/callout/callout.constants.d.ts +4 -0
  26. package/dist/callout/callout.d.ts +3 -0
  27. package/dist/callout/callout.types.d.ts +14 -0
  28. package/dist/card/card.d.ts +9 -0
  29. package/dist/card-link/card-button.d.ts +3 -0
  30. package/dist/card-link/card-link.d.ts +3 -0
  31. package/dist/card-link/card-link.types.d.ts +10 -0
  32. package/dist/checkbox/checkbox.d.ts +6 -0
  33. package/dist/color-field/color-field.d.ts +20 -0
  34. package/dist/color-field/color-picker.d.ts +42 -0
  35. package/dist/color-field/color.d.ts +11 -0
  36. package/dist/confirm-dialog/confirm-dialog.d.ts +15 -0
  37. package/dist/date-field/date-field.d.ts +38 -0
  38. package/dist/date-time-field/date-time-field.d.ts +33 -0
  39. package/dist/dialog/dialog.d.ts +21 -0
  40. package/dist/disclosure/accordion-context.d.ts +5 -0
  41. package/dist/disclosure/accordion.d.ts +3 -0
  42. package/dist/disclosure/disclosure.d.ts +3 -0
  43. package/dist/disclosure/disclosure.types.d.ts +24 -0
  44. package/dist/disclosure/use-disclosure.d.ts +22 -0
  45. package/dist/empty-state/empty-state.d.ts +10 -0
  46. package/dist/error-state/error-state.d.ts +12 -0
  47. package/dist/focus-header/focus-header.constants.d.ts +2 -0
  48. package/dist/focus-header/focus-header.d.ts +3 -0
  49. package/dist/focus-header/focus-header.types.d.ts +24 -0
  50. package/dist/form-layout/form-layout.d.ts +17 -0
  51. package/dist/icon-button/icon-button.d.ts +10 -0
  52. package/dist/icons/icon.d.ts +10 -0
  53. package/dist/icons/icon.types.d.ts +5 -0
  54. package/dist/icons/index.d.ts +4 -0
  55. package/dist/icons/interface-icons.d.ts +144 -0
  56. package/dist/icons/view-icons.d.ts +17 -0
  57. package/dist/index.d.ts +102 -0
  58. package/dist/index.js +3782 -0
  59. package/dist/item-swatch/item-swatch.d.ts +10 -0
  60. package/dist/item-swatch/palette.d.ts +6 -0
  61. package/dist/loading-state/loading-state.d.ts +13 -0
  62. package/dist/menu-button/menu-button.d.ts +26 -0
  63. package/dist/money-field/money-field.d.ts +13 -0
  64. package/dist/money-field/money-mask.d.ts +6 -0
  65. package/dist/page-header/page-header.d.ts +20 -0
  66. package/dist/period-field/period-field.d.ts +47 -0
  67. package/dist/period-field/period.d.ts +31 -0
  68. package/dist/progress-bar/progress-bar.d.ts +14 -0
  69. package/dist/prose/index.d.ts +2 -0
  70. package/dist/prose/prose.constants.d.ts +2 -0
  71. package/dist/prose/prose.d.ts +2 -0
  72. package/dist/prose/prose.types.d.ts +23 -0
  73. package/dist/prose/prose.utils.d.ts +4 -0
  74. package/dist/prose.js +91 -0
  75. package/dist/radio-group/radio-group.constants.d.ts +4 -0
  76. package/dist/radio-group/radio-group.d.ts +2 -0
  77. package/dist/radio-group/radio-group.types.d.ts +41 -0
  78. package/dist/radio-group/radio-option.d.ts +12 -0
  79. package/dist/segmented-field/segmented-field.d.ts +24 -0
  80. package/dist/select-field/select-field.d.ts +24 -0
  81. package/dist/style.css +2 -0
  82. package/dist/switch/switch.d.ts +3 -0
  83. package/dist/switch/switch.types.d.ts +11 -0
  84. package/dist/tabs/tabs.d.ts +19 -0
  85. package/dist/tag-field/tag-field.d.ts +20 -0
  86. package/dist/text-area-field/text-area-field.d.ts +2 -0
  87. package/dist/text-area-field/text-area-field.types.d.ts +17 -0
  88. package/dist/text-area-field/use-auto-resize.d.ts +7 -0
  89. package/dist/text-field/text-field.d.ts +10 -0
  90. package/dist/theme/contrast.d.ts +16 -0
  91. package/dist/theme/index.d.ts +5 -0
  92. package/dist/theme/theme.d.ts +15 -0
  93. package/dist/theme/tokens.d.ts +138 -0
  94. package/dist/time-field/parse-time.d.ts +4 -0
  95. package/dist/time-field/time-field.d.ts +20 -0
  96. package/dist/toast/toast.d.ts +11 -0
  97. package/dist/tokens.css +166 -0
  98. package/dist/toolbar/toolbar.d.ts +16 -0
  99. package/dist/view-switcher/view-switcher.d.ts +19 -0
  100. package/fonts/OFL-Inter.txt +92 -0
  101. package/fonts/OFL-Outfit.txt +93 -0
  102. package/fonts/inter-variable.woff2 +0 -0
  103. package/fonts/outfit-variable.ttf +0 -0
  104. package/package.json +78 -4
@@ -0,0 +1,10 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ import { ItemPalette } from './palette';
3
+ export interface ItemSwatchProps extends ComponentPropsWithRef<'span'> {
4
+ /** Id do item (não vai para o DOM): o mesmo id sempre gera o mesmo par de cores. */
5
+ id: string;
6
+ /** Pares de cor [início, fim] do gradiente; sem ela, usa a paleta padrão do tema. */
7
+ palette?: ItemPalette;
8
+ }
9
+ /** Quadrado em gradiente que identifica um item sem imagem própria; decorativo. */
10
+ export declare function ItemSwatch({ id, palette, className, style, children, ...rest }: ItemSwatchProps): import('react').JSX.Element;
@@ -0,0 +1,6 @@
1
+ /** Pares de cor do gradiente de um item, do início ao fim. */
2
+ export type ItemPalette = ReadonlyArray<readonly [string, string]>;
3
+ /** Paleta padrão: as variáveis --item-palette-N-from/to do tema, sem cor literal; segue o tema e pode ser sobrescrita por CSS. */
4
+ export declare const DEFAULT_ITEM_PALETTE: ItemPalette;
5
+ /** Mesmo id, mesmo par, sem estado guardado; paleta vazia usa a padrão. */
6
+ export declare function pairFor(id: string, palette?: ItemPalette): readonly [string, string];
@@ -0,0 +1,13 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ export interface SkeletonProps extends ComponentPropsWithRef<'div'> {
3
+ /** Quantidade de linhas do esqueleto. */
4
+ rows?: number;
5
+ }
6
+ export declare function Skeleton({ rows, className, style, ...rest }: SkeletonProps): import('react').JSX.Element;
7
+ export interface LoadingStateProps extends ComponentPropsWithRef<'div'> {
8
+ /** Texto lido por leitores de tela enquanto carrega. */
9
+ label?: string;
10
+ /** Quantidade de linhas do esqueleto. */
11
+ rows?: number;
12
+ }
13
+ export declare function LoadingState({ label, rows, className, style, ...rest }: LoadingStateProps): import('react').JSX.Element;
@@ -0,0 +1,26 @@
1
+ import { ComponentPropsWithRef, ReactNode } from 'react';
2
+ export interface MenuItem {
3
+ id: string;
4
+ label: string;
5
+ icon?: ReactNode;
6
+ tone?: 'danger';
7
+ href?: string;
8
+ onSelect?: () => void;
9
+ }
10
+ export interface MenuButtonProps extends Omit<ComponentPropsWithRef<'div'>, 'children'> {
11
+ /** Nome acessível do botão. Sem ele, o botão é nomeado pelo próprio conteúdo visível. */
12
+ label?: string;
13
+ /** Rótulo do menu aberto. Padrão: `label`. */
14
+ menuLabel?: string;
15
+ /** Conteúdo visível do botão. */
16
+ trigger: ReactNode;
17
+ /** Itens do menu, na ordem. */
18
+ items: readonly MenuItem[];
19
+ /** Posição do menu em relação ao botão. Padrão: `bottom-end`. */
20
+ placement?: 'bottom-end' | 'right-end';
21
+ /** Classe extra do menu aberto, para quem precisa de um visual próprio (ex.: menu da conta). */
22
+ menuClassName?: string;
23
+ /** Classe do botão. */
24
+ triggerClassName?: string;
25
+ }
26
+ export declare function MenuButton({ label, menuLabel, trigger, items, placement, className, menuClassName, triggerClassName, style, ref, ...rest }: MenuButtonProps): import('react').JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { TextFieldProps } from '../text-field/text-field';
2
+ export interface MoneyFieldProps extends Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange' | 'type' | 'inputMode'> {
3
+ /** Valor em centavos inteiros; `null` quando vazio. */
4
+ valueCents: number | null;
5
+ /** Recebe os centavos inteiros a cada digitação, ou `null` quando vazio. */
6
+ onChange: (cents: number | null) => void;
7
+ /** Locale dos separadores e do símbolo, no formato BCP 47. Padrão: `pt-BR`. */
8
+ locale?: string;
9
+ /** Moeda ISO 4217. Padrão: `BRL`. */
10
+ currency?: string;
11
+ }
12
+ /** Campo de moeda: mostra o valor formatado ao digitar e entrega sempre centavos inteiros. */
13
+ export declare function MoneyField({ valueCents, onChange, locale, currency, onBlur, className, ...rest }: MoneyFieldProps): import('react').JSX.Element;
@@ -0,0 +1,6 @@
1
+ /** Formata o texto digitado, sem completar os decimais. */
2
+ export declare function maskMoneyInput(text: string, locale: string, currency: string): string;
3
+ /** Centavos inteiros do texto, ou `null` se vazio ou fora do inteiro seguro. */
4
+ export declare function parseMoneyInput(text: string, locale: string, currency: string): number | null;
5
+ /** Valor em centavos formatado com duas casas no locale e na moeda. */
6
+ export declare function formatCents(cents: number, locale: string, currency: string): string;
@@ -0,0 +1,20 @@
1
+ import { ComponentPropsWithRef, ReactNode, Ref } from 'react';
2
+ export interface PageHeaderProps extends Omit<ComponentPropsWithRef<'header'>, 'title'> {
3
+ /** Texto do título (`h1`). */
4
+ title: string;
5
+ /** Texto curto acima do título. */
6
+ eyebrow?: string;
7
+ /** Texto de apoio abaixo do título; some no estado compacto. */
8
+ subtitle?: string;
9
+ /** Ações alinhadas ao fim do cabeçalho. */
10
+ actions?: ReactNode;
11
+ /** "Voltar" acima do eyebrow e do título. */
12
+ back?: ReactNode;
13
+ /** Preso sob a barra superior: mostra o fundo de desfoque. */
14
+ stuck?: boolean;
15
+ /** Título menor e sem subtítulo, depois de rolar a página. */
16
+ compact?: boolean;
17
+ /** Ref do `h1`, para levar o foco ao título ao trocar de página. */
18
+ headingRef?: Ref<HTMLHeadingElement>;
19
+ }
20
+ export declare function PageHeader({ title, eyebrow, subtitle, actions, back, stuck, compact, headingRef, className, ...rest }: PageHeaderProps): import('react').JSX.Element;
@@ -0,0 +1,47 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ import { PeriodPreset, PeriodValue } from './period';
3
+ export interface PeriodFieldLabels {
4
+ /** Nome do popover. */
5
+ title: string;
6
+ /** Título da área do intervalo personalizado e texto do gatilho sem datas. */
7
+ custom: string;
8
+ /** Botão que aplica o intervalo personalizado. */
9
+ apply: string;
10
+ /** Instrução quando nenhum dia foi escolhido. */
11
+ firstDay: string;
12
+ /** Sufixo depois do primeiro dia, pedindo o último. */
13
+ lastDay: string;
14
+ /** Erro ao aplicar sem o primeiro dia. */
15
+ firstDayError: string;
16
+ /** Nome do botão do mês anterior. */
17
+ previous: string;
18
+ /** Nome do botão do próximo mês. */
19
+ next: string;
20
+ /** Sufixo do dia atual no nome acessível. */
21
+ todayMarker: string;
22
+ }
23
+ export interface PeriodFieldProps extends Omit<ComponentPropsWithRef<'button'>, 'onChange' | 'value' | 'defaultValue' | 'children' | 'name' | 'type'> {
24
+ /** Rótulo do campo. */
25
+ label?: string;
26
+ /** `false` deixa o rótulo só para leitores de tela. Padrão: `true`. */
27
+ labelVisible?: boolean;
28
+ /** Período atual: o `id` de um preset ou `custom` com `from` e `to`. */
29
+ value: PeriodValue;
30
+ /** Chamado com o período escolhido. */
31
+ onChange: (value: PeriodValue) => void;
32
+ /** Períodos oferecidos, definidos por quem usa o componente. */
33
+ presets: readonly PeriodPreset[];
34
+ /** Mostra a área de intervalo personalizado. Padrão: `true`. */
35
+ allowCustom?: boolean;
36
+ /** Onde o popover se ancora: alinhado à direita na barra, centrado no formulário. */
37
+ placement: 'toolbar' | 'form';
38
+ /** Dia atual (`YYYY-MM-DD`); padrão: a data do navegador, lida só quando a prop falta. */
39
+ today?: string;
40
+ /** Locale das datas. Padrão: `pt-BR`. */
41
+ locale?: string;
42
+ /** Textos do campo; o que faltar usa o padrão em pt-br, qualquer que seja o `locale`. */
43
+ labels?: Partial<PeriodFieldLabels>;
44
+ /** Com `name`, o campo envia `name`, `<name>From` e `<name>To` em um formulário. */
45
+ name?: string;
46
+ }
47
+ export declare function PeriodField({ label, labelVisible, value, onChange, presets, allowCustom, placement, today: todayProp, locale, labels, name, className, style, ref, ...rest }: PeriodFieldProps): import('react').JSX.Element;
@@ -0,0 +1,31 @@
1
+ /** Intervalo de datas `YYYY-MM-DD`, com as duas pontas incluídas. */
2
+ export interface PeriodRange {
3
+ from: string;
4
+ to: string;
5
+ }
6
+ /**
7
+ * Regra de um período. Um inteiro `n` é uma janela de dias a partir de hoje: positivo vai de
8
+ * hoje até hoje + n, negativo de hoje + n até hoje e zero é só hoje. Uma função recebe o dia
9
+ * atual (`YYYY-MM-DD`) e devolve o intervalo, ou `null` para "sem limite".
10
+ */
11
+ export type PeriodRule = number | ((today: string) => PeriodRange | null);
12
+ /** Período oferecido pelo `PeriodField`, definido por quem usa o componente. */
13
+ export interface PeriodPreset {
14
+ /** Identificador estável; é o `preset` guardado no `PeriodValue`. */
15
+ id: string;
16
+ /** Texto do botão e do gatilho. */
17
+ label: string;
18
+ /** Como o período vira um intervalo a partir de hoje. */
19
+ range: PeriodRule;
20
+ }
21
+ /** Valor do `PeriodField`: o `id` de um `PeriodPreset` ou `custom` com `from` e `to`. */
22
+ export interface PeriodValue {
23
+ preset: string;
24
+ from?: string;
25
+ to?: string;
26
+ }
27
+ /**
28
+ * Intervalo de um período a partir de hoje (`YYYY-MM-DD`). Devolve `null` quando o preset não
29
+ * está em `presets` ou quando a regra não limita o período.
30
+ */
31
+ export declare function resolvePeriod(value: PeriodValue, today: string, presets?: readonly PeriodPreset[]): PeriodRange | null;
@@ -0,0 +1,14 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ export interface ProgressBarProps extends ComponentPropsWithRef<'div'> {
3
+ /** Nome acessível da barra (não é exibido). */
4
+ label: string;
5
+ /** Valor atual, limitado entre 0 e `max`. */
6
+ value: number;
7
+ /** Valor que representa 100%. */
8
+ max?: number;
9
+ /** Texto visível do valor (ex.: "4 de 9"), também usado em `aria-valuetext`. */
10
+ valueText?: string;
11
+ /** Progresso sem valor conhecido: não anuncia valor e anima a barra. */
12
+ indeterminate?: boolean;
13
+ }
14
+ export declare function ProgressBar({ label, value, max, valueText, indeterminate, className, style, ...rest }: ProgressBarProps): import('react').JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { Prose } from './prose';
2
+ export type { ProseProps, ProseComponents, ProsePlugin, ProseSize } from './prose.types';
@@ -0,0 +1,2 @@
1
+ import { Options as Schema } from 'rehype-sanitize';
2
+ export declare const PROSE_SCHEMA: Schema;
@@ -0,0 +1,2 @@
1
+ import { ProseProps } from './prose.types';
2
+ export declare function Prose({ markdown, children, size, components, remarkPlugins, className, ...rest }: ProseProps): import('react').JSX.Element;
@@ -0,0 +1,23 @@
1
+ import { ComponentPropsWithRef, ReactNode } from 'react';
2
+ import { Components, ExtraProps, Options } from 'react-markdown';
3
+ import { default as rehypeSanitize } from 'rehype-sanitize';
4
+ /** Troca a renderização de um elemento do Markdown (ex.: `h2`, `code`). */
5
+ export type ProseComponents = Components;
6
+ /** Plugin remark que acrescenta sintaxe do produto (ex.: matemática). */
7
+ export type ProsePlugin = NonNullable<Options['remarkPlugins']>[number];
8
+ /** Tamanho do texto: `base` (16 px) ou `reading` (18 px). */
9
+ export type ProseSize = 'base' | 'reading';
10
+ export interface ProseProps extends Omit<ComponentPropsWithRef<'div'>, 'children'> {
11
+ /** Markdown a renderizar. Sem ele, o `Prose` só estiliza os `children`. */
12
+ markdown?: string;
13
+ /** Conteúdo já em React, estilizado quando não há `markdown`. */
14
+ children?: ReactNode;
15
+ /** Tamanho do texto. Padrão: `base`. */
16
+ size?: ProseSize;
17
+ /** Componentes que substituem a renderização de elementos do Markdown. */
18
+ components?: ProseComponents;
19
+ /** Plugins remark do produto, aplicados depois do GFM. */
20
+ remarkPlugins?: ProsePlugin[];
21
+ }
22
+ export type HastRoot = Parameters<ReturnType<typeof rehypeSanitize>>[0];
23
+ export type HastElement = NonNullable<ExtraProps['node']>;
@@ -0,0 +1,4 @@
1
+ import { HastRoot } from './prose.types';
2
+ /** Bloqueia esquemas que executam código, mesmo com espaços ou maiúsculas. */
3
+ export declare function proseUrlTransform(url: string): string;
4
+ export declare function rehypeProseLinks(): (tree: HastRoot) => void;
package/dist/prose.js ADDED
@@ -0,0 +1,91 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ import t, { defaultUrlTransform as n } from "react-markdown";
3
+ import r, { defaultSchema as i } from "rehype-sanitize";
4
+ import a from "remark-gfm";
5
+ // src/prose/prose.constants.ts
6
+ var o = {
7
+ tagNames: /* @__PURE__ */ "h1.h2.h3.h4.h5.h6.p.br.hr.ul.ol.li.em.strong.del.code.pre.blockquote.table.thead.tbody.tr.th.td.a.img".split("."),
8
+ attributes: {
9
+ a: ["href", "title"],
10
+ img: [
11
+ "src",
12
+ "alt",
13
+ "title"
14
+ ],
15
+ th: ["align"],
16
+ td: ["align"],
17
+ code: [["className", /^language-./]],
18
+ ol: ["start"]
19
+ },
20
+ protocols: {
21
+ href: [
22
+ "http",
23
+ "https",
24
+ "mailto"
25
+ ],
26
+ src: ["http", "https"]
27
+ },
28
+ clobberPrefix: i.clobberPrefix,
29
+ clobber: i.clobber,
30
+ strip: ["script", "style"]
31
+ }, s = {
32
+ root: "_root_8b2hs_1",
33
+ base: "_base_8b2hs_9",
34
+ reading: "_reading_8b2hs_13",
35
+ tableWrap: "_tableWrap_8b2hs_25"
36
+ }, c = [
37
+ "javascript:",
38
+ "data:",
39
+ "vbscript:"
40
+ ], l = /^https?:\/\//i;
41
+ function u(e) {
42
+ let t = e.trim().toLowerCase();
43
+ return c.some((e) => t.startsWith(e)) ? "" : n(e);
44
+ }
45
+ function d(e) {
46
+ if (e.tagName === "img") {
47
+ e.properties.loading = "lazy";
48
+ return;
49
+ }
50
+ let t = e.properties.href;
51
+ e.tagName === "a" && typeof t == "string" && l.test(t) && (e.properties.rel = ["noopener", "noreferrer"]);
52
+ }
53
+ function f(e) {
54
+ e.type === "element" && d(e), "children" in e && e.children.forEach(f);
55
+ }
56
+ function p() {
57
+ return (e) => {
58
+ f(e);
59
+ };
60
+ }
61
+ // src/prose/prose.tsx
62
+ function m(t) {
63
+ let n = { ...t };
64
+ return delete n.node, /* @__PURE__ */ e("div", {
65
+ className: s.tableWrap,
66
+ children: /* @__PURE__ */ e("table", { ...n })
67
+ });
68
+ }
69
+ function h({ markdown: n, children: i, size: c = "base", components: l, remarkPlugins: d, className: f, ...h }) {
70
+ let g = [
71
+ s.root,
72
+ s[c],
73
+ f
74
+ ].filter(Boolean).join(" ");
75
+ return /* @__PURE__ */ e("div", {
76
+ ...h,
77
+ className: g,
78
+ children: n === void 0 ? i : /* @__PURE__ */ e(t, {
79
+ skipHtml: !0,
80
+ remarkPlugins: [a, ...d ?? []],
81
+ rehypePlugins: [[r, o], p],
82
+ urlTransform: u,
83
+ components: {
84
+ table: m,
85
+ ...l
86
+ },
87
+ children: n
88
+ })
89
+ });
90
+ }
91
+ export { h as Prose };
@@ -0,0 +1,4 @@
1
+ import { CircleCheckIcon } from '../icons/interface-icons';
2
+ import { RadioTone } from './radio-group.types';
3
+ /** Ícone de cada tom, para que o estado não dependa só da cor. */
4
+ export declare const TONE_ICONS: Record<Exclude<RadioTone, 'neutral'>, typeof CircleCheckIcon>;
@@ -0,0 +1,2 @@
1
+ import { RadioGroupProps } from './radio-group.types';
2
+ export declare function RadioGroup({ label, hideLabel, options, value, onChange, name, variant, readOnly, help, error, className, style, ref, 'aria-describedby': describedByProp, ...rest }: RadioGroupProps): import('react').JSX.Element;
@@ -0,0 +1,41 @@
1
+ import { ComponentPropsWithRef, ReactNode } from 'react';
2
+ /** Tom de uma opção; além da cor, `success` e `danger` ganham um ícone. */
3
+ export type RadioTone = 'success' | 'danger' | 'neutral';
4
+ export interface RadioOption {
5
+ /** Valor da opção, entregue ao `onChange`. */
6
+ value: string;
7
+ /** Rótulo da opção. */
8
+ label: ReactNode;
9
+ /** Texto de apoio abaixo do rótulo. */
10
+ description?: ReactNode;
11
+ /** Marcador antes do texto (ex.: a letra da alternativa). */
12
+ marker?: ReactNode;
13
+ /** Desabilita a opção. */
14
+ disabled?: boolean;
15
+ /** Tom da opção, útil para mostrar certo e errado. */
16
+ tone?: RadioTone;
17
+ /** Conteúdo no fim da opção (ex.: um selo). */
18
+ adornment?: ReactNode;
19
+ }
20
+ export interface RadioGroupProps extends Omit<ComponentPropsWithRef<'fieldset'>, 'onChange' | 'children'> {
21
+ /** Rótulo do grupo (a legenda do `<fieldset>`). */
22
+ label: string;
23
+ /** Esconde a legenda só visualmente; o nome acessível continua. */
24
+ hideLabel?: boolean;
25
+ /** Opções do grupo. */
26
+ options: readonly RadioOption[];
27
+ /** Valor da opção escolhida, ou `null` sem escolha. */
28
+ value: string | null;
29
+ /** Chamada com o valor da opção escolhida. */
30
+ onChange: (value: string) => void;
31
+ /** Nome dos rádios; sem ele, um nome gerado agrupa as opções. */
32
+ name?: string;
33
+ /** Aparência: lista simples ou cartões. */
34
+ variant?: 'default' | 'card';
35
+ /** Mantém a escolha atual e impede a mudança, sem esconder as opções. */
36
+ readOnly?: boolean;
37
+ /** Texto de ajuda abaixo do grupo. */
38
+ help?: string;
39
+ /** Mensagem de erro; aparece com `role="alert"` ligada ao grupo. */
40
+ error?: string;
41
+ }
@@ -0,0 +1,12 @@
1
+ import { RadioGroupProps, RadioOption } from './radio-group.types';
2
+ interface RadioOptionItemProps {
3
+ option: RadioOption;
4
+ name: string;
5
+ checked: boolean;
6
+ variant: NonNullable<RadioGroupProps['variant']>;
7
+ readOnly: boolean;
8
+ describedBy?: string;
9
+ onSelect: (value: string) => void;
10
+ }
11
+ export declare function RadioOptionItem({ option, name, checked, variant, readOnly, describedBy, onSelect, }: RadioOptionItemProps): import('react').JSX.Element;
12
+ export {};
@@ -0,0 +1,24 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ export interface SegmentedOption {
3
+ value: string;
4
+ label: string;
5
+ }
6
+ export interface SegmentedFieldProps extends Omit<ComponentPropsWithRef<'fieldset'>, 'onChange' | 'onBlur' | 'children'> {
7
+ /** Rótulo visível do grupo (a legenda do `<fieldset>`). */
8
+ label: string;
9
+ /** Opções exibidas como segmentos. */
10
+ options: readonly SegmentedOption[];
11
+ /** Valor da opção escolhida. */
12
+ value: string;
13
+ /** Chamada com o valor da opção escolhida. */
14
+ onChange: (value: string) => void;
15
+ /** Chamada quando um segmento perde o foco. */
16
+ onBlur?: () => void;
17
+ /** Nome dos rádios; sem ele, um nome gerado agrupa as opções. */
18
+ name?: string;
19
+ /** Mensagem de erro; aparece com `role="alert"` ligada ao grupo. */
20
+ error?: string;
21
+ /** Texto de ajuda abaixo do grupo. */
22
+ help?: string;
23
+ }
24
+ export declare function SegmentedField({ label, options, value, onChange, onBlur, name, error, help, className, style, 'aria-describedby': describedByProp, ...rest }: SegmentedFieldProps): import('react').JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ export interface SelectOption {
3
+ value: string;
4
+ label: string;
5
+ }
6
+ export interface SelectFieldProps extends Omit<ComponentPropsWithRef<'button'>, 'value' | 'onChange' | 'onBlur' | 'children' | 'type'> {
7
+ /** Rótulo visível do campo. */
8
+ label: string;
9
+ /** Texto de ajuda abaixo do campo. */
10
+ help?: string;
11
+ /** Mensagem de erro; aparece com `role="alert"` e marca o campo como inválido. */
12
+ error?: string;
13
+ /** Opções da lista. */
14
+ options: readonly SelectOption[];
15
+ /** Valor da opção escolhida. */
16
+ value: string;
17
+ /** Chamada com o valor da opção escolhida. */
18
+ onChange: (value: string) => void;
19
+ /** Chamada quando o gatilho perde o foco com a lista fechada. */
20
+ onBlur?: () => void;
21
+ /** Texto mostrado quando nenhuma opção corresponde ao valor. */
22
+ placeholder?: string;
23
+ }
24
+ export declare function SelectField({ label, help, error, id, className, style, options, value, onChange, onBlur, placeholder, disabled, name, ref, 'aria-describedby': describedByProp, 'aria-invalid': ariaInvalid, ...rest }: SelectFieldProps): import('react').JSX.Element;
package/dist/style.css ADDED
@@ -0,0 +1,2 @@
1
+ ._root_18cad_1{justify-content:center;align-items:center;gap:calc(var(--space) * 2);min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 4);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);cursor:pointer;transition:background var(--motion-fast) var(--motion-ease-standard), color var(--motion-fast) var(--motion-ease-standard);display:inline-flex}._lg_18cad_21{min-height:calc(var(--space) * 12);padding:calc(var(--space) * 3) calc(var(--space) * 5);font-size:var(--font-size-base)}._block_18cad_27{box-sizing:border-box;width:100%;display:flex}._root_18cad_1:hover:not(:disabled){background:var(--surface-hover)}._root_18cad_1:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 2)}._root_18cad_1:disabled{background:var(--surface-muted);color:var(--text-muted);cursor:not-allowed}._primary_18cad_48{border-color:var(--primary);background:var(--primary);color:var(--primary-on)}._primary_18cad_48:hover:not(:disabled){background:var(--primary-hover)}._primary_18cad_48:disabled,._secondary_18cad_62{border-color:var(--border-strong)}._ghost_18cad_66{box-shadow:none;color:var(--primary);background:0 0;border-color:#0000}._ghost_18cad_66:hover:not(:disabled){background:var(--primary-soft)}._ghost_18cad_66:disabled{background:0 0}._muted_18cad_81{box-shadow:none;color:var(--text-muted);background:0 0;border-color:#0000}._muted_18cad_81:hover:not(:disabled){color:var(--primary);background:0 0}._muted_18cad_81._tinted_18cad_93{color:color-mix(in srgb, var(--button-tint) 60%, transparent)}._muted_18cad_81._tinted_18cad_93:hover:not(:disabled){color:var(--button-tint)}._muted_18cad_81[aria-pressed=true]{color:var(--success)}._muted_18cad_81:disabled{background:0 0}._success_18cad_109{background:var(--success-soft);box-shadow:none;color:var(--success);border-color:#0000}._success_18cad_109:hover:not(:disabled){background:color-mix(in srgb, var(--success) 22%, var(--success-soft))}._success_18cad_109[aria-pressed=true]{background:var(--success);color:var(--surface)}._success_18cad_109[aria-pressed=true]:hover:not(:disabled){background:color-mix(in srgb, var(--success) 85%, var(--text))}._spinner_18cad_130{width:calc(var(--space) * 4);height:calc(var(--space) * 4);border:calc(var(--space) / 2) solid currentColor;border-radius:var(--radius-pill);animation:_button-spin_18cad_1 var(--motion-slow) var(--motion-ease-linear) infinite;border-right-color:#0000;flex:none}@keyframes _button-spin_18cad_1{to{transform:rotate(360deg)}}._root_18cad_1[aria-busy=true]{cursor:progress}._primary_18cad_48[aria-busy=true]{border-color:var(--primary);background:var(--primary);color:var(--primary-on)}._root_kpb9b_1{width:calc(var(--space) * 10);height:calc(var(--space) * 10);border:calc(var(--space) / 4) solid transparent;border-radius:var(--radius-pill);color:var(--text-muted);cursor:pointer;transition:background var(--motion-fast) var(--motion-ease-standard), color var(--motion-fast) var(--motion-ease-standard);background:0 0;place-items:center;padding:0;display:inline-grid}._root_kpb9b_1:hover:not(:disabled){background:var(--primary-soft);color:var(--primary)}._root_kpb9b_1:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 2)}._root_kpb9b_1:disabled{color:var(--text-muted);cursor:not-allowed}._secondary_kpb9b_32{border-color:var(--border-strong);background:var(--surface);box-shadow:var(--shadow-sm)}._ghost_kpb9b_38{border-color:#0000}._icon_kpb9b_42{place-items:center;display:inline-grid}._root_1whtz_1{display:inline-flex;position:relative}._trigger_1whtz_6{align-items:center;gap:calc(var(--space) * 2);min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 4);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);cursor:pointer;display:inline-flex}._trigger_1whtz_6:hover{background:var(--surface-hover)}._trigger_1whtz_6:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 2)}._menu_1whtz_32{z-index:var(--z-popover);min-width:calc(var(--space) * 44);padding:var(--space);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-lg);flex-direction:column;display:flex;position:absolute}._bottom_1whtz_45{top:calc(100% + var(--space));right:0}._alignStart_1whtz_50{left:0;right:auto}._right_1whtz_55{bottom:0;left:calc(100% + var(--space) * 2)}._item_1whtz_60{align-items:center;gap:calc(var(--space) * 3);width:100%;min-height:calc(var(--space) * 10);padding:0 calc(var(--space) * 3);border-radius:var(--radius-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-md);text-align:left;cursor:pointer;background:0 0;border:0;text-decoration:none;display:flex}._item_1whtz_60:hover,._item_1whtz_60:focus-visible{background:var(--surface-hover);outline:none}._item_1whtz_60:focus-visible{box-shadow:inset 0 0 0 calc(var(--space) / 2) var(--primary)}._danger_1whtz_88{color:var(--danger)}._icon_1whtz_92{display:inline-flex}._root_o7yxy_1{gap:var(--space);flex-direction:column;min-width:0;display:flex}._label_o7yxy_8{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted)}._control_o7yxy_17{box-sizing:border-box;width:100%;min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-base);transition:border-color var(--motion-fast) var(--motion-ease-standard)}._control_o7yxy_17:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._control_o7yxy_17[aria-invalid=true]{border-color:var(--danger)}._help_o7yxy_41{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._error_o7yxy_47{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._control_o7yxy_17[type=number]{appearance:textfield}._control_o7yxy_17[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}._control_o7yxy_17[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}._root_17ncm_1{gap:var(--space);flex-direction:column;min-width:0;display:flex}._label_17ncm_8{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted)}._wrap_17ncm_17{position:relative}._control_17ncm_21{box-sizing:border-box;justify-content:space-between;align-items:center;gap:calc(var(--space) * 2);text-align:left;cursor:pointer;width:100%;min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-base);transition:border-color var(--motion-fast) var(--motion-ease-standard);display:flex}._control_17ncm_21:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._control_17ncm_21[aria-invalid=true]{border-color:var(--danger)}._help_17ncm_51{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._error_17ncm_57{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._control_17ncm_21:disabled{background:var(--surface-muted);color:var(--text-muted);cursor:not-allowed}._placeholder_17ncm_72{color:var(--text-muted)}._chevron_17ncm_76{color:var(--text-muted);transition:transform var(--motion-fast) var(--motion-ease-standard);display:inline-flex}._chevronOpen_17ncm_82{transform:rotate(180deg)}._list_17ncm_86{top:calc(100% + var(--space));z-index:var(--z-dropdown);box-sizing:border-box;min-width:100%;max-height:calc(var(--space) * 70);padding:var(--space);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-lg);margin:0;list-style:none;position:absolute;left:0;overflow-y:auto}._list_17ncm_86:focus{outline:none}._above_17ncm_108{top:auto;bottom:calc(100% + var(--space))}._option_17ncm_113{padding:calc(var(--space) * 2) calc(var(--space) * 3);border-radius:var(--radius-sm);color:var(--text);font-size:var(--font-size-base);cursor:pointer}._option_17ncm_113[aria-selected=true]{font-weight:var(--font-weight-semibold);color:var(--primary)}._active_17ncm_126{background:var(--primary-soft)}._root_114y1_1{align-items:center;gap:calc(var(--space) * 2);display:flex}._control_114y1_7{width:calc(var(--space) * 5);height:calc(var(--space) * 5);accent-color:var(--primary);cursor:pointer;margin:0}._control_114y1_7:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 2)}._label_114y1_20{font-family:var(--font-body);font-size:var(--font-size-base);color:var(--text);cursor:pointer}._root_161y9_1{gap:var(--space);border:0;flex-direction:column;min-width:0;margin:0;padding:0;display:flex}._legend_161y9_11{margin-bottom:var(--space);font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted);padding:0}._group_161y9_22{box-sizing:border-box;align-self:flex-start;gap:var(--space);max-width:100%;padding:var(--space);border:calc(var(--space) / 4) solid var(--border);border-radius:var(--radius-md);background:var(--surface-muted);display:inline-flex}._segment_161y9_34{display:inline-flex;position:relative}._input_161y9_39{opacity:0;cursor:pointer;width:100%;height:100%;margin:0;position:absolute;inset:0}._text_161y9_49{min-height:calc(var(--space) * 8);padding:0 calc(var(--space) * 4);border-radius:var(--radius-sm);color:var(--text-muted);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);transition:background var(--motion-fast) var(--motion-ease-standard), color var(--motion-fast) var(--motion-ease-standard);align-items:center;display:inline-flex}._input_161y9_39:checked+._text_161y9_49{background:var(--surface);box-shadow:var(--shadow-sm);color:var(--primary)}._input_161y9_39:focus-visible+._text_161y9_49{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._help_161y9_74{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._error_161y9_80{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._root_1m3wp_2{gap:var(--space);flex-direction:column;min-width:0;display:flex}._label_1m3wp_9{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted)}._wrap_1m3wp_18{position:relative}._control_1m3wp_22{box-sizing:border-box;width:100%;min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 9) calc(var(--space) * 2) calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-base);transition:border-color var(--motion-fast) var(--motion-ease-standard)}._control_1m3wp_22::placeholder{color:var(--text-muted)}._control_1m3wp_22:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._control_1m3wp_22[aria-invalid=true]{border-color:var(--danger)}._control_1m3wp_22:disabled{background:var(--surface-muted);color:var(--text-muted);cursor:not-allowed}._chevron_1m3wp_57{top:50%;right:calc(var(--space) * 3);color:var(--text-muted);pointer-events:none;display:inline-flex;position:absolute;transform:translateY(-50%)}._help_1m3wp_67{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._error_1m3wp_73{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._popup_1m3wp_82{top:calc(100% + var(--space));z-index:var(--z-dropdown);box-sizing:border-box;border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);min-width:100%;box-shadow:var(--shadow-lg);position:absolute;left:0}._above_1m3wp_95{top:auto;bottom:calc(100% + var(--space))}._list_1m3wp_100{max-height:calc(var(--space) * 70);padding:var(--space);margin:0;list-style:none;overflow-y:auto}._empty_1m3wp_108{padding:calc(var(--space) * 2) calc(var(--space) * 3);color:var(--text-muted);font-size:var(--font-size-md);margin:0}._option_1m3wp_115{align-items:center;gap:var(--s2);padding:calc(var(--space) * 2) calc(var(--space) * 3);border-radius:var(--radius-sm);color:var(--text);font-size:var(--font-size-md);cursor:pointer;display:flex}._option_1m3wp_115[aria-selected=true]{font-weight:var(--font-weight-semibold);color:var(--primary)}._active_1m3wp_131{background:var(--primary-soft)}._check_1m3wp_135{color:var(--primary);margin-left:auto;display:inline-flex}._pills_1m3wp_141{gap:var(--s1);margin:var(--s2) 0 0;flex-wrap:wrap;padding:0;list-style:none;display:flex}._pill_1m3wp_141{align-items:center;gap:var(--space);padding:calc(var(--space) / 2) calc(var(--space) * 2) calc(var(--space) / 2) calc(var(--space) * 3);border-radius:var(--radius-pill);background:var(--primary-soft);color:var(--primary);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);display:inline-flex}._remove_1m3wp_163{width:calc(var(--space) * 5);height:calc(var(--space) * 5);border-radius:var(--radius-pill);color:inherit;cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:inline-grid}._remove_1m3wp_163:hover{background:var(--surface-hover)}._remove_1m3wp_163:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._remove_1m3wp_163:disabled{cursor:not-allowed}._root_gtcmb_1{gap:var(--s1);flex-direction:column;min-width:0;display:flex}._label_gtcmb_8{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted)}._control_gtcmb_17{box-sizing:border-box;width:100%;min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-base)}._control_gtcmb_17:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._control_gtcmb_17[aria-invalid=true]{border-color:var(--danger)}._pills_gtcmb_42{gap:var(--s1);margin:var(--s2) 0 0;flex-wrap:wrap;padding:0;list-style:none;display:flex}._pill_gtcmb_42{align-items:center;gap:var(--space);padding:calc(var(--space) / 2) calc(var(--space) * 2) calc(var(--space) / 2) calc(var(--space) * 3);border-radius:var(--radius-pill);background:var(--primary-soft);color:var(--primary);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);display:inline-flex}._remove_gtcmb_64{width:calc(var(--space) * 5);height:calc(var(--space) * 5);border-radius:var(--radius-pill);color:inherit;cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:inline-grid}._remove_gtcmb_64:hover{background:var(--surface-hover)}._remove_gtcmb_64:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._help_gtcmb_86{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._error_gtcmb_92{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._root_5gwtb_1{gap:var(--space);flex-direction:column;min-width:0;display:flex}._label_5gwtb_8{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted)}._trigger_5gwtb_17{align-items:center;gap:calc(var(--space) * 2);box-sizing:border-box;width:100%;min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-md);cursor:pointer;display:flex}._trigger_5gwtb_17:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._trigger_5gwtb_17[aria-invalid=true]{border-color:var(--danger)}._swatch_5gwtb_44{width:calc(var(--space) * 5);height:calc(var(--space) * 5);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-pill)}._hexText_5gwtb_51{font-variant-numeric:tabular-nums}._dialog_5gwtb_55{max-width:calc(100vw - calc(var(--space) * 8));padding:calc(var(--space) * 5);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-lg);color:var(--text)}._dialog_5gwtb_55::backdrop{background:color-mix(in srgb, var(--text) 40%, transparent)}._title_5gwtb_69{margin:0 0 calc(var(--space) * 4);font-family:var(--font-display);font-size:var(--font-size-lg)}._picker_5gwtb_75{gap:calc(var(--space) * 5);flex-wrap:wrap;display:flex}._wheelWrap_5gwtb_81{width:calc(var(--space) * 55);height:calc(var(--space) * 55);max-width:100%;position:relative}._wheel_5gwtb_81{border-radius:var(--radius-pill);cursor:crosshair;touch-action:none;width:100%;height:100%;display:block}._wheel_5gwtb_81:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) * .75)}._marker_5gwtb_102{width:calc(var(--space) * 4);height:calc(var(--space) * 4);border:calc(var(--space) / 2) solid var(--surface);border-radius:var(--radius-pill);box-shadow:var(--shadow-md);pointer-events:none;position:absolute;transform:translate(-50%,-50%)}._controls_5gwtb_113{gap:calc(var(--space) * 3);min-width:calc(var(--space) * 48);flex-direction:column;flex:1;display:flex}._preview_5gwtb_121{height:calc(var(--space) * 10);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md)}._numberLabel_5gwtb_127{gap:var(--space);color:var(--text-muted);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);flex-direction:column;display:flex}._range_5gwtb_136{width:100%;accent-color:var(--primary)}._input_5gwtb_141{box-sizing:border-box;width:100%;min-height:calc(var(--space) * 9);padding:var(--space) calc(var(--space) * 2);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-md);font-variant-numeric:tabular-nums;appearance:textfield}._input_5gwtb_141::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}._input_5gwtb_141::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}._input_5gwtb_141:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._input_5gwtb_141[aria-invalid=true]{border-color:var(--danger)}._group_5gwtb_172{gap:calc(var(--space) * 2);border:0;grid-template-columns:repeat(3,minmax(0,1fr));margin:0;padding:0;display:grid}._group_5gwtb_172 legend{padding:0 0 var(--space);color:var(--text-muted);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);grid-column:1/-1}._buttons_5gwtb_189{justify-content:flex-end;gap:calc(var(--space) * 2);margin-top:calc(var(--space) * 5);display:flex}._help_5gwtb_196{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._error_5gwtb_202{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._root_7069v_1{gap:calc(var(--space) * 2);width:calc(var(--space) * 72);flex-direction:column;max-width:100%;display:flex}._head_7069v_9{justify-content:space-between;align-items:center;display:flex}._title_7069v_15{color:var(--text);font-family:var(--font-display);font-size:var(--font-size-base);font-weight:var(--font-weight-bold)}._title_7069v_15:first-letter{text-transform:uppercase}._grid_7069v_27{gap:calc(var(--space) / 2);grid-template-columns:repeat(7,minmax(0,1fr));display:grid}._dow_7069v_33{padding:var(--space) 0;color:var(--text-muted);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);text-align:center;text-transform:uppercase}._day_7069v_42{aspect-ratio:1;border:calc(var(--space) / 4) solid transparent;border-radius:var(--radius-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-md);font-variant-numeric:tabular-nums;cursor:pointer;transition:background var(--motion-fast) var(--motion-ease-standard);background:0 0;place-items:center;padding:0;display:grid}._day_7069v_42:hover{background:var(--surface-hover)}._day_7069v_42:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._outside_7069v_67{color:color-mix(in srgb, var(--text-muted) 55%, transparent)}._today_7069v_71{border-color:var(--primary)}._inRange_7069v_75{background:var(--primary-soft);border-radius:0}._edge_7069v_80,._edge_7069v_80:hover{background:var(--primary);color:var(--primary-on);opacity:1}._row_7069v_87{display:contents}._root_1fogs_1{gap:var(--space);flex-direction:column;min-width:0;display:flex}._label_1fogs_8{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted)}._hidden_1fogs_17{width:calc(var(--space) / 4);height:calc(var(--space) / 4);clip-path:inset(50%);white-space:nowrap;position:absolute;overflow:hidden}._wrap_1fogs_26{position:relative}._control_1fogs_30{box-sizing:border-box;align-items:center;gap:calc(var(--space) * 2);width:100%;min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-base);text-align:left;cursor:pointer;display:flex}._control_1fogs_30:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._control_1fogs_30[aria-invalid=true]{border-color:var(--danger)}._control_1fogs_30:disabled{background:var(--surface-muted);cursor:not-allowed}._value_1fogs_63{color:var(--text);font-variant-numeric:tabular-nums}._placeholder_1fogs_68{color:var(--text-muted)}._popover_1fogs_72{top:calc(100% + var(--space) * 2);z-index:var(--z-dropdown);gap:calc(var(--space) * 2);padding:calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-lg);flex-direction:column;display:flex;position:absolute;left:0}._actions_1fogs_87{justify-content:space-between;display:flex}._help_1fogs_92{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._error_1fogs_98{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._root_ntomw_1{gap:var(--space);flex-direction:column;min-width:0;display:flex}._label_ntomw_8{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted)}._hidden_ntomw_17{width:calc(var(--space) / 4);height:calc(var(--space) / 4);clip-path:inset(50%);white-space:nowrap;position:absolute;overflow:hidden}._wrap_ntomw_26{position:relative}._icon_ntomw_30{top:50%;left:calc(var(--space) * 3);color:var(--text-muted);pointer-events:none;display:inline-flex;position:absolute;transform:translateY(-50%)}._control_ntomw_40{box-sizing:border-box;width:100%;min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 3) calc(var(--space) * 2) calc(var(--space) * 9);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-base);font-variant-numeric:tabular-nums}._control_ntomw_40:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._control_ntomw_40[aria-invalid=true]{border-color:var(--danger)}._help_ntomw_65{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._error_ntomw_71{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._root_2fjcj_1{border:0;min-width:0;margin:0;padding:0}._legend_2fjcj_8{margin-bottom:var(--space);font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted);padding:0}._row_2fjcj_19{grid-template-columns:minmax(0, 1fr) calc(var(--space) * 28);gap:calc(var(--space) * 2);align-items:start;display:grid}._help_2fjcj_26{margin:var(--space) 0 0;font-size:var(--font-size-sm);color:var(--text-muted)}._root_lfjll_1{gap:var(--space);flex-direction:column;min-width:0;display:flex}._label_lfjll_8{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted)}._srOnly_lfjll_17{width:calc(var(--space) / 4);height:calc(var(--space) / 4);margin:calc(var(--space) / -4);clip-path:inset(50%);white-space:nowrap;border:0;padding:0;position:absolute;overflow:hidden}._wrap_lfjll_29{position:relative}._control_lfjll_33{align-items:center;gap:calc(var(--space) * 2);box-sizing:border-box;min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-md);font-variant-numeric:tabular-nums;cursor:pointer;display:inline-flex}._control_lfjll_33:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._popover_lfjll_56{z-index:var(--z-popover);box-sizing:border-box;gap:calc(var(--space) * 4);padding:calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-lg);display:flex;position:fixed;top:0;left:0;overflow-y:auto}._presets_lfjll_72{gap:var(--space);min-width:calc(var(--space) * 36);flex-direction:column;display:flex}._preset_lfjll_72{color:var(--text);justify-content:flex-start}._preset_lfjll_72[aria-pressed=true]{background:var(--primary-soft);color:var(--primary)}._custom_lfjll_89{gap:calc(var(--space) * 2);flex-direction:column;display:flex}._customTitle_lfjll_95{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted);margin:0}._summary_lfjll_105{color:var(--text-muted);font-size:var(--font-size-sm);font-variant-numeric:tabular-nums;margin:0}._error_lfjll_112{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}@media (width<=560px){._popover_lfjll_56{max-width:calc(100vw - calc(var(--space) * 4));flex-direction:column}}._root_13auc_2{font-variant-numeric:tabular-nums}._root_1v7mn_1{padding:calc(var(--space) * 5);border:calc(var(--space) / 4) solid var(--border);border-radius:var(--radius-lg);background:var(--elevation-1);box-shadow:var(--shadow-md);color:var(--text);font-family:var(--font-body)}._primary_1v7mn_11{border-color:var(--primary);background:var(--primary-soft)}._accent_1v7mn_16{border-color:var(--accent);background:var(--accent-soft)}._success_1v7mn_21{border-color:var(--success);background:var(--success-soft)}._warning_1v7mn_26{border-color:var(--warning);background:var(--warning-soft)}._danger_1v7mn_31{border-color:var(--danger);background:var(--danger-soft)}._info_1v7mn_36{border-color:var(--info);background:var(--info-soft)}._root_rjx3r_1{justify-content:space-between;align-items:flex-end;gap:calc(var(--space) * 4);margin-bottom:calc(var(--space) * 5);transition:margin-bottom var(--motion-fast) var(--motion-ease-standard);flex-wrap:wrap;display:flex}._titleBlock_rjx3r_11{min-width:0}._back_rjx3r_15{margin-bottom:var(--s3)}._stuck_rjx3r_19{position:relative}._compact_rjx3r_23 ._pageHeading_rjx3r_23{font-size:var(--font-size-xl);letter-spacing:calc(var(--space) * -.15)}._compact_rjx3r_23{margin-bottom:calc(var(--space) * 3)}._compact_rjx3r_23 ._back_rjx3r_15{margin-bottom:var(--s1)}._eyebrow_rjx3r_36{color:var(--text-muted);font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) * .35);text-transform:uppercase;margin:0}._pageHeading_rjx3r_23{color:var(--text);font-family:var(--font-display);font-size:var(--font-size-xxxl);font-weight:var(--font-weight-extrabold);letter-spacing:calc(var(--space) * -.3);line-height:var(--line-height-tight);transition:font-size var(--motion-base) var(--motion-ease-standard);margin:0}._pageHeading_rjx3r_23:focus{outline:none}._subtitle_rjx3r_61{margin:var(--space) 0 0;max-width:62ch;color:var(--text-muted);font-family:var(--font-body);font-size:var(--font-size-md)}._actions_rjx3r_69{gap:calc(var(--space) * 2);flex-wrap:wrap;display:flex}@media (width<=720px){._pageHeading_rjx3r_23{font-size:var(--font-size-xxl)}}@media (width<=480px){._actions_rjx3r_69>*{flex:auto}}._root_1akxr_1{align-items:flex-end;gap:calc(var(--space) * 3);margin-bottom:calc(var(--space) * 4);flex-wrap:wrap;display:flex}._search_1akxr_9{flex:1 1 calc(var(--space) * 45);min-width:0}._filters_1akxr_14{align-items:flex-end;gap:calc(var(--space) * 3);flex-wrap:wrap;display:flex}._trailing_1akxr_21{align-items:flex-end;display:flex}._list_jx4ch_1{gap:var(--space);margin-bottom:calc(var(--space) * 4);border-bottom:calc(var(--space) / 4) solid var(--border);flex-wrap:wrap;display:flex}._tab_jx4ch_9{margin-bottom:calc(var(--space) / -4);padding:calc(var(--space) * 2) calc(var(--space) * 4);border:0;border-bottom:calc(var(--space) / 2) solid transparent;color:var(--text-muted);font-family:var(--font-body);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);cursor:pointer;transition:color var(--motion-fast) var(--motion-ease-standard);background:0 0}._tab_jx4ch_9:hover{color:var(--text)}._tab_jx4ch_9[aria-selected=true]{border-bottom-color:var(--primary);color:var(--primary)}._tab_jx4ch_9:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / -2)}._panel_jx4ch_37{color:var(--text)}._root_1336w_1{border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);flex:none;width:fit-content;display:inline-flex;overflow:hidden}._option_1336w_12{min-width:calc(var(--space) * 11);min-height:calc(var(--space) * 10);padding:calc(var(--space) * 2) calc(var(--space) * 3);color:var(--text-muted);font-family:var(--font-body);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);cursor:pointer;transition:background var(--motion-fast) var(--motion-ease-standard);background:0 0;border:0;place-items:center;display:inline-grid}._option_1336w_12 svg{display:block}._option_1336w_12:hover{background:var(--surface-hover)}._option_1336w_12[aria-pressed=true]{background:var(--primary-soft);color:var(--primary)}._option_1336w_12:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / -2)}._grid_11vah_2{gap:var(--s4);box-sizing:border-box;width:100%;max-width:calc(var(--space) * 220);padding:var(--s5);border:calc(var(--space) / 4) solid var(--border);border-radius:var(--radius-lg);background:var(--elevation-1);box-shadow:var(--shadow-md);grid-template-columns:repeat(2,minmax(0,1fr));margin-inline:auto;display:grid}._grid_11vah_2>[data-span=full]{grid-column:1/-1}._actions_11vah_21{justify-content:flex-end;gap:var(--s2);margin-top:var(--s2);padding-top:var(--s4);border-top:calc(var(--space) / 4) solid var(--border);display:flex}@media (width<=640px){._grid_11vah_2{grid-template-columns:minmax(0,1fr)}}._root_1n0kf_2{max-width:min(calc(var(--space) * 120), calc(100vw - var(--s8)));border:calc(var(--space) / 4) solid var(--border);border-radius:var(--radius-lg);background:var(--elevation-3);box-shadow:var(--shadow-lg);color:var(--text);font-family:var(--font-body);padding:0}._wide_1n0kf_13{max-width:min(calc(var(--space) * 140), calc(100vw - var(--s8)))}._root_1n0kf_2::backdrop{background:color-mix(in srgb, var(--bg) 70%, transparent)}._inner_1n0kf_21{padding:var(--s6)}._title_1n0kf_25{margin:0 0 var(--s2);font-family:var(--font-display);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);letter-spacing:-.02em}._body_1n0kf_33{color:var(--text)}._actions_1n0kf_37{justify-content:flex-end;gap:var(--s2);margin-top:var(--s4);flex-wrap:wrap;display:flex}._description_1ftx2_1{color:var(--text-muted);font-size:var(--font-size-md);line-height:var(--line-height-relaxed);margin:0}._region_1l4ou_1{right:calc(var(--space) * 4);bottom:calc(var(--space) * 4);left:calc(var(--space) * 4);z-index:var(--z-toast);align-items:flex-end;gap:calc(var(--space) * 2);pointer-events:none;flex-direction:column;display:flex;position:fixed}._root_1l4ou_14{max-width:calc(var(--space) * 105);padding:calc(var(--space) * 3) calc(var(--space) * 4);border-radius:var(--radius-md);box-shadow:var(--shadow-md);font-family:var(--font-body);font-size:var(--font-size-md);pointer-events:auto;align-items:flex-start;gap:var(--s2);display:flex}._icon_1l4ou_27{flex:none}._srOnly_1l4ou_31{width:calc(var(--space) / 4);height:calc(var(--space) / 4);margin:calc(var(--space) / -4);clip-path:inset(50%);white-space:nowrap;border:0;padding:0;position:absolute;overflow:hidden}._info_1l4ou_43{background:var(--info-soft);color:var(--info)}._success_1l4ou_48{background:var(--success-soft);color:var(--success)}._warning_1l4ou_53{background:var(--warning-soft);color:var(--warning)}._danger_1l4ou_58{background:var(--danger-soft);color:var(--danger)}._root_13abh_1{padding:calc(var(--space) * 10) calc(var(--space) * 4);border:calc(var(--space) / 4) dashed var(--border-strong);border-radius:var(--radius-lg);color:var(--text-muted);font-family:var(--font-body);text-align:center}._title_13abh_10{margin:0 0 var(--space);color:var(--text);font-family:var(--font-display);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold)}._description_13abh_18{max-width:62ch;font-size:var(--font-size-md);line-height:var(--line-height-relaxed);margin:0 auto}._action_13abh_25{margin-top:calc(var(--space) * 4)}._root_1hr22_1{display:block}._skeleton_1hr22_5{gap:calc(var(--space) * 2);display:grid}._row_1hr22_10{height:calc(var(--space) * 14);border-radius:var(--radius-md);background:var(--surface-hover);display:block}._visuallyHidden_1hr22_17{width:calc(var(--space) / 4);height:calc(var(--space) / 4);margin:calc(var(--space) / -4);clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;padding:0;position:absolute;overflow:hidden}._root_gqjnf_1{padding:calc(var(--space) * 8) calc(var(--space) * 4);border-radius:var(--radius-lg);background:var(--danger-soft);color:var(--danger);font-family:var(--font-body);text-align:center}._title_gqjnf_10{margin:0 0 var(--space);font-family:var(--font-display);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold)}._description_gqjnf_17{max-width:62ch;font-size:var(--font-size-md);line-height:var(--line-height-relaxed);margin:0 auto}._action_gqjnf_24{margin-top:calc(var(--space) * 4)}._root_1rz7h_1{height:calc(var(--space) * 2);border-radius:var(--radius-pill);background:var(--surface-hover);overflow:hidden}._fill_1rz7h_8{border-radius:var(--radius-pill);background:var(--primary);height:100%;transition:width var(--motion-slow) var(--motion-ease-standard);display:block}._labeled_1rz7h_16{gap:var(--space);flex-direction:column;display:flex}._valueText_1rz7h_22{font-size:var(--font-size-sm);color:var(--text-muted);font-variant-numeric:tabular-nums}._indeterminate_1rz7h_28 ._fill_1rz7h_8{width:40%;animation:_progress-indeterminate_1rz7h_1 var(--motion-slow) var(--motion-ease-linear) infinite alternate}@keyframes _progress-indeterminate_1rz7h_1{0%{transform:translate(0)}to{transform:translate(150%)}}@media (prefers-reduced-motion:reduce){._indeterminate_1rz7h_28 ._fill_1rz7h_8{animation:none}}._root_1tkha_1{align-items:center;gap:var(--s2);padding:0 var(--s2);display:flex}._mark_1tkha_8{width:calc(var(--space) * 8.5);height:calc(var(--space) * 8.5);border-radius:var(--radius-sm);background:var(--brand-gradient);box-shadow:var(--shadow-md);color:var(--primary-on);flex:none;place-items:center;display:grid}._name_1tkha_20{font-family:var(--font-display);font-size:var(--font-size-xl);font-weight:var(--font-weight-extrabold);letter-spacing:calc(var(--space) * -.2);background:var(--brand-gradient);color:#0000;-webkit-background-clip:text;background-clip:text}._root_1fzd7_1{padding:calc(var(--space) * .25) var(--s2);border-radius:var(--radius-pill);font-family:var(--font-body);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);white-space:nowrap;display:inline-block}._neutral_1fzd7_11{background:var(--surface-muted);color:var(--text-muted)}._primary_1fzd7_16{background:var(--primary-soft);color:var(--primary)}._accent_1fzd7_21{background:var(--accent-soft);color:var(--accent)}._success_1fzd7_26{background:var(--success-soft);color:var(--success)}._warning_1fzd7_31{background:var(--warning-soft);color:var(--warning)}._danger_1fzd7_36{background:var(--danger-soft);color:var(--danger)}._info_1fzd7_41{background:var(--info-soft);color:var(--info)}._root_1slwb_1{width:calc(var(--space) * 10);height:calc(var(--space) * 10);border-radius:var(--radius-md);color:var(--primary-on);font-family:var(--font-display);font-size:var(--font-size-md);font-weight:var(--font-weight-bold);place-items:center;display:inline-grid}._field_cxlrf_1{align-items:flex-start;gap:calc(var(--space) * 3);display:flex}._root_cxlrf_7{min-height:calc(var(--space) * 11);min-width:calc(var(--space) * 11);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}._track_cxlrf_19{box-sizing:border-box;width:calc(var(--space) * 10);height:calc(var(--space) * 6);padding:calc(var(--space) / 2);background:var(--border-strong);border-radius:var(--radius-pill);align-items:center;display:flex}._thumb_cxlrf_30{width:calc(var(--space) * 5);height:calc(var(--space) * 5);background:var(--surface);border-radius:var(--radius-pill);transition:transform var(--motion-fast) var(--motion-ease-standard)}._root_cxlrf_7[aria-checked=true] ._track_cxlrf_19{background:var(--primary)}._root_cxlrf_7[aria-checked=true] ._thumb_cxlrf_30{transform:translateX(calc(var(--space) * 4))}._root_cxlrf_7:focus-visible{outline:none}._root_cxlrf_7:focus-visible ._track_cxlrf_19{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 2)}._root_cxlrf_7:disabled{cursor:not-allowed}._root_cxlrf_7:disabled ._track_cxlrf_19{opacity:.5}._text_cxlrf_63{padding-top:calc(var(--space) * 3);flex-direction:column;display:flex}._label_cxlrf_69{font-size:var(--font-size-md);cursor:pointer}._help_cxlrf_74{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._root_16dd3_1{gap:var(--space);border:0;flex-direction:column;min-width:0;margin:0;padding:0;display:flex}._legend_16dd3_11{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted);padding:0}._srOnly_16dd3_21{width:calc(var(--space) / 4);height:calc(var(--space) / 4);margin:calc(var(--space) / -4);clip-path:inset(50%);white-space:nowrap;border:0;padding:0;position:absolute;overflow:hidden}._help_16dd3_33{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._error_16dd3_39{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._options_16dd3_48{gap:var(--s2);flex-direction:column;display:flex}._option_16dd3_48{align-items:center;gap:var(--s3);min-height:calc(var(--space) * 11);cursor:pointer;color:var(--text);font-family:var(--font-body);font-size:var(--font-size-base);transition:border-color var(--motion-fast) var(--motion-ease-standard), background var(--motion-fast) var(--motion-ease-standard);display:flex}._input_16dd3_68{accent-color:var(--primary)}._input_16dd3_68:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._input_16dd3_68:disabled{cursor:not-allowed}._option_16dd3_48:has(._input_16dd3_68:disabled){cursor:not-allowed;color:var(--text-muted)}._card_16dd3_86{box-sizing:border-box;width:100%;padding:var(--s3) var(--s4);border:calc(var(--space) / 4) solid var(--border);border-radius:var(--radius-md);background:var(--surface)}._card_16dd3_86 ._input_16dd3_68{width:calc(var(--space) / 4);height:calc(var(--space) / 4);margin:calc(var(--space) / -4);opacity:0;position:absolute}._card_16dd3_86:has(._input_16dd3_68:focus-visible){outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._card_16dd3_86._checked_16dd3_108{border-color:var(--primary);background:var(--primary-soft)}._success_16dd3_113,._danger_16dd3_114{border-width:calc(var(--space) / 2)}._success_16dd3_113{border-color:var(--success);background:var(--success-soft)}._danger_16dd3_114{border-color:var(--danger);background:var(--danger-soft)}._neutral_16dd3_128{background:var(--surface-muted)}._success_16dd3_113 ._toneIcon_16dd3_132{color:var(--success)}._danger_16dd3_114 ._toneIcon_16dd3_132{color:var(--danger)}._marker_16dd3_140{width:calc(var(--space) * 7);height:calc(var(--space) * 7);border-radius:var(--radius-sm);background:var(--surface-muted);font-weight:var(--font-weight-bold);flex:none;justify-content:center;align-items:center;display:inline-flex}._text_16dd3_152{flex-direction:column;flex:1;min-width:0;display:flex}._description_16dd3_159{font-size:var(--font-size-sm);color:var(--text-muted)}._check_16dd3_108{color:var(--primary);margin-left:auto}@media (prefers-reduced-motion:reduce){._option_16dd3_48{transition:none}}._root_qc9fc_1{gap:var(--space);flex-direction:column;min-width:0;display:flex}._label_qc9fc_8{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:calc(var(--space) / 4);text-transform:uppercase;color:var(--text-muted)}._control_qc9fc_17{box-sizing:border-box;width:100%;padding:calc(var(--space) * 2) calc(var(--space) * 3);border:calc(var(--space) / 4) solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-base);line-height:var(--line-height-relaxed);resize:vertical;transition:border-color var(--motion-fast) var(--motion-ease-standard);overflow-y:auto}._control_qc9fc_17:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 4)}._control_qc9fc_17[aria-invalid=true]{border-color:var(--danger)}._help_qc9fc_43{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}._counter_qc9fc_49{font-size:var(--font-size-sm);color:var(--text-muted);text-align:end;font-variant-numeric:tabular-nums;margin:0}._error_qc9fc_57{padding:var(--space) calc(var(--space) * 2);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--font-size-sm);margin:0}._root_1bltb_1{border:calc(var(--space) / 4) solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-family:var(--font-body);interpolate-size:allow-keywords}._summary_1bltb_10{align-items:center;gap:var(--s2);min-height:calc(var(--space) * 11);padding:0 var(--s4);cursor:pointer;list-style:none;display:flex}._summary_1bltb_10::-webkit-details-marker{display:none}._summary_1bltb_10:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 2)}._icon_1bltb_29{display:inline-flex}._chevron_1bltb_33{transition:transform var(--motion-fast) var(--motion-ease-standard);margin-left:auto}._root_1bltb_1[open] ._chevron_1bltb_33{transform:rotate(180deg)}._content_1bltb_42{padding:0 var(--s4) var(--s4)}._root_1bltb_1::details-content{height:0;transition:height var(--motion-base) var(--motion-ease-standard), content-visibility var(--motion-base) allow-discrete;overflow:clip}._root_1bltb_1[open]::details-content{height:auto}._accent_1bltb_58{background:var(--accent-soft)}._accent_1bltb_58 ._summary_1bltb_10{color:var(--accent)}._warning_1bltb_66{background:var(--warning-soft)}._warning_1bltb_66 ._summary_1bltb_10{color:var(--warning)}._info_1bltb_74{background:var(--info-soft)}._info_1bltb_74 ._summary_1bltb_10{color:var(--info)}@media (prefers-reduced-motion:reduce){._chevron_1bltb_33{transition:none}._root_1bltb_1::details-content{transition:none}}._root_l7jw3_1{align-items:flex-start;gap:var(--s3);padding:var(--s4);border:calc(var(--space) / 4) solid transparent;border-radius:var(--radius-md);color:var(--text);font-family:var(--font-body);line-height:var(--line-height-relaxed);flex-wrap:wrap;display:flex}._icon_l7jw3_14{margin-top:calc(var(--space) / 2);flex:none}._body_l7jw3_19{flex:1;min-width:0}._title_l7jw3_24{margin:0 0 var(--space);font-family:var(--font-display);font-weight:var(--font-weight-semibold)}._action_l7jw3_30{flex-basis:100%}@media (width>=480px){._action_l7jw3_30{flex-basis:auto;margin-left:auto}}._neutral_l7jw3_41{background:var(--surface-muted);border-color:var(--border)}._accent_l7jw3_46{background:var(--accent-soft)}._info_l7jw3_50{background:var(--info-soft)}._success_l7jw3_54{background:var(--success-soft)}._warning_l7jw3_58{background:var(--warning-soft)}._danger_l7jw3_62{background:var(--danger-soft)}._accent_l7jw3_46 ._icon_l7jw3_14,._accent_l7jw3_46 ._title_l7jw3_24{color:var(--accent)}._info_l7jw3_50 ._icon_l7jw3_14,._info_l7jw3_50 ._title_l7jw3_24{color:var(--info)}._success_l7jw3_54 ._icon_l7jw3_14,._success_l7jw3_54 ._title_l7jw3_24{color:var(--success)}._warning_l7jw3_58 ._icon_l7jw3_14,._warning_l7jw3_58 ._title_l7jw3_24{color:var(--warning)}._danger_l7jw3_62 ._icon_l7jw3_14,._danger_l7jw3_62 ._title_l7jw3_24{color:var(--danger)}._root_uyiyv_1{box-sizing:border-box;background:var(--elevation-3);box-shadow:var(--shadow-lg);color:var(--text);font-family:var(--font-body);border:0;flex-direction:column;margin:0;padding:0;display:flex}._root_uyiyv_1::backdrop{background:color-mix(in srgb, var(--bg) 70%, transparent)}._bottom_uyiyv_18,._auto_uyiyv_19{border-radius:var(--radius-lg) var(--radius-lg) 0 0;width:100%;max-width:100%;max-height:85dvh;animation:_sheet-up_uyiyv_1 var(--motion-base) var(--motion-ease-enter);inset:auto 0 0}._side_uyiyv_28{inset:0 0 0 auto;width:min(calc(var(--space) * 105), 100vw);border-radius:var(--radius-lg) 0 0 var(--radius-lg);max-width:100vw;height:100dvh;max-height:100dvh;animation:_sheet-in_uyiyv_1 var(--motion-base) var(--motion-ease-enter);inset-inline-end:0}@media (width>=720px){._auto_uyiyv_19{width:min(calc(var(--space) * 105), 100vw);border-radius:var(--radius-lg) 0 0 var(--radius-lg);max-width:100vw;height:100dvh;max-height:100dvh;animation:_sheet-in_uyiyv_1 var(--motion-base) var(--motion-ease-enter);inset:0 0 0 auto;inset-inline-end:0}._auto_uyiyv_19 ._handle_uyiyv_51{display:none}}@keyframes _sheet-up_uyiyv_1{0%{transform:translateY(100%)}to{transform:none}}@keyframes _sheet-in_uyiyv_1{0%{transform:translate(100%)}to{transform:none}}._handle_uyiyv_51{width:calc(var(--space) * 10);height:var(--space);margin-top:var(--s2);border-radius:var(--radius-pill);background:var(--border-strong);flex:none;align-self:center}._side_uyiyv_28 ._handle_uyiyv_51{display:none}._header_uyiyv_90{align-items:flex-start;gap:var(--s3);padding:var(--s4) var(--s4) var(--s2);flex:none;display:flex}._title_uyiyv_98{font-family:var(--font-display);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);letter-spacing:-.02em;margin:0}._description_uyiyv_106{margin:var(--s1) 0 0;color:var(--text-muted)}._close_uyiyv_111{min-width:calc(var(--space) * 11);min-height:calc(var(--space) * 11);margin-left:auto}._body_uyiyv_117{overscroll-behavior:contain;padding:0 var(--s4) var(--s4);flex:1;overflow-y:auto}._footer_uyiyv_124{padding:var(--s3) var(--s4) max(var(--s4), env(safe-area-inset-bottom));border-top:calc(var(--space) / 4) solid var(--border);flex:none}@media (prefers-reduced-motion:reduce){._root_uyiyv_1{animation:none}}._interactive_10vva_1{box-sizing:border-box;min-height:calc(var(--space) * 11);color:inherit;cursor:pointer;transition:border-color var(--motion-fast) var(--motion-ease-standard), box-shadow var(--motion-fast) var(--motion-ease-standard);text-decoration:none;display:block}._interactive_10vva_1:hover{border-color:var(--primary);box-shadow:var(--shadow-lg)}._interactive_10vva_1:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 2)}._interactive_10vva_1:active{box-shadow:var(--shadow-sm)}._button_10vva_27{width:100%;font:inherit;text-align:start}._root_yx1lb_1{gap:calc(var(--space) * 2);padding:calc(var(--space) * 2) 0;flex-direction:column;display:flex}._row_yx1lb_8{align-items:center;gap:calc(var(--space) * 2);min-width:0;display:flex}._exit_yx1lb_15{width:calc(var(--space) * 11);height:calc(var(--space) * 11);flex:none}._title_yx1lb_21{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-family:var(--font-display);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);flex:1;margin:0;overflow:hidden}._position_yx1lb_33{font-size:var(--font-size-sm);color:var(--text-muted);font-variant-numeric:tabular-nums;flex:none}._root_1q3n3_1{z-index:calc(var(--z-dropdown) - 1);align-items:center;gap:var(--s3);min-height:calc(var(--space) * 14);padding:var(--s2) var(--s6);border-bottom:calc(var(--space) / 4) solid var(--border);background:var(--bg-elevated);color:var(--text);display:flex;position:sticky;top:0}._start_1q3n3_16,._end_1q3n3_17{align-items:center;gap:var(--s2);flex:none;display:flex}._center_1q3n3_24{flex:1;min-width:0}._end_1q3n3_17{margin-left:auto}@media (width<=719.98px){._root_1q3n3_1{padding:var(--s2) var(--s3)}}._root_g4r00_2{align-self:start;gap:var(--s5);box-sizing:border-box;width:calc(var(--space) * 60);height:100dvh;padding:var(--s5) var(--s3);border-right:calc(var(--space) / 4) solid var(--border);background:var(--bg-elevated);color:var(--text);flex-direction:column;display:flex;position:sticky;top:0}._brand_g4r00_18{padding:0 var(--s3)}._nav_g4r00_22{flex:1;min-height:0;overflow-y:auto}._list_g4r00_28{gap:var(--s1);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._link_g4r00_37{align-items:center;gap:var(--s3);box-sizing:border-box;min-height:calc(var(--space) * 11);padding:0 var(--s3);border-radius:var(--radius-md);color:var(--text-muted);font-family:var(--font-body);font-size:var(--font-size-base);transition:background var(--motion-fast) var(--motion-ease-standard), color var(--motion-fast) var(--motion-ease-standard);text-decoration:none;display:flex}._link_g4r00_37:hover{background:var(--surface-hover);color:var(--text)}._link_g4r00_37:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / -2)}._link_g4r00_37[aria-current=page]{background:var(--primary-soft);color:var(--primary);font-weight:var(--font-weight-semibold)}._icon_g4r00_71{flex:none;place-items:center;display:inline-grid}._badge_g4r00_77{padding:0 var(--s2);border-radius:var(--radius-pill);background:var(--primary-soft);color:var(--primary);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);margin-left:auto}._link_g4r00_37[aria-current=page] ._badge_g4r00_77{background:var(--primary);color:var(--primary-on)}._footer_g4r00_92{padding-top:var(--s3);border-top:calc(var(--space) / 4) solid var(--border)}._drawer_g4r00_98{z-index:var(--z-popover);width:min(calc(var(--space) * 70), 85vw);box-shadow:var(--shadow-lg);visibility:hidden;transition:transform var(--motion-base) var(--motion-ease-standard), visibility var(--motion-base);position:fixed;inset:0 auto 0 0;transform:translate(-100%)}._drawerOpen_g4r00_111{visibility:visible;transform:none}._root_1b9bc_2{z-index:var(--z-dropdown);box-sizing:border-box;min-height:calc(var(--space) * 14);padding-bottom:env(safe-area-inset-bottom);border-top:calc(var(--space) / 4) solid var(--border);background:var(--bg-elevated);color:var(--text);position:fixed;inset:auto 0 0}._list_1b9bc_14{grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;margin:0;padding:0;list-style:none;display:grid}._item_1b9bc_23{display:flex}._link_1b9bc_28{justify-content:center;align-items:center;gap:var(--s1);box-sizing:border-box;min-height:calc(var(--space) * 11);padding:var(--s2) var(--s1);color:var(--text-muted);font-family:var(--font-body);font-size:var(--font-size-xs);text-align:center;transition:color var(--motion-fast) var(--motion-ease-standard);flex-direction:column;flex:1;text-decoration:none;display:flex;position:relative}._link_1b9bc_28:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / -2)}._link_1b9bc_28[aria-current=page]{color:var(--primary);font-weight:var(--font-weight-semibold)}._link_1b9bc_28[aria-current=page]:before{content:"";height:calc(var(--space) * .75);border-radius:0 0 var(--radius-pill) var(--radius-pill);background:var(--primary);position:absolute;top:0;left:25%;right:25%}._icon_1b9bc_69{place-items:center;display:inline-grid}._badge_1b9bc_75{top:var(--s1);left:calc(50% + var(--s2));min-width:var(--s4);padding:0 var(--s1);border-radius:var(--radius-pill);background:var(--primary);color:var(--primary-on);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);line-height:var(--line-height-relaxed);position:absolute}@media (width>=721px){._root_1b9bc_2{display:none}}._root_1lvgn_2{background:var(--bg);min-height:100dvh;color:var(--text);grid-template-columns:auto minmax(0,1fr);display:grid}._skipLink_1lvgn_11{top:var(--s2);left:var(--s2);z-index:var(--z-toast);padding:var(--s2) var(--s4);border-radius:var(--radius-md);background:var(--primary);color:var(--primary-on);font-family:var(--font-body);font-weight:var(--font-weight-semibold);text-decoration:none;position:absolute;transform:translateY(-200%)}._skipLink_1lvgn_11:focus-visible{outline:calc(var(--space) / 2) solid var(--primary-on);outline-offset:calc(var(--space) / -1);transform:none}._column_1lvgn_32{flex-direction:column;grid-column:2;min-width:0;min-height:0;display:flex}._main_1lvgn_40{flex:1;min-width:0}._main_1lvgn_40:focus{outline:none}._scrim_1lvgn_50{z-index:var(--z-dropdown);background:var(--bg);opacity:.7;position:fixed;inset:0}@media (width<=719.98px){._root_1lvgn_2{grid-template-columns:minmax(0,1fr)}._column_1lvgn_32{grid-column:1}._root_1lvgn_2[data-mobile-nav=bottom] ._main_1lvgn_40{padding-bottom:calc(calc(var(--space) * 14) + env(safe-area-inset-bottom))}}._root_8b2hs_1{font-family:var(--font-body);color:var(--text);line-height:var(--line-height-relaxed);overflow-wrap:anywhere;max-width:68ch}._base_8b2hs_9{font-size:var(--font-size-base)}._reading_8b2hs_13{font-size:var(--font-size-lg)}._root_8b2hs_1>:first-child{margin-top:0}._root_8b2hs_1>:last-child{margin-bottom:0}._root_8b2hs_1 :where(p,ul,ol,blockquote,pre,._tableWrap_8b2hs_25){margin:0 0 var(--s4)}._root_8b2hs_1 :where(h1,h2,h3,h4){margin:var(--s8) 0 var(--s3);font-family:var(--font-display);font-weight:var(--font-weight-bold);line-height:var(--line-height-tight);letter-spacing:calc(var(--space) * -.15)}._root_8b2hs_1 :where(h1){font-size:var(--font-size-xxl)}._root_8b2hs_1 :where(h2){font-size:var(--font-size-xl)}._root_8b2hs_1 :where(h3,h4){font-size:var(--font-size-lg)}._root_8b2hs_1 :where(ul,ol){padding-left:var(--s6)}._root_8b2hs_1 :where(li+li){margin-top:var(--s1)}._root_8b2hs_1 :where(strong){font-weight:var(--font-weight-bold)}._root_8b2hs_1 a{color:var(--primary);text-underline-offset:calc(var(--space) / 2);border-radius:var(--radius-sm);transition:color var(--motion-fast) var(--motion-ease-standard);text-decoration:underline}._root_8b2hs_1 a:hover{color:var(--primary-hover)}._root_8b2hs_1 a:focus-visible{outline:calc(var(--space) / 2) solid var(--primary);outline-offset:calc(var(--space) / 2)}._root_8b2hs_1 :where(code){padding:0 var(--s1);border-radius:var(--radius-sm);background:var(--surface-muted);color:var(--text)}._root_8b2hs_1 :where(pre){padding:var(--s4);border:calc(var(--space) / 4) solid var(--border);border-radius:var(--radius-md);background:var(--surface-muted);overflow-x:auto}._root_8b2hs_1 :where(pre code){background:0 0;padding:0}._root_8b2hs_1 :where(blockquote){padding:var(--s2) var(--s4);border-left:var(--s1) solid var(--primary);border-radius:var(--radius-sm);background:var(--primary-soft);color:var(--text-muted)}._root_8b2hs_1 :where(hr){margin:var(--s8) 0;border:0;border-top:calc(var(--space) / 4) solid var(--border)}._tableWrap_8b2hs_25{max-width:100%;overflow-x:auto}._root_8b2hs_1 :where(table){border-collapse:collapse;min-width:100%}._root_8b2hs_1 :where(th,td){padding:var(--s2) var(--s3);border:calc(var(--space) / 4) solid var(--border);text-align:left;overflow-wrap:normal}._root_8b2hs_1 :where(th){white-space:nowrap;background:var(--surface-muted);font-weight:var(--font-weight-semibold)}._root_8b2hs_1 img{border-radius:var(--radius-md);max-width:100%;height:auto}
2
+ /*$vite$:1*/
@@ -0,0 +1,3 @@
1
+ import { SwitchProps } from './switch.types';
2
+ export type { SwitchProps } from './switch.types';
3
+ export declare function Switch({ label, help, checked, onCheckedChange, id, className, style, disabled, onClick, 'aria-describedby': describedByProp, ...rest }: SwitchProps): import('react').JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ export interface SwitchProps extends Omit<ComponentPropsWithRef<'button'>, 'onChange' | 'children'> {
3
+ /** Rótulo visível ao lado do switch; também é o nome acessível. */
4
+ label: string;
5
+ /** Texto de ajuda abaixo do rótulo, ligado ao switch por `aria-describedby`. */
6
+ help?: string;
7
+ /** Estado atual: `true` para ligado. */
8
+ checked: boolean;
9
+ /** Chamado com o novo estado quando o usuário alterna o switch. */
10
+ onCheckedChange: (checked: boolean) => void;
11
+ }
@@ -0,0 +1,19 @@
1
+ import { ComponentPropsWithRef, ReactNode } from 'react';
2
+ export interface TabItem {
3
+ id: string;
4
+ label: string;
5
+ panel: ReactNode;
6
+ }
7
+ export interface TabsProps extends Omit<ComponentPropsWithRef<'div'>, 'onChange' | 'defaultValue'> {
8
+ /** Nome acessível da lista de abas. */
9
+ label: string;
10
+ /** Abas e seus painéis. */
11
+ tabs: readonly TabItem[];
12
+ /** Aba ativa (controlado). */
13
+ value?: string;
14
+ /** Aba ativa inicial (não controlado). Padrão: a primeira. */
15
+ defaultValue?: string;
16
+ /** Chamado com o `id` da aba escolhida. */
17
+ onChange?: (id: string) => void;
18
+ }
19
+ export declare function Tabs({ label, tabs, value, defaultValue, onChange, ...rest }: TabsProps): import('react').JSX.Element;