@sbkbs/ui 1.0.5 → 2.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/MIGRATION.md +96 -0
- package/README.md +221 -115
- package/dist/assets/favicon/apple-touch-icon.png +0 -0
- package/dist/assets/favicon/favicon-96x96.png +0 -0
- package/dist/assets/favicon/favicon.ico +0 -0
- package/dist/assets/favicon/favicon.svg +1 -0
- package/dist/assets/favicon/site.webmanifest +21 -0
- package/dist/assets/favicon/web-app-manifest-192x192.png +0 -0
- package/dist/assets/favicon/web-app-manifest-512x512.png +0 -0
- package/dist/base.css +38 -0
- package/dist/components/Accordion/Accordion.d.ts +13 -1
- package/dist/components/Accordion/Accordion.js +100 -52
- package/dist/components/Accordion/Accordion.js.map +1 -1
- package/dist/components/Alert/Alert.d.ts +17 -4
- package/dist/components/Alert/Alert.js +64 -20
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/Avatar/Avatar.d.ts +17 -0
- package/dist/components/Avatar/Avatar.js +66 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Badge/Badge.d.ts +11 -2
- package/dist/components/Badge/Badge.js +42 -30
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +5 -2
- package/dist/components/Breadcrumb/Breadcrumb.js +23 -16
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/Button/Button.d.ts +10 -8
- package/dist/components/Button/Button.js +73 -114
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Card/Card.d.ts +33 -3
- package/dist/components/Card/Card.js +91 -30
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +4 -1
- package/dist/components/Checkbox/Checkbox.js +32 -31
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/Chip/Chip.d.ts +7 -1
- package/dist/components/Chip/Chip.js +19 -9
- package/dist/components/Chip/Chip.js.map +1 -1
- package/dist/components/Combobox/Combobox.d.ts +10 -2
- package/dist/components/Combobox/Combobox.js +146 -133
- package/dist/components/Combobox/Combobox.js.map +1 -1
- package/dist/components/Divider/Divider.d.ts +7 -1
- package/dist/components/Divider/Divider.js +28 -12
- package/dist/components/Divider/Divider.js.map +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +33 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +147 -0
- package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/components/EmptyState/EmptyState.d.ts +7 -1
- package/dist/components/EmptyState/EmptyState.js +28 -19
- package/dist/components/EmptyState/EmptyState.js.map +1 -1
- package/dist/components/Field/Field.d.ts +21 -0
- package/dist/components/Field/Field.js +35 -0
- package/dist/components/Field/Field.js.map +1 -0
- package/dist/components/FileUpload/FileUpload.d.ts +9 -2
- package/dist/components/FileUpload/FileUpload.js +128 -102
- package/dist/components/FileUpload/FileUpload.js.map +1 -1
- package/dist/components/Footer/Footer.d.ts +19 -6
- package/dist/components/Footer/Footer.js +47 -50
- package/dist/components/Footer/Footer.js.map +1 -1
- package/dist/components/GlassPanel/GlassPanel.d.ts +18 -0
- package/dist/components/GlassPanel/GlassPanel.js +39 -0
- package/dist/components/GlassPanel/GlassPanel.js.map +1 -0
- package/dist/components/Header/Header.d.ts +27 -10
- package/dist/components/Header/Header.js +98 -98
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/Highlight/Highlight.d.ts +13 -0
- package/dist/components/Highlight/Highlight.js +18 -0
- package/dist/components/Highlight/Highlight.js.map +1 -0
- package/dist/components/Icon/Icon.d.ts +21 -0
- package/dist/components/Icon/Icon.js +31 -0
- package/dist/components/Icon/Icon.js.map +1 -0
- package/dist/components/IconButton/IconButton.d.ts +12 -0
- package/dist/components/IconButton/IconButton.js +49 -0
- package/dist/components/IconButton/IconButton.js.map +1 -0
- package/dist/components/Input/Input.d.ts +3 -2
- package/dist/components/Input/Input.js +51 -69
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Layout/Layout.d.ts +2 -0
- package/dist/components/Layout/Layout.js +24 -18
- package/dist/components/Layout/Layout.js.map +1 -1
- package/dist/components/Logo/Logo.d.ts +27 -0
- package/dist/components/Logo/Logo.js +107 -0
- package/dist/components/Logo/Logo.js.map +1 -0
- package/dist/components/MiniCard/MiniCard.d.ts +21 -0
- package/dist/components/MiniCard/MiniCard.js +90 -0
- package/dist/components/MiniCard/MiniCard.js.map +1 -0
- package/dist/components/Modal/Modal.d.ts +16 -3
- package/dist/components/Modal/Modal.js +124 -93
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Navigation/Navigation.d.ts +1 -0
- package/dist/components/Navigation/Navigation.js +14 -14
- package/dist/components/Navigation/Navigation.js.map +1 -1
- package/dist/components/NumberInput/NumberInput.d.ts +5 -2
- package/dist/components/NumberInput/NumberInput.js +98 -128
- package/dist/components/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/PageHeader/PageHeader.d.ts +8 -1
- package/dist/components/PageHeader/PageHeader.js +26 -25
- package/dist/components/PageHeader/PageHeader.js.map +1 -1
- package/dist/components/Pagination/Pagination.d.ts +15 -2
- package/dist/components/Pagination/Pagination.js +68 -34
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Paragraph/Paragraph.d.ts +8 -2
- package/dist/components/Paragraph/Paragraph.js +39 -36
- package/dist/components/Paragraph/Paragraph.js.map +1 -1
- package/dist/components/Popover/Popover.d.ts +12 -1
- package/dist/components/Popover/Popover.js +49 -37
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts +18 -0
- package/dist/components/ProgressBar/ProgressBar.js +71 -0
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
- package/dist/components/Radio/Radio.d.ts +2 -1
- package/dist/components/Radio/Radio.js +27 -31
- package/dist/components/Radio/Radio.js.map +1 -1
- package/dist/components/SectionHeader/SectionHeader.d.ts +6 -1
- package/dist/components/SectionHeader/SectionHeader.js +14 -12
- package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
- package/dist/components/Select/Select.d.ts +6 -2
- package/dist/components/Select/Select.js +47 -35
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/SideNav/SideNav.d.ts +55 -0
- package/dist/components/SideNav/SideNav.js +141 -0
- package/dist/components/SideNav/SideNav.js.map +1 -0
- package/dist/components/Skeleton/Skeleton.d.ts +12 -1
- package/dist/components/Skeleton/Skeleton.js +33 -18
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Spinner/Spinner.d.ts +15 -0
- package/dist/components/Spinner/Spinner.js +57 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/Stepper/Stepper.d.ts +1 -1
- package/dist/components/Stepper/Stepper.js +68 -55
- package/dist/components/Stepper/Stepper.js.map +1 -1
- package/dist/components/Subtitle/Subtitle.d.ts +9 -3
- package/dist/components/Subtitle/Subtitle.js +29 -35
- package/dist/components/Subtitle/Subtitle.js.map +1 -1
- package/dist/components/Switch/Switch.d.ts +2 -1
- package/dist/components/Switch/Switch.js +45 -33
- package/dist/components/Switch/Switch.js.map +1 -1
- package/dist/components/Table/Table.d.ts +19 -1
- package/dist/components/Table/Table.js +48 -11
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts +16 -2
- package/dist/components/Tabs/Tabs.js +80 -44
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Tag/Tag.d.ts +8 -1
- package/dist/components/Tag/Tag.js +27 -12
- package/dist/components/Tag/Tag.js.map +1 -1
- package/dist/components/Textarea/Textarea.d.ts +3 -1
- package/dist/components/Textarea/Textarea.js +36 -40
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/Title/Title.d.ts +9 -3
- package/dist/components/Title/Title.js +42 -42
- package/dist/components/Title/Title.js.map +1 -1
- package/dist/components/Toast/Toast.d.ts +39 -11
- package/dist/components/Toast/Toast.js +130 -76
- package/dist/components/Toast/Toast.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +12 -2
- package/dist/components/Tooltip/Tooltip.js +50 -32
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Typography/weight.d.ts +9 -0
- package/dist/components/Typography/weight.js +5 -0
- package/dist/components/Typography/weight.js.map +1 -0
- package/dist/fonts.css +8 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +55 -43
- package/dist/index.js +118 -83
- package/dist/index.js.map +1 -1
- package/dist/reset.css +9 -0
- package/dist/styles.css +1 -0
- package/dist/tailwind.css +153 -0
- package/dist/theme/ThemeProvider.d.ts +21 -3
- package/dist/theme/ThemeProvider.js +57 -18
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/tokens.d.ts +43 -0
- package/dist/theme/tokens.js +39 -0
- package/dist/theme/tokens.js.map +1 -0
- package/dist/theme.css +296 -261
- package/dist/tokens.css +327 -0
- package/dist/utils/cn.d.ts +2 -2
- package/dist/utils/cn.js +19 -4
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/styles.d.ts +37 -0
- package/dist/utils/styles.js +35 -0
- package/dist/utils/styles.js.map +1 -0
- package/package.json +140 -114
- package/dist/components/Accordion/Accordion.stories.d.ts +0 -7
- package/dist/components/Alert/Alert.stories.d.ts +0 -8
- package/dist/components/Badge/Badge.stories.d.ts +0 -8
- package/dist/components/Breadcrumb/Breadcrumb.stories.d.ts +0 -8
- package/dist/components/Button/Button.stories.d.ts +0 -7
- package/dist/components/Card/Card.stories.d.ts +0 -8
- package/dist/components/Checkbox/Checkbox.stories.d.ts +0 -7
- package/dist/components/Combobox/Combobox.stories.d.ts +0 -9
- package/dist/components/Feedback/Feedback.stories.d.ts +0 -5
- package/dist/components/FileUpload/FileUpload.stories.d.ts +0 -10
- package/dist/components/Input/Input.stories.d.ts +0 -9
- package/dist/components/Modal/Modal.stories.d.ts +0 -8
- package/dist/components/NumberInput/NumberInput.stories.d.ts +0 -8
- package/dist/components/Pagination/Pagination.stories.d.ts +0 -8
- package/dist/components/Radio/Radio.stories.d.ts +0 -7
- package/dist/components/Select/Select.stories.d.ts +0 -8
- package/dist/components/Stepper/Stepper.stories.d.ts +0 -8
- package/dist/components/Switch/Switch.stories.d.ts +0 -8
- package/dist/components/Tabs/Tabs.stories.d.ts +0 -8
- package/dist/components/Textarea/Textarea.stories.d.ts +0 -7
- package/dist/components/Toast/Toast.stories.d.ts +0 -8
- package/dist/oficios-ui.css +0 -1
- package/dist/oficios-ui.umd.cjs +0 -2
- package/dist/oficios-ui.umd.cjs.map +0 -1
package/dist/oficios-ui.umd.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(function(f,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("react/jsx-runtime"),require("react"),require("clsx"),require("tailwind-merge")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react","clsx","tailwind-merge"],e):(f=typeof globalThis<"u"?globalThis:f||self,e(f.OficiosUI={},f.jsxRuntime,f.React,f.clsx,f.twMerge))})(this,(function(f,e,u,G,Q){"use strict";const b=(...r)=>Q.twMerge(G.clsx(r)),Y=({items:r,defaultOpenId:a})=>{const[t,s]=u.useState(a??null),o=u.useRef(null);return e.jsx("div",{className:"grid gap-2",ref:o,children:r.map(n=>{const i=t===n.id,c=`accordion-trigger-${n.id}`,v=`accordion-panel-${n.id}`;return e.jsxs("div",{className:"overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--border-color)]",children:[e.jsxs("button",{"aria-controls":v,"aria-expanded":i,className:"flex w-full items-center justify-between bg-[var(--bg-secondary)] px-4 py-3 text-left text-sm font-medium text-[var(--text-primary)] hover:bg-[var(--bg-hover)]",id:c,onKeyDown:l=>{var x,p,z,h;if(!o.current)return;const d=Array.from(o.current.querySelectorAll('[id^="accordion-trigger-"]')),m=d.findIndex(N=>N.id===c);m===-1||d.length===0||(l.key==="ArrowDown"?(l.preventDefault(),(x=d[(m+1)%d.length])==null||x.focus()):l.key==="ArrowUp"?(l.preventDefault(),(p=d[(m-1+d.length)%d.length])==null||p.focus()):l.key==="Home"?(l.preventDefault(),(z=d[0])==null||z.focus()):l.key==="End"&&(l.preventDefault(),(h=d[d.length-1])==null||h.focus()))},onClick:()=>s(l=>l===n.id?null:n.id),type:"button",children:[n.title,e.jsx("span",{className:b("transition",i?"rotate-180":""),children:"⌄"})]}),i&&e.jsx("div",{"aria-labelledby":c,className:"bg-[var(--bg-tertiary)] px-4 py-3 text-sm text-[var(--text-secondary)]",id:v,role:"region",children:n.content})]},n.id)})})},I=({items:r,separator:a="/",className:t,...s})=>e.jsx("nav",{"aria-label":"Breadcrumb",className:b("flex items-center",t),...s,children:e.jsx("ol",{className:"flex flex-wrap items-center gap-1 text-sm",children:r.map((o,n)=>{const i=n===r.length-1;return e.jsxs("li",{className:"flex items-center gap-1",children:[n>0&&e.jsx("span",{"aria-hidden":"true",className:"select-none text-[var(--text-muted)]",children:a}),i?e.jsx("span",{"aria-current":"page",className:"font-medium text-[var(--text-primary)]",children:o.label}):o.href?e.jsx("a",{className:"text-[var(--md-primary)] transition hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]",href:o.href,children:o.label}):e.jsx("span",{className:"text-[var(--text-secondary)]",children:o.label})]},n)})})});I.displayName="Breadcrumb";const D=({label:r,helperText:a,error:t,options:s,value:o,onChange:n,placeholder:i="Selecione ou pesquise...",disabled:c=!1,className:v})=>{const[l,d]=u.useState(""),[m,x]=u.useState(!1),[p,z]=u.useState(-1),h=u.useRef(null),N=u.useRef(null),y=u.useRef(null),M=s.find(g=>g.value===o),k=l?s.filter(g=>g.label.toLowerCase().includes(l.toLowerCase())):s,w=m?l:(M==null?void 0:M.label)??"";u.useEffect(()=>{const g=C=>{h.current&&!h.current.contains(C.target)&&(x(!1),d(""))};return document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[]);const S=g=>{var C;n==null||n(g.value),d(""),x(!1),(C=N.current)==null||C.blur()},j=g=>{if(!m){(g.key==="ArrowDown"||g.key==="Enter")&&(x(!0),z(0),g.preventDefault());return}g.key==="ArrowDown"?(g.preventDefault(),z(C=>Math.min(C+1,k.length-1))):g.key==="ArrowUp"?(g.preventDefault(),z(C=>Math.max(C-1,0))):g.key==="Enter"?(g.preventDefault(),p>=0&&k[p]&&S(k[p])):g.key==="Escape"&&(x(!1),d(""))},E=`combobox-${Math.random().toString(36).slice(2,9)}`,$=`${E}-list`;return e.jsxs("div",{className:b("flex flex-col gap-[var(--spacing-xs)]",v),ref:h,children:[r&&e.jsx("label",{className:"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]",htmlFor:E,children:r}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{ref:N,"aria-activedescendant":p>=0?`${E}-option-${p}`:void 0,"aria-autocomplete":"list","aria-controls":$,"aria-describedby":t?`${E}-error`:a?`${E}-helper`:void 0,"aria-expanded":m,"aria-invalid":t?!0:void 0,autoComplete:"off",className:b("w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-2 text-[var(--font-size-base)] text-[var(--md-on-surface)] outline-none transition placeholder:text-[var(--md-on-surface-variant)] placeholder:opacity-70 focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60",t&&"border-[var(--md-error)]"),disabled:c,id:E,placeholder:i,role:"combobox",type:"text",value:w,onChange:g=>{d(g.target.value),x(!0),z(0)},onFocus:()=>x(!0),onKeyDown:j}),e.jsx("span",{"aria-hidden":"true",className:b("pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-[var(--text-muted)] transition",m&&"rotate-180"),children:e.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",strokeWidth:"2",viewBox:"0 0 24 24",children:e.jsx("path",{d:"m6 9 6 6 6-6",strokeLinecap:"round",strokeLinejoin:"round"})})}),m&&k.length>0&&e.jsx("ul",{ref:y,className:"absolute z-[var(--z-index-dropdown)] mt-1 max-h-60 w-full overflow-auto rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] py-1 shadow-[var(--shadow-md)]",id:$,role:"listbox",children:k.map((g,C)=>e.jsx("li",{"aria-selected":g.value===o,className:b("cursor-pointer px-3.5 py-2 text-sm transition",C===p?"bg-[var(--md-primary)] text-[var(--md-on-primary)]":g.value===o?"bg-[var(--bg-tertiary)] text-[var(--text-primary)]":"text-[var(--text-primary)] hover:bg-[var(--bg-hover)]"),id:`${E}-option-${C}`,role:"option",onMouseDown:Se=>{Se.preventDefault(),S(g)},onMouseEnter:()=>z(C),children:g.label},g.value))}),m&&k.length===0&&e.jsx("div",{className:"absolute z-[var(--z-index-dropdown)] mt-1 w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-3 text-sm text-[var(--text-muted)] shadow-[var(--shadow-md)]",children:"Nenhum resultado encontrado."})]}),t&&e.jsx("span",{className:"text-[var(--font-size-xs)] text-[var(--md-error)]",id:`${E}-error`,role:"alert",children:t}),a&&!t&&e.jsx("span",{className:"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]",id:`${E}-helper`,children:a})]})};D.displayName="Combobox";const T=({label:r,helperText:a,error:t,accept:s,multiple:o=!1,maxSizeBytes:n,disabled:i=!1,onChange:c,className:v})=>{const l=u.useRef(null),[d,m]=u.useState(!1),[x,p]=u.useState(null),z=w=>{if(!w)return;const S=Array.from(w);if(n){const j=S.find(E=>E.size>n);if(j){const E=(n/1024/1024).toFixed(0);p(`Arquivo "${j.name}" excede o tamanho máximo de ${E} MB.`);return}}p(null),c==null||c(S)},h=w=>{w.preventDefault(),i||m(!0)},N=()=>m(!1),y=w=>{w.preventDefault(),m(!1),i||z(w.dataTransfer.files)},M=w=>{var S;(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),(S=l.current)==null||S.click())},k=t??x;return e.jsxs("div",{className:b("flex flex-col gap-[var(--spacing-xs)]",v),children:[r&&e.jsx("span",{className:"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]",children:r}),e.jsxs("div",{"aria-disabled":i,className:b("flex cursor-pointer flex-col items-center justify-center gap-2 rounded-[var(--border-radius-lg)] border-2 border-dashed p-8 text-center transition",d?"border-[var(--md-primary)] bg-[var(--md-primary-container)]":"border-[var(--md-outline-variant)] hover:border-[var(--md-primary)] hover:bg-[var(--bg-tertiary)]",k&&"border-[var(--md-error)]",i&&"pointer-events-none cursor-not-allowed opacity-60"),onClick:()=>{var w;return!i&&((w=l.current)==null?void 0:w.click())},onDragLeave:N,onDragOver:h,onDrop:y,onKeyDown:M,role:"button",tabIndex:i?-1:0,children:[e.jsx("svg",{className:"h-8 w-8 text-[var(--md-primary)]",fill:"none",stroke:"currentColor",strokeWidth:"1.5",viewBox:"0 0 24 24",children:e.jsx("path",{d:"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5",strokeLinecap:"round",strokeLinejoin:"round"})}),e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:["Arraste arquivos aqui ou"," ",e.jsx("span",{className:"text-[var(--md-primary)] underline",children:"clique para selecionar"})]}),s&&e.jsxs("p",{className:"mt-0.5 text-xs text-[var(--text-muted)]",children:["Formatos aceitos: ",s]}),n&&e.jsxs("p",{className:"text-xs text-[var(--text-muted)]",children:["Tamanho máximo: ",(n/1024/1024).toFixed(0)," MB"]})]})]}),e.jsx("input",{ref:l,accept:s,className:"sr-only",disabled:i,multiple:o,tabIndex:-1,type:"file",onChange:w=>z(w.target.files)}),k&&e.jsx("span",{className:"text-[var(--font-size-xs)] text-[var(--md-error)]",role:"alert",children:k}),a&&!k&&e.jsx("span",{className:"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]",children:a})]})};T.displayName="FileUpload";const A=u.forwardRef(({label:r,error:a,helperText:t,size:s="md",min:o,max:n,step:i=1,onChange:c,className:v,id:l,value:d,defaultValue:m,disabled:x,...p},z)=>{const h=l||`number-input-${Math.random().toString(36).slice(2,9)}`,N=!!a,y={sm:"min-h-8 text-[var(--font-size-sm)]",md:"min-h-10 text-[var(--font-size-base)]",lg:"min-h-12 text-[var(--font-size-lg)]"},M={sm:"h-8 w-7 text-sm",md:"h-10 w-8 text-base",lg:"h-12 w-9 text-lg"},k=d!==void 0?Number(d):void 0,w=()=>{const $=(k??(m!==void 0?Number(m):0))-i;(o===void 0||$>=o)&&(c==null||c($))},S=()=>{const $=(k??(m!==void 0?Number(m):0))+i;(n===void 0||$<=n)&&(c==null||c($))},j=E=>{const $=E.target.value;c==null||c($===""?null:Number($))};return e.jsxs("div",{className:"flex flex-col gap-[var(--spacing-xs)]",children:[r&&e.jsx("label",{className:"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]",htmlFor:h,children:r}),e.jsxs("div",{className:b("inline-flex overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] transition focus-within:border-[var(--border-color-focus)] focus-within:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)]",N&&"border-[var(--md-error)] focus-within:border-[var(--md-error)]",x&&"cursor-not-allowed opacity-60"),children:[e.jsx("button",{"aria-label":"Diminuir",className:b("flex shrink-0 items-center justify-center border-r border-[var(--md-outline-variant)] bg-[var(--bg-tertiary)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--border-color-focus)]",M[s]),disabled:x||o!==void 0&&(k??0)<=o,onClick:w,type:"button",children:"−"}),e.jsx("input",{ref:z,"aria-describedby":a?`${h}-error`:t?`${h}-helper`:void 0,"aria-invalid":N?!0:void 0,className:b("w-full min-w-0 bg-transparent px-3 text-center text-[var(--md-on-surface)] outline-none",y[s],v),defaultValue:m,disabled:x,id:h,max:n,min:o,step:i,type:"number",value:d,onChange:j,...p}),e.jsx("button",{"aria-label":"Aumentar",className:b("flex shrink-0 items-center justify-center border-l border-[var(--md-outline-variant)] bg-[var(--bg-tertiary)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--border-color-focus)]",M[s]),disabled:x||n!==void 0&&(k??0)>=n,onClick:S,type:"button",children:"+"})]}),a&&e.jsx("span",{className:"text-[var(--font-size-xs)] text-[var(--md-error)]",id:`${h}-error`,role:"alert",children:a}),t&&!a&&e.jsx("span",{className:"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]",id:`${h}-helper`,children:t})]})});A.displayName="NumberInput";const F=({items:r,currentStep:a,orientation:t="horizontal",className:s,...o})=>{const n=r.findIndex(v=>v.id===a),i=v=>v<n?"completed":v===n?"active":"pending",c=t==="horizontal";return e.jsx("div",{"aria-label":"Progresso",className:b(c?"flex items-start":"flex flex-col",s),role:"list",...o,children:r.map((v,l)=>{const d=i(l),m=l===r.length-1;return e.jsxs("div",{className:b("flex",c?"flex-1 flex-col items-center":"gap-4"),role:"listitem",children:[e.jsxs("div",{className:b(c?"flex w-full items-center":"flex flex-col items-center"),children:[e.jsx("div",{"aria-current":d==="active"?"step":void 0,className:b("relative z-10 flex h-9 w-9 shrink-0 items-center justify-center rounded-full border-2 text-sm font-semibold transition",d==="completed"&&"border-[var(--md-primary)] bg-[var(--md-primary)] text-[var(--md-on-primary)]",d==="active"&&"border-[var(--md-primary)] bg-[var(--md-surface)] text-[var(--md-primary)]",d==="pending"&&"border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--text-muted)]"),children:d==="completed"?e.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",strokeWidth:"2.5",viewBox:"0 0 24 24",children:e.jsx("path",{d:"M20 6 9 17l-5-5",strokeLinecap:"round",strokeLinejoin:"round"})}):l+1}),!m&&e.jsx("div",{className:b("transition",c?"h-0.5 flex-1":"my-1 ml-[1.0625rem] w-0.5 flex-1",l<n?"bg-[var(--md-primary)]":"bg-[var(--md-outline-variant)]"),"aria-hidden":"true"})]}),e.jsxs("div",{className:b("mt-2 text-center",c?"":"mt-0 pb-6 text-left"),children:[e.jsx("p",{className:b("text-sm font-medium leading-tight",d==="active"&&"text-[var(--md-primary)]",d==="completed"&&"text-[var(--text-primary)]",d==="pending"&&"text-[var(--text-muted)]"),children:v.label}),v.description&&e.jsx("p",{className:"mt-0.5 text-xs text-[var(--text-muted)]",children:v.description})]})]},v.id)})})};F.displayName="Stepper";const J=({variant:r="primary",size:a="md",compact:t=!1,fullWidth:s=!1,isLoading:o=!1,leftIcon:n,rightIcon:i,children:c,className:v="",disabled:l,palette:d,style:m,...x})=>{const p="relative inline-flex select-none items-center justify-center overflow-hidden whitespace-nowrap rounded-[var(--border-radius-md)] border border-transparent font-semibold leading-none tracking-[0.01em] transition-[all_var(--transition-base)]",z="focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--md-primary)]",h="disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60",N=s?"w-full":"",y=d==="off-white"&&r==="primary"?"border-[var(--border-color)]":"",M={xs:t?"min-h-[1.75rem] min-w-[1.75rem] gap-1 px-2 py-1 text-[var(--font-size-xs)]":"min-h-8 min-w-8 gap-1.5 px-3 py-1.5 text-[var(--font-size-xs)]",sm:t?"min-h-8 min-w-8 gap-[0.3125rem] px-2.5 py-1.5 text-[var(--font-size-sm)]":"min-h-9 min-w-9 gap-[0.4375rem] px-3.5 py-2 text-[var(--font-size-sm)]",md:t?"min-h-[2.375rem] min-w-[2.375rem] gap-1.5 px-3 py-2 text-[var(--font-size-base)]":"min-h-11 min-w-11 gap-2 px-4 py-2.5 text-[var(--font-size-base)]",lg:t?"min-h-[2.625rem] min-w-[2.625rem] gap-[0.4375rem] px-3.5 py-[0.5625rem] text-[var(--font-size-lg)]":"min-h-12 min-w-12 gap-[0.5625rem] px-6 py-4 text-[var(--font-size-lg)]",xl:t?"min-h-12 min-w-12 gap-2 px-4 py-3 text-[var(--font-size-xl)]":"min-h-14 min-w-14 gap-2.5 px-8 py-6 text-[var(--font-size-xl)]"},k={primary:"bg-[var(--md-primary)] text-[var(--md-on-primary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--primary-color-hover)] hover:shadow-[var(--shadow-md)]",secondary:"bg-[var(--md-secondary)] text-[var(--md-on-secondary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--secondary-color-light)] hover:shadow-[var(--shadow-md)]",success:"bg-[var(--success-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--success-color-light)] hover:shadow-[var(--shadow-md)]",error:"bg-[var(--md-error)] text-[var(--md-on-error)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--error-color-light)] hover:shadow-[var(--shadow-md)]",warning:"bg-[var(--warning-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--warning-color-light)] hover:shadow-[var(--shadow-md)]",info:"bg-[var(--info-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--info-color-light)] hover:shadow-[var(--shadow-md)]",neutral:"bg-[var(--neutral-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--neutral-color-light)] hover:shadow-[var(--shadow-md)]",ghost:"border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--md-on-surface)] shadow-[var(--shadow-xs)] hover:bg-[var(--bg-hover)] hover:text-[var(--md-primary)] hover:border-[var(--border-color-hover)]"},w={xs:t?"h-3 w-3":"h-3.5 w-3.5",sm:t?"h-3.5 w-3.5":"h-4 w-4",md:"h-[1.125rem] w-[1.125rem]",lg:"h-5 w-5",xl:"h-5 w-5"},S={"verde-vibrante":{primary:"var(--brand-verde-vibrante)",hover:"var(--brand-verde-profundo)"},"verde-profundo":{primary:"var(--brand-verde-profundo)",hover:"var(--brand-grafite-azulado)"},"grafite-azulado":{primary:"var(--brand-grafite-azulado)",hover:"var(--brand-cinza-escuro)"},"azul-acinzentado":{primary:"var(--brand-azul-acinzentado)",hover:"var(--brand-grafite-azulado)"},"cinza-medio":{primary:"var(--brand-cinza-medio)",hover:"var(--brand-cinza-escuro)"},"cinza-escuro":{primary:"var(--brand-cinza-escuro)",hover:"var(--brand-preto)"},"off-white":{primary:"var(--brand-off-white)",hover:"var(--brand-branco)",onPrimary:"var(--brand-grafite-azulado)"}},j={};d&&r==="primary"&&(j["--md-primary"]=S[d].primary,j["--primary-color-hover"]=S[d].hover,S[d].onPrimary&&(j["--md-on-primary"]=S[d].onPrimary));const E=b(p,z,h,M[a],k[r],y,N,v);return e.jsxs("button",{className:E,disabled:l||o,style:{...j,...m},...x,children:[o&&e.jsx("span",{"aria-hidden":"true",className:"absolute inline-flex h-[1em] w-[1em] animate-spin items-center justify-center",children:e.jsxs("svg",{fill:"none",stroke:"currentColor",strokeWidth:"2",viewBox:"0 0 24 24",children:[e.jsx("circle",{cx:"12",cy:"12",r:"10",strokeOpacity:"0.25"}),e.jsx("path",{d:"M12 2 A10 10 0 0 1 22 12",strokeLinecap:"round"})]})}),!o&&n&&e.jsx("span",{className:`mr-1 inline-flex shrink-0 items-center justify-center leading-none ${w[a]}`,children:n}),!o&&e.jsx("span",{className:"btn__content inline-flex items-center justify-center",children:c}),!o&&i&&e.jsx("span",{className:`ml-1 inline-flex shrink-0 items-center justify-center leading-none ${w[a]}`,children:i})]})},X=({title:r,tone:a="info",children:t,className:s,...o})=>{const n={info:"border-[var(--info-color)]/40 bg-[var(--info-color)]/10 text-[var(--text-primary)]",success:"border-[var(--success-color)]/40 bg-[var(--success-color)]/10 text-[var(--text-primary)]",warning:"border-[var(--warning-color)]/40 bg-[var(--warning-color)]/10 text-[var(--text-primary)]",error:"border-[var(--md-error)]/40 bg-[var(--md-error)]/10 text-[var(--text-primary)]"}[a];return e.jsxs("div",{className:b("rounded-[var(--border-radius-md)] border p-4",n,s),role:"alert",...o,children:[r&&e.jsx("p",{className:"mb-1 text-sm font-semibold",children:r}),e.jsx("div",{className:"text-sm leading-relaxed",children:t})]})},Z=({size:r="md",tone:a="neutral",className:t,children:s,...o})=>{const n={neutral:"bg-[var(--bg-tertiary)] text-[var(--text-secondary)]",primary:"bg-[var(--md-primary)] text-[var(--md-on-primary)]",success:"bg-[var(--success-color)] text-white",warning:"bg-[var(--warning-color)] text-white",error:"bg-[var(--md-error)] text-[var(--md-on-error)]",info:"bg-[var(--info-color)] text-white"}[a],i=r==="sm"?"px-2 py-0.5 text-[0.6875rem]":"px-2.5 py-1 text-xs";return e.jsx("span",{className:b("inline-flex items-center rounded-full font-medium leading-none",n,i,t),...o,children:s})},R=({variant:r="default",padding:a="md",hoverable:t=!1,children:s,className:o="",...n})=>{const i="relative overflow-hidden rounded-[var(--border-radius-lg)] transition-[var(--transition-all)]",c={default:"bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-sm)]",elevated:"bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-lg)]",outlined:"bg-transparent border border-[var(--md-outline-variant)] shadow-none",flat:"bg-[var(--md-surface)] border-0 shadow-none"},v={none:"p-0",sm:"p-[var(--spacing-md)]",md:"p-[var(--spacing-lg)]",lg:"p-[var(--spacing-xl)]",xl:"p-[var(--spacing-2xl)]"},l=t?"hover:shadow-[var(--shadow-md)]":"",d=[i,c[r],v[a],l,o].filter(Boolean).join(" ");return e.jsx("div",{className:d,...n,children:s})},B=u.forwardRef(({label:r,helperText:a,className:t,id:s,...o},n)=>{const i=s||`checkbox-${Math.random().toString(36).slice(2,9)}`;return e.jsxs("label",{className:b("inline-flex cursor-pointer items-start gap-2",t),htmlFor:i,children:[e.jsx("input",{ref:n,className:"mt-0.5 h-4 w-4 rounded border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]",id:i,type:"checkbox",...o}),e.jsxs("span",{className:"grid gap-0.5",children:[r&&e.jsx("span",{className:"text-sm text-[var(--text-primary)]",children:r}),a&&e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:a})]})]})});B.displayName="Checkbox";const ee=({selected:r=!1,className:a,children:t,...s})=>e.jsx("button",{className:b("inline-flex items-center rounded-full border px-3 py-1.5 text-sm transition",r?"border-[var(--md-primary)] bg-[color:color-mix(in_srgb,var(--md-primary)_16%,transparent)] text-[var(--md-on-surface)]":"border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]",a),type:"button",...s,children:t}),re=({orientation:r="horizontal",className:a,...t})=>e.jsx("div",{className:b("bg-[var(--border-color)]",r==="horizontal"?"h-px w-full":"h-full w-px",a),role:"separator",...t}),ae=({icon:r,title:a,description:t,action:s,className:o,...n})=>e.jsxs("div",{className:b("grid justify-items-center gap-3 rounded-[var(--border-radius-lg)] border border-dashed border-[var(--border-color)] bg-[var(--bg-secondary)] p-6 text-center",o),...n,children:[r&&e.jsx("div",{className:"text-[var(--text-muted)]",children:r}),e.jsx("h3",{className:"m-0 text-lg font-semibold text-[var(--text-primary)]",children:a}),t&&e.jsx("p",{className:"m-0 max-w-[30rem] text-sm text-[var(--text-secondary)]",children:t}),s&&e.jsx("div",{className:"mt-1",children:s})]}),te=({poweredByText:r="Powered by",logoSrc:a,logoAlt:t="Logo",logoFallbackText:s,className:o=""})=>{const[n,i]=u.useState(!0);return e.jsx("footer",{className:["relative z-[1] flex w-full shrink-0 items-center justify-center border-t border-[var(--border-color)] bg-[var(--bg-secondary)] px-[var(--spacing-2xl)] py-[var(--spacing-lg)]",o].filter(Boolean).join(" "),children:e.jsxs("div",{className:"flex items-center gap-[var(--spacing-md)]",children:[r&&e.jsx("span",{className:"text-[0.95rem] font-normal text-[var(--text-secondary)]",children:r}),(a||s)&&e.jsxs("div",{className:"flex items-center",children:[a&&n&&e.jsx("img",{alt:t,className:"h-6 w-auto object-contain",onError:c=>{i(!1)},src:a,style:{filter:"brightness(0)"}}),s&&e.jsx("span",{className:"flex items-center text-base font-bold tracking-[0.1em] text-[var(--md-primary)]",style:{display:a&&n?"none":"flex",fontFamily:'"Orbitron", sans-serif'},children:s})]})]})})},P=()=>typeof document>"u"?"light":document.documentElement.getAttribute("data-theme")==="dark"?"dark":"light",oe=({logoSrc:r,logoDarkSrc:a,logoAlt:t="Logo",title:s,subtitle:o,theme:n,onLogoClick:i,rightContent:c,className:v=""})=>{const[l,d]=u.useState(!1),[m,x]=u.useState(()=>n??P()),p=m==="dark"&&a?a:r;u.useEffect(()=>{const N=()=>d(window.scrollY>10);return window.addEventListener("scroll",N,{passive:!0}),()=>window.removeEventListener("scroll",N)},[]),u.useEffect(()=>{if(n){x(n);return}const N=()=>x(P());if(N(),typeof MutationObserver>"u")return;const y=new MutationObserver(N);return y.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>y.disconnect()},[n]);const z=()=>i==null?void 0:i(),h=N=>{N.key==="Enter"&&(i==null||i())};return e.jsxs("header",{className:["fixed inset-x-0 top-0 z-[1000] w-full backdrop-blur-[12px]",v].filter(Boolean).join(" "),children:[e.jsx("div",{className:"h-0.5 w-full bg-[var(--md-primary)]"}),e.jsxs("div",{className:"flex items-center justify-between px-6 py-2 shadow-[var(--shadow-sm)] max-md:flex-col max-md:gap-3 max-md:px-4 max-md:py-3",style:{color:"var(--md-on-surface)",background:`color-mix(in srgb, var(--md-surface) ${l?"14%":"18%"}, transparent)`,borderBottom:`1px solid color-mix(in srgb, var(--md-outline-variant) ${l?"22%":"30%"}, transparent)`},children:[e.jsxs("div",{className:"flex cursor-pointer items-center gap-3 transition-opacity duration-200 ease-in-out hover:opacity-80",onClick:i?z:void 0,onKeyDown:i?h:void 0,role:i?"button":void 0,tabIndex:i?0:void 0,children:[p&&e.jsxs("div",{className:"flex h-16 w-16 shrink-0 items-center justify-center",children:[e.jsx("img",{alt:t,className:"h-full w-full object-contain",onError:N=>{N.target.style.display="none";const y=N.target.nextElementSibling;y&&(y.style.display="block")},src:p}),e.jsxs("svg",{className:"hidden h-full w-full",fill:"none",stroke:"currentColor",strokeWidth:"2",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),e.jsx("path",{d:"M2 17l10 5 10-5M2 12l10 5 10-5"})]})]}),(s||o)&&e.jsxs("div",{className:"flex flex-col gap-1",children:[s&&e.jsx("h1",{className:"m-0 inline-flex items-baseline text-[1.375rem] font-bold leading-[1.2] tracking-[0.05em] text-[var(--md-on-surface)] max-md:text-xl",style:{fontFamily:"var(--font-logo)"},children:s}),o&&e.jsx("p",{className:"m-0 text-[0.8125rem] font-normal text-[var(--md-on-surface-variant)] max-md:text-xs",children:o})]})]}),c&&e.jsx("div",{className:"flex shrink-0 items-center gap-3 max-md:w-full max-md:flex-wrap max-md:justify-between",children:c})]})]})},q=u.forwardRef(({label:r,error:a,helperText:t,leftIcon:s,rightIcon:o,fullWidth:n=!1,size:i="md",className:c,id:v,...l},d)=>{const m=v||`input-${Math.random().toString(36).substring(2,9)}`,x=!!a,z=b("w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] font-inherit text-[var(--md-on-surface)] outline-none transition-[var(--transition-all)] placeholder:text-[var(--md-on-surface-variant)] placeholder:opacity-70 hover:not-disabled:not-focus:border-[var(--border-color-hover)] focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:bg-[var(--md-surface-container-high)] disabled:opacity-60",x&&"border-[var(--md-error)] focus:border-[var(--md-error)] focus:[box-shadow:0_0_0_0.1875rem_rgba(186,26,26,0.2)]",{sm:"min-h-8 px-[var(--spacing-md)] py-[var(--spacing-sm)] text-[var(--font-size-sm)]",md:"min-h-10 px-[var(--spacing-lg)] py-[var(--spacing-md)] text-[var(--font-size-base)]",lg:"min-h-12 px-[var(--spacing-xl)] py-[var(--spacing-lg)] text-[var(--font-size-lg)]"}[i],s&&"pl-10",o&&"pr-10",c);return e.jsxs("div",{className:b("flex flex-col gap-[var(--spacing-xs)]",n&&"w-full"),children:[r&&e.jsx("label",{className:"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]",htmlFor:m,children:r}),e.jsxs("div",{className:"group relative flex w-full items-center",children:[s&&e.jsx("span",{className:"pointer-events-none absolute left-[var(--spacing-md)] z-[1] flex items-center justify-center text-[var(--md-on-surface-variant)] group-focus-within:text-[var(--md-primary)] [&_svg]:h-[1.125rem] [&_svg]:w-[1.125rem]",children:s}),e.jsx("input",{ref:d,"aria-describedby":a?`${m}-error`:t?`${m}-helper`:void 0,"aria-invalid":x?!0:void 0,className:z,id:m,...l}),o&&e.jsx("span",{className:"pointer-events-none absolute right-[var(--spacing-md)] z-[1] flex items-center justify-center text-[var(--md-on-surface-variant)] group-focus-within:text-[var(--md-primary)] [&_svg]:h-[1.125rem] [&_svg]:w-[1.125rem]",children:o})]}),a&&e.jsx("span",{className:"mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-error)]",id:`${m}-error`,role:"alert",children:a}),t&&!a&&e.jsx("span",{className:"mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]",id:`${m}-helper`,children:t})]})});q.displayName="Input";const se=({size:r="lg",className:a,...t})=>{const s={sm:"max-w-2xl",md:"max-w-4xl",lg:"max-w-6xl",xl:"max-w-7xl",full:"max-w-none"}[r];return e.jsx("div",{className:b("mx-auto w-full px-4",s,a),...t})},ne=({gap:r="md",className:a,...t})=>{const s={xs:"gap-1",sm:"gap-2",md:"gap-3",lg:"gap-4",xl:"gap-6"}[r];return e.jsx("div",{className:b("flex flex-col",s,a),...t})},le=({cols:r=2,gap:a="md",className:t,...s})=>{const o={1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4"}[r],n={xs:"gap-1",sm:"gap-2",md:"gap-3",lg:"gap-4",xl:"gap-6"}[a];return e.jsx("div",{className:b("grid",o,n,t),...s})},ie=({isOpen:r,onClose:a,title:t,subtitle:s,children:o,size:n="md",showCloseButton:i=!0,closeOnOverlayClick:c=!0,className:v=""})=>{const l=u.useRef(null),d=u.useRef(null);if(u.useEffect(()=>(r?(d.current=document.activeElement,document.body.style.overflow="hidden"):document.body.style.overflow="",()=>{document.body.style.overflow="",d.current&&d.current.focus()}),[r]),u.useEffect(()=>{const h=y=>{y.key==="Escape"&&r&&a()},N=y=>{if(y.key!=="Tab"||!l.current||!r)return;const M=l.current.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(M.length===0){y.preventDefault();return}const k=M[0],w=M[M.length-1],S=document.activeElement;y.shiftKey&&S===k?(y.preventDefault(),w.focus()):!y.shiftKey&&S===w&&(y.preventDefault(),k.focus())};return r&&(document.addEventListener("keydown",h),document.addEventListener("keydown",N),requestAnimationFrame(()=>{var M;const y=((M=l.current)==null?void 0:M.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'))??l.current;y==null||y.focus()})),()=>{document.removeEventListener("keydown",h),document.removeEventListener("keydown",N)}},[r,a]),!r)return null;const m=h=>{c&&h.target===h.currentTarget&&a()},x=h=>{c&&(h.key==="Enter"||h.key===" ")&&h.target===h.currentTarget&&a()},z=["relative z-[var(--z-index-modal)] m-auto flex w-full max-h-[90vh] max-w-full flex-col overflow-hidden rounded-[var(--border-radius-2xl)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] shadow-[var(--shadow-2xl)]",{sm:"max-w-[25rem]",md:"max-w-[31.25rem]",lg:"max-w-[43.75rem]",xl:"max-w-[56.25rem]",full:"max-h-[90vh] max-w-[90vw]"}[n],v].filter(Boolean).join(" ");return e.jsx("div",{"aria-labelledby":t?"modal-title":void 0,"aria-modal":"true",className:"fixed inset-0 z-[var(--z-index-modal-backdrop)] flex min-h-[100dvh] items-center justify-center overflow-y-auto bg-black/50 p-[var(--spacing-lg)] backdrop-blur-[8px]",onClick:m,onKeyDown:x,role:"dialog",children:e.jsxs("div",{className:z,ref:l,tabIndex:-1,children:[(t||s||i)&&e.jsxs("div",{className:"flex shrink-0 items-start justify-between gap-[var(--spacing-lg)] border-b border-[var(--md-outline-variant)] p-[var(--spacing-2xl)]",children:[(t||s)&&e.jsxs("div",{className:"flex-1",children:[t&&e.jsx("h2",{className:"mb-[var(--spacing-xs)] mt-0 text-[var(--font-size-2xl)] font-[var(--font-weight-semibold)] leading-[var(--line-height-tight)] text-[var(--md-on-surface)]",id:"modal-title",children:t}),s&&e.jsx("p",{className:"m-0 text-[var(--font-size-base)] leading-[var(--line-height-normal)] text-[var(--md-on-surface-variant)]",children:s})]}),i&&e.jsx("button",{"aria-label":"Fechar modal",className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-[var(--border-radius-md)] border-0 bg-[var(--md-surface-container-high)] text-[var(--md-on-surface)] transition-[var(--transition-all)] hover:bg-[color:color-mix(in_srgb,var(--md-error)_15%,var(--md-surface))] hover:text-[var(--md-error)]",onClick:a,type:"button",children:e.jsxs("svg",{fill:"none",className:"h-5 w-5",stroke:"currentColor",strokeWidth:"2",viewBox:"0 0 24 24",children:[e.jsx("line",{x1:"18",x2:"6",y1:"6",y2:"18"}),e.jsx("line",{x1:"6",x2:"18",y1:"6",y2:"18"})]})})]}),e.jsx("div",{className:"flex min-h-0 flex-1 flex-col overflow-x-hidden overflow-y-auto p-[var(--spacing-2xl)]",children:o})]})})},de=({className:r,...a})=>e.jsx("aside",{className:b("h-full rounded-[var(--border-radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4",r),...a}),ce=({className:r,...a})=>e.jsx("header",{className:b("flex min-h-14 items-center justify-between border-b border-[var(--border-color)] bg-[var(--bg-secondary)] px-4",r),...a}),ve=({currentPage:r,totalPages:a,onPageChange:t})=>{if(a<=1)return null;const s=Array.from({length:a},(o,n)=>n+1);return e.jsxs("nav",{"aria-label":"Paginação",className:"flex flex-wrap items-center gap-1",children:[e.jsx("button",{className:"rounded-[var(--border-radius-sm)] border border-[var(--border-color)] px-2 py-1 text-sm disabled:opacity-50",disabled:r===1,onClick:()=>t(Math.max(r-1,1)),type:"button",children:"Anterior"}),s.map(o=>e.jsx("button",{className:b("rounded-[var(--border-radius-sm)] border px-2.5 py-1 text-sm",o===r?"border-[var(--md-primary)] bg-[var(--md-primary)] text-[var(--md-on-primary)]":"border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"),onClick:()=>t(o),type:"button",children:o},o)),e.jsx("button",{className:"rounded-[var(--border-radius-sm)] border border-[var(--border-color)] px-2 py-1 text-sm disabled:opacity-50",disabled:r===a,onClick:()=>t(Math.min(r+1,a)),type:"button",children:"Próxima"})]})},me=({as:r="p",size:a="md",weight:t="normal",align:s="left",muted:o=!1,italic:n=!1,children:i,className:c="",...v})=>{const l=r,d={xs:"text-[var(--font-size-xs)] leading-[var(--line-height-normal)]",sm:"text-[var(--font-size-sm)] leading-[var(--line-height-normal)]",md:"text-[var(--font-size-base)] leading-[var(--line-height-relaxed)]",lg:"text-[var(--font-size-lg)] leading-[var(--line-height-loose)]"},m={light:"font-[var(--font-weight-light)]",normal:"font-[var(--font-weight-normal)]",medium:"font-[var(--font-weight-medium)]"},x={left:"text-left",center:"text-center",right:"text-right",justify:"text-justify"},p=["m-0 text-[var(--text-primary)] transition-[var(--transition-colors)]",d[a],m[t],x[s],n?"italic":"not-italic",o?"text-[var(--text-muted)]":"",c].filter(Boolean).join(" ");return e.jsx(l,{className:p,...v,children:i})},fe=({title:r,subtitle:a,actions:t,className:s,...o})=>e.jsx("header",{className:b("grid gap-3 rounded-[var(--border-radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-5 shadow-[var(--shadow-sm)]",s),...o,children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"grid gap-1",children:[e.jsx("h1",{className:"m-0 text-2xl font-bold text-[var(--text-primary)]",children:r}),a&&e.jsx("p",{className:"m-0 text-sm text-[var(--text-secondary)]",children:a})]}),t&&e.jsx("div",{className:"flex items-center gap-2",children:t})]})}),ue=({children:r,content:a,defaultOpen:t=!1})=>{const[s,o]=u.useState(t),n=u.useRef(null),i=u.useRef(null),c=u.useRef(null),v=u.useId();return u.useEffect(()=>{const l=d=>{var m;(m=n.current)!=null&&m.contains(d.target)||o(!1)};return document.addEventListener("mousedown",l),()=>document.removeEventListener("mousedown",l)},[]),u.useEffect(()=>{if(!s||!c.current)return;const l=c.current.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');l==null||l.focus()},[s]),u.useEffect(()=>{const l=d=>{var m;d.key==="Escape"&&(o(!1),(m=i.current)==null||m.focus())};return s&&document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[s]),e.jsxs("div",{className:"relative inline-flex",ref:n,children:[e.jsx("button",{"aria-controls":s?v:void 0,"aria-expanded":s,"aria-haspopup":"dialog",className:"inline-flex",onClick:()=>o(l=>!l),ref:i,type:"button",children:r}),s&&e.jsx("div",{className:b("absolute left-1/2 top-full z-30 mt-2 w-max -translate-x-1/2 rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-3 shadow-[var(--shadow-md)]"),id:v,ref:c,role:"dialog",tabIndex:-1,children:a})]})},K=u.forwardRef(({label:r,helperText:a,className:t,id:s,...o},n)=>{const i=s||`radio-${Math.random().toString(36).slice(2,9)}`;return e.jsxs("label",{className:b("inline-flex cursor-pointer items-start gap-2",t),htmlFor:i,children:[e.jsx("input",{ref:n,className:"mt-0.5 h-4 w-4 border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]",id:i,type:"radio",...o}),e.jsxs("span",{className:"grid gap-0.5",children:[r&&e.jsx("span",{className:"text-sm text-[var(--text-primary)]",children:r}),a&&e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:a})]})]})});K.displayName="Radio";const be=({title:r,subtitle:a,actions:t,className:s,...o})=>e.jsxs("div",{className:b("flex items-start justify-between gap-4",s),...o,children:[e.jsxs("div",{className:"grid gap-1",children:[e.jsx("h2",{className:"m-0 text-xl font-semibold text-[var(--text-primary)]",children:r}),a&&e.jsx("p",{className:"m-0 text-sm text-[var(--text-secondary)]",children:a})]}),t&&e.jsx("div",{className:"flex shrink-0 items-center gap-2",children:t})]}),L=u.forwardRef(({label:r,helperText:a,error:t,options:s,size:o="md",className:n,id:i,...c},v)=>{const l=i||`select-${Math.random().toString(36).slice(2,9)}`,d={sm:"min-h-8 px-3 py-1.5 text-sm",md:"min-h-10 px-3.5 py-2 text-base",lg:"min-h-12 px-4 py-3 text-lg"}[o];return e.jsxs("div",{className:"grid gap-1",children:[r&&e.jsx("label",{className:"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]",htmlFor:l,children:r}),e.jsx("select",{ref:v,"aria-describedby":t?`${l}-error`:a?`${l}-helper`:void 0,"aria-invalid":t?!0:void 0,className:b("w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-on-surface)] outline-none transition focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60",t&&"border-[var(--md-error)]",d,n),id:l,...c,children:s.map(m=>e.jsx("option",{value:m.value,children:m.label},m.value))}),t?e.jsx("span",{className:"text-xs text-[var(--md-error)]",id:`${l}-error`,role:"alert",children:t}):a&&e.jsx("span",{className:"text-xs text-[var(--md-on-surface-variant)]",id:`${l}-helper`,children:a})]})});L.displayName="Select";const xe=({circle:r=!1,width:a,height:t,className:s,style:o,...n})=>e.jsx("div",{className:b("animate-pulse bg-[var(--md-surface-container-high)]",r?"rounded-full":"rounded-[var(--border-radius-sm)]",s),style:{width:a,height:t,...o},...n}),he=({as:r="p",size:a="md",weight:t="normal",align:s="left",muted:o=!1,italic:n=!1,children:i,className:c="",...v})=>{const l=r,d={xs:"text-[var(--font-size-xs)]",sm:"text-[var(--font-size-sm)]",md:"text-[var(--font-size-base)]",lg:"text-[var(--font-size-lg)]"},m={normal:"font-[var(--font-weight-normal)]",medium:"font-[var(--font-weight-medium)]",semibold:"font-[var(--font-weight-semibold)]"},x={left:"text-left",center:"text-center",right:"text-right"},p=["m-0 leading-[var(--line-height-normal)] text-[var(--text-secondary)] transition-[var(--transition-colors)]",d[a],m[t],x[s],n?"italic":"not-italic",o?"text-[var(--text-muted)] opacity-80":"",c].filter(Boolean).join(" ");return e.jsx(l,{className:p,...v,children:i})},H=u.forwardRef(({checked:r=!1,onCheckedChange:a,label:t,className:s,...o},n)=>e.jsxs("div",{className:b("inline-flex items-center gap-2",s),children:[e.jsx("button",{ref:n,"aria-checked":r,className:b("relative inline-flex h-6 w-11 items-center rounded-full border transition focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]",r?"border-[var(--md-primary)] bg-[var(--md-primary)]":"border-[var(--md-outline)] bg-[var(--md-surface-container-high)]"),onClick:()=>a==null?void 0:a(!r),role:"switch",type:"button",...o,children:e.jsx("span",{className:b("inline-block h-5 w-5 rounded-full bg-[var(--md-surface)] shadow transition",r?"translate-x-5":"translate-x-0.5")})}),t&&e.jsx("span",{className:"text-sm text-[var(--text-primary)]",children:t})]}));H.displayName="Switch";const pe=({className:r,children:a,onRemove:t,...s})=>e.jsxs("span",{className:b("inline-flex items-center gap-1 rounded-[var(--border-radius-sm)] border border-[var(--border-color)] bg-[var(--bg-secondary)] px-2.5 py-1 text-xs text-[var(--text-secondary)]",r),...s,children:[a,t&&e.jsx("button",{"aria-label":"Remover tag",className:"inline-flex h-4 w-4 items-center justify-center rounded-full text-[var(--text-muted)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)]",onClick:t,type:"button",children:"×"})]}),ge=({items:r,defaultTabId:a})=>{var c;const[t,s]=u.useState(a??((c=r[0])==null?void 0:c.id)),o=r.find(v=>v.id===t)??r[0],n=Math.max(0,r.findIndex(v=>v.id===(o==null?void 0:o.id))),i=v=>{const l=r[v];if(!l)return;s(l.id);const d=document.getElementById(`tab-${l.id}`);d==null||d.focus()};return e.jsxs("div",{className:"grid gap-3",children:[e.jsx("div",{"aria-orientation":"horizontal",className:"inline-flex flex-wrap gap-1 rounded-[var(--border-radius-md)] bg-[var(--bg-tertiary)] p-1",role:"tablist",children:r.map((v,l)=>e.jsx("button",{"aria-controls":`panel-${v.id}`,"aria-selected":t===v.id,className:b("rounded-[var(--border-radius-sm)] px-3 py-1.5 text-sm transition",t===v.id?"bg-[var(--bg-secondary)] text-[var(--text-primary)] shadow-[var(--shadow-xs)]":"text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"),id:`tab-${v.id}`,onClick:()=>s(v.id),onKeyDown:d=>{d.key==="ArrowRight"?(d.preventDefault(),i((l+1)%r.length)):d.key==="ArrowLeft"?(d.preventDefault(),i((l-1+r.length)%r.length)):d.key==="Home"?(d.preventDefault(),i(0)):d.key==="End"&&(d.preventDefault(),i(r.length-1))},role:"tab",tabIndex:l===n?0:-1,type:"button",children:v.label},v.id))}),e.jsx("div",{"aria-labelledby":`tab-${(o==null?void 0:o.id)??""}`,className:"rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4",id:`panel-${(o==null?void 0:o.id)??""}`,role:"tabpanel",children:o==null?void 0:o.content})]})},ye=({className:r,children:a,...t})=>e.jsx("div",{className:"overflow-x-auto rounded-[var(--border-radius-md)] border border-[var(--border-color)]",children:e.jsx("table",{className:b("w-full min-w-[36rem] border-collapse bg-[var(--bg-secondary)] text-left",r),...t,children:a})}),O=u.forwardRef(({label:r,helperText:a,error:t,className:s,id:o,...n},i)=>{const c=o||`textarea-${Math.random().toString(36).slice(2,9)}`;return e.jsxs("div",{className:"grid gap-1",children:[r&&e.jsx("label",{className:"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]",htmlFor:c,children:r}),e.jsx("textarea",{ref:i,"aria-describedby":t?`${c}-error`:a?`${c}-helper`:void 0,"aria-invalid":t?!0:void 0,className:b("min-h-24 w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-2 text-[var(--md-on-surface)] outline-none transition placeholder:text-[var(--md-on-surface-variant)] focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60",t&&"border-[var(--md-error)] focus:border-[var(--md-error)] focus:[box-shadow:0_0_0_0.1875rem_rgba(186,26,26,0.2)]",s),id:c,...n}),t?e.jsx("span",{className:"text-xs text-[var(--md-error)]",id:`${c}-error`,role:"alert",children:t}):a&&e.jsx("span",{className:"text-xs text-[var(--md-on-surface-variant)]",id:`${c}-helper`,children:a})]})});O.displayName="Textarea";const W=({tone:r="info",title:a,description:t,onDismiss:s,className:o,...n})=>{const i={info:"border-[var(--info-color)]/40",success:"border-[var(--success-color)]/40",warning:"border-[var(--warning-color)]/40",error:"border-[var(--md-error)]/40"}[r],c=r==="error"||r==="warning"?"assertive":"polite",v=r==="error"||r==="warning"?"alert":"status";return e.jsxs("div",{className:b("w-[22rem] rounded-[var(--border-radius-md)] border bg-[var(--bg-secondary)] p-3 shadow-[var(--shadow-lg)]",i,o),"aria-atomic":"true","aria-live":c,onKeyDown:l=>{l.key==="Escape"&&(s==null||s())},role:v,tabIndex:0,...n,children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("p",{className:"m-0 text-sm font-semibold text-[var(--text-primary)]",children:a}),s&&e.jsx("button",{"aria-label":"Fechar notificação",className:"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-[var(--border-radius-sm)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]",onClick:s,type:"button",children:e.jsx("span",{"aria-hidden":!0,children:"×"})})]}),t&&e.jsx("p",{className:"mt-1 text-sm text-[var(--text-secondary)]",children:t})]})},_=u.createContext(void 0),we=({children:r,durationMs:a=4e3})=>{const[t,s]=u.useState([]),o=u.useRef(new Map),n=u.useCallback(v=>{const l=o.current.get(v);l&&(window.clearTimeout(l),o.current.delete(v)),s(d=>d.filter(m=>m.id!==v))},[]),i=u.useCallback(v=>{const l=v.id??`toast-${Math.random().toString(36).slice(2,9)}`;s(m=>[...m,{...v,id:l}]);const d=window.setTimeout(()=>n(l),a);o.current.set(l,d)},[n,a]);u.useEffect(()=>{const v=o.current;return()=>{v.forEach(l=>window.clearTimeout(l)),v.clear()}},[]);const c=u.useMemo(()=>({toasts:t,pushToast:i,dismissToast:n}),[t,i,n]);return e.jsxs(_.Provider,{value:c,children:[r,e.jsx(U,{})]})},Ne=()=>{const r=u.useContext(_);if(!r)throw new Error("useToast must be used inside ToastProvider");return r},U=()=>{const r=u.useContext(_);return!r||r.toasts.length===0?null:e.jsx("div",{"aria-label":"Notificações",className:"pointer-events-none fixed bottom-4 right-4 z-[1200] grid gap-2",role:"region",children:r.toasts.map(a=>e.jsx(W,{...a,className:"pointer-events-auto",onDismiss:()=>r.dismissToast(a.id)},a.id))})},ze=({as:r="h1",size:a="2xl",weight:t="bold",align:s="left",gradient:o=!1,italic:n=!1,children:i,className:c="",...v})=>{const l=r,d={xs:"text-[var(--font-size-sm)]",sm:"text-[var(--font-size-base)]",md:"text-[var(--font-size-lg)]",lg:"text-[var(--font-size-xl)]",xl:"text-[var(--font-size-2xl)]","2xl":"text-[var(--font-size-3xl)]","3xl":"text-[var(--font-size-4xl)]","4xl":"text-[3rem]"},m={light:"font-[var(--font-weight-light)]",normal:"font-[var(--font-weight-normal)]",medium:"font-[var(--font-weight-medium)]",semibold:"font-[var(--font-weight-semibold)]",bold:"font-[var(--font-weight-bold)]",extrabold:"font-extrabold"},x={left:"text-left",center:"text-center",right:"text-right"},p=o?"bg-[linear-gradient(135deg,var(--text-primary)_0%,var(--primary-color)_50%,var(--secondary-color)_100%)] bg-clip-text text-transparent":"",z=["m-0 leading-[var(--line-height-tight)] text-[var(--text-primary)] transition-[var(--transition-colors)]",d[a],m[t],x[s],n?"italic":"not-italic",p,c].filter(Boolean).join(" ");return e.jsx(l,{className:z,...v,children:i})},ke=({children:r,content:a,side:t="top"})=>{const[s,o]=u.useState(!1),n=u.useId(),i=t==="top"?"bottom-full mb-2 left-1/2 -translate-x-1/2":"top-full mt-2 left-1/2 -translate-x-1/2",c={"aria-describedby":n,onBlur:()=>o(!1),onFocus:()=>o(!0),onKeyDown:l=>{l.key==="Escape"&&o(!1)},onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1)},v=u.isValidElement(r)?e.jsx("span",{className:"inline-flex",...c,children:r}):e.jsx("span",{className:"inline-flex",tabIndex:0,...c,children:r});return e.jsxs("span",{className:"relative inline-flex",children:[v,e.jsx("span",{"aria-hidden":!s,className:b("pointer-events-none absolute z-20 whitespace-nowrap rounded bg-[var(--brand-cinza-escuro)] px-2 py-1 text-xs text-white shadow-[var(--shadow-sm)] transition",s?"opacity-100":"opacity-0",i),id:n,role:"tooltip",children:a})]})},V=u.createContext(void 0),Ee=()=>{const r=u.useContext(V);if(!r)throw new Error("useTheme must be used within a ThemeProvider");return r},Me=({children:r,defaultTheme:a="light"})=>{const[t,s]=u.useState(()=>typeof window>"u"?a:window.localStorage.getItem("theme")||a);u.useEffect(()=>{typeof window>"u"||(window.localStorage.setItem("theme",t),document.documentElement.setAttribute("data-theme",t))},[t]);const o=()=>{s(n=>n==="dark"?"light":"dark")};return e.jsx(V.Provider,{value:{theme:t,toggleTheme:o},children:r})};f.Accordion=Y,f.Alert=X,f.Badge=Z,f.Breadcrumb=I,f.Button=J,f.Card=R,f.Checkbox=B,f.Chip=ee,f.Combobox=D,f.Container=se,f.Divider=re,f.EmptyState=ae,f.FileUpload=T,f.Footer=te,f.Grid=le,f.Header=oe,f.Input=q,f.Modal=ie,f.NumberInput=A,f.PageHeader=fe,f.Pagination=ve,f.Paragraph=me,f.Popover=ue,f.Radio=K,f.SectionHeader=be,f.Select=L,f.Sidebar=de,f.Skeleton=xe,f.Stack=ne,f.Stepper=F,f.Subtitle=he,f.Switch=H,f.Table=ye,f.Tabs=ge,f.Tag=pe,f.Textarea=O,f.ThemeProvider=Me,f.Title=ze,f.Toast=W,f.ToastProvider=we,f.ToastViewport=U,f.Tooltip=ke,f.Topbar=ce,f.useTheme=Ee,f.useToast=Ne,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})}));
|
|
2
|
-
//# sourceMappingURL=oficios-ui.umd.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oficios-ui.umd.cjs","sources":["../src/utils/cn.ts","../src/components/Accordion/Accordion.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Combobox/Combobox.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/Stepper/Stepper.tsx","../src/components/Button/Button.tsx","../src/components/Alert/Alert.tsx","../src/components/Badge/Badge.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Chip/Chip.tsx","../src/components/Divider/Divider.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Footer/Footer.tsx","../src/components/Header/Header.tsx","../src/components/Input/Input.tsx","../src/components/Layout/Layout.tsx","../src/components/Modal/Modal.tsx","../src/components/Navigation/Navigation.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Paragraph/Paragraph.tsx","../src/components/PageHeader/PageHeader.tsx","../src/components/Popover/Popover.tsx","../src/components/Radio/Radio.tsx","../src/components/SectionHeader/SectionHeader.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Subtitle/Subtitle.tsx","../src/components/Switch/Switch.tsx","../src/components/Tag/Tag.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Table/Table.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Toast/Toast.tsx","../src/components/Title/Title.tsx","../src/components/Tooltip/Tooltip.tsx","../src/theme/ThemeProvider.tsx"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utilitário de composição de classes Tailwind.\n * Usa clsx para lógica condicional e tailwind-merge para resolver\n * conflitos de classes (ex.: bg-red-500 + bg-blue-500 → bg-blue-500).\n */\nexport const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));\n","import type React from 'react';\nimport { useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AccordionItem {\n content: React.ReactNode;\n id: string;\n title: React.ReactNode;\n}\n\nexport interface AccordionProps {\n defaultOpenId?: string;\n items: AccordionItem[];\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({ items, defaultOpenId }) => {\n const [openId, setOpenId] = useState<string | null>(defaultOpenId ?? null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <div className=\"grid gap-2\" ref={rootRef}>\n {items.map((item) => {\n const isOpen = openId === item.id;\n const triggerId = `accordion-trigger-${item.id}`;\n const panelId = `accordion-panel-${item.id}`;\n return (\n <div\n className=\"overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--border-color)]\"\n key={item.id}\n >\n <button\n aria-controls={panelId}\n aria-expanded={isOpen}\n className=\"flex w-full items-center justify-between bg-[var(--bg-secondary)] px-4 py-3 text-left text-sm font-medium text-[var(--text-primary)] hover:bg-[var(--bg-hover)]\"\n id={triggerId}\n onKeyDown={(event) => {\n if (!rootRef.current) {\n return;\n }\n const buttons = Array.from(\n rootRef.current.querySelectorAll<HTMLButtonElement>('[id^=\"accordion-trigger-\"]'),\n );\n const currentIndex = buttons.findIndex((btn) => btn.id === triggerId);\n if (currentIndex === -1 || buttons.length === 0) {\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n buttons[(currentIndex + 1) % buttons.length]?.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n buttons[(currentIndex - 1 + buttons.length) % buttons.length]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n buttons[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n buttons[buttons.length - 1]?.focus();\n }\n }}\n onClick={() => setOpenId((prev) => (prev === item.id ? null : item.id))}\n type=\"button\"\n >\n {item.title}\n <span className={cn('transition', isOpen ? 'rotate-180' : '')}>⌄</span>\n </button>\n {isOpen && (\n <div\n aria-labelledby={triggerId}\n className=\"bg-[var(--bg-tertiary)] px-4 py-3 text-sm text-[var(--text-secondary)]\"\n id={panelId}\n role=\"region\"\n >\n {item.content}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BreadcrumbItem {\n href?: string;\n label: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: React.ReactNode;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n separator = '/',\n className,\n ...props\n}) => {\n return (\n <nav aria-label=\"Breadcrumb\" className={cn('flex items-center', className)} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1 text-sm\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={index} className=\"flex items-center gap-1\">\n {index > 0 && (\n <span aria-hidden=\"true\" className=\"select-none text-[var(--text-muted)]\">\n {separator}\n </span>\n )}\n {isLast ? (\n <span aria-current=\"page\" className=\"font-medium text-[var(--text-primary)]\">\n {item.label}\n </span>\n ) : item.href ? (\n <a\n className=\"text-[var(--md-primary)] transition hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]\"\n href={item.href}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"text-[var(--text-secondary)]\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\nBreadcrumb.displayName = 'Breadcrumb';\n","import React, { useEffect, useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ComboboxOption {\n label: string;\n value: string;\n}\n\nexport interface ComboboxProps {\n className?: string;\n disabled?: boolean;\n error?: string;\n helperText?: string;\n label?: string;\n onChange?: (value: string) => void;\n options: ComboboxOption[];\n placeholder?: string;\n value?: string;\n}\n\nexport const Combobox: React.FC<ComboboxProps> = ({\n label,\n helperText,\n error,\n options,\n value,\n onChange,\n placeholder = 'Selecione ou pesquise...',\n disabled = false,\n className,\n}) => {\n const [query, setQuery] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n\n const selectedOption = options.find((o) => o.value === value);\n\n const filtered = query\n ? options.filter((o) => o.label.toLowerCase().includes(query.toLowerCase()))\n : options;\n\n const displayValue = isOpen ? query : (selectedOption?.label ?? '');\n\n // Fechar ao clicar fora\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n setQuery('');\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (option: ComboboxOption) => {\n onChange?.(option.value);\n setQuery('');\n setIsOpen(false);\n inputRef.current?.blur();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isOpen) {\n if (e.key === 'ArrowDown' || e.key === 'Enter') {\n setIsOpen(true);\n setActiveIndex(0);\n e.preventDefault();\n }\n return;\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (activeIndex >= 0 && filtered[activeIndex]) {\n handleSelect(filtered[activeIndex]);\n }\n } else if (e.key === 'Escape') {\n setIsOpen(false);\n setQuery('');\n }\n };\n\n const inputId = `combobox-${Math.random().toString(36).slice(2, 9)}`;\n const listId = `${inputId}-list`;\n\n return (\n <div className={cn('flex flex-col gap-[var(--spacing-xs)]', className)} ref={containerRef}>\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={inputId}\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={inputRef}\n aria-activedescendant={activeIndex >= 0 ? `${inputId}-option-${activeIndex}` : undefined}\n aria-autocomplete=\"list\"\n aria-controls={listId}\n aria-describedby={\n error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined\n }\n aria-expanded={isOpen}\n aria-invalid={error ? true : undefined}\n autoComplete=\"off\"\n className={cn(\n 'w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-2 text-[var(--font-size-base)] text-[var(--md-on-surface)] outline-none transition placeholder:text-[var(--md-on-surface-variant)] placeholder:opacity-70 focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60',\n error && 'border-[var(--md-error)]',\n )}\n disabled={disabled}\n id={inputId}\n placeholder={placeholder}\n role=\"combobox\"\n type=\"text\"\n value={displayValue}\n onChange={(e) => {\n setQuery(e.target.value);\n setIsOpen(true);\n setActiveIndex(0);\n }}\n onFocus={() => setIsOpen(true)}\n onKeyDown={handleKeyDown}\n />\n {/* Chevron */}\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-[var(--text-muted)] transition',\n isOpen && 'rotate-180',\n )}\n >\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"m6 9 6 6 6-6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n\n {/* Dropdown */}\n {isOpen && filtered.length > 0 && (\n <ul\n ref={listRef}\n className=\"absolute z-[var(--z-index-dropdown)] mt-1 max-h-60 w-full overflow-auto rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] py-1 shadow-[var(--shadow-md)]\"\n id={listId}\n role=\"listbox\"\n >\n {filtered.map((option, index) => (\n <li\n aria-selected={option.value === value}\n className={cn(\n 'cursor-pointer px-3.5 py-2 text-sm transition',\n index === activeIndex\n ? 'bg-[var(--md-primary)] text-[var(--md-on-primary)]'\n : option.value === value\n ? 'bg-[var(--bg-tertiary)] text-[var(--text-primary)]'\n : 'text-[var(--text-primary)] hover:bg-[var(--bg-hover)]',\n )}\n id={`${inputId}-option-${index}`}\n key={option.value}\n role=\"option\"\n onMouseDown={(e) => {\n e.preventDefault();\n handleSelect(option);\n }}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {option.label}\n </li>\n ))}\n </ul>\n )}\n {isOpen && filtered.length === 0 && (\n <div className=\"absolute z-[var(--z-index-dropdown)] mt-1 w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-3 text-sm text-[var(--text-muted)] shadow-[var(--shadow-md)]\">\n Nenhum resultado encontrado.\n </div>\n )}\n </div>\n {error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-error)]\"\n id={`${inputId}-error`}\n role=\"alert\"\n >\n {error}\n </span>\n )}\n {helperText && !error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\"\n id={`${inputId}-helper`}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n};\n\nCombobox.displayName = 'Combobox';\n","import React, { useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface FileUploadProps {\n accept?: string;\n className?: string;\n disabled?: boolean;\n error?: string;\n helperText?: string;\n label?: string;\n maxSizeBytes?: number;\n multiple?: boolean;\n onChange?: (files: File[]) => void;\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n label,\n helperText,\n error,\n accept,\n multiple = false,\n maxSizeBytes,\n disabled = false,\n onChange,\n className,\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [sizeError, setSizeError] = useState<string | null>(null);\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList) return;\n const files = Array.from(fileList);\n\n if (maxSizeBytes) {\n const oversized = files.find((f) => f.size > maxSizeBytes);\n if (oversized) {\n const mb = (maxSizeBytes / 1024 / 1024).toFixed(0);\n setSizeError(`Arquivo \"${oversized.name}\" excede o tamanho máximo de ${mb} MB.`);\n return;\n }\n }\n\n setSizeError(null);\n onChange?.(files);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n if (!disabled) setIsDragging(true);\n };\n\n const handleDragLeave = () => setIsDragging(false);\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n setIsDragging(false);\n if (!disabled) handleFiles(e.dataTransfer.files);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n inputRef.current?.click();\n }\n };\n\n const displayError = error ?? sizeError;\n\n return (\n <div className={cn('flex flex-col gap-[var(--spacing-xs)]', className)}>\n {label && (\n <span className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\">\n {label}\n </span>\n )}\n <div\n aria-disabled={disabled}\n className={cn(\n 'flex cursor-pointer flex-col items-center justify-center gap-2 rounded-[var(--border-radius-lg)] border-2 border-dashed p-8 text-center transition',\n isDragging\n ? 'border-[var(--md-primary)] bg-[var(--md-primary-container)]'\n : 'border-[var(--md-outline-variant)] hover:border-[var(--md-primary)] hover:bg-[var(--bg-tertiary)]',\n displayError && 'border-[var(--md-error)]',\n disabled && 'pointer-events-none cursor-not-allowed opacity-60',\n )}\n onClick={() => !disabled && inputRef.current?.click()}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n >\n {/* Upload icon */}\n <svg\n className=\"h-8 w-8 text-[var(--md-primary)]\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <div>\n <p className=\"text-sm font-medium text-[var(--text-primary)]\">\n Arraste arquivos aqui ou{' '}\n <span className=\"text-[var(--md-primary)] underline\">clique para selecionar</span>\n </p>\n {accept && (\n <p className=\"mt-0.5 text-xs text-[var(--text-muted)]\">Formatos aceitos: {accept}</p>\n )}\n {maxSizeBytes && (\n <p className=\"text-xs text-[var(--text-muted)]\">\n Tamanho máximo: {(maxSizeBytes / 1024 / 1024).toFixed(0)} MB\n </p>\n )}\n </div>\n </div>\n <input\n ref={inputRef}\n accept={accept}\n className=\"sr-only\"\n disabled={disabled}\n multiple={multiple}\n tabIndex={-1}\n type=\"file\"\n onChange={(e) => handleFiles(e.target.files)}\n />\n {displayError && (\n <span className=\"text-[var(--font-size-xs)] text-[var(--md-error)]\" role=\"alert\">\n {displayError}\n </span>\n )}\n {helperText && !displayError && (\n <span className=\"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\">\n {helperText}\n </span>\n )}\n </div>\n );\n};\n\nFileUpload.displayName = 'FileUpload';\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface NumberInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'onChange'\n> {\n error?: string;\n helperText?: string;\n label?: string;\n max?: number;\n min?: number;\n onChange?: (value: number | null) => void;\n size?: 'sm' | 'md' | 'lg';\n step?: number;\n}\n\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n label,\n error,\n helperText,\n size = 'md',\n min,\n max,\n step = 1,\n onChange,\n className,\n id,\n value,\n defaultValue,\n disabled,\n ...props\n },\n ref,\n ) => {\n const inputId = id || `number-input-${Math.random().toString(36).slice(2, 9)}`;\n const hasError = !!error;\n\n const sizeClassMap = {\n sm: 'min-h-8 text-[var(--font-size-sm)]',\n md: 'min-h-10 text-[var(--font-size-base)]',\n lg: 'min-h-12 text-[var(--font-size-lg)]',\n };\n\n const buttonSizeMap = {\n sm: 'h-8 w-7 text-sm',\n md: 'h-10 w-8 text-base',\n lg: 'h-12 w-9 text-lg',\n };\n\n const numValue = value !== undefined ? Number(value) : undefined;\n\n const handleDecrement = () => {\n const current = numValue ?? (defaultValue !== undefined ? Number(defaultValue) : 0);\n const next = current - step;\n if (min === undefined || next >= min) {\n onChange?.(next);\n }\n };\n\n const handleIncrement = () => {\n const current = numValue ?? (defaultValue !== undefined ? Number(defaultValue) : 0);\n const next = current + step;\n if (max === undefined || next <= max) {\n onChange?.(next);\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n onChange?.(raw === '' ? null : Number(raw));\n };\n\n return (\n <div className=\"flex flex-col gap-[var(--spacing-xs)]\">\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={inputId}\n >\n {label}\n </label>\n )}\n <div\n className={cn(\n 'inline-flex overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] transition focus-within:border-[var(--border-color-focus)] focus-within:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)]',\n hasError && 'border-[var(--md-error)] focus-within:border-[var(--md-error)]',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n >\n <button\n aria-label=\"Diminuir\"\n className={cn(\n 'flex shrink-0 items-center justify-center border-r border-[var(--md-outline-variant)] bg-[var(--bg-tertiary)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--border-color-focus)]',\n buttonSizeMap[size],\n )}\n disabled={disabled || (min !== undefined && (numValue ?? 0) <= min)}\n onClick={handleDecrement}\n type=\"button\"\n >\n −\n </button>\n <input\n ref={ref}\n aria-describedby={\n error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined\n }\n aria-invalid={hasError ? true : undefined}\n className={cn(\n 'w-full min-w-0 bg-transparent px-3 text-center text-[var(--md-on-surface)] outline-none',\n sizeClassMap[size],\n className,\n )}\n defaultValue={defaultValue}\n disabled={disabled}\n id={inputId}\n max={max}\n min={min}\n step={step}\n type=\"number\"\n value={value}\n onChange={handleChange}\n {...props}\n />\n <button\n aria-label=\"Aumentar\"\n className={cn(\n 'flex shrink-0 items-center justify-center border-l border-[var(--md-outline-variant)] bg-[var(--bg-tertiary)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--border-color-focus)]',\n buttonSizeMap[size],\n )}\n disabled={disabled || (max !== undefined && (numValue ?? 0) >= max)}\n onClick={handleIncrement}\n type=\"button\"\n >\n +\n </button>\n </div>\n {error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-error)]\"\n id={`${inputId}-error`}\n role=\"alert\"\n >\n {error}\n </span>\n )}\n {helperText && !error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\"\n id={`${inputId}-helper`}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = 'NumberInput';\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface StepperItem {\n description?: string;\n id: string;\n label: string;\n}\n\nexport type StepStatus = 'completed' | 'active' | 'pending';\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n currentStep: string;\n items: StepperItem[];\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Stepper: React.FC<StepperProps> = ({\n items,\n currentStep,\n orientation = 'horizontal',\n className,\n ...props\n}) => {\n const currentIndex = items.findIndex((item) => item.id === currentStep);\n\n const getStatus = (index: number): StepStatus => {\n if (index < currentIndex) return 'completed';\n if (index === currentIndex) return 'active';\n return 'pending';\n };\n\n const isHorizontal = orientation === 'horizontal';\n\n return (\n <div\n aria-label=\"Progresso\"\n className={cn(isHorizontal ? 'flex items-start' : 'flex flex-col', className)}\n role=\"list\"\n {...props}\n >\n {items.map((item, index) => {\n const status = getStatus(index);\n const isLast = index === items.length - 1;\n\n return (\n <div\n key={item.id}\n className={cn('flex', isHorizontal ? 'flex-1 flex-col items-center' : 'gap-4')}\n role=\"listitem\"\n >\n {/* Step indicator + connector */}\n <div\n className={cn(\n isHorizontal ? 'flex w-full items-center' : 'flex flex-col items-center',\n )}\n >\n {/* Circle */}\n <div\n aria-current={status === 'active' ? 'step' : undefined}\n className={cn(\n 'relative z-10 flex h-9 w-9 shrink-0 items-center justify-center rounded-full border-2 text-sm font-semibold transition',\n status === 'completed' &&\n 'border-[var(--md-primary)] bg-[var(--md-primary)] text-[var(--md-on-primary)]',\n status === 'active' &&\n 'border-[var(--md-primary)] bg-[var(--md-surface)] text-[var(--md-primary)]',\n status === 'pending' &&\n 'border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--text-muted)]',\n )}\n >\n {status === 'completed' ? (\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M20 6 9 17l-5-5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n index + 1\n )}\n </div>\n\n {/* Connector line */}\n {!isLast && (\n <div\n className={cn(\n 'transition',\n isHorizontal ? 'h-0.5 flex-1' : 'my-1 ml-[1.0625rem] w-0.5 flex-1',\n index < currentIndex\n ? 'bg-[var(--md-primary)]'\n : 'bg-[var(--md-outline-variant)]',\n )}\n aria-hidden=\"true\"\n />\n )}\n </div>\n\n {/* Label + description */}\n <div className={cn('mt-2 text-center', isHorizontal ? '' : 'mt-0 pb-6 text-left')}>\n <p\n className={cn(\n 'text-sm font-medium leading-tight',\n status === 'active' && 'text-[var(--md-primary)]',\n status === 'completed' && 'text-[var(--text-primary)]',\n status === 'pending' && 'text-[var(--text-muted)]',\n )}\n >\n {item.label}\n </p>\n {item.description && (\n <p className=\"mt-0.5 text-xs text-[var(--text-muted)]\">{item.description}</p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nStepper.displayName = 'Stepper';\n","import type React from 'react';\nimport type { CSSProperties } from 'react';\nimport { cn } from '../../utils/cn';\n\n/** Paletas do guia de marca (só afeta variant primary). Use para escolher o modelo de cor do botão. */\nexport type ButtonPalette =\n | 'verde-vibrante'\n | 'verde-profundo'\n | 'grafite-azulado'\n | 'azul-acinzentado'\n | 'cinza-medio'\n | 'cinza-escuro'\n | 'off-white';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n compact?: boolean;\n fullWidth?: boolean;\n isLoading?: boolean;\n leftIcon?: React.ReactNode;\n /** Paleta de cor do guia de marca (aplica-se ao primary). Ignorado em outros variants. */\n palette?: ButtonPalette;\n rightIcon?: React.ReactNode;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n variant?:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'neutral'\n | 'ghost';\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n size = 'md',\n compact = false,\n fullWidth = false,\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n className = '',\n disabled,\n palette,\n style,\n ...props\n}) => {\n const baseClass =\n 'relative inline-flex select-none items-center justify-center overflow-hidden whitespace-nowrap rounded-[var(--border-radius-md)] border border-transparent font-semibold leading-none tracking-[0.01em] transition-[all_var(--transition-base)]';\n const focusClass =\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--md-primary)]';\n const disabledClass =\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60';\n const fullWidthClass = fullWidth ? 'w-full' : '';\n const offWhiteBorderClass =\n palette === 'off-white' && variant === 'primary' ? 'border-[var(--border-color)]' : '';\n\n const sizeClassMap: Record<NonNullable<ButtonProps['size']>, string> = {\n xs: compact\n ? 'min-h-[1.75rem] min-w-[1.75rem] gap-1 px-2 py-1 text-[var(--font-size-xs)]'\n : 'min-h-8 min-w-8 gap-1.5 px-3 py-1.5 text-[var(--font-size-xs)]',\n sm: compact\n ? 'min-h-8 min-w-8 gap-[0.3125rem] px-2.5 py-1.5 text-[var(--font-size-sm)]'\n : 'min-h-9 min-w-9 gap-[0.4375rem] px-3.5 py-2 text-[var(--font-size-sm)]',\n md: compact\n ? 'min-h-[2.375rem] min-w-[2.375rem] gap-1.5 px-3 py-2 text-[var(--font-size-base)]'\n : 'min-h-11 min-w-11 gap-2 px-4 py-2.5 text-[var(--font-size-base)]',\n lg: compact\n ? 'min-h-[2.625rem] min-w-[2.625rem] gap-[0.4375rem] px-3.5 py-[0.5625rem] text-[var(--font-size-lg)]'\n : 'min-h-12 min-w-12 gap-[0.5625rem] px-6 py-4 text-[var(--font-size-lg)]',\n xl: compact\n ? 'min-h-12 min-w-12 gap-2 px-4 py-3 text-[var(--font-size-xl)]'\n : 'min-h-14 min-w-14 gap-2.5 px-8 py-6 text-[var(--font-size-xl)]',\n };\n\n const variantClassMap: Record<NonNullable<ButtonProps['variant']>, string> = {\n primary:\n 'bg-[var(--md-primary)] text-[var(--md-on-primary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--primary-color-hover)] hover:shadow-[var(--shadow-md)]',\n secondary:\n 'bg-[var(--md-secondary)] text-[var(--md-on-secondary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--secondary-color-light)] hover:shadow-[var(--shadow-md)]',\n success:\n 'bg-[var(--success-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--success-color-light)] hover:shadow-[var(--shadow-md)]',\n error:\n 'bg-[var(--md-error)] text-[var(--md-on-error)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--error-color-light)] hover:shadow-[var(--shadow-md)]',\n warning:\n 'bg-[var(--warning-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--warning-color-light)] hover:shadow-[var(--shadow-md)]',\n info: 'bg-[var(--info-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--info-color-light)] hover:shadow-[var(--shadow-md)]',\n neutral:\n 'bg-[var(--neutral-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--neutral-color-light)] hover:shadow-[var(--shadow-md)]',\n ghost:\n 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--md-on-surface)] shadow-[var(--shadow-xs)] hover:bg-[var(--bg-hover)] hover:text-[var(--md-primary)] hover:border-[var(--border-color-hover)]',\n };\n\n const iconSizeClassMap: Record<NonNullable<ButtonProps['size']>, string> = {\n xs: compact ? 'h-3 w-3' : 'h-3.5 w-3.5',\n sm: compact ? 'h-3.5 w-3.5' : 'h-4 w-4',\n md: 'h-[1.125rem] w-[1.125rem]',\n lg: 'h-5 w-5',\n xl: 'h-5 w-5',\n };\n\n const paletteVars: Record<ButtonPalette, { primary: string; hover: string; onPrimary?: string }> =\n {\n 'verde-vibrante': {\n primary: 'var(--brand-verde-vibrante)',\n hover: 'var(--brand-verde-profundo)',\n },\n 'verde-profundo': {\n primary: 'var(--brand-verde-profundo)',\n hover: 'var(--brand-grafite-azulado)',\n },\n 'grafite-azulado': {\n primary: 'var(--brand-grafite-azulado)',\n hover: 'var(--brand-cinza-escuro)',\n },\n 'azul-acinzentado': {\n primary: 'var(--brand-azul-acinzentado)',\n hover: 'var(--brand-grafite-azulado)',\n },\n 'cinza-medio': {\n primary: 'var(--brand-cinza-medio)',\n hover: 'var(--brand-cinza-escuro)',\n },\n 'cinza-escuro': {\n primary: 'var(--brand-cinza-escuro)',\n hover: 'var(--brand-preto)',\n },\n 'off-white': {\n primary: 'var(--brand-off-white)',\n hover: 'var(--brand-branco)',\n onPrimary: 'var(--brand-grafite-azulado)',\n },\n };\n\n type ButtonCssVars = CSSProperties & {\n '--md-primary'?: string;\n '--primary-color-hover'?: string;\n '--md-on-primary'?: string;\n };\n const paletteStyle: ButtonCssVars = {};\n if (palette && variant === 'primary') {\n paletteStyle['--md-primary'] = paletteVars[palette].primary;\n paletteStyle['--primary-color-hover'] = paletteVars[palette].hover;\n if (paletteVars[palette].onPrimary) {\n paletteStyle['--md-on-primary'] = paletteVars[palette].onPrimary;\n }\n }\n\n const combinedClass = cn(\n baseClass,\n focusClass,\n disabledClass,\n sizeClassMap[size],\n variantClassMap[variant],\n offWhiteBorderClass,\n fullWidthClass,\n className,\n );\n\n return (\n <button\n className={combinedClass}\n disabled={disabled || isLoading}\n style={{ ...paletteStyle, ...style }}\n {...props}\n >\n {isLoading && (\n <span\n aria-hidden=\"true\"\n className=\"absolute inline-flex h-[1em] w-[1em] animate-spin items-center justify-center\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeOpacity=\"0.25\" />\n <path d=\"M12 2 A10 10 0 0 1 22 12\" strokeLinecap=\"round\" />\n </svg>\n </span>\n )}\n {!isLoading && leftIcon && (\n <span\n className={`mr-1 inline-flex shrink-0 items-center justify-center leading-none ${iconSizeClassMap[size]}`}\n >\n {leftIcon}\n </span>\n )}\n {!isLoading && (\n <span className=\"btn__content inline-flex items-center justify-center\">{children}</span>\n )}\n {!isLoading && rightIcon && (\n <span\n className={`ml-1 inline-flex shrink-0 items-center justify-center leading-none ${iconSizeClassMap[size]}`}\n >\n {rightIcon}\n </span>\n )}\n </button>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n tone?: 'info' | 'success' | 'warning' | 'error';\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n title,\n tone = 'info',\n children,\n className,\n ...props\n}) => {\n const toneClass = {\n info: 'border-[var(--info-color)]/40 bg-[var(--info-color)]/10 text-[var(--text-primary)]',\n success:\n 'border-[var(--success-color)]/40 bg-[var(--success-color)]/10 text-[var(--text-primary)]',\n warning:\n 'border-[var(--warning-color)]/40 bg-[var(--warning-color)]/10 text-[var(--text-primary)]',\n error: 'border-[var(--md-error)]/40 bg-[var(--md-error)]/10 text-[var(--text-primary)]',\n }[tone];\n\n return (\n <div\n className={cn('rounded-[var(--border-radius-md)] border p-4', toneClass, className)}\n role=\"alert\"\n {...props}\n >\n {title && <p className=\"mb-1 text-sm font-semibold\">{title}</p>}\n <div className=\"text-sm leading-relaxed\">{children}</div>\n </div>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md';\n tone?: 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info';\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n size = 'md',\n tone = 'neutral',\n className,\n children,\n ...props\n}) => {\n const toneClass = {\n neutral: 'bg-[var(--bg-tertiary)] text-[var(--text-secondary)]',\n primary: 'bg-[var(--md-primary)] text-[var(--md-on-primary)]',\n success: 'bg-[var(--success-color)] text-white',\n warning: 'bg-[var(--warning-color)] text-white',\n error: 'bg-[var(--md-error)] text-[var(--md-on-error)]',\n info: 'bg-[var(--info-color)] text-white',\n }[tone];\n\n const sizeClass = size === 'sm' ? 'px-2 py-0.5 text-[0.6875rem]' : 'px-2.5 py-1 text-xs';\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium leading-none',\n toneClass,\n sizeClass,\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n};\n","import type React from 'react';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n hoverable?: boolean;\n padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'default' | 'elevated' | 'outlined' | 'flat';\n}\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'default',\n padding = 'md',\n hoverable = false,\n children,\n className = '',\n ...props\n}) => {\n const baseClass =\n 'relative overflow-hidden rounded-[var(--border-radius-lg)] transition-[var(--transition-all)]';\n const variantClassMap: Record<NonNullable<CardProps['variant']>, string> = {\n default:\n 'bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-sm)]',\n elevated:\n 'bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-lg)]',\n outlined: 'bg-transparent border border-[var(--md-outline-variant)] shadow-none',\n flat: 'bg-[var(--md-surface)] border-0 shadow-none',\n };\n const paddingClassMap: Record<NonNullable<CardProps['padding']>, string> = {\n none: 'p-0',\n sm: 'p-[var(--spacing-md)]',\n md: 'p-[var(--spacing-lg)]',\n lg: 'p-[var(--spacing-xl)]',\n xl: 'p-[var(--spacing-2xl)]',\n };\n const hoverableClass = hoverable ? 'hover:shadow-[var(--shadow-md)]' : '';\n const combinedClass = [\n baseClass,\n variantClassMap[variant],\n paddingClassMap[padding],\n hoverableClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={combinedClass} {...props}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n helperText?: string;\n label?: string;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ label, helperText, className, id, ...props }, ref) => {\n const inputId = id || `checkbox-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <label\n className={cn('inline-flex cursor-pointer items-start gap-2', className)}\n htmlFor={inputId}\n >\n <input\n ref={ref}\n className=\"mt-0.5 h-4 w-4 rounded border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]\"\n id={inputId}\n type=\"checkbox\"\n {...props}\n />\n <span className=\"grid gap-0.5\">\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n {helperText && <span className=\"text-xs text-[var(--text-muted)]\">{helperText}</span>}\n </span>\n </label>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ChipProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n selected?: boolean;\n}\n\nexport const Chip: React.FC<ChipProps> = ({ selected = false, className, children, ...props }) => {\n return (\n <button\n className={cn(\n 'inline-flex items-center rounded-full border px-3 py-1.5 text-sm transition',\n selected\n ? 'border-[var(--md-primary)] bg-[color:color-mix(in_srgb,var(--md-primary)_16%,transparent)] text-[var(--md-on-surface)]'\n : 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n className,\n )}\n type=\"button\"\n {...props}\n >\n {children}\n </button>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Divider: React.FC<DividerProps> = ({\n orientation = 'horizontal',\n className,\n ...props\n}) => {\n return (\n <div\n className={cn(\n 'bg-[var(--border-color)]',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className,\n )}\n role=\"separator\"\n {...props}\n />\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n action?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n className,\n ...props\n}) => {\n return (\n <div\n className={cn(\n 'grid justify-items-center gap-3 rounded-[var(--border-radius-lg)] border border-dashed border-[var(--border-color)] bg-[var(--bg-secondary)] p-6 text-center',\n className,\n )}\n {...props}\n >\n {icon && <div className=\"text-[var(--text-muted)]\">{icon}</div>}\n <h3 className=\"m-0 text-lg font-semibold text-[var(--text-primary)]\">{title}</h3>\n {description && (\n <p className=\"m-0 max-w-[30rem] text-sm text-[var(--text-secondary)]\">{description}</p>\n )}\n {action && <div className=\"mt-1\">{action}</div>}\n </div>\n );\n};\n","import type React from 'react';\nimport { useState } from 'react';\n\nexport interface FooterProps {\n /** Classe CSS adicional */\n className?: string;\n /** Texto alternativo do logo */\n logoAlt?: string;\n /** Texto exibido se a imagem do logo falhar (ex.: \"SBK\") */\n logoFallbackText?: string;\n /** URL da imagem do logo */\n logoSrc?: string;\n /** Texto antes do logo (ex.: \"Powered by\") */\n poweredByText?: string;\n}\n\nexport const Footer: React.FC<FooterProps> = ({\n poweredByText = 'Powered by',\n logoSrc,\n logoAlt = 'Logo',\n logoFallbackText,\n className = '',\n}) => {\n const [logoVisible, setLogoVisible] = useState(true);\n return (\n <footer\n className={[\n 'relative z-[1] flex w-full shrink-0 items-center justify-center border-t border-[var(--border-color)] bg-[var(--bg-secondary)] px-[var(--spacing-2xl)] py-[var(--spacing-lg)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"flex items-center gap-[var(--spacing-md)]\">\n {poweredByText && (\n <span className=\"text-[0.95rem] font-normal text-[var(--text-secondary)]\">\n {poweredByText}\n </span>\n )}\n {(logoSrc || logoFallbackText) && (\n <div className=\"flex items-center\">\n {logoSrc && logoVisible && (\n <img\n alt={logoAlt}\n className=\"h-6 w-auto object-contain\"\n onError={(_e) => {\n setLogoVisible(false);\n }}\n src={logoSrc}\n style={{\n filter: 'brightness(0)',\n }}\n />\n )}\n {logoFallbackText && (\n <span\n className=\"flex items-center text-base font-bold tracking-[0.1em] text-[var(--md-primary)]\"\n style={{\n display: logoSrc && logoVisible ? 'none' : 'flex',\n fontFamily: '\"Orbitron\", sans-serif',\n }}\n >\n {logoFallbackText}\n </span>\n )}\n </div>\n )}\n </div>\n </footer>\n );\n};\n","import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport type { Theme } from '../../theme/ThemeProvider';\n\nexport interface HeaderProps {\n /** Classe CSS adicional */\n className?: string;\n /** Texto alternativo do logo */\n logoAlt?: string;\n /** URL da imagem do logo (tema escuro). Se não informado, usa logoSrc. */\n logoDarkSrc?: string;\n /** URL da imagem do logo (tema claro) */\n logoSrc?: string;\n /** Callback ao clicar na área do logo/título */\n onLogoClick?: () => void;\n /** Conteúdo da área direita (ex.: seletor de idioma, toggle tema, menu usuário) */\n rightContent?: React.ReactNode;\n /** Subtítulo abaixo do título */\n subtitle?: React.ReactNode;\n /** Tema opcional para escolher o logo correto sem depender do ThemeProvider do UI */\n theme?: Theme;\n /** Título exibido ao lado do logo (ex.: \"OFÍCIO.IA\") */\n title?: React.ReactNode;\n}\n\nconst detectTheme = (): Theme => {\n if (typeof document === 'undefined') {\n return 'light';\n }\n\n return document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light';\n};\n\nexport const Header: React.FC<HeaderProps> = ({\n logoSrc,\n logoDarkSrc,\n logoAlt = 'Logo',\n title,\n subtitle,\n theme,\n onLogoClick,\n rightContent,\n className = '',\n}) => {\n const [isScrolled, setIsScrolled] = useState(false);\n const [resolvedTheme, setResolvedTheme] = useState<Theme>(() => theme ?? detectTheme());\n\n const logoSrcResolved = resolvedTheme === 'dark' && logoDarkSrc ? logoDarkSrc : logoSrc;\n\n useEffect(() => {\n const handleScroll = () => setIsScrolled(window.scrollY > 10);\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, []);\n\n useEffect(() => {\n if (theme) {\n setResolvedTheme(theme);\n return;\n }\n\n const syncTheme = () => setResolvedTheme(detectTheme());\n syncTheme();\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n const observer = new MutationObserver(syncTheme);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n\n return () => observer.disconnect();\n }, [theme]);\n\n const handleClick = () => onLogoClick?.();\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n onLogoClick?.();\n }\n };\n\n return (\n <header\n className={['fixed inset-x-0 top-0 z-[1000] w-full backdrop-blur-[12px]', className]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"h-0.5 w-full bg-[var(--md-primary)]\" />\n <div\n className=\"flex items-center justify-between px-6 py-2 shadow-[var(--shadow-sm)] max-md:flex-col max-md:gap-3 max-md:px-4 max-md:py-3\"\n style={{\n color: 'var(--md-on-surface)',\n background: `color-mix(in srgb, var(--md-surface) ${\n isScrolled ? '14%' : '18%'\n }, transparent)`,\n borderBottom: `1px solid color-mix(in srgb, var(--md-outline-variant) ${\n isScrolled ? '22%' : '30%'\n }, transparent)`,\n }}\n >\n <div\n className=\"flex cursor-pointer items-center gap-3 transition-opacity duration-200 ease-in-out hover:opacity-80\"\n onClick={onLogoClick ? handleClick : undefined}\n onKeyDown={onLogoClick ? handleKeyDown : undefined}\n role={onLogoClick ? 'button' : undefined}\n tabIndex={onLogoClick ? 0 : undefined}\n >\n {logoSrcResolved && (\n <div className=\"flex h-16 w-16 shrink-0 items-center justify-center\">\n <img\n alt={logoAlt}\n className=\"h-full w-full object-contain\"\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n const next = (e.target as HTMLElement).nextElementSibling as HTMLElement;\n if (next) {\n next.style.display = 'block';\n }\n }}\n src={logoSrcResolved}\n />\n <svg\n className=\"hidden h-full w-full\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5M2 12l10 5 10-5\" />\n </svg>\n </div>\n )}\n {(title || subtitle) && (\n <div className=\"flex flex-col gap-1\">\n {title && (\n <h1\n className=\"m-0 inline-flex items-baseline text-[1.375rem] font-bold leading-[1.2] tracking-[0.05em] text-[var(--md-on-surface)] max-md:text-xl\"\n style={{ fontFamily: 'var(--font-logo)' }}\n >\n {title}\n </h1>\n )}\n {subtitle && (\n <p className=\"m-0 text-[0.8125rem] font-normal text-[var(--md-on-surface-variant)] max-md:text-xs\">\n {subtitle}\n </p>\n )}\n </div>\n )}\n </div>\n {rightContent && (\n <div className=\"flex shrink-0 items-center gap-3 max-md:w-full max-md:flex-wrap max-md:justify-between\">\n {rightContent}\n </div>\n )}\n </div>\n </header>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n error?: string;\n fullWidth?: boolean;\n helperText?: string;\n label?: string;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n label,\n error,\n helperText,\n leftIcon,\n rightIcon,\n fullWidth = false,\n size = 'md',\n className,\n id,\n ...props\n },\n ref,\n ) => {\n const inputId = id || `input-${Math.random().toString(36).substring(2, 9)}`;\n const hasError = !!error;\n\n const sizeClassMap: Record<NonNullable<InputProps['size']>, string> = {\n sm: 'min-h-8 px-[var(--spacing-md)] py-[var(--spacing-sm)] text-[var(--font-size-sm)]',\n md: 'min-h-10 px-[var(--spacing-lg)] py-[var(--spacing-md)] text-[var(--font-size-base)]',\n lg: 'min-h-12 px-[var(--spacing-xl)] py-[var(--spacing-lg)] text-[var(--font-size-lg)]',\n };\n\n const combinedClass = cn(\n 'w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] font-inherit text-[var(--md-on-surface)] outline-none transition-[var(--transition-all)] placeholder:text-[var(--md-on-surface-variant)] placeholder:opacity-70 hover:not-disabled:not-focus:border-[var(--border-color-hover)] focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:bg-[var(--md-surface-container-high)] disabled:opacity-60',\n hasError &&\n 'border-[var(--md-error)] focus:border-[var(--md-error)] focus:[box-shadow:0_0_0_0.1875rem_rgba(186,26,26,0.2)]',\n sizeClassMap[size],\n // icon padding vem depois do sizeClassMap para não ser sobrescrito pelo px-* do tamanho\n leftIcon && 'pl-10',\n rightIcon && 'pr-10',\n className,\n );\n\n return (\n <div className={cn('flex flex-col gap-[var(--spacing-xs)]', fullWidth && 'w-full')}>\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={inputId}\n >\n {label}\n </label>\n )}\n <div className=\"group relative flex w-full items-center\">\n {leftIcon && (\n <span className=\"pointer-events-none absolute left-[var(--spacing-md)] z-[1] flex items-center justify-center text-[var(--md-on-surface-variant)] group-focus-within:text-[var(--md-primary)] [&_svg]:h-[1.125rem] [&_svg]:w-[1.125rem]\">\n {leftIcon}\n </span>\n )}\n <input\n ref={ref}\n aria-describedby={\n error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined\n }\n aria-invalid={hasError ? true : undefined}\n className={combinedClass}\n id={inputId}\n {...props}\n />\n {rightIcon && (\n <span className=\"pointer-events-none absolute right-[var(--spacing-md)] z-[1] flex items-center justify-center text-[var(--md-on-surface-variant)] group-focus-within:text-[var(--md-primary)] [&_svg]:h-[1.125rem] [&_svg]:w-[1.125rem]\">\n {rightIcon}\n </span>\n )}\n </div>\n {error && (\n <span\n className=\"mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-error)]\"\n id={`${inputId}-error`}\n role=\"alert\"\n >\n {error}\n </span>\n )}\n {helperText && !error && (\n <span\n className=\"mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\"\n id={`${inputId}-helper`}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n}\n\nexport const Container: React.FC<ContainerProps> = ({ size = 'lg', className, ...props }) => {\n const sizeClass = {\n sm: 'max-w-2xl',\n md: 'max-w-4xl',\n lg: 'max-w-6xl',\n xl: 'max-w-7xl',\n full: 'max-w-none',\n }[size];\n return <div className={cn('mx-auto w-full px-4', sizeClass, className)} {...props} />;\n};\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport const Stack: React.FC<StackProps> = ({ gap = 'md', className, ...props }) => {\n const gapClass = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n xl: 'gap-6',\n }[gap];\n return <div className={cn('flex flex-col', gapClass, className)} {...props} />;\n};\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: 1 | 2 | 3 | 4;\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport const Grid: React.FC<GridProps> = ({ cols = 2, gap = 'md', className, ...props }) => {\n const colsClass = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n }[cols];\n const gapClass = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n xl: 'gap-6',\n }[gap];\n return <div className={cn('grid', colsClass, gapClass, className)} {...props} />;\n};\n","import type React from 'react';\nimport { useEffect, useRef } from 'react';\n\nexport interface ModalProps {\n children: React.ReactNode;\n className?: string;\n closeOnOverlayClick?: boolean;\n isOpen: boolean;\n onClose: () => void;\n showCloseButton?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n subtitle?: string;\n title?: string | React.ReactNode;\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n subtitle,\n children,\n size = 'md',\n showCloseButton = true,\n closeOnOverlayClick = true,\n className = '',\n}) => {\n const dialogRef = useRef<HTMLDivElement | null>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (isOpen) {\n lastFocusedElementRef.current = document.activeElement as HTMLElement | null;\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus();\n }\n };\n }, [isOpen]);\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n const handleTabTrap = (e: KeyboardEvent) => {\n if (e.key !== 'Tab' || !dialogRef.current || !isOpen) {\n return;\n }\n\n const focusable = dialogRef.current.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.addEventListener('keydown', handleTabTrap);\n requestAnimationFrame(() => {\n const initialTarget =\n dialogRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) ?? dialogRef.current;\n initialTarget?.focus();\n });\n }\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.removeEventListener('keydown', handleTabTrap);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) {\n return null;\n }\n\n const handleOverlayClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n const handleOverlayKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n closeOnOverlayClick &&\n (e.key === 'Enter' || e.key === ' ') &&\n e.target === e.currentTarget\n ) {\n onClose();\n }\n };\n\n const sizeClassMap: Record<NonNullable<ModalProps['size']>, string> = {\n sm: 'max-w-[25rem]',\n md: 'max-w-[31.25rem]',\n lg: 'max-w-[43.75rem]',\n xl: 'max-w-[56.25rem]',\n full: 'max-h-[90vh] max-w-[90vw]',\n };\n const combinedClass = [\n 'relative z-[var(--z-index-modal)] m-auto flex w-full max-h-[90vh] max-w-full flex-col overflow-hidden rounded-[var(--border-radius-2xl)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] shadow-[var(--shadow-2xl)]',\n sizeClassMap[size],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n aria-labelledby={title ? 'modal-title' : undefined}\n aria-modal=\"true\"\n className=\"fixed inset-0 z-[var(--z-index-modal-backdrop)] flex min-h-[100dvh] items-center justify-center overflow-y-auto bg-black/50 p-[var(--spacing-lg)] backdrop-blur-[8px]\"\n onClick={handleOverlayClick}\n onKeyDown={handleOverlayKeyDown}\n role=\"dialog\"\n >\n <div className={combinedClass} ref={dialogRef} tabIndex={-1}>\n {(title || subtitle || showCloseButton) && (\n <div className=\"flex shrink-0 items-start justify-between gap-[var(--spacing-lg)] border-b border-[var(--md-outline-variant)] p-[var(--spacing-2xl)]\">\n {(title || subtitle) && (\n <div className=\"flex-1\">\n {title && (\n <h2\n className=\"mb-[var(--spacing-xs)] mt-0 text-[var(--font-size-2xl)] font-[var(--font-weight-semibold)] leading-[var(--line-height-tight)] text-[var(--md-on-surface)]\"\n id=\"modal-title\"\n >\n {title}\n </h2>\n )}\n {subtitle && (\n <p className=\"m-0 text-[var(--font-size-base)] leading-[var(--line-height-normal)] text-[var(--md-on-surface-variant)]\">\n {subtitle}\n </p>\n )}\n </div>\n )}\n {showCloseButton && (\n <button\n aria-label=\"Fechar modal\"\n className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-[var(--border-radius-md)] border-0 bg-[var(--md-surface-container-high)] text-[var(--md-on-surface)] transition-[var(--transition-all)] hover:bg-[color:color-mix(in_srgb,var(--md-error)_15%,var(--md-surface))] hover:text-[var(--md-error)]\"\n onClick={onClose}\n type=\"button\"\n >\n <svg\n fill=\"none\"\n className=\"h-5 w-5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <line x1=\"18\" x2=\"6\" y1=\"6\" y2=\"18\" />\n <line x1=\"6\" x2=\"18\" y1=\"6\" y2=\"18\" />\n </svg>\n </button>\n )}\n </div>\n )}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-x-hidden overflow-y-auto p-[var(--spacing-2xl)]\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {}\nexport const Sidebar: React.FC<SidebarProps> = ({ className, ...props }) => (\n <aside\n className={cn(\n 'h-full rounded-[var(--border-radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4',\n className,\n )}\n {...props}\n />\n);\n\nexport interface TopbarProps extends React.HTMLAttributes<HTMLElement> {}\nexport const Topbar: React.FC<TopbarProps> = ({ className, ...props }) => (\n <header\n className={cn(\n 'flex min-h-14 items-center justify-between border-b border-[var(--border-color)] bg-[var(--bg-secondary)] px-4',\n className,\n )}\n {...props}\n />\n);\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PaginationProps {\n currentPage: number;\n onPageChange: (page: number) => void;\n totalPages: number;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n}) => {\n if (totalPages <= 1) {\n return null;\n }\n\n const pages = Array.from({ length: totalPages }, (_, i) => i + 1);\n\n return (\n <nav aria-label=\"Paginação\" className=\"flex flex-wrap items-center gap-1\">\n <button\n className=\"rounded-[var(--border-radius-sm)] border border-[var(--border-color)] px-2 py-1 text-sm disabled:opacity-50\"\n disabled={currentPage === 1}\n onClick={() => onPageChange(Math.max(currentPage - 1, 1))}\n type=\"button\"\n >\n Anterior\n </button>\n {pages.map((page) => (\n <button\n className={cn(\n 'rounded-[var(--border-radius-sm)] border px-2.5 py-1 text-sm',\n page === currentPage\n ? 'border-[var(--md-primary)] bg-[var(--md-primary)] text-[var(--md-on-primary)]'\n : 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n )}\n key={page}\n onClick={() => onPageChange(page)}\n type=\"button\"\n >\n {page}\n </button>\n ))}\n <button\n className=\"rounded-[var(--border-radius-sm)] border border-[var(--border-color)] px-2 py-1 text-sm disabled:opacity-50\"\n disabled={currentPage === totalPages}\n onClick={() => onPageChange(Math.min(currentPage + 1, totalPages))}\n type=\"button\"\n >\n Próxima\n </button>\n </nav>\n );\n};\n","import type React from 'react';\n\nexport interface ParagraphProps extends React.HTMLAttributes<HTMLParagraphElement> {\n align?: 'left' | 'center' | 'right' | 'justify';\n as?: 'p' | 'span' | 'div';\n children: React.ReactNode;\n italic?: boolean;\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n weight?: 'light' | 'normal' | 'medium';\n}\n\nexport const Paragraph: React.FC<ParagraphProps> = ({\n as = 'p',\n size = 'md',\n weight = 'normal',\n align = 'left',\n muted = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<ParagraphProps['size']>, string> = {\n xs: 'text-[var(--font-size-xs)] leading-[var(--line-height-normal)]',\n sm: 'text-[var(--font-size-sm)] leading-[var(--line-height-normal)]',\n md: 'text-[var(--font-size-base)] leading-[var(--line-height-relaxed)]',\n lg: 'text-[var(--font-size-lg)] leading-[var(--line-height-loose)]',\n };\n const weightClassMap: Record<NonNullable<ParagraphProps['weight']>, string> = {\n light: 'font-[var(--font-weight-light)]',\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n };\n const alignClassMap: Record<NonNullable<ParagraphProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n };\n const combinedClass = [\n 'm-0 text-[var(--text-primary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n muted ? 'text-[var(--text-muted)]' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n actions?: React.ReactNode;\n subtitle?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const PageHeader: React.FC<PageHeaderProps> = ({\n title,\n subtitle,\n actions,\n className,\n ...props\n}) => {\n return (\n <header\n className={cn(\n 'grid gap-3 rounded-[var(--border-radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-5 shadow-[var(--shadow-sm)]',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"grid gap-1\">\n <h1 className=\"m-0 text-2xl font-bold text-[var(--text-primary)]\">{title}</h1>\n {subtitle && <p className=\"m-0 text-sm text-[var(--text-secondary)]\">{subtitle}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n </header>\n );\n};\n","import type React from 'react';\nimport { useEffect, useId, useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PopoverProps {\n children: React.ReactNode;\n content: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport const Popover: React.FC<PopoverProps> = ({ children, content, defaultOpen = false }) => {\n const [open, setOpen] = useState(defaultOpen);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const panelRef = useRef<HTMLDivElement | null>(null);\n const popoverId = useId();\n\n useEffect(() => {\n const onClickOutside = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', onClickOutside);\n return () => document.removeEventListener('mousedown', onClickOutside);\n }, []);\n\n useEffect(() => {\n if (!open || !panelRef.current) {\n return;\n }\n\n const focusable = panelRef.current.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n focusable?.focus();\n }, [open]);\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n if (open) {\n document.addEventListener('keydown', onKeyDown);\n }\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [open]);\n\n return (\n <div className=\"relative inline-flex\" ref={containerRef}>\n <button\n aria-controls={open ? popoverId : undefined}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n className=\"inline-flex\"\n onClick={() => setOpen((prev) => !prev)}\n ref={triggerRef}\n type=\"button\"\n >\n {children}\n </button>\n {open && (\n <div\n className={cn(\n 'absolute left-1/2 top-full z-30 mt-2 w-max -translate-x-1/2 rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-3 shadow-[var(--shadow-md)]',\n )}\n id={popoverId}\n ref={panelRef}\n role=\"dialog\"\n tabIndex={-1}\n >\n {content}\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n helperText?: string;\n label?: string;\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n ({ label, helperText, className, id, ...props }, ref) => {\n const inputId = id || `radio-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <label\n className={cn('inline-flex cursor-pointer items-start gap-2', className)}\n htmlFor={inputId}\n >\n <input\n ref={ref}\n className=\"mt-0.5 h-4 w-4 border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]\"\n id={inputId}\n type=\"radio\"\n {...props}\n />\n <span className=\"grid gap-0.5\">\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n {helperText && <span className=\"text-xs text-[var(--text-muted)]\">{helperText}</span>}\n </span>\n </label>\n );\n },\n);\n\nRadio.displayName = 'Radio';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SectionHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n actions?: React.ReactNode;\n subtitle?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n subtitle,\n actions,\n className,\n ...props\n}) => {\n return (\n <div className={cn('flex items-start justify-between gap-4', className)} {...props}>\n <div className=\"grid gap-1\">\n <h2 className=\"m-0 text-xl font-semibold text-[var(--text-primary)]\">{title}</h2>\n {subtitle && <p className=\"m-0 text-sm text-[var(--text-secondary)]\">{subtitle}</p>}\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n error?: string;\n helperText?: string;\n label?: string;\n options: SelectOption[];\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ label, helperText, error, options, size = 'md', className, id, ...props }, ref) => {\n const selectId = id || `select-${Math.random().toString(36).slice(2, 9)}`;\n\n const sizeClass = {\n sm: 'min-h-8 px-3 py-1.5 text-sm',\n md: 'min-h-10 px-3.5 py-2 text-base',\n lg: 'min-h-12 px-4 py-3 text-lg',\n }[size];\n\n return (\n <div className=\"grid gap-1\">\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={selectId}\n >\n {label}\n </label>\n )}\n <select\n ref={ref}\n aria-describedby={\n error ? `${selectId}-error` : helperText ? `${selectId}-helper` : undefined\n }\n aria-invalid={error ? true : undefined}\n className={cn(\n 'w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-on-surface)] outline-none transition focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60',\n error && 'border-[var(--md-error)]',\n sizeClass,\n className,\n )}\n id={selectId}\n {...props}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n {error ? (\n <span className=\"text-xs text-[var(--md-error)]\" id={`${selectId}-error`} role=\"alert\">\n {error}\n </span>\n ) : (\n helperText && (\n <span className=\"text-xs text-[var(--md-on-surface-variant)]\" id={`${selectId}-helper`}>\n {helperText}\n </span>\n )\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = 'Select';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n circle?: boolean;\n height?: string;\n width?: string;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n circle = false,\n width,\n height,\n className,\n style,\n ...props\n}) => {\n return (\n <div\n className={cn(\n 'animate-pulse bg-[var(--md-surface-container-high)]',\n circle ? 'rounded-full' : 'rounded-[var(--border-radius-sm)]',\n className,\n )}\n style={{ width, height, ...style }}\n {...props}\n />\n );\n};\n","import type React from 'react';\n\nexport interface SubtitleProps extends React.HTMLAttributes<HTMLParagraphElement> {\n align?: 'left' | 'center' | 'right';\n as?: 'p' | 'span' | 'div';\n children: React.ReactNode;\n italic?: boolean;\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n weight?: 'normal' | 'medium' | 'semibold';\n}\n\nexport const Subtitle: React.FC<SubtitleProps> = ({\n as = 'p',\n size = 'md',\n weight = 'normal',\n align = 'left',\n muted = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<SubtitleProps['size']>, string> = {\n xs: 'text-[var(--font-size-xs)]',\n sm: 'text-[var(--font-size-sm)]',\n md: 'text-[var(--font-size-base)]',\n lg: 'text-[var(--font-size-lg)]',\n };\n const weightClassMap: Record<NonNullable<SubtitleProps['weight']>, string> = {\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n semibold: 'font-[var(--font-weight-semibold)]',\n };\n const alignClassMap: Record<NonNullable<SubtitleProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n const combinedClass = [\n 'm-0 leading-[var(--line-height-normal)] text-[var(--text-secondary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n muted ? 'text-[var(--text-muted)] opacity-80' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SwitchProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onChange'\n> {\n checked?: boolean;\n label?: string;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ checked = false, onCheckedChange, label, className, ...props }, ref) => {\n return (\n <div className={cn('inline-flex items-center gap-2', className)}>\n <button\n ref={ref}\n aria-checked={checked}\n className={cn(\n 'relative inline-flex h-6 w-11 items-center rounded-full border transition focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]',\n checked\n ? 'border-[var(--md-primary)] bg-[var(--md-primary)]'\n : 'border-[var(--md-outline)] bg-[var(--md-surface-container-high)]',\n )}\n onClick={() => onCheckedChange?.(!checked)}\n role=\"switch\"\n type=\"button\"\n {...props}\n >\n <span\n className={cn(\n 'inline-block h-5 w-5 rounded-full bg-[var(--md-surface)] shadow transition',\n checked ? 'translate-x-5' : 'translate-x-0.5',\n )}\n />\n </button>\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n </div>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n onRemove?: () => void;\n}\n\nexport const Tag: React.FC<TagProps> = ({ className, children, onRemove, ...props }) => {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-[var(--border-radius-sm)] border border-[var(--border-color)] bg-[var(--bg-secondary)] px-2.5 py-1 text-xs text-[var(--text-secondary)]',\n className,\n )}\n {...props}\n >\n {children}\n {onRemove && (\n <button\n aria-label=\"Remover tag\"\n className=\"inline-flex h-4 w-4 items-center justify-center rounded-full text-[var(--text-muted)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)]\"\n onClick={onRemove}\n type=\"button\"\n >\n ×\n </button>\n )}\n </span>\n );\n};\n","import type React from 'react';\nimport { useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TabItem {\n content: React.ReactNode;\n id: string;\n label: string;\n}\n\nexport interface TabsProps {\n defaultTabId?: string;\n items: TabItem[];\n}\n\nexport const Tabs: React.FC<TabsProps> = ({ items, defaultTabId }) => {\n const [activeTab, setActiveTab] = useState(defaultTabId ?? items[0]?.id);\n const selected = items.find((item) => item.id === activeTab) ?? items[0];\n const selectedIndex = Math.max(\n 0,\n items.findIndex((item) => item.id === selected?.id),\n );\n\n const moveFocus = (nextIndex: number) => {\n const item = items[nextIndex];\n if (!item) {\n return;\n }\n setActiveTab(item.id);\n const tab = document.getElementById(`tab-${item.id}`);\n tab?.focus();\n };\n\n return (\n <div className=\"grid gap-3\">\n <div\n aria-orientation=\"horizontal\"\n className=\"inline-flex flex-wrap gap-1 rounded-[var(--border-radius-md)] bg-[var(--bg-tertiary)] p-1\"\n role=\"tablist\"\n >\n {items.map((item, index) => (\n <button\n aria-controls={`panel-${item.id}`}\n aria-selected={activeTab === item.id}\n className={cn(\n 'rounded-[var(--border-radius-sm)] px-3 py-1.5 text-sm transition',\n activeTab === item.id\n ? 'bg-[var(--bg-secondary)] text-[var(--text-primary)] shadow-[var(--shadow-xs)]'\n : 'text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n )}\n id={`tab-${item.id}`}\n key={item.id}\n onClick={() => setActiveTab(item.id)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n moveFocus((index + 1) % items.length);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n moveFocus((index - 1 + items.length) % items.length);\n } else if (e.key === 'Home') {\n e.preventDefault();\n moveFocus(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n moveFocus(items.length - 1);\n }\n }}\n role=\"tab\"\n tabIndex={index === selectedIndex ? 0 : -1}\n type=\"button\"\n >\n {item.label}\n </button>\n ))}\n </div>\n <div\n aria-labelledby={`tab-${selected?.id ?? ''}`}\n className=\"rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4\"\n id={`panel-${selected?.id ?? ''}`}\n role=\"tabpanel\"\n >\n {selected?.content}\n </div>\n </div>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {}\n\nexport const Table: React.FC<TableProps> = ({ className, children, ...props }) => {\n return (\n <div className=\"overflow-x-auto rounded-[var(--border-radius-md)] border border-[var(--border-color)]\">\n <table\n className={cn(\n 'w-full min-w-[36rem] border-collapse bg-[var(--bg-secondary)] text-left',\n className,\n )}\n {...props}\n >\n {children}\n </table>\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: string;\n helperText?: string;\n label?: string;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ label, helperText, error, className, id, ...props }, ref) => {\n const textareaId = id || `textarea-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"grid gap-1\">\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={textareaId}\n >\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n aria-describedby={\n error ? `${textareaId}-error` : helperText ? `${textareaId}-helper` : undefined\n }\n aria-invalid={error ? true : undefined}\n className={cn(\n 'min-h-24 w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-2 text-[var(--md-on-surface)] outline-none transition placeholder:text-[var(--md-on-surface-variant)] focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60',\n error &&\n 'border-[var(--md-error)] focus:border-[var(--md-error)] focus:[box-shadow:0_0_0_0.1875rem_rgba(186,26,26,0.2)]',\n className,\n )}\n id={textareaId}\n {...props}\n />\n {error ? (\n <span className=\"text-xs text-[var(--md-error)]\" id={`${textareaId}-error`} role=\"alert\">\n {error}\n </span>\n ) : (\n helperText && (\n <span\n className=\"text-xs text-[var(--md-on-surface-variant)]\"\n id={`${textareaId}-helper`}\n >\n {helperText}\n </span>\n )\n )}\n </div>\n );\n },\n);\n\nTextarea.displayName = 'Textarea';\n","import type React from 'react';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ToastProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n id?: string;\n description?: React.ReactNode;\n onDismiss?: () => void;\n title: React.ReactNode;\n tone?: 'info' | 'success' | 'warning' | 'error';\n}\n\nexport const Toast: React.FC<ToastProps> = ({\n tone = 'info',\n title,\n description,\n onDismiss,\n className,\n ...props\n}) => {\n const toneClass = {\n info: 'border-[var(--info-color)]/40',\n success: 'border-[var(--success-color)]/40',\n warning: 'border-[var(--warning-color)]/40',\n error: 'border-[var(--md-error)]/40',\n }[tone];\n const liveMode = tone === 'error' || tone === 'warning' ? 'assertive' : 'polite';\n const role = tone === 'error' || tone === 'warning' ? 'alert' : 'status';\n\n return (\n <div\n className={cn(\n 'w-[22rem] rounded-[var(--border-radius-md)] border bg-[var(--bg-secondary)] p-3 shadow-[var(--shadow-lg)]',\n toneClass,\n className,\n )}\n aria-atomic=\"true\"\n aria-live={liveMode}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n onDismiss?.();\n }\n }}\n role={role}\n tabIndex={0}\n {...props}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"m-0 text-sm font-semibold text-[var(--text-primary)]\">{title}</p>\n {onDismiss && (\n <button\n aria-label=\"Fechar notificação\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-[var(--border-radius-sm)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]\"\n onClick={onDismiss}\n type=\"button\"\n >\n <span aria-hidden>×</span>\n </button>\n )}\n </div>\n {description && <p className=\"mt-1 text-sm text-[var(--text-secondary)]\">{description}</p>}\n </div>\n );\n};\n\ninterface ToastContextValue {\n dismissToast: (id: string) => void;\n pushToast: (toast: Omit<ToastProps, 'id'> & { id?: string }) => void;\n toasts: Array<ToastProps & { id: string }>;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n durationMs?: number;\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({ children, durationMs = 4000 }) => {\n const [toasts, setToasts] = useState<Array<ToastProps & { id: string }>>([]);\n const timeoutIdsRef = useRef<Map<string, number>>(new Map());\n\n const dismissToast = useCallback((id: string) => {\n const timeoutId = timeoutIdsRef.current.get(id);\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n timeoutIdsRef.current.delete(id);\n }\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const pushToast = useCallback(\n (toast: Omit<ToastProps, 'id'> & { id?: string }) => {\n const id = toast.id ?? `toast-${Math.random().toString(36).slice(2, 9)}`;\n setToasts((prev) => [...prev, { ...toast, id }]);\n const timeoutId = window.setTimeout(() => dismissToast(id), durationMs);\n timeoutIdsRef.current.set(id, timeoutId);\n },\n [dismissToast, durationMs],\n );\n\n useEffect(() => {\n const ids = timeoutIdsRef.current;\n return () => {\n ids.forEach((timeoutId) => window.clearTimeout(timeoutId));\n ids.clear();\n };\n }, []);\n\n const value = useMemo(\n () => ({ toasts, pushToast, dismissToast }),\n [toasts, pushToast, dismissToast],\n );\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <ToastViewport />\n </ToastContext.Provider>\n );\n};\n\nexport const useToast = (): ToastContextValue => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used inside ToastProvider');\n }\n return context;\n};\n\nexport const ToastViewport: React.FC = () => {\n const context = useContext(ToastContext);\n if (!context || context.toasts.length === 0) {\n return null;\n }\n return (\n <div\n aria-label=\"Notificações\"\n className=\"pointer-events-none fixed bottom-4 right-4 z-[1200] grid gap-2\"\n role=\"region\"\n >\n {context.toasts.map((toast) => (\n <Toast\n key={toast.id}\n {...toast}\n className=\"pointer-events-auto\"\n onDismiss={() => context.dismissToast(toast.id)}\n />\n ))}\n </div>\n );\n};\n","import type React from 'react';\n\nexport interface TitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n align?: 'left' | 'center' | 'right';\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n children: React.ReactNode;\n gradient?: boolean;\n italic?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold';\n}\n\nexport const Title: React.FC<TitleProps> = ({\n as = 'h1',\n size = '2xl',\n weight = 'bold',\n align = 'left',\n gradient = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<TitleProps['size']>, string> = {\n xs: 'text-[var(--font-size-sm)]',\n sm: 'text-[var(--font-size-base)]',\n md: 'text-[var(--font-size-lg)]',\n lg: 'text-[var(--font-size-xl)]',\n xl: 'text-[var(--font-size-2xl)]',\n '2xl': 'text-[var(--font-size-3xl)]',\n '3xl': 'text-[var(--font-size-4xl)]',\n '4xl': 'text-[3rem]',\n };\n const weightClassMap: Record<NonNullable<TitleProps['weight']>, string> = {\n light: 'font-[var(--font-weight-light)]',\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n semibold: 'font-[var(--font-weight-semibold)]',\n bold: 'font-[var(--font-weight-bold)]',\n extrabold: 'font-extrabold',\n };\n const alignClassMap: Record<NonNullable<TitleProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n const gradientClass = gradient\n ? 'bg-[linear-gradient(135deg,var(--text-primary)_0%,var(--primary-color)_50%,var(--secondary-color)_100%)] bg-clip-text text-transparent'\n : '';\n const combinedClass = [\n 'm-0 leading-[var(--line-height-tight)] text-[var(--text-primary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n gradientClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n","import type React from 'react';\nimport { isValidElement, useId, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TooltipProps {\n children: React.ReactNode;\n content: React.ReactNode;\n side?: 'top' | 'bottom';\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({ children, content, side = 'top' }) => {\n const [open, setOpen] = useState(false);\n const tooltipId = useId();\n const sideClass =\n side === 'top'\n ? 'bottom-full mb-2 left-1/2 -translate-x-1/2'\n : 'top-full mt-2 left-1/2 -translate-x-1/2';\n\n const triggerProps = {\n 'aria-describedby': tooltipId,\n onBlur: () => setOpen(false),\n onFocus: () => setOpen(true),\n onKeyDown: (event: React.KeyboardEvent) => {\n if (event.key === 'Escape') {\n setOpen(false);\n }\n },\n onMouseEnter: () => setOpen(true),\n onMouseLeave: () => setOpen(false),\n };\n\n const trigger = isValidElement(children) ? (\n <span className=\"inline-flex\" {...triggerProps}>\n {children}\n </span>\n ) : (\n <span className=\"inline-flex\" tabIndex={0} {...triggerProps}>\n {children}\n </span>\n );\n\n return (\n <span className=\"relative inline-flex\">\n {trigger}\n <span\n aria-hidden={!open}\n className={cn(\n 'pointer-events-none absolute z-20 whitespace-nowrap rounded bg-[var(--brand-cinza-escuro)] px-2 py-1 text-xs text-white shadow-[var(--shadow-sm)] transition',\n open ? 'opacity-100' : 'opacity-0',\n sideClass,\n )}\n id={tooltipId}\n role=\"tooltip\"\n >\n {content}\n </span>\n </span>\n );\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\n\nexport type Theme = 'light' | 'dark';\n\ninterface ThemeContextType {\n theme: Theme;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\ninterface ThemeProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n}\n\nexport const ThemeProvider = ({ children, defaultTheme = 'light' }: ThemeProviderProps) => {\n const [theme, setTheme] = useState<Theme>(() => {\n if (typeof window === 'undefined') {\n return defaultTheme;\n }\n const saved = window.localStorage.getItem('theme');\n return (saved as Theme) || defaultTheme;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n window.localStorage.setItem('theme', theme);\n document.documentElement.setAttribute('data-theme', theme);\n }, [theme]);\n\n const toggleTheme = (): void => {\n setTheme((prev) => (prev === 'dark' ? 'light' : 'dark'));\n };\n\n return <ThemeContext.Provider value={{ theme, toggleTheme }}>{children}</ThemeContext.Provider>;\n};\n"],"names":["cn","inputs","twMerge","clsx","Accordion","items","defaultOpenId","openId","setOpenId","useState","rootRef","useRef","jsx","item","isOpen","triggerId","panelId","jsxs","event","buttons","currentIndex","btn","_a","_b","_c","_d","prev","Breadcrumb","separator","className","props","index","isLast","Combobox","label","helperText","error","options","value","onChange","placeholder","disabled","query","setQuery","setIsOpen","activeIndex","setActiveIndex","containerRef","inputRef","listRef","selectedOption","o","filtered","displayValue","useEffect","handleClickOutside","e","handleSelect","option","handleKeyDown","i","inputId","listId","FileUpload","accept","multiple","maxSizeBytes","isDragging","setIsDragging","sizeError","setSizeError","handleFiles","fileList","files","oversized","f","mb","handleDragOver","handleDragLeave","handleDrop","displayError","NumberInput","React","size","min","max","step","id","defaultValue","ref","hasError","sizeClassMap","buttonSizeMap","numValue","handleDecrement","next","handleIncrement","handleChange","raw","Stepper","currentStep","orientation","getStatus","isHorizontal","status","Button","variant","compact","fullWidth","isLoading","leftIcon","rightIcon","children","palette","style","baseClass","focusClass","disabledClass","fullWidthClass","offWhiteBorderClass","variantClassMap","iconSizeClassMap","paletteVars","paletteStyle","combinedClass","Alert","title","tone","toneClass","Badge","sizeClass","Card","padding","hoverable","paddingClassMap","hoverableClass","Checkbox","Chip","selected","Divider","EmptyState","icon","description","action","Footer","poweredByText","logoSrc","logoAlt","logoFallbackText","logoVisible","setLogoVisible","_e","detectTheme","Header","logoDarkSrc","subtitle","theme","onLogoClick","rightContent","isScrolled","setIsScrolled","resolvedTheme","setResolvedTheme","logoSrcResolved","handleScroll","syncTheme","observer","handleClick","Input","Container","Stack","gap","gapClass","Grid","cols","colsClass","Modal","onClose","showCloseButton","closeOnOverlayClick","dialogRef","lastFocusedElementRef","handleEscape","handleTabTrap","focusable","first","last","active","initialTarget","handleOverlayClick","handleOverlayKeyDown","Sidebar","Topbar","Pagination","currentPage","totalPages","onPageChange","pages","_","page","Paragraph","as","weight","align","muted","italic","Component","weightClassMap","alignClassMap","PageHeader","actions","Popover","content","defaultOpen","open","setOpen","triggerRef","panelRef","popoverId","useId","onClickOutside","onKeyDown","Radio","SectionHeader","Select","selectId","Skeleton","circle","width","height","Subtitle","Switch","checked","onCheckedChange","Tag","onRemove","Tabs","defaultTabId","activeTab","setActiveTab","selectedIndex","moveFocus","nextIndex","tab","Table","Textarea","textareaId","Toast","onDismiss","liveMode","role","ToastContext","createContext","ToastProvider","durationMs","toasts","setToasts","timeoutIdsRef","dismissToast","useCallback","timeoutId","toast","pushToast","ids","useMemo","ToastViewport","useToast","context","useContext","Title","gradient","gradientClass","Tooltip","side","tooltipId","sideClass","triggerProps","trigger","isValidElement","ThemeContext","useTheme","ThemeProvider","defaultTheme","setTheme","toggleTheme"],"mappings":"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"}
|