@snksergio/design-system 0.52.0 → 0.54.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 (48) hide show
  1. package/dist-lib/chunks/{panel-Bly-rNP9.cjs → panel-CTbiCa0_.cjs} +105 -3
  2. package/dist-lib/chunks/panel-CTbiCa0_.cjs.map +1 -0
  3. package/dist-lib/chunks/{panel-DA6K3a3n.mjs → panel-DsOKm4Im.mjs} +155 -53
  4. package/dist-lib/chunks/panel-DsOKm4Im.mjs.map +1 -0
  5. package/dist-lib/chunks/{toggle-group-C9rrkkmh.cjs → toggle-group-BTnqY_nt.cjs} +23 -23
  6. package/dist-lib/chunks/toggle-group-BTnqY_nt.cjs.map +1 -0
  7. package/dist-lib/chunks/{toggle-group-mXbG8_Jm.mjs → toggle-group-BYmj8142.mjs} +22 -22
  8. package/dist-lib/chunks/toggle-group-BYmj8142.mjs.map +1 -0
  9. package/dist-lib/index.cjs +634 -2
  10. package/dist-lib/index.cjs.map +1 -1
  11. package/dist-lib/index.mjs +692 -60
  12. package/dist-lib/index.mjs.map +1 -1
  13. package/dist-lib/preview/clientes.cjs +1 -1
  14. package/dist-lib/preview/clientes.mjs +1 -1
  15. package/dist-lib/shadcn.cjs +1 -1
  16. package/dist-lib/shadcn.mjs +1 -1
  17. package/dist-lib/src/components/index.d.ts +1 -0
  18. package/dist-lib/src/components/index.d.ts.map +1 -1
  19. package/dist-lib/src/components/ui/TabsNavigation/index.d.ts +5 -0
  20. package/dist-lib/src/components/ui/TabsNavigation/index.d.ts.map +1 -0
  21. package/dist-lib/src/components/ui/TabsNavigation/tabs-navigation-context.d.ts +19 -0
  22. package/dist-lib/src/components/ui/TabsNavigation/tabs-navigation-context.d.ts.map +1 -0
  23. package/dist-lib/src/components/ui/TabsNavigation/tabs-navigation.d.ts +84 -0
  24. package/dist-lib/src/components/ui/TabsNavigation/tabs-navigation.d.ts.map +1 -0
  25. package/dist-lib/src/components/ui/TabsNavigation/tabs-navigation.styles.d.ts +393 -0
  26. package/dist-lib/src/components/ui/TabsNavigation/tabs-navigation.styles.d.ts.map +1 -0
  27. package/dist-lib/src/components/ui/TabsNavigation/tabs-navigation.types.d.ts +99 -0
  28. package/dist-lib/src/components/ui/TabsNavigation/tabs-navigation.types.d.ts.map +1 -0
  29. package/dist-lib/src/components/ui/TabsNavigation/use-arrastar-para-rolar.d.ts +26 -0
  30. package/dist-lib/src/components/ui/TabsNavigation/use-arrastar-para-rolar.d.ts.map +1 -0
  31. package/dist-lib/src/components/ui/avatar-ig/avatar-group-context.d.ts +24 -0
  32. package/dist-lib/src/components/ui/avatar-ig/avatar-group-context.d.ts.map +1 -0
  33. package/dist-lib/src/components/ui/avatar-ig/avatar-group.d.ts +52 -0
  34. package/dist-lib/src/components/ui/avatar-ig/avatar-group.d.ts.map +1 -0
  35. package/dist-lib/src/components/ui/avatar-ig/avatar.d.ts +9 -0
  36. package/dist-lib/src/components/ui/avatar-ig/avatar.d.ts.map +1 -1
  37. package/dist-lib/src/components/ui/avatar-ig/avatar.styles.d.ts +93 -0
  38. package/dist-lib/src/components/ui/avatar-ig/avatar.styles.d.ts.map +1 -1
  39. package/dist-lib/src/components/ui/avatar-ig/avatar.types.d.ts +37 -0
  40. package/dist-lib/src/components/ui/avatar-ig/avatar.types.d.ts.map +1 -1
  41. package/dist-lib/src/components/ui/avatar-ig/index.d.ts +3 -2
  42. package/dist-lib/src/components/ui/avatar-ig/index.d.ts.map +1 -1
  43. package/dist-lib/theme.css +15 -0
  44. package/package.json +1 -1
  45. package/dist-lib/chunks/panel-Bly-rNP9.cjs.map +0 -1
  46. package/dist-lib/chunks/panel-DA6K3a3n.mjs.map +0 -1
  47. package/dist-lib/chunks/toggle-group-C9rrkkmh.cjs.map +0 -1
  48. package/dist-lib/chunks/toggle-group-mXbG8_Jm.mjs.map +0 -1
@@ -176,6 +176,7 @@ function getContrastTextColor(bgColor) {
176
176
  const blackContrast = contrastRatio(0, bgLum);
177
177
  return whiteContrast >= blackContrast ? "white" : "black";
178
178
  }
179
+ const AvatarGroupContext = React.createContext(void 0);
179
180
  const avatarVariants = avatar.tv({
180
181
  base: [
181
182
  "inline-flex items-center justify-center",
@@ -215,21 +216,59 @@ const avatarVariants = avatar.tv({
215
216
  color: "muted"
216
217
  }
217
218
  });
219
+ const avatarGroupRoot = avatar.tv({ base: "flex items-center" });
220
+ const avatarGroupItem = avatar.tv({
221
+ base: ["relative inline-flex rounded-radius-full ring-2"],
222
+ variants: {
223
+ /** Deslocamento negativo ≈ 25% do diâmetro, em token. Ver o bloco acima. */
224
+ size: {
225
+ xs: "-ml-sp-xs",
226
+ // 20px → 4
227
+ sm: "-ml-sp-sm",
228
+ // 24px → 6
229
+ md: "-ml-sp-sm",
230
+ // 28px → 6
231
+ lg: "-ml-sp-md",
232
+ // 32px → 8
233
+ xl: "-ml-sp-lg"
234
+ // 40px → 10
235
+ },
236
+ /** Cor do anel = superfície de trás. */
237
+ surface: {
238
+ surface: "ring-bg-surface",
239
+ canvas: "ring-bg-canvas",
240
+ subtle: "ring-bg-subtle",
241
+ muted: "ring-bg-muted",
242
+ table: "ring-bg-table"
243
+ },
244
+ /** O primeiro não desloca — senão a pilha inteira sai da margem esquerda. */
245
+ primeiro: { true: "ml-0" }
246
+ },
247
+ defaultVariants: {
248
+ size: "md",
249
+ surface: "surface"
250
+ }
251
+ });
218
252
  const Avatar = React.forwardRef(
219
253
  function Avatar2({
220
254
  size,
221
255
  color,
222
256
  colorHex,
257
+ src,
223
258
  children,
224
259
  className,
225
260
  style,
226
261
  "aria-label": ariaLabel,
227
262
  ...rest
228
263
  }, ref) {
264
+ const grupo = React.useContext(AvatarGroupContext);
265
+ const sizeEfetivo = size ?? grupo?.size;
266
+ const [urlQueFalhou, setUrlQueFalhou] = React.useState(null);
267
+ const mostraFoto = typeof src === "string" && src !== "" && urlQueFalhou !== src;
229
268
  const isHex = typeof colorHex === "string" && colorHex.startsWith("#");
230
269
  const autoTextClass = isHex ? getContrastTextColor(colorHex) === "black" ? "text-black" : "text-white" : null;
231
270
  const computedClassName = avatarVariants({
232
- size,
271
+ size: sizeEfetivo,
233
272
  color: isHex ? "_custom" : color,
234
273
  className: isHex ? [autoTextClass, className].filter(Boolean).join(" ") : className
235
274
  });
@@ -242,12 +281,72 @@ const Avatar = React.forwardRef(
242
281
  style: computedStyle,
243
282
  ...ariaLabel ? { role: "img", "aria-label": ariaLabel } : { "aria-hidden": true },
244
283
  ...rest,
245
- children
284
+ children: mostraFoto ? /* @__PURE__ */ jsxRuntime.jsx(
285
+ "img",
286
+ {
287
+ src,
288
+ alt: "",
289
+ className: "size-full object-cover",
290
+ draggable: false,
291
+ onError: () => setUrlQueFalhou(src ?? null)
292
+ }
293
+ ) : children
246
294
  }
247
295
  );
248
296
  }
249
297
  );
250
298
  Avatar.displayName = "Avatar";
299
+ const AvatarGroup = React.forwardRef(
300
+ function AvatarGroup2({
301
+ size = "md",
302
+ max,
303
+ total,
304
+ surface = "surface",
305
+ children,
306
+ className,
307
+ "aria-label": ariaLabel,
308
+ ...rest
309
+ }, ref) {
310
+ const itens = React.Children.toArray(children).filter(React.isValidElement);
311
+ const visiveis = typeof max === "number" ? itens.slice(0, max) : itens;
312
+ const escondidos = (total ?? itens.length) - visiveis.length;
313
+ return /* @__PURE__ */ jsxRuntime.jsx(AvatarGroupContext.Provider, { value: { size, surface }, children: /* @__PURE__ */ jsxRuntime.jsxs(
314
+ "div",
315
+ {
316
+ ref,
317
+ className: avatarGroupRoot({ className }),
318
+ role: "group",
319
+ "aria-label": ariaLabel,
320
+ ...rest,
321
+ children: [
322
+ visiveis.map((filho, i) => /* @__PURE__ */ jsxRuntime.jsx(
323
+ "span",
324
+ {
325
+ className: avatarGroupItem({ size, surface, primeiro: i === 0 }),
326
+ style: { zIndex: visiveis.length - i },
327
+ children: filho
328
+ },
329
+ i
330
+ )),
331
+ escondidos > 0 && /* O `+N` é `aria-hidden`: a contagem real já está no `aria-label` do grupo, e
332
+ anunciar "mais 9" solto não diz de quê. */
333
+ /* @__PURE__ */ jsxRuntime.jsx(
334
+ "span",
335
+ {
336
+ className: avatarGroupItem({ size, surface, primeiro: false }),
337
+ style: { zIndex: 0 },
338
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { size, color: "muted", "aria-hidden": true, children: [
339
+ "+",
340
+ escondidos
341
+ ] })
342
+ }
343
+ )
344
+ ]
345
+ }
346
+ ) });
347
+ }
348
+ );
349
+ AvatarGroup.displayName = "AvatarGroup";
251
350
  const buttonGroupVariants = avatar.tv({
252
351
  base: [
253
352
  "inline-flex items-stretch",
@@ -13007,6 +13106,7 @@ function Panel({
13007
13106
  exports.AddViewModal = AddViewModal;
13008
13107
  exports.AlertModal = AlertModal;
13009
13108
  exports.Avatar = Avatar;
13109
+ exports.AvatarGroup = AvatarGroup;
13010
13110
  exports.BulkActionButton = BulkActionButton;
13011
13111
  exports.BulkActionsBar = BulkActionsBar;
13012
13112
  exports.ButtonGroup = ButtonGroup;
@@ -13069,6 +13169,8 @@ exports.ToolbarSimpleFilterDrawer = ToolbarSimpleFilterDrawer;
13069
13169
  exports.ToolbarTabs = ToolbarTabs;
13070
13170
  exports.ToolbarToolButton = ToolbarToolButton;
13071
13171
  exports.ViewsPopover = ViewsPopover;
13172
+ exports.avatarGroupItem = avatarGroupItem;
13173
+ exports.avatarGroupRoot = avatarGroupRoot;
13072
13174
  exports.avatarVariants = avatarVariants;
13073
13175
  exports.columnTypeRegistry = columnTypeRegistry;
13074
13176
  exports.floatingPanelStyles = floatingPanelStyles;
@@ -13081,4 +13183,4 @@ exports.useColumnResize = useColumnResize;
13081
13183
  exports.useColumnWidths = useColumnWidths;
13082
13184
  exports.useDataTableContext = useDataTableContext;
13083
13185
  exports.useFloatingPanelResize = useFloatingPanelResize;
13084
- //# sourceMappingURL=panel-Bly-rNP9.cjs.map
13186
+ //# sourceMappingURL=panel-CTbiCa0_.cjs.map