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/select.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-select[data-v-e6060752] {
2
+ .rp-select[data-v-5c4e4e6a] {
3
3
  --_rp-select-height: var(--rp-size-control-md);
4
4
  --_rp-select-padding-x: calc(var(--rp-size-control-md) / 3);
5
5
  --_rp-select-font-size: var(--rp-font-size-md);
@@ -15,42 +15,53 @@
15
15
  font-weight: var(--rp-font-weight-normal);
16
16
  line-height: 1;
17
17
  }
18
- .rp-select--size-xs[data-v-e6060752] {
18
+ .rp-select__native[data-v-5c4e4e6a] {
19
+ position: absolute;
20
+ width: 1px;
21
+ height: 1px;
22
+ padding: 0;
23
+ margin: -1px;
24
+ overflow: hidden;
25
+ clip: rect(0, 0, 0, 0);
26
+ white-space: nowrap;
27
+ border-width: 0;
28
+ }
29
+ .rp-select--size-xs[data-v-5c4e4e6a] {
19
30
  --_rp-select-height: var(--rp-size-control-xs);
20
31
  --_rp-select-padding-x: calc(var(--rp-size-control-xs) / 3);
21
32
  --_rp-select-font-size: var(--rp-font-size-xs);
22
33
  --_rp-select-option-min-height: calc(var(--rp-size-control-xs) - var(--rp-spacing-2));
23
34
  --_rp-select-option-padding-y: calc(var(--rp-spacing-1) / 2);
24
35
  }
25
- .rp-select--size-sm[data-v-e6060752] {
36
+ .rp-select--size-sm[data-v-5c4e4e6a] {
26
37
  --_rp-select-height: var(--rp-size-control-sm);
27
38
  --_rp-select-padding-x: calc(var(--rp-size-control-sm) / 3);
28
39
  --_rp-select-font-size: var(--rp-font-size-sm);
29
40
  --_rp-select-option-min-height: calc(var(--rp-size-control-sm) - var(--rp-spacing-3));
30
41
  --_rp-select-option-padding-y: var(--rp-spacing-1);
31
42
  }
32
- .rp-select--size-md[data-v-e6060752] {
43
+ .rp-select--size-md[data-v-5c4e4e6a] {
33
44
  --_rp-select-height: var(--rp-size-control-md);
34
45
  --_rp-select-padding-x: calc(var(--rp-size-control-md) / 3);
35
46
  --_rp-select-font-size: var(--rp-font-size-md);
36
47
  --_rp-select-option-min-height: calc(var(--rp-size-control-md) - var(--rp-spacing-4));
37
48
  --_rp-select-option-padding-y: var(--rp-spacing-1);
38
49
  }
39
- .rp-select--size-lg[data-v-e6060752] {
50
+ .rp-select--size-lg[data-v-5c4e4e6a] {
40
51
  --_rp-select-height: var(--rp-size-control-lg);
41
52
  --_rp-select-padding-x: calc(var(--rp-size-control-lg) / 3);
42
53
  --_rp-select-font-size: var(--rp-font-size-lg);
43
54
  --_rp-select-option-min-height: calc(var(--rp-size-control-lg) - var(--rp-spacing-5));
44
55
  --_rp-select-option-padding-y: calc(var(--rp-spacing-3) / 2);
45
56
  }
46
- .rp-select--size-xl[data-v-e6060752] {
57
+ .rp-select--size-xl[data-v-5c4e4e6a] {
47
58
  --_rp-select-height: var(--rp-size-control-xl);
48
59
  --_rp-select-padding-x: calc(var(--rp-size-control-xl) / 3);
49
60
  --_rp-select-font-size: var(--rp-font-size-xl);
50
61
  --_rp-select-option-min-height: calc(var(--rp-size-control-xl) - var(--rp-spacing-6));
51
62
  --_rp-select-option-padding-y: var(--rp-spacing-2);
52
63
  }
53
- html.dark .rp-select[data-v-e6060752], [data-rp-color-scheme=dark] .rp-select[data-v-e6060752] {
64
+ html.dark .rp-select[data-v-5c4e4e6a], [data-rp-color-scheme=dark] .rp-select[data-v-5c4e4e6a] {
54
65
  --_rp-select-invalid-border: var(--rp-color-red-light-color);
55
66
  --_rp-select-invalid-ring: color-mix(
56
67
  in srgb,
@@ -59,11 +70,11 @@ html.dark .rp-select[data-v-e6060752], [data-rp-color-scheme=dark] .rp-select[da
59
70
  );
60
71
  --_rp-select-option-focused-bg: var(--rp-color-default-hover);
61
72
  }
62
- .rp-select--disabled[data-v-e6060752] {
73
+ .rp-select--disabled[data-v-5c4e4e6a] {
63
74
  opacity: var(--rp-opacity-disabled);
64
75
  cursor: not-allowed;
65
76
  }
66
- .rp-select__trigger[data-v-e6060752] {
77
+ .rp-select__trigger[data-v-5c4e4e6a] {
67
78
  display: inline-flex;
68
79
  align-items: center;
69
80
  justify-content: center;
@@ -80,81 +91,81 @@ html.dark .rp-select[data-v-e6060752], [data-rp-color-scheme=dark] .rp-select[da
80
91
  transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
81
92
  gap: var(--rp-spacing-2);
82
93
  }
83
- .rp-select__trigger[data-v-e6060752]:hover {
94
+ .rp-select__trigger[data-v-5c4e4e6a]:hover {
84
95
  border-color: var(--rp-color-control-border-hover);
85
96
  }
86
- .rp-select__trigger[data-v-e6060752]:focus-visible {
97
+ .rp-select__trigger[data-v-5c4e4e6a]:focus-visible {
87
98
  outline: none;
88
99
  border-color: var(--rp-color-control-border-focus);
89
100
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
90
101
  }
91
- .rp-select--radius-xs[data-v-e6060752] {
102
+ .rp-select--radius-xs[data-v-5c4e4e6a] {
92
103
  --_rp-select-radius: var(--rp-radius-xs);
93
104
  }
94
- .rp-select--radius-sm[data-v-e6060752] {
105
+ .rp-select--radius-sm[data-v-5c4e4e6a] {
95
106
  --_rp-select-radius: var(--rp-radius-sm);
96
107
  }
97
- .rp-select--radius-md[data-v-e6060752] {
108
+ .rp-select--radius-md[data-v-5c4e4e6a] {
98
109
  --_rp-select-radius: var(--rp-radius-md);
99
110
  }
100
- .rp-select--radius-lg[data-v-e6060752] {
111
+ .rp-select--radius-lg[data-v-5c4e4e6a] {
101
112
  --_rp-select-radius: var(--rp-radius-lg);
102
113
  }
103
- .rp-select--radius-xl[data-v-e6060752] {
114
+ .rp-select--radius-xl[data-v-5c4e4e6a] {
104
115
  --_rp-select-radius: var(--rp-radius-xl);
105
116
  }
106
- .rp-select--open .rp-select__trigger[data-v-e6060752] {
117
+ .rp-select--open .rp-select__trigger[data-v-5c4e4e6a] {
107
118
  border-color: var(--rp-color-control-border-focus);
108
119
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
109
120
  }
110
- .rp-select--invalid .rp-select__trigger[data-v-e6060752] {
121
+ .rp-select--invalid .rp-select__trigger[data-v-5c4e4e6a] {
111
122
  border-color: var(--_rp-select-invalid-border);
112
123
  }
113
- .rp-select--invalid .rp-select__trigger[data-v-e6060752]:focus-visible, .rp-select--open.rp-select--invalid .rp-select__trigger[data-v-e6060752] {
124
+ .rp-select--invalid .rp-select__trigger[data-v-5c4e4e6a]:focus-visible, .rp-select--open.rp-select--invalid .rp-select__trigger[data-v-5c4e4e6a] {
114
125
  border-color: var(--_rp-select-invalid-border);
115
126
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-select-invalid-ring);
116
127
  }
117
- .rp-select__value[data-v-e6060752] {
128
+ .rp-select__value[data-v-5c4e4e6a] {
118
129
  flex: 1;
119
130
  overflow: hidden;
120
131
  text-overflow: ellipsis;
121
132
  white-space: nowrap;
122
133
  color: var(--rp-color-control-fg);
123
134
  }
124
- .rp-select__placeholder[data-v-e6060752] {
135
+ .rp-select__placeholder[data-v-5c4e4e6a] {
125
136
  color: var(--rp-color-control-placeholder);
126
137
  }
127
- .rp-select__indicator[data-v-e6060752] {
138
+ .rp-select__indicator[data-v-5c4e4e6a] {
128
139
  display: inline-flex;
129
140
  align-items: center;
130
141
  width: 1em;
131
142
  height: 1em;
132
143
  flex-shrink: 0;
133
144
  }
134
- .rp-select__indicator svg[data-v-e6060752] {
145
+ .rp-select__indicator svg[data-v-5c4e4e6a] {
135
146
  width: 100%;
136
147
  height: 100%;
137
148
  }
138
- .rp-select__indicator[data-v-e6060752] {
149
+ .rp-select__indicator[data-v-5c4e4e6a] {
139
150
  position: relative;
140
151
  color: var(--rp-color-control-icon);
141
152
  transform: translateX(var(--rp-spacing-1));
142
153
  }
143
- .rp-select__arrow[data-v-e6060752] {
154
+ .rp-select__arrow[data-v-5c4e4e6a] {
144
155
  display: inline-flex;
145
156
  align-items: center;
146
157
  width: 1em;
147
158
  height: 1em;
148
159
  flex-shrink: 0;
149
160
  }
150
- .rp-select__arrow svg[data-v-e6060752] {
161
+ .rp-select__arrow svg[data-v-5c4e4e6a] {
151
162
  width: 100%;
152
163
  height: 100%;
153
164
  }
154
- .rp-select__arrow[data-v-e6060752] {
165
+ .rp-select__arrow[data-v-5c4e4e6a] {
155
166
  transition: opacity var(--rp-transition-fast);
156
167
  }
157
- .rp-select__clear[data-v-e6060752] {
168
+ .rp-select__clear[data-v-5c4e4e6a] {
158
169
  padding: 0;
159
170
  font: inherit;
160
171
  background: none;
@@ -166,11 +177,11 @@ html.dark .rp-select[data-v-e6060752], [data-rp-color-scheme=dark] .rp-select[da
166
177
  height: 1em;
167
178
  flex-shrink: 0;
168
179
  }
169
- .rp-select__clear svg[data-v-e6060752] {
180
+ .rp-select__clear svg[data-v-5c4e4e6a] {
170
181
  width: 100%;
171
182
  height: 100%;
172
183
  }
173
- .rp-select__clear[data-v-e6060752] {
184
+ .rp-select__clear[data-v-5c4e4e6a] {
174
185
  position: absolute;
175
186
  inset: 0;
176
187
  z-index: 1;
@@ -179,17 +190,17 @@ html.dark .rp-select[data-v-e6060752], [data-rp-color-scheme=dark] .rp-select[da
179
190
  pointer-events: none;
180
191
  transition: color var(--rp-transition-fast), opacity var(--rp-transition-fast);
181
192
  }
182
- .rp-select__clear[data-v-e6060752]:hover {
193
+ .rp-select__clear[data-v-5c4e4e6a]:hover {
183
194
  color: var(--rp-color-control-fg);
184
195
  }
185
- .rp-select__trigger:hover .rp-select__clear[data-v-e6060752] {
196
+ .rp-select__trigger:hover .rp-select__clear[data-v-5c4e4e6a] {
186
197
  opacity: 1;
187
198
  pointer-events: auto;
188
199
  }
189
- .rp-select__trigger:hover .rp-select__clear + .rp-select__arrow[data-v-e6060752] {
200
+ .rp-select__trigger:hover .rp-select__clear + .rp-select__arrow[data-v-5c4e4e6a] {
190
201
  opacity: 0;
191
202
  }
192
- .rp-select__dropdown[data-v-e6060752] {
203
+ .rp-select__dropdown[data-v-5c4e4e6a] {
193
204
  position: absolute;
194
205
  top: calc(100% + var(--rp-spacing-2));
195
206
  left: 0;
@@ -204,7 +215,7 @@ html.dark .rp-select[data-v-e6060752], [data-rp-color-scheme=dark] .rp-select[da
204
215
  overflow-y: auto;
205
216
  padding: var(--rp-spacing-1);
206
217
  }
207
- .rp-select__option[data-v-e6060752] {
218
+ .rp-select__option[data-v-5c4e4e6a] {
208
219
  display: flex;
209
220
  align-items: center;
210
221
  min-height: var(--_rp-select-option-min-height);
@@ -215,17 +226,17 @@ html.dark .rp-select[data-v-e6060752], [data-rp-color-scheme=dark] .rp-select[da
215
226
  transition: color var(--rp-transition-fast);
216
227
  color: var(--rp-color-control-fg);
217
228
  }
218
- .rp-select__option--focused[data-v-e6060752] {
229
+ .rp-select__option--focused[data-v-5c4e4e6a] {
219
230
  background-color: var(--_rp-select-option-focused-bg);
220
231
  }
221
- .rp-select__option--selected[data-v-e6060752] {
232
+ .rp-select__option--selected[data-v-5c4e4e6a] {
222
233
  color: var(--rp-primary-color-light-color);
223
234
  }
224
- .rp-select__option--disabled[data-v-e6060752] {
235
+ .rp-select__option--disabled[data-v-5c4e4e6a] {
225
236
  color: var(--rp-color-disabled-color);
226
237
  cursor: not-allowed;
227
238
  }
228
- .rp-select__empty[data-v-e6060752] {
239
+ .rp-select__empty[data-v-5c4e4e6a] {
229
240
  display: flex;
230
241
  align-items: center;
231
242
  justify-content: center;
@@ -233,12 +244,12 @@ html.dark .rp-select[data-v-e6060752], [data-rp-color-scheme=dark] .rp-select[da
233
244
  color: var(--rp-color-dimmed);
234
245
  font-size: var(--_rp-select-font-size);
235
246
  }
236
- .rp-select-dropdown-enter-active[data-v-e6060752],
237
- .rp-select-dropdown-leave-active[data-v-e6060752] {
247
+ .rp-select-dropdown-enter-active[data-v-5c4e4e6a],
248
+ .rp-select-dropdown-leave-active[data-v-5c4e4e6a] {
238
249
  transition: opacity var(--rp-transition-fast), transform var(--rp-transition-fast);
239
250
  }
240
- .rp-select-dropdown-enter-from[data-v-e6060752],
241
- .rp-select-dropdown-leave-to[data-v-e6060752] {
251
+ .rp-select-dropdown-enter-from[data-v-5c4e4e6a],
252
+ .rp-select-dropdown-leave-to[data-v-5c4e4e6a] {
242
253
  opacity: 0;
243
254
  transform: translateY(calc(-1 * var(--rp-spacing-1)));
244
255
  }
package/dist/select.js CHANGED
@@ -3,9 +3,9 @@ import { t as x_default } from "./x.js";
3
3
  import { t as bem } from "./bem.js";
4
4
  import { n as useStylesApi, t as presence } from "./styles-api.js";
5
5
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
6
+ import { i as useFormControl, o as useControllableValue } from "./useFormControl.js";
6
7
  import { t as useControlState } from "./useControlState.js";
7
- import { t as useClickOutside } from "./useClickOutside.js";
8
- import { VaporTransition, child, computed, createComponent, createFor, createIf, createInvoker, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, extend, markRaw, next, nextTick, on, ref, renderEffect, setDynamicProps, setInsertionState, setProp, setText, setValue, template, toDisplayString, txt, unref, useId, withModifiers, withVaporModifiers } from "vue";
8
+ import { VaporTransition, child, computed, createComponent, createFor, createIf, createInvoker, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, extend, markRaw, next, nextTick, on, onBeforeUnmount, onMounted, ref, renderEffect, setDynamicProps, setInsertionState, setProp, setText, setValue, template, toDisplayString, txt, unref, useId, watch, watchEffect, withModifiers, withVaporModifiers } from "vue";
9
9
  //#region ~icons/lucide/chevrons-up-down
10
10
  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=\"m7 15l5 5l5-5M7 9l5-5l5 5\">", 3, 1);
11
11
  function render(_ctx) {
@@ -16,6 +16,28 @@ var chevrons_up_down_default = markRaw(defineVaporComponent({
16
16
  render
17
17
  }));
18
18
  //#endregion
19
+ //#region src/composables/useClickOutside.ts
20
+ function useClickOutside(target, active, callback) {
21
+ let isListening = false;
22
+ let stopWatch;
23
+ function handler(e) {
24
+ if (!(Array.isArray(target) ? target : [target]).some((current) => current.value?.contains(e.target))) callback(e);
25
+ }
26
+ function setListening(value) {
27
+ if (typeof document === "undefined" || value === isListening) return;
28
+ isListening = value;
29
+ if (value) document.addEventListener("click", handler, true);
30
+ else document.removeEventListener("click", handler, true);
31
+ }
32
+ onMounted(() => {
33
+ stopWatch = watch(active, setListening, { immediate: true });
34
+ });
35
+ onBeforeUnmount(() => {
36
+ stopWatch?.();
37
+ setListening(false);
38
+ });
39
+ }
40
+ //#endregion
19
41
  //#region src/composables/useListNavigation.ts
20
42
  function useListNavigation(options) {
21
43
  const localFocusedIndex = ref(-1);
@@ -89,7 +111,7 @@ function getSelectDisplayLabel(options, value) {
89
111
  function getSelectActiveDescendantId(baseId, focusedIndex) {
90
112
  return focusedIndex < 0 ? void 0 : `${baseId}-option-${focusedIndex}`;
91
113
  }
92
- function useSelect(props, emitUpdate) {
114
+ function useSelect(props, emitUpdate, getValue = () => props.modelValue ?? null) {
93
115
  const selectRef = ref(null);
94
116
  const triggerRef = ref(null);
95
117
  const isOpen = ref(false);
@@ -97,9 +119,10 @@ function useSelect(props, emitUpdate) {
97
119
  const listboxId = `${selectId}-listbox`;
98
120
  const control = useControlState(props);
99
121
  const visibleOptions = computed(() => props.options ?? []);
122
+ const value = computed(getValue);
100
123
  const navigation = useListNavigation({
101
124
  items: () => visibleOptions.value,
102
- isSelected: (item) => item.value === props.modelValue
125
+ isSelected: (item) => item.value === value.value
103
126
  });
104
127
  const focusedIndex = navigation.focusedIndex;
105
128
  const activeDescendantId = computed(() => getSelectActiveDescendantId(selectId, focusedIndex.value));
@@ -110,8 +133,8 @@ function useSelect(props, emitUpdate) {
110
133
  disabled: control.disabled,
111
134
  invalid: control.invalid
112
135
  }));
113
- const hasValue = computed(() => hasSelectValue(props.modelValue));
114
- const displayLabel = computed(() => getSelectDisplayLabel(props.options, props.modelValue));
136
+ const hasValue = computed(() => hasSelectValue(value.value));
137
+ const displayLabel = computed(() => getSelectDisplayLabel(props.options, value.value));
115
138
  const canClear = computed(() => Boolean(props.clearable && hasValue.value && !control.disabled));
116
139
  function focusTrigger() {
117
140
  nextTick(() => triggerRef.value?.focus());
@@ -216,6 +239,7 @@ function useSelect(props, emitUpdate) {
216
239
  rootClass,
217
240
  hasValue,
218
241
  displayLabel,
242
+ value,
219
243
  canClear,
220
244
  toggle,
221
245
  selectOption,
@@ -226,12 +250,12 @@ function useSelect(props, emitUpdate) {
226
250
  }
227
251
  //#endregion
228
252
  //#region src/components/select/select.vue?vue&type=script&setup=true&vapor=true&lang.ts
229
- var t0 = template("<input data-v-e6060752 type=hidden>");
230
- var t1 = template("<button data-v-e6060752></button>");
253
+ var t0 = template("<option data-v-5c4e4e6a> ");
254
+ var t1 = template("<button data-v-5c4e4e6a></button>");
231
255
  var t2 = template("No options", 2);
232
- var t3 = template("<div data-v-e6060752>");
233
- var t4 = template("<div data-v-e6060752> ");
234
- var t5 = template("<div data-v-e6060752><div data-v-e6060752><span data-v-e6060752> </span><span data-v-e6060752><span data-v-e6060752 class=rp-select__arrow aria-hidden=true>", 1);
256
+ var t3 = template("<div data-v-5c4e4e6a>");
257
+ var t4 = template("<div data-v-5c4e4e6a> ");
258
+ var t5 = template("<div data-v-5c4e4e6a><select data-v-5c4e4e6a><option data-v-5c4e4e6a value></option></select><div data-v-5c4e4e6a><span data-v-5c4e4e6a> </span><span data-v-5c4e4e6a><span data-v-5c4e4e6a class=rp-select__arrow aria-hidden=true>", 1);
235
259
  delegateEvents("mousedown", "click", "keydown");
236
260
  //#endregion
237
261
  //#region src/components/select/select.vue
@@ -242,7 +266,9 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
242
266
  props: {
243
267
  id: {},
244
268
  name: {},
245
- modelValue: {},
269
+ form: {},
270
+ modelValue: { default: void 0 },
271
+ defaultValue: { default: null },
246
272
  options: { default: () => [] },
247
273
  size: {},
248
274
  radius: {},
@@ -267,15 +293,86 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
267
293
  ariaLabel: {},
268
294
  describedby: {},
269
295
  labelledby: {},
296
+ inputAttrs: {},
297
+ validationMessage: {},
270
298
  classNames: {},
271
299
  styles: {}
272
300
  },
273
301
  emits: ["update:modelValue"],
274
- setup(__props, { emit: __emit }) {
302
+ setup(__props, { expose: __expose, emit: __emit }) {
275
303
  const props = __props;
276
304
  const emit = __emit;
277
- const { selectRef, triggerRef, isOpen, selectId, listboxId, control, visibleOptions, focusedIndex, activeDescendantId, rootClass, hasValue, displayLabel, canClear, toggle, selectOption, clearSelection, onOptionMouseenter, onTriggerKeydown } = useSelect(props, (value) => {
278
- emit("update:modelValue", value);
305
+ const nativeSelectRef = ref(null);
306
+ const controllable = useControllableValue({
307
+ modelValue: () => props.modelValue,
308
+ defaultValue: () => props.defaultValue,
309
+ onChange: (value) => emit("update:modelValue", value)
310
+ });
311
+ function getNativeValue(select) {
312
+ if (select.selectedIndex <= 0) return null;
313
+ return props.options?.[select.selectedIndex - 1]?.value ?? null;
314
+ }
315
+ function syncNativeSelection(value) {
316
+ const select = nativeSelectRef.value;
317
+ if (!select) return;
318
+ select.selectedIndex = (props.options?.findIndex((option) => option.value === value) ?? -1) + 1;
319
+ }
320
+ function syncNativeDefaultSelection() {
321
+ const select = nativeSelectRef.value;
322
+ if (!select) return;
323
+ const optionIndex = props.options?.findIndex((option) => option.value === controllable.initialValue) ?? -1;
324
+ for (const [index, option] of [...select.options].entries()) option.defaultSelected = index === optionIndex + 1;
325
+ }
326
+ function requestValueUpdate(value) {
327
+ const select = nativeSelectRef.value;
328
+ if (!select) {
329
+ controllable.setValue(value);
330
+ return;
331
+ }
332
+ syncNativeSelection(value);
333
+ select.dispatchEvent(new Event("input", {
334
+ bubbles: true,
335
+ cancelable: true
336
+ }));
337
+ select.dispatchEvent(new Event("change", {
338
+ bubbles: true,
339
+ cancelable: true
340
+ }));
341
+ if (controllable.isControlled.value) queueMicrotask(() => syncNativeSelection(controllable.value.value));
342
+ }
343
+ const { selectRef, triggerRef, isOpen, selectId, listboxId, control, visibleOptions, focusedIndex, activeDescendantId, rootClass, hasValue, displayLabel, canClear, toggle, selectOption, clearSelection, onOptionMouseenter, onTriggerKeydown } = useSelect(props, requestValueUpdate, () => controllable.value.value);
344
+ useFormControl({
345
+ elements: () => [nativeSelectRef.value],
346
+ isControlled: () => controllable.isControlled.value,
347
+ validationMessage: () => props.validationMessage,
348
+ readResetValue(elements) {
349
+ controllable.resetValue(getNativeValue(elements[0]));
350
+ },
351
+ syncControlledValue() {
352
+ syncNativeSelection(controllable.value.value);
353
+ }
354
+ });
355
+ watchEffect(syncNativeDefaultSelection, { flush: "post" });
356
+ watchEffect(() => syncNativeSelection(controllable.value.value), { flush: "post" });
357
+ const nativeInputAttrs = computed(() => {
358
+ const { class: compatibilityClass, style: compatibilityStyle, onInput: compatibilityOnInput, onChange: compatibilityOnChange, onInvalid: compatibilityOnInvalid, ...attrs } = props.inputAttrs ?? {};
359
+ return {
360
+ ...attrs,
361
+ class: ["rp-select__native", compatibilityClass],
362
+ style: compatibilityStyle,
363
+ onInput(event) {
364
+ controllable.setValue(getNativeValue(event.currentTarget));
365
+ compatibilityOnInput?.(event);
366
+ },
367
+ onChange(event) {
368
+ compatibilityOnChange?.(event);
369
+ },
370
+ onInvalid(event) {
371
+ event.preventDefault();
372
+ triggerRef.value?.focus();
373
+ compatibilityOnInvalid?.(event);
374
+ }
375
+ };
279
376
  });
280
377
  const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
281
378
  const rootAttrs = computed(() => getRootAttrs({
@@ -284,30 +381,50 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
284
381
  "data-disabled": presence(control.disabled),
285
382
  "data-invalid": presence(control.invalid)
286
383
  }));
384
+ __expose({
385
+ nativeElement: nativeSelectRef,
386
+ focus: () => triggerRef.value?.focus()
387
+ });
287
388
  const _setTemplateRef = createTemplateRefSetter();
288
- const n25 = t5();
289
- const n11 = child(n25, 1);
290
- const n3 = child(n11);
291
- const n10 = next(n3, 1);
292
- const n9 = child(n10, 1);
293
- renderEffect(() => setDynamicProps(n25, [rootAttrs.value]));
294
- setInsertionState(n25, 0, 0);
295
- createIf(() => __props.name, () => {
389
+ const n26 = t5();
390
+ const n3 = child(n26);
391
+ const n12 = next(n3, 1);
392
+ const n4 = child(n12);
393
+ const n11 = next(n4, 1);
394
+ const n10 = child(n11, 1);
395
+ renderEffect(() => {
396
+ const _nativeInputAttrs = nativeInputAttrs.value;
397
+ const _control = unref(control);
398
+ setDynamicProps(n26, [rootAttrs.value]);
399
+ setDynamicProps(n3, [_nativeInputAttrs, {
400
+ name: __props.name,
401
+ form: _control.form ?? _nativeInputAttrs.form,
402
+ disabled: _control.disabled || void 0,
403
+ required: _control.required || void 0,
404
+ tabindex: "-1",
405
+ "aria-hidden": "true"
406
+ }]);
407
+ });
408
+ setInsertionState(n3, null, 1);
409
+ createFor(() => unref(visibleOptions), (_for_item0) => {
296
410
  const n2 = t0();
411
+ const x2 = txt(n2);
297
412
  renderEffect(() => {
298
- setProp(n2, "name", __props.name);
299
- setValue(n2, __props.modelValue ?? "");
300
- setProp(n2, "disabled", unref(control).disabled || void 0);
413
+ const _option = _for_item0.value;
414
+ setValue(n2, String(_option.value));
415
+ setProp(n2, "disabled", _option.disabled || void 0);
416
+ setText(x2, toDisplayString(_option.label));
301
417
  });
302
418
  return n2;
303
- });
304
- const x3 = txt(n3);
419
+ }, (option) => option.value, 8);
420
+ _setTemplateRef(n3, nativeSelectRef, null, "nativeSelectRef");
421
+ const x4 = txt(n4);
305
422
  renderEffect(() => {
306
423
  const _control = unref(control);
307
424
  const _getPartAttrs = unref(getPartAttrs);
308
425
  const _isOpen = unref(isOpen);
309
426
  const _control_disabled = _control.disabled;
310
- setDynamicProps(n11, [
427
+ setDynamicProps(n12, [
311
428
  { id: _control.id },
312
429
  _getPartAttrs("trigger", { class: "rp-select__trigger" }),
313
430
  {
@@ -328,14 +445,14 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
328
445
  tabindex: _control_disabled ? -1 : 0
329
446
  }
330
447
  ]);
331
- setDynamicProps(n3, [_getPartAttrs("value", { class: ["rp-select__value", { "rp-select__placeholder": !unref(hasValue) }] })]);
332
- setText(x3, toDisplayString(unref(displayLabel) || __props.placeholder));
333
- setDynamicProps(n10, [_getPartAttrs("indicator", { class: "rp-select__indicator" })]);
448
+ setDynamicProps(n4, [_getPartAttrs("value", { class: ["rp-select__value", { "rp-select__placeholder": !unref(hasValue) }] })]);
449
+ setText(x4, toDisplayString(unref(displayLabel) || __props.placeholder));
450
+ setDynamicProps(n11, [_getPartAttrs("indicator", { class: "rp-select__indicator" })]);
334
451
  });
335
- setInsertionState(n10, 0, 0);
452
+ setInsertionState(n11, 0, 0);
336
453
  createIf(() => unref(canClear), () => {
337
- const n7 = t1();
338
- renderEffect(() => setDynamicProps(n7, [
454
+ const n8 = t1();
455
+ renderEffect(() => setDynamicProps(n8, [
339
456
  { type: "button" },
340
457
  unref(getPartAttrs)("clear", { class: "rp-select__clear" }),
341
458
  {
@@ -343,74 +460,75 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
343
460
  tabindex: "-1"
344
461
  }
345
462
  ]));
346
- setInsertionState(n7, null, 0);
463
+ setInsertionState(n8, null, 0);
347
464
  createComponent(unref(x_default));
348
- n7.$evtmousedown = withVaporModifiers(() => {}, ["prevent"]);
349
- on(n7, "click", withModifiers((e) => unref(clearSelection)(e), ["stop"]));
350
- return n7;
465
+ n8.$evtmousedown = withVaporModifiers(() => {}, ["prevent"]);
466
+ on(n8, "click", withModifiers((e) => unref(clearSelection)(e), ["stop"]));
467
+ return n8;
351
468
  });
352
- setInsertionState(n9, null, 0);
469
+ setInsertionState(n10, null, 0);
353
470
  createComponent(unref(chevrons_up_down_default));
354
- n11.$evtclick = createInvoker((e) => unref(toggle)(e));
355
- n11.$evtkeydown = createInvoker((e) => unref(onTriggerKeydown)(e));
356
- _setTemplateRef(n11, triggerRef, null, "triggerRef");
357
- setInsertionState(n25, null, 2);
471
+ n12.$evtclick = createInvoker((e) => unref(toggle)(e));
472
+ n12.$evtkeydown = createInvoker((e) => unref(onTriggerKeydown)(e));
473
+ _setTemplateRef(n12, triggerRef, null, "triggerRef");
474
+ setInsertionState(n26, null, 2);
358
475
  createComponent(VaporTransition, { name: "rp-select-dropdown" }, extend(() => {
359
476
  return createIf(() => unref(isOpen), () => {
360
- const n23 = t3();
361
- renderEffect(() => setDynamicProps(n23, [unref(getPartAttrs)("content", { class: "rp-select__dropdown" }), {
477
+ const n24 = t3();
478
+ renderEffect(() => setDynamicProps(n24, [unref(getPartAttrs)("content", { class: "rp-select__dropdown" }), {
362
479
  role: "listbox",
363
480
  id: unref(listboxId),
364
481
  "data-state": unref(isOpen) ? "open" : "closed"
365
482
  }]));
366
- setInsertionState(n23, null, 0);
483
+ setInsertionState(n24, null, 0);
367
484
  createIf(() => unref(visibleOptions).length === 0, () => {
368
- const n19 = t3();
369
- renderEffect(() => setDynamicProps(n19, [unref(getPartAttrs)("empty", { class: "rp-select__empty" })]));
370
- setInsertionState(n19, null, 0);
485
+ const n20 = t3();
486
+ renderEffect(() => setDynamicProps(n20, [unref(getPartAttrs)("empty", { class: "rp-select__empty" })]));
487
+ setInsertionState(n20, null, 0);
371
488
  createSlot("empty", null, () => {
372
489
  return t2();
373
490
  }, 1);
374
- return n19;
491
+ return n20;
375
492
  });
376
- setInsertionState(n23, null, 1);
493
+ setInsertionState(n24, null, 1);
377
494
  createFor(() => unref(visibleOptions), (_for_item0, _for_key0) => {
378
- const n22 = t4();
379
- const x22 = txt(n22);
380
- n22.$evtclick = createInvoker(() => unref(selectOption)(_for_item0.value));
381
- on(n22, "mouseenter", () => unref(onOptionMouseenter)(_for_item0.value, _for_key0.value));
495
+ const n23 = t4();
496
+ const x23 = txt(n23);
497
+ n23.$evtclick = createInvoker(() => unref(selectOption)(_for_item0.value));
498
+ on(n23, "mouseenter", () => unref(onOptionMouseenter)(_for_item0.value, _for_key0.value));
382
499
  renderEffect(() => {
383
500
  const _index = _for_key0.value;
384
501
  const _option = _for_item0.value;
385
- const _modelValue = __props.modelValue;
502
+ const _controllable = unref(controllable);
386
503
  const _presence = unref(presence);
387
504
  const _focusedIndex = unref(focusedIndex);
388
505
  const _option_value = _option.value;
506
+ const _controllable_value = _controllable.value;
389
507
  const _option_disabled = _option.disabled;
390
- setDynamicProps(n22, [{
508
+ setDynamicProps(n23, [{
391
509
  role: "option",
392
510
  id: `${unref(selectId)}-option-${_index}`,
393
- "aria-selected": _option_value === _modelValue,
511
+ "aria-selected": _option_value === _controllable_value.value,
394
512
  "aria-disabled": _option_disabled || void 0,
395
- "data-selected": _presence(_option_value === _modelValue),
513
+ "data-selected": _presence(_option_value === _controllable_value.value),
396
514
  "data-highlighted": _presence(_index === _focusedIndex),
397
515
  "data-disabled": _presence(_option.disabled)
398
516
  }, unref(getPartAttrs)("option", { class: ["rp-select__option", {
399
- "rp-select__option--selected": _option_value === _modelValue,
517
+ "rp-select__option--selected": _option_value === _controllable_value.value,
400
518
  "rp-select__option--focused": _index === _focusedIndex,
401
519
  "rp-select__option--disabled": _option_disabled
402
520
  }] })]);
403
- setText(x22, toDisplayString(_option.label));
521
+ setText(x23, toDisplayString(_option.label));
404
522
  });
405
- return n22;
523
+ return n23;
406
524
  }, (option, index) => option.value, 8);
407
- return n23;
525
+ return n24;
408
526
  }, null, 129);
409
527
  }, { _: 8 }));
410
- _setTemplateRef(n25, selectRef, null, "selectRef");
411
- return n25;
528
+ _setTemplateRef(n26, selectRef, null, "selectRef");
529
+ return n26;
412
530
  }
413
- }), [["__scopeId", "data-v-e6060752"]]);
531
+ }), [["__scopeId", "data-v-5c4e4e6a"]]);
414
532
  //#endregion
415
533
  //#region src/components/select/types.ts
416
534
  var selectParts = [