@fabio.caffarello/react-design-system 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/granular/ui/primitives/Input/Input.js +121 -317
- package/dist/granular/ui/primitives/Input/Input.js.map +1 -1
- package/dist/granular/ui/primitives/Input/InputBase.js +223 -0
- package/dist/granular/ui/primitives/Input/InputBase.js.map +1 -0
- package/dist/index.cjs +64 -64
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2174 -2176
- package/dist/index.js.map +1 -1
- package/dist/react-design-system.css +1 -1
- package/dist/server/index.cjs +13 -13
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +754 -562
- package/dist/server/index.js.map +1 -1
- package/dist/ui/primitives/Input/Input.d.ts +13 -15
- package/dist/ui/primitives/Input/InputBase.d.ts +52 -0
- package/dist/ui/primitives/Input/index.d.ts +2 -0
- package/dist/ui/server.d.ts +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var D = Object.defineProperty;
|
|
3
|
+
var u = Object.getOwnPropertySymbols;
|
|
4
|
+
var w = Object.prototype.hasOwnProperty, C = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var N = (s, e, o) => e in s ? D(s, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : s[e] = o, B = (s, e) => {
|
|
6
|
+
for (var o in e || (e = {}))
|
|
7
|
+
w.call(e, o) && N(s, o, e[o]);
|
|
8
|
+
if (u)
|
|
9
|
+
for (var o of u(e))
|
|
10
|
+
C.call(e, o) && N(s, o, e[o]);
|
|
11
|
+
return s;
|
|
12
|
+
};
|
|
13
|
+
var $ = (s, e) => {
|
|
14
|
+
var o = {};
|
|
15
|
+
for (var t in s)
|
|
16
|
+
w.call(s, t) && e.indexOf(t) < 0 && (o[t] = s[t]);
|
|
17
|
+
if (s != null && u)
|
|
18
|
+
for (var t of u(s))
|
|
19
|
+
e.indexOf(t) < 0 && C.call(s, t) && (o[t] = s[t]);
|
|
20
|
+
return o;
|
|
21
|
+
};
|
|
22
|
+
import { jsxs as I, jsx as l } from "react/jsx-runtime";
|
|
23
|
+
import { forwardRef as F } from "react";
|
|
24
|
+
import { getTypographyClasses as E, getTypographySize as m } from "../../tokens/typography.js";
|
|
25
|
+
import { getRadiusClass as L } from "../../tokens/radius.js";
|
|
26
|
+
import { getSpacingClass as n } from "../../tokens/spacing.js";
|
|
27
|
+
import { cn as a } from "../../utils/cn.js";
|
|
28
|
+
import { cva as O } from "../../utils/cva.js";
|
|
29
|
+
const W = O(
|
|
30
|
+
a(
|
|
31
|
+
"w-full",
|
|
32
|
+
L("md"),
|
|
33
|
+
"transition-colors",
|
|
34
|
+
"focus:outline-none",
|
|
35
|
+
"focus:ring-2",
|
|
36
|
+
"focus:ring-offset-2",
|
|
37
|
+
"disabled:opacity-50",
|
|
38
|
+
"disabled:cursor-not-allowed"
|
|
39
|
+
),
|
|
40
|
+
{
|
|
41
|
+
variants: {
|
|
42
|
+
variant: {
|
|
43
|
+
default: a(
|
|
44
|
+
"border-0",
|
|
45
|
+
"border-b-2",
|
|
46
|
+
"border-line-default",
|
|
47
|
+
"focus:border-line-focus"
|
|
48
|
+
),
|
|
49
|
+
outlined: a(
|
|
50
|
+
"border",
|
|
51
|
+
"border-line-default",
|
|
52
|
+
"focus:border-line-focus"
|
|
53
|
+
),
|
|
54
|
+
filled: a(
|
|
55
|
+
"bg-surface-muted",
|
|
56
|
+
"border-0",
|
|
57
|
+
"focus:bg-surface-base",
|
|
58
|
+
"focus:ring-2",
|
|
59
|
+
"focus:ring-line-focus"
|
|
60
|
+
)
|
|
61
|
+
},
|
|
62
|
+
size: {
|
|
63
|
+
sm: a(
|
|
64
|
+
"h-8",
|
|
65
|
+
m("bodySmall"),
|
|
66
|
+
n("md", "px")
|
|
67
|
+
),
|
|
68
|
+
md: a(
|
|
69
|
+
"h-10",
|
|
70
|
+
m("body"),
|
|
71
|
+
n("base", "px")
|
|
72
|
+
),
|
|
73
|
+
lg: a(
|
|
74
|
+
"h-12",
|
|
75
|
+
m("bodyLarge"),
|
|
76
|
+
n("lg", "px")
|
|
77
|
+
)
|
|
78
|
+
},
|
|
79
|
+
state: {
|
|
80
|
+
default: "",
|
|
81
|
+
error: a("border-error", "focus:border-error", "focus:ring-error"),
|
|
82
|
+
success: a(
|
|
83
|
+
"border-success",
|
|
84
|
+
"focus:border-success",
|
|
85
|
+
"focus:ring-success"
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
defaultVariants: {
|
|
90
|
+
variant: "outlined",
|
|
91
|
+
size: "md",
|
|
92
|
+
state: "default"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
function _({
|
|
97
|
+
error: s,
|
|
98
|
+
success: e,
|
|
99
|
+
helperText: o,
|
|
100
|
+
errorId: t,
|
|
101
|
+
helperId: i
|
|
102
|
+
}) {
|
|
103
|
+
const c = a(
|
|
104
|
+
n("xs", "mt"),
|
|
105
|
+
E("caption"),
|
|
106
|
+
s && "text-fg-error",
|
|
107
|
+
e && "text-fg-success",
|
|
108
|
+
!s && !e && "text-fg-secondary"
|
|
109
|
+
);
|
|
110
|
+
return /* @__PURE__ */ l(
|
|
111
|
+
"div",
|
|
112
|
+
{
|
|
113
|
+
id: t || i,
|
|
114
|
+
className: c,
|
|
115
|
+
role: s || e ? "alert" : void 0,
|
|
116
|
+
children: o || (s ? "Error" : e ? "Success" : "")
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
const A = F(
|
|
121
|
+
function(G, q) {
|
|
122
|
+
var v = G, {
|
|
123
|
+
id: e,
|
|
124
|
+
label: o,
|
|
125
|
+
error: t = !1,
|
|
126
|
+
success: i = !1,
|
|
127
|
+
helperText: c,
|
|
128
|
+
size: r = "md",
|
|
129
|
+
variant: V = "outlined",
|
|
130
|
+
leftIcon: f,
|
|
131
|
+
rightIcon: p,
|
|
132
|
+
rightSlot: d,
|
|
133
|
+
className: j = "",
|
|
134
|
+
disabled: b = !1,
|
|
135
|
+
type: k = "text"
|
|
136
|
+
} = v, g = $(v, [
|
|
137
|
+
"id",
|
|
138
|
+
"label",
|
|
139
|
+
"error",
|
|
140
|
+
"success",
|
|
141
|
+
"helperText",
|
|
142
|
+
"size",
|
|
143
|
+
"variant",
|
|
144
|
+
"leftIcon",
|
|
145
|
+
"rightIcon",
|
|
146
|
+
"rightSlot",
|
|
147
|
+
"className",
|
|
148
|
+
"disabled",
|
|
149
|
+
"type"
|
|
150
|
+
]);
|
|
151
|
+
typeof process != "undefined" && process.env.NODE_ENV !== "production" && o && !e && console.warn(
|
|
152
|
+
"[InputBase] `label` was provided without an `id`. The <label> cannot bind to the input (InputBase does not auto-generate an id — that needs a client hook). Pass an `id`, or use the interactive `Input` which auto-generates one."
|
|
153
|
+
);
|
|
154
|
+
const H = t ? "error" : i ? "success" : "default", x = t && e ? `${e}-error` : void 0, h = c && e ? `${e}-helper` : void 0, y = r === "sm" ? "h-4 w-4" : r === "lg" ? "h-5 w-5" : "h-4 w-4", P = r === "sm" ? "top-2" : r === "lg" ? "top-3.5" : "top-2.5", R = a(
|
|
155
|
+
W({ variant: V, size: r, state: H }),
|
|
156
|
+
// Icon padding — `pl-9` / `pr-9` aren't on the spacing scale (no
|
|
157
|
+
// semantic key for 36px) so they stay raw at the `sm` size; md/lg use
|
|
158
|
+
// the getter. Mirrors the original Input contract.
|
|
159
|
+
f && (r === "sm" ? "pl-9" : r === "lg" ? n("3xl", "pl") : n("2xl", "pl")),
|
|
160
|
+
(p || d) && (r === "sm" ? "pr-9" : r === "lg" ? n("3xl", "pr") : n("2xl", "pr")),
|
|
161
|
+
j
|
|
162
|
+
), T = a(
|
|
163
|
+
"block",
|
|
164
|
+
E("label"),
|
|
165
|
+
n("xs", "mb"),
|
|
166
|
+
b && "opacity-50"
|
|
167
|
+
);
|
|
168
|
+
return /* @__PURE__ */ I("div", { className: "w-full", children: [
|
|
169
|
+
o && /* @__PURE__ */ l("label", { htmlFor: e, className: T, children: o }),
|
|
170
|
+
/* @__PURE__ */ I("div", { className: "relative", children: [
|
|
171
|
+
f && /* @__PURE__ */ l(
|
|
172
|
+
"div",
|
|
173
|
+
{
|
|
174
|
+
className: `absolute left-3 ${P} text-fg-secondary opacity-60 pointer-events-none`,
|
|
175
|
+
children: /* @__PURE__ */ l("div", { className: y, children: f })
|
|
176
|
+
}
|
|
177
|
+
),
|
|
178
|
+
/* @__PURE__ */ l(
|
|
179
|
+
"input",
|
|
180
|
+
B({
|
|
181
|
+
id: e,
|
|
182
|
+
ref: q,
|
|
183
|
+
type: k,
|
|
184
|
+
className: R,
|
|
185
|
+
disabled: b,
|
|
186
|
+
"aria-invalid": t,
|
|
187
|
+
"aria-required": g.required,
|
|
188
|
+
"aria-describedby": x || h,
|
|
189
|
+
suppressHydrationWarning: !0
|
|
190
|
+
}, g)
|
|
191
|
+
),
|
|
192
|
+
(p || d) && /* @__PURE__ */ l(
|
|
193
|
+
"div",
|
|
194
|
+
{
|
|
195
|
+
className: `absolute right-3 top-0 bottom-0 flex items-center ${n("xs", "gap")}`,
|
|
196
|
+
children: d != null ? d : /* @__PURE__ */ l(
|
|
197
|
+
"div",
|
|
198
|
+
{
|
|
199
|
+
className: `text-fg-secondary opacity-60 pointer-events-none ${y}`,
|
|
200
|
+
children: p
|
|
201
|
+
}
|
|
202
|
+
)
|
|
203
|
+
}
|
|
204
|
+
)
|
|
205
|
+
] }),
|
|
206
|
+
(t || i || c) && /* @__PURE__ */ l(
|
|
207
|
+
_,
|
|
208
|
+
{
|
|
209
|
+
error: t,
|
|
210
|
+
success: i,
|
|
211
|
+
helperText: c,
|
|
212
|
+
errorId: x,
|
|
213
|
+
helperId: h
|
|
214
|
+
}
|
|
215
|
+
)
|
|
216
|
+
] });
|
|
217
|
+
}
|
|
218
|
+
);
|
|
219
|
+
A.displayName = "InputBase";
|
|
220
|
+
export {
|
|
221
|
+
A as default
|
|
222
|
+
};
|
|
223
|
+
//# sourceMappingURL=InputBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputBase.js","sources":["../../../../../src/ui/primitives/Input/InputBase.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport {\n getTypographyClasses,\n getTypographySize,\n} from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn, cva } from \"../../utils\";\n\n// Ambient declaration so the dev-only warn below typechecks without\n// pulling @types/node into the app tsconfig. At runtime the consumer's\n// bundler replaces `process.env.NODE_ENV` with a literal; the\n// `typeof process` guard keeps the branch safe in browser/edge runtimes.\ndeclare const process: { env: { NODE_ENV?: string } };\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\nexport type InputVariant = \"default\" | \"outlined\" | \"filled\";\nexport type InputState = \"default\" | \"error\" | \"success\";\n\n/**\n * Input variant tokens (issue #224). They used to live inside `Input`\n * wrapped in `useMemo`; moving them here, to the server-safe `InputBase`,\n * removes that decorative memo and makes `InputBase` the single source of\n * the input's visual surface — the interactive `Input` inherits it by\n * composing `InputBase` rather than re-declaring the cva. The focus-ring\n * colours are inlined directly (the old code derived them via\n * `.replace(\"focus:border-\", \"focus:ring-\")`, which produced exactly\n * these classes).\n */\nconst inputVariants = cva(\n cn(\n \"w-full\",\n getRadiusClass(\"md\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"border-0\",\n \"border-b-2\",\n \"border-line-default\",\n \"focus:border-line-focus\",\n ),\n outlined: cn(\n \"border\",\n \"border-line-default\",\n \"focus:border-line-focus\",\n ),\n filled: cn(\n \"bg-surface-muted\",\n \"border-0\",\n \"focus:bg-surface-base\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n ),\n },\n size: {\n sm: cn(\n \"h-8\",\n getTypographySize(\"bodySmall\"),\n getSpacingClass(\"md\", \"px\"),\n ),\n md: cn(\n \"h-10\",\n getTypographySize(\"body\"),\n getSpacingClass(\"base\", \"px\"),\n ),\n lg: cn(\n \"h-12\",\n getTypographySize(\"bodyLarge\"),\n getSpacingClass(\"lg\", \"px\"),\n ),\n },\n state: {\n default: \"\",\n error: cn(\"border-error\", \"focus:border-error\", \"focus:ring-error\"),\n success: cn(\n \"border-success\",\n \"focus:border-success\",\n \"focus:ring-success\",\n ),\n },\n },\n defaultVariants: {\n variant: \"outlined\",\n size: \"md\",\n state: \"default\",\n },\n },\n);\n\n/**\n * Helper / error text. De-memoized (issue #224) — the original wrapped\n * its class string and text in `useMemo`, a decorative memo that blocked\n * server-safety. Inlined here; the work is nanoseconds.\n */\nfunction HelperText({\n error,\n success,\n helperText,\n errorId,\n helperId,\n}: {\n error: boolean;\n success: boolean;\n helperText?: string;\n errorId?: string;\n helperId?: string;\n}) {\n const helperClasses = cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error && \"text-fg-error\",\n success && \"text-fg-success\",\n !error && !success && \"text-fg-secondary\",\n );\n const text = helperText || (error ? \"Error\" : success ? \"Success\" : \"\");\n\n return (\n <div\n id={errorId || helperId}\n className={helperClasses}\n role={error || success ? \"alert\" : undefined}\n >\n {text}\n </div>\n );\n}\n\nexport interface InputBaseProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\"\n> {\n label?: ReactNode;\n error?: boolean;\n success?: boolean;\n helperText?: string;\n size?: InputSize;\n variant?: InputVariant;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n /**\n * Raw trailing-affix slot rendered inside the input's right edge with\n * full interactivity (no `pointer-events-none`). The interactive\n * `Input` injects its password-toggle / clear buttons here; consumers\n * can use it for a static suffix (a unit, a badge). When omitted,\n * `rightIcon` renders instead with the muted decorative treatment.\n */\n rightSlot?: ReactNode;\n}\n\n/**\n * InputBase\n *\n * The **presentational core** of the text input — label, the `<input>`\n * itself, decorative left/right icons, the trailing-affix slot, and the\n * helper/error line. It holds **no React client state** (no `useState`,\n * `useId`, `useCallback`), so it is server-safe and ships from the\n * `./server` entry (issue #224).\n *\n * The interactive `Input` (default export of this folder) composes\n * `InputBase`, owning the password-toggle state, the clear button, and\n * the `useId` auto-id fallback — it passes the resolved `id`, the\n * toggled `type`, and its affix buttons (`rightSlot`) down. Use\n * `InputBase` directly for server-rendered / native-form inputs where\n * none of that interactivity is needed (`<form method=\"GET\">` filters,\n * RSC pages).\n *\n * Accessible name: pass `id` when you pass `label` so the `<label\n * htmlFor>` binds — `InputBase` does NOT auto-generate an id (that needs\n * `useId`, which would make it client). A dev-only warning fires when a\n * `label` is given without an `id`.\n *\n * @example\n * ```tsx\n * // Server component / native form — zero client state.\n * <InputBase id=\"q\" name=\"q\" placeholder=\"Buscar…\" />\n * ```\n */\nconst InputBase = forwardRef<HTMLInputElement, InputBaseProps>(\n function InputBase(\n {\n id,\n label,\n error = false,\n success = false,\n helperText,\n size = \"md\",\n variant = \"outlined\",\n leftIcon,\n rightIcon,\n rightSlot,\n className = \"\",\n disabled = false,\n type = \"text\",\n ...props\n },\n ref,\n ) {\n if (\n typeof process !== \"undefined\" &&\n process.env.NODE_ENV !== \"production\" &&\n label &&\n !id\n ) {\n console.warn(\n \"[InputBase] `label` was provided without an `id`. The <label> cannot bind to the input (InputBase does not auto-generate an id — that needs a client hook). Pass an `id`, or use the interactive `Input` which auto-generates one.\",\n );\n }\n\n const state: InputState = error ? \"error\" : success ? \"success\" : \"default\";\n\n const errorId = error && id ? `${id}-error` : undefined;\n const helperId = helperText && id ? `${id}-helper` : undefined;\n\n const iconSize =\n size === \"sm\" ? \"h-4 w-4\" : size === \"lg\" ? \"h-5 w-5\" : \"h-4 w-4\";\n const iconPosition =\n size === \"sm\" ? \"top-2\" : size === \"lg\" ? \"top-3.5\" : \"top-2.5\";\n\n const inputClasses = cn(\n inputVariants({ variant, size, state }),\n // Icon padding — `pl-9` / `pr-9` aren't on the spacing scale (no\n // semantic key for 36px) so they stay raw at the `sm` size; md/lg use\n // the getter. Mirrors the original Input contract.\n leftIcon &&\n (size === \"sm\"\n ? \"pl-9\"\n : size === \"lg\"\n ? getSpacingClass(\"3xl\", \"pl\")\n : getSpacingClass(\"2xl\", \"pl\")),\n (rightIcon || rightSlot) &&\n (size === \"sm\"\n ? \"pr-9\"\n : size === \"lg\"\n ? getSpacingClass(\"3xl\", \"pr\")\n : getSpacingClass(\"2xl\", \"pr\")),\n className,\n );\n\n const labelClasses = cn(\n \"block\",\n getTypographyClasses(\"label\"),\n getSpacingClass(\"xs\", \"mb\"),\n disabled && \"opacity-50\",\n );\n\n return (\n <div className=\"w-full\">\n {label && (\n <label htmlFor={id} className={labelClasses}>\n {label}\n </label>\n )}\n <div className=\"relative\">\n {leftIcon && (\n <div\n className={`absolute left-3 ${iconPosition} text-fg-secondary opacity-60 pointer-events-none`}\n >\n <div className={iconSize}>{leftIcon}</div>\n </div>\n )}\n <input\n id={id}\n ref={ref}\n type={type}\n className={inputClasses}\n disabled={disabled}\n aria-invalid={error}\n aria-required={props.required}\n aria-describedby={errorId || helperId}\n suppressHydrationWarning\n {...props}\n />\n {(rightIcon || rightSlot) && (\n <div\n className={`absolute right-3 top-0 bottom-0 flex items-center ${getSpacingClass(\"xs\", \"gap\")}`}\n >\n {rightSlot ?? (\n <div\n className={`text-fg-secondary opacity-60 pointer-events-none ${iconSize}`}\n >\n {rightIcon}\n </div>\n )}\n </div>\n )}\n </div>\n {(error || success || helperText) && (\n <HelperText\n error={error}\n success={success}\n helperText={helperText}\n errorId={errorId}\n helperId={helperId}\n />\n )}\n </div>\n );\n },\n);\n\nInputBase.displayName = \"InputBase\";\n\nexport default InputBase;\n"],"names":["inputVariants","cva","cn","getRadiusClass","getTypographySize","getSpacingClass","HelperText","error","success","helperText","errorId","helperId","helperClasses","getTypographyClasses","jsx","InputBase","forwardRef","_a","ref","_b","id","label","size","variant","leftIcon","rightIcon","rightSlot","className","disabled","type","props","__objRest","state","iconSize","iconPosition","inputClasses","labelClasses","jsxs","__spreadValues"],"mappings":"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"}
|