ropav 0.0.12 → 0.1.1

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 (37) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -1
  3. package/dist/card.css +26 -26
  4. package/dist/card.js +6 -16
  5. package/dist/components/card/types.d.ts +0 -3
  6. package/dist/components/dialog/types.d.ts +1 -0
  7. package/dist/components/dropdown-menu/types.d.ts +5 -7
  8. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +2 -0
  9. package/dist/components/floating/index.d.ts +1 -1
  10. package/dist/components/floating/types.d.ts +11 -0
  11. package/dist/components/modal/types.d.ts +1 -0
  12. package/dist/components/overlay/index.d.ts +3 -0
  13. package/dist/components/overlay/index.js +3 -2
  14. package/dist/components/overlay/overlay-layer-provider.d.ts +21 -0
  15. package/dist/components/overlay/types.d.ts +10 -1
  16. package/dist/components/overlay/useOverlayZIndex.d.ts +4 -0
  17. package/dist/components/popover/types.d.ts +1 -0
  18. package/dist/components/toast/types.d.ts +1 -0
  19. package/dist/components/tooltip/types.d.ts +1 -0
  20. package/dist/composables/useOverlayLayer.d.ts +1 -1
  21. package/dist/dialog.js +7 -2
  22. package/dist/dropdown-menu.js +34 -23
  23. package/dist/index.js +3 -2
  24. package/dist/modal.css +28 -28
  25. package/dist/modal.js +5 -3
  26. package/dist/overlay2.js +16 -1
  27. package/dist/popover.js +11 -2
  28. package/dist/toast.css +21 -21
  29. package/dist/toast.js +10 -2
  30. package/dist/tooltip.js +12 -1
  31. package/dist/useFloatingPosition.js +16 -2
  32. package/dist/{useOverlayLayer.js → useOverlayZIndex.js} +29 -4
  33. package/docs/public-floating-api.md +24 -13
  34. package/docs/public-overlay-layer-api.md +65 -0
  35. package/docs/public-styles-api.md +1 -5
  36. package/package.json +38 -41
  37. package/dist/legacy-unlayered.css +0 -5382
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 daopk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -41,7 +41,7 @@ import { Button } from 'ropav';
41
41
 
42
42
  Use typed `classNames` and `styles`, documented state attributes, and variables listed in the packaged styles manifest. DOM nesting, internal selectors and undocumented variables are private implementation details.
43
43
 
44
- See the [Public Styles API](./docs/public-styles-api.md) and [public token table](./docs/public-tokens.md). Layered consumers should declare `reset, ropav.tokens, ropav.components, app`; `ropav/legacy-unlayered.css` is the temporary compatibility import for unlayered resets.
44
+ See the [Public Styles API](./docs/public-styles-api.md) and [public token table](./docs/public-tokens.md). Consumers can declare `reset, ropav.tokens, ropav.components, app` to establish their cascade layer order.
45
45
 
46
46
  For headless Tooltip, HoverCard and custom menu markup, see the
47
47
  [public floating API](./docs/public-floating-api.md).
package/dist/card.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-card[data-v-2c467155] {
2
+ .rp-card[data-v-114f8e01] {
3
3
  --_rp-card-bg: var(--rp-color-default);
4
4
  --_rp-card-border: var(--rp-color-default-border);
5
5
  --_rp-card-fg: var(--rp-color-text);
@@ -19,89 +19,89 @@
19
19
  border-radius: var(--_rp-card-radius);
20
20
  transition: background-color var(--rp-transition-fast), border-color var(--rp-transition-fast);
21
21
  }
22
- .rp-card--layer-base[data-v-2c467155] {
22
+ .rp-card--layer-base[data-v-114f8e01] {
23
23
  --_rp-card-bg: var(--rp-color-body);
24
24
  }
25
- .rp-card--layer-surface[data-v-2c467155] {
25
+ .rp-card--layer-surface[data-v-114f8e01] {
26
26
  --_rp-card-bg: var(--rp-color-default);
27
27
  }
28
- .rp-card--layer-raised[data-v-2c467155] {
28
+ .rp-card--layer-raised[data-v-114f8e01] {
29
29
  --_rp-card-bg: var(--rp-color-default);
30
30
  }
31
- .rp-card--borderless[data-v-2c467155] {
31
+ .rp-card--borderless[data-v-114f8e01] {
32
32
  --_rp-card-border: transparent;
33
33
  }
34
- .rp-card--header-bordered .rp-card__header[data-v-2c467155] {
34
+ .rp-card--header-bordered .rp-card__header[data-v-114f8e01] {
35
35
  border-bottom: var(--rp-border-width-thin) solid var(--_rp-card-header-border);
36
36
  }
37
- .rp-card--footer-bordered .rp-card__footer[data-v-2c467155] {
37
+ .rp-card--footer-bordered .rp-card__footer[data-v-114f8e01] {
38
38
  border-top: var(--rp-border-width-thin) solid var(--_rp-card-footer-border);
39
39
  }
40
- .rp-card--header-compact .rp-card__header[data-v-2c467155] {
40
+ .rp-card--header-compact .rp-card__header[data-v-114f8e01] {
41
41
  padding-block-end: calc(var(--_rp-card-padding) / 2);
42
42
  }
43
- .rp-card--header-compact .rp-card__body[data-v-2c467155] {
43
+ .rp-card--header-compact .rp-card__body[data-v-114f8e01] {
44
44
  padding-block-start: calc(var(--_rp-card-padding) / 2);
45
45
  }
46
- .rp-card--footer-compact .rp-card__body[data-v-2c467155] {
46
+ .rp-card--footer-compact .rp-card__body[data-v-114f8e01] {
47
47
  padding-block-end: calc(var(--_rp-card-padding) / 2);
48
48
  }
49
- .rp-card--footer-compact .rp-card__footer[data-v-2c467155] {
49
+ .rp-card--footer-compact .rp-card__footer[data-v-114f8e01] {
50
50
  padding-block-start: calc(var(--_rp-card-padding) / 2);
51
51
  }
52
- .rp-card--padding-none[data-v-2c467155] {
52
+ .rp-card--padding-none[data-v-114f8e01] {
53
53
  --_rp-card-padding: var(--rp-spacing-0);
54
54
  }
55
- .rp-card--padding-sm[data-v-2c467155] {
55
+ .rp-card--padding-sm[data-v-114f8e01] {
56
56
  --_rp-card-padding: var(--rp-spacing-3);
57
57
  }
58
- .rp-card--padding-md[data-v-2c467155] {
58
+ .rp-card--padding-md[data-v-114f8e01] {
59
59
  --_rp-card-padding: var(--rp-spacing-5);
60
60
  }
61
- .rp-card--padding-lg[data-v-2c467155] {
61
+ .rp-card--padding-lg[data-v-114f8e01] {
62
62
  --_rp-card-padding: var(--rp-spacing-6);
63
63
  }
64
- .rp-card--radius-none[data-v-2c467155] {
64
+ .rp-card--radius-none[data-v-114f8e01] {
65
65
  --_rp-card-radius: var(--rp-radius-none);
66
66
  }
67
- .rp-card--radius-xs[data-v-2c467155] {
67
+ .rp-card--radius-xs[data-v-114f8e01] {
68
68
  --_rp-card-radius: var(--rp-radius-xs);
69
69
  }
70
- .rp-card--radius-sm[data-v-2c467155] {
70
+ .rp-card--radius-sm[data-v-114f8e01] {
71
71
  --_rp-card-radius: var(--rp-radius-sm);
72
72
  }
73
- .rp-card--radius-md[data-v-2c467155] {
73
+ .rp-card--radius-md[data-v-114f8e01] {
74
74
  --_rp-card-radius: var(--rp-radius-md);
75
75
  }
76
- .rp-card--radius-lg[data-v-2c467155] {
76
+ .rp-card--radius-lg[data-v-114f8e01] {
77
77
  --_rp-card-radius: var(--rp-radius-lg);
78
78
  }
79
- .rp-card--radius-xl[data-v-2c467155] {
79
+ .rp-card--radius-xl[data-v-114f8e01] {
80
80
  --_rp-card-radius: var(--rp-radius-xl);
81
81
  }
82
- .rp-card__header[data-v-2c467155], .rp-card__body[data-v-2c467155], .rp-card__footer[data-v-2c467155] {
82
+ .rp-card__header[data-v-114f8e01], .rp-card__body[data-v-114f8e01], .rp-card__footer[data-v-114f8e01] {
83
83
  box-sizing: border-box;
84
84
  padding: var(--_rp-card-padding);
85
85
  }
86
- .rp-card__header[data-v-2c467155], .rp-card__footer[data-v-2c467155] {
86
+ .rp-card__header[data-v-114f8e01], .rp-card__footer[data-v-114f8e01] {
87
87
  display: grid;
88
88
  gap: var(--rp-spacing-1);
89
89
  }
90
- .rp-card__body[data-v-2c467155] {
90
+ .rp-card__body[data-v-114f8e01] {
91
91
  flex: 1 1 auto;
92
92
  min-width: 0;
93
93
  color: var(--rp-color-text);
94
94
  font-size: var(--rp-font-size-md);
95
95
  line-height: var(--rp-line-height-md);
96
96
  }
97
- .rp-card__title[data-v-2c467155] {
97
+ .rp-card__title[data-v-114f8e01] {
98
98
  margin: 0;
99
99
  color: var(--rp-color-text);
100
100
  font-size: var(--rp-font-size-lg);
101
101
  font-weight: var(--rp-font-weight-semibold);
102
102
  line-height: var(--rp-line-height-xs);
103
103
  }
104
- .rp-card__description[data-v-2c467155] {
104
+ .rp-card__description[data-v-114f8e01] {
105
105
  margin: 0;
106
106
  color: var(--rp-color-dimmed);
107
107
  font-size: var(--rp-font-size-sm);
package/dist/card.js CHANGED
@@ -4,10 +4,10 @@ import { n as useStylesApi } from "./styles-api.js";
4
4
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
5
  import { computed, createIf, createSlot, defineVaporComponent, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, txt, unref, useSlots } from "vue";
6
6
  //#region src/components/card/card.vue?vue&type=script&setup=true&vapor=true&lang.ts
7
- var t0 = template("<div data-v-2c467155> ");
8
- var t1 = template("<p data-v-2c467155> ");
9
- var t2 = template("<div data-v-2c467155>");
10
- var t3 = template("<div data-v-2c467155>", 1);
7
+ var t0 = template("<div data-v-114f8e01> ");
8
+ var t1 = template("<p data-v-114f8e01> ");
9
+ var t2 = template("<div data-v-114f8e01>");
10
+ var t3 = template("<div data-v-114f8e01>", 1);
11
11
  //#endregion
12
12
  //#region src/components/card/card.vue
13
13
  var card_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -32,13 +32,6 @@ var card_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
32
32
  },
33
33
  title: { default: "" },
34
34
  description: { default: "" },
35
- bodyClass: { type: [
36
- Boolean,
37
- null,
38
- String,
39
- Object,
40
- Array
41
- ] },
42
35
  classNames: {},
43
36
  styles: {}
44
37
  },
@@ -95,10 +88,7 @@ var card_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
95
88
  setInsertionState(n19, null, 1);
96
89
  createIf(() => hasBody.value, () => {
97
90
  const n14 = t2();
98
- renderEffect(() => setDynamicProps(n14, [unref(getPartAttrs)("body", {
99
- class: "rp-card__body",
100
- compatibilityClass: __props.bodyClass
101
- })]));
91
+ renderEffect(() => setDynamicProps(n14, [unref(getPartAttrs)("body", { class: "rp-card__body" })]));
102
92
  setInsertionState(n14, null, 0);
103
93
  createSlot("default", null, null, 1);
104
94
  return n14;
@@ -113,7 +103,7 @@ var card_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
113
103
  });
114
104
  return n19;
115
105
  }
116
- }), [["__scopeId", "data-v-2c467155"]]);
106
+ }), [["__scopeId", "data-v-114f8e01"]]);
117
107
  //#endregion
118
108
  //#region src/components/card/types.ts
119
109
  var cardParts = [
@@ -1,4 +1,3 @@
1
- import { HTMLAttributes } from 'vue';
2
1
  import { StylesApiProps } from '../../styles-api.js';
3
2
  export declare const cardParts: readonly ["root", "header", "title", "description", "body", "footer"];
4
3
  export type CardPart = (typeof cardParts)[number];
@@ -14,6 +13,4 @@ export interface CardProps extends StylesApiProps<CardPart> {
14
13
  footerBorder?: boolean;
15
14
  title?: string;
16
15
  description?: string;
17
- /** @deprecated Use `classNames.body` instead. */
18
- bodyClass?: HTMLAttributes['class'];
19
16
  }
@@ -12,6 +12,7 @@ export type DialogFocusTrapOptions = Omit<FocusTrapOptions, 'allowOutsideClick'
12
12
  export interface DialogRootProps {
13
13
  open?: boolean;
14
14
  defaultOpen?: boolean;
15
+ baseZIndex?: number;
15
16
  modal?: boolean;
16
17
  closeOnEscape?: boolean;
17
18
  closeOnOutsideClick?: boolean;
@@ -1,6 +1,6 @@
1
1
  import { Component, HTMLAttributes, Ref } from 'vue';
2
2
  import { StylesApiProps } from '../../styles-api.js';
3
- import { FloatingCollisionPadding, FloatingOffset, FloatingOffsetOptions, FloatingPositionProps, FloatingStrategy, FloatingTarget, FloatingVirtualElement, TeleportProps } from '../floating/types.js';
3
+ import { FloatingAutoUpdateOptions, FloatingCollisionPadding, FloatingFlipOptions, FloatingOffset, FloatingOffsetOptions, FloatingPositionProps, FloatingStrategy, FloatingTarget, FloatingVirtualElement, TeleportProps } from '../floating/types.js';
4
4
  export declare const dropdownMenuParts: readonly ["root", "trigger", "content", "item", "label", "shortcut", "submenu", "submenuIndicator", "empty"];
5
5
  export type DropdownMenuPart = (typeof dropdownMenuParts)[number];
6
6
  export type DropdownMenuPlacement = 'top-start' | 'top' | 'top-end' | 'right-start' | 'right' | 'right-end' | 'bottom-start' | 'bottom' | 'bottom-end' | 'left-start' | 'left' | 'left-end';
@@ -107,6 +107,7 @@ export interface DropdownMenuRenderedItem {
107
107
  }
108
108
  export interface DropdownMenuProps extends FloatingPositionProps<DropdownMenuPlacement>, StylesApiProps<DropdownMenuPart> {
109
109
  id?: string;
110
+ baseZIndex?: number;
110
111
  items?: DropdownMenuItem[];
111
112
  open?: boolean;
112
113
  disabled?: boolean;
@@ -114,10 +115,6 @@ export interface DropdownMenuProps extends FloatingPositionProps<DropdownMenuPla
114
115
  ariaLabel?: string;
115
116
  modal?: boolean;
116
117
  ignore?: readonly DropdownMenuInteractOutsideTarget[];
117
- /** @deprecated Use `teleport` instead. */
118
- portal?: boolean;
119
- /** @deprecated Use `teleportTo` instead. */
120
- portalTo?: string | HTMLElement;
121
118
  }
122
119
  export type DropdownMenuAs = string | Component;
123
120
  export type DropdownMenuCheckedState = boolean | 'indeterminate';
@@ -142,6 +139,7 @@ export interface DropdownMenuRootPrimitiveProps {
142
139
  id?: string;
143
140
  open?: boolean;
144
141
  defaultOpen?: boolean;
142
+ baseZIndex?: number;
145
143
  disabled?: boolean;
146
144
  modal?: boolean;
147
145
  target?: FloatingTarget | null;
@@ -177,11 +175,11 @@ export interface DropdownMenuContentPrimitiveProps {
177
175
  offset?: DropdownMenuOffset;
178
176
  strategy?: FloatingStrategy;
179
177
  flip?: boolean;
178
+ flipOptions?: FloatingFlipOptions;
180
179
  shift?: boolean;
181
180
  collisionPadding?: FloatingCollisionPadding;
181
+ autoUpdateOptions?: FloatingAutoUpdateOptions;
182
182
  arrow?: boolean;
183
- /** @deprecated Use `flip` and `shift` instead. */
184
- avoidCollisions?: boolean;
185
183
  forceMount?: boolean;
186
184
  ignore?: readonly DropdownMenuInteractOutsideTarget[];
187
185
  ariaLabel?: string;
@@ -33,8 +33,10 @@ export interface DropdownMenuRenderContext {
33
33
  getSubmenuPlacement: () => DropdownMenuPlacement;
34
34
  getStrategy: () => NonNullable<DropdownMenuProps['strategy']>;
35
35
  getFlip: () => boolean;
36
+ getFlipOptions: () => DropdownMenuProps['flipOptions'];
36
37
  getShift: () => boolean;
37
38
  getCollisionPadding: () => NonNullable<DropdownMenuProps['collisionPadding']>;
39
+ getAutoUpdateOptions: () => DropdownMenuProps['autoUpdateOptions'];
38
40
  }
39
41
  export declare function useDropdownMenuRenderItems({ props, actualPlacement, items, getItemId, getSubmenuId, getMenuActiveDescendant, getItemElement, isItemFocused, isSubmenuOpen, activateItem, focusHoveredItem, selectItem, openSubmenu, closeSubmenu, close, }: UseDropdownMenuRenderItemsOptions): {
40
42
  renderedItems: import('vue').ComputedRef<DropdownMenuRenderedItem[]>;
@@ -1,3 +1,3 @@
1
1
  export { useHoverDisclosure } from './useHoverDisclosure.js';
2
2
  export { useFloatingPosition } from './useFloatingPosition.js';
3
- export type { FloatingAlignment, FloatingCollisionPadding, FloatingOffset, FloatingOffsetOptions, FloatingPlacement, FloatingPositionProps, FloatingReference, FloatingSide, FloatingStrategy, FloatingTarget, FloatingVirtualElement, HoverDisclosureContentProps, HoverDisclosureContentTarget, HoverDisclosureInteractionTarget, HoverDisclosureOpenChangeDetails, HoverDisclosureOpenChangeReason, HoverDisclosureOption, HoverDisclosureState, HoverDisclosureTouchBehavior, HoverDisclosureTriggerProps, TeleportProps, TeleportTarget, TeleportTargetValue, UseHoverDisclosureOptions, UseHoverDisclosureReturn, UseFloatingPositionOptions, UseFloatingPositionReturn, } from './types.js';
3
+ export type { FloatingAlignment, FloatingAutoUpdateOptions, FloatingCollisionPadding, FloatingFlipFallbackStrategy, FloatingFlipOptions, FloatingOffset, FloatingOffsetOptions, FloatingPlacement, FloatingPositionProps, FloatingReference, FloatingSide, FloatingStrategy, FloatingTarget, FloatingVirtualElement, HoverDisclosureContentProps, HoverDisclosureContentTarget, HoverDisclosureInteractionTarget, HoverDisclosureOpenChangeDetails, HoverDisclosureOpenChangeReason, HoverDisclosureOption, HoverDisclosureState, HoverDisclosureTouchBehavior, HoverDisclosureTriggerProps, TeleportProps, TeleportTarget, TeleportTargetValue, UseHoverDisclosureOptions, UseHoverDisclosureReturn, UseFloatingPositionOptions, UseFloatingPositionReturn, } from './types.js';
@@ -10,6 +10,13 @@ export interface FloatingOffsetOptions {
10
10
  }
11
11
  export type FloatingOffset = number | FloatingOffsetOptions;
12
12
  export type FloatingCollisionPadding = number | Partial<Record<FloatingSide, number>>;
13
+ export type FloatingFlipFallbackStrategy = 'bestFit' | 'initialPlacement';
14
+ export interface FloatingFlipOptions {
15
+ fallbackStrategy?: FloatingFlipFallbackStrategy;
16
+ }
17
+ export interface FloatingAutoUpdateOptions {
18
+ animationFrame?: boolean;
19
+ }
13
20
  export type FloatingReference = Element | VirtualElement;
14
21
  export type FloatingTarget = string | FloatingReference | Ref<FloatingReference | null | undefined>;
15
22
  export interface FloatingPositionProps<TPlacement extends FloatingPlacement = FloatingPlacement> extends TeleportProps {
@@ -18,8 +25,10 @@ export interface FloatingPositionProps<TPlacement extends FloatingPlacement = Fl
18
25
  strategy?: FloatingStrategy;
19
26
  offset?: FloatingOffset;
20
27
  flip?: boolean;
28
+ flipOptions?: FloatingFlipOptions;
21
29
  shift?: boolean;
22
30
  collisionPadding?: FloatingCollisionPadding;
31
+ autoUpdateOptions?: FloatingAutoUpdateOptions;
23
32
  arrow?: boolean;
24
33
  }
25
34
  export interface UseFloatingPositionOptions {
@@ -31,8 +40,10 @@ export interface UseFloatingPositionOptions {
31
40
  strategy?: MaybeRefOrGetter<FloatingStrategy | undefined>;
32
41
  offset?: MaybeRefOrGetter<FloatingOffset | undefined>;
33
42
  flip?: MaybeRefOrGetter<boolean | undefined>;
43
+ flipOptions?: MaybeRefOrGetter<FloatingFlipOptions | undefined>;
34
44
  shift?: MaybeRefOrGetter<boolean | undefined>;
35
45
  collisionPadding?: MaybeRefOrGetter<FloatingCollisionPadding | undefined>;
46
+ autoUpdateOptions?: MaybeRefOrGetter<FloatingAutoUpdateOptions | undefined>;
36
47
  restartKey?: MaybeRefOrGetter<unknown>;
37
48
  }
38
49
  export interface UseFloatingPositionReturn {
@@ -21,6 +21,7 @@ export interface ModalSlotProps {
21
21
  export interface ModalProps extends TeleportProps, StylesApiProps<ModalPart> {
22
22
  id?: string;
23
23
  open?: boolean;
24
+ baseZIndex?: number;
24
25
  title?: string;
25
26
  description?: string;
26
27
  ariaLabel?: string;
@@ -1,3 +1,6 @@
1
1
  export { default as Overlay } from './overlay.js';
2
+ export { default as OverlayLayerProvider } from './overlay-layer-provider.js';
2
3
  export { overlayParts } from './types.js';
4
+ export { useOverlayZIndex } from './useOverlayZIndex.js';
5
+ export type { OverlayLayerProviderProps, UseOverlayZIndexOptions } from './types.js';
3
6
  export type { OverlayBlur, OverlayPart, OverlayProps, OverlayZIndex } from './types.js';
@@ -1,3 +1,4 @@
1
+ import { n as useOverlayZIndex } from "../../useOverlayZIndex.js";
1
2
  import { t as overlay_default } from "../../overlay.js";
2
- import { t as overlayParts } from "../../overlay2.js";
3
- export { overlay_default as Overlay, overlayParts };
3
+ import { n as overlay_layer_provider_default, t as overlayParts } from "../../overlay2.js";
4
+ export { overlay_default as Overlay, overlay_layer_provider_default as OverlayLayerProvider, overlayParts, useOverlayZIndex };
@@ -0,0 +1,21 @@
1
+ import { OverlayLayerProviderProps } from './types.js';
2
+ declare const __VLS_export: (__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
3
+ props: import('vue').PublicProps & __VLS_PrettifyLocal<OverlayLayerProviderProps> & (typeof globalThis extends {
4
+ __VLS_PROPS_FALLBACK: infer P;
5
+ } ? P : {});
6
+ expose: (exposed: {}) => void;
7
+ attrs: any;
8
+ slots: {
9
+ default?: (props: {}) => any;
10
+ };
11
+ emit: {};
12
+ }>) => import('vue').VNode & {
13
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
14
+ };
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
17
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
18
+ [K in keyof T]: T[K];
19
+ } : {
20
+ [K in keyof T as K]: T[K];
21
+ }) & {};
@@ -1,4 +1,4 @@
1
- import { CSSProperties } from 'vue';
1
+ import { CSSProperties, MaybeRefOrGetter } from 'vue';
2
2
  import { StylesApiProps } from '../../styles-api.js';
3
3
  export declare const overlayParts: readonly ["root"];
4
4
  export type OverlayPart = (typeof overlayParts)[number];
@@ -13,3 +13,12 @@ export interface OverlayProps extends StylesApiProps<OverlayPart> {
13
13
  interactive?: boolean;
14
14
  disabled?: boolean;
15
15
  }
16
+ export interface OverlayLayerProviderProps {
17
+ baseZIndex: number;
18
+ }
19
+ export interface UseOverlayZIndexOptions {
20
+ baseZIndex?: MaybeRefOrGetter<number | null | undefined>;
21
+ defaultBaseZIndex?: number;
22
+ offset?: MaybeRefOrGetter<number>;
23
+ aboveParent?: MaybeRefOrGetter<boolean>;
24
+ }
@@ -0,0 +1,4 @@
1
+ import { ComputedRef, MaybeRefOrGetter } from 'vue';
2
+ import { UseOverlayZIndexOptions } from './types.js';
3
+ export declare function provideOverlayZIndex(baseZIndex: MaybeRefOrGetter<number>): ComputedRef<number>;
4
+ export declare function useOverlayZIndex(options?: UseOverlayZIndexOptions): ComputedRef<number>;
@@ -37,6 +37,7 @@ export interface PopoverContentSlotProps {
37
37
  }
38
38
  export interface PopoverProps extends FloatingPositionProps<PopoverPlacement>, StylesApiProps<PopoverPart> {
39
39
  id?: string;
40
+ baseZIndex?: number;
40
41
  contentClass?: string;
41
42
  open?: boolean;
42
43
  disabled?: boolean;
@@ -75,6 +75,7 @@ export interface ToastProviderProps extends ToastStoreOptions {
75
75
  export interface ToastViewportProps extends TeleportProps, StylesApiProps<ToastViewportPart> {
76
76
  position?: ToastPosition;
77
77
  label?: string;
78
+ baseZIndex?: number;
78
79
  }
79
80
  export interface ToastOptions extends Omit<ToastProps, 'open'> {
80
81
  /** Replaces an active toast with the same id and starts a fresh lifecycle. */
@@ -21,6 +21,7 @@ export interface TooltipSlotProps {
21
21
  }
22
22
  export interface TooltipProps extends FloatingPositionProps<TooltipPlacement>, StylesApiProps<TooltipPart> {
23
23
  id?: string;
24
+ baseZIndex?: number;
24
25
  content?: string;
25
26
  color?: TooltipColor;
26
27
  autoContrast?: boolean;
@@ -22,7 +22,7 @@ export interface UseOverlayLayerOptions {
22
22
  modal?: MaybeRefOrGetter<boolean>;
23
23
  modalEffects?: boolean;
24
24
  preventScroll?: MaybeRefOrGetter<boolean>;
25
- baseZIndex?: number;
25
+ baseZIndex?: MaybeRefOrGetter<number>;
26
26
  }
27
27
  export declare function useOverlayLayer(options: UseOverlayLayerOptions): OverlayLayerContext;
28
28
  export declare function useOverlayLayerBranch(element: Ref<HTMLElement | null>, options?: {
package/dist/dialog.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as useRequiredInject } from "./useRequiredInject.js";
2
- import { n as useOverlayLayerBranch, t as useOverlayLayer } from "./useOverlayLayer.js";
2
+ import { i as useOverlayLayerBranch, n as useOverlayZIndex, r as useOverlayLayer } from "./useOverlayZIndex.js";
3
3
  import { t as useFocusTrap } from "./useFocusTrap.js";
4
4
  import { t as provideTeleportTarget } from "./useTeleportTarget.js";
5
5
  import { VaporTeleport, applyVShow, computed, createComponent, createDynamicComponent, createIf, createSlot, defineVaporComponent, extend, isRef, mergeProps, nextTick, onBeforeUnmount, provide, ref, setTemplateRefBinding, shallowRef, unref, useAttrs, useId, watch } from "vue";
@@ -298,6 +298,7 @@ var dialog_root_default = /* @__PURE__ */ defineVaporComponent({
298
298
  type: Boolean,
299
299
  default: false
300
300
  },
301
+ baseZIndex: {},
301
302
  modal: {
302
303
  type: Boolean,
303
304
  default: true
@@ -343,7 +344,11 @@ var dialog_root_default = /* @__PURE__ */ defineVaporComponent({
343
344
  modal,
344
345
  modalEffects: true,
345
346
  preventScroll,
346
- baseZIndex: 1e3
347
+ baseZIndex: useOverlayZIndex({
348
+ baseZIndex: () => props.baseZIndex,
349
+ defaultBaseZIndex: 1e3,
350
+ aboveParent: false
351
+ })
347
352
  });
348
353
  function setOpen(value) {
349
354
  const previous = isOpen.value;
@@ -2,7 +2,7 @@ import './dropdown-menu.css';
2
2
  import { t as bem } from "./bem.js";
3
3
  import { n as useStylesApi, t as presence } from "./styles-api.js";
4
4
  import { t as useRequiredInject } from "./useRequiredInject.js";
5
- import { t as useOverlayLayer } from "./useOverlayLayer.js";
5
+ import { n as useOverlayZIndex, r as useOverlayLayer } from "./useOverlayZIndex.js";
6
6
  import { n as useFloatingPosition, r as useFloatingTarget, t as isElementReference } from "./useFloatingPosition.js";
7
7
  import { n as useTeleportPositioningKey, r as useTeleportTarget, t as provideTeleportTarget } from "./useTeleportTarget.js";
8
8
  import { VaporTeleport, VaporTransition, child, computed, createComponent, createComponentWithFallback, createDynamicComponent, createFor, createIf, createSlot, createTemplateRefSetter, defineVaporComponent, extend, isRef, markRaw, mergeProps, nextTick, onBeforeUnmount, onMounted, onUnmounted, provide, ref, renderEffect, resolveComponent, setAttr, setDynamicProps, setInsertionState, setStaticTemplateRef, setStyle, setTemplateRefBinding, setText, shallowRef, template, toDisplayString, txt, unref, useAttrs, useId, watch } from "vue";
@@ -433,9 +433,11 @@ function useDropdownMenuPrimitiveContent(props, attrs, events, submenu) {
433
433
  placement: () => props.placement ?? defaultPlacement,
434
434
  strategy: () => props.strategy ?? "absolute",
435
435
  offset: () => props.offset,
436
- flip: () => props.avoidCollisions !== false && props.flip !== false,
437
- shift: () => props.avoidCollisions !== false && props.shift !== false,
436
+ flip: () => props.flip !== false,
437
+ flipOptions: () => props.flipOptions,
438
+ shift: () => props.shift !== false,
438
439
  collisionPadding: () => props.collisionPadding ?? 8,
440
+ autoUpdateOptions: () => props.autoUpdateOptions,
439
441
  restartKey: teleportPositioningKey
440
442
  });
441
443
  watch(floating.actualPlacement, (value) => {
@@ -584,19 +586,17 @@ var dropdown_menu_content_default = /* @__PURE__ */ defineVaporComponent({
584
586
  type: Boolean,
585
587
  default: true
586
588
  },
589
+ flipOptions: {},
587
590
  shift: {
588
591
  type: Boolean,
589
592
  default: true
590
593
  },
591
594
  collisionPadding: { default: 8 },
595
+ autoUpdateOptions: {},
592
596
  arrow: {
593
597
  type: Boolean,
594
598
  default: false
595
599
  },
596
- avoidCollisions: {
597
- type: Boolean,
598
- default: true
599
- },
600
600
  forceMount: {
601
601
  type: Boolean,
602
602
  default: false
@@ -1050,6 +1050,7 @@ var dropdown_menu_root_default = /* @__PURE__ */ defineVaporComponent({
1050
1050
  type: Boolean,
1051
1051
  default: false
1052
1052
  },
1053
+ baseZIndex: {},
1053
1054
  disabled: {
1054
1055
  type: Boolean,
1055
1056
  default: false
@@ -1081,10 +1082,15 @@ var dropdown_menu_root_default = /* @__PURE__ */ defineVaporComponent({
1081
1082
  const contentElement = ref(null);
1082
1083
  const inside = /* @__PURE__ */ new Set();
1083
1084
  let returnFocusElement = null;
1085
+ const baseZIndex = useOverlayZIndex({
1086
+ baseZIndex: () => props.baseZIndex,
1087
+ defaultBaseZIndex: 100,
1088
+ aboveParent: false
1089
+ });
1084
1090
  const layer = useOverlayLayer({
1085
1091
  active: computed(() => isOpen.value && !disabled.value),
1086
1092
  element: contentElement,
1087
- baseZIndex: 100
1093
+ baseZIndex
1088
1094
  });
1089
1095
  function setOpen(value) {
1090
1096
  if (value && disabled.value) return;
@@ -1289,15 +1295,13 @@ var dropdown_menu_sub_content_default = /* @__PURE__ */ defineVaporComponent({
1289
1295
  type: Boolean,
1290
1296
  default: true
1291
1297
  },
1298
+ flipOptions: {},
1292
1299
  shift: {
1293
1300
  type: Boolean,
1294
1301
  default: true
1295
1302
  },
1296
1303
  collisionPadding: { default: 8 },
1297
- avoidCollisions: {
1298
- type: Boolean,
1299
- default: true
1300
- },
1304
+ autoUpdateOptions: {},
1301
1305
  forceMount: {
1302
1306
  type: Boolean,
1303
1307
  default: false
@@ -1599,8 +1603,10 @@ var dropdown_menu_item_row_default = /* @__PURE__ */ defineVaporComponent({
1599
1603
  strategy: props.context.getStrategy,
1600
1604
  offset: () => 4,
1601
1605
  flip: props.context.getFlip,
1606
+ flipOptions: props.context.getFlipOptions,
1602
1607
  shift: props.context.getShift,
1603
- collisionPadding: props.context.getCollisionPadding
1608
+ collisionPadding: props.context.getCollisionPadding,
1609
+ autoUpdateOptions: props.context.getAutoUpdateOptions
1604
1610
  });
1605
1611
  const submenuProps = computed(() => props.context.getSubmenuProps(props.item, path.value, true));
1606
1612
  const publicSubmenuProps = computed(() => ({
@@ -2193,8 +2199,10 @@ function useDropdownMenuPortalPosition(options) {
2193
2199
  strategy: () => options.props.strategy ?? "absolute",
2194
2200
  offset: () => options.props.offset,
2195
2201
  flip: () => options.props.flip !== false,
2202
+ flipOptions: () => options.props.flipOptions,
2196
2203
  shift: () => options.props.shift !== false,
2197
2204
  collisionPadding: () => options.props.collisionPadding ?? 8,
2205
+ autoUpdateOptions: () => options.props.autoUpdateOptions,
2198
2206
  restartKey: options.restartKey
2199
2207
  });
2200
2208
  return {
@@ -2296,8 +2304,10 @@ function useDropdownMenuRenderItems({ props, actualPlacement, items, getItemId,
2296
2304
  getSubmenuPlacement: () => actualPlacement.value.endsWith("end") ? "left-start" : "right-start",
2297
2305
  getStrategy: () => props.strategy ?? "absolute",
2298
2306
  getFlip: () => props.flip !== false,
2307
+ getFlipOptions: () => props.flipOptions,
2299
2308
  getShift: () => props.shift !== false,
2300
- getCollisionPadding: () => props.collisionPadding ?? 8
2309
+ getCollisionPadding: () => props.collisionPadding ?? 8,
2310
+ getAutoUpdateOptions: () => props.autoUpdateOptions
2301
2311
  },
2302
2312
  getItemProps,
2303
2313
  getItemSlotProps
@@ -2354,10 +2364,9 @@ function useDropdownMenu(props, emit = {}) {
2354
2364
  const generatedId = useId();
2355
2365
  const menuId = computed(() => props.id ?? `${generatedId}-menu`);
2356
2366
  const placement = computed(() => props.placement ?? "bottom-start");
2357
- const requestedTeleportTarget = computed(() => props.portalTo ?? props.teleportTo);
2358
- const teleportTo = useTeleportTarget(() => requestedTeleportTarget.value);
2367
+ const teleportTo = useTeleportTarget(() => props.teleportTo);
2359
2368
  const teleportPositioningKey = useTeleportPositioningKey();
2360
- const shouldTeleport = computed(() => props.portal ?? props.teleport !== false);
2369
+ const shouldTeleport = computed(() => props.teleport !== false);
2361
2370
  const { isExplicitTarget, reference, resolvedTarget } = useFloatingTarget(() => props.target, rootRef);
2362
2371
  const targetElement = computed(() => isElementReference(resolvedTarget.value) ? resolvedTarget.value : null);
2363
2372
  const visibleItems = computed(() => props.items ?? []);
@@ -2367,7 +2376,11 @@ function useDropdownMenu(props, emit = {}) {
2367
2376
  const layer = useOverlayLayer({
2368
2377
  active: isVisible,
2369
2378
  element: menuRef,
2370
- baseZIndex: 100
2379
+ baseZIndex: useOverlayZIndex({
2380
+ baseZIndex: () => props.baseZIndex,
2381
+ defaultBaseZIndex: 100,
2382
+ aboveParent: false
2383
+ })
2371
2384
  });
2372
2385
  const contentHasSubmenu = computed(() => hasNestedItems(visibleItems.value));
2373
2386
  const isEmpty = computed(() => visibleItems.value.length === 0);
@@ -2585,6 +2598,7 @@ var dropdown_menu_default = /* @__PURE__ */ defineVaporComponent({
2585
2598
  __name: "dropdown-menu",
2586
2599
  props: {
2587
2600
  id: {},
2601
+ baseZIndex: {},
2588
2602
  items: { default: () => [] },
2589
2603
  open: {
2590
2604
  type: Boolean,
@@ -2604,11 +2618,6 @@ var dropdown_menu_default = /* @__PURE__ */ defineVaporComponent({
2604
2618
  default: false
2605
2619
  },
2606
2620
  ignore: {},
2607
- portal: {
2608
- type: Boolean,
2609
- default: void 0
2610
- },
2611
- portalTo: {},
2612
2621
  target: {},
2613
2622
  placement: { default: "bottom-start" },
2614
2623
  strategy: { default: "absolute" },
@@ -2617,11 +2626,13 @@ var dropdown_menu_default = /* @__PURE__ */ defineVaporComponent({
2617
2626
  type: Boolean,
2618
2627
  default: true
2619
2628
  },
2629
+ flipOptions: {},
2620
2630
  shift: {
2621
2631
  type: Boolean,
2622
2632
  default: true
2623
2633
  },
2624
2634
  collisionPadding: { default: 8 },
2635
+ autoUpdateOptions: {},
2625
2636
  arrow: {
2626
2637
  type: Boolean,
2627
2638
  default: false