ropav 0.0.11 → 0.0.13

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 (126) hide show
  1. package/README.md +3 -0
  2. package/dist/checkbox.css +32 -32
  3. package/dist/checkbox.js +33 -14
  4. package/dist/color-input.css +19 -19
  5. package/dist/color-input.js +35 -17
  6. package/dist/components/checkbox/types.d.ts +5 -1
  7. package/dist/components/checkbox/useCheckbox.d.ts +1 -1
  8. package/dist/components/color-input/types.d.ts +4 -1
  9. package/dist/components/color-input/useColorInput.d.ts +1 -1
  10. package/dist/components/color-input/useColorInputValue.d.ts +1 -1
  11. package/dist/components/dialog/dialog-close.d.ts +21 -0
  12. package/dist/components/dialog/dialog-content.d.ts +32 -0
  13. package/dist/components/dialog/dialog-core.d.ts +27 -0
  14. package/dist/components/dialog/dialog-description.d.ts +21 -0
  15. package/dist/components/dialog/dialog-overlay.d.ts +21 -0
  16. package/dist/components/dialog/dialog-portal.d.ts +21 -0
  17. package/dist/components/dialog/dialog-root.d.ts +28 -0
  18. package/dist/components/dialog/dialog-title.d.ts +21 -0
  19. package/dist/components/dialog/dialog-trigger.d.ts +23 -0
  20. package/dist/components/dialog/index.d.ts +9 -0
  21. package/dist/components/dialog/index.js +2 -0
  22. package/dist/components/dialog/types.d.ts +61 -0
  23. package/dist/components/dropdown-menu/dropdown-menu-checkbox-item.d.ts +24 -0
  24. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +34 -0
  25. package/dist/components/dropdown-menu/dropdown-menu-context-trigger.d.ts +23 -0
  26. package/dist/components/dropdown-menu/dropdown-menu-item-indicator.d.ts +24 -0
  27. package/dist/components/dropdown-menu/dropdown-menu-item-row.d.ts +28 -0
  28. package/dist/components/dropdown-menu/dropdown-menu-item.d.ts +23 -0
  29. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +24 -22
  30. package/dist/components/dropdown-menu/dropdown-menu-label.d.ts +21 -0
  31. package/dist/components/dropdown-menu/dropdown-menu-outside.d.ts +3 -0
  32. package/dist/components/dropdown-menu/dropdown-menu-portal.d.ts +21 -0
  33. package/dist/components/dropdown-menu/dropdown-menu-primitive-core.d.ts +110 -0
  34. package/dist/components/dropdown-menu/dropdown-menu-primitives.d.ts +15 -724
  35. package/dist/components/dropdown-menu/dropdown-menu-radio-group.d.ts +25 -0
  36. package/dist/components/dropdown-menu/dropdown-menu-radio-item.d.ts +23 -0
  37. package/dist/components/dropdown-menu/dropdown-menu-root.d.ts +30 -0
  38. package/dist/components/dropdown-menu/dropdown-menu-separator.d.ts +19 -0
  39. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +34 -0
  40. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +28 -0
  41. package/dist/components/dropdown-menu/dropdown-menu-sub.d.ts +28 -0
  42. package/dist/components/dropdown-menu/dropdown-menu-trigger.d.ts +23 -0
  43. package/dist/components/dropdown-menu/dropdown-menu.d.ts +5 -2
  44. package/dist/components/dropdown-menu/index.d.ts +28 -49
  45. package/dist/components/dropdown-menu/index.js +2 -2
  46. package/dist/components/dropdown-menu/types.d.ts +8 -3
  47. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +8 -4
  48. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +7 -2
  49. package/dist/components/dropdown-menu/useDropdownMenuPortalPosition.d.ts +3 -3
  50. package/dist/components/dropdown-menu/useDropdownMenuPrimitiveContent.d.ts +27 -0
  51. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +2 -0
  52. package/dist/components/floating/index.d.ts +3 -1
  53. package/dist/components/floating/index.js +3 -0
  54. package/dist/components/floating/types.d.ts +86 -1
  55. package/dist/components/floating/useFloatingPosition.d.ts +3 -26
  56. package/dist/components/floating/useHoverDisclosure.d.ts +2 -0
  57. package/dist/components/input/input.d.ts +4 -1
  58. package/dist/components/input/types.d.ts +3 -1
  59. package/dist/components/modal/index.d.ts +1 -1
  60. package/dist/components/modal/modal.d.ts +3 -1
  61. package/dist/components/modal/types.d.ts +3 -0
  62. package/dist/components/modal/useModal.d.ts +7 -4
  63. package/dist/components/number-input/types.d.ts +3 -1
  64. package/dist/components/number-input/useNumberInput.d.ts +2 -1
  65. package/dist/components/popover/usePopover.d.ts +2 -2
  66. package/dist/components/radio/types.d.ts +17 -1
  67. package/dist/components/radio/useRadio.d.ts +3 -0
  68. package/dist/components/select/select.d.ts +4 -1
  69. package/dist/components/select/types.d.ts +6 -1
  70. package/dist/components/select/useSelect.d.ts +3 -2
  71. package/dist/components/slider/index.d.ts +1 -1
  72. package/dist/components/slider/range-slider.d.ts +3 -3
  73. package/dist/components/slider/types.d.ts +11 -3
  74. package/dist/components/slider/useRangeSlider.d.ts +1 -1
  75. package/dist/components/slider/useSlider.d.ts +1 -1
  76. package/dist/components/switch/types.d.ts +5 -1
  77. package/dist/components/switch/useSwitch.d.ts +1 -1
  78. package/dist/components/teleport-provider/index.d.ts +1 -0
  79. package/dist/components/teleport-provider/index.js +2 -1
  80. package/dist/components/teleport-provider/useTeleportTarget.d.ts +4 -3
  81. package/dist/components/textarea/types.d.ts +4 -1
  82. package/dist/components/textarea/useTextarea.d.ts +1 -1
  83. package/dist/components/toast/index.d.ts +2 -1
  84. package/dist/components/toast/index.js +2 -2
  85. package/dist/components/toast/toast-store.d.ts +2 -0
  86. package/dist/components/toast/types.d.ts +10 -4
  87. package/dist/components/toast/useToast.d.ts +2 -2
  88. package/dist/components/tooltip/useTooltip.d.ts +3 -3
  89. package/dist/composables/useOverlayLayer.d.ts +32 -0
  90. package/dist/dialog.js +510 -0
  91. package/dist/dropdown-menu.css +4 -5
  92. package/dist/dropdown-menu.js +1155 -886
  93. package/dist/floating.js +403 -0
  94. package/dist/index.d.ts +1 -0
  95. package/dist/index.js +7 -4
  96. package/dist/input.css +24 -24
  97. package/dist/input.js +21 -11
  98. package/dist/legacy-unlayered.css +424 -503
  99. package/dist/modal.css +28 -28
  100. package/dist/modal.js +141 -200
  101. package/dist/number-input.css +20 -20
  102. package/dist/number-input.js +44 -16
  103. package/dist/popover.css +4 -4
  104. package/dist/popover.js +29 -40
  105. package/dist/radio.css +18 -18
  106. package/dist/radio.js +96 -18
  107. package/dist/select.css +54 -43
  108. package/dist/select.js +185 -67
  109. package/dist/slider.css +183 -202
  110. package/dist/slider.js +138 -37
  111. package/dist/switch.css +17 -17
  112. package/dist/switch.js +31 -13
  113. package/dist/textarea.css +26 -26
  114. package/dist/textarea.js +19 -9
  115. package/dist/toast.js +110 -99
  116. package/dist/tooltip.css +5 -80
  117. package/dist/tooltip.js +11 -3
  118. package/dist/useControlState.js +4 -0
  119. package/dist/useFloatingPosition.js +86 -39
  120. package/dist/useFormControl.js +107 -0
  121. package/dist/useOverlayLayer.js +262 -0
  122. package/dist/useTeleportTarget.js +21 -10
  123. package/docs/public-floating-api.md +159 -0
  124. package/docs/public-styles-api.md +2 -1
  125. package/package.json +10 -6
  126. package/dist/useClickOutside.js +0 -24
package/dist/textarea.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-textarea[data-v-1654f805] {
2
+ .rp-textarea[data-v-f2ee1457] {
3
3
  --_rp-textarea-padding-y: 7px;
4
4
  --_rp-textarea-padding-x: calc(var(--rp-size-control-md) / 3);
5
5
  --_rp-textarea-font-size: var(--rp-font-size-md);
@@ -17,58 +17,58 @@
17
17
  cursor: text;
18
18
  transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
19
19
  }
20
- .rp-textarea[data-v-1654f805]:hover:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
20
+ .rp-textarea[data-v-f2ee1457]:hover:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
21
21
  border-color: var(--rp-color-control-border-hover);
22
22
  }
23
- .rp-textarea[data-v-1654f805]:focus-within:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
23
+ .rp-textarea[data-v-f2ee1457]:focus-within:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
24
24
  border-color: var(--rp-color-control-border-focus);
25
25
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
26
26
  }
27
- .rp-textarea[data-v-1654f805] {
27
+ .rp-textarea[data-v-f2ee1457] {
28
28
  font-size: var(--_rp-textarea-font-size);
29
29
  border-radius: var(--_rp-textarea-radius);
30
30
  }
31
- .rp-textarea--size-xs[data-v-1654f805] {
31
+ .rp-textarea--size-xs[data-v-f2ee1457] {
32
32
  --_rp-textarea-padding-y: 4.5px;
33
33
  --_rp-textarea-padding-x: calc(var(--rp-size-control-xs) / 3);
34
34
  --_rp-textarea-font-size: var(--rp-font-size-xs);
35
35
  }
36
- .rp-textarea--size-sm[data-v-1654f805] {
36
+ .rp-textarea--size-sm[data-v-f2ee1457] {
37
37
  --_rp-textarea-padding-y: 5.5px;
38
38
  --_rp-textarea-padding-x: calc(var(--rp-size-control-sm) / 3);
39
39
  --_rp-textarea-font-size: var(--rp-font-size-sm);
40
40
  }
41
- .rp-textarea--size-md[data-v-1654f805] {
41
+ .rp-textarea--size-md[data-v-f2ee1457] {
42
42
  --_rp-textarea-padding-y: 7px;
43
43
  --_rp-textarea-padding-x: calc(var(--rp-size-control-md) / 3);
44
44
  --_rp-textarea-font-size: var(--rp-font-size-md);
45
45
  }
46
- .rp-textarea--size-lg[data-v-1654f805] {
46
+ .rp-textarea--size-lg[data-v-f2ee1457] {
47
47
  --_rp-textarea-padding-y: 9.5px;
48
48
  --_rp-textarea-padding-x: calc(var(--rp-size-control-lg) / 3);
49
49
  --_rp-textarea-font-size: var(--rp-font-size-lg);
50
50
  }
51
- .rp-textarea--size-xl[data-v-1654f805] {
51
+ .rp-textarea--size-xl[data-v-f2ee1457] {
52
52
  --_rp-textarea-padding-y: 13px;
53
53
  --_rp-textarea-padding-x: calc(var(--rp-size-control-xl) / 3);
54
54
  --_rp-textarea-font-size: var(--rp-font-size-xl);
55
55
  }
56
- .rp-textarea--radius-xs[data-v-1654f805] {
56
+ .rp-textarea--radius-xs[data-v-f2ee1457] {
57
57
  --_rp-textarea-radius: var(--rp-radius-xs);
58
58
  }
59
- .rp-textarea--radius-sm[data-v-1654f805] {
59
+ .rp-textarea--radius-sm[data-v-f2ee1457] {
60
60
  --_rp-textarea-radius: var(--rp-radius-sm);
61
61
  }
62
- .rp-textarea--radius-md[data-v-1654f805] {
62
+ .rp-textarea--radius-md[data-v-f2ee1457] {
63
63
  --_rp-textarea-radius: var(--rp-radius-md);
64
64
  }
65
- .rp-textarea--radius-lg[data-v-1654f805] {
65
+ .rp-textarea--radius-lg[data-v-f2ee1457] {
66
66
  --_rp-textarea-radius: var(--rp-radius-lg);
67
67
  }
68
- .rp-textarea--radius-xl[data-v-1654f805] {
68
+ .rp-textarea--radius-xl[data-v-f2ee1457] {
69
69
  --_rp-textarea-radius: var(--rp-radius-xl);
70
70
  }
71
- html.dark .rp-textarea[data-v-1654f805], [data-rp-color-scheme=dark] .rp-textarea[data-v-1654f805] {
71
+ html.dark .rp-textarea[data-v-f2ee1457], [data-rp-color-scheme=dark] .rp-textarea[data-v-f2ee1457] {
72
72
  --_rp-textarea-valid-border: var(--rp-color-green-light-color);
73
73
  --_rp-textarea-valid-ring: color-mix(
74
74
  in srgb,
@@ -82,34 +82,34 @@ html.dark .rp-textarea[data-v-1654f805], [data-rp-color-scheme=dark] .rp-textare
82
82
  transparent
83
83
  );
84
84
  }
85
- .rp-textarea--disabled[data-v-1654f805] {
85
+ .rp-textarea--disabled[data-v-f2ee1457] {
86
86
  opacity: var(--rp-opacity-disabled);
87
87
  cursor: not-allowed;
88
88
  }
89
- .rp-textarea--valid[data-v-1654f805] {
89
+ .rp-textarea--valid[data-v-f2ee1457] {
90
90
  border-color: var(--_rp-textarea-valid-border);
91
91
  }
92
- .rp-textarea--valid[data-v-1654f805]:focus-within:not(.rp-textarea--disabled) {
92
+ .rp-textarea--valid[data-v-f2ee1457]:focus-within:not(.rp-textarea--disabled) {
93
93
  border-color: var(--_rp-textarea-valid-border);
94
94
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-textarea-valid-ring);
95
95
  }
96
- .rp-textarea--invalid[data-v-1654f805] {
96
+ .rp-textarea--invalid[data-v-f2ee1457] {
97
97
  border-color: var(--_rp-textarea-invalid-border);
98
98
  }
99
- .rp-textarea--invalid[data-v-1654f805]:focus-within:not(.rp-textarea--disabled) {
99
+ .rp-textarea--invalid[data-v-f2ee1457]:focus-within:not(.rp-textarea--disabled) {
100
100
  border-color: var(--_rp-textarea-invalid-border);
101
101
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-textarea-invalid-ring);
102
102
  }
103
- .rp-textarea--readonly[data-v-1654f805] {
103
+ .rp-textarea--readonly[data-v-f2ee1457] {
104
104
  background-color: var(--rp-color-control-readonly-bg);
105
105
  }
106
- .rp-textarea--resize-vertical .rp-textarea__native[data-v-1654f805] {
106
+ .rp-textarea--resize-vertical .rp-textarea__native[data-v-f2ee1457] {
107
107
  resize: vertical;
108
108
  }
109
- .rp-textarea--resize-both .rp-textarea__native[data-v-1654f805] {
109
+ .rp-textarea--resize-both .rp-textarea__native[data-v-f2ee1457] {
110
110
  resize: both;
111
111
  }
112
- .rp-textarea__native[data-v-1654f805] {
112
+ .rp-textarea__native[data-v-f2ee1457] {
113
113
  box-sizing: border-box;
114
114
  flex: 1;
115
115
  width: 100%;
@@ -124,10 +124,10 @@ html.dark .rp-textarea[data-v-1654f805], [data-rp-color-scheme=dark] .rp-textare
124
124
  color: var(--rp-color-control-fg);
125
125
  line-height: var(--rp-line-height-md);
126
126
  }
127
- .rp-textarea__native[data-v-1654f805]::placeholder {
127
+ .rp-textarea__native[data-v-f2ee1457]::placeholder {
128
128
  color: var(--rp-color-control-placeholder);
129
129
  }
130
- .rp-textarea__native[data-v-1654f805]:disabled {
130
+ .rp-textarea__native[data-v-f2ee1457]:disabled {
131
131
  cursor: not-allowed;
132
132
  }
133
133
  }
package/dist/textarea.js CHANGED
@@ -2,6 +2,7 @@ import './textarea.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 _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
+ import { a as useTextFormControl, o as useControllableValue } from "./useFormControl.js";
5
6
  import { t as useControlState } from "./useControlState.js";
6
7
  import { child, computed, defineVaporComponent, nextTick, onMounted, ref, renderEffect, setDynamicProps, setStaticTemplateRef, template, unref, watch } from "vue";
7
8
  //#region src/components/textarea/useTextarea.ts
@@ -56,7 +57,7 @@ function resetTextareaHeight(textarea) {
56
57
  textarea.style.height = "";
57
58
  textarea.style.overflowY = "";
58
59
  }
59
- function useTextarea(props, emitUpdate) {
60
+ function useTextarea(props, emitUpdate, getValue = () => props.modelValue ?? "") {
60
61
  const textareaRef = ref(null);
61
62
  const control = useControlState(props);
62
63
  let heightSyncPending = false;
@@ -80,7 +81,7 @@ function useTextarea(props, emitUpdate) {
80
81
  readonly: props.readonly
81
82
  }));
82
83
  const autosizeWatchSource = computed(() => [
83
- props.modelValue,
84
+ getValue(),
84
85
  props.autosize,
85
86
  props.minRows,
86
87
  props.maxRows,
@@ -136,7 +137,7 @@ function useTextarea(props, emitUpdate) {
136
137
  }
137
138
  //#endregion
138
139
  //#region src/components/textarea/textarea.vue?vue&type=script&setup=true&vapor=true&lang.ts
139
- var t0 = template("<div data-v-1654f805><textarea data-v-1654f805>", 1);
140
+ var t0 = template("<div data-v-f2ee1457><textarea data-v-f2ee1457>", 1);
140
141
  //#endregion
141
142
  //#region src/components/textarea/textarea.vue
142
143
  var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -146,7 +147,9 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
146
147
  props: {
147
148
  id: {},
148
149
  name: {},
149
- modelValue: {},
150
+ form: {},
151
+ modelValue: { default: void 0 },
152
+ defaultValue: { default: "" },
150
153
  size: {},
151
154
  radius: {},
152
155
  resize: { default: "none" },
@@ -182,6 +185,7 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
182
185
  describedby: {},
183
186
  labelledby: {},
184
187
  inputAttrs: {},
188
+ validationMessage: {},
185
189
  classNames: {},
186
190
  styles: {}
187
191
  },
@@ -189,9 +193,13 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
189
193
  setup(__props, { expose: __expose, emit: __emit }) {
190
194
  const props = __props;
191
195
  const emit = __emit;
192
- const { textareaRef, control, rootClass, nativeRows, onInput, focusTextarea, focus } = useTextarea(props, (value) => {
193
- emit("update:modelValue", value);
196
+ const controllable = useControllableValue({
197
+ modelValue: () => props.modelValue,
198
+ defaultValue: () => props.defaultValue,
199
+ onChange: (value) => emit("update:modelValue", value)
194
200
  });
201
+ const { textareaRef, control, rootClass, nativeRows, onInput, focusTextarea, focus } = useTextarea(props, (value) => controllable.setValue(value), () => controllable.value.value);
202
+ useTextFormControl(() => textareaRef.value, controllable, () => props.validationMessage);
195
203
  const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
196
204
  const rootAttrs = computed(() => getRootAttrs({
197
205
  class: rootClass.value,
@@ -223,15 +231,17 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
223
231
  const n0 = child(n1);
224
232
  setStaticTemplateRef(n0, textareaRef, null, "textareaRef");
225
233
  renderEffect(() => {
234
+ const _nativeInputAttrs = nativeInputAttrs.value;
226
235
  const _control = unref(control);
227
236
  const _readonly = __props.readonly;
228
237
  const _presence = unref(presence);
229
238
  const _control_required = _control.required;
230
239
  setDynamicProps(n1, [rootAttrs.value]);
231
- setDynamicProps(n0, [nativeInputAttrs.value, {
240
+ setDynamicProps(n0, [_nativeInputAttrs, {
232
241
  id: _control.id,
233
242
  name: __props.name,
234
- value: __props.modelValue,
243
+ form: _control.form ?? _nativeInputAttrs.form,
244
+ value: unref(controllable).value.value,
235
245
  placeholder: __props.placeholder,
236
246
  rows: unref(nativeRows),
237
247
  disabled: _control.disabled || void 0,
@@ -249,7 +259,7 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
249
259
  });
250
260
  return n1;
251
261
  }
252
- }), [["__scopeId", "data-v-1654f805"]]);
262
+ }), [["__scopeId", "data-v-f2ee1457"]]);
253
263
  //#endregion
254
264
  //#region src/components/textarea/types.ts
255
265
  var textareaParts = ["root", "input"];
package/dist/toast.js CHANGED
@@ -4,8 +4,8 @@ import { t as bem } from "./bem.js";
4
4
  import { n as useStylesApi } from "./styles-api.js";
5
5
  import { i as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
6
6
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
7
- import { n as useTeleportTarget } from "./useTeleportTarget.js";
8
- import { VaporTeleport, VaporTransition, VaporTransitionGroup, computed, createComponent, createFor, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, extend, inject, nextTick, onBeforeUnmount, onMounted, provide, ref, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, toValue, txt, unref, useId, useSlots, watch } from "vue";
7
+ import { r as useTeleportTarget } from "./useTeleportTarget.js";
8
+ import { VaporTeleport, VaporTransition, VaporTransitionGroup, computed, createComponent, createFor, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, extend, inject, nextTick, onBeforeUnmount, onMounted, provide, ref, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, toValue, txt, unref, useSlots, watch } from "vue";
9
9
  //#region src/components/toast/defaults.ts
10
10
  var DEFAULT_TOAST_DURATION = 5e3;
11
11
  var DEFAULT_TOAST_ROLE = "status";
@@ -283,60 +283,7 @@ var toast_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
283
283
  }
284
284
  }), [["__scopeId", "data-v-6944ac43"]]);
285
285
  //#endregion
286
- //#region src/components/toast/types.ts
287
- var toastParts = [
288
- "root",
289
- "icon",
290
- "title",
291
- "description",
292
- "body",
293
- "action",
294
- "close"
295
- ];
296
- var toastViewportParts = [
297
- "root",
298
- "item",
299
- "toast",
300
- "toastIcon",
301
- "toastTitle",
302
- "toastDescription",
303
- "toastBody",
304
- "toastAction",
305
- "toastClose"
306
- ];
307
- var toastColors = componentColors;
308
- var toastVariants = [
309
- "subtle",
310
- "surface",
311
- "outline",
312
- "solid"
313
- ];
314
- var toastRadiuses = [
315
- "none",
316
- "xs",
317
- "sm",
318
- "md",
319
- "lg",
320
- "xl"
321
- ];
322
- var toastPositions = [
323
- "top-left",
324
- "top-center",
325
- "top-right",
326
- "bottom-left",
327
- "bottom-center",
328
- "bottom-right"
329
- ];
330
- var toastTypes = [
331
- "default",
332
- "success",
333
- "error",
334
- "warning",
335
- "info"
336
- ];
337
- var toastProviderKey = Symbol("toast-provider");
338
- //#endregion
339
- //#region src/components/toast/useToast.ts
286
+ //#region src/components/toast/toast-store.ts
340
287
  var TYPE_DEFAULTS = {
341
288
  default: {},
342
289
  success: { color: "green" },
@@ -373,18 +320,18 @@ function splitOptions(options) {
373
320
  toastProps: withoutUndefined(toastProps)
374
321
  };
375
322
  }
376
- function getProviderDefaults(props) {
323
+ function getStoreDefaults(options) {
377
324
  return withoutUndefined({
378
- duration: props.duration ?? 5e3,
379
- variant: props.variant,
380
- color: props.color,
381
- autoContrast: props.autoContrast,
382
- radius: props.radius,
383
- role: props.role,
384
- pauseOnHover: props.pauseOnHover ?? true,
385
- pauseOnFocus: props.pauseOnFocus ?? true,
386
- closable: props.closable ?? true,
387
- closeLabel: props.closeLabel ?? "Close toast"
325
+ duration: options.duration ?? 5e3,
326
+ variant: options.variant,
327
+ color: options.color,
328
+ autoContrast: options.autoContrast,
329
+ radius: options.radius,
330
+ role: options.role,
331
+ pauseOnHover: options.pauseOnHover ?? true,
332
+ pauseOnFocus: options.pauseOnFocus ?? true,
333
+ closable: options.closable ?? true,
334
+ closeLabel: options.closeLabel ?? "Close toast"
388
335
  });
389
336
  }
390
337
  function replaceAt(items, index, value) {
@@ -406,15 +353,14 @@ function partitionOverflow(items, max) {
406
353
  evicted: items.slice(0, overflow)
407
354
  };
408
355
  }
409
- function provideToast(props) {
410
- const scopeId = useId();
356
+ function createToastStore(options = {}) {
411
357
  const items = ref([]);
412
358
  const toasts = computed(() => items.value);
413
359
  const records = /* @__PURE__ */ new Map();
414
360
  let sequence = 0;
415
361
  function createInstanceId() {
416
362
  sequence += 1;
417
- return `${scopeId}-toast-${sequence}`;
363
+ return `rp-toast-${sequence}`;
418
364
  }
419
365
  function resolveItem(id, instanceId, record) {
420
366
  return {
@@ -423,7 +369,7 @@ function provideToast(props) {
423
369
  type: record.type,
424
370
  props: {
425
371
  ...TYPE_DEFAULTS[record.type],
426
- ...getProviderDefaults(props),
372
+ ...getStoreDefaults(options),
427
373
  ...record.props
428
374
  },
429
375
  onClose: record.onClose
@@ -435,8 +381,8 @@ function provideToast(props) {
435
381
  function notifyAll(removedItems, reason) {
436
382
  for (const item of removedItems) notify(item, reason);
437
383
  }
438
- function create(type, input, options) {
439
- const split = splitOptions(normalizeInput(input, options));
384
+ function create(type, input, createOptions) {
385
+ const split = splitOptions(normalizeInput(input, createOptions));
440
386
  const instanceId = createInstanceId();
441
387
  const id = split.id ?? instanceId;
442
388
  const record = {
@@ -446,42 +392,43 @@ function provideToast(props) {
446
392
  };
447
393
  const item = resolveItem(id, instanceId, record);
448
394
  const replaced = items.value.filter((current) => current.id === id);
449
- const { kept, evicted } = partitionOverflow([...items.value.filter((current) => current.id !== id), item], normalizeMax(props.max));
395
+ const { kept, evicted } = partitionOverflow([...items.value.filter((current) => current.id !== id), item], normalizeMax(options.max));
450
396
  records.set(instanceId, record);
451
397
  forget([...replaced, ...evicted]);
452
398
  items.value = kept;
453
- notifyAll([...replaced, ...evicted], "dismiss");
399
+ notifyAll(replaced, "replace");
400
+ notifyAll(evicted, "overflow");
454
401
  return id;
455
402
  }
456
- function show(input, options) {
457
- return create("default", input, options);
403
+ function show(input, createOptions) {
404
+ return create("default", input, createOptions);
458
405
  }
459
- function success(input, options) {
460
- return create("success", input, options);
406
+ function success(input, createOptions) {
407
+ return create("success", input, createOptions);
461
408
  }
462
- function error(input, options) {
463
- return create("error", input, options);
409
+ function error(input, createOptions) {
410
+ return create("error", input, createOptions);
464
411
  }
465
- function warning(input, options) {
466
- return create("warning", input, options);
412
+ function warning(input, createOptions) {
413
+ return create("warning", input, createOptions);
467
414
  }
468
- function info(input, options) {
469
- return create("info", input, options);
415
+ function info(input, createOptions) {
416
+ return create("info", input, createOptions);
470
417
  }
471
- function update(id, options) {
418
+ function update(id, updateOptions) {
472
419
  const index = items.value.findIndex((item) => item.id === id);
473
420
  if (index === -1) return;
474
421
  const current = items.value[index];
475
422
  const record = records.get(current.instanceId);
476
423
  if (!record) return;
477
- const { type, onClose, ...toastProps } = options;
424
+ const { type, onClose, ...toastProps } = updateOptions;
478
425
  const nextRecord = {
479
426
  type: type ?? record.type,
480
427
  props: {
481
428
  ...record.props,
482
429
  ...withoutUndefined(toastProps)
483
430
  },
484
- onClose: Object.hasOwn(options, "onClose") ? onClose : record.onClose
431
+ onClose: Object.hasOwn(updateOptions, "onClose") ? onClose : record.onClose
485
432
  };
486
433
  records.set(current.instanceId, nextRecord);
487
434
  items.value = replaceAt(items.value, index, resolveItem(current.id, current.instanceId, nextRecord));
@@ -496,16 +443,13 @@ function provideToast(props) {
496
443
  function dismiss(id, reason = "dismiss") {
497
444
  closeAt(items.value.findIndex((item) => item.id === id), reason);
498
445
  }
499
- function dismissInstance(instanceId, reason = "dismiss") {
500
- closeAt(items.value.findIndex((item) => item.instanceId === instanceId), reason);
501
- }
502
446
  function dismissAll(reason = "dismiss") {
503
447
  const dismissed = items.value;
504
448
  records.clear();
505
449
  items.value = [];
506
450
  notifyAll(dismissed, reason);
507
451
  }
508
- const context = {
452
+ const store = {
509
453
  toasts,
510
454
  show,
511
455
  success,
@@ -514,17 +458,82 @@ function provideToast(props) {
514
458
  info,
515
459
  update,
516
460
  dismiss,
517
- dismissAll,
518
- dismissInstance
461
+ dismissAll
519
462
  };
520
- provide(toastProviderKey, context);
521
- watch(() => normalizeMax(props.max), (max) => {
463
+ watch(() => normalizeMax(options.max), (max) => {
522
464
  const { kept, evicted } = partitionOverflow(items.value, max);
523
465
  if (evicted.length === 0) return;
524
466
  forget(evicted);
525
467
  items.value = kept;
526
- notifyAll(evicted, "dismiss");
468
+ notifyAll(evicted, "overflow");
527
469
  }, { flush: "sync" });
470
+ return store;
471
+ }
472
+ //#endregion
473
+ //#region src/components/toast/types.ts
474
+ var toastParts = [
475
+ "root",
476
+ "icon",
477
+ "title",
478
+ "description",
479
+ "body",
480
+ "action",
481
+ "close"
482
+ ];
483
+ var toastViewportParts = [
484
+ "root",
485
+ "item",
486
+ "toast",
487
+ "toastIcon",
488
+ "toastTitle",
489
+ "toastDescription",
490
+ "toastBody",
491
+ "toastAction",
492
+ "toastClose"
493
+ ];
494
+ var toastColors = componentColors;
495
+ var toastVariants = [
496
+ "subtle",
497
+ "surface",
498
+ "outline",
499
+ "solid"
500
+ ];
501
+ var toastRadiuses = [
502
+ "none",
503
+ "xs",
504
+ "sm",
505
+ "md",
506
+ "lg",
507
+ "xl"
508
+ ];
509
+ var toastPositions = [
510
+ "top-left",
511
+ "top-center",
512
+ "top-right",
513
+ "bottom-left",
514
+ "bottom-center",
515
+ "bottom-right"
516
+ ];
517
+ var toastTypes = [
518
+ "default",
519
+ "success",
520
+ "error",
521
+ "warning",
522
+ "info"
523
+ ];
524
+ var toastProviderKey = Symbol("toast-provider");
525
+ //#endregion
526
+ //#region src/components/toast/useToast.ts
527
+ function provideToast(store) {
528
+ function dismissInstance(instanceId, reason = "dismiss") {
529
+ const item = store.toasts.value.find((current) => current.instanceId === instanceId);
530
+ if (item) store.dismiss(item.id, reason);
531
+ }
532
+ const context = {
533
+ ...store,
534
+ dismissInstance
535
+ };
536
+ provide(toastProviderKey, context);
528
537
  return context;
529
538
  }
530
539
  function useToastContext(consumer) {
@@ -541,6 +550,7 @@ var toast_provider_default = /* @__PURE__ */ defineVaporComponent({
541
550
  name: "RpToastProvider",
542
551
  __name: "toast-provider",
543
552
  props: {
553
+ store: {},
544
554
  max: { default: 5 },
545
555
  duration: { default: DEFAULT_TOAST_DURATION },
546
556
  variant: { default: void 0 },
@@ -566,7 +576,8 @@ var toast_provider_default = /* @__PURE__ */ defineVaporComponent({
566
576
  closeLabel: { default: DEFAULT_TOAST_CLOSE_LABEL }
567
577
  },
568
578
  setup(__props) {
569
- provideToast(__props);
579
+ const props = __props;
580
+ provideToast(props.store ?? createToastStore(props));
570
581
  return createSlot();
571
582
  }
572
583
  });
@@ -736,4 +747,4 @@ function useToastState(options = {}) {
736
747
  };
737
748
  }
738
749
  //#endregion
739
- export { toastColors as a, toastRadiuses as c, toastViewportParts as d, toast_default as f, useToast as i, toastTypes as l, toast_viewport_default as n, toastParts as o, toast_provider_default as r, toastPositions as s, useToastState as t, toastVariants as u };
750
+ export { toastColors as a, toastRadiuses as c, toastViewportParts as d, createToastStore as f, useToast as i, toastTypes as l, toast_viewport_default as n, toastParts as o, toast_default as p, toast_provider_default as r, toastPositions as s, useToastState as t, toastVariants as u };
package/dist/tooltip.css CHANGED
@@ -1,16 +1,16 @@
1
1
  @layer ropav.components {
2
2
  .rp-tooltip[data-v-38bfcb12] {
3
- --_rp-tooltip-main-axis-offset: var(--rp-spacing-2);
4
- --_rp-tooltip-cross-axis-offset: 0px;
5
- --_rp-tooltip-arrow-size: 0.4375rem;
6
- --_rp-tooltip-bg: var(--rp-color-bright);
7
- --_rp-tooltip-fg: var(--rp-color-default);
8
3
  position: relative;
9
4
  display: inline-flex;
10
5
  font-family: var(--rp-font-family);
11
6
  vertical-align: middle;
12
7
  }
13
8
  .rp-tooltip__content[data-v-38bfcb12] {
9
+ --_rp-tooltip-main-axis-offset: var(--rp-spacing-2);
10
+ --_rp-tooltip-cross-axis-offset: 0px;
11
+ --_rp-tooltip-arrow-size: 0.4375rem;
12
+ --_rp-tooltip-bg: var(--rp-color-bright);
13
+ --_rp-tooltip-fg: var(--rp-color-default);
14
14
  position: absolute;
15
15
  z-index: 1000;
16
16
  box-sizing: border-box;
@@ -29,84 +29,9 @@
29
29
  border-radius: var(--rp-radius-sm);
30
30
  box-shadow: var(--rp-shadow-md);
31
31
  }
32
- .rp-tooltip--arrow .rp-tooltip__content[data-v-38bfcb12]:not([data-placement])::before {
33
- position: absolute;
34
- width: var(--_rp-tooltip-arrow-size);
35
- height: var(--_rp-tooltip-arrow-size);
36
- content: "";
37
- background-color: inherit;
38
- rotate: 45deg;
39
- }
40
- .rp-tooltip--placement-top .rp-tooltip__content[data-v-38bfcb12] {
41
- bottom: calc(100% + var(--_rp-tooltip-main-axis-offset));
42
- left: calc(50% + var(--_rp-tooltip-cross-axis-offset));
43
- translate: -50% 0;
44
- }
45
- .rp-tooltip--arrow.rp-tooltip--placement-top .rp-tooltip__content[data-v-38bfcb12]:not([data-placement])::before {
46
- top: calc(100% - var(--_rp-tooltip-arrow-size) / 2);
47
- left: 50%;
48
- translate: -50% 0;
49
- }
50
- .rp-tooltip--placement-right .rp-tooltip__content[data-v-38bfcb12] {
51
- top: calc(50% + var(--_rp-tooltip-cross-axis-offset));
52
- left: calc(100% + var(--_rp-tooltip-main-axis-offset));
53
- translate: 0 -50%;
54
- }
55
- .rp-tooltip--arrow.rp-tooltip--placement-right .rp-tooltip__content[data-v-38bfcb12]:not([data-placement])::before {
56
- top: 50%;
57
- right: calc(100% - var(--_rp-tooltip-arrow-size) / 2);
58
- translate: 0 -50%;
59
- }
60
- .rp-tooltip--placement-bottom .rp-tooltip__content[data-v-38bfcb12] {
61
- top: calc(100% + var(--_rp-tooltip-main-axis-offset));
62
- left: calc(50% + var(--_rp-tooltip-cross-axis-offset));
63
- translate: -50% 0;
64
- }
65
- .rp-tooltip--arrow.rp-tooltip--placement-bottom .rp-tooltip__content[data-v-38bfcb12]:not([data-placement])::before {
66
- bottom: calc(100% - var(--_rp-tooltip-arrow-size) / 2);
67
- left: 50%;
68
- translate: -50% 0;
69
- }
70
- .rp-tooltip--placement-left .rp-tooltip__content[data-v-38bfcb12] {
71
- top: calc(50% + var(--_rp-tooltip-cross-axis-offset));
72
- right: calc(100% + var(--_rp-tooltip-main-axis-offset));
73
- translate: 0 -50%;
74
- }
75
- .rp-tooltip--arrow.rp-tooltip--placement-left .rp-tooltip__content[data-v-38bfcb12]:not([data-placement])::before {
76
- top: 50%;
77
- left: calc(100% - var(--_rp-tooltip-arrow-size) / 2);
78
- translate: 0 -50%;
79
- }
80
32
  .rp-tooltip--target[data-v-38bfcb12] {
81
33
  display: contents;
82
34
  }
83
- .rp-tooltip--target .rp-tooltip__content[data-v-38bfcb12] {
84
- position: fixed;
85
- top: var(--_rp-tooltip-target-y, 0);
86
- right: auto;
87
- bottom: auto;
88
- left: var(--_rp-tooltip-target-x, 0);
89
- }
90
- .rp-tooltip--target.rp-tooltip--placement-top .rp-tooltip__content[data-v-38bfcb12] {
91
- translate: calc(-50% + var(--_rp-tooltip-cross-axis-offset)) calc(-100% - var(--_rp-tooltip-main-axis-offset));
92
- }
93
- .rp-tooltip--target.rp-tooltip--placement-right .rp-tooltip__content[data-v-38bfcb12] {
94
- translate: var(--_rp-tooltip-main-axis-offset) calc(-50% + var(--_rp-tooltip-cross-axis-offset));
95
- }
96
- .rp-tooltip--target.rp-tooltip--placement-bottom .rp-tooltip__content[data-v-38bfcb12] {
97
- translate: calc(-50% + var(--_rp-tooltip-cross-axis-offset)) var(--_rp-tooltip-main-axis-offset);
98
- }
99
- .rp-tooltip--target.rp-tooltip--placement-left .rp-tooltip__content[data-v-38bfcb12] {
100
- translate: calc(-100% - var(--_rp-tooltip-main-axis-offset)) calc(-50% + var(--_rp-tooltip-cross-axis-offset));
101
- }
102
- .rp-tooltip__content[data-placement][data-v-38bfcb12] {
103
- position: absolute;
104
- top: 0;
105
- right: auto;
106
- bottom: auto;
107
- left: 0;
108
- translate: none;
109
- }
110
35
  .rp-tooltip__arrow[data-v-38bfcb12] {
111
36
  position: absolute;
112
37
  width: var(--_rp-tooltip-arrow-size);