ropav 0.1.5 → 0.1.7

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 (235) hide show
  1. package/README.md +10 -0
  2. package/dist/accordion.css +17 -17
  3. package/dist/accordion.js +125 -154
  4. package/dist/alert.css +18 -18
  5. package/dist/alert.js +20 -20
  6. package/dist/aria.js +14 -0
  7. package/dist/aspect-ratio.js +1 -1
  8. package/dist/attributes.js +9 -0
  9. package/dist/attributes2.js +29 -0
  10. package/dist/avatar.css +19 -19
  11. package/dist/avatar.js +10 -18
  12. package/dist/badge.css +16 -16
  13. package/dist/badge.js +6 -6
  14. package/dist/base.css +18 -13
  15. package/dist/button-group.js +1 -1
  16. package/dist/button-link.js +13 -14
  17. package/dist/button.css +32 -27
  18. package/dist/button.js +13 -14
  19. package/dist/{useButtonColor.js → button.scss_vue_type_style_index_0_src_true_lang.js} +3 -2
  20. package/dist/card.js +1 -1
  21. package/dist/checkbox.css +32 -32
  22. package/dist/checkbox.js +23 -29
  23. package/dist/collapse.css +6 -6
  24. package/dist/collapse.js +8 -7
  25. package/dist/collectionNavigation.js +2 -99
  26. package/dist/color-input.css +19 -19
  27. package/dist/color-input.js +15 -14
  28. package/dist/color-picker.css +40 -40
  29. package/dist/color-picker.js +222 -202
  30. package/dist/color-picker2.js +1 -9
  31. package/dist/color-swatch.css +4 -4
  32. package/dist/color-swatch.js +7 -9
  33. package/dist/color.js +5 -10
  34. package/dist/componentColors.js +165 -84
  35. package/dist/componentRef.js +26 -0
  36. package/dist/components/accordion/accordionContext.d.ts +3 -0
  37. package/dist/components/accordion/accordionModel.d.ts +14 -0
  38. package/dist/components/accordion/index.d.ts +2 -1
  39. package/dist/components/accordion/index.js +1 -1
  40. package/dist/components/accordion/types.d.ts +1 -2
  41. package/dist/components/accordion/useAccordion.d.ts +2 -2
  42. package/dist/components/accordion/useAccordionItem.d.ts +2 -0
  43. package/dist/components/checkbox/useCheckbox.d.ts +2 -3
  44. package/dist/components/color-input/color-input.d.ts +2 -2
  45. package/dist/components/color-input/useColorInput.d.ts +1 -1
  46. package/dist/components/color-picker/index.js +2 -2
  47. package/dist/components/color-picker/types.d.ts +2 -2
  48. package/dist/components/color-picker/useColorPickerSaturation.d.ts +22 -0
  49. package/dist/components/color-picker/useColorPickerSlider.d.ts +20 -0
  50. package/dist/components/color-picker/useColorPickerValue.d.ts +1 -1
  51. package/dist/components/dialog/{dialog-core.d.ts → dialogContext.d.ts} +2 -6
  52. package/dist/components/dialog/useDialogContentInteractions.d.ts +18 -0
  53. package/dist/components/dialog/useDialogRootState.d.ts +19 -0
  54. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +2 -2
  55. package/dist/components/dropdown-menu/dropdown-menu-item-row.d.ts +1 -1
  56. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +1 -1
  57. package/dist/components/dropdown-menu/dropdown-menu-model.d.ts +8 -0
  58. package/dist/components/dropdown-menu/dropdown-menu-root.d.ts +2 -2
  59. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +2 -2
  60. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +1 -1
  61. package/dist/components/dropdown-menu/dropdown-menu-sub.d.ts +1 -1
  62. package/dist/components/dropdown-menu/dropdown-menu.d.ts +3 -3
  63. package/dist/components/dropdown-menu/{dropdown-menu-primitive-core.d.ts → dropdownMenuContext.d.ts} +17 -19
  64. package/dist/components/dropdown-menu/dropdownMenuDataModel.d.ts +20 -0
  65. package/dist/components/dropdown-menu/dropdownMenuInteraction.d.ts +3 -0
  66. package/dist/components/dropdown-menu/dropdownMenuInteractionNavigation.d.ts +24 -0
  67. package/dist/components/dropdown-menu/dropdownMenuInteractionRegistry.d.ts +42 -0
  68. package/dist/components/dropdown-menu/dropdownMenuInteractionTypes.d.ts +85 -0
  69. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +11 -11
  70. package/dist/components/dropdown-menu/useDropdownMenuContextTrigger.d.ts +9 -0
  71. package/dist/components/dropdown-menu/useDropdownMenuDataController.d.ts +34 -0
  72. package/dist/components/dropdown-menu/useDropdownMenuDataRegistration.d.ts +22 -0
  73. package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +6 -5
  74. package/dist/components/dropdown-menu/useDropdownMenuInteractionDismissal.d.ts +17 -0
  75. package/dist/components/dropdown-menu/useDropdownMenuInteractionKeyboard.d.ts +19 -0
  76. package/dist/components/dropdown-menu/useDropdownMenuPortalPosition.d.ts +0 -1
  77. package/dist/components/dropdown-menu/useDropdownMenuPresentation.d.ts +29 -0
  78. package/dist/components/dropdown-menu/useDropdownMenuPrimitiveContent.d.ts +2 -2
  79. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +1 -1
  80. package/dist/components/dropdown-menu/useDropdownMenuTargetBindings.d.ts +19 -0
  81. package/dist/components/floating/hoverDisclosureInteractionModel.d.ts +42 -0
  82. package/dist/components/floating/index.js +1 -1
  83. package/dist/components/floating/useFloatingPosition.d.ts +0 -1
  84. package/dist/components/floating/useHoverDisclosureInteractions.d.ts +32 -0
  85. package/dist/components/floating/useHoverDisclosureOpenState.d.ts +25 -0
  86. package/dist/components/floating/useHoverDisclosureTargetBinding.d.ts +27 -0
  87. package/dist/components/input/useInput.d.ts +1 -1
  88. package/dist/components/number-input/numberInputModel.d.ts +15 -0
  89. package/dist/components/number-input/useNumberInput.d.ts +4 -18
  90. package/dist/components/pagination/index.d.ts +1 -1
  91. package/dist/components/pagination/index.js +1 -1
  92. package/dist/components/pagination/paginationModel.d.ts +4 -0
  93. package/dist/components/pagination/types.d.ts +15 -0
  94. package/dist/components/pagination/usePagination.d.ts +3 -19
  95. package/dist/components/popover/usePopoverBindings.d.ts +16 -0
  96. package/dist/components/progress/progressModel.d.ts +8 -0
  97. package/dist/components/progress/useProgress.d.ts +1 -7
  98. package/dist/components/radio/useRadio.d.ts +3 -4
  99. package/dist/components/scroll-area/scroll-area.d.ts +1 -1
  100. package/dist/components/scroll-area/scrollAreaModel.d.ts +64 -0
  101. package/dist/components/scroll-area/types.d.ts +4 -0
  102. package/dist/components/scroll-area/useScrollArea.d.ts +70 -52
  103. package/dist/components/scroll-area/{useScrollAreaPresentation.d.ts → useScrollAreaAttributes.d.ts} +37 -14
  104. package/dist/components/scroll-area/useScrollAreaDerivedState.d.ts +8 -0
  105. package/dist/components/scroll-area/useScrollAreaMeasurement.d.ts +35 -0
  106. package/dist/components/scroll-area/useScrollAreaPointer.d.ts +10 -8
  107. package/dist/components/scroll-area/useScrollAreaVisibility.d.ts +15 -20
  108. package/dist/components/select/useSelect.d.ts +2 -1
  109. package/dist/components/select/useSelectNativeValue.d.ts +1 -7
  110. package/dist/components/slider/rangeSliderModel.d.ts +41 -0
  111. package/dist/components/slider/{sliderCore.d.ts → sliderModel.d.ts} +2 -2
  112. package/dist/components/slider/useRangeSlider.d.ts +9 -17
  113. package/dist/components/slider/useRangeSliderValueState.d.ts +40 -0
  114. package/dist/components/slider/useSlider.d.ts +8 -14
  115. package/dist/components/slider/useSliderPointerPreview.d.ts +22 -0
  116. package/dist/components/slider/useSliderTooltipState.d.ts +40 -0
  117. package/dist/components/slider/useSliderValueState.d.ts +33 -0
  118. package/dist/components/switch/useSwitch.d.ts +1 -1
  119. package/dist/components/teleport-provider/index.js +1 -1
  120. package/dist/components/teleport-provider/useTeleportTarget.d.ts +1 -2
  121. package/dist/components/textarea/useTextarea.d.ts +1 -1
  122. package/dist/components/toast/useToastLifecycle.d.ts +19 -0
  123. package/dist/components/tooltip/useTooltip.d.ts +1 -2
  124. package/dist/composables/index.d.ts +2 -0
  125. package/dist/composables/index.js +2 -0
  126. package/dist/composables/useControllableValue.d.ts +14 -0
  127. package/dist/css.js +12 -0
  128. package/dist/dialog.js +227 -216
  129. package/dist/dropdown-menu.js +1493 -1118
  130. package/dist/events.js +59 -0
  131. package/dist/field.css +8 -8
  132. package/dist/field.js +13 -25
  133. package/dist/floating.js +553 -312
  134. package/dist/floatingOffset.js +11 -0
  135. package/dist/focus-trap.js +7 -5
  136. package/dist/focusNavigation.js +37 -0
  137. package/dist/icon-button.css +12 -173
  138. package/dist/icon-button.js +8 -7
  139. package/dist/index.d.ts +5 -4
  140. package/dist/index.js +13 -11
  141. package/dist/input.css +24 -24
  142. package/dist/input.js +20 -32
  143. package/dist/interactive.js +18 -0
  144. package/dist/modal.js +11 -7
  145. package/dist/number-input.css +18 -18
  146. package/dist/number-input.js +15 -13
  147. package/dist/number.js +22 -0
  148. package/dist/overlay.js +3 -2
  149. package/dist/pagination.css +28 -28
  150. package/dist/pagination.js +67 -65
  151. package/dist/pointer.js +9 -0
  152. package/dist/popover.css +34 -34
  153. package/dist/popover.js +93 -91
  154. package/dist/progress.css +29 -21
  155. package/dist/progress.js +25 -21
  156. package/dist/query.js +40 -0
  157. package/dist/radio.css +18 -18
  158. package/dist/radio.js +31 -37
  159. package/dist/rafScheduler.js +34 -0
  160. package/dist/scroll-area.css +35 -26
  161. package/dist/scroll-area.js +553 -500
  162. package/dist/select.css +45 -45
  163. package/dist/select.js +70 -56
  164. package/dist/slider.css +191 -191
  165. package/dist/slider.js +695 -628
  166. package/dist/styles-api.d.ts +0 -1
  167. package/dist/styles-api.js +1 -4
  168. package/dist/switch.css +17 -17
  169. package/dist/switch.js +15 -16
  170. package/dist/tabs.css +46 -46
  171. package/dist/tabs.js +51 -68
  172. package/dist/text.js +17 -0
  173. package/dist/textarea.css +26 -26
  174. package/dist/textarea.js +22 -33
  175. package/dist/toast.css +26 -26
  176. package/dist/toast.js +157 -129
  177. package/dist/tooltip.css +12 -12
  178. package/dist/tooltip.js +46 -47
  179. package/dist/useCollapse.js +19 -17
  180. package/dist/useControlState.js +4 -7
  181. package/dist/useControllableValue.js +8 -2
  182. package/dist/useFloatingPosition.js +122 -1128
  183. package/dist/useFormControl.js +3 -2
  184. package/dist/useOverlayZIndex.js +2 -6
  185. package/dist/useRequiredInject.js +1 -1
  186. package/dist/useTeleportTarget.js +3 -14
  187. package/dist/useTypeahead.js +94 -0
  188. package/dist/utils/aria.d.ts +3 -0
  189. package/dist/utils/attributes.d.ts +2 -0
  190. package/dist/utils/bem.d.ts +3 -0
  191. package/dist/utils/collectionNavigation.d.ts +2 -0
  192. package/dist/utils/color.d.ts +7 -0
  193. package/dist/{components/color-picker/color-picker-utils.d.ts → utils/colorPicker.d.ts} +5 -4
  194. package/dist/utils/componentColors.d.ts +7 -0
  195. package/dist/utils/css.d.ts +3 -0
  196. package/dist/utils/dom/ancestry.d.ts +7 -0
  197. package/dist/utils/dom/attributes.d.ts +16 -0
  198. package/dist/utils/dom/componentRef.d.ts +4 -0
  199. package/dist/utils/dom/events.d.ts +5 -0
  200. package/dist/utils/dom/focusNavigation.d.ts +7 -0
  201. package/dist/utils/dom/interactive.d.ts +2 -0
  202. package/dist/utils/dom/pointer.d.ts +2 -0
  203. package/dist/utils/dom/query.d.ts +4 -0
  204. package/dist/utils/dom/scroll.d.ts +23 -0
  205. package/dist/utils/floatingOffset.d.ts +10 -0
  206. package/dist/utils/geometry.d.ts +14 -0
  207. package/dist/utils/indexPath.d.ts +6 -0
  208. package/dist/utils/number.d.ts +4 -0
  209. package/dist/utils/rafScheduler.d.ts +4 -0
  210. package/dist/utils/text.d.ts +2 -0
  211. package/docs/code-architecture.md +118 -0
  212. package/docs/public-composables-api.md +52 -0
  213. package/docs/public-floating-api.md +6 -5
  214. package/package.json +54 -46
  215. package/src/styles/_mixins.scss +4 -0
  216. package/src/styles/_tokens.scss +12 -12
  217. package/src/styles/_variables.scss +1 -1
  218. package/dist/button-link.css +0 -167
  219. package/dist/components/dropdown-menu/dropdown-menu-outside.d.ts +0 -3
  220. package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +0 -21
  221. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +0 -37
  222. package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +0 -29
  223. package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +0 -52
  224. package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +0 -17
  225. package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +0 -18
  226. package/dist/components/scroll-area/scrollAreaCore.d.ts +0 -25
  227. package/dist/components/scroll-area/useScrollAreaControls.d.ts +0 -25
  228. package/dist/components/scroll-area/useScrollAreaMetrics.d.ts +0 -35
  229. /package/dist/components/alert/{useAlertColor.d.ts → alertColor.d.ts} +0 -0
  230. /package/dist/components/avatar/{useAvatarColor.d.ts → avatarColor.d.ts} +0 -0
  231. /package/dist/components/badge/{useBadgeColor.d.ts → badgeColor.d.ts} +0 -0
  232. /package/dist/components/button/{useButtonColor.d.ts → buttonColor.d.ts} +0 -0
  233. /package/dist/components/color-swatch/{useColorSwatchColor.d.ts → colorSwatchColor.d.ts} +0 -0
  234. /package/dist/components/toast/{useToastColor.d.ts → toastColor.d.ts} +0 -0
  235. /package/dist/{composables → internal/composables}/useOverlayLayer.d.ts +0 -0
package/dist/input.js CHANGED
@@ -1,24 +1,16 @@
1
1
  import './input.css';
2
+ import { t as useControllableValue } from "./useControllableValue.js";
3
+ import { t as useStylesApi } from "./styles-api.js";
4
+ import { n as toPresenceAttribute } from "./attributes.js";
2
5
  import { t as bem } from "./bem.js";
3
- import { n as useStylesApi, t as presence } from "./styles-api.js";
4
6
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
- import { t as useControllableValue } from "./useControllableValue.js";
6
7
  import { a as useTextFormControl, t as claimNestedFormControlOwner } from "./useFormControl.js";
8
+ import { o as splitCompatibilityAttributes, t as composeEventHandlers } from "./attributes2.js";
7
9
  import { t as useControlState } from "./useControlState.js";
10
+ import { t as isInteractiveElement } from "./interactive.js";
8
11
  import { child, computed, createIf, createSlot, defineVaporComponent, ref, renderEffect, setDynamicProps, setInsertionState, setStaticTemplateRef, template, unref } from "vue";
9
12
  //#region src/components/input/useInput.ts
10
- var INTERACTIVE_SELECTOR = [
11
- "button",
12
- "a[href]",
13
- `input:not(.rp-input__native)`,
14
- "select",
15
- "textarea",
16
- "[contenteditable=\"true\"]",
17
- "[tabindex]:not([tabindex=\"-1\"])"
18
- ].join(",");
19
- function isInteractiveElement(target) {
20
- return Boolean(target.closest(INTERACTIVE_SELECTOR));
21
- }
13
+ var NATIVE_INPUT_SELECTOR = ".rp-input__native";
22
14
  function useInput(props, emitUpdate) {
23
15
  const inputRef = ref(null);
24
16
  const control = useControlState(props);
@@ -35,8 +27,7 @@ function useInput(props, emitUpdate) {
35
27
  }
36
28
  function focusInput(e) {
37
29
  if (control.disabled) return;
38
- const target = e.target;
39
- if (target instanceof Element && isInteractiveElement(target)) return;
30
+ if (isInteractiveElement(e.target, NATIVE_INPUT_SELECTOR)) return;
40
31
  inputRef.value?.focus();
41
32
  }
42
33
  return {
@@ -49,8 +40,8 @@ function useInput(props, emitUpdate) {
49
40
  }
50
41
  //#endregion
51
42
  //#region src/components/input/input.vue?vue&type=script&setup=true&vapor=true&lang.ts
52
- var t0 = template("<span data-v-3dd93444>");
53
- var t1 = template("<label data-v-3dd93444><input data-v-3dd93444>", 1);
43
+ var t0 = template("<span data-v-803913b6>");
44
+ var t1 = template("<div data-v-803913b6><input data-v-803913b6>", 1);
54
45
  //#endregion
55
46
  //#region src/components/input/input.vue
56
47
  var input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -112,15 +103,15 @@ var input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
112
103
  const rootAttrs = computed(() => getRootAttrs({
113
104
  class: rootClass.value,
114
105
  onMousedown: focusInput,
115
- "data-disabled": presence(control.disabled),
116
- "data-readonly": presence(props.readonly),
117
- "data-invalid": presence(control.invalid)
106
+ "data-disabled": toPresenceAttribute(control.disabled),
107
+ "data-readonly": toPresenceAttribute(props.readonly),
108
+ "data-invalid": toPresenceAttribute(control.invalid)
118
109
  }));
119
110
  const nativeInputAttrs = computed(() => {
120
111
  const attrs = props.inputAttrs ?? {};
121
- const { class: compatibilityClass, style: compatibilityStyle, ...forwardedAttrs } = attrs;
112
+ const { compatibilityClass, compatibilityStyle, forwardedAttributes } = splitCompatibilityAttributes(attrs);
122
113
  return {
123
- ...forwardedAttrs,
114
+ ...forwardedAttributes,
124
115
  ...getPartAttrs("input", {
125
116
  class: "rp-input__native",
126
117
  compatibilityClass,
@@ -128,7 +119,7 @@ var input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
128
119
  }),
129
120
  id: control.id,
130
121
  name: props.name,
131
- form: control.form ?? forwardedAttrs.form,
122
+ form: control.form ?? forwardedAttributes.form,
132
123
  type: props.type,
133
124
  value: controllable.value.value,
134
125
  placeholder: props.placeholder,
@@ -140,13 +131,10 @@ var input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
140
131
  "aria-describedby": control.ariaDescribedby,
141
132
  "aria-invalid": control.invalid || void 0,
142
133
  "aria-required": control.required || void 0,
143
- "data-disabled": presence(control.disabled),
144
- "data-readonly": presence(props.readonly),
145
- "data-invalid": presence(control.invalid),
146
- onInput(event) {
147
- onInput(event);
148
- attrs.onInput?.(event);
149
- }
134
+ "data-disabled": toPresenceAttribute(control.disabled),
135
+ "data-readonly": toPresenceAttribute(props.readonly),
136
+ "data-invalid": toPresenceAttribute(control.invalid),
137
+ onInput: composeEventHandlers(onInput, attrs.onInput)
150
138
  };
151
139
  });
152
140
  __expose({
@@ -176,6 +164,6 @@ var input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
176
164
  });
177
165
  return n9;
178
166
  }
179
- }), [["__scopeId", "data-v-3dd93444"]]);
167
+ }), [["__scopeId", "data-v-803913b6"]]);
180
168
  //#endregion
181
169
  export { input_default as t };
@@ -0,0 +1,18 @@
1
+ import { t as isElement } from "./query.js";
2
+ //#region src/utils/dom/interactive.ts
3
+ var INTERACTIVE_ELEMENT_SELECTOR = [
4
+ "button",
5
+ "a[href]",
6
+ "input",
7
+ "select",
8
+ "textarea",
9
+ "[contenteditable=\"true\"]",
10
+ "[tabindex]:not([tabindex=\"-1\"])"
11
+ ].join(",");
12
+ function isInteractiveElement(target, ignoredSelector) {
13
+ if (!isElement(target)) return false;
14
+ const interactiveElement = target.closest(INTERACTIVE_ELEMENT_SELECTOR);
15
+ return Boolean(interactiveElement && (!ignoredSelector || !interactiveElement.matches(ignoredSelector)));
16
+ }
17
+ //#endregion
18
+ export { isInteractiveElement as t };
package/dist/modal.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import './modal.css';
2
- import { t as x_default } from "./x.js";
2
+ import { t as useControllableValue } from "./useControllableValue.js";
3
+ import { t as useStylesApi } from "./styles-api.js";
3
4
  import { t as bem } from "./bem.js";
4
- import { n as useStylesApi } from "./styles-api.js";
5
5
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
6
+ import { t as x_default } from "./x.js";
6
7
  import { a as dialog_overlay_default, c as dialog_close_default, i as dialog_portal_default, l as resolveDialogCloseReason, n as dialog_title_default, o as dialog_description_default, r as dialog_root_default, s as dialog_content_default } from "./dialog.js";
7
8
  import { t as icon_button_default } from "./icon-button.js";
8
9
  import { t as overlay_default } from "./overlay.js";
9
10
  import { t as scroll_area_default } from "./scroll-area.js";
10
- import { VaporTransition, applyVShow, computed, createComponent, createIf, createSlot, defineVaporComponent, extend, mergeProps, ref, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, unref, useId, useSlots } from "vue";
11
+ import { VaporTransition, applyVShow, computed, createComponent, createIf, createSlot, defineVaporComponent, extend, mergeProps, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, unref, useId, useSlots } from "vue";
11
12
  //#region src/components/modal/useModal.ts
12
13
  var DEFAULT_ROLE = "dialog";
13
14
  var DEFAULT_SIZE = "md";
@@ -24,14 +25,18 @@ function isModalPresetSize(size) {
24
25
  function useModal(props, emit = {}) {
25
26
  const slots = useSlots();
26
27
  const generatedId = useId();
27
- const uncontrolledOpen = ref(false);
28
+ const controllableOpen = useControllableValue({
29
+ modelValue: () => props.open,
30
+ defaultValue: () => false,
31
+ onChange: (open) => emit.openChange?.(open)
32
+ });
28
33
  const modalId = computed(() => props.id ?? `${generatedId}-modal`);
29
34
  const titleId = computed(() => `${modalId.value}-title`);
30
35
  const descriptionId = computed(() => `${modalId.value}-description`);
31
36
  const role = computed(() => props.role ?? DEFAULT_ROLE);
32
37
  const size = computed(() => props.size || DEFAULT_SIZE);
33
38
  const isPresetSize = computed(() => isModalPresetSize(size.value));
34
- const isOpen = computed(() => props.open ?? uncontrolledOpen.value);
39
+ const isOpen = controllableOpen.value;
35
40
  const shouldRender = computed(() => Boolean(props.keepMounted || isOpen.value));
36
41
  const hasCustomHeader = computed(() => Boolean(slots.header));
37
42
  const hasHeader = computed(() => Boolean(hasCustomHeader.value || props.title || props.description));
@@ -65,8 +70,7 @@ function useModal(props, emit = {}) {
65
70
  }));
66
71
  function setOpen(nextOpen) {
67
72
  if (nextOpen === isOpen.value) return;
68
- if (props.open === void 0) uncontrolledOpen.value = nextOpen;
69
- emit.openChange?.(nextOpen);
73
+ controllableOpen.setValue(nextOpen);
70
74
  }
71
75
  function openModal() {
72
76
  setOpen(true);
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-number-input[data-v-eb2db673] {
2
+ .rp-number-input[data-v-1c3d99ad] {
3
3
  --_rp-number-input-control-size: var(--_rp-input-height);
4
4
  --_rp-number-input-text-align: left;
5
5
  overflow: hidden;
@@ -7,39 +7,39 @@
7
7
  padding-inline: 0;
8
8
  vertical-align: middle;
9
9
  }
10
- .rp-number-input[data-v-eb2db673] .rp-input__native {
10
+ .rp-number-input[data-v-1c3d99ad] .rp-input__native {
11
11
  appearance: textfield;
12
12
  padding-inline: var(--_rp-input-padding-x);
13
13
  text-align: var(--_rp-number-input-text-align);
14
14
  }
15
- .rp-number-input--text-align-center[data-v-eb2db673] {
15
+ .rp-number-input--text-align-center[data-v-1c3d99ad] {
16
16
  --_rp-number-input-text-align: center;
17
17
  }
18
- .rp-number-input--text-align-right[data-v-eb2db673] {
18
+ .rp-number-input--text-align-right[data-v-1c3d99ad] {
19
19
  --_rp-number-input-text-align: right;
20
20
  }
21
- .rp-number-input[data-v-eb2db673] .rp-input__native::-webkit-inner-spin-button,
22
- .rp-number-input[data-v-eb2db673] .rp-input__native::-webkit-outer-spin-button {
21
+ .rp-number-input[data-v-1c3d99ad] .rp-input__native::-webkit-inner-spin-button,
22
+ .rp-number-input[data-v-1c3d99ad] .rp-input__native::-webkit-outer-spin-button {
23
23
  margin: 0;
24
24
  appearance: none;
25
25
  }
26
- .rp-number-input[data-v-eb2db673] .rp-input__left,
27
- .rp-number-input[data-v-eb2db673] .rp-input__right {
26
+ .rp-number-input[data-v-1c3d99ad] .rp-input__left,
27
+ .rp-number-input[data-v-1c3d99ad] .rp-input__right {
28
28
  align-self: stretch;
29
29
  margin-block: calc(-1 * var(--rp-border-width-thin));
30
30
  }
31
- .rp-number-input__controls[data-v-eb2db673] {
31
+ .rp-number-input__controls[data-v-1c3d99ad] {
32
32
  display: inline-flex;
33
33
  height: var(--_rp-input-height);
34
34
  flex-shrink: 0;
35
35
  }
36
- .rp-number-input__controls--left[data-v-eb2db673] {
36
+ .rp-number-input__controls--left[data-v-1c3d99ad] {
37
37
  border-inline-end: var(--rp-border-width-thin) solid var(--rp-color-control-border);
38
38
  }
39
- .rp-number-input__controls--right[data-v-eb2db673] {
39
+ .rp-number-input__controls--right[data-v-1c3d99ad] {
40
40
  border-inline-start: var(--rp-border-width-thin) solid var(--rp-color-control-border);
41
41
  }
42
- .rp-number-input__control[data-v-eb2db673] {
42
+ .rp-number-input__control[data-v-1c3d99ad] {
43
43
  padding: 0;
44
44
  font: inherit;
45
45
  background: none;
@@ -55,29 +55,29 @@
55
55
  color: var(--rp-color-control-icon);
56
56
  transition: color var(--rp-transition-fast), background-color var(--rp-transition-fast), opacity var(--rp-transition-fast);
57
57
  }
58
- .rp-number-input__control + .rp-number-input__control[data-v-eb2db673] {
58
+ .rp-number-input__control + .rp-number-input__control[data-v-1c3d99ad] {
59
59
  border-inline-start: var(--rp-border-width-thin) solid var(--rp-color-control-border);
60
60
  }
61
- .rp-number-input__control[data-v-eb2db673]:hover:not(:disabled) {
61
+ .rp-number-input__control[data-v-1c3d99ad]:hover:not(:disabled) {
62
62
  color: var(--rp-color-control-fg);
63
63
  background-color: var(--rp-color-default-hover);
64
64
  }
65
- .rp-number-input__control[data-v-eb2db673]:disabled {
65
+ .rp-number-input__control[data-v-1c3d99ad]:disabled {
66
66
  cursor: not-allowed;
67
67
  opacity: var(--rp-opacity-disabled);
68
68
  }
69
- .rp-number-input__control-icon[data-v-eb2db673] {
69
+ .rp-number-input__control-icon[data-v-1c3d99ad] {
70
70
  display: inline-flex;
71
71
  align-items: center;
72
72
  width: 0.875em;
73
73
  height: 0.875em;
74
74
  flex-shrink: 0;
75
75
  }
76
- .rp-number-input__control-icon svg[data-v-eb2db673] {
76
+ .rp-number-input__control-icon svg[data-v-1c3d99ad] {
77
77
  width: 100%;
78
78
  height: 100%;
79
79
  }
80
- .rp-number-input__control-icon[data-v-eb2db673] > svg {
80
+ .rp-number-input__control-icon[data-v-1c3d99ad] > svg {
81
81
  display: block;
82
82
  width: 100%;
83
83
  height: 100%;
@@ -1,13 +1,14 @@
1
1
  import './number-input.css';
2
+ import { t as useControllableValue } from "./useControllableValue.js";
3
+ import { t as useStylesApi } from "./styles-api.js";
4
+ import { n as toPresenceAttribute } from "./attributes.js";
2
5
  import { t as bem } from "./bem.js";
3
- import { n as useStylesApi, t as presence } from "./styles-api.js";
4
6
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
7
  import { t as minus_default } from "./minus.js";
6
- import { t as useControllableValue } from "./useControllableValue.js";
7
8
  import { i as useFormControl, n as provideNestedFormControlOwner } from "./useFormControl.js";
8
9
  import { t as useControlState } from "./useControlState.js";
9
10
  import { t as input_default } from "./input.js";
10
- import { child, computed, createComponent, createFor, createIf, createSlot, defineVaporComponent, delegateEvents, markRaw, on, ref, renderEffect, setDynamicProps, setInsertionState, setStaticTemplateRef, template, unref, withModifiers, withVaporModifiers } from "vue";
11
+ import { child, computed, createComponent, createFor, createIf, createSlot, defineVaporComponent, markRaw, on, ref, renderEffect, setDynamicProps, setInsertionState, setStaticTemplateRef, template, unref, withModifiers } from "vue";
11
12
  //#region ~icons/lucide/plus
12
13
  var t0$1 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><path fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"M5 12h14m-7-7v14\">", 3, 1);
13
14
  function render(_ctx) {
@@ -18,7 +19,7 @@ var plus_default = markRaw(defineVaporComponent({
18
19
  render
19
20
  }));
20
21
  //#endregion
21
- //#region src/components/number-input/useNumberInput.ts
22
+ //#region src/components/number-input/numberInputModel.ts
22
23
  function finiteOrUndefined(value) {
23
24
  return value !== void 0 && Number.isFinite(value) ? value : void 0;
24
25
  }
@@ -78,6 +79,8 @@ function normalizeNumberInputTextAlign(textAlign) {
78
79
  function getModelInputValue(value) {
79
80
  return value !== null && Number.isFinite(value) ? String(normalizeZero(value)) : "";
80
81
  }
82
+ //#endregion
83
+ //#region src/components/number-input/useNumberInput.ts
81
84
  function useNumberInput(props, emitUpdate, getValue = () => props.modelValue ?? null) {
82
85
  const control = useControlState(props);
83
86
  const bounds = computed(() => normalizeNumberInputBounds(props.min, props.max));
@@ -190,11 +193,10 @@ function useNumberInput(props, emitUpdate, getValue = () => props.modelValue ??
190
193
  }
191
194
  //#endregion
192
195
  //#region src/components/number-input/number-input.vue?vue&type=script&setup=true&vapor=true&lang.ts
193
- var t0 = template("<button data-v-eb2db673><span data-v-eb2db673 class=rp-number-input__control-icon aria-hidden=true></button>");
194
- var t1 = template("<span data-v-eb2db673 class=\"rp-number-input__controls rp-number-input__controls--left\">");
195
- var t2 = template("<button data-v-eb2db673><span data-v-eb2db673 class=rp-number-input__control-icon aria-hidden=true>");
196
- var t3 = template("<span data-v-eb2db673 class=\"rp-number-input__controls rp-number-input__controls--right\">");
197
- delegateEvents("mousedown");
196
+ var t0 = template("<button data-v-1c3d99ad><span data-v-1c3d99ad class=rp-number-input__control-icon aria-hidden=true></button>");
197
+ var t1 = template("<span data-v-1c3d99ad class=\"rp-number-input__controls rp-number-input__controls--left\">");
198
+ var t2 = template("<button data-v-1c3d99ad><span data-v-1c3d99ad class=rp-number-input__control-icon aria-hidden=true>");
199
+ var t3 = template("<span data-v-1c3d99ad class=\"rp-number-input__controls rp-number-input__controls--right\">");
198
200
  //#endregion
199
201
  //#region src/components/number-input/number-input.vue
200
202
  var number_input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -292,7 +294,7 @@ var number_input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
292
294
  return {
293
295
  ...getPartAttrs("control", { class: ["rp-number-input__control", `rp-number-input__control--${controlType}`] }),
294
296
  "data-control": controlType,
295
- "data-disabled": presence(isControlDisabled(controlType))
297
+ "data-disabled": toPresenceAttribute(isControlDisabled(controlType))
296
298
  };
297
299
  }
298
300
  function focusNativeInput(event) {
@@ -363,7 +365,7 @@ var number_input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
363
365
  return createComponent(unref(minus_default));
364
366
  }, 1);
365
367
  }, 261);
366
- n12.$evtmousedown = withVaporModifiers(() => {}, ["prevent"]);
368
+ on(n12, "mousedown", withModifiers(() => {}, ["prevent"]));
367
369
  on(n12, "click", withModifiers(($event) => onControlClick($event, _for_item0.value), ["stop"]));
368
370
  return n12;
369
371
  }, (controlType) => controlType, 9);
@@ -401,7 +403,7 @@ var number_input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
401
403
  return createComponent(unref(minus_default));
402
404
  }, 1);
403
405
  }, 517);
404
- n27.$evtmousedown = withVaporModifiers(() => {}, ["prevent"]);
406
+ on(n27, "mousedown", withModifiers(() => {}, ["prevent"]));
405
407
  on(n27, "click", withModifiers(($event) => onControlClick($event, _for_item0.value), ["stop"]));
406
408
  return n27;
407
409
  }, (controlType) => controlType, 9);
@@ -411,7 +413,7 @@ var number_input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
411
413
  setStaticTemplateRef(n30, inputComponentRef, null, "inputComponentRef");
412
414
  return n30;
413
415
  }
414
- }), [["__scopeId", "data-v-eb2db673"]]);
416
+ }), [["__scopeId", "data-v-1c3d99ad"]]);
415
417
  //#endregion
416
418
  //#region src/components/number-input/types.ts
417
419
  var numberInputParts = [
package/dist/number.js ADDED
@@ -0,0 +1,22 @@
1
+ //#region src/utils/number.ts
2
+ function clamp(value, min, max) {
3
+ return Math.min(max, Math.max(min, value));
4
+ }
5
+ function getValuePercent(value, min, max) {
6
+ if (![
7
+ value,
8
+ min,
9
+ max
10
+ ].every(Number.isFinite) || max <= min) return 0;
11
+ return clamp((value - min) / (max - min) * 100, 0, 100);
12
+ }
13
+ function normalizeDelay(value, fallback = 0) {
14
+ if (value == null) return fallback;
15
+ return Number.isFinite(value) ? Math.max(0, value) : fallback;
16
+ }
17
+ function roundTo(value, fractionDigits = 2) {
18
+ const factor = 10 ** fractionDigits;
19
+ return Math.round(value * factor) / factor;
20
+ }
21
+ //#endregion
22
+ export { roundTo as i, getValuePercent as n, normalizeDelay as r, clamp as t };
package/dist/overlay.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import './overlay.css';
2
+ import { t as useStylesApi } from "./styles-api.js";
2
3
  import { t as bem } from "./bem.js";
3
- 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
+ import { t as clamp } from "./number.js";
5
6
  import { computed, createIf, defineVaporComponent, renderEffect, setDynamicProps, template, unref } from "vue";
6
7
  //#region src/components/overlay/useOverlay.ts
7
8
  function getBlurValue(blur) {
@@ -18,7 +19,7 @@ function useOverlay(props) {
18
19
  const normalizedOpacity = computed(() => {
19
20
  const opacity = props.opacity;
20
21
  if (opacity === void 0 || !Number.isFinite(opacity)) return 1;
21
- return Math.min(1, Math.max(0, opacity));
22
+ return clamp(opacity, 0, 1);
22
23
  });
23
24
  const blurValue = computed(() => getBlurValue(props.blur));
24
25
  const hasBlur = computed(() => Boolean(blurValue.value));
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-pagination[data-v-6ae45781] {
2
+ .rp-pagination[data-v-cb68db8f] {
3
3
  --_rp-pagination-item-size: var(--rp-size-control-md);
4
4
  --_rp-pagination-font-size: var(--rp-font-size-md);
5
5
  --_rp-pagination-radius: var(--rp-radius-sm);
@@ -16,7 +16,7 @@
16
16
  line-height: 1;
17
17
  vertical-align: middle;
18
18
  }
19
- .rp-pagination__items[data-v-6ae45781] {
19
+ .rp-pagination__items[data-v-cb68db8f] {
20
20
  display: flex;
21
21
  align-items: center;
22
22
  max-width: 100%;
@@ -25,11 +25,11 @@
25
25
  gap: var(--_rp-pagination-gap);
26
26
  list-style: none;
27
27
  }
28
- .rp-pagination__item[data-v-6ae45781] {
28
+ .rp-pagination__item[data-v-cb68db8f] {
29
29
  display: flex;
30
30
  flex: 0 0 auto;
31
31
  }
32
- .rp-pagination__page[data-v-6ae45781], .rp-pagination__control[data-v-6ae45781], .rp-pagination__ellipsis[data-v-6ae45781] {
32
+ .rp-pagination__page[data-v-cb68db8f], .rp-pagination__control[data-v-cb68db8f], .rp-pagination__ellipsis[data-v-cb68db8f] {
33
33
  display: inline-flex;
34
34
  align-items: center;
35
35
  justify-content: center;
@@ -45,96 +45,96 @@
45
45
  border: var(--rp-border-width-thin) solid transparent;
46
46
  border-radius: var(--_rp-pagination-radius);
47
47
  }
48
- .rp-pagination__page[data-v-6ae45781], .rp-pagination__control[data-v-6ae45781] {
48
+ .rp-pagination__page[data-v-cb68db8f], .rp-pagination__control[data-v-cb68db8f] {
49
49
  appearance: none;
50
50
  cursor: pointer;
51
51
  }
52
- .rp-pagination__page[data-v-6ae45781]:hover:not(:disabled), .rp-pagination__control[data-v-6ae45781]:hover:not(:disabled) {
52
+ .rp-pagination__page[data-v-cb68db8f]:hover:not(:disabled), .rp-pagination__control[data-v-cb68db8f]:hover:not(:disabled) {
53
53
  background-color: var(--rp-color-default-hover);
54
54
  }
55
- .rp-pagination__page[data-v-6ae45781]:focus-visible, .rp-pagination__control[data-v-6ae45781]:focus-visible {
55
+ .rp-pagination__page[data-v-cb68db8f]:focus-visible, .rp-pagination__control[data-v-cb68db8f]:focus-visible {
56
56
  outline: none;
57
57
  border-color: var(--rp-color-control-border-focus);
58
58
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
59
59
  }
60
- .rp-pagination__page[data-v-6ae45781]:disabled, .rp-pagination__control[data-v-6ae45781]:disabled {
60
+ .rp-pagination__page[data-v-cb68db8f]:disabled, .rp-pagination__control[data-v-cb68db8f]:disabled {
61
61
  opacity: var(--rp-opacity-disabled);
62
62
  cursor: not-allowed;
63
63
  }
64
- .rp-pagination__page[data-v-6ae45781] {
64
+ .rp-pagination__page[data-v-cb68db8f] {
65
65
  width: auto;
66
66
  padding-inline: var(--rp-spacing-2);
67
67
  font-variant-numeric: tabular-nums;
68
68
  transition: box-shadow var(--rp-transition-fast);
69
69
  }
70
- .rp-pagination__page--active[data-v-6ae45781] {
70
+ .rp-pagination__page--active[data-v-cb68db8f] {
71
71
  color: var(--_rp-pagination-active-fg);
72
72
  font-weight: var(--rp-font-weight-medium);
73
73
  background-color: var(--_rp-pagination-active-bg);
74
74
  border-color: var(--_rp-pagination-active-bg);
75
75
  }
76
- .rp-pagination__page--active[data-v-6ae45781]:hover:not(:disabled) {
76
+ .rp-pagination__page--active[data-v-cb68db8f]:hover:not(:disabled) {
77
77
  background-color: var(--_rp-pagination-active-bg-hover);
78
78
  border-color: var(--_rp-pagination-active-bg-hover);
79
79
  color: var(--_rp-pagination-active-fg-hover);
80
80
  }
81
- .rp-pagination__control[data-v-6ae45781] {
81
+ .rp-pagination__control[data-v-cb68db8f] {
82
82
  transition: color var(--rp-transition-fast), background-color var(--rp-transition-fast), border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
83
83
  }
84
- .rp-pagination__control-icon[data-v-6ae45781], .rp-pagination__ellipsis[data-v-6ae45781] > svg {
84
+ .rp-pagination__control-icon[data-v-cb68db8f], .rp-pagination__ellipsis[data-v-cb68db8f] > svg {
85
85
  display: block;
86
86
  width: 1em;
87
87
  height: 1em;
88
88
  }
89
- .rp-pagination__ellipsis[data-v-6ae45781] {
89
+ .rp-pagination__ellipsis[data-v-cb68db8f] {
90
90
  color: var(--rp-color-dimmed);
91
91
  }
92
- .rp-pagination:dir(rtl) .rp-pagination__control-icon[data-v-6ae45781] {
92
+ .rp-pagination:dir(rtl) .rp-pagination__control-icon[data-v-cb68db8f] {
93
93
  transform: rotate(180deg);
94
94
  }
95
- .rp-pagination--disabled .rp-pagination__page[data-v-6ae45781]:not(:disabled), .rp-pagination--disabled .rp-pagination__control[data-v-6ae45781]:not(:disabled) {
95
+ .rp-pagination--disabled .rp-pagination__page[data-v-cb68db8f]:not(:disabled), .rp-pagination--disabled .rp-pagination__control[data-v-cb68db8f]:not(:disabled) {
96
96
  opacity: var(--rp-opacity-disabled);
97
97
  cursor: not-allowed;
98
98
  }
99
- .rp-pagination--size-xs[data-v-6ae45781] {
99
+ .rp-pagination--size-xs[data-v-cb68db8f] {
100
100
  --_rp-pagination-item-size: var(--rp-size-control-xs);
101
101
  --_rp-pagination-font-size: var(--rp-font-size-xs);
102
102
  }
103
- .rp-pagination--size-sm[data-v-6ae45781] {
103
+ .rp-pagination--size-sm[data-v-cb68db8f] {
104
104
  --_rp-pagination-item-size: var(--rp-size-control-sm);
105
105
  --_rp-pagination-font-size: var(--rp-font-size-sm);
106
106
  }
107
- .rp-pagination--size-md[data-v-6ae45781] {
107
+ .rp-pagination--size-md[data-v-cb68db8f] {
108
108
  --_rp-pagination-item-size: var(--rp-size-control-md);
109
109
  --_rp-pagination-font-size: var(--rp-font-size-md);
110
110
  }
111
- .rp-pagination--size-lg[data-v-6ae45781] {
111
+ .rp-pagination--size-lg[data-v-cb68db8f] {
112
112
  --_rp-pagination-item-size: var(--rp-size-control-lg);
113
113
  --_rp-pagination-font-size: var(--rp-font-size-lg);
114
114
  }
115
- .rp-pagination--size-xl[data-v-6ae45781] {
115
+ .rp-pagination--size-xl[data-v-cb68db8f] {
116
116
  --_rp-pagination-item-size: var(--rp-size-control-xl);
117
117
  --_rp-pagination-font-size: var(--rp-font-size-xl);
118
118
  }
119
- .rp-pagination--radius-none[data-v-6ae45781] {
119
+ .rp-pagination--radius-none[data-v-cb68db8f] {
120
120
  --_rp-pagination-radius: var(--rp-radius-none);
121
121
  }
122
- .rp-pagination--radius-xs[data-v-6ae45781] {
122
+ .rp-pagination--radius-xs[data-v-cb68db8f] {
123
123
  --_rp-pagination-radius: var(--rp-radius-xs);
124
124
  }
125
- .rp-pagination--radius-sm[data-v-6ae45781] {
125
+ .rp-pagination--radius-sm[data-v-cb68db8f] {
126
126
  --_rp-pagination-radius: var(--rp-radius-sm);
127
127
  }
128
- .rp-pagination--radius-md[data-v-6ae45781] {
128
+ .rp-pagination--radius-md[data-v-cb68db8f] {
129
129
  --_rp-pagination-radius: var(--rp-radius-md);
130
130
  }
131
- .rp-pagination--radius-lg[data-v-6ae45781] {
131
+ .rp-pagination--radius-lg[data-v-cb68db8f] {
132
132
  --_rp-pagination-radius: var(--rp-radius-lg);
133
133
  }
134
- .rp-pagination--radius-xl[data-v-6ae45781] {
134
+ .rp-pagination--radius-xl[data-v-cb68db8f] {
135
135
  --_rp-pagination-radius: var(--rp-radius-xl);
136
136
  }
137
- .rp-pagination--radius-full[data-v-6ae45781] {
137
+ .rp-pagination--radius-full[data-v-cb68db8f] {
138
138
  --_rp-pagination-radius: var(--rp-radius-full);
139
139
  }
140
140
  }