@vector-business-services/cristal-ds-web 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/icons.cjs +27 -0
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.d.cts +15 -0
- package/dist/icons.d.ts +15 -0
- package/dist/icons.js +19 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.cjs +475 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +932 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +188 -0
- package/dist/index.d.ts +188 -0
- package/dist/index.js +465 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -3
- package/README.md +0 -3
package/dist/index.js
ADDED
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import { forwardRef, useId, useRef, useImperativeHandle } from 'react';
|
|
2
|
+
import { AutoComplete as AutoComplete$1 } from 'primereact/autocomplete';
|
|
3
|
+
import { WarningCircle, Info, Check, CaretDown, MagnifyingGlass, X } from '@phosphor-icons/react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
import { Badge as Badge$1 } from 'primereact/badge';
|
|
6
|
+
import { Button as Button$1 } from 'primereact/button';
|
|
7
|
+
import { Chip as Chip$1 } from 'primereact/chip';
|
|
8
|
+
import { Divider as Divider$1 } from 'primereact/divider';
|
|
9
|
+
import { InputText } from 'primereact/inputtext';
|
|
10
|
+
import { MultiSelect as MultiSelect$1 } from 'primereact/multiselect';
|
|
11
|
+
import { Tag as Tag$1 } from 'primereact/tag';
|
|
12
|
+
|
|
13
|
+
// src/components/AutoComplete/AutoComplete.tsx
|
|
14
|
+
var AutoComplete = forwardRef(function AutoComplete2({
|
|
15
|
+
variant = "outline",
|
|
16
|
+
size = "large",
|
|
17
|
+
label,
|
|
18
|
+
hint,
|
|
19
|
+
error,
|
|
20
|
+
inputId,
|
|
21
|
+
required,
|
|
22
|
+
disabled,
|
|
23
|
+
className,
|
|
24
|
+
style,
|
|
25
|
+
...props
|
|
26
|
+
}, ref) {
|
|
27
|
+
const autoId = useId();
|
|
28
|
+
const id = inputId ?? autoId;
|
|
29
|
+
const hintId = `${id}-hint`;
|
|
30
|
+
const supportText = error ?? hint;
|
|
31
|
+
const classes = [
|
|
32
|
+
"cr-field",
|
|
33
|
+
"cr-autocomplete",
|
|
34
|
+
`cr-field--${variant}`,
|
|
35
|
+
`cr-field--${size}`,
|
|
36
|
+
error && "cr-field--error",
|
|
37
|
+
disabled && "cr-field--disabled",
|
|
38
|
+
className
|
|
39
|
+
].filter(Boolean).join(" ");
|
|
40
|
+
return /* @__PURE__ */ jsxs("div", { className: classes, style, children: [
|
|
41
|
+
label && /* @__PURE__ */ jsxs("label", { className: "cr-field__label", htmlFor: id, children: [
|
|
42
|
+
label,
|
|
43
|
+
required && /* @__PURE__ */ jsx("span", { className: "cr-field__required", "aria-hidden": "true", children: "*" })
|
|
44
|
+
] }),
|
|
45
|
+
/* @__PURE__ */ jsx(
|
|
46
|
+
AutoComplete$1,
|
|
47
|
+
{
|
|
48
|
+
unstyled: true,
|
|
49
|
+
inputRef: ref,
|
|
50
|
+
inputId: id,
|
|
51
|
+
required,
|
|
52
|
+
disabled,
|
|
53
|
+
scrollHeight: "185px",
|
|
54
|
+
pt: {
|
|
55
|
+
root: { className: "cr-autocomplete__root" },
|
|
56
|
+
input: {
|
|
57
|
+
root: {
|
|
58
|
+
className: "cr-field__control cr-autocomplete__input",
|
|
59
|
+
"aria-describedby": supportText ? hintId : void 0,
|
|
60
|
+
"aria-invalid": error ? true : void 0
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
// O Prime mostra um spinner próprio enquanto busca; o Figma não define esse estado.
|
|
64
|
+
loadingIcon: { className: "cr-autocomplete__loader" },
|
|
65
|
+
panel: { className: "cr-autocomplete__panel" },
|
|
66
|
+
list: { className: "cr-autocomplete__list" },
|
|
67
|
+
item: { className: "cr-autocomplete__item" }
|
|
68
|
+
},
|
|
69
|
+
...props
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
supportText && /* @__PURE__ */ jsxs("p", { id: hintId, className: `cr-field__hint${error ? " cr-field__hint--error" : ""}`, children: [
|
|
73
|
+
/* @__PURE__ */ jsx("span", { className: "cr-field__hint-icon", "aria-hidden": "true", children: error ? /* @__PURE__ */ jsx(WarningCircle, {}) : /* @__PURE__ */ jsx(Info, {}) }),
|
|
74
|
+
supportText
|
|
75
|
+
] })
|
|
76
|
+
] });
|
|
77
|
+
});
|
|
78
|
+
var Badge = forwardRef(function Badge2({ variant = "default", size = "large", className, children, ...props }, ref) {
|
|
79
|
+
const primeRef = useRef(null);
|
|
80
|
+
useImperativeHandle(ref, () => primeRef.current?.getElement());
|
|
81
|
+
const classes = ["cr-badge", `cr-badge--${variant}`, `cr-badge--${size}`, className].filter(Boolean).join(" ");
|
|
82
|
+
return /* @__PURE__ */ jsx(
|
|
83
|
+
Badge$1,
|
|
84
|
+
{
|
|
85
|
+
unstyled: true,
|
|
86
|
+
ref: primeRef,
|
|
87
|
+
className: classes,
|
|
88
|
+
value: size === "small" ? null : children,
|
|
89
|
+
...props
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
});
|
|
93
|
+
var Button = forwardRef(function Button2({
|
|
94
|
+
variant = "primary",
|
|
95
|
+
size = "large",
|
|
96
|
+
leadingIcon,
|
|
97
|
+
trailingIcon,
|
|
98
|
+
type = "button",
|
|
99
|
+
className,
|
|
100
|
+
children,
|
|
101
|
+
...props
|
|
102
|
+
}, ref) {
|
|
103
|
+
const classes = ["cr-button", `cr-button--${variant}`, `cr-button--${size}`, className].filter(Boolean).join(" ");
|
|
104
|
+
return /* @__PURE__ */ jsxs(
|
|
105
|
+
Button$1,
|
|
106
|
+
{
|
|
107
|
+
unstyled: true,
|
|
108
|
+
ref,
|
|
109
|
+
type,
|
|
110
|
+
className: classes,
|
|
111
|
+
...props,
|
|
112
|
+
children: [
|
|
113
|
+
leadingIcon && /* @__PURE__ */ jsx("span", { className: "cr-button__icon", "aria-hidden": "true", children: leadingIcon }),
|
|
114
|
+
children,
|
|
115
|
+
trailingIcon && /* @__PURE__ */ jsx("span", { className: "cr-button__icon", "aria-hidden": "true", children: trailingIcon })
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
var Chip = forwardRef(function Chip2({
|
|
121
|
+
label,
|
|
122
|
+
variant = "default",
|
|
123
|
+
size = "small",
|
|
124
|
+
leadingIcon,
|
|
125
|
+
trailingIcon,
|
|
126
|
+
disabled = false,
|
|
127
|
+
onRemove,
|
|
128
|
+
removeLabel = "Remover",
|
|
129
|
+
className,
|
|
130
|
+
...props
|
|
131
|
+
}, ref) {
|
|
132
|
+
const classes = [
|
|
133
|
+
"cr-chip",
|
|
134
|
+
`cr-chip--${variant}`,
|
|
135
|
+
`cr-chip--${size}`,
|
|
136
|
+
disabled && "cr-chip--disabled",
|
|
137
|
+
className
|
|
138
|
+
].filter(Boolean).join(" ");
|
|
139
|
+
const removable = Boolean(onRemove) && !disabled;
|
|
140
|
+
const trailing = trailingIcon ?? (onRemove ? /* @__PURE__ */ jsx(X, {}) : null);
|
|
141
|
+
return /* @__PURE__ */ jsx(
|
|
142
|
+
Chip$1,
|
|
143
|
+
{
|
|
144
|
+
unstyled: true,
|
|
145
|
+
pt: { root: { ref, "aria-label": void 0 } },
|
|
146
|
+
className: classes,
|
|
147
|
+
label,
|
|
148
|
+
"aria-disabled": disabled || void 0,
|
|
149
|
+
icon: leadingIcon ? () => /* @__PURE__ */ jsx("span", { className: "cr-chip__icon cr-chip__icon--leading", "aria-hidden": "true", children: leadingIcon }) : void 0,
|
|
150
|
+
removable: Boolean(trailing),
|
|
151
|
+
removeIcon: (options) => {
|
|
152
|
+
if (!removable) {
|
|
153
|
+
return /* @__PURE__ */ jsx("span", { className: "cr-chip__icon cr-chip__icon--trailing", "aria-hidden": "true", children: trailing });
|
|
154
|
+
}
|
|
155
|
+
const { role, tabIndex, onClick, onKeyDown } = options.iconProps;
|
|
156
|
+
return /* @__PURE__ */ jsx(
|
|
157
|
+
"span",
|
|
158
|
+
{
|
|
159
|
+
role,
|
|
160
|
+
tabIndex,
|
|
161
|
+
onClick,
|
|
162
|
+
onKeyDown,
|
|
163
|
+
className: "cr-chip__icon cr-chip__icon--trailing cr-chip__remove",
|
|
164
|
+
"aria-label": removeLabel,
|
|
165
|
+
children: trailing
|
|
166
|
+
}
|
|
167
|
+
);
|
|
168
|
+
},
|
|
169
|
+
onRemove: onRemove ? (event) => onRemove(event) !== false : void 0,
|
|
170
|
+
...props
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
});
|
|
174
|
+
var Divider = forwardRef(function Divider2({ orientation = "horizontal", variant = "solid", className, style, ...props }, ref) {
|
|
175
|
+
const primeRef = useRef(null);
|
|
176
|
+
useImperativeHandle(ref, () => primeRef.current?.getElement());
|
|
177
|
+
const classes = ["cr-divider", `cr-divider--${orientation}`, `cr-divider--${variant}`, className].filter(Boolean).join(" ");
|
|
178
|
+
return /* @__PURE__ */ jsx(
|
|
179
|
+
Divider$1,
|
|
180
|
+
{
|
|
181
|
+
unstyled: true,
|
|
182
|
+
ref: primeRef,
|
|
183
|
+
layout: orientation,
|
|
184
|
+
pt: {
|
|
185
|
+
root: { className: classes, style },
|
|
186
|
+
content: { className: "cr-divider__content" }
|
|
187
|
+
},
|
|
188
|
+
...props
|
|
189
|
+
}
|
|
190
|
+
);
|
|
191
|
+
});
|
|
192
|
+
var IconButton = forwardRef(function IconButton2({ variant = "primary", size = "large", icon, type = "button", className, ...props }, ref) {
|
|
193
|
+
const classes = [
|
|
194
|
+
"cr-icon-button",
|
|
195
|
+
`cr-icon-button--${variant}`,
|
|
196
|
+
`cr-icon-button--${size}`,
|
|
197
|
+
className
|
|
198
|
+
].filter(Boolean).join(" ");
|
|
199
|
+
return /* @__PURE__ */ jsx(
|
|
200
|
+
Button$1,
|
|
201
|
+
{
|
|
202
|
+
unstyled: true,
|
|
203
|
+
ref,
|
|
204
|
+
type,
|
|
205
|
+
className: classes,
|
|
206
|
+
...props,
|
|
207
|
+
children: /* @__PURE__ */ jsx("span", { className: "cr-icon-button__icon", "aria-hidden": "true", children: icon })
|
|
208
|
+
}
|
|
209
|
+
);
|
|
210
|
+
});
|
|
211
|
+
var Input = forwardRef(function Input2({
|
|
212
|
+
variant = "outline",
|
|
213
|
+
size = "large",
|
|
214
|
+
label,
|
|
215
|
+
leadingIcon,
|
|
216
|
+
trailingIcon,
|
|
217
|
+
hint,
|
|
218
|
+
error,
|
|
219
|
+
id,
|
|
220
|
+
required,
|
|
221
|
+
disabled,
|
|
222
|
+
className,
|
|
223
|
+
...props
|
|
224
|
+
}, ref) {
|
|
225
|
+
const autoId = useId();
|
|
226
|
+
const inputId = id ?? autoId;
|
|
227
|
+
const hintId = `${inputId}-hint`;
|
|
228
|
+
const supportText = error ?? hint;
|
|
229
|
+
const classes = [
|
|
230
|
+
"cr-field",
|
|
231
|
+
`cr-field--${variant}`,
|
|
232
|
+
`cr-field--${size}`,
|
|
233
|
+
error && "cr-field--error",
|
|
234
|
+
disabled && "cr-field--disabled",
|
|
235
|
+
className
|
|
236
|
+
].filter(Boolean).join(" ");
|
|
237
|
+
return /* @__PURE__ */ jsxs("div", { className: classes, children: [
|
|
238
|
+
label && /* @__PURE__ */ jsxs("label", { className: "cr-field__label", htmlFor: inputId, children: [
|
|
239
|
+
label,
|
|
240
|
+
required && /* @__PURE__ */ jsx("span", { className: "cr-field__required", "aria-hidden": "true", children: "*" })
|
|
241
|
+
] }),
|
|
242
|
+
/* @__PURE__ */ jsxs("div", { className: "cr-field__control", children: [
|
|
243
|
+
leadingIcon && /* @__PURE__ */ jsx("span", { className: "cr-field__icon", "aria-hidden": "true", children: leadingIcon }),
|
|
244
|
+
/* @__PURE__ */ jsx(
|
|
245
|
+
InputText,
|
|
246
|
+
{
|
|
247
|
+
unstyled: true,
|
|
248
|
+
ref,
|
|
249
|
+
id: inputId,
|
|
250
|
+
className: "cr-field__input",
|
|
251
|
+
required,
|
|
252
|
+
disabled,
|
|
253
|
+
invalid: Boolean(error),
|
|
254
|
+
"aria-invalid": error ? true : void 0,
|
|
255
|
+
"aria-describedby": supportText ? hintId : void 0,
|
|
256
|
+
...props
|
|
257
|
+
}
|
|
258
|
+
),
|
|
259
|
+
trailingIcon && /* @__PURE__ */ jsx("span", { className: "cr-field__icon", children: trailingIcon })
|
|
260
|
+
] }),
|
|
261
|
+
supportText && /* @__PURE__ */ jsxs("p", { id: hintId, className: `cr-field__hint${error ? " cr-field__hint--error" : ""}`, children: [
|
|
262
|
+
/* @__PURE__ */ jsx("span", { className: "cr-field__hint-icon", "aria-hidden": "true", children: error ? /* @__PURE__ */ jsx(WarningCircle, {}) : /* @__PURE__ */ jsx(Info, {}) }),
|
|
263
|
+
supportText
|
|
264
|
+
] })
|
|
265
|
+
] });
|
|
266
|
+
});
|
|
267
|
+
var MultiSelect = forwardRef(function MultiSelect2({
|
|
268
|
+
variant = "outline",
|
|
269
|
+
size = "large",
|
|
270
|
+
density = "normal",
|
|
271
|
+
label,
|
|
272
|
+
options,
|
|
273
|
+
optionLabel = "label",
|
|
274
|
+
optionValue,
|
|
275
|
+
value,
|
|
276
|
+
onChange,
|
|
277
|
+
placeholder = "Selecionar op\xE7\xE3o",
|
|
278
|
+
filter = false,
|
|
279
|
+
filterPlaceholder = "Pesquisar",
|
|
280
|
+
maxChips = 3,
|
|
281
|
+
selectedItemsLabel = "{0} itens selecionados",
|
|
282
|
+
removeLabel = "Remover",
|
|
283
|
+
selectAllLabel = "Selecionar todos",
|
|
284
|
+
emptyFilterMessage = "Nenhum resultado encontrado",
|
|
285
|
+
hint,
|
|
286
|
+
error,
|
|
287
|
+
required,
|
|
288
|
+
disabled,
|
|
289
|
+
id,
|
|
290
|
+
className,
|
|
291
|
+
...props
|
|
292
|
+
}, ref) {
|
|
293
|
+
const autoId = useId();
|
|
294
|
+
const inputId = id ?? autoId;
|
|
295
|
+
const hintId = `${inputId}-hint`;
|
|
296
|
+
const supportText = error ?? hint;
|
|
297
|
+
const selected = value ?? [];
|
|
298
|
+
const overflow = selected.length > maxChips;
|
|
299
|
+
const classes = [
|
|
300
|
+
"cr-field",
|
|
301
|
+
`cr-field--${variant}`,
|
|
302
|
+
`cr-field--${size}`,
|
|
303
|
+
"cr-multiselect",
|
|
304
|
+
error && "cr-field--error",
|
|
305
|
+
disabled && "cr-field--disabled",
|
|
306
|
+
className
|
|
307
|
+
].filter(Boolean).join(" ");
|
|
308
|
+
const valueOf = (option) => optionValue ? option[optionValue] : option;
|
|
309
|
+
const labelOf = (item) => {
|
|
310
|
+
const option = options.find((o) => valueOf(o) === item) ?? item;
|
|
311
|
+
const text = option?.[optionLabel];
|
|
312
|
+
return String(text ?? item);
|
|
313
|
+
};
|
|
314
|
+
const remove = (event, next) => {
|
|
315
|
+
event.originalEvent.stopPropagation();
|
|
316
|
+
onChange?.(next);
|
|
317
|
+
return false;
|
|
318
|
+
};
|
|
319
|
+
const renderSelected = (item) => {
|
|
320
|
+
if (item === void 0) {
|
|
321
|
+
return /* @__PURE__ */ jsx("span", { className: "cr-multiselect__placeholder", children: placeholder });
|
|
322
|
+
}
|
|
323
|
+
if (overflow) {
|
|
324
|
+
if (selected.indexOf(item) !== 0) return null;
|
|
325
|
+
return /* @__PURE__ */ jsx(
|
|
326
|
+
Chip,
|
|
327
|
+
{
|
|
328
|
+
className: "cr-multiselect__chip",
|
|
329
|
+
label: selectedItemsLabel.replace("{0}", String(selected.length)),
|
|
330
|
+
disabled,
|
|
331
|
+
onRemove: disabled ? void 0 : (event) => remove(event, []),
|
|
332
|
+
removeLabel
|
|
333
|
+
}
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
return /* @__PURE__ */ jsx(
|
|
337
|
+
Chip,
|
|
338
|
+
{
|
|
339
|
+
className: "cr-multiselect__chip",
|
|
340
|
+
label: labelOf(item),
|
|
341
|
+
disabled,
|
|
342
|
+
onRemove: disabled ? void 0 : (event) => remove(
|
|
343
|
+
event,
|
|
344
|
+
selected.filter((v) => v !== item)
|
|
345
|
+
),
|
|
346
|
+
removeLabel: `${removeLabel} ${labelOf(item)}`
|
|
347
|
+
}
|
|
348
|
+
);
|
|
349
|
+
};
|
|
350
|
+
const checkbox = {
|
|
351
|
+
root: { className: "cr-multiselect__checkbox" },
|
|
352
|
+
box: { className: "cr-multiselect__checkbox-box" },
|
|
353
|
+
input: { className: "cr-multiselect__checkbox-input" }
|
|
354
|
+
};
|
|
355
|
+
const pt = {
|
|
356
|
+
// Com a lista aberta o foco vai para a busca (no body), fora da caixa: o estado Focused do
|
|
357
|
+
// Figma vem do estado do Prime.
|
|
358
|
+
root: (options2) => {
|
|
359
|
+
const open = options2?.state?.overlayVisible;
|
|
360
|
+
return {
|
|
361
|
+
className: `cr-field__control cr-multiselect__control${open ? " cr-multiselect__control--open" : ""}`
|
|
362
|
+
};
|
|
363
|
+
},
|
|
364
|
+
hiddenInputWrapper: { className: "cr-multiselect__hidden" },
|
|
365
|
+
input: {
|
|
366
|
+
"aria-describedby": supportText ? hintId : void 0,
|
|
367
|
+
"aria-invalid": error ? true : void 0,
|
|
368
|
+
"aria-required": required || void 0
|
|
369
|
+
},
|
|
370
|
+
labelContainer: { className: "cr-multiselect__value" },
|
|
371
|
+
label: { className: "cr-multiselect__chips" },
|
|
372
|
+
trigger: { className: "cr-field__icon cr-multiselect__trigger" },
|
|
373
|
+
panel: { className: `cr-multiselect__panel cr-multiselect__panel--${density}` },
|
|
374
|
+
header: { className: "cr-multiselect__header" },
|
|
375
|
+
headerCheckboxContainer: { className: "cr-multiselect__select-all" },
|
|
376
|
+
// O Prime repete role=checkbox na <div> em volta do <input>: o leitor de tela veria dois.
|
|
377
|
+
headerCheckbox: {
|
|
378
|
+
...checkbox,
|
|
379
|
+
root: { ...checkbox.root, role: void 0, "aria-checked": void 0 },
|
|
380
|
+
input: { ...checkbox.input, "aria-label": selectAllLabel }
|
|
381
|
+
},
|
|
382
|
+
filterContainer: { className: "cr-multiselect__search" },
|
|
383
|
+
// O filtro é um InputText do Prime, que lê o pass-through da raiz (a tipagem do Prime diverge).
|
|
384
|
+
filterInput: {
|
|
385
|
+
root: { className: "cr-multiselect__search-input", "aria-label": filterPlaceholder }
|
|
386
|
+
},
|
|
387
|
+
closeButton: { className: "cr-multiselect__close" },
|
|
388
|
+
wrapper: { className: "cr-multiselect__wrapper" },
|
|
389
|
+
list: { className: "cr-multiselect__list" },
|
|
390
|
+
item: (options2) => {
|
|
391
|
+
const context = options2?.context;
|
|
392
|
+
const focused = context !== void 0 && context.focusedIndex === context.index;
|
|
393
|
+
return {
|
|
394
|
+
className: `cr-multiselect__item${focused ? " cr-multiselect__item--focused" : ""}`
|
|
395
|
+
};
|
|
396
|
+
},
|
|
397
|
+
checkboxContainer: { className: "cr-multiselect__item-checkbox" },
|
|
398
|
+
// O item (role=option) já diz se está selecionado; o checkbox é só visual para o leitor de tela.
|
|
399
|
+
// O item (role=option) já diz se está selecionado. O checkbox do Prime fica só visual: inert
|
|
400
|
+
// tira o <input> do foco e do leitor de tela (tabindex=-1 e aria-hidden não bastam dentro de
|
|
401
|
+
// um option), e o clique cai no item.
|
|
402
|
+
checkbox: {
|
|
403
|
+
...checkbox,
|
|
404
|
+
root: { ...checkbox.root, role: void 0, "aria-checked": void 0, inert: true }
|
|
405
|
+
},
|
|
406
|
+
emptyMessage: { className: "cr-multiselect__empty" }
|
|
407
|
+
};
|
|
408
|
+
return /* @__PURE__ */ jsxs("div", { className: classes, children: [
|
|
409
|
+
label && /* @__PURE__ */ jsxs("label", { className: "cr-field__label", htmlFor: inputId, children: [
|
|
410
|
+
label,
|
|
411
|
+
required && /* @__PURE__ */ jsx("span", { className: "cr-field__required", "aria-hidden": "true", children: "*" })
|
|
412
|
+
] }),
|
|
413
|
+
/* @__PURE__ */ jsx(
|
|
414
|
+
MultiSelect$1,
|
|
415
|
+
{
|
|
416
|
+
unstyled: true,
|
|
417
|
+
inputId,
|
|
418
|
+
inputRef: ref,
|
|
419
|
+
value: selected,
|
|
420
|
+
options,
|
|
421
|
+
optionLabel,
|
|
422
|
+
optionValue,
|
|
423
|
+
onChange: (event) => onChange?.(event.value),
|
|
424
|
+
disabled,
|
|
425
|
+
invalid: Boolean(error),
|
|
426
|
+
placeholder,
|
|
427
|
+
selectedItemTemplate: renderSelected,
|
|
428
|
+
filter,
|
|
429
|
+
filterPlaceholder,
|
|
430
|
+
scrollHeight: density === "compact" ? "224px" : "280px",
|
|
431
|
+
emptyFilterMessage,
|
|
432
|
+
filterIcon: /* @__PURE__ */ jsx("span", { className: "cr-multiselect__search-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx(MagnifyingGlass, {}) }),
|
|
433
|
+
dropdownIcon: /* @__PURE__ */ jsx(CaretDown, { "aria-hidden": "true" }),
|
|
434
|
+
checkboxIcon: /* @__PURE__ */ jsx(Check, { "aria-hidden": "true" }),
|
|
435
|
+
itemCheckboxIcon: /* @__PURE__ */ jsx(Check, { "aria-hidden": "true" }),
|
|
436
|
+
pt,
|
|
437
|
+
...props
|
|
438
|
+
}
|
|
439
|
+
),
|
|
440
|
+
supportText && /* @__PURE__ */ jsxs("p", { id: hintId, className: `cr-field__hint${error ? " cr-field__hint--error" : ""}`, children: [
|
|
441
|
+
/* @__PURE__ */ jsx("span", { className: "cr-field__hint-icon", "aria-hidden": "true", children: error ? /* @__PURE__ */ jsx(WarningCircle, {}) : /* @__PURE__ */ jsx(Info, {}) }),
|
|
442
|
+
supportText
|
|
443
|
+
] })
|
|
444
|
+
] });
|
|
445
|
+
});
|
|
446
|
+
var Tag = forwardRef(function Tag2({ variant = "default", size = "small", icon, className, children, ...props }, ref) {
|
|
447
|
+
const primeRef = useRef(null);
|
|
448
|
+
useImperativeHandle(ref, () => primeRef.current?.getElement());
|
|
449
|
+
const classes = ["cr-tag", `cr-tag--${variant}`, `cr-tag--${size}`, className].filter(Boolean).join(" ");
|
|
450
|
+
return /* @__PURE__ */ jsx(
|
|
451
|
+
Tag$1,
|
|
452
|
+
{
|
|
453
|
+
unstyled: true,
|
|
454
|
+
ref: primeRef,
|
|
455
|
+
className: classes,
|
|
456
|
+
icon: icon ? () => /* @__PURE__ */ jsx("span", { className: "cr-tag__icon", "aria-hidden": "true", children: icon }) : void 0,
|
|
457
|
+
value: children,
|
|
458
|
+
...props
|
|
459
|
+
}
|
|
460
|
+
);
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
export { AutoComplete, Badge, Button, Chip, Divider, IconButton, Input, MultiSelect, Tag };
|
|
464
|
+
//# sourceMappingURL=index.js.map
|
|
465
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/AutoComplete/AutoComplete.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Chip/Chip.tsx","../src/components/Divider/Divider.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Input/Input.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/Tag/Tag.tsx"],"names":["AutoComplete","PrimeAutoComplete","forwardRef","Badge","jsx","PrimeBadge","Button","jsxs","PrimeButton","Chip","PrimeChip","Divider","useRef","useImperativeHandle","PrimeDivider","IconButton","Input","useId","WarningCircle","Info","MultiSelect","options","PrimeMultiSelect","Tag","PrimeTag"],"mappings":"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","file":"index.js","sourcesContent":["import { forwardRef, useId } from 'react';\nimport {\n AutoComplete as PrimeAutoComplete,\n type AutoCompleteProps as PrimeAutoCompleteProps,\n} from 'primereact/autocomplete';\nimport { Info, WarningCircle } from '@phosphor-icons/react';\nimport type { InputSize, InputVariant } from '../Input';\nimport '../Input/Input.css';\nimport './AutoComplete.css';\n\nexport type AutoCompleteVariant = InputVariant;\nexport type AutoCompleteSize = InputSize;\n\nexport interface AutoCompleteProps extends Omit<\n PrimeAutoCompleteProps,\n // Fora do Figma (seleção múltipla, botão de dropdown, mensagem de vazio, carregando) ou\n // controlados pelo Cristal (visual, rótulo, erro).\n | 'size'\n | 'variant'\n | 'invalid'\n | 'multiple'\n | 'selectionLimit'\n | 'selectedItemTemplate'\n | 'removeTokenIcon'\n | 'dropdown'\n | 'dropdownAriaLabel'\n | 'dropdownAutoFocus'\n | 'dropdownIcon'\n | 'dropdownMode'\n | 'showEmptyMessage'\n | 'emptyMessage'\n | 'loadingIcon'\n | 'inputClassName'\n | 'panelClassName'\n | 'scrollHeight'\n | 'inputRef'\n | 'pt'\n | 'ptOptions'\n | 'unstyled'\n | 'children'\n> {\n /** Type no Figma: Outline (com borda) e Filled (com fundo). */\n variant?: AutoCompleteVariant;\n /** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\n size?: AutoCompleteSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n /** Dica abaixo do campo (Hint no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n}\n\n// Base: AutoComplete do PrimeReact no modo unstyled (busca, lista, teclado e ARIA de combobox do\n// Prime, espelhando o p-autoComplete do PrimeNG da produção). O rótulo e a dica são os do Input\n// (.cr-field). O campo do AutoComplete no Figma não tem ícones, então o próprio <input> é a caixa\n// do campo: assim o painel, que o Prime alinha pelo <input>, fica na largura e na borda do campo.\nexport const AutoComplete = forwardRef<HTMLInputElement, AutoCompleteProps>(function AutoComplete(\n {\n variant = 'outline',\n size = 'large',\n label,\n hint,\n error,\n inputId,\n required,\n disabled,\n className,\n style,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const id = inputId ?? autoId;\n const hintId = `${id}-hint`;\n const supportText = error ?? hint;\n\n const classes = [\n 'cr-field',\n 'cr-autocomplete',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={id}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <PrimeAutoComplete\n unstyled\n inputRef={ref}\n inputId={id}\n required={required}\n disabled={disabled}\n // 5 itens visíveis, como no Figma (5 × 37px).\n scrollHeight=\"185px\"\n pt={{\n root: { className: 'cr-autocomplete__root' },\n input: {\n root: {\n className: 'cr-field__control cr-autocomplete__input',\n 'aria-describedby': supportText ? hintId : undefined,\n 'aria-invalid': error ? true : undefined,\n },\n },\n // O Prime mostra um spinner próprio enquanto busca; o Figma não define esse estado.\n loadingIcon: { className: 'cr-autocomplete__loader' },\n panel: { className: 'cr-autocomplete__panel' },\n list: { className: 'cr-autocomplete__list' },\n item: { className: 'cr-autocomplete__item' },\n }}\n {...props}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Badge as PrimeBadge } from 'primereact/badge';\nimport './Badge.css';\n\n/** State no Figma. */\nexport type BadgeVariant = 'default' | 'error' | 'warning' | 'success' | 'disabled';\n/** Size no Figma: large = 24px, medium = 16px, small = ponto de 8px sem número. */\nexport type BadgeSize = 'large' | 'medium' | 'small';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Valor do badge (Badge Value no Figma). Ignorado no `small`. */\n children?: ReactNode;\n}\n\n// Base: Badge do PrimeReact no modo unstyled; o visual vem todo do Badge.css. No small o\n// conteúdo é descartado: é um indicador sem número (para ele ser anunciado, passe role=\"img\" e\n// aria-label).\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant = 'default', size = 'large', className, children, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeBadge>(null);\n // O PrimeReact entrega na ref um objeto com getElement(); o Cristal repassa o <span>.\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLSpanElement);\n\n const classes = ['cr-badge', `cr-badge--${variant}`, `cr-badge--${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeBadge\n unstyled\n ref={primeRef}\n className={classes}\n value={size === 'small' ? null : children}\n {...props}\n />\n );\n});\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\nimport './Button.css';\n\n/** Hierarchy no Figma: Primary (Filled), Secondary (Tonal) e Tertiary (Outlined). */\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary';\n/** Size no Figma: 32, 36, 42 e 48px de altura. */\nexport type ButtonSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Ícone antes do texto (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n leadingIcon?: ReactNode;\n /** Ícone depois do texto (Trailing Icon no Figma). */\n trailingIcon?: ReactNode;\n}\n\n// Base: Button do PrimeReact no modo unstyled. O comportamento é o do Prime (espelhando o PrimeNG\n// da produção) e o visual vem todo do Button.css. O Prime aceita um ícone só (`icon`); como o\n// Figma permite os dois juntos, os ícones vão como conteúdo do botão.\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'large',\n leadingIcon,\n trailingIcon,\n type = 'button',\n className,\n children,\n ...props\n },\n ref,\n) {\n const classes = ['cr-button', `cr-button--${variant}`, `cr-button--${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={ref as unknown as Ref<PrimeButton>}\n type={type}\n className={classes}\n {...props}\n >\n {leadingIcon && (\n <span className=\"cr-button__icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n {children}\n {trailingIcon && (\n <span className=\"cr-button__icon\" aria-hidden=\"true\">\n {trailingIcon}\n </span>\n )}\n </PrimeButton>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { X } from '@phosphor-icons/react';\nimport { Chip as PrimeChip, type ChipRemoveEvent } from 'primereact/chip';\nimport './Chip.css';\n\n/** Type no Figma. */\nexport type ChipVariant =\n | 'default'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info'\n | 'highlight'\n | 'inverse'\n | 'outline'\n | 'neutral'\n | 'on-image';\n/** Size no Figma: small = 24px, medium = 28px, large = 32px, x-large = 36px de altura. */\nexport type ChipSize = 'small' | 'medium' | 'large' | 'x-large';\n\nexport interface ChipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Texto do chip (Label no Figma). */\n label: string;\n variant?: ChipVariant;\n size?: ChipSize;\n /** Ícone antes do texto (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n leadingIcon?: ReactNode;\n /** Ícone depois do texto (Trailing Icon no Figma). Com `onRemove`, o padrão é o X do Figma. */\n trailingIcon?: ReactNode;\n disabled?: boolean;\n /**\n * Torna o ícone da direita o botão de remover do PrimeReact (clique, Enter ou Backspace).\n * Como no Prime, o chip se esconde depois; retorne `false` para controlar a remoção por fora.\n */\n onRemove?: (event: ChipRemoveEvent) => boolean | void;\n /** Nome acessível do botão de remover. */\n removeLabel?: string;\n}\n\n// Base: Chip do PrimeReact no modo unstyled; o visual vem todo do Chip.css. O Prime aceita só um\n// ícone à esquerda e, à direita, só o de remover: os ícones vão como funções, que o Prime chama\n// com as props dele (role, tabIndex e teclado do remover). Sem onRemove (ou desabilitado), o ícone\n// da direita é só visual.\nexport const Chip = forwardRef<HTMLDivElement, ChipProps>(function Chip(\n {\n label,\n variant = 'default',\n size = 'small',\n leadingIcon,\n trailingIcon,\n disabled = false,\n onRemove,\n removeLabel = 'Remover',\n className,\n ...props\n },\n ref,\n) {\n const classes = [\n 'cr-chip',\n `cr-chip--${variant}`,\n `cr-chip--${size}`,\n disabled && 'cr-chip--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const removable = Boolean(onRemove) && !disabled;\n const trailing = trailingIcon ?? (onRemove ? <X /> : null);\n\n return (\n <PrimeChip\n unstyled\n // O Prime remonta o <div> a cada render interno (troca a key), então a ref vai pelo\n // pass-through da raiz, que acompanha cada montagem. O aria-label que o Prime põe na raiz\n // sai: num <div> sem role ele é proibido (axe), e o texto já está visível no chip.\n pt={{ root: { ref, 'aria-label': undefined } }}\n className={classes}\n label={label}\n aria-disabled={disabled || undefined}\n icon={\n leadingIcon\n ? () => (\n <span className=\"cr-chip__icon cr-chip__icon--leading\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )\n : undefined\n }\n removable={Boolean(trailing)}\n removeIcon={(options) => {\n if (!removable) {\n return (\n <span className=\"cr-chip__icon cr-chip__icon--trailing\" aria-hidden=\"true\">\n {trailing}\n </span>\n );\n }\n const { role, tabIndex, onClick, onKeyDown } =\n options.iconProps as HTMLAttributes<HTMLSpanElement>;\n return (\n <span\n role={role}\n tabIndex={tabIndex}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className=\"cr-chip__icon cr-chip__icon--trailing cr-chip__remove\"\n aria-label={removeLabel}\n >\n {trailing}\n </span>\n );\n }}\n onRemove={onRemove ? (event) => onRemove(event) !== false : undefined}\n {...props}\n />\n );\n});\n","import { forwardRef, useImperativeHandle, useRef, type HTMLAttributes } from 'react';\nimport { Divider as PrimeDivider } from 'primereact/divider';\nimport './Divider.css';\n\n/** Horizontal Divider e Vertical Divider no Figma. */\nexport type DividerOrientation = 'horizontal' | 'vertical';\n/** Style no Figma: Solid (Default no vertical) e Dashed. */\nexport type DividerVariant = 'solid' | 'dashed';\n\nexport interface DividerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n orientation?: DividerOrientation;\n variant?: DividerVariant;\n}\n\n// Base: Divider do PrimeReact no modo unstyled (role=\"separator\" e aria-orientation do Prime).\n// O visual vem todo do Divider.css. O Figma não tem conteúdo no meio da linha, então o Cristal\n// não repassa children.\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(function Divider(\n { orientation = 'horizontal', variant = 'solid', className, style, ...props },\n ref,\n) {\n // A ref do Prime é um objeto com getElement(); a do Cristal entrega o próprio elemento.\n const primeRef = useRef<PrimeDivider>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n const classes = ['cr-divider', `cr-divider--${orientation}`, `cr-divider--${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeDivider\n unstyled\n ref={primeRef}\n layout={orientation}\n // No unstyled, className e style do Divider do Prime não chegam ao elemento; vão pelo pt.\n pt={{\n root: { className: classes, style },\n content: { className: 'cr-divider__content' },\n }}\n {...props}\n />\n );\n});\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\nimport './IconButton.css';\n\n/**\n * Hierarchy no Figma: Primary (Filled), Secondary (Tonal), Tertiary (Outlined) e Other (Icon),\n * que aqui é `ghost`: só o ícone, com fundo no hover.\n */\nexport type IconButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'ghost';\n/** Size no Figma: 32, 36, 42 e 48px. */\nexport type IconButtonSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n /** Ícone do botão (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon: ReactNode;\n /** Obrigatório: o botão não tem texto, então é isso que o leitor de tela anuncia. */\n 'aria-label': string;\n}\n\n// Base: Button do PrimeReact no modo unstyled, só com ícone (o `p-button-icon-only` do PrimeNG).\n// O comportamento é o do Prime e o visual vem todo do IconButton.css.\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { variant = 'primary', size = 'large', icon, type = 'button', className, ...props },\n ref,\n) {\n const classes = [\n 'cr-icon-button',\n `cr-icon-button--${variant}`,\n `cr-icon-button--${size}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={ref as unknown as Ref<PrimeButton>}\n type={type}\n className={classes}\n {...props}\n >\n <span className=\"cr-icon-button__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n </PrimeButton>\n );\n});\n","import { forwardRef, useId, type InputHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { InputText } from 'primereact/inputtext';\nimport { Info, WarningCircle } from '@phosphor-icons/react';\nimport './Input.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type InputVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type InputSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'value' | 'children'\n> {\n variant?: InputVariant;\n size?: InputSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n /** Valor do campo (controlado). */\n value?: string;\n /** Ícone antes do texto (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n leadingIcon?: ReactNode;\n /** Ícone ou botão depois do texto (Trailing Icon no Figma), por exemplo mostrar a senha. */\n trailingIcon?: ReactNode;\n /** Dica abaixo do campo (Hint Info no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n}\n\n// Base: InputText do PrimeReact no modo unstyled (o <input>, com o comportamento do Prime,\n// espelhando o pInputText do PrimeNG da produção). O rótulo, a caixa do campo, os ícones e a dica\n// são do Cristal, com as classes .cr-field reaproveitadas pelos outros campos (AutoComplete,\n// MultiSelect).\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n variant = 'outline',\n size = 'large',\n label,\n leadingIcon,\n trailingIcon,\n hint,\n error,\n id,\n required,\n disabled,\n className,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const supportText = error ?? hint;\n\n const classes = [\n 'cr-field',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={inputId}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <div className=\"cr-field__control\">\n {leadingIcon && (\n <span className=\"cr-field__icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n <InputText\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <input> nela.\n ref={ref as unknown as Ref<HTMLInputElement>}\n id={inputId}\n className=\"cr-field__input\"\n required={required}\n disabled={disabled}\n invalid={Boolean(error)}\n aria-invalid={error ? true : undefined}\n aria-describedby={supportText ? hintId : undefined}\n {...props}\n />\n {trailingIcon && <span className=\"cr-field__icon\">{trailingIcon}</span>}\n </div>\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n","import { forwardRef, useId, type Ref } from 'react';\nimport {\n MultiSelect as PrimeMultiSelect,\n type MultiSelectPassThroughOptions,\n} from 'primereact/multiselect';\nimport type { ChipRemoveEvent } from 'primereact/chip';\nimport { CaretDown, Check, Info, MagnifyingGlass, WarningCircle } from '@phosphor-icons/react';\nimport { Chip } from '../Chip';\nimport '../Input/Input.css';\nimport './MultiSelect.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type MultiSelectVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type MultiSelectSize = 'xsmall' | 'small' | 'medium' | 'large';\n/** Density da lista no Figma: itens de 40px (normal) ou 32px (compact). */\nexport type MultiSelectDensity = 'normal' | 'compact';\n\nexport interface MultiSelectProps {\n variant?: MultiSelectVariant;\n size?: MultiSelectSize;\n density?: MultiSelectDensity;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n 'aria-label'?: string;\n /** Opções da lista. */\n options: unknown[];\n /** Campo da opção usado como texto (padrão: `label`). */\n optionLabel?: string;\n /** Campo da opção usado como valor; sem ele, o valor é a própria opção. */\n optionValue?: string;\n /** Valores selecionados (controlado). */\n value?: unknown[];\n onChange?: (value: unknown[]) => void;\n /** Texto do campo vazio (Field Text no Figma). */\n placeholder?: string;\n /** Mostra a busca no topo da lista (Search Filter no Figma). */\n filter?: boolean;\n filterPlaceholder?: string;\n /**\n * Quantos chips aparecem no campo; acima disso, um chip só com o resumo (Chip Group\n * \"4 itens selecionados\" no Figma), cujo X limpa a seleção.\n */\n maxChips?: number;\n /** Texto do resumo; `{0}` vira a quantidade. */\n selectedItemsLabel?: string;\n /** Nome acessível do checkbox de selecionar todos. */\n selectAllLabel?: string;\n /** Texto da lista quando a busca não encontra nada. */\n emptyFilterMessage?: string;\n /** Nome acessível do X dos chips. */\n removeLabel?: string;\n /** Dica abaixo do campo (Hint Info no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n required?: boolean;\n disabled?: boolean;\n id?: string;\n name?: string;\n className?: string;\n}\n\n// Base: MultiSelect do PrimeReact no modo unstyled (abrir/fechar, teclado, seleção, filtro e\n// \"selecionar todos\" do Prime, espelhando o p-multiSelect do PrimeNG da produção). O rótulo, a\n// caixa e a dica reaproveitam o campo do Input (.cr-field); os selecionados viram Chips do Cristal\n// pelo selectedItemTemplate, porque o Prime mostra o resumo acima do limite só como texto, e o\n// Figma o mostra como chip. A ref vai para o <input> (combobox) do Prime, que recebe o foco.\nexport const MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(function MultiSelect(\n {\n variant = 'outline',\n size = 'large',\n density = 'normal',\n label,\n options,\n optionLabel = 'label',\n optionValue,\n value,\n onChange,\n placeholder = 'Selecionar opção',\n filter = false,\n filterPlaceholder = 'Pesquisar',\n maxChips = 3,\n selectedItemsLabel = '{0} itens selecionados',\n removeLabel = 'Remover',\n selectAllLabel = 'Selecionar todos',\n emptyFilterMessage = 'Nenhum resultado encontrado',\n hint,\n error,\n required,\n disabled,\n id,\n className,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const supportText = error ?? hint;\n const selected = value ?? [];\n const overflow = selected.length > maxChips;\n\n const classes = [\n 'cr-field',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n 'cr-multiselect',\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const valueOf = (option: unknown) =>\n optionValue ? (option as Record<string, unknown>)[optionValue] : option;\n const labelOf = (item: unknown) => {\n const option = options.find((o) => valueOf(o) === item) ?? item;\n const text = (option as Record<string, unknown> | null)?.[optionLabel];\n return String(text ?? item);\n };\n\n // O X do chip não pode abrir/fechar a lista (o clique subiria até o campo do Prime).\n const remove = (event: ChipRemoveEvent, next: unknown[]) => {\n event.originalEvent.stopPropagation();\n onChange?.(next);\n return false;\n };\n\n const renderSelected = (item?: unknown) => {\n if (item === undefined) {\n return <span className=\"cr-multiselect__placeholder\">{placeholder}</span>;\n }\n if (overflow) {\n if (selected.indexOf(item) !== 0) return null;\n return (\n <Chip\n className=\"cr-multiselect__chip\"\n label={selectedItemsLabel.replace('{0}', String(selected.length))}\n disabled={disabled}\n onRemove={disabled ? undefined : (event) => remove(event, [])}\n removeLabel={removeLabel}\n />\n );\n }\n return (\n <Chip\n className=\"cr-multiselect__chip\"\n label={labelOf(item)}\n disabled={disabled}\n onRemove={\n disabled\n ? undefined\n : (event) =>\n remove(\n event,\n selected.filter((v) => v !== item),\n )\n }\n removeLabel={`${removeLabel} ${labelOf(item)}`}\n />\n );\n };\n\n const checkbox = {\n root: { className: 'cr-multiselect__checkbox' },\n box: { className: 'cr-multiselect__checkbox-box' },\n input: { className: 'cr-multiselect__checkbox-input' },\n };\n\n const pt: MultiSelectPassThroughOptions = {\n // Com a lista aberta o foco vai para a busca (no body), fora da caixa: o estado Focused do\n // Figma vem do estado do Prime.\n root: (options) => {\n const open = (options as { state?: { overlayVisible?: boolean } })?.state?.overlayVisible;\n return {\n className: `cr-field__control cr-multiselect__control${open ? ' cr-multiselect__control--open' : ''}`,\n };\n },\n hiddenInputWrapper: { className: 'cr-multiselect__hidden' },\n input: {\n 'aria-describedby': supportText ? hintId : undefined,\n 'aria-invalid': error ? true : undefined,\n 'aria-required': required || undefined,\n },\n labelContainer: { className: 'cr-multiselect__value' },\n label: { className: 'cr-multiselect__chips' },\n trigger: { className: 'cr-field__icon cr-multiselect__trigger' },\n panel: { className: `cr-multiselect__panel cr-multiselect__panel--${density}` },\n header: { className: 'cr-multiselect__header' },\n headerCheckboxContainer: { className: 'cr-multiselect__select-all' },\n // O Prime repete role=checkbox na <div> em volta do <input>: o leitor de tela veria dois.\n headerCheckbox: {\n ...checkbox,\n root: { ...checkbox.root, role: undefined, 'aria-checked': undefined },\n input: { ...checkbox.input, 'aria-label': selectAllLabel },\n },\n filterContainer: { className: 'cr-multiselect__search' },\n // O filtro é um InputText do Prime, que lê o pass-through da raiz (a tipagem do Prime diverge).\n filterInput: {\n root: { className: 'cr-multiselect__search-input', 'aria-label': filterPlaceholder },\n } as never,\n closeButton: { className: 'cr-multiselect__close' },\n wrapper: { className: 'cr-multiselect__wrapper' },\n list: { className: 'cr-multiselect__list' },\n item: (options) => {\n const context = (options as { context?: { focusedIndex?: number; index?: number } })?.context;\n const focused = context !== undefined && context.focusedIndex === context.index;\n return {\n className: `cr-multiselect__item${focused ? ' cr-multiselect__item--focused' : ''}`,\n };\n },\n checkboxContainer: { className: 'cr-multiselect__item-checkbox' },\n // O item (role=option) já diz se está selecionado; o checkbox é só visual para o leitor de tela.\n // O item (role=option) já diz se está selecionado. O checkbox do Prime fica só visual: inert\n // tira o <input> do foco e do leitor de tela (tabindex=-1 e aria-hidden não bastam dentro de\n // um option), e o clique cai no item.\n checkbox: {\n ...checkbox,\n root: { ...checkbox.root, role: undefined, 'aria-checked': undefined, inert: true },\n },\n emptyMessage: { className: 'cr-multiselect__empty' },\n };\n\n return (\n <div className={classes}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={inputId}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <PrimeMultiSelect\n unstyled\n inputId={inputId}\n inputRef={ref as Ref<HTMLSelectElement>}\n value={selected}\n options={options}\n optionLabel={optionLabel}\n optionValue={optionValue}\n onChange={(event) => onChange?.(event.value as unknown[])}\n disabled={disabled}\n invalid={Boolean(error)}\n placeholder={placeholder}\n selectedItemTemplate={renderSelected}\n filter={filter}\n filterPlaceholder={filterPlaceholder}\n // 7 itens visíveis antes da rolagem, como no Figma (40px no normal, 32px no compact).\n scrollHeight={density === 'compact' ? '224px' : '280px'}\n emptyFilterMessage={emptyFilterMessage}\n filterIcon={\n <span className=\"cr-multiselect__search-icon\" aria-hidden=\"true\">\n <MagnifyingGlass />\n </span>\n }\n dropdownIcon={<CaretDown aria-hidden=\"true\" />}\n checkboxIcon={<Check aria-hidden=\"true\" />}\n itemCheckboxIcon={<Check aria-hidden=\"true\" />}\n pt={pt}\n {...props}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Tag as PrimeTag } from 'primereact/tag';\nimport './Tag.css';\n\n/** Type no Figma. */\nexport type TagVariant =\n 'default' | 'success' | 'warning' | 'danger' | 'info' | 'purple' | 'gray' | 'inverse' | 'outline';\n/** Size no Figma: small = 24px, medium = 28px, large = 32px, x-large = 36px de altura. */\nexport type TagSize = 'small' | 'medium' | 'large' | 'x-large';\n\nexport interface TagProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: TagVariant;\n size?: TagSize;\n /** Ícone à esquerda (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon?: ReactNode;\n /** Texto da tag (Label no Figma). */\n children: ReactNode;\n}\n\n// Base: Tag do PrimeReact no modo unstyled; o visual vem todo do Tag.css. Rótulo de status\n// estático (sem interação); para contador ou bolinha de notificação, use o Badge.\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(function Tag(\n { variant = 'default', size = 'small', icon, className, children, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeTag>(null);\n // O PrimeReact entrega na ref um objeto com getElement(); o Cristal repassa o <span>.\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLSpanElement);\n\n const classes = ['cr-tag', `cr-tag--${variant}`, `cr-tag--${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeTag\n unstyled\n ref={primeRef}\n className={classes}\n // Como função, o ícone é renderizado pelo Cristal (o Prime só repassa props a funções).\n icon={\n icon\n ? () => (\n <span className=\"cr-tag__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )\n : undefined\n }\n value={children}\n {...props}\n />\n );\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,66 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vector-business-services/cristal-ds-web",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Componentes React (web) do Cristal Design System para protótipos. Não é para produção.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": [
|
|
7
|
+
"*.css"
|
|
8
|
+
],
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"main": "./dist/index.cjs",
|
|
16
|
+
"module": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.js",
|
|
22
|
+
"require": "./dist/index.cjs"
|
|
23
|
+
},
|
|
24
|
+
"./icons": {
|
|
25
|
+
"types": "./dist/icons.d.ts",
|
|
26
|
+
"import": "./dist/icons.js",
|
|
27
|
+
"require": "./dist/icons.cjs"
|
|
28
|
+
},
|
|
29
|
+
"./styles.css": "./dist/index.css",
|
|
30
|
+
"./package.json": "./package.json"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@vector-business-services/cristal-ds-tokens": "^0.1.0",
|
|
34
|
+
"@phosphor-icons/react": "^2.1.10"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"primereact": "^10.9.9",
|
|
38
|
+
"react": ">=18",
|
|
39
|
+
"react-dom": ">=18"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@vector-business-services/cristal-ds-tsconfig": "0.0.0",
|
|
43
|
+
"@storybook/react-vite": "^10.6.3",
|
|
44
|
+
"@types/react": "^19.3.0",
|
|
45
|
+
"@types/react-dom": "^19.2.0",
|
|
46
|
+
"@vitest/browser-playwright": "^5.0.5",
|
|
47
|
+
"playwright": "^1.64.1",
|
|
48
|
+
"primereact": "^10.9.9",
|
|
49
|
+
"react": "^19.3.1",
|
|
50
|
+
"react-dom": "^19.3.1",
|
|
51
|
+
"rimraf": "^6.0.1",
|
|
52
|
+
"storybook": "^10.6.3",
|
|
53
|
+
"tsup": "^9.0.0",
|
|
54
|
+
"typescript": "^5.9.3",
|
|
55
|
+
"vitest": "^5.0.5",
|
|
56
|
+
"vitest-browser-react": "^2.3.0"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsup",
|
|
60
|
+
"dev": "tsup --watch",
|
|
61
|
+
"typecheck": "tsc --noEmit",
|
|
62
|
+
"test": "vitest run",
|
|
63
|
+
"test:watch": "vitest",
|
|
64
|
+
"clean": "rimraf dist .turbo"
|
|
65
|
+
}
|
|
6
66
|
}
|
package/README.md
DELETED