ropav 0.0.9 → 0.0.11

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 (289) hide show
  1. package/README.md +6 -0
  2. package/dist/accordion.css +115 -111
  3. package/dist/accordion.js +60 -16
  4. package/dist/alert.css +110 -108
  5. package/dist/alert.js +48 -26
  6. package/dist/aspect-ratio.css +17 -15
  7. package/dist/aspect-ratio.js +20 -6
  8. package/dist/avatar.css +98 -96
  9. package/dist/avatar.js +27 -16
  10. package/dist/badge.css +95 -93
  11. package/dist/badge.js +29 -16
  12. package/dist/base.css +672 -671
  13. package/dist/button-group.css +39 -37
  14. package/dist/button-group.js +23 -12
  15. package/dist/button-link.css +160 -158
  16. package/dist/button-link.js +43 -24
  17. package/dist/button.css +160 -158
  18. package/dist/button.js +37 -19
  19. package/dist/card.css +109 -107
  20. package/dist/card.js +42 -17
  21. package/dist/checkbox.css +139 -137
  22. package/dist/checkbox.js +79 -28
  23. package/dist/collapse.css +29 -27
  24. package/dist/collapse.js +44 -10
  25. package/dist/color-input.css +137 -107
  26. package/dist/color-input.js +91 -17
  27. package/dist/color-picker.css +309 -303
  28. package/dist/color-picker.js +250 -77
  29. package/dist/color-picker2.js +9 -1
  30. package/dist/color-swatch.css +48 -46
  31. package/dist/color-swatch.js +15 -11
  32. package/dist/color-swatch2.js +4 -0
  33. package/dist/components/accordion/accordion-item.d.ts +16 -4
  34. package/dist/components/accordion/accordion.d.ts +1 -1
  35. package/dist/components/accordion/index.d.ts +5 -4
  36. package/dist/components/accordion/index.js +2 -2
  37. package/dist/components/accordion/types.d.ts +10 -5
  38. package/dist/components/accordion/useAccordion.d.ts +1 -1
  39. package/dist/components/alert/alert.d.ts +3 -3
  40. package/dist/components/alert/index.d.ts +3 -3
  41. package/dist/components/alert/index.js +2 -2
  42. package/dist/components/alert/types.d.ts +5 -2
  43. package/dist/components/alert/useAlertColor.d.ts +1 -1
  44. package/dist/components/aspect-ratio/aspect-ratio.d.ts +1 -1
  45. package/dist/components/aspect-ratio/index.d.ts +3 -2
  46. package/dist/components/aspect-ratio/index.js +2 -2
  47. package/dist/components/aspect-ratio/types.d.ts +4 -1
  48. package/dist/components/avatar/avatar.d.ts +1 -1
  49. package/dist/components/avatar/index.d.ts +3 -3
  50. package/dist/components/avatar/index.js +2 -2
  51. package/dist/components/avatar/types.d.ts +5 -2
  52. package/dist/components/avatar/useAvatarColor.d.ts +1 -1
  53. package/dist/components/badge/badge.d.ts +1 -1
  54. package/dist/components/badge/index.d.ts +3 -3
  55. package/dist/components/badge/index.js +2 -2
  56. package/dist/components/badge/types.d.ts +5 -2
  57. package/dist/components/badge/useBadgeColor.d.ts +1 -1
  58. package/dist/components/button/button.d.ts +1 -1
  59. package/dist/components/button/index.d.ts +3 -2
  60. package/dist/components/button/index.js +2 -2
  61. package/dist/components/button/types.d.ts +5 -2
  62. package/dist/components/button/useButtonColor.d.ts +1 -1
  63. package/dist/components/button-group/button-group.d.ts +1 -1
  64. package/dist/components/button-group/index.d.ts +3 -2
  65. package/dist/components/button-group/index.js +2 -2
  66. package/dist/components/button-group/types.d.ts +4 -1
  67. package/dist/components/button-link/button-link.d.ts +1 -1
  68. package/dist/components/button-link/index.d.ts +3 -2
  69. package/dist/components/button-link/index.js +2 -2
  70. package/dist/components/button-link/types.d.ts +5 -2
  71. package/dist/components/card/card.d.ts +1 -1
  72. package/dist/components/card/index.d.ts +3 -2
  73. package/dist/components/card/index.js +2 -2
  74. package/dist/components/card/types.d.ts +5 -1
  75. package/dist/components/checkbox/checkbox.d.ts +5 -2
  76. package/dist/components/checkbox/index.d.ts +3 -2
  77. package/dist/components/checkbox/index.js +2 -2
  78. package/dist/components/checkbox/types.d.ts +7 -2
  79. package/dist/components/checkbox/useCheckbox.d.ts +4 -2
  80. package/dist/components/collapse/collapse.d.ts +2 -2
  81. package/dist/components/collapse/index.d.ts +4 -3
  82. package/dist/components/collapse/index.js +2 -2
  83. package/dist/components/collapse/types.d.ts +9 -2
  84. package/dist/components/collapse/useCollapse.d.ts +1 -1
  85. package/dist/components/color-input/color-input.d.ts +1 -1
  86. package/dist/components/color-input/index.d.ts +3 -2
  87. package/dist/components/color-input/index.js +2 -2
  88. package/dist/components/color-input/types.d.ts +8 -4
  89. package/dist/components/color-input/useColorInput.d.ts +5 -5
  90. package/dist/components/color-input/useColorInputEyeDropper.d.ts +1 -1
  91. package/dist/components/color-input/useColorInputPopover.d.ts +2 -2
  92. package/dist/components/color-input/useColorInputValue.d.ts +1 -1
  93. package/dist/components/color-picker/color-picker-saturation.d.ts +1 -1
  94. package/dist/components/color-picker/color-picker-slider.d.ts +1 -1
  95. package/dist/components/color-picker/color-picker-utils.d.ts +1 -1
  96. package/dist/components/color-picker/color-picker.d.ts +1 -1
  97. package/dist/components/color-picker/index.d.ts +3 -3
  98. package/dist/components/color-picker/index.js +2 -2
  99. package/dist/components/color-picker/types.d.ts +13 -1
  100. package/dist/components/color-picker/useColorPickerDrag.d.ts +7 -2
  101. package/dist/components/color-picker/useColorPickerSwatches.d.ts +1 -1
  102. package/dist/components/color-picker/useColorPickerValue.d.ts +2 -2
  103. package/dist/components/color-swatch/color-swatch.d.ts +1 -1
  104. package/dist/components/color-swatch/index.d.ts +3 -2
  105. package/dist/components/color-swatch/index.js +2 -1
  106. package/dist/components/color-swatch/types.d.ts +4 -1
  107. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +15 -6
  108. package/dist/components/dropdown-menu/dropdown-menu-primitives.d.ts +724 -0
  109. package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +1 -1
  110. package/dist/components/dropdown-menu/dropdown-menu.d.ts +3 -3
  111. package/dist/components/dropdown-menu/index.d.ts +55 -3
  112. package/dist/components/dropdown-menu/index.js +2 -2
  113. package/dist/components/dropdown-menu/types.d.ts +142 -6
  114. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +21 -12
  115. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +6 -4
  116. package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +4 -3
  117. package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +2 -2
  118. package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +5 -5
  119. package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +3 -3
  120. package/dist/components/dropdown-menu/useDropdownMenuPortalPosition.d.ts +19 -0
  121. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +25 -5
  122. package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +3 -3
  123. package/dist/components/field/field.d.ts +2 -2
  124. package/dist/components/field/index.d.ts +3 -2
  125. package/dist/components/field/index.js +2 -2
  126. package/dist/components/field/types.d.ts +4 -1
  127. package/dist/components/field/useField.d.ts +1 -1
  128. package/dist/components/floating/index.d.ts +1 -0
  129. package/dist/components/floating/index.js +0 -0
  130. package/dist/components/floating/types.d.ts +31 -0
  131. package/dist/components/floating/useFloatingPosition.d.ts +38 -0
  132. package/dist/components/focus-trap/focus-trap.d.ts +31 -0
  133. package/dist/components/focus-trap/index.d.ts +4 -0
  134. package/dist/components/focus-trap/index.js +3 -0
  135. package/dist/components/focus-trap/types.d.ts +41 -0
  136. package/dist/components/focus-trap/useFocusTrap.d.ts +2 -0
  137. package/dist/components/icon-button/icon-button.d.ts +1 -1
  138. package/dist/components/icon-button/index.d.ts +3 -2
  139. package/dist/components/icon-button/index.js +2 -1
  140. package/dist/components/icon-button/types.d.ts +5 -2
  141. package/dist/components/input/index.d.ts +3 -2
  142. package/dist/components/input/index.js +2 -1
  143. package/dist/components/input/input.d.ts +1 -1
  144. package/dist/components/input/types.d.ts +4 -1
  145. package/dist/components/input/useInput.d.ts +2 -2
  146. package/dist/components/modal/index.d.ts +3 -2
  147. package/dist/components/modal/index.js +2 -2
  148. package/dist/components/modal/modal.d.ts +1 -1
  149. package/dist/components/modal/types.d.ts +9 -2
  150. package/dist/components/modal/useModal.d.ts +1 -1
  151. package/dist/components/number-input/index.d.ts +3 -2
  152. package/dist/components/number-input/index.js +2 -2
  153. package/dist/components/number-input/number-input.d.ts +1 -1
  154. package/dist/components/number-input/types.d.ts +5 -2
  155. package/dist/components/number-input/useNumberInput.d.ts +2 -2
  156. package/dist/components/overlay/index.d.ts +3 -2
  157. package/dist/components/overlay/index.js +2 -1
  158. package/dist/components/overlay/overlay.d.ts +1 -1
  159. package/dist/components/overlay/types.d.ts +4 -1
  160. package/dist/components/overlay/useOverlay.d.ts +1 -1
  161. package/dist/components/popover/index.d.ts +3 -3
  162. package/dist/components/popover/index.js +2 -2
  163. package/dist/components/popover/popover.d.ts +2 -2
  164. package/dist/components/popover/types.d.ts +21 -11
  165. package/dist/components/popover/usePopover.d.ts +11 -2
  166. package/dist/components/progress/index.d.ts +3 -3
  167. package/dist/components/progress/index.js +2 -2
  168. package/dist/components/progress/progress.d.ts +1 -1
  169. package/dist/components/progress/types.d.ts +5 -2
  170. package/dist/components/progress/useProgress.d.ts +2 -2
  171. package/dist/components/radio/index.d.ts +4 -3
  172. package/dist/components/radio/index.js +2 -2
  173. package/dist/components/radio/radio-group.d.ts +1 -1
  174. package/dist/components/radio/radio.d.ts +9 -4
  175. package/dist/components/radio/types.d.ts +21 -4
  176. package/dist/components/radio/useRadio.d.ts +10 -5
  177. package/dist/components/select/index.d.ts +3 -2
  178. package/dist/components/select/index.js +2 -2
  179. package/dist/components/select/select.d.ts +1 -1
  180. package/dist/components/select/types.d.ts +4 -1
  181. package/dist/components/select/useSelect.d.ts +4 -3
  182. package/dist/components/slider/index.d.ts +4 -4
  183. package/dist/components/slider/index.js +2 -2
  184. package/dist/components/slider/range-slider-tooltip.d.ts +37 -0
  185. package/dist/components/slider/range-slider.d.ts +8 -13
  186. package/dist/components/slider/slider.d.ts +5 -2
  187. package/dist/components/slider/sliderCore.d.ts +35 -0
  188. package/dist/components/slider/types.d.ts +14 -7
  189. package/dist/components/slider/useRangeSlider.d.ts +5 -7
  190. package/dist/components/slider/useRangeSliderPointer.d.ts +19 -0
  191. package/dist/components/slider/useRangeSliderTooltipCollision.d.ts +31 -2
  192. package/dist/components/slider/useRangeSliderTooltipState.d.ts +23 -0
  193. package/dist/components/slider/useSlider.d.ts +11 -15
  194. package/dist/components/switch/index.d.ts +3 -2
  195. package/dist/components/switch/index.js +2 -2
  196. package/dist/components/switch/switch.d.ts +5 -2
  197. package/dist/components/switch/types.d.ts +7 -2
  198. package/dist/components/switch/useSwitch.d.ts +4 -2
  199. package/dist/components/tabs/index.d.ts +7 -6
  200. package/dist/components/tabs/index.js +2 -2
  201. package/dist/components/tabs/tabs-content.d.ts +2 -2
  202. package/dist/components/tabs/tabs-list.d.ts +4 -4
  203. package/dist/components/tabs/tabs-trigger.d.ts +5 -5
  204. package/dist/components/tabs/tabs.d.ts +5 -5
  205. package/dist/components/tabs/types.d.ts +13 -4
  206. package/dist/components/tabs/useTabs.d.ts +1 -1
  207. package/dist/components/teleport-provider/index.d.ts +2 -0
  208. package/dist/components/teleport-provider/index.js +2 -0
  209. package/dist/components/teleport-provider/teleport-provider.d.ts +21 -0
  210. package/dist/components/teleport-provider/types.d.ts +4 -0
  211. package/dist/components/teleport-provider/useTeleportTarget.d.ts +5 -0
  212. package/dist/components/textarea/index.d.ts +3 -2
  213. package/dist/components/textarea/index.js +2 -2
  214. package/dist/components/textarea/textarea.d.ts +5 -2
  215. package/dist/components/textarea/types.d.ts +6 -1
  216. package/dist/components/textarea/useTextarea.d.ts +3 -2
  217. package/dist/components/toast/defaults.d.ts +7 -0
  218. package/dist/components/toast/index.d.ts +7 -0
  219. package/dist/components/toast/index.js +2 -0
  220. package/dist/components/toast/toast-provider.d.ts +21 -0
  221. package/dist/components/toast/toast-viewport.d.ts +34 -0
  222. package/dist/components/toast/toast.d.ts +31 -0
  223. package/dist/components/toast/types.d.ts +110 -0
  224. package/dist/components/toast/useToast.d.ts +4 -0
  225. package/dist/components/toast/useToastColor.d.ts +3 -0
  226. package/dist/components/toast/useToastState.d.ts +2 -0
  227. package/dist/components/tooltip/index.d.ts +3 -2
  228. package/dist/components/tooltip/index.js +2 -1
  229. package/dist/components/tooltip/tooltip.d.ts +2 -2
  230. package/dist/components/tooltip/types.d.ts +14 -13
  231. package/dist/components/tooltip/useTooltip.d.ts +15 -3
  232. package/dist/dropdown-menu.css +191 -107
  233. package/dist/dropdown-menu.js +1729 -107
  234. package/dist/field.css +41 -39
  235. package/dist/field.js +40 -16
  236. package/dist/focus-trap.js +80 -0
  237. package/dist/icon-button.css +193 -189
  238. package/dist/icon-button.js +23 -18
  239. package/dist/icon-button2.js +8 -0
  240. package/dist/index.d.ts +35 -30
  241. package/dist/index.js +36 -31
  242. package/dist/input.css +122 -120
  243. package/dist/input.js +47 -34
  244. package/dist/input2.js +9 -0
  245. package/dist/legacy-unlayered.css +5461 -0
  246. package/dist/modal.css +129 -127
  247. package/dist/modal.js +160 -200
  248. package/dist/number-input.css +87 -85
  249. package/dist/number-input.js +61 -17
  250. package/dist/overlay.css +26 -24
  251. package/dist/overlay.js +17 -9
  252. package/dist/overlay2.js +4 -0
  253. package/dist/popover.css +140 -107
  254. package/dist/popover.js +295 -189
  255. package/dist/popover2.js +6 -1
  256. package/dist/progress.css +101 -99
  257. package/dist/progress.js +50 -28
  258. package/dist/radio.css +114 -105
  259. package/dist/radio.js +154 -56
  260. package/dist/select.css +244 -242
  261. package/dist/select.js +92 -47
  262. package/dist/slider.css +1109 -904
  263. package/dist/slider.js +1118 -923
  264. package/dist/styles-api.d.ts +22 -0
  265. package/dist/styles-api.js +49 -0
  266. package/dist/switch.css +120 -108
  267. package/dist/switch.js +89 -33
  268. package/dist/tabs.css +286 -278
  269. package/dist/tabs.js +60 -21
  270. package/dist/teleport-provider.js +15 -0
  271. package/dist/textarea.css +132 -130
  272. package/dist/textarea.js +77 -29
  273. package/dist/toast.css +236 -0
  274. package/dist/toast.js +739 -0
  275. package/dist/tooltip.css +137 -107
  276. package/dist/tooltip.js +182 -223
  277. package/dist/tooltip2.js +8 -0
  278. package/dist/useClickOutside.js +1 -1
  279. package/dist/useFloatingPosition.js +1284 -0
  280. package/dist/useFocusTrap.js +130 -0
  281. package/dist/useTeleportTarget.js +29 -0
  282. package/dist/utils/componentColors.d.ts +60 -0
  283. package/docs/public-styles-api.md +133 -0
  284. package/docs/public-tokens.md +545 -0
  285. package/package.json +44 -12
  286. package/src/styles/_tokens.scss +33 -28
  287. package/src/styles/_utilities.scss +11 -9
  288. package/src/styles/styles-manifest.json +4125 -0
  289. package/dist/components/slider/useRangeSliderTooltipTransition.d.ts +0 -4
package/dist/tooltip.js CHANGED
@@ -1,8 +1,11 @@
1
1
  import './tooltip.css';
2
2
  import { t as bem } from "./bem.js";
3
+ import { n as useStylesApi, t as presence } from "./styles-api.js";
3
4
  import { i as getComponentVariantColorRoles } from "./componentColors.js";
4
5
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
- import { VaporTransition, applyVShow, computed, createComponent, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, extend, isRef, on, onBeforeUnmount, onMounted, ref, renderEffect, setAttr, setClass, setInsertionState, setProp, setStyle, setText, template, toDisplayString, unref, useId, useSlots, watch } from "vue";
6
+ import { n as useFloatingPosition, r as useFloatingTarget, t as isElementReference } from "./useFloatingPosition.js";
7
+ import { n as useTeleportTarget } from "./useTeleportTarget.js";
8
+ import { VaporTeleport, VaporTransition, applyVShow, computed, createComponent, createIf, createSlot, createTemplateRefSetter, defineVaporComponent, extend, onBeforeUnmount, ref, renderEffect, setAttr, setDynamicProps, setInsertionState, setStaticTemplateRef, setStyle, setText, template, toDisplayString, unref, useId, useSlots, watch } from "vue";
6
9
  //#region src/composables/useDelayedOpen.ts
7
10
  function readOption(value, fallback) {
8
11
  return typeof value === "function" ? value() ?? fallback : value ?? fallback;
@@ -54,30 +57,7 @@ function useDelayedOpen(options = {}) {
54
57
  }
55
58
  //#endregion
56
59
  //#region src/components/tooltip/useTooltip.ts
57
- function isHTMLElement(value) {
58
- return typeof HTMLElement !== "undefined" && value instanceof HTMLElement;
59
- }
60
- function getTargetPosition(rect, placement) {
61
- switch (placement) {
62
- case "right": return {
63
- x: rect.right,
64
- y: rect.top + rect.height / 2
65
- };
66
- case "bottom": return {
67
- x: rect.left + rect.width / 2,
68
- y: rect.bottom
69
- };
70
- case "left": return {
71
- x: rect.left,
72
- y: rect.top + rect.height / 2
73
- };
74
- default: return {
75
- x: rect.left + rect.width / 2,
76
- y: rect.top
77
- };
78
- }
79
- }
80
- function resolveOffsetStyle(offset) {
60
+ function resolveTooltipOffsetStyle(offset) {
81
61
  if (offset == null) return void 0;
82
62
  if (typeof offset === "number") return { "--_rp-tooltip-main-axis-offset": `${offset}px` };
83
63
  const style = {};
@@ -101,21 +81,19 @@ function resolveTooltipColorStyleWithContrast(color, autoContrast) {
101
81
  function useTooltip(props, emitOpenChange) {
102
82
  const slots = useSlots();
103
83
  const generatedId = useId();
104
- const targetElement = ref(null);
105
- const targetPosition = ref(null);
106
- let isMounted = false;
107
- let removeTargetListeners;
108
- let removePositionListeners;
109
- let describedTarget = null;
110
- let previousTargetDescribedby = null;
84
+ const rootRef = ref(null);
85
+ const contentRef = ref(null);
86
+ const arrowRef = ref(null);
111
87
  const tooltipId = computed(() => props.id ?? `${generatedId}-tooltip`);
112
88
  const placement = computed(() => props.placement ?? "top");
113
- const isTargetMode = computed(() => props.target != null && props.target !== "");
114
- const hasContent = computed(() => Boolean(props.content || slots.content));
115
89
  const isDecorative = computed(() => Boolean(props.decorative));
90
+ const hasContent = computed(() => Boolean(props.content || slots.content));
116
91
  const isDisabled = computed(() => Boolean(props.disabled || !hasContent.value));
117
92
  const shouldRenderContent = computed(() => !isDisabled.value);
118
93
  const shouldDescribeContent = computed(() => shouldRenderContent.value && !isDecorative.value);
94
+ const teleportTo = useTeleportTarget(() => props.teleportTo);
95
+ const { isExplicitTarget, reference, resolvedTarget } = useFloatingTarget(() => props.target, rootRef);
96
+ const targetElement = computed(() => isElementReference(resolvedTarget.value) ? resolvedTarget.value : null);
119
97
  const { isOpen, open, closeImmediate } = useDelayedOpen({
120
98
  open: () => props.open,
121
99
  openDelay: () => props.openDelay ?? 300,
@@ -123,28 +101,36 @@ function useTooltip(props, emitOpenChange) {
123
101
  onOpenChange: emitOpenChange
124
102
  });
125
103
  const isVisible = computed(() => isOpen.value && !isDisabled.value);
104
+ const floating = useFloatingPosition({
105
+ reference,
106
+ floating: contentRef,
107
+ arrow: arrowRef,
108
+ open: isVisible,
109
+ placement: () => placement.value,
110
+ strategy: () => props.strategy ?? "absolute",
111
+ offset: () => props.offset,
112
+ flip: () => props.flip !== false,
113
+ shift: () => props.shift !== false,
114
+ collisionPadding: () => props.collisionPadding ?? 8,
115
+ arrowEnabled: () => Boolean(props.arrow),
116
+ restartKey: () => teleportTo.value
117
+ });
118
+ const placementSide = computed(() => floating.actualPlacement.value.split("-")[0]);
126
119
  const rootClass = computed(() => bem("rp-tooltip", {
127
- [`placement-${placement.value}`]: true,
120
+ [`placement-${floating.actualPlacement.value}`]: true,
128
121
  arrow: props.arrow,
129
- target: isTargetMode.value,
122
+ target: isExplicitTarget.value,
130
123
  open: isVisible.value,
131
124
  disabled: props.disabled
132
125
  }));
133
126
  const triggerProps = computed(() => ({ "aria-describedby": shouldDescribeContent.value ? tooltipId.value : void 0 }));
134
127
  const contentRole = computed(() => isDecorative.value ? void 0 : "tooltip");
135
128
  const contentAriaHidden = computed(() => isDecorative.value ? "true" : void 0);
136
- const contentStyle = computed(() => {
137
- const style = {
138
- ...resolveOffsetStyle(props.offset),
139
- ...resolveTooltipColorStyleWithContrast(props.color, props.autoContrast)
140
- };
141
- if (!isTargetMode.value || !targetPosition.value) return Object.keys(style).length > 0 ? style : void 0;
142
- return {
143
- ...style,
144
- "--_rp-tooltip-target-x": `${targetPosition.value.x}px`,
145
- "--_rp-tooltip-target-y": `${targetPosition.value.y}px`
146
- };
147
- });
129
+ const contentStyle = computed(() => ({
130
+ ...floating.floatingStyle.value,
131
+ ...resolveTooltipOffsetStyle(props.offset),
132
+ ...resolveTooltipColorStyleWithContrast(props.color, props.autoContrast)
133
+ }));
148
134
  function openTooltip() {
149
135
  open();
150
136
  }
@@ -154,150 +140,59 @@ function useTooltip(props, emitOpenChange) {
154
140
  function onKeydown(event) {
155
141
  if (event.key === "Escape") closeTooltip();
156
142
  }
157
- function readTarget() {
158
- return isRef(props.target) ? props.target.value : props.target;
159
- }
160
- function resolveTarget() {
161
- const target = readTarget();
162
- if (!target) return null;
163
- if (typeof target === "string") {
164
- if (typeof document === "undefined") return null;
165
- try {
166
- const element = document.querySelector(target);
167
- return isHTMLElement(element) ? element : null;
168
- } catch {
169
- return null;
170
- }
171
- }
172
- return isHTMLElement(target) ? target : null;
173
- }
174
- function restoreTargetDescription() {
175
- if (!describedTarget) return;
176
- if (previousTargetDescribedby) describedTarget.setAttribute("aria-describedby", previousTargetDescribedby);
177
- else describedTarget.removeAttribute("aria-describedby");
178
- describedTarget = null;
179
- previousTargetDescribedby = null;
180
- }
181
- function syncTargetDescription() {
182
- restoreTargetDescription();
183
- if (!isTargetMode.value || !shouldDescribeContent.value || !targetElement.value) return;
184
- describedTarget = targetElement.value;
185
- previousTargetDescribedby = describedTarget.getAttribute("aria-describedby");
186
- const ids = (previousTargetDescribedby ?? "").split(/\s+/).filter(Boolean);
187
- if (!ids.includes(tooltipId.value)) ids.push(tooltipId.value);
188
- describedTarget.setAttribute("aria-describedby", ids.join(" "));
189
- }
190
- function updateTargetPosition() {
191
- if (!isTargetMode.value || !targetElement.value) {
192
- targetPosition.value = null;
193
- return;
194
- }
195
- targetPosition.value = getTargetPosition(targetElement.value.getBoundingClientRect(), placement.value);
196
- }
197
- function onTargetOpen() {
198
- updateTargetPosition();
199
- openTooltip();
200
- }
201
- function bindTargetListeners(element) {
202
- removeTargetListeners?.();
203
- element.addEventListener("mouseenter", onTargetOpen);
204
- element.addEventListener("mouseleave", closeTooltip);
205
- element.addEventListener("focusin", onTargetOpen);
206
- element.addEventListener("focusout", closeTooltip);
207
- element.addEventListener("keydown", onKeydown);
208
- removeTargetListeners = () => {
209
- element.removeEventListener("mouseenter", onTargetOpen);
210
- element.removeEventListener("mouseleave", closeTooltip);
211
- element.removeEventListener("focusin", onTargetOpen);
212
- element.removeEventListener("focusout", closeTooltip);
213
- element.removeEventListener("keydown", onKeydown);
214
- removeTargetListeners = void 0;
215
- };
216
- }
217
- function removeViewportListeners() {
218
- removePositionListeners?.();
219
- removePositionListeners = void 0;
220
- }
221
- function bindViewportListeners() {
222
- if (typeof window === "undefined" || removePositionListeners) return;
223
- window.addEventListener("resize", updateTargetPosition);
224
- window.addEventListener("scroll", updateTargetPosition, true);
225
- removePositionListeners = () => {
226
- window.removeEventListener("resize", updateTargetPosition);
227
- window.removeEventListener("scroll", updateTargetPosition, true);
228
- };
229
- }
230
- function syncTarget() {
231
- if (!isTargetMode.value) {
232
- removeTargetListeners?.();
233
- removeViewportListeners();
234
- restoreTargetDescription();
235
- targetElement.value = null;
236
- targetPosition.value = null;
237
- return;
238
- }
239
- const nextTarget = resolveTarget();
240
- if (targetElement.value === nextTarget) {
241
- syncTargetDescription();
242
- updateTargetPosition();
243
- return;
244
- }
245
- removeTargetListeners?.();
246
- removeViewportListeners();
247
- restoreTargetDescription();
248
- targetElement.value = nextTarget;
249
- if (!nextTarget) {
250
- targetPosition.value = null;
251
- return;
252
- }
253
- bindTargetListeners(nextTarget);
254
- syncTargetDescription();
255
- updateTargetPosition();
256
- }
257
143
  watch(isDisabled, (disabled) => {
258
144
  if (disabled) closeTooltip();
259
145
  });
260
- watch(() => readTarget(), () => {
261
- if (isMounted) syncTarget();
262
- }, { flush: "post" });
146
+ watch([isExplicitTarget, targetElement], ([explicit, target], _previous, onCleanup) => {
147
+ if (!explicit || !target) return;
148
+ target.addEventListener("mouseenter", openTooltip);
149
+ target.addEventListener("mouseleave", closeTooltip);
150
+ target.addEventListener("focusin", openTooltip);
151
+ target.addEventListener("focusout", closeTooltip);
152
+ target.addEventListener("keydown", onKeydown);
153
+ onCleanup(() => {
154
+ target.removeEventListener("mouseenter", openTooltip);
155
+ target.removeEventListener("mouseleave", closeTooltip);
156
+ target.removeEventListener("focusin", openTooltip);
157
+ target.removeEventListener("focusout", closeTooltip);
158
+ target.removeEventListener("keydown", onKeydown);
159
+ });
160
+ }, { flush: "sync" });
263
161
  watch([
264
- isTargetMode,
162
+ isExplicitTarget,
163
+ targetElement,
265
164
  shouldDescribeContent,
266
165
  tooltipId
267
- ], () => {
268
- if (isMounted) syncTargetDescription();
269
- });
270
- watch([placement, isVisible], () => {
271
- if (isMounted && isVisible.value) updateTargetPosition();
272
- });
273
- watch(isVisible, (visible) => {
274
- if (!isMounted || !isTargetMode.value) return;
275
- if (visible) {
276
- updateTargetPosition();
277
- bindViewportListeners();
278
- } else removeViewportListeners();
279
- });
280
- onMounted(() => {
281
- isMounted = true;
282
- syncTarget();
283
- });
284
- onBeforeUnmount(() => {
285
- isMounted = false;
286
- removeTargetListeners?.();
287
- removeViewportListeners();
288
- restoreTargetDescription();
289
- });
166
+ ], ([explicit, target, shouldDescribe, id], _previous, onCleanup) => {
167
+ if (!explicit || !target || !shouldDescribe) return;
168
+ const previous = target.getAttribute("aria-describedby");
169
+ const ids = (previous ?? "").split(/\s+/).filter(Boolean);
170
+ if (!ids.includes(id)) ids.push(id);
171
+ target.setAttribute("aria-describedby", ids.join(" "));
172
+ onCleanup(() => {
173
+ if (previous == null) target.removeAttribute("aria-describedby");
174
+ else target.setAttribute("aria-describedby", previous);
175
+ });
176
+ }, { flush: "sync" });
290
177
  return {
178
+ rootRef,
179
+ contentRef,
180
+ arrowRef,
291
181
  tooltipId,
292
182
  isOpen,
183
+ isDisabled,
293
184
  isVisible,
294
- isTargetMode,
185
+ isTargetMode: isExplicitTarget,
295
186
  shouldRenderContent,
296
187
  rootClass,
297
188
  triggerProps,
298
189
  contentRole,
299
190
  contentAriaHidden,
300
191
  contentStyle,
192
+ actualPlacement: floating.actualPlacement,
193
+ placementSide,
194
+ arrowStyle: floating.arrowStyle,
195
+ teleportTo,
301
196
  openTooltip,
302
197
  closeTooltip,
303
198
  onKeydown
@@ -305,84 +200,148 @@ function useTooltip(props, emitOpenChange) {
305
200
  }
306
201
  //#endregion
307
202
  //#region src/components/tooltip/tooltip.vue?vue&type=script&setup=true&vapor=true&lang.ts
308
- var t0 = template(" ");
309
- var t1 = template("<span data-v-13c39164 class=rp-tooltip__content>");
310
- var t2 = template("<span data-v-13c39164>", 1);
311
- delegateEvents("focusin", "focusout", "keydown");
203
+ var t0 = template("<span data-v-38bfcb12 class=rp-tooltip__arrow aria-hidden=true>");
204
+ var t1 = template(" ");
205
+ var t2 = template("<span data-v-38bfcb12>");
206
+ var t3 = template("<span data-v-38bfcb12>", 1);
312
207
  //#endregion
313
208
  //#region src/components/tooltip/tooltip.vue
314
209
  var tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
315
210
  name: "RpTooltip",
211
+ inheritAttrs: false,
316
212
  __name: "tooltip",
317
213
  props: {
318
214
  id: {},
319
215
  content: { default: "" },
320
- target: {},
321
- placement: { default: "top" },
322
216
  color: {},
323
217
  autoContrast: { type: Boolean },
324
- offset: {},
325
218
  open: {
326
219
  type: Boolean,
327
220
  default: void 0
328
221
  },
329
222
  openDelay: { default: 300 },
330
- arrow: {
223
+ disabled: {
331
224
  type: Boolean,
332
225
  default: false
333
226
  },
334
- disabled: {
227
+ decorative: {
335
228
  type: Boolean,
336
229
  default: false
337
230
  },
338
- decorative: {
231
+ target: {},
232
+ placement: { default: "top" },
233
+ strategy: { default: "absolute" },
234
+ offset: {},
235
+ flip: {
236
+ type: Boolean,
237
+ default: true
238
+ },
239
+ shift: {
240
+ type: Boolean,
241
+ default: true
242
+ },
243
+ collisionPadding: { default: 8 },
244
+ arrow: {
339
245
  type: Boolean,
340
246
  default: false
341
- }
247
+ },
248
+ teleport: {
249
+ type: Boolean,
250
+ default: true
251
+ },
252
+ teleportTo: {},
253
+ classNames: {},
254
+ styles: {}
342
255
  },
343
256
  emits: ["update:open"],
344
257
  setup(__props, { emit: __emit }) {
345
258
  const props = __props;
346
259
  const emit = __emit;
347
- const { tooltipId, isVisible, isTargetMode, shouldRenderContent, rootClass, triggerProps, contentRole, contentAriaHidden, contentStyle, openTooltip, closeTooltip, onKeydown } = useTooltip(props, (open) => {
260
+ const { rootRef, contentRef, arrowRef, tooltipId, isDisabled, isVisible, isTargetMode, shouldRenderContent, rootClass, triggerProps, contentRole, contentAriaHidden, contentStyle, actualPlacement, placementSide, arrowStyle, teleportTo, openTooltip, closeTooltip, onKeydown } = useTooltip(props, (open) => {
348
261
  emit("update:open", open);
349
262
  });
350
- const n10 = t2();
351
- renderEffect(() => setClass(n10, unref(rootClass)));
352
- setInsertionState(n10, null, 0);
263
+ const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
264
+ const state = computed(() => isVisible.value ? "open" : "closed");
265
+ const rootAttrs = computed(() => getRootAttrs({
266
+ class: rootClass.value,
267
+ "data-state": state.value,
268
+ "data-disabled": presence(isDisabled.value),
269
+ onMouseenter: openTooltip,
270
+ onMouseleave: closeTooltip,
271
+ onFocusin: openTooltip,
272
+ onFocusout: closeTooltip,
273
+ onKeydown
274
+ }));
275
+ const publicTriggerProps = computed(() => {
276
+ const partAttrs = getPartAttrs("trigger");
277
+ return {
278
+ ...triggerProps.value,
279
+ ...props.classNames?.trigger !== void 0 ? { class: partAttrs.class } : {},
280
+ ...props.styles?.trigger !== void 0 ? { style: partAttrs.style } : {},
281
+ "data-state": state.value,
282
+ "data-disabled": presence(isDisabled.value)
283
+ };
284
+ });
285
+ const contentAttrs = computed(() => ({
286
+ ...getPartAttrs("content", {
287
+ class: "rp-tooltip__content",
288
+ style: contentStyle.value
289
+ }),
290
+ "data-state": state.value,
291
+ "data-placement": actualPlacement.value
292
+ }));
293
+ const _setTemplateRef = createTemplateRefSetter();
294
+ const n14 = t3();
295
+ renderEffect(() => setDynamicProps(n14, [rootAttrs.value]));
296
+ setInsertionState(n14, null, 0);
353
297
  createIf(() => !unref(isTargetMode), () => {
354
- return createSlot("default", { triggerProps: () => unref(triggerProps) }, null, 1);
298
+ return createSlot("default", { triggerProps: () => publicTriggerProps.value }, null, 1);
299
+ });
300
+ setInsertionState(n14, null, 1);
301
+ createComponent(VaporTeleport, {
302
+ to: () => unref(teleportTo),
303
+ disabled: () => !__props.teleport
304
+ }, () => {
305
+ return createComponent(VaporTransition, {
306
+ name: "rp-tooltip-content",
307
+ persisted: ""
308
+ }, extend(() => {
309
+ return createIf(() => unref(shouldRenderContent), () => {
310
+ const n11 = t2();
311
+ renderEffect(() => setDynamicProps(n11, [
312
+ { id: unref(tooltipId) },
313
+ contentAttrs.value,
314
+ {
315
+ role: unref(contentRole),
316
+ "aria-hidden": unref(contentAriaHidden),
317
+ "data-side": unref(placementSide)
318
+ }
319
+ ]));
320
+ setInsertionState(n11, null, 0);
321
+ createIf(() => __props.arrow, () => {
322
+ const n7 = t0();
323
+ _setTemplateRef(n7, arrowRef, null, "arrowRef");
324
+ renderEffect(() => {
325
+ setAttr(n7, "data-side", unref(placementSide));
326
+ setStyle(n7, unref(arrowStyle));
327
+ });
328
+ return n7;
329
+ });
330
+ setInsertionState(n11, null, 1);
331
+ createSlot("content", null, () => {
332
+ const n10 = t1();
333
+ renderEffect(() => setText(n10, toDisplayString(__props.content)));
334
+ return n10;
335
+ }, 1);
336
+ applyVShow(n11, () => unref(isVisible));
337
+ _setTemplateRef(n11, contentRef, null, "contentRef");
338
+ return n11;
339
+ }, null, 129);
340
+ }, { _: 8 }));
355
341
  });
356
- setInsertionState(n10, null, 1);
357
- createComponent(VaporTransition, {
358
- name: "rp-tooltip-content",
359
- persisted: ""
360
- }, extend(() => {
361
- return createIf(() => unref(shouldRenderContent), () => {
362
- const n8 = t1();
363
- renderEffect(() => {
364
- setProp(n8, "id", unref(tooltipId));
365
- setProp(n8, "role", unref(contentRole));
366
- setAttr(n8, "aria-hidden", unref(contentAriaHidden));
367
- setStyle(n8, unref(contentStyle));
368
- });
369
- setInsertionState(n8, null, 0);
370
- createSlot("content", null, () => {
371
- const n7 = t0();
372
- renderEffect(() => setText(n7, toDisplayString(__props.content)));
373
- return n7;
374
- }, 1);
375
- applyVShow(n8, () => unref(isVisible));
376
- return n8;
377
- }, null, 129);
378
- }, { _: 8 }));
379
- on(n10, "mouseenter", (e) => unref(openTooltip)(e));
380
- on(n10, "mouseleave", (e) => unref(closeTooltip)(e));
381
- n10.$evtfocusin = createInvoker((e) => unref(openTooltip)(e));
382
- n10.$evtfocusout = createInvoker((e) => unref(closeTooltip)(e));
383
- n10.$evtkeydown = createInvoker((e) => unref(onKeydown)(e));
384
- return n10;
342
+ setStaticTemplateRef(n14, rootRef, null, "rootRef");
343
+ return n14;
385
344
  }
386
- }), [["__scopeId", "data-v-13c39164"]]);
345
+ }), [["__scopeId", "data-v-38bfcb12"]]);
387
346
  //#endregion
388
- export { useDelayedOpen as n, tooltip_default as t };
347
+ export { useDelayedOpen as i, resolveTooltipColorStyleWithContrast as n, resolveTooltipOffsetStyle as r, tooltip_default as t };
@@ -0,0 +1,8 @@
1
+ //#region src/components/tooltip/types.ts
2
+ var tooltipParts = [
3
+ "root",
4
+ "trigger",
5
+ "content"
6
+ ];
7
+ //#endregion
8
+ export { tooltipParts as t };
@@ -4,7 +4,7 @@ function useClickOutside(target, active, callback) {
4
4
  let isListening = false;
5
5
  let stopWatch;
6
6
  function handler(e) {
7
- if (target.value && !target.value.contains(e.target)) callback();
7
+ if (!(Array.isArray(target) ? target : [target]).some((current) => current.value?.contains(e.target))) callback(e);
8
8
  }
9
9
  function setListening(value) {
10
10
  if (typeof document === "undefined" || value === isListening) return;