@zvk/ui 0.1.5 → 0.1.6

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 (87) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +5 -5
  3. package/dist/components/accordion/accordion.js +4 -4
  4. package/dist/components/alert/alert.d.ts +5 -0
  5. package/dist/components/alert/alert.js +8 -4
  6. package/dist/components/alert/index.d.ts +1 -1
  7. package/dist/components/alert-dialog/alert-dialog.js +9 -9
  8. package/dist/components/avatar/avatar.js +1 -1
  9. package/dist/components/badge/badge.js +1 -1
  10. package/dist/components/breadcrumbs/breadcrumbs.js +3 -3
  11. package/dist/components/button/button.js +46 -2
  12. package/dist/components/calendar/calendar.js +3 -3
  13. package/dist/components/card/card.d.ts +5 -0
  14. package/dist/components/card/card.js +11 -7
  15. package/dist/components/card/index.d.ts +1 -1
  16. package/dist/components/carousel/carousel.js +7 -7
  17. package/dist/components/checkbox/checkbox.js +4 -4
  18. package/dist/components/code-block/code-block.js +2 -2
  19. package/dist/components/collapsible/collapsible.js +4 -4
  20. package/dist/components/combobox/combobox.js +6 -5
  21. package/dist/components/command/command-filter.d.ts +0 -1
  22. package/dist/components/command/command-filter.js +0 -3
  23. package/dist/components/command/command.js +9 -9
  24. package/dist/components/context-menu/context-menu.js +10 -10
  25. package/dist/components/conversation/conversation.js +11 -11
  26. package/dist/components/copy-button/copy-button.js +2 -2
  27. package/dist/components/date-picker/date-picker.js +1 -1
  28. package/dist/components/dialog/dialog.js +11 -11
  29. package/dist/components/dropdown-menu/dropdown-menu.d.ts +1 -1
  30. package/dist/components/dropdown-menu/dropdown-menu.js +20 -16
  31. package/dist/components/empty-state/empty-state.js +1 -1
  32. package/dist/components/error-boundary/error-boundary.js +1 -1
  33. package/dist/components/field/field.js +4 -4
  34. package/dist/components/file-upload-input/file-upload-input.js +2 -2
  35. package/dist/components/form/form.js +6 -6
  36. package/dist/components/hover-card/hover-card.d.ts +1 -1
  37. package/dist/components/hover-card/hover-card.js +7 -4
  38. package/dist/components/icon-button/icon-button.js +19 -1
  39. package/dist/components/index.d.ts +3 -3
  40. package/dist/components/input/input.js +1 -1
  41. package/dist/components/label/label.js +1 -1
  42. package/dist/components/menubar/menubar.js +12 -12
  43. package/dist/components/pagination/pagination.js +12 -12
  44. package/dist/components/popover/popover.d.ts +1 -1
  45. package/dist/components/popover/popover.js +30 -7
  46. package/dist/components/progress/progress.js +3 -3
  47. package/dist/components/radio-group/radio-group.js +3 -3
  48. package/dist/components/responsive-container/responsive-container.js +1 -1
  49. package/dist/components/scroll-area/scroll-area.js +4 -4
  50. package/dist/components/sectioned-sidebar-nav/sectioned-sidebar-nav.js +7 -7
  51. package/dist/components/select/select.js +66 -13
  52. package/dist/components/separator/separator.js +1 -1
  53. package/dist/components/sheet/sheet.js +12 -12
  54. package/dist/components/sidebar-shell/sidebar-shell.js +6 -6
  55. package/dist/components/skeleton/skeleton.js +1 -1
  56. package/dist/components/slider/slider.js +1 -1
  57. package/dist/components/spinner/spinner.js +1 -1
  58. package/dist/components/stat/stat.js +1 -1
  59. package/dist/components/switch/switch.js +3 -3
  60. package/dist/components/table/index.d.ts +1 -1
  61. package/dist/components/table/table.d.ts +5 -0
  62. package/dist/components/table/table.js +12 -8
  63. package/dist/components/tabs/tabs.js +4 -4
  64. package/dist/components/tabs-with-sidebar/tabs-with-sidebar.js +3 -3
  65. package/dist/components/textarea/textarea.js +1 -1
  66. package/dist/components/toast/toast.js +8 -8
  67. package/dist/components/toggle/toggle.js +1 -1
  68. package/dist/components/toggle-group/toggle-group.js +1 -1
  69. package/dist/components/tooltip/tooltip.d.ts +1 -1
  70. package/dist/components/tooltip/tooltip.js +6 -3
  71. package/dist/hooks/index.d.ts +2 -2
  72. package/dist/hooks/use-composed-refs.d.ts +2 -2
  73. package/dist/hooks/use-controllable-state.d.ts +2 -2
  74. package/dist/internal/floating/compute-position.js +13 -8
  75. package/dist/internal/floating/floating-types.d.ts +1 -0
  76. package/dist/internal/floating/index.d.ts +1 -0
  77. package/dist/internal/floating/use-floating-position.js +6 -4
  78. package/dist/internal/overlay-stack/overlay-stack.js +4 -1
  79. package/dist/styles.css +2066 -2022
  80. package/dist/tokens/index.d.ts +2 -2
  81. package/dist/tokens/index.js +1 -1
  82. package/dist/tokens/token-types.d.ts +5 -5
  83. package/dist/tokens/tokens.d.ts +16 -10
  84. package/dist/tokens/tokens.js +16 -10
  85. package/dist/utils/cn.d.ts +2 -2
  86. package/dist/utils/index.d.ts +1 -1
  87. package/package.json +12 -11
@@ -9,6 +9,7 @@ import { composeEventHandlers } from "../../utils/compose-event-handlers.js";
9
9
  import { cn } from "../../utils/cn.js";
10
10
  const defaultContentPositioning = {
11
11
  sideOffset: 8,
12
+ alignOffset: 0,
12
13
  collisionPadding: 0
13
14
  };
14
15
  const TooltipProviderContext = React.createContext({
@@ -62,6 +63,7 @@ function TooltipRoot({ children, defaultOpen = false, delay, disabled = false, o
62
63
  open,
63
64
  placement: contentPositioning.placement ?? placement,
64
65
  offset: contentPositioning.sideOffset,
66
+ alignmentOffset: contentPositioning.alignOffset,
65
67
  collisionPadding: contentPositioning.collisionPadding,
66
68
  flip: true,
67
69
  shift: true
@@ -165,22 +167,23 @@ function TooltipTrigger({ children, asChild: _asChild = false }) {
165
167
  }, { checkDefaultPrevented: false })
166
168
  });
167
169
  }
168
- function TooltipContent({ align, alignOffset: _alignOffset, children, className, collisionPadding = defaultContentPositioning.collisionPadding, container, forceMount = false, placement, ref, side, sideOffset = defaultContentPositioning.sideOffset, style, ...props }) {
170
+ function TooltipContent({ align, alignOffset = defaultContentPositioning.alignOffset, children, className, collisionPadding = defaultContentPositioning.collisionPadding, container, forceMount = false, placement, ref, side, sideOffset = defaultContentPositioning.sideOffset, style, ...props }) {
169
171
  const context = useTooltipRootContext("Tooltip.Content");
170
172
  React.useEffect(() => {
171
173
  const resolvedPlacement = side === undefined ? placement : placementFromSideAlign(side, align, placement ?? "bottom");
172
174
  context.setContentPositioning({
173
175
  ...(resolvedPlacement === undefined ? {} : { placement: resolvedPlacement }),
174
176
  sideOffset,
177
+ alignOffset,
175
178
  collisionPadding
176
179
  });
177
180
  return () => context.setContentPositioning(defaultContentPositioning);
178
- }, [align, collisionPadding, context, placement, side, sideOffset]);
181
+ }, [align, alignOffset, collisionPadding, context, placement, side, sideOffset]);
179
182
  if (!context.open && !forceMount) {
180
183
  return null;
181
184
  }
182
185
  const placementParts = getPlacementParts(context.resolvedPlacement);
183
- const content = (_jsx("span", { ...props, ref: composeRefs(ref, context.floatingRef), id: context.contentId, className: cn("liano-tooltip", className), "data-align": placementParts.align, "data-side": placementParts.side, hidden: context.open ? undefined : true, role: "tooltip", style: { ...context.floatingStyle, ...style }, children: children }));
186
+ const content = (_jsx("span", { ...props, ref: composeRefs(ref, context.floatingRef), id: context.contentId, className: cn("zvk-ui-tooltip", className), "data-align": placementParts.align, "data-side": placementParts.side, hidden: context.open ? undefined : true, role: "tooltip", style: { ...context.floatingStyle, ...style }, children: children }));
184
187
  return (_jsx(Portal, { ...(container === undefined ? {} : { container }), children: content }));
185
188
  }
186
189
  function TooltipWrapper({ children, content, delay = 0, disabled = false, placement = "bottom" }) {
@@ -1,7 +1,7 @@
1
1
  export { useComposedRefs } from "./use-composed-refs.js";
2
- export type { LianoPossibleRef } from "./use-composed-refs.js";
2
+ export type { ZvkUiPossibleRef } from "./use-composed-refs.js";
3
3
  export { useControllableState } from "./use-controllable-state.js";
4
- export type { LianoSetStateAction, UseControllableStateOptions } from "./use-controllable-state.js";
4
+ export type { ZvkUiSetStateAction, UseControllableStateOptions } from "./use-controllable-state.js";
5
5
  export { useDisclosure } from "./use-disclosure.js";
6
6
  export type { UseDisclosureOptions, UseDisclosureReturn } from "./use-disclosure.js";
7
7
  export { useEvent } from "./use-event.js";
@@ -1,3 +1,3 @@
1
1
  import * as React from "react";
2
- export type LianoPossibleRef<Value> = React.Ref<Value> | undefined;
3
- export declare function useComposedRefs<Value>(...refs: LianoPossibleRef<Value>[]): React.RefCallback<Value>;
2
+ export type ZvkUiPossibleRef<Value> = React.Ref<Value> | undefined;
3
+ export declare function useComposedRefs<Value>(...refs: ZvkUiPossibleRef<Value>[]): React.RefCallback<Value>;
@@ -1,7 +1,7 @@
1
- export type LianoSetStateAction<Value> = Value | ((previous: Value) => Value);
1
+ export type ZvkUiSetStateAction<Value> = Value | ((previous: Value) => Value);
2
2
  export interface UseControllableStateOptions<Value> {
3
3
  value?: Value;
4
4
  defaultValue: Value;
5
5
  onChange?: (value: Value) => void;
6
6
  }
7
- export declare function useControllableState<Value>({ value, defaultValue, onChange }: UseControllableStateOptions<Value>): readonly [Value, (next: LianoSetStateAction<Value>) => void];
7
+ export declare function useControllableState<Value>({ value, defaultValue, onChange }: UseControllableStateOptions<Value>): readonly [Value, (next: ZvkUiSetStateAction<Value>) => void];
@@ -3,7 +3,10 @@ import { detectOverflow } from "./detect-overflow.js";
3
3
  function getCenteredOffset(referenceSize, floatingSize) {
4
4
  return (referenceSize - floatingSize) / 2;
5
5
  }
6
- function getPlacementCoords(placement, reference, floating, offset) {
6
+ function applyAlignmentOffset(value, align, offset) {
7
+ return align === "end" ? value - offset : value + offset;
8
+ }
9
+ function getPlacementCoords(placement, reference, floating, offset, alignmentOffset) {
7
10
  const { side, align } = parsePlacement(placement);
8
11
  if (side === "top" || side === "bottom") {
9
12
  const baseY = side === "top" ? reference.y - floating.height - offset : reference.y + reference.height + offset;
@@ -17,6 +20,7 @@ function getPlacementCoords(placement, reference, floating, offset) {
17
20
  else {
18
21
  x = reference.x + getCenteredOffset(reference.width, floating.width);
19
22
  }
23
+ x = applyAlignmentOffset(x, align, alignmentOffset);
20
24
  return { x, y: baseY };
21
25
  }
22
26
  const baseX = side === "left" ? reference.x - floating.width - offset : reference.x + reference.width + offset;
@@ -30,10 +34,11 @@ function getPlacementCoords(placement, reference, floating, offset) {
30
34
  else {
31
35
  y = reference.y + getCenteredOffset(reference.height, floating.height);
32
36
  }
37
+ y = applyAlignmentOffset(y, align, alignmentOffset);
33
38
  return { x: baseX, y };
34
39
  }
35
- function getOverflowForPlacement(placement, reference, floating, boundary, offset, collisionPadding) {
36
- const { x, y } = getPlacementCoords(placement, reference, floating, offset);
40
+ function getOverflowForPlacement(placement, reference, floating, boundary, offset, alignmentOffset, collisionPadding) {
41
+ const { x, y } = getPlacementCoords(placement, reference, floating, offset, alignmentOffset);
37
42
  return detectOverflow({
38
43
  boundary,
39
44
  collisionPadding,
@@ -46,22 +51,22 @@ function getOverflowForPlacement(placement, reference, floating, boundary, offse
46
51
  });
47
52
  }
48
53
  export function computeFloatingPosition(options) {
49
- const { reference, floating, boundary, placement: rawPlacement = "bottom", strategy = "absolute", offset = 0, collisionPadding = 0, matchReferenceWidth = false, maxHeight, flip = true, shift = true } = options;
54
+ const { reference, floating, boundary, placement: rawPlacement = "bottom", strategy = "absolute", offset = 0, alignmentOffset = 0, collisionPadding = 0, matchReferenceWidth = false, maxHeight, flip = true, shift = true } = options;
50
55
  const parsed = parsePlacement(rawPlacement);
51
56
  const defaultPlacement = buildPlacement(parsed.side, parsed.align);
52
57
  let currentPlacement = defaultPlacement;
53
- let basePlacement = getPlacementCoords(currentPlacement, reference, floating, offset);
58
+ let basePlacement = getPlacementCoords(currentPlacement, reference, floating, offset, alignmentOffset);
54
59
  if (flip) {
55
- const overflow = getOverflowForPlacement(currentPlacement, reference, floating, boundary, offset, collisionPadding);
60
+ const overflow = getOverflowForPlacement(currentPlacement, reference, floating, boundary, offset, alignmentOffset, collisionPadding);
56
61
  const { side: currentSide } = parsePlacement(currentPlacement);
57
62
  const overflowSide = overflow[currentSide];
58
63
  if (overflowSide > 0) {
59
64
  const oppositeSide = getOppositeSide(currentSide);
60
65
  const oppositePlacement = buildPlacement(oppositeSide, parsed.align);
61
- const oppositeOverflow = getOverflowForPlacement(oppositePlacement, reference, floating, boundary, offset, collisionPadding);
66
+ const oppositeOverflow = getOverflowForPlacement(oppositePlacement, reference, floating, boundary, offset, alignmentOffset, collisionPadding);
62
67
  if (oppositeOverflow[oppositeSide] < overflowSide) {
63
68
  currentPlacement = oppositePlacement;
64
- basePlacement = getPlacementCoords(currentPlacement, reference, floating, offset);
69
+ basePlacement = getPlacementCoords(currentPlacement, reference, floating, offset, alignmentOffset);
65
70
  }
66
71
  }
67
72
  }
@@ -18,6 +18,7 @@ export interface ComputeFloatingPositionOptions {
18
18
  placement?: FloatingPlacement;
19
19
  strategy?: FloatingStrategy;
20
20
  offset?: number;
21
+ alignmentOffset?: number;
21
22
  collisionPadding?: number;
22
23
  matchReferenceWidth?: boolean;
23
24
  maxHeight?: number;
@@ -6,6 +6,7 @@ export type UseFloatingPositionOptions = {
6
6
  placement?: import("./floating-types.js").FloatingPlacement;
7
7
  strategy?: import("./floating-types.js").FloatingStrategy;
8
8
  offset?: number;
9
+ alignmentOffset?: number;
9
10
  collisionPadding?: number;
10
11
  matchReferenceWidth?: boolean;
11
12
  maxHeight?: number;
@@ -3,7 +3,7 @@ import * as React from "react";
3
3
  import { computeFloatingPosition } from "./compute-position.js";
4
4
  import { autoUpdateFloating } from "./auto-update.js";
5
5
  export function useFloatingPosition(options) {
6
- const { open, placement = "bottom", strategy = "absolute", offset = 0, collisionPadding = 0, matchReferenceWidth = false, maxHeight, flip = true, shift = true, boundary } = options;
6
+ const { open, placement = "bottom", strategy = "absolute", offset = 0, alignmentOffset = 0, collisionPadding = 0, matchReferenceWidth = false, maxHeight, flip = true, shift = true, boundary } = options;
7
7
  const [referenceEl, setReferenceEl] = React.useState(null);
8
8
  const [floatingEl, setFloatingEl] = React.useState(null);
9
9
  const [style, setStyle] = React.useState({
@@ -62,6 +62,7 @@ export function useFloatingPosition(options) {
62
62
  placement: placement,
63
63
  strategy: strategy,
64
64
  offset,
65
+ alignmentOffset,
65
66
  collisionPadding,
66
67
  matchReferenceWidth,
67
68
  ...(maxHeight === undefined ? {} : { maxHeight }),
@@ -73,9 +74,9 @@ export function useFloatingPosition(options) {
73
74
  left: `${computed.x}px`,
74
75
  top: `${computed.y}px`,
75
76
  width: matchReferenceWidth ? `${referenceEl?.offsetWidth ?? computed.referenceWidth}px` : "auto",
76
- "--liano-floating-reference-width": `${computed.referenceWidth}px`,
77
- "--liano-floating-available-width": `${computed.availableWidth}px`,
78
- "--liano-floating-available-height": `${computed.availableHeight}px`
77
+ "--zvk-ui-floating-reference-width": `${computed.referenceWidth}px`,
78
+ "--zvk-ui-floating-available-width": `${computed.availableWidth}px`,
79
+ "--zvk-ui-floating-available-height": `${computed.availableHeight}px`
79
80
  });
80
81
  setResolvedPlacement(computed.placement);
81
82
  }, [
@@ -83,6 +84,7 @@ export function useFloatingPosition(options) {
83
84
  placement,
84
85
  strategy,
85
86
  offset,
87
+ alignmentOffset,
86
88
  collisionPadding,
87
89
  matchReferenceWidth,
88
90
  maxHeight,
@@ -1,6 +1,8 @@
1
1
  const overlayStack = [];
2
+ let nextOverlayId = 1;
2
3
  export function pushOverlay(node) {
3
- const id = `liano-overlay-${overlayStack.length + 1}-${Math.random().toString(36).slice(2)}`;
4
+ const id = `zvk-ui-overlay-${nextOverlayId}`;
5
+ nextOverlayId += 1;
4
6
  overlayStack.push({ id, node });
5
7
  return id;
6
8
  }
@@ -35,6 +37,7 @@ export function isInOverlayStack(node) {
35
37
  }
36
38
  export function resetOverlayStackForTests() {
37
39
  overlayStack.length = 0;
40
+ nextOverlayId = 1;
38
41
  }
39
42
  export function getOverlayStackLength() {
40
43
  return overlayStack.length;