@sbkbs/ui 1.0.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/MIGRATION.md +96 -0
  3. package/README.md +221 -115
  4. package/dist/assets/favicon/apple-touch-icon.png +0 -0
  5. package/dist/assets/favicon/favicon-96x96.png +0 -0
  6. package/dist/assets/favicon/favicon.ico +0 -0
  7. package/dist/assets/favicon/favicon.svg +1 -0
  8. package/dist/assets/favicon/site.webmanifest +21 -0
  9. package/dist/assets/favicon/web-app-manifest-192x192.png +0 -0
  10. package/dist/assets/favicon/web-app-manifest-512x512.png +0 -0
  11. package/dist/base.css +38 -0
  12. package/dist/components/Accordion/Accordion.d.ts +13 -1
  13. package/dist/components/Accordion/Accordion.js +100 -52
  14. package/dist/components/Accordion/Accordion.js.map +1 -1
  15. package/dist/components/Alert/Alert.d.ts +17 -4
  16. package/dist/components/Alert/Alert.js +64 -20
  17. package/dist/components/Alert/Alert.js.map +1 -1
  18. package/dist/components/Avatar/Avatar.d.ts +12 -6
  19. package/dist/components/Avatar/Avatar.js +66 -0
  20. package/dist/components/Avatar/Avatar.js.map +1 -0
  21. package/dist/components/Badge/Badge.d.ts +11 -2
  22. package/dist/components/Badge/Badge.js +42 -30
  23. package/dist/components/Badge/Badge.js.map +1 -1
  24. package/dist/components/Breadcrumb/Breadcrumb.d.ts +5 -2
  25. package/dist/components/Breadcrumb/Breadcrumb.js +23 -16
  26. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  27. package/dist/components/Button/Button.d.ts +10 -8
  28. package/dist/components/Button/Button.js +73 -114
  29. package/dist/components/Button/Button.js.map +1 -1
  30. package/dist/components/Card/Card.d.ts +33 -3
  31. package/dist/components/Card/Card.js +91 -30
  32. package/dist/components/Card/Card.js.map +1 -1
  33. package/dist/components/Checkbox/Checkbox.d.ts +4 -1
  34. package/dist/components/Checkbox/Checkbox.js +32 -31
  35. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  36. package/dist/components/Chip/Chip.d.ts +7 -1
  37. package/dist/components/Chip/Chip.js +19 -9
  38. package/dist/components/Chip/Chip.js.map +1 -1
  39. package/dist/components/Combobox/Combobox.d.ts +10 -2
  40. package/dist/components/Combobox/Combobox.js +146 -133
  41. package/dist/components/Combobox/Combobox.js.map +1 -1
  42. package/dist/components/Divider/Divider.d.ts +7 -1
  43. package/dist/components/Divider/Divider.js +28 -12
  44. package/dist/components/Divider/Divider.js.map +1 -1
  45. package/dist/components/DropdownMenu/DropdownMenu.d.ts +33 -0
  46. package/dist/components/DropdownMenu/DropdownMenu.js +147 -0
  47. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  48. package/dist/components/EmptyState/EmptyState.d.ts +7 -1
  49. package/dist/components/EmptyState/EmptyState.js +28 -19
  50. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  51. package/dist/components/Field/Field.d.ts +21 -0
  52. package/dist/components/Field/Field.js +35 -0
  53. package/dist/components/Field/Field.js.map +1 -0
  54. package/dist/components/FileUpload/FileUpload.d.ts +9 -2
  55. package/dist/components/FileUpload/FileUpload.js +128 -102
  56. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  57. package/dist/components/Footer/Footer.d.ts +19 -6
  58. package/dist/components/Footer/Footer.js +47 -115
  59. package/dist/components/Footer/Footer.js.map +1 -1
  60. package/dist/components/GlassPanel/GlassPanel.d.ts +18 -0
  61. package/dist/components/GlassPanel/GlassPanel.js +39 -0
  62. package/dist/components/GlassPanel/GlassPanel.js.map +1 -0
  63. package/dist/components/Header/Header.d.ts +25 -14
  64. package/dist/components/Header/Header.js +88 -148
  65. package/dist/components/Header/Header.js.map +1 -1
  66. package/dist/components/Highlight/Highlight.d.ts +13 -0
  67. package/dist/components/Highlight/Highlight.js +18 -0
  68. package/dist/components/Highlight/Highlight.js.map +1 -0
  69. package/dist/components/Icon/Icon.d.ts +21 -0
  70. package/dist/components/Icon/Icon.js +31 -0
  71. package/dist/components/Icon/Icon.js.map +1 -0
  72. package/dist/components/IconButton/IconButton.d.ts +12 -0
  73. package/dist/components/IconButton/IconButton.js +49 -0
  74. package/dist/components/IconButton/IconButton.js.map +1 -0
  75. package/dist/components/Input/Input.d.ts +3 -2
  76. package/dist/components/Input/Input.js +51 -69
  77. package/dist/components/Input/Input.js.map +1 -1
  78. package/dist/components/Layout/Layout.d.ts +2 -0
  79. package/dist/components/Layout/Layout.js +24 -18
  80. package/dist/components/Layout/Layout.js.map +1 -1
  81. package/dist/components/Logo/Logo.d.ts +27 -0
  82. package/dist/components/Logo/Logo.js +107 -0
  83. package/dist/components/Logo/Logo.js.map +1 -0
  84. package/dist/components/MiniCard/MiniCard.d.ts +21 -0
  85. package/dist/components/MiniCard/MiniCard.js +90 -0
  86. package/dist/components/MiniCard/MiniCard.js.map +1 -0
  87. package/dist/components/Modal/Modal.d.ts +16 -3
  88. package/dist/components/Modal/Modal.js +124 -93
  89. package/dist/components/Modal/Modal.js.map +1 -1
  90. package/dist/components/Navigation/Navigation.d.ts +1 -0
  91. package/dist/components/Navigation/Navigation.js +14 -14
  92. package/dist/components/Navigation/Navigation.js.map +1 -1
  93. package/dist/components/NumberInput/NumberInput.d.ts +5 -2
  94. package/dist/components/NumberInput/NumberInput.js +98 -128
  95. package/dist/components/NumberInput/NumberInput.js.map +1 -1
  96. package/dist/components/PageHeader/PageHeader.d.ts +8 -1
  97. package/dist/components/PageHeader/PageHeader.js +26 -25
  98. package/dist/components/PageHeader/PageHeader.js.map +1 -1
  99. package/dist/components/Pagination/Pagination.d.ts +15 -2
  100. package/dist/components/Pagination/Pagination.js +68 -34
  101. package/dist/components/Pagination/Pagination.js.map +1 -1
  102. package/dist/components/Paragraph/Paragraph.d.ts +8 -2
  103. package/dist/components/Paragraph/Paragraph.js +39 -36
  104. package/dist/components/Paragraph/Paragraph.js.map +1 -1
  105. package/dist/components/Popover/Popover.d.ts +12 -1
  106. package/dist/components/Popover/Popover.js +49 -37
  107. package/dist/components/Popover/Popover.js.map +1 -1
  108. package/dist/components/ProgressBar/ProgressBar.d.ts +12 -6
  109. package/dist/components/ProgressBar/ProgressBar.js +71 -0
  110. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  111. package/dist/components/Radio/Radio.d.ts +2 -1
  112. package/dist/components/Radio/Radio.js +27 -31
  113. package/dist/components/Radio/Radio.js.map +1 -1
  114. package/dist/components/SectionHeader/SectionHeader.d.ts +6 -1
  115. package/dist/components/SectionHeader/SectionHeader.js +14 -12
  116. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  117. package/dist/components/Select/Select.d.ts +6 -2
  118. package/dist/components/Select/Select.js +47 -35
  119. package/dist/components/Select/Select.js.map +1 -1
  120. package/dist/components/SideNav/SideNav.d.ts +55 -0
  121. package/dist/components/SideNav/SideNav.js +141 -0
  122. package/dist/components/SideNav/SideNav.js.map +1 -0
  123. package/dist/components/Skeleton/Skeleton.d.ts +12 -1
  124. package/dist/components/Skeleton/Skeleton.js +33 -18
  125. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  126. package/dist/components/Spinner/Spinner.d.ts +11 -3
  127. package/dist/components/Spinner/Spinner.js +57 -0
  128. package/dist/components/Spinner/Spinner.js.map +1 -0
  129. package/dist/components/Stepper/Stepper.d.ts +1 -1
  130. package/dist/components/Stepper/Stepper.js +41 -53
  131. package/dist/components/Stepper/Stepper.js.map +1 -1
  132. package/dist/components/Subtitle/Subtitle.d.ts +9 -3
  133. package/dist/components/Subtitle/Subtitle.js +29 -35
  134. package/dist/components/Subtitle/Subtitle.js.map +1 -1
  135. package/dist/components/Switch/Switch.d.ts +2 -1
  136. package/dist/components/Switch/Switch.js +45 -33
  137. package/dist/components/Switch/Switch.js.map +1 -1
  138. package/dist/components/Table/Table.d.ts +19 -1
  139. package/dist/components/Table/Table.js +48 -11
  140. package/dist/components/Table/Table.js.map +1 -1
  141. package/dist/components/Tabs/Tabs.d.ts +16 -2
  142. package/dist/components/Tabs/Tabs.js +80 -44
  143. package/dist/components/Tabs/Tabs.js.map +1 -1
  144. package/dist/components/Tag/Tag.d.ts +8 -1
  145. package/dist/components/Tag/Tag.js +27 -12
  146. package/dist/components/Tag/Tag.js.map +1 -1
  147. package/dist/components/Textarea/Textarea.d.ts +3 -1
  148. package/dist/components/Textarea/Textarea.js +36 -40
  149. package/dist/components/Textarea/Textarea.js.map +1 -1
  150. package/dist/components/Title/Title.d.ts +9 -3
  151. package/dist/components/Title/Title.js +42 -42
  152. package/dist/components/Title/Title.js.map +1 -1
  153. package/dist/components/Toast/Toast.d.ts +39 -11
  154. package/dist/components/Toast/Toast.js +130 -76
  155. package/dist/components/Toast/Toast.js.map +1 -1
  156. package/dist/components/Tooltip/Tooltip.d.ts +12 -2
  157. package/dist/components/Tooltip/Tooltip.js +50 -32
  158. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  159. package/dist/components/Typography/weight.d.ts +9 -0
  160. package/dist/components/Typography/weight.js +5 -0
  161. package/dist/components/Typography/weight.js.map +1 -0
  162. package/dist/fonts.css +8 -0
  163. package/dist/index.cjs +2 -0
  164. package/dist/index.cjs.map +1 -0
  165. package/dist/index.d.ts +55 -43
  166. package/dist/index.js +118 -83
  167. package/dist/index.js.map +1 -1
  168. package/dist/reset.css +9 -0
  169. package/dist/styles.css +1 -0
  170. package/dist/tailwind.css +153 -0
  171. package/dist/theme/ThemeProvider.d.ts +21 -3
  172. package/dist/theme/ThemeProvider.js +57 -18
  173. package/dist/theme/ThemeProvider.js.map +1 -1
  174. package/dist/theme/tokens.d.ts +43 -0
  175. package/dist/theme/tokens.js +39 -0
  176. package/dist/theme/tokens.js.map +1 -0
  177. package/dist/theme.css +327 -294
  178. package/dist/tokens.css +327 -0
  179. package/dist/utils/cn.d.ts +2 -2
  180. package/dist/utils/cn.js +19 -4
  181. package/dist/utils/cn.js.map +1 -1
  182. package/dist/utils/styles.d.ts +37 -0
  183. package/dist/utils/styles.js +35 -0
  184. package/dist/utils/styles.js.map +1 -0
  185. package/package.json +140 -117
  186. package/dist/components/Accordion/Accordion.stories.d.ts +0 -7
  187. package/dist/components/Alert/Alert.stories.d.ts +0 -8
  188. package/dist/components/Badge/Badge.stories.d.ts +0 -8
  189. package/dist/components/Breadcrumb/Breadcrumb.stories.d.ts +0 -8
  190. package/dist/components/Button/Button.stories.d.ts +0 -7
  191. package/dist/components/Card/Card.stories.d.ts +0 -8
  192. package/dist/components/Checkbox/Checkbox.stories.d.ts +0 -7
  193. package/dist/components/Combobox/Combobox.stories.d.ts +0 -9
  194. package/dist/components/Feedback/Feedback.stories.d.ts +0 -5
  195. package/dist/components/FileUpload/FileUpload.stories.d.ts +0 -10
  196. package/dist/components/Input/Input.stories.d.ts +0 -9
  197. package/dist/components/Modal/Modal.stories.d.ts +0 -8
  198. package/dist/components/NumberInput/NumberInput.stories.d.ts +0 -8
  199. package/dist/components/Pagination/Pagination.stories.d.ts +0 -8
  200. package/dist/components/Radio/Radio.stories.d.ts +0 -7
  201. package/dist/components/Select/Select.stories.d.ts +0 -8
  202. package/dist/components/Stepper/Stepper.stories.d.ts +0 -8
  203. package/dist/components/Switch/Switch.stories.d.ts +0 -8
  204. package/dist/components/Tabs/Tabs.stories.d.ts +0 -8
  205. package/dist/components/Textarea/Textarea.stories.d.ts +0 -7
  206. package/dist/components/Toast/Toast.stories.d.ts +0 -8
  207. package/dist/oficios-ui.css +0 -1
  208. package/dist/oficios-ui.umd.cjs +0 -2
  209. package/dist/oficios-ui.umd.cjs.map +0 -1
  210. package/dist/sbk-icon.png +0 -0
@@ -1,78 +1,60 @@
1
- import { jsxs as d, jsx as a } from "react/jsx-runtime";
2
- import g from "react";
3
- import { cn as c } from "../../utils/cn.js";
4
- const b = g.forwardRef(
1
+ import { jsx as e, jsxs as x } from "react/jsx-runtime";
2
+ import N, { useId as w } from "react";
3
+ import { cn as i } from "../../utils/cn.js";
4
+ import { describedBy as y, fieldSize as g, fieldControl as h } from "../../utils/styles.js";
5
+ import { Field as z } from "../Field/Field.js";
6
+ const m = "pointer-events-none absolute z-[1] flex items-center text-sbk-fg-muted group-focus-within:text-sbk-primary [&_svg]:size-[1.125rem]", j = N.forwardRef(
5
7
  ({
6
- label: i,
7
- error: e,
8
- helperText: s,
8
+ label: n,
9
+ error: s,
10
+ helperText: l,
9
11
  leftIcon: t,
10
- rightIcon: o,
11
- fullWidth: l = !1,
12
- size: m = "md",
13
- className: v,
14
- id: p,
15
- ...f
16
- }, u) => {
17
- const r = p || `input-${Math.random().toString(36).substring(2, 9)}`, n = !!e, x = c(
18
- "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",
19
- n && "border-[var(--md-error)] focus:border-[var(--md-error)] focus:[box-shadow:0_0_0_0.1875rem_rgba(186,26,26,0.2)]",
12
+ rightIcon: a,
13
+ fullWidth: o = !1,
14
+ size: p = "md",
15
+ className: c,
16
+ id: f,
17
+ required: d,
18
+ ...u
19
+ }, b) => {
20
+ const v = w(), r = f ?? v;
21
+ return /* @__PURE__ */ e(
22
+ z,
20
23
  {
21
- sm: "min-h-8 px-[var(--spacing-md)] py-[var(--spacing-sm)] text-[var(--font-size-sm)]",
22
- md: "min-h-10 px-[var(--spacing-lg)] py-[var(--spacing-md)] text-[var(--font-size-base)]",
23
- lg: "min-h-12 px-[var(--spacing-xl)] py-[var(--spacing-lg)] text-[var(--font-size-lg)]"
24
- }[m],
25
- // icon padding vem depois do sizeClassMap para não ser sobrescrito pelo px-* do tamanho
26
- t && "pl-10",
27
- o && "pr-10",
28
- v
24
+ className: i(o && "w-full"),
25
+ error: s,
26
+ helperText: l,
27
+ id: r,
28
+ label: n,
29
+ required: d,
30
+ children: /* @__PURE__ */ x("div", { className: "group relative flex w-full items-center", children: [
31
+ t && /* @__PURE__ */ e("span", { className: i(m, "left-3"), children: t }),
32
+ /* @__PURE__ */ e(
33
+ "input",
34
+ {
35
+ ref: b,
36
+ "aria-describedby": y(r, s, l),
37
+ "aria-invalid": s ? !0 : void 0,
38
+ className: i(
39
+ h,
40
+ g[p],
41
+ t && "pl-10",
42
+ a && "pr-10",
43
+ c
44
+ ),
45
+ id: r,
46
+ required: d,
47
+ ...u
48
+ }
49
+ ),
50
+ a && /* @__PURE__ */ e("span", { className: i(m, "right-3"), children: a })
51
+ ] })
52
+ }
29
53
  );
30
- return /* @__PURE__ */ d("div", { className: c("flex flex-col gap-[var(--spacing-xs)]", l && "w-full"), children: [
31
- i && /* @__PURE__ */ a(
32
- "label",
33
- {
34
- className: "text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]",
35
- htmlFor: r,
36
- children: i
37
- }
38
- ),
39
- /* @__PURE__ */ d("div", { className: "group relative flex w-full items-center", children: [
40
- t && /* @__PURE__ */ a("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: t }),
41
- /* @__PURE__ */ a(
42
- "input",
43
- {
44
- ref: u,
45
- "aria-describedby": e ? `${r}-error` : s ? `${r}-helper` : void 0,
46
- "aria-invalid": n ? !0 : void 0,
47
- className: x,
48
- id: r,
49
- ...f
50
- }
51
- ),
52
- o && /* @__PURE__ */ a("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 })
53
- ] }),
54
- e && /* @__PURE__ */ a(
55
- "span",
56
- {
57
- className: "mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-error)]",
58
- id: `${r}-error`,
59
- role: "alert",
60
- children: e
61
- }
62
- ),
63
- s && !e && /* @__PURE__ */ a(
64
- "span",
65
- {
66
- className: "mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]",
67
- id: `${r}-helper`,
68
- children: s
69
- }
70
- )
71
- ] });
72
54
  }
73
55
  );
74
- b.displayName = "Input";
56
+ j.displayName = "Input";
75
57
  export {
76
- b as Input
58
+ j as Input
77
59
  };
78
60
  //# sourceMappingURL=Input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["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"],"names":["Input","React","label","error","helperText","leftIcon","rightIcon","fullWidth","size","className","id","props","ref","inputId","hasError","combinedClass","cn","jsx","jsxs"],"mappings":";;;AAaO,MAAMA,IAAQC,EAAM;AAAA,EACzB,CACE;AAAA,IACE,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,MAAAC,IAAO;AAAA,IACP,WAAAC;AAAA,IACA,IAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAUH,KAAM,SAAS,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC,IACnEI,IAAW,CAAC,CAACX,GAQbY,IAAgBC;AAAA,MACpB;AAAA,MACAF,KACE;AAAA,MATkE;AAAA,QACpE,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA,EAOSN,CAAI;AAAA;AAAA,MAEjBH,KAAY;AAAA,MACZC,KAAa;AAAA,MACbG;AAAA,IAAA;AAGF,6BACG,OAAA,EAAI,WAAWO,EAAG,yCAAyCT,KAAa,QAAQ,GAC9E,UAAA;AAAA,MAAAL,KACC,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAASJ;AAAA,UAER,UAAAX;AAAA,QAAA;AAAA,MAAA;AAAA,MAGL,gBAAAgB,EAAC,OAAA,EAAI,WAAU,2CACZ,UAAA;AAAA,QAAAb,KACC,gBAAAY,EAAC,QAAA,EAAK,WAAU,0NACb,UAAAZ,GACH;AAAA,QAEF,gBAAAY;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAAL;AAAA,YACA,oBACET,IAAQ,GAAGU,CAAO,WAAWT,IAAa,GAAGS,CAAO,YAAY;AAAA,YAElE,gBAAcC,IAAW,KAAO;AAAA,YAChC,WAAWC;AAAA,YACX,IAAIF;AAAA,YACH,GAAGF;AAAA,UAAA;AAAA,QAAA;AAAA,QAELL,KACC,gBAAAW,EAAC,QAAA,EAAK,WAAU,2NACb,UAAAX,EAAA,CACH;AAAA,MAAA,GAEJ;AAAA,MACCH,KACC,gBAAAc;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,IAAI,GAAGJ,CAAO;AAAA,UACd,MAAK;AAAA,UAEJ,UAAAV;AAAA,QAAA;AAAA,MAAA;AAAA,MAGJC,KAAc,CAACD,KACd,gBAAAc;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,IAAI,GAAGJ,CAAO;AAAA,UAEb,UAAAT;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GAEJ;AAAA,EAEJ;AACF;AAEAJ,EAAM,cAAc;"}
1
+ {"version":3,"file":"Input.js","sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["import React, { useId } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { describedBy, fieldControl, fieldSize, type FieldSize } from '../../utils/styles';\r\nimport { Field } from '../Field/Field';\r\n\r\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\r\n error?: string;\r\n fullWidth?: boolean;\r\n helperText?: string;\r\n label?: React.ReactNode;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n size?: FieldSize;\r\n}\r\n\r\nconst iconSlot =\r\n 'pointer-events-none absolute z-[1] flex items-center text-sbk-fg-muted group-focus-within:text-sbk-primary [&_svg]:size-[1.125rem]';\r\n\r\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n label,\r\n error,\r\n helperText,\r\n leftIcon,\r\n rightIcon,\r\n fullWidth = false,\r\n size = 'md',\r\n className,\r\n id,\r\n required,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const autoId = useId();\r\n const inputId = id ?? autoId;\r\n\r\n return (\r\n <Field\r\n className={cn(fullWidth && 'w-full')}\r\n error={error}\r\n helperText={helperText}\r\n id={inputId}\r\n label={label}\r\n required={required}\r\n >\r\n <div className=\"group relative flex w-full items-center\">\r\n {leftIcon && <span className={cn(iconSlot, 'left-3')}>{leftIcon}</span>}\r\n <input\r\n ref={ref}\r\n aria-describedby={describedBy(inputId, error, helperText)}\r\n aria-invalid={error ? true : undefined}\r\n className={cn(\r\n fieldControl,\r\n fieldSize[size],\r\n leftIcon && 'pl-10',\r\n rightIcon && 'pr-10',\r\n className,\r\n )}\r\n id={inputId}\r\n required={required}\r\n {...props}\r\n />\r\n {rightIcon && <span className={cn(iconSlot, 'right-3')}>{rightIcon}</span>}\r\n </div>\r\n </Field>\r\n );\r\n },\r\n);\r\n\r\nInput.displayName = 'Input';\r\n"],"names":["iconSlot","Input","React","label","error","helperText","leftIcon","rightIcon","fullWidth","size","className","id","required","props","ref","autoId","useId","inputId","jsx","Field","cn","jsxs","describedBy","fieldControl","fieldSize"],"mappings":";;;;;AAeA,MAAMA,IACJ,sIAEWC,IAAQC,EAAM;AAAA,EACzB,CACE;AAAA,IACE,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,MAAAC,IAAO;AAAA,IACP,WAAAC;AAAA,IACA,IAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAASC,EAAA,GACTC,IAAUN,KAAMI;AAEtB,WACE,gBAAAG;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,WAAWC,EAAGZ,KAAa,QAAQ;AAAA,QACnC,OAAAJ;AAAA,QACA,YAAAC;AAAA,QACA,IAAIY;AAAA,QACJ,OAAAd;AAAA,QACA,UAAAS;AAAA,QAEA,UAAA,gBAAAS,EAAC,OAAA,EAAI,WAAU,2CACZ,UAAA;AAAA,UAAAf,uBAAa,QAAA,EAAK,WAAWc,EAAGpB,GAAU,QAAQ,GAAI,UAAAM,GAAS;AAAA,UAChE,gBAAAY;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAAJ;AAAA,cACA,oBAAkBQ,EAAYL,GAASb,GAAOC,CAAU;AAAA,cACxD,gBAAcD,IAAQ,KAAO;AAAA,cAC7B,WAAWgB;AAAA,gBACTG;AAAA,gBACAC,EAAUf,CAAI;AAAA,gBACdH,KAAY;AAAA,gBACZC,KAAa;AAAA,gBACbG;AAAA,cAAA;AAAA,cAEF,IAAIO;AAAA,cACJ,UAAAL;AAAA,cACC,GAAGC;AAAA,YAAA;AAAA,UAAA;AAAA,UAELN,uBAAc,QAAA,EAAK,WAAWa,EAAGpB,GAAU,SAAS,GAAI,UAAAO,EAAA,CAAU;AAAA,QAAA,EAAA,CACrE;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAN,EAAM,cAAc;"}
@@ -10,5 +10,7 @@ export declare const Stack: React.FC<StackProps>;
10
10
  export interface GridProps extends React.HTMLAttributes<HTMLDivElement> {
11
11
  cols?: 1 | 2 | 3 | 4;
12
12
  gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
13
+ /** Empilha colunas em telas pequenas. Padrão: true. */
14
+ responsive?: boolean;
13
15
  }
14
16
  export declare const Grid: React.FC<GridProps>;
@@ -1,41 +1,47 @@
1
- import { jsx as m } from "react/jsx-runtime";
2
- import { cn as o } from "../../utils/cn.js";
3
- const t = ({ size: s = "lg", className: a, ...l }) => {
4
- const g = {
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ import { cn as c } from "../../utils/cn.js";
3
+ const t = ({ size: s = "lg", className: g, ...l }) => {
4
+ const a = {
5
5
  sm: "max-w-2xl",
6
6
  md: "max-w-4xl",
7
7
  lg: "max-w-6xl",
8
8
  xl: "max-w-7xl",
9
9
  full: "max-w-none"
10
10
  }[s];
11
- return /* @__PURE__ */ m("div", { className: o("mx-auto w-full px-4", g, a), ...l });
12
- }, n = ({ gap: s = "md", className: a, ...l }) => {
13
- const g = {
11
+ return /* @__PURE__ */ o("div", { className: c("mx-auto w-full px-4", a, g), ...l });
12
+ }, p = ({ gap: s = "md", className: g, ...l }) => {
13
+ const a = {
14
14
  xs: "gap-1",
15
15
  sm: "gap-2",
16
16
  md: "gap-3",
17
17
  lg: "gap-4",
18
18
  xl: "gap-6"
19
19
  }[s];
20
- return /* @__PURE__ */ m("div", { className: o("flex flex-col", g, a), ...l });
21
- }, d = ({ cols: s = 2, gap: a = "md", className: l, ...g }) => {
22
- const x = {
20
+ return /* @__PURE__ */ o("div", { className: c("flex flex-col", a, g), ...l });
21
+ }, n = ({
22
+ cols: s = 2,
23
+ gap: g = "md",
24
+ responsive: l = !0,
25
+ className: a,
26
+ ...r
27
+ }) => {
28
+ const m = {
23
29
  1: "grid-cols-1",
24
- 2: "grid-cols-2",
25
- 3: "grid-cols-3",
26
- 4: "grid-cols-4"
27
- }[s], c = {
30
+ 2: l ? "grid-cols-1 sm:grid-cols-2" : "grid-cols-2",
31
+ 3: l ? "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-3",
32
+ 4: l ? "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4" : "grid-cols-4"
33
+ }[s], d = {
28
34
  xs: "gap-1",
29
35
  sm: "gap-2",
30
36
  md: "gap-3",
31
37
  lg: "gap-4",
32
38
  xl: "gap-6"
33
- }[a];
34
- return /* @__PURE__ */ m("div", { className: o("grid", x, c, l), ...g });
39
+ }[g];
40
+ return /* @__PURE__ */ o("div", { className: c("grid", m, d, a), ...r });
35
41
  };
36
42
  export {
37
43
  t as Container,
38
- d as Grid,
39
- n as Stack
44
+ n as Grid,
45
+ p as Stack
40
46
  };
41
47
  //# sourceMappingURL=Layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.js","sources":["../../../src/components/Layout/Layout.tsx"],"sourcesContent":["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"],"names":["Container","size","className","props","sizeClass","jsx","cn","Stack","gap","gapClass","Grid","cols","colsClass"],"mappings":";;AAOO,MAAMA,IAAsC,CAAC,EAAE,MAAAC,IAAO,MAAM,WAAAC,GAAW,GAAGC,QAAY;AAC3F,QAAMC,IAAY;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA,EACNH,CAAI;AACN,SAAO,gBAAAI,EAAC,SAAI,WAAWC,EAAG,uBAAuBF,GAAWF,CAAS,GAAI,GAAGC,GAAO;AACrF,GAMaI,IAA8B,CAAC,EAAE,KAAAC,IAAM,MAAM,WAAAN,GAAW,GAAGC,QAAY;AAClF,QAAMM,IAAW;AAAA,IACf,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,EACJD,CAAG;AACL,SAAO,gBAAAH,EAAC,SAAI,WAAWC,EAAG,iBAAiBG,GAAUP,CAAS,GAAI,GAAGC,GAAO;AAC9E,GAOaO,IAA4B,CAAC,EAAE,MAAAC,IAAO,GAAG,KAAAH,IAAM,MAAM,WAAAN,GAAW,GAAGC,QAAY;AAC1F,QAAMS,IAAY;AAAA,IAChB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EAAA,EACHD,CAAI,GACAF,IAAW;AAAA,IACf,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,EACJD,CAAG;AACL,SAAO,gBAAAH,EAAC,OAAA,EAAI,WAAWC,EAAG,QAAQM,GAAWH,GAAUP,CAAS,GAAI,GAAGC,EAAA,CAAO;AAChF;"}
1
+ {"version":3,"file":"Layout.js","sources":["../../../src/components/Layout/Layout.tsx"],"sourcesContent":["import type React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\r\n}\r\n\r\nexport const Container: React.FC<ContainerProps> = ({ size = 'lg', className, ...props }) => {\r\n const sizeClass = {\r\n sm: 'max-w-2xl',\r\n md: 'max-w-4xl',\r\n lg: 'max-w-6xl',\r\n xl: 'max-w-7xl',\r\n full: 'max-w-none',\r\n }[size];\r\n return <div className={cn('mx-auto w-full px-4', sizeClass, className)} {...props} />;\r\n};\r\n\r\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\r\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n}\r\n\r\nexport const Stack: React.FC<StackProps> = ({ gap = 'md', className, ...props }) => {\r\n const gapClass = {\r\n xs: 'gap-1',\r\n sm: 'gap-2',\r\n md: 'gap-3',\r\n lg: 'gap-4',\r\n xl: 'gap-6',\r\n }[gap];\r\n return <div className={cn('flex flex-col', gapClass, className)} {...props} />;\r\n};\r\n\r\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\r\n cols?: 1 | 2 | 3 | 4;\r\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n /** Empilha colunas em telas pequenas. Padrão: true. */\r\n responsive?: boolean;\r\n}\r\n\r\nexport const Grid: React.FC<GridProps> = ({\r\n cols = 2,\r\n gap = 'md',\r\n responsive = true,\r\n className,\r\n ...props\r\n}) => {\r\n const colsClass = {\r\n 1: 'grid-cols-1',\r\n 2: responsive ? 'grid-cols-1 sm:grid-cols-2' : 'grid-cols-2',\r\n 3: responsive ? 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3' : 'grid-cols-3',\r\n 4: responsive ? 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4' : 'grid-cols-4',\r\n }[cols];\r\n const gapClass = {\r\n xs: 'gap-1',\r\n sm: 'gap-2',\r\n md: 'gap-3',\r\n lg: 'gap-4',\r\n xl: 'gap-6',\r\n }[gap];\r\n return <div className={cn('grid', colsClass, gapClass, className)} {...props} />;\r\n};\r\n"],"names":["Container","size","className","props","sizeClass","jsx","cn","Stack","gap","gapClass","Grid","cols","responsive","colsClass"],"mappings":";;AAOO,MAAMA,IAAsC,CAAC,EAAE,MAAAC,IAAO,MAAM,WAAAC,GAAW,GAAGC,QAAY;AAC3F,QAAMC,IAAY;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA,EACNH,CAAI;AACN,SAAO,gBAAAI,EAAC,SAAI,WAAWC,EAAG,uBAAuBF,GAAWF,CAAS,GAAI,GAAGC,GAAO;AACrF,GAMaI,IAA8B,CAAC,EAAE,KAAAC,IAAM,MAAM,WAAAN,GAAW,GAAGC,QAAY;AAClF,QAAMM,IAAW;AAAA,IACf,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,EACJD,CAAG;AACL,SAAO,gBAAAH,EAAC,SAAI,WAAWC,EAAG,iBAAiBG,GAAUP,CAAS,GAAI,GAAGC,GAAO;AAC9E,GASaO,IAA4B,CAAC;AAAA,EACxC,MAAAC,IAAO;AAAA,EACP,KAAAH,IAAM;AAAA,EACN,YAAAI,IAAa;AAAA,EACb,WAAAV;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMU,IAAY;AAAA,IAChB,GAAG;AAAA,IACH,GAAGD,IAAa,+BAA+B;AAAA,IAC/C,GAAGA,IAAa,8CAA8C;AAAA,IAC9D,GAAGA,IAAa,8CAA8C;AAAA,EAAA,EAC9DD,CAAI,GACAF,IAAW;AAAA,IACf,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,EACJD,CAAG;AACL,SAAO,gBAAAH,EAAC,OAAA,EAAI,WAAWC,EAAG,QAAQO,GAAWJ,GAAUP,CAAS,GAAI,GAAGC,EAAA,CAAO;AAChF;"}
@@ -0,0 +1,27 @@
1
+ import type React from 'react';
2
+ export type LogoVariant = 'sbk' | 'sbk-ia';
3
+ /**
4
+ * - `auto`: cor de título do tema atual (verde escuro no claro, branco no escuro)
5
+ * - `dark`: Verde Escuro, para fundos claros
6
+ * - `white`: para fundos escuros
7
+ * - `black`: monocromática
8
+ */
9
+ export type LogoColor = 'auto' | 'dark' | 'white' | 'black';
10
+ export interface LogoProps extends Omit<React.SVGAttributes<SVGSVGElement>, 'color'> {
11
+ /** Reserva a zona de respiro do brand book (espaço livre igual à altura do símbolo). */
12
+ clearSpace?: boolean;
13
+ color?: LogoColor;
14
+ /** Altura em px. A largura acompanha a proporção oficial. */
15
+ height?: number;
16
+ /** Nome acessível. Padrão: "SBK" ou "SBK IA". */
17
+ title?: string;
18
+ variant?: LogoVariant;
19
+ }
20
+ /**
21
+ * Logo oficial SBK / SBK IA a partir dos SVGs do time de marca.
22
+ * Não aplica sombras, gradientes, distorção ou rotação (usos indevidos do brand book).
23
+ */
24
+ export declare const Logo: {
25
+ ({ variant, color, height, clearSpace, title, className, style, ...props }: LogoProps): import("react/jsx-runtime").JSX.Element;
26
+ displayName: string;
27
+ };
@@ -0,0 +1,107 @@
1
+ import { jsxs as l, jsx as t } from "react/jsx-runtime";
2
+ import { cn as d } from "../../utils/cn.js";
3
+ const k = {
4
+ auto: "text-sbk-fg-heading",
5
+ dark: "text-sbk-verde-escuro",
6
+ white: "text-sbk-branco",
7
+ black: "text-sbk-preto"
8
+ }, m = {
9
+ auto: "var(--sbk-color-surface)",
10
+ dark: "var(--sbk-branco)",
11
+ white: "var(--sbk-preto)",
12
+ black: "var(--sbk-branco)"
13
+ }, b = { x: 39.15, y: 180.84, w: 541.7, h: 258.08 }, p = { x: 48.06, y: 293.2, w: 405.56, h: 128.33 }, x = () => /* @__PURE__ */ l("g", { fill: "currentColor", transform: "translate(-49, 122)", children: [
14
+ /* @__PURE__ */ l("g", { stroke: "currentColor", strokeMiterlimit: 10, strokeWidth: 2, children: [
15
+ /* @__PURE__ */ t("path", { d: "m225.13 266.26c-27.48 0-47.67-12.07-50.38-41.01h14.16c0.62 21.44 17.69 29.56 36.85 29.56 18.11 0 39.14-7.91 39.14-29.14 0-16.24-13.12-23.74-32.48-29.99l-11.03-3.53c-24.36-7.71-42.27-16.66-42.27-40.19 0-28.1 24.78-39.97 49.76-39.97 22.9 0 46.64 8.54 47.05 35.18h-13.95c-1.87-18.32-15.82-23.94-32.47-23.94-17.29 0-36.65 7.71-36.65 27.69 0 14.78 11.04 22.28 34.36 29.77l12.49 3.96c24.36 7.7 38.3 15.82 38.93 38.73 0 30.18-26.65 42.88-53.51 42.88z" }),
16
+ /* @__PURE__ */ t(
17
+ "path",
18
+ {
19
+ d: "m351.42 264.39h-41.43v-150.53h41.43c8.53 0 17.9-0.2 26.23 2.09 16.24 4.58 27.48 17.9 27.48 35.18 0 18.74-10.41 29.98-27.9 34.56 20.82 2.71 34.15 15.2 34.15 36.85 0 34.56-31.86 41.85-59.96 41.85zm8.12-138.45h-36.02v56.49h32.06c19.16 0 34.98-8.81 34.98-30.26 0-18.74-14.16-26.23-31.02-26.23zm-1.46 63.19h-34.56v63.18h26.65c21.86 0 46.84-1.45 46.84-29.98 0-24.77-18.11-33.2-38.93-33.2z",
20
+ fillRule: "evenodd"
21
+ }
22
+ ),
23
+ /* @__PURE__ */ t("path", { d: "m443.77 264.39v-150.53h13.53v150.53zm88.07 0l-73.7-81.61 67.03-68.92h18.12l-68.91 67.88 75.99 82.65z" })
24
+ ] }),
25
+ /* @__PURE__ */ t("path", { d: "m99.09 118.17l-0.21 57.98-9.73 0.24 0.56-62.81c0.26-29.03 26.91-53.16 56.3-53.26l151.74-0.48c0.62 3.58 0.63 6.35 0.05 9.92l-150.35 0.22c-26.28 0.04-48.26 21.9-48.36 48.19z" }),
26
+ /* @__PURE__ */ t("path", { d: "m419.9 315.79l0.22-9.33 149.3-0.15c25.73-0.02 48.97-20.27 49.14-45.96l0.4-60.49q4.64-0.28 9.57-0.07l0.32 52.61c0.21 33.16-23.62 63.29-57.93 63.33l-135.88 0.19z" })
27
+ ] }), M = ({ knockout: r }) => /* @__PURE__ */ l("g", { children: [
28
+ /* @__PURE__ */ t(
29
+ "path",
30
+ {
31
+ d: "M 0.00165 -0.00185625 L -341.502256 -0.00185625 C -357.81085 -0.00185625 -371.033506 13.2208 -371.033506 29.529394 L -371.033506 93.802831 C -371.033506 110.115331 -357.81085 123.334081 -341.502256 123.334081 L 0.00165 123.334081 C 16.310244 123.334081 29.5329 110.115331 29.5329 93.802831 L 29.5329 29.529394 C 29.5329 13.2208 16.310244 -0.00185625 0.00165 -0.00185625 Z",
32
+ fill: "none",
33
+ stroke: "currentColor",
34
+ strokeMiterlimit: 10,
35
+ strokeWidth: 5,
36
+ transform: "matrix(1, 0, 0, -1, 421.5921, 419.0333)"
37
+ }
38
+ ),
39
+ /* @__PURE__ */ t(
40
+ "path",
41
+ {
42
+ d: "M 280.578125 419.230469 L 80.089844 419.230469 C 63.78125 419.230469 50.558594 406.011719 50.558594 389.699219 L 50.558594 325.425781 C 50.558594 309.117188 63.78125 295.898438 80.089844 295.898438 L 280.578125 295.898438 C 296.886719 295.898438 310.109375 309.117188 310.109375 325.425781 L 310.109375 389.699219 C 310.109375 406.011719 296.886719 419.230469 280.578125 419.230469",
43
+ fill: "currentColor"
44
+ }
45
+ ),
46
+ /* @__PURE__ */ l("g", { fill: "currentColor", children: [
47
+ /* @__PURE__ */ t(
48
+ "path",
49
+ {
50
+ d: "M 17.8125 0 L 17.8125 -75.75 L 11 -75.75 L 11 0 Z",
51
+ transform: "translate(327.5737, 394.627)"
52
+ }
53
+ ),
54
+ /* @__PURE__ */ t(
55
+ "path",
56
+ {
57
+ d: "M 71.453125 0 L 39.28125 -75.75 L 32.0625 -75.75 L 1.15625 0 L 8.375 0 L 16.546875 -21.15625 L 54.890625 -21.15625 L 63.484375 0 Z M 52.484375 -26.8125 L 18.75 -26.8125 L 35.203125 -69.140625 Z",
58
+ transform: "translate(356.385092, 394.627)"
59
+ }
60
+ )
61
+ ] }),
62
+ /* @__PURE__ */ l("g", { fill: r, stroke: r, strokeMiterlimit: 10, children: [
63
+ /* @__PURE__ */ t("path", { d: "M 114.230469 396.132812 C 100.488281 396.132812 90.390625 390.09375 89.039062 375.625 L 96.117188 375.625 C 96.429688 386.347656 104.964844 390.40625 114.542969 390.40625 C 123.597656 390.40625 134.113281 386.453125 134.113281 375.832031 C 134.113281 367.714844 127.554688 363.964844 117.871094 360.84375 L 112.355469 359.074219 C 100.175781 355.222656 91.222656 350.746094 91.222656 338.980469 C 91.222656 324.929688 103.613281 318.996094 116.105469 318.996094 C 127.554688 318.996094 139.421875 323.261719 139.628906 336.589844 L 132.65625 336.589844 C 131.71875 327.429688 124.742188 324.617188 116.414062 324.617188 C 107.777344 324.617188 98.09375 328.46875 98.09375 338.460938 C 98.09375 345.851562 103.613281 349.601562 115.269531 353.347656 L 121.515625 355.328125 C 133.695312 359.175781 140.671875 363.238281 140.984375 374.6875 C 140.984375 389.78125 127.660156 396.132812 114.230469 396.132812" }),
64
+ /* @__PURE__ */ t("path", { d: "M 180.703125 357.5625 L 163.421875 357.5625 L 163.421875 389.15625 L 176.746094 389.15625 C 187.679688 389.15625 200.167969 388.429688 200.167969 374.167969 C 200.167969 361.78125 191.113281 357.5625 180.703125 357.5625 M 181.433594 325.96875 L 163.421875 325.96875 L 163.421875 354.214844 L 179.453125 354.214844 C 189.03125 354.214844 196.941406 349.808594 196.941406 339.085938 C 196.941406 329.71875 189.863281 325.96875 181.433594 325.96875 M 177.371094 395.195312 L 156.65625 395.195312 L 156.65625 319.933594 L 177.371094 319.933594 C 181.640625 319.933594 186.324219 319.828125 190.488281 320.972656 C 198.609375 323.265625 204.230469 329.925781 204.230469 338.566406 C 204.230469 347.933594 199.023438 353.554688 190.28125 355.847656 C 200.691406 357.199219 207.351562 363.445312 207.351562 374.273438 C 207.351562 391.550781 191.425781 395.195312 177.371094 395.195312" }),
65
+ /* @__PURE__ */ t(
66
+ "path",
67
+ {
68
+ d: "M 0.00183125 0.0001875 L -36.849731 40.804875 L -3.3302 75.261906 L 5.724488 75.261906 L -28.732544 41.328312 L 9.26355 0.0001875 Z M -44.033325 75.261906 L -37.2677 75.261906 L -37.2677 0.0001875 L -44.033325 0.0001875 Z",
69
+ transform: "matrix(1, 0, 0, -1, 267.5802, 395.1955)"
70
+ }
71
+ )
72
+ ] })
73
+ ] }), f = ({
74
+ variant: r = "sbk",
75
+ color: s = "auto",
76
+ height: e = 32,
77
+ clearSpace: c = !1,
78
+ title: n,
79
+ className: L,
80
+ style: i,
81
+ ...h
82
+ }) => {
83
+ const o = r === "sbk" ? b : p, C = Math.round(e * o.w / o.h), a = n ?? (r === "sbk" ? "SBK" : "SBK IA");
84
+ return /* @__PURE__ */ l(
85
+ "svg",
86
+ {
87
+ "aria-label": a,
88
+ className: d("inline-block shrink-0", k[s], L),
89
+ height: e,
90
+ role: "img",
91
+ style: { ...c ? { padding: e, boxSizing: "content-box" } : null, ...i },
92
+ viewBox: `${o.x} ${o.y} ${o.w} ${o.h}`,
93
+ width: C,
94
+ xmlns: "http://www.w3.org/2000/svg",
95
+ ...h,
96
+ children: [
97
+ /* @__PURE__ */ t("title", { children: a }),
98
+ r === "sbk" ? /* @__PURE__ */ t(x, {}) : /* @__PURE__ */ t(M, { knockout: m[s] })
99
+ ]
100
+ }
101
+ );
102
+ };
103
+ f.displayName = "Logo";
104
+ export {
105
+ f as Logo
106
+ };
107
+ //# sourceMappingURL=Logo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logo.js","sources":["../../../src/components/Logo/Logo.tsx"],"sourcesContent":["import type React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport type LogoVariant = 'sbk' | 'sbk-ia';\r\n/**\r\n * - `auto`: cor de título do tema atual (verde escuro no claro, branco no escuro)\r\n * - `dark`: Verde Escuro, para fundos claros\r\n * - `white`: para fundos escuros\r\n * - `black`: monocromática\r\n */\r\nexport type LogoColor = 'auto' | 'dark' | 'white' | 'black';\r\n\r\nexport interface LogoProps extends Omit<React.SVGAttributes<SVGSVGElement>, 'color'> {\r\n /** Reserva a zona de respiro do brand book (espaço livre igual à altura do símbolo). */\r\n clearSpace?: boolean;\r\n color?: LogoColor;\r\n /** Altura em px. A largura acompanha a proporção oficial. */\r\n height?: number;\r\n /** Nome acessível. Padrão: \"SBK\" ou \"SBK IA\". */\r\n title?: string;\r\n variant?: LogoVariant;\r\n}\r\n\r\nconst COLOR_CLASS: Record<LogoColor, string> = {\r\n auto: 'text-sbk-fg-heading',\r\n dark: 'text-sbk-verde-escuro',\r\n white: 'text-sbk-branco',\r\n black: 'text-sbk-preto',\r\n};\r\n\r\n/** Cor do recorte do wordmark dentro do bloco da SBK IA. */\r\nconst KNOCKOUT: Record<LogoColor, string> = {\r\n auto: 'var(--sbk-color-surface)',\r\n dark: 'var(--sbk-branco)',\r\n white: 'var(--sbk-preto)',\r\n black: 'var(--sbk-branco)',\r\n};\r\n\r\nconst SBK_VIEWBOX = { x: 39.15, y: 180.84, w: 541.7, h: 258.08 };\r\nconst SBK_IA_VIEWBOX = { x: 48.06, y: 293.2, w: 405.56, h: 128.33 };\r\n\r\n/** Paths oficiais: ui/docs/SBK_logo_2026.svg */\r\nconst SbkMark = () => (\r\n <g fill=\"currentColor\" transform=\"translate(-49, 122)\">\r\n <g stroke=\"currentColor\" strokeMiterlimit={10} strokeWidth={2}>\r\n <path d=\"m225.13 266.26c-27.48 0-47.67-12.07-50.38-41.01h14.16c0.62 21.44 17.69 29.56 36.85 29.56 18.11 0 39.14-7.91 39.14-29.14 0-16.24-13.12-23.74-32.48-29.99l-11.03-3.53c-24.36-7.71-42.27-16.66-42.27-40.19 0-28.1 24.78-39.97 49.76-39.97 22.9 0 46.64 8.54 47.05 35.18h-13.95c-1.87-18.32-15.82-23.94-32.47-23.94-17.29 0-36.65 7.71-36.65 27.69 0 14.78 11.04 22.28 34.36 29.77l12.49 3.96c24.36 7.7 38.3 15.82 38.93 38.73 0 30.18-26.65 42.88-53.51 42.88z\" />\r\n <path\r\n d=\"m351.42 264.39h-41.43v-150.53h41.43c8.53 0 17.9-0.2 26.23 2.09 16.24 4.58 27.48 17.9 27.48 35.18 0 18.74-10.41 29.98-27.9 34.56 20.82 2.71 34.15 15.2 34.15 36.85 0 34.56-31.86 41.85-59.96 41.85zm8.12-138.45h-36.02v56.49h32.06c19.16 0 34.98-8.81 34.98-30.26 0-18.74-14.16-26.23-31.02-26.23zm-1.46 63.19h-34.56v63.18h26.65c21.86 0 46.84-1.45 46.84-29.98 0-24.77-18.11-33.2-38.93-33.2z\"\r\n fillRule=\"evenodd\"\r\n />\r\n <path d=\"m443.77 264.39v-150.53h13.53v150.53zm88.07 0l-73.7-81.61 67.03-68.92h18.12l-68.91 67.88 75.99 82.65z\" />\r\n </g>\r\n <path d=\"m99.09 118.17l-0.21 57.98-9.73 0.24 0.56-62.81c0.26-29.03 26.91-53.16 56.3-53.26l151.74-0.48c0.62 3.58 0.63 6.35 0.05 9.92l-150.35 0.22c-26.28 0.04-48.26 21.9-48.36 48.19z\" />\r\n <path d=\"m419.9 315.79l0.22-9.33 149.3-0.15c25.73-0.02 48.97-20.27 49.14-45.96l0.4-60.49q4.64-0.28 9.57-0.07l0.32 52.61c0.21 33.16-23.62 63.29-57.93 63.33l-135.88 0.19z\" />\r\n </g>\r\n);\r\n\r\n/** Paths oficiais: ui/docs/SBK_IA_logo_2026.svg (glyphs \"IA\" expandidos para evitar ids globais) */\r\nconst SbkIaMark = ({ knockout }: { knockout: string }) => (\r\n <g>\r\n <path\r\n d=\"M 0.00165 -0.00185625 L -341.502256 -0.00185625 C -357.81085 -0.00185625 -371.033506 13.2208 -371.033506 29.529394 L -371.033506 93.802831 C -371.033506 110.115331 -357.81085 123.334081 -341.502256 123.334081 L 0.00165 123.334081 C 16.310244 123.334081 29.5329 110.115331 29.5329 93.802831 L 29.5329 29.529394 C 29.5329 13.2208 16.310244 -0.00185625 0.00165 -0.00185625 Z\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeMiterlimit={10}\r\n strokeWidth={5}\r\n transform=\"matrix(1, 0, 0, -1, 421.5921, 419.0333)\"\r\n />\r\n <path\r\n d=\"M 280.578125 419.230469 L 80.089844 419.230469 C 63.78125 419.230469 50.558594 406.011719 50.558594 389.699219 L 50.558594 325.425781 C 50.558594 309.117188 63.78125 295.898438 80.089844 295.898438 L 280.578125 295.898438 C 296.886719 295.898438 310.109375 309.117188 310.109375 325.425781 L 310.109375 389.699219 C 310.109375 406.011719 296.886719 419.230469 280.578125 419.230469\"\r\n fill=\"currentColor\"\r\n />\r\n <g fill=\"currentColor\">\r\n <path\r\n d=\"M 17.8125 0 L 17.8125 -75.75 L 11 -75.75 L 11 0 Z\"\r\n transform=\"translate(327.5737, 394.627)\"\r\n />\r\n <path\r\n d=\"M 71.453125 0 L 39.28125 -75.75 L 32.0625 -75.75 L 1.15625 0 L 8.375 0 L 16.546875 -21.15625 L 54.890625 -21.15625 L 63.484375 0 Z M 52.484375 -26.8125 L 18.75 -26.8125 L 35.203125 -69.140625 Z\"\r\n transform=\"translate(356.385092, 394.627)\"\r\n />\r\n </g>\r\n <g fill={knockout} stroke={knockout} strokeMiterlimit={10}>\r\n <path d=\"M 114.230469 396.132812 C 100.488281 396.132812 90.390625 390.09375 89.039062 375.625 L 96.117188 375.625 C 96.429688 386.347656 104.964844 390.40625 114.542969 390.40625 C 123.597656 390.40625 134.113281 386.453125 134.113281 375.832031 C 134.113281 367.714844 127.554688 363.964844 117.871094 360.84375 L 112.355469 359.074219 C 100.175781 355.222656 91.222656 350.746094 91.222656 338.980469 C 91.222656 324.929688 103.613281 318.996094 116.105469 318.996094 C 127.554688 318.996094 139.421875 323.261719 139.628906 336.589844 L 132.65625 336.589844 C 131.71875 327.429688 124.742188 324.617188 116.414062 324.617188 C 107.777344 324.617188 98.09375 328.46875 98.09375 338.460938 C 98.09375 345.851562 103.613281 349.601562 115.269531 353.347656 L 121.515625 355.328125 C 133.695312 359.175781 140.671875 363.238281 140.984375 374.6875 C 140.984375 389.78125 127.660156 396.132812 114.230469 396.132812\" />\r\n <path d=\"M 180.703125 357.5625 L 163.421875 357.5625 L 163.421875 389.15625 L 176.746094 389.15625 C 187.679688 389.15625 200.167969 388.429688 200.167969 374.167969 C 200.167969 361.78125 191.113281 357.5625 180.703125 357.5625 M 181.433594 325.96875 L 163.421875 325.96875 L 163.421875 354.214844 L 179.453125 354.214844 C 189.03125 354.214844 196.941406 349.808594 196.941406 339.085938 C 196.941406 329.71875 189.863281 325.96875 181.433594 325.96875 M 177.371094 395.195312 L 156.65625 395.195312 L 156.65625 319.933594 L 177.371094 319.933594 C 181.640625 319.933594 186.324219 319.828125 190.488281 320.972656 C 198.609375 323.265625 204.230469 329.925781 204.230469 338.566406 C 204.230469 347.933594 199.023438 353.554688 190.28125 355.847656 C 200.691406 357.199219 207.351562 363.445312 207.351562 374.273438 C 207.351562 391.550781 191.425781 395.195312 177.371094 395.195312\" />\r\n <path\r\n d=\"M 0.00183125 0.0001875 L -36.849731 40.804875 L -3.3302 75.261906 L 5.724488 75.261906 L -28.732544 41.328312 L 9.26355 0.0001875 Z M -44.033325 75.261906 L -37.2677 75.261906 L -37.2677 0.0001875 L -44.033325 0.0001875 Z\"\r\n transform=\"matrix(1, 0, 0, -1, 267.5802, 395.1955)\"\r\n />\r\n </g>\r\n </g>\r\n);\r\n\r\n/**\r\n * Logo oficial SBK / SBK IA a partir dos SVGs do time de marca.\r\n * Não aplica sombras, gradientes, distorção ou rotação (usos indevidos do brand book).\r\n */\r\nexport const Logo = ({\r\n variant = 'sbk',\r\n color = 'auto',\r\n height = 32,\r\n clearSpace = false,\r\n title,\r\n className,\r\n style,\r\n ...props\r\n}: LogoProps) => {\r\n const box = variant === 'sbk' ? SBK_VIEWBOX : SBK_IA_VIEWBOX;\r\n const width = Math.round((height * box.w) / box.h);\r\n const accessibleName = title ?? (variant === 'sbk' ? 'SBK' : 'SBK IA');\r\n\r\n return (\r\n <svg\r\n aria-label={accessibleName}\r\n className={cn('inline-block shrink-0', COLOR_CLASS[color], className)}\r\n height={height}\r\n role=\"img\"\r\n style={{ ...(clearSpace ? { padding: height, boxSizing: 'content-box' } : null), ...style }}\r\n viewBox={`${box.x} ${box.y} ${box.w} ${box.h}`}\r\n width={width}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <title>{accessibleName}</title>\r\n {variant === 'sbk' ? <SbkMark /> : <SbkIaMark knockout={KNOCKOUT[color]} />}\r\n </svg>\r\n );\r\n};\r\n\r\nLogo.displayName = 'Logo';\r\n"],"names":["COLOR_CLASS","KNOCKOUT","SBK_VIEWBOX","SBK_IA_VIEWBOX","SbkMark","jsxs","jsx","SbkIaMark","knockout","Logo","variant","color","height","clearSpace","title","className","style","props","box","width","accessibleName","cn"],"mappings":";;AAuBA,MAAMA,IAAyC;AAAA,EAC7C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT,GAGMC,IAAsC;AAAA,EAC1C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT,GAEMC,IAAc,EAAE,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAA,GAClDC,IAAiB,EAAE,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAA,GAGrDC,IAAU,MACd,gBAAAC,EAAC,OAAE,MAAK,gBAAe,WAAU,uBAC/B,UAAA;AAAA,EAAA,gBAAAA,EAAC,OAAE,QAAO,gBAAe,kBAAkB,IAAI,aAAa,GAC1D,UAAA;AAAA,IAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,8bAAA,CAA8b;AAAA,IACtc,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,UAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEX,gBAAAA,EAAC,QAAA,EAAK,GAAE,uGAAA,CAAuG;AAAA,EAAA,GACjH;AAAA,EACA,gBAAAA,EAAC,QAAA,EAAK,GAAE,8KAAA,CAA8K;AAAA,EACtL,gBAAAA,EAAC,QAAA,EAAK,GAAE,kKAAA,CAAkK;AAAA,GAC5K,GAIIC,IAAY,CAAC,EAAE,UAAAC,EAAA,wBAClB,KAAA,EACC,UAAA;AAAA,EAAA,gBAAAF;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,MAAK;AAAA,MACL,QAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,WAAU;AAAA,IAAA;AAAA,EAAA;AAAA,EAEZ,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,MAAK;AAAA,IAAA;AAAA,EAAA;AAAA,EAEP,gBAAAD,EAAC,KAAA,EAAE,MAAK,gBACN,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAEZ,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAAA,oBACC,KAAA,EAAE,MAAME,GAAU,QAAQA,GAAU,kBAAkB,IACrD,UAAA;AAAA,IAAA,gBAAAF,EAAC,QAAA,EAAK,GAAE,44BAAA,CAA44B;AAAA,IACp5B,gBAAAA,EAAC,QAAA,EAAK,GAAE,i3BAAA,CAAi3B;AAAA,IACz3B,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,EAAA,CACF;AAAA,GACF,GAOWG,IAAO,CAAC;AAAA,EACnB,SAAAC,IAAU;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,YAAAC,IAAa;AAAA,EACb,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,MAAiB;AACf,QAAMC,IAAMR,MAAY,QAAQR,IAAcC,GACxCgB,IAAQ,KAAK,MAAOP,IAASM,EAAI,IAAKA,EAAI,CAAC,GAC3CE,IAAiBN,MAAUJ,MAAY,QAAQ,QAAQ;AAE7D,SACE,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAYe;AAAA,MACZ,WAAWC,EAAG,yBAAyBrB,EAAYW,CAAK,GAAGI,CAAS;AAAA,MACpE,QAAAH;AAAA,MACA,MAAK;AAAA,MACL,OAAO,EAAE,GAAIC,IAAa,EAAE,SAASD,GAAQ,WAAW,cAAA,IAAkB,MAAO,GAAGI,EAAA;AAAA,MACpF,SAAS,GAAGE,EAAI,CAAC,IAAIA,EAAI,CAAC,IAAIA,EAAI,CAAC,IAAIA,EAAI,CAAC;AAAA,MAC5C,OAAAC;AAAA,MACA,OAAM;AAAA,MACL,GAAGF;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAX,EAAC,WAAO,UAAAc,EAAA,CAAe;AAAA,QACtBV,MAAY,QAAQ,gBAAAJ,EAACF,GAAA,CAAA,CAAQ,sBAAMG,GAAA,EAAU,UAAUN,EAASU,CAAK,EAAA,CAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG/E;AAEAF,EAAK,cAAc;"}
@@ -0,0 +1,21 @@
1
+ import type React from 'react';
2
+ export type MiniCardTrend = 'up' | 'down' | 'neutral';
3
+ export interface MiniCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
4
+ /** Variação exibida ao lado do valor (ex.: "+12%"). */
5
+ delta?: React.ReactNode;
6
+ /** Texto de apoio abaixo do valor. */
7
+ description?: React.ReactNode;
8
+ icon?: React.ReactNode;
9
+ label: React.ReactNode;
10
+ /** Direção da variação. `up` não significa "bom": ajuste `trendPositive` quando cair for positivo. */
11
+ trend?: MiniCardTrend;
12
+ /** Define se a tendência informada é positiva. Padrão: `up` positivo, `down` negativo. */
13
+ trendPositive?: boolean;
14
+ value: React.ReactNode;
15
+ variant?: 'default' | 'inverse' | 'highlight' | 'glass';
16
+ }
17
+ /** Card compacto de indicador (KPI): rótulo, valor, variação e ícone. */
18
+ export declare const MiniCard: {
19
+ ({ label, value, delta, trend, trendPositive, description, icon, variant, className, ...props }: MiniCardProps): import("react/jsx-runtime").JSX.Element;
20
+ displayName: string;
21
+ };
@@ -0,0 +1,90 @@
1
+ import { jsxs as r, jsx as i } from "react/jsx-runtime";
2
+ import { ArrowRight as f, ArrowDownRight as x, ArrowUpRight as h } from "lucide-react";
3
+ import { cn as s } from "../../utils/cn.js";
4
+ import { inverseScope as u } from "../../utils/styles.js";
5
+ import { Icon as k } from "../Icon/Icon.js";
6
+ const N = {
7
+ default: "border border-sbk-line bg-sbk-surface text-sbk-fg",
8
+ inverse: s("border border-transparent", u),
9
+ highlight: "border border-transparent bg-sbk-highlight-bg text-sbk-highlight-fg",
10
+ glass: "sbk-glass text-sbk-fg"
11
+ }, w = { up: h, down: x, neutral: f }, v = { up: "alta", down: "queda", neutral: "estável" }, y = ({
12
+ label: c,
13
+ value: d,
14
+ delta: a,
15
+ trend: e,
16
+ trendPositive: g,
17
+ description: o,
18
+ icon: l,
19
+ variant: n = "default",
20
+ className: m,
21
+ ...b
22
+ }) => {
23
+ const t = n !== "default" && n !== "glass", p = t || e === "neutral" || !e ? "" : g ?? e !== "down" ? "text-sbk-success-fg" : "text-sbk-error-fg";
24
+ return /* @__PURE__ */ r(
25
+ "div",
26
+ {
27
+ className: s(
28
+ "flex min-w-0 items-start gap-3 rounded-sbk-sm p-4",
29
+ N[n],
30
+ m
31
+ ),
32
+ ...b,
33
+ children: [
34
+ /* @__PURE__ */ r("div", { className: "grid min-w-0 flex-1 gap-1", children: [
35
+ /* @__PURE__ */ i(
36
+ "span",
37
+ {
38
+ className: s(
39
+ "truncate text-xs font-semibold uppercase tracking-wide",
40
+ t ? "opacity-80" : "text-sbk-fg-muted"
41
+ ),
42
+ children: c
43
+ }
44
+ ),
45
+ /* @__PURE__ */ r("div", { className: "flex flex-wrap items-baseline gap-2", children: [
46
+ /* @__PURE__ */ i(
47
+ "span",
48
+ {
49
+ className: s("text-2xl font-semibold leading-none", !t && "text-sbk-fg-heading"),
50
+ children: d
51
+ }
52
+ ),
53
+ a && /* @__PURE__ */ r(
54
+ "span",
55
+ {
56
+ className: s("inline-flex items-center gap-0.5 text-xs font-semibold", p),
57
+ children: [
58
+ e && /* @__PURE__ */ i(k, { icon: w[e], size: "xs" }),
59
+ a,
60
+ e && /* @__PURE__ */ r("span", { className: "sr-only", children: [
61
+ "(",
62
+ v[e],
63
+ ")"
64
+ ] })
65
+ ]
66
+ }
67
+ )
68
+ ] }),
69
+ o && /* @__PURE__ */ i("span", { className: s("text-xs font-light", t ? "opacity-80" : "text-sbk-fg-muted"), children: o })
70
+ ] }),
71
+ l && /* @__PURE__ */ i(
72
+ "span",
73
+ {
74
+ "aria-hidden": "true",
75
+ className: s(
76
+ "inline-flex size-9 shrink-0 items-center justify-center rounded-sbk-sm [&_svg]:size-5",
77
+ t ? "bg-sbk-branco/15" : "bg-sbk-primary-subtle text-sbk-primary"
78
+ ),
79
+ children: l
80
+ }
81
+ )
82
+ ]
83
+ }
84
+ );
85
+ };
86
+ y.displayName = "MiniCard";
87
+ export {
88
+ y as MiniCard
89
+ };
90
+ //# sourceMappingURL=MiniCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiniCard.js","sources":["../../../src/components/MiniCard/MiniCard.tsx"],"sourcesContent":["import type React from 'react';\r\nimport { ArrowDownRight, ArrowRight, ArrowUpRight } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\nimport { inverseScope } from '../../utils/styles';\r\nimport { Icon } from '../Icon/Icon';\r\n\r\nexport type MiniCardTrend = 'up' | 'down' | 'neutral';\r\n\r\nexport interface MiniCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Variação exibida ao lado do valor (ex.: \"+12%\"). */\r\n delta?: React.ReactNode;\r\n /** Texto de apoio abaixo do valor. */\r\n description?: React.ReactNode;\r\n icon?: React.ReactNode;\r\n label: React.ReactNode;\r\n /** Direção da variação. `up` não significa \"bom\": ajuste `trendPositive` quando cair for positivo. */\r\n trend?: MiniCardTrend;\r\n /** Define se a tendência informada é positiva. Padrão: `up` positivo, `down` negativo. */\r\n trendPositive?: boolean;\r\n value: React.ReactNode;\r\n variant?: 'default' | 'inverse' | 'highlight' | 'glass';\r\n}\r\n\r\nconst VARIANT_CLASS: Record<NonNullable<MiniCardProps['variant']>, string> = {\r\n default: 'border border-sbk-line bg-sbk-surface text-sbk-fg',\r\n inverse: cn('border border-transparent', inverseScope),\r\n highlight: 'border border-transparent bg-sbk-highlight-bg text-sbk-highlight-fg',\r\n glass: 'sbk-glass text-sbk-fg',\r\n};\r\n\r\nconst TREND_ICON = { up: ArrowUpRight, down: ArrowDownRight, neutral: ArrowRight } as const;\r\nconst TREND_LABEL = { up: 'alta', down: 'queda', neutral: 'estável' } as const;\r\n\r\n/** Card compacto de indicador (KPI): rótulo, valor, variação e ícone. */\r\nexport const MiniCard = ({\r\n label,\r\n value,\r\n delta,\r\n trend,\r\n trendPositive,\r\n description,\r\n icon,\r\n variant = 'default',\r\n className,\r\n ...props\r\n}: MiniCardProps) => {\r\n const onColor = variant !== 'default' && variant !== 'glass';\r\n const positive = trendPositive ?? trend !== 'down';\r\n const trendColor =\r\n onColor || trend === 'neutral' || !trend\r\n ? ''\r\n : positive\r\n ? 'text-sbk-success-fg'\r\n : 'text-sbk-error-fg';\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'flex min-w-0 items-start gap-3 rounded-sbk-sm p-4',\r\n VARIANT_CLASS[variant],\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <div className=\"grid min-w-0 flex-1 gap-1\">\r\n <span\r\n className={cn(\r\n 'truncate text-xs font-semibold uppercase tracking-wide',\r\n onColor ? 'opacity-80' : 'text-sbk-fg-muted',\r\n )}\r\n >\r\n {label}\r\n </span>\r\n <div className=\"flex flex-wrap items-baseline gap-2\">\r\n <span\r\n className={cn('text-2xl font-semibold leading-none', !onColor && 'text-sbk-fg-heading')}\r\n >\r\n {value}\r\n </span>\r\n {delta && (\r\n <span\r\n className={cn('inline-flex items-center gap-0.5 text-xs font-semibold', trendColor)}\r\n >\r\n {trend && <Icon icon={TREND_ICON[trend]} size=\"xs\" />}\r\n {delta}\r\n {trend && <span className=\"sr-only\">({TREND_LABEL[trend]})</span>}\r\n </span>\r\n )}\r\n </div>\r\n {description && (\r\n <span className={cn('text-xs font-light', onColor ? 'opacity-80' : 'text-sbk-fg-muted')}>\r\n {description}\r\n </span>\r\n )}\r\n </div>\r\n {icon && (\r\n <span\r\n aria-hidden=\"true\"\r\n className={cn(\r\n 'inline-flex size-9 shrink-0 items-center justify-center rounded-sbk-sm [&_svg]:size-5',\r\n onColor ? 'bg-sbk-branco/15' : 'bg-sbk-primary-subtle text-sbk-primary',\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nMiniCard.displayName = 'MiniCard';\r\n"],"names":["VARIANT_CLASS","cn","inverseScope","TREND_ICON","ArrowUpRight","ArrowDownRight","ArrowRight","TREND_LABEL","MiniCard","label","value","delta","trend","trendPositive","description","icon","variant","className","props","onColor","trendColor","jsxs","jsx","Icon"],"mappings":";;;;;AAuBA,MAAMA,IAAuE;AAAA,EAC3E,SAAS;AAAA,EACT,SAASC,EAAG,6BAA6BC,CAAY;AAAA,EACrD,WAAW;AAAA,EACX,OAAO;AACT,GAEMC,IAAa,EAAE,IAAIC,GAAc,MAAMC,GAAgB,SAASC,EAAA,GAChEC,IAAc,EAAE,IAAI,QAAQ,MAAM,SAAS,SAAS,UAAA,GAG7CC,IAAW,CAAC;AAAA,EACvB,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,GAAGC;AACL,MAAqB;AACnB,QAAMC,IAAUH,MAAY,aAAaA,MAAY,SAE/CI,IACJD,KAAWP,MAAU,aAAa,CAACA,IAC/B,KAHWC,KAAiBD,MAAU,SAKpC,wBACA;AAER,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWpB;AAAA,QACT;AAAA,QACAD,EAAcgB,CAAO;AAAA,QACrBC;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAG,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWrB;AAAA,gBACT;AAAA,gBACAkB,IAAU,eAAe;AAAA,cAAA;AAAA,cAG1B,UAAAV;AAAA,YAAA;AAAA,UAAA;AAAA,UAEH,gBAAAY,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWrB,EAAG,uCAAuC,CAACkB,KAAW,qBAAqB;AAAA,gBAErF,UAAAT;AAAA,cAAA;AAAA,YAAA;AAAA,YAEFC,KACC,gBAAAU;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWpB,EAAG,0DAA0DmB,CAAU;AAAA,gBAEjF,UAAA;AAAA,kBAAAR,uBAAUW,GAAA,EAAK,MAAMpB,EAAWS,CAAK,GAAG,MAAK,MAAK;AAAA,kBAClDD;AAAA,kBACAC,KAAS,gBAAAS,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA;AAAA,oBAAA;AAAA,oBAAEd,EAAYK,CAAK;AAAA,oBAAE;AAAA,kBAAA,EAAA,CAAC;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAC5D,GAEJ;AAAA,UACCE,KACC,gBAAAQ,EAAC,QAAA,EAAK,WAAWrB,EAAG,sBAAsBkB,IAAU,eAAe,mBAAmB,GACnF,UAAAL,EAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QACCC,KACC,gBAAAO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAWrB;AAAA,cACT;AAAA,cACAkB,IAAU,qBAAqB;AAAA,YAAA;AAAA,YAGhC,UAAAJ;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAP,EAAS,cAAc;"}
@@ -2,12 +2,25 @@ import type React from 'react';
2
2
  export interface ModalProps {
3
3
  children: React.ReactNode;
4
4
  className?: string;
5
+ closeOnEscape?: boolean;
5
6
  closeOnOverlayClick?: boolean;
7
+ /** Rótulo do botão de fechar. Padrão: "Fechar modal". */
8
+ closeLabel?: string;
9
+ /** Rodapé fixo (ações). */
10
+ footer?: React.ReactNode;
6
11
  isOpen: boolean;
7
12
  onClose: () => void;
8
13
  showCloseButton?: boolean;
9
14
  size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';
10
- subtitle?: string;
11
- title?: string | React.ReactNode;
15
+ subtitle?: React.ReactNode;
16
+ title?: React.ReactNode;
17
+ variant?: 'default' | 'glass';
12
18
  }
13
- export declare const Modal: React.FC<ModalProps>;
19
+ /**
20
+ * Diálogo modal com focus trap, restauração de foco, Esc e bloqueio de rolagem.
21
+ * Renderizado em portal no <body>.
22
+ */
23
+ export declare const Modal: {
24
+ ({ isOpen, onClose, title, subtitle, children, footer, size, variant, showCloseButton, closeOnOverlayClick, closeOnEscape, closeLabel, className, }: ModalProps): React.ReactPortal | null;
25
+ displayName: string;
26
+ };