@umbra.ui/core 0.1.0

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 (272) hide show
  1. package/dist/components/controls/Dropdown/types.d.ts +5 -0
  2. package/dist/components/controls/Dropdown/types.d.ts.map +1 -0
  3. package/dist/components/controls/Dropdown/types.js +1 -0
  4. package/dist/components/controls/SegmentedControl/types.d.ts +6 -0
  5. package/dist/components/controls/SegmentedControl/types.d.ts.map +1 -0
  6. package/dist/components/controls/SegmentedControl/types.js +1 -0
  7. package/dist/components/dialogs/Alert/types.d.ts +7 -0
  8. package/dist/components/dialogs/Alert/types.d.ts.map +1 -0
  9. package/dist/components/dialogs/Alert/types.js +1 -0
  10. package/dist/components/dialogs/Toast/types.d.ts +34 -0
  11. package/dist/components/dialogs/Toast/types.d.ts.map +1 -0
  12. package/dist/components/dialogs/Toast/types.js +10 -0
  13. package/dist/components/dialogs/Toast/useToast.d.ts +36 -0
  14. package/dist/components/dialogs/Toast/useToast.d.ts.map +1 -0
  15. package/dist/components/dialogs/Toast/useToast.js +90 -0
  16. package/dist/components/indicators/Tooltip/tooltip.d.ts +3 -0
  17. package/dist/components/indicators/Tooltip/tooltip.d.ts.map +1 -0
  18. package/dist/components/indicators/Tooltip/tooltip.js +33 -0
  19. package/dist/components/indicators/Tooltip/types.d.ts +14 -0
  20. package/dist/components/indicators/Tooltip/types.d.ts.map +1 -0
  21. package/dist/components/indicators/Tooltip/types.js +1 -0
  22. package/dist/components/indicators/Tooltip/useTooltip.d.ts +18 -0
  23. package/dist/components/indicators/Tooltip/useTooltip.d.ts.map +1 -0
  24. package/dist/components/indicators/Tooltip/useTooltip.js +57 -0
  25. package/dist/components/inputs/Tags/tag-bar-styles.d.ts +14 -0
  26. package/dist/components/inputs/Tags/tag-bar-styles.d.ts.map +1 -0
  27. package/dist/components/inputs/Tags/tag-bar-styles.js +313 -0
  28. package/dist/components/inputs/Tags/types.d.ts +93 -0
  29. package/dist/components/inputs/Tags/types.d.ts.map +1 -0
  30. package/dist/components/inputs/Tags/types.js +216 -0
  31. package/dist/components/inputs/search/types.d.ts +9 -0
  32. package/dist/components/inputs/search/types.d.ts.map +1 -0
  33. package/dist/components/inputs/search/types.js +1 -0
  34. package/dist/components/navigation/adaptive/types.d.ts +16 -0
  35. package/dist/components/navigation/adaptive/types.d.ts.map +1 -0
  36. package/dist/components/navigation/adaptive/types.js +1 -0
  37. package/dist/components/navigation/adaptive/useAdaptiveLayout.d.ts +27 -0
  38. package/dist/components/navigation/adaptive/useAdaptiveLayout.d.ts.map +1 -0
  39. package/dist/components/navigation/adaptive/useAdaptiveLayout.js +40 -0
  40. package/dist/components/navigation/adaptive/useBreakpoints.d.ts +6 -0
  41. package/dist/components/navigation/adaptive/useBreakpoints.d.ts.map +1 -0
  42. package/dist/components/navigation/adaptive/useBreakpoints.js +37 -0
  43. package/dist/components/navigation/adaptive/useContainerMonitor.d.ts +93 -0
  44. package/dist/components/navigation/adaptive/useContainerMonitor.d.ts.map +1 -0
  45. package/dist/components/navigation/adaptive/useContainerMonitor.js +145 -0
  46. package/dist/components/navigation/adaptive/useViewAnimation.d.ts +31 -0
  47. package/dist/components/navigation/adaptive/useViewAnimation.d.ts.map +1 -0
  48. package/dist/components/navigation/adaptive/useViewAnimation.js +591 -0
  49. package/dist/components/navigation/adaptive/useViewResize.d.ts +52 -0
  50. package/dist/components/navigation/adaptive/useViewResize.d.ts.map +1 -0
  51. package/dist/components/navigation/adaptive/useViewResize.js +146 -0
  52. package/dist/components/navigation/navstack/useNavigationStack.d.ts +25 -0
  53. package/dist/components/navigation/navstack/useNavigationStack.d.ts.map +1 -0
  54. package/dist/components/navigation/navstack/useNavigationStack.js +133 -0
  55. package/dist/components/navigation/slideover/useSlideoverController.d.ts +20 -0
  56. package/dist/components/navigation/slideover/useSlideoverController.d.ts.map +1 -0
  57. package/dist/components/navigation/slideover/useSlideoverController.js +267 -0
  58. package/dist/components/navigation/splitview/useSplitViewController.d.ts +20 -0
  59. package/dist/components/navigation/splitview/useSplitViewController.d.ts.map +1 -0
  60. package/dist/components/navigation/splitview/useSplitViewController.js +325 -0
  61. package/dist/components/navigation/tabcontroller/types.d.ts +21 -0
  62. package/dist/components/navigation/tabcontroller/types.d.ts.map +1 -0
  63. package/dist/components/navigation/tabcontroller/types.js +1 -0
  64. package/dist/components/navigation/tabcontroller/useTabController.d.ts +5 -0
  65. package/dist/components/navigation/tabcontroller/useTabController.d.ts.map +1 -0
  66. package/dist/components/navigation/tabcontroller/useTabController.js +10 -0
  67. package/dist/components/navigation/types.d.ts +8 -0
  68. package/dist/components/navigation/types.d.ts.map +1 -0
  69. package/dist/components/navigation/types.js +1 -0
  70. package/dist/components/pickers/CollectionPicker/types.d.ts +11 -0
  71. package/dist/components/pickers/CollectionPicker/types.d.ts.map +1 -0
  72. package/dist/components/pickers/CollectionPicker/types.js +1 -0
  73. package/dist/components/pickers/ColorPicker/colors.d.ts +13 -0
  74. package/dist/components/pickers/ColorPicker/colors.d.ts.map +1 -0
  75. package/dist/components/pickers/ColorPicker/colors.js +266 -0
  76. package/dist/components/pickers/FilePicker/types.d.ts +10 -0
  77. package/dist/components/pickers/FilePicker/types.d.ts.map +1 -0
  78. package/dist/components/pickers/FilePicker/types.js +1 -0
  79. package/dist/index.d.ts +91 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +196 -0
  82. package/dist/theme.d.ts +73 -0
  83. package/dist/theme.d.ts.map +1 -0
  84. package/dist/theme.js +279 -0
  85. package/dist/themes/blank.d.ts +7 -0
  86. package/dist/themes/blank.d.ts.map +1 -0
  87. package/dist/themes/blank.js +543 -0
  88. package/dist/themes/crimson-dark.d.ts +4 -0
  89. package/dist/themes/crimson-dark.d.ts.map +1 -0
  90. package/dist/themes/crimson-dark.js +552 -0
  91. package/dist/themes/cyan-light.d.ts +4 -0
  92. package/dist/themes/cyan-light.d.ts.map +1 -0
  93. package/dist/themes/cyan-light.js +552 -0
  94. package/dist/themes/dark.d.ts +4 -0
  95. package/dist/themes/dark.d.ts.map +1 -0
  96. package/dist/themes/dark.js +551 -0
  97. package/dist/themes/gold-dark.d.ts +4 -0
  98. package/dist/themes/gold-dark.d.ts.map +1 -0
  99. package/dist/themes/gold-dark.js +552 -0
  100. package/dist/themes/grass-dark.d.ts +4 -0
  101. package/dist/themes/grass-dark.d.ts.map +1 -0
  102. package/dist/themes/grass-dark.js +552 -0
  103. package/dist/themes/indigo.d.ts +4 -0
  104. package/dist/themes/indigo.d.ts.map +1 -0
  105. package/dist/themes/indigo.js +552 -0
  106. package/dist/themes/light.d.ts +4 -0
  107. package/dist/themes/light.d.ts.map +1 -0
  108. package/dist/themes/light.js +551 -0
  109. package/dist/themes/orange-dark.d.ts +4 -0
  110. package/dist/themes/orange-dark.d.ts.map +1 -0
  111. package/dist/themes/orange-dark.js +551 -0
  112. package/dist/themes/orange-light.d.ts +4 -0
  113. package/dist/themes/orange-light.d.ts.map +1 -0
  114. package/dist/themes/orange-light.js +551 -0
  115. package/package.json +62 -0
  116. package/src/components/controls/Button/Button.vue +417 -0
  117. package/src/components/controls/Button/README.md +348 -0
  118. package/src/components/controls/Button/theme.css +200 -0
  119. package/src/components/controls/Checkbox/Checkbox.vue +164 -0
  120. package/src/components/controls/Checkbox/README.md +441 -0
  121. package/src/components/controls/Checkbox/theme.css +36 -0
  122. package/src/components/controls/Dropdown/Dropdown.vue +476 -0
  123. package/src/components/controls/Dropdown/README.md +370 -0
  124. package/src/components/controls/Dropdown/theme.css +50 -0
  125. package/src/components/controls/Dropdown/types.ts +6 -0
  126. package/src/components/controls/IconButton/IconButton.vue +267 -0
  127. package/src/components/controls/IconButton/README.md +502 -0
  128. package/src/components/controls/IconButton/theme.css +89 -0
  129. package/src/components/controls/Radio/README.md +591 -0
  130. package/src/components/controls/Radio/Radio.vue +89 -0
  131. package/src/components/controls/Radio/theme.css +14 -0
  132. package/src/components/controls/RangeSlider/README.md +608 -0
  133. package/src/components/controls/RangeSlider/RangeSlider.vue +535 -0
  134. package/src/components/controls/RangeSlider/theme.css +80 -0
  135. package/src/components/controls/SegmentedControl/README.md +587 -0
  136. package/src/components/controls/SegmentedControl/SegmentedControl.vue +284 -0
  137. package/src/components/controls/SegmentedControl/theme.css +60 -0
  138. package/src/components/controls/SegmentedControl/types.ts +5 -0
  139. package/src/components/controls/Slider/README.md +627 -0
  140. package/src/components/controls/Slider/Slider.vue +260 -0
  141. package/src/components/controls/Slider/theme.css +74 -0
  142. package/src/components/controls/Stepper/README.md +601 -0
  143. package/src/components/controls/Stepper/Stepper.vue +103 -0
  144. package/src/components/controls/Stepper/theme.css +53 -0
  145. package/src/components/controls/Switch/README.md +667 -0
  146. package/src/components/controls/Switch/Switch.vue +127 -0
  147. package/src/components/controls/Switch/theme.css +42 -0
  148. package/src/components/dialogs/Alert/Alert.vue +218 -0
  149. package/src/components/dialogs/Alert/README.md +450 -0
  150. package/src/components/dialogs/Alert/theme.css +44 -0
  151. package/src/components/dialogs/Alert/types.ts +11 -0
  152. package/src/components/dialogs/Toast/README.md +522 -0
  153. package/src/components/dialogs/Toast/Toast.vue +296 -0
  154. package/src/components/dialogs/Toast/ToastContainer.vue +330 -0
  155. package/src/components/dialogs/Toast/theme.css +44 -0
  156. package/src/components/dialogs/Toast/types.ts +46 -0
  157. package/src/components/dialogs/Toast/useToast.ts +127 -0
  158. package/src/components/indicators/ProgressBar/ProgressBar.vue +98 -0
  159. package/src/components/indicators/ProgressBar/README.md +744 -0
  160. package/src/components/indicators/ProgressBar/theme.css +36 -0
  161. package/src/components/indicators/Tooltip/README.md +723 -0
  162. package/src/components/indicators/Tooltip/TooltipProvider.vue +142 -0
  163. package/src/components/indicators/Tooltip/theme.css +18 -0
  164. package/src/components/indicators/Tooltip/tooltip.ts +48 -0
  165. package/src/components/indicators/Tooltip/types.ts +15 -0
  166. package/src/components/indicators/Tooltip/useTooltip.ts +71 -0
  167. package/src/components/inputs/AutogrowTextView/AutogrowTextView.vue +110 -0
  168. package/src/components/inputs/AutogrowTextView/README.md +643 -0
  169. package/src/components/inputs/AutogrowTextView/theme.css +28 -0
  170. package/src/components/inputs/InputCard/InputCard.vue +600 -0
  171. package/src/components/inputs/InputCard/README.md +636 -0
  172. package/src/components/inputs/InputEmail/InputEmail.vue +698 -0
  173. package/src/components/inputs/InputEmail/README.md +764 -0
  174. package/src/components/inputs/InputNumber/InputNumber.vue +300 -0
  175. package/src/components/inputs/InputNumber/README.md +749 -0
  176. package/src/components/inputs/InputPhone/InputPhone.vue +645 -0
  177. package/src/components/inputs/InputPhone/README.md +636 -0
  178. package/src/components/inputs/InputSecure/InputSecure.vue +646 -0
  179. package/src/components/inputs/InputSecure/README.md +771 -0
  180. package/src/components/inputs/InputText/InputText.vue +225 -0
  181. package/src/components/inputs/InputText/README.md +844 -0
  182. package/src/components/inputs/OTP/OTP.vue +349 -0
  183. package/src/components/inputs/OTP/README.md +736 -0
  184. package/src/components/inputs/OTP/theme.css +50 -0
  185. package/src/components/inputs/StringCapture/README.md +718 -0
  186. package/src/components/inputs/StringCapture/StringCapture.vue +315 -0
  187. package/src/components/inputs/StringCapture/theme.css +86 -0
  188. package/src/components/inputs/Tags/README.md +897 -0
  189. package/src/components/inputs/Tags/TagBar.vue +793 -0
  190. package/src/components/inputs/Tags/TagCreation.vue +219 -0
  191. package/src/components/inputs/Tags/TagPicker.vue +380 -0
  192. package/src/components/inputs/Tags/tag-bar-styles.ts +354 -0
  193. package/src/components/inputs/Tags/theme.css +121 -0
  194. package/src/components/inputs/Tags/types.ts +346 -0
  195. package/src/components/inputs/search/README.md +759 -0
  196. package/src/components/inputs/search/SearchBar.vue +394 -0
  197. package/src/components/inputs/search/SearchResults.vue +310 -0
  198. package/src/components/inputs/search/theme.css +187 -0
  199. package/src/components/inputs/search/types.ts +8 -0
  200. package/src/components/inputs/theme.css +102 -0
  201. package/src/components/menus/ActionMenu/ActionMenu.vue +383 -0
  202. package/src/components/menus/ActionMenu/README.md +825 -0
  203. package/src/components/menus/ActionMenu/theme.css +93 -0
  204. package/src/components/models/Popover/Popover.vue +551 -0
  205. package/src/components/models/Popover/README.md +885 -0
  206. package/src/components/models/Popover/theme.css +52 -0
  207. package/src/components/models/Sheet/README.md +1159 -0
  208. package/src/components/models/Sheet/Sheet.vue +465 -0
  209. package/src/components/models/Sheet/theme.css +72 -0
  210. package/src/components/models/Sidebar/README.md +1228 -0
  211. package/src/components/models/Sidebar/Sidebar.vue +480 -0
  212. package/src/components/models/Sidebar/theme.css +90 -0
  213. package/src/components/navigation/adaptive/AdaptiveLayout.vue +779 -0
  214. package/src/components/navigation/adaptive/AdaptiveLayoutBreadcrumbs.vue +192 -0
  215. package/src/components/navigation/adaptive/AdaptiveLayoutMenuButton.vue +149 -0
  216. package/src/components/navigation/adaptive/README.md +768 -0
  217. package/src/components/navigation/adaptive/types.ts +19 -0
  218. package/src/components/navigation/adaptive/useAdaptiveLayout.ts +89 -0
  219. package/src/components/navigation/adaptive/useBreakpoints.ts +41 -0
  220. package/src/components/navigation/adaptive/useContainerMonitor.ts +214 -0
  221. package/src/components/navigation/adaptive/useViewAnimation.ts +721 -0
  222. package/src/components/navigation/adaptive/useViewResize.ts +211 -0
  223. package/src/components/navigation/navstack/NavigationStack.vue +180 -0
  224. package/src/components/navigation/navstack/README.md +994 -0
  225. package/src/components/navigation/navstack/useNavigationStack.ts +164 -0
  226. package/src/components/navigation/slideover/README.md +1275 -0
  227. package/src/components/navigation/slideover/SlideoverController.vue +287 -0
  228. package/src/components/navigation/slideover/useSlideoverController.ts +320 -0
  229. package/src/components/navigation/splitview/README.md +1115 -0
  230. package/src/components/navigation/splitview/SplitViewController.vue +176 -0
  231. package/src/components/navigation/splitview/useSplitViewController.ts +388 -0
  232. package/src/components/navigation/tabcontroller/README.md +919 -0
  233. package/src/components/navigation/tabcontroller/TabController.vue +307 -0
  234. package/src/components/navigation/tabcontroller/TabItem.vue +57 -0
  235. package/src/components/navigation/tabcontroller/types.ts +24 -0
  236. package/src/components/navigation/tabcontroller/useTabController.ts +18 -0
  237. package/src/components/navigation/theme.css +91 -0
  238. package/src/components/navigation/types.ts +7 -0
  239. package/src/components/pickers/CollectionPicker/CollectionPicker.vue +398 -0
  240. package/src/components/pickers/CollectionPicker/README.md +1115 -0
  241. package/src/components/pickers/CollectionPicker/theme.css +14 -0
  242. package/src/components/pickers/CollectionPicker/types.ts +11 -0
  243. package/src/components/pickers/ColorPicker/ColorPicker.vue +376 -0
  244. package/src/components/pickers/ColorPicker/README.md +1439 -0
  245. package/src/components/pickers/ColorPicker/colors.ts +299 -0
  246. package/src/components/pickers/ColorPicker/theme.css +32 -0
  247. package/src/components/pickers/DatePicker/DatePicker.vue +660 -0
  248. package/src/components/pickers/DatePicker/README.md +1195 -0
  249. package/src/components/pickers/DatePicker/theme.css +22 -0
  250. package/src/components/pickers/FilePicker/FilePicker.vue +534 -0
  251. package/src/components/pickers/FilePicker/README.md +1542 -0
  252. package/src/components/pickers/FilePicker/theme.css +48 -0
  253. package/src/components/pickers/FilePicker/types.ts +10 -0
  254. package/src/components/pickers/IconPicker/IconPicker.vue +327 -0
  255. package/src/components/pickers/IconPicker/README.md +1161 -0
  256. package/src/components/pickers/IconPicker/theme.css +28 -0
  257. package/src/components/pickers/theme.css +82 -0
  258. package/src/components/views/MarkdownViewer/MarkdownViewer.vue +442 -0
  259. package/src/components/views/MarkdownViewer/README.md +833 -0
  260. package/src/components/views/MarkdownViewer/theme.css +130 -0
  261. package/src/index.ts +263 -0
  262. package/src/theme.ts +378 -0
  263. package/src/themes/crimson-dark.ts +556 -0
  264. package/src/themes/cyan-light.ts +556 -0
  265. package/src/themes/dark.ts +557 -0
  266. package/src/themes/gold-dark.ts +556 -0
  267. package/src/themes/grass-dark.ts +556 -0
  268. package/src/themes/indigo.ts +556 -0
  269. package/src/themes/light.ts +557 -0
  270. package/src/themes/orange-dark.ts +557 -0
  271. package/src/themes/orange-light.ts +557 -0
  272. package/src/vue.d.ts +45 -0
@@ -0,0 +1,608 @@
1
+ # RangeSlider
2
+
3
+ A dual-thumb range slider component built with Vue 3 Composition API and TypeScript. The RangeSlider component provides an intuitive interface for selecting a range of values with customizable styles, tick marks, and interactive HUDs.
4
+
5
+ ## Installation/Import
6
+
7
+ ```typescript
8
+ import { RangeSlider } from "@umbra-ui/core";
9
+ ```
10
+
11
+ **Dependencies:**
12
+
13
+ - Vue 3.x
14
+
15
+ ## Basic Usage
16
+
17
+ ```vue
18
+ <script setup lang="ts">
19
+ import { ref } from "vue";
20
+ import { RangeSlider } from "@umbra-ui/core";
21
+
22
+ const minValue = ref(25);
23
+ const maxValue = ref(75);
24
+
25
+ const handleMinValueChange = (value: number) => {
26
+ console.log("Min value changed:", value);
27
+ minValue.value = value;
28
+ };
29
+
30
+ const handleMaxValueChange = (value: number) => {
31
+ console.log("Max value changed:", value);
32
+ maxValue.value = value;
33
+ };
34
+ </script>
35
+
36
+ <template>
37
+ <RangeSlider
38
+ :min="0"
39
+ :max="100"
40
+ :min-value="minValue"
41
+ :max-value="maxValue"
42
+ @update:min-value="handleMinValueChange"
43
+ @update:max-value="handleMaxValueChange"
44
+ />
45
+ </template>
46
+ ```
47
+
48
+ ## Props
49
+
50
+ | Prop Name | Type | Required | Default | Description |
51
+ | ---------------- | ------------------------------------- | -------- | ----------- | ------------------------------------------ |
52
+ | `sliderStyle` | `"default" \| "capline" \| "capsule"` | No | `"default"` | Visual style variant of the slider |
53
+ | `min` | `number` | No | `0` | Minimum value of the slider range |
54
+ | `max` | `number` | No | `100` | Maximum value of the slider range |
55
+ | `minValue` | `number` | Yes | `25` | Current minimum selected value |
56
+ | `maxValue` | `number` | Yes | `75` | Current maximum selected value |
57
+ | `tickInterval` | `number` | No | `10` | Interval between tick marks (0 to disable) |
58
+ | `showTickLabels` | `boolean` | No | `false` | Whether to show labels below tick marks |
59
+
60
+ ### Slider Styles
61
+
62
+ - **`default`**: Standard slider with circular thumbs and a filled track
63
+ - **`capline`**: Capsule-style slider with pill-shaped thumbs
64
+ - **`capsule`**: Full capsule design with bordered track and rounded thumbs
65
+
66
+ ## Events
67
+
68
+ | Event Name | Payload Type | Description |
69
+ | ----------------- | ------------ | -------------------------------------- |
70
+ | `update:minValue` | `number` | Emitted when the minimum value changes |
71
+ | `update:maxValue` | `number` | Emitted when the maximum value changes |
72
+
73
+ ### Event Examples
74
+
75
+ ```vue
76
+ <script setup lang="ts">
77
+ import { ref } from "vue";
78
+ import { RangeSlider } from "@umbra-ui/core";
79
+
80
+ const minValue = ref(20);
81
+ const maxValue = ref(80);
82
+
83
+ const handleMinValueChange = (value: number) => {
84
+ console.log("Min value updated:", value);
85
+ minValue.value = value;
86
+ };
87
+
88
+ const handleMaxValueChange = (value: number) => {
89
+ console.log("Max value updated:", value);
90
+ maxValue.value = value;
91
+ };
92
+ </script>
93
+
94
+ <template>
95
+ <RangeSlider
96
+ :min="0"
97
+ :max="100"
98
+ :min-value="minValue"
99
+ :max-value="maxValue"
100
+ @update:min-value="handleMinValueChange"
101
+ @update:max-value="handleMaxValueChange"
102
+ />
103
+ </template>
104
+ ```
105
+
106
+ ## Slots
107
+
108
+ This component does not use slots. All content is controlled via props.
109
+
110
+ ## Exposed Methods/Refs
111
+
112
+ This component does not expose any methods or refs via `defineExpose`.
113
+
114
+ ## CSS Customization
115
+
116
+ The RangeSlider component uses CSS custom properties that can be overridden to customize the appearance:
117
+
118
+ ### Color Variables
119
+
120
+ ```css
121
+ /* RangeSlider label colors */
122
+ --rangeslider-label-color: #1a1d23;
123
+
124
+ /* RangeSlider track colors */
125
+ --rangeslider-track-default-bg: #cecece;
126
+ --rangeslider-track-capsule-border: #0090ff;
127
+ --rangeslider-track-capline-bg: #e3e5e8;
128
+
129
+ /* RangeSlider thumb colors */
130
+ --rangeslider-thumb-default-bg: #838383;
131
+ --rangeslider-thumb-capsule-bg: #838383;
132
+ --rangeslider-thumb-capsule-border: white;
133
+ --rangeslider-thumb-capline-bg: #838383;
134
+
135
+ /* RangeSlider progress colors */
136
+ --rangeslider-progress-default-bg: #0090ff;
137
+ --rangeslider-progress-capsule-bg: #acd8fc;
138
+ --rangeslider-progress-capsule-border-top: white;
139
+ --rangeslider-progress-capsule-border-bottom: white;
140
+ --rangeslider-progress-capline-bg: #0090ff;
141
+
142
+ /* RangeSlider HUD colors */
143
+ --rangeslider-hud-default-bg: #8b8d98;
144
+ --rangeslider-hud-default-text: #ffffff;
145
+ --rangeslider-hud-capsule-bg: #0090ff;
146
+ --rangeslider-hud-capsule-text: #ffffff;
147
+ --rangeslider-hud-capline-bg: #8b8d98;
148
+ --rangeslider-hud-capline-text: #ffffff;
149
+
150
+ /* RangeSlider tick colors */
151
+ --rangeslider-tick-color: #bbbbbb;
152
+
153
+ /* RangeSlider tick label colors */
154
+ --rangeslider-tick-label-color: #8b8d98;
155
+ --rangeslider-tick-label-opacity: 0.8;
156
+ ```
157
+
158
+ ### Custom Styling Example
159
+
160
+ ```vue
161
+ <template>
162
+ <RangeSlider
163
+ :min="0"
164
+ :max="100"
165
+ :min-value="minValue"
166
+ :max-value="maxValue"
167
+ class="custom-range-slider"
168
+ />
169
+ </template>
170
+
171
+ <style>
172
+ .custom-range-slider {
173
+ --rangeslider-progress-default-bg: #ff6b6b;
174
+ --rangeslider-thumb-default-bg: #ff5252;
175
+ --rangeslider-hud-default-bg: #ff6b6b;
176
+ }
177
+ </style>
178
+ ```
179
+
180
+ ## Examples
181
+
182
+ ### Basic Range Slider
183
+
184
+ ```vue
185
+ <script setup lang="ts">
186
+ import { ref } from "vue";
187
+ import { RangeSlider } from "@umbra-ui/core";
188
+
189
+ const minValue = ref(30);
190
+ const maxValue = ref(70);
191
+ </script>
192
+
193
+ <template>
194
+ <RangeSlider
195
+ :min="0"
196
+ :max="100"
197
+ :min-value="minValue"
198
+ :max-value="maxValue"
199
+ @update:min-value="(value) => (minValue = value)"
200
+ @update:max-value="(value) => (maxValue = value)"
201
+ />
202
+ </template>
203
+ ```
204
+
205
+ ### Different Slider Styles
206
+
207
+ ```vue
208
+ <script setup lang="ts">
209
+ import { ref } from "vue";
210
+ import { RangeSlider } from "@umbra-ui/core";
211
+
212
+ const defaultMin = ref(20);
213
+ const defaultMax = ref(80);
214
+ const caplineMin = ref(25);
215
+ const caplineMax = ref(75);
216
+ const capsuleMin = ref(30);
217
+ const capsuleMax = ref(70);
218
+ </script>
219
+
220
+ <template>
221
+ <div class="style-examples">
222
+ <div class="example">
223
+ <h3>Default Style</h3>
224
+ <RangeSlider
225
+ :min="0"
226
+ :max="100"
227
+ :min-value="defaultMin"
228
+ :max-value="defaultMax"
229
+ slider-style="default"
230
+ @update:min-value="(value) => (defaultMin = value)"
231
+ @update:max-value="(value) => (defaultMax = value)"
232
+ />
233
+ </div>
234
+
235
+ <div class="example">
236
+ <h3>Capline Style</h3>
237
+ <RangeSlider
238
+ :min="0"
239
+ :max="100"
240
+ :min-value="caplineMin"
241
+ :max-value="caplineMax"
242
+ slider-style="capline"
243
+ @update:min-value="(value) => (caplineMin = value)"
244
+ @update:max-value="(value) => (caplineMax = value)"
245
+ />
246
+ </div>
247
+
248
+ <div class="example">
249
+ <h3>Capsule Style</h3>
250
+ <RangeSlider
251
+ :min="0"
252
+ :max="100"
253
+ :min-value="capsuleMin"
254
+ :max-value="capsuleMax"
255
+ slider-style="capsule"
256
+ @update:min-value="(value) => (capsuleMin = value)"
257
+ @update:max-value="(value) => (capsuleMax = value)"
258
+ />
259
+ </div>
260
+ </div>
261
+ </template>
262
+
263
+ <style module>
264
+ .style-examples {
265
+ display: flex;
266
+ flex-direction: column;
267
+ gap: 2rem;
268
+ }
269
+
270
+ .example {
271
+ display: flex;
272
+ flex-direction: column;
273
+ gap: 1rem;
274
+ }
275
+ </style>
276
+ ```
277
+
278
+ ### With Tick Marks and Labels
279
+
280
+ ```vue
281
+ <script setup lang="ts">
282
+ import { ref } from "vue";
283
+ import { RangeSlider } from "@umbra-ui/core";
284
+
285
+ const minValue = ref(20);
286
+ const maxValue = ref(80);
287
+ </script>
288
+
289
+ <template>
290
+ <div class="tick-examples">
291
+ <div class="example">
292
+ <h3>With Tick Marks</h3>
293
+ <RangeSlider
294
+ :min="0"
295
+ :max="100"
296
+ :min-value="minValue"
297
+ :max-value="maxValue"
298
+ :tick-interval="10"
299
+ @update:min-value="(value) => (minValue = value)"
300
+ @update:max-value="(value) => (maxValue = value)"
301
+ />
302
+ </div>
303
+
304
+ <div class="example">
305
+ <h3>With Tick Labels</h3>
306
+ <RangeSlider
307
+ :min="0"
308
+ :max="100"
309
+ :min-value="minValue"
310
+ :max-value="maxValue"
311
+ :tick-interval="20"
312
+ :show-tick-labels="true"
313
+ @update:min-value="(value) => (minValue = value)"
314
+ @update:max-value="(value) => (maxValue = value)"
315
+ />
316
+ </div>
317
+ </div>
318
+ </template>
319
+
320
+ <style module>
321
+ .tick-examples {
322
+ display: flex;
323
+ flex-direction: column;
324
+ gap: 2rem;
325
+ }
326
+
327
+ .example {
328
+ display: flex;
329
+ flex-direction: column;
330
+ gap: 1rem;
331
+ }
332
+ </style>
333
+ ```
334
+
335
+ ### Price Range Selector
336
+
337
+ ```vue
338
+ <script setup lang="ts">
339
+ import { ref } from "vue";
340
+ import { RangeSlider } from "@umbra-ui/core";
341
+
342
+ const minPrice = ref(50);
343
+ const maxPrice = ref(500);
344
+
345
+ const formatPrice = (value: number) => {
346
+ return `$${value}`;
347
+ };
348
+ </script>
349
+
350
+ <template>
351
+ <div class="price-range">
352
+ <h3>Price Range</h3>
353
+ <div class="price-display">
354
+ <span>{{ formatPrice(minPrice) }}</span>
355
+ <span>to</span>
356
+ <span>{{ formatPrice(maxPrice) }}</span>
357
+ </div>
358
+
359
+ <RangeSlider
360
+ :min="0"
361
+ :max="1000"
362
+ :min-value="minPrice"
363
+ :max-value="maxPrice"
364
+ :tick-interval="100"
365
+ :show-tick-labels="true"
366
+ @update:min-value="(value) => (minPrice = value)"
367
+ @update:max-value="(value) => (maxPrice = value)"
368
+ />
369
+ </div>
370
+ </template>
371
+
372
+ <style module>
373
+ .price-range {
374
+ display: flex;
375
+ flex-direction: column;
376
+ gap: 1rem;
377
+ max-width: 400px;
378
+ }
379
+
380
+ .price-display {
381
+ display: flex;
382
+ align-items: center;
383
+ gap: 0.5rem;
384
+ font-weight: 500;
385
+ }
386
+ </style>
387
+ ```
388
+
389
+ ### Form Integration
390
+
391
+ ```vue
392
+ <script setup lang="ts">
393
+ import { ref } from "vue";
394
+ import { RangeSlider } from "@umbra-ui/core";
395
+
396
+ interface FilterData {
397
+ ageRange: { min: number; max: number };
398
+ salaryRange: { min: number; max: number };
399
+ experienceRange: { min: number; max: number };
400
+ }
401
+
402
+ const filters = ref<FilterData>({
403
+ ageRange: { min: 25, max: 65 },
404
+ salaryRange: { min: 30000, max: 150000 },
405
+ experienceRange: { min: 0, max: 20 },
406
+ });
407
+
408
+ const applyFilters = () => {
409
+ console.log("Applied filters:", filters.value);
410
+ };
411
+ </script>
412
+
413
+ <template>
414
+ <form class="filter-form" @submit.prevent="applyFilters">
415
+ <div class="filter-group">
416
+ <label>Age Range</label>
417
+ <div class="range-display">
418
+ {{ filters.ageRange.min }} - {{ filters.ageRange.max }} years
419
+ </div>
420
+ <RangeSlider
421
+ :min="18"
422
+ :max="80"
423
+ :min-value="filters.ageRange.min"
424
+ :max-value="filters.ageRange.max"
425
+ :tick-interval="10"
426
+ @update:min-value="(value) => (filters.ageRange.min = value)"
427
+ @update:max-value="(value) => (filters.ageRange.max = value)"
428
+ />
429
+ </div>
430
+
431
+ <div class="filter-group">
432
+ <label>Salary Range</label>
433
+ <div class="range-display">
434
+ ${{ filters.salaryRange.min.toLocaleString() }} - ${{
435
+ filters.salaryRange.max.toLocaleString()
436
+ }}
437
+ </div>
438
+ <RangeSlider
439
+ :min="20000"
440
+ :max="200000"
441
+ :min-value="filters.salaryRange.min"
442
+ :max-value="filters.salaryRange.max"
443
+ :tick-interval="20000"
444
+ @update:min-value="(value) => (filters.salaryRange.min = value)"
445
+ @update:max-value="(value) => (filters.salaryRange.max = value)"
446
+ />
447
+ </div>
448
+
449
+ <div class="filter-group">
450
+ <label>Experience Range</label>
451
+ <div class="range-display">
452
+ {{ filters.experienceRange.min }} -
453
+ {{ filters.experienceRange.max }} years
454
+ </div>
455
+ <RangeSlider
456
+ :min="0"
457
+ :max="30"
458
+ :min-value="filters.experienceRange.min"
459
+ :max-value="filters.experienceRange.max"
460
+ :tick-interval="5"
461
+ @update:min-value="(value) => (filters.experienceRange.min = value)"
462
+ @update:max-value="(value) => (filters.experienceRange.max = value)"
463
+ />
464
+ </div>
465
+
466
+ <button type="submit">Apply Filters</button>
467
+ </form>
468
+ </template>
469
+
470
+ <style module>
471
+ .filter-form {
472
+ display: flex;
473
+ flex-direction: column;
474
+ gap: 2rem;
475
+ max-width: 500px;
476
+ }
477
+
478
+ .filter-group {
479
+ display: flex;
480
+ flex-direction: column;
481
+ gap: 0.5rem;
482
+ }
483
+
484
+ .range-display {
485
+ font-weight: 500;
486
+ color: #666;
487
+ }
488
+ </style>
489
+ ```
490
+
491
+ ### Audio/Video Controls
492
+
493
+ ```vue
494
+ <script setup lang="ts">
495
+ import { ref } from "vue";
496
+ import { RangeSlider } from "@umbra-ui/core";
497
+
498
+ const volumeRange = ref({ min: 20, max: 80 });
499
+ const frequencyRange = ref({ min: 100, max: 10000 });
500
+
501
+ const formatVolume = (value: number) => {
502
+ return `${value}%`;
503
+ };
504
+
505
+ const formatFrequency = (value: number) => {
506
+ if (value >= 1000) {
507
+ return `${(value / 1000).toFixed(1)}kHz`;
508
+ }
509
+ return `${value}Hz`;
510
+ };
511
+ </script>
512
+
513
+ <template>
514
+ <div class="audio-controls">
515
+ <h3>Audio Controls</h3>
516
+
517
+ <div class="control-group">
518
+ <label>Volume Range</label>
519
+ <div class="value-display">
520
+ {{ formatVolume(volumeRange.min) }} -
521
+ {{ formatVolume(volumeRange.max) }}
522
+ </div>
523
+ <RangeSlider
524
+ :min="0"
525
+ :max="100"
526
+ :min-value="volumeRange.min"
527
+ :max-value="volumeRange.max"
528
+ :tick-interval="10"
529
+ slider-style="capline"
530
+ @update:min-value="(value) => (volumeRange.min = value)"
531
+ @update:max-value="(value) => (volumeRange.max = value)"
532
+ />
533
+ </div>
534
+
535
+ <div class="control-group">
536
+ <label>Frequency Range</label>
537
+ <div class="value-display">
538
+ {{ formatFrequency(frequencyRange.min) }} -
539
+ {{ formatFrequency(frequencyRange.max) }}
540
+ </div>
541
+ <RangeSlider
542
+ :min="20"
543
+ :max="20000"
544
+ :min-value="frequencyRange.min"
545
+ :max-value="frequencyRange.max"
546
+ :tick-interval="1000"
547
+ :show-tick-labels="true"
548
+ slider-style="capsule"
549
+ @update:min-value="(value) => (frequencyRange.min = value)"
550
+ @update:max-value="(value) => (frequencyRange.max = value)"
551
+ />
552
+ </div>
553
+ </div>
554
+ </template>
555
+
556
+ <style module>
557
+ .audio-controls {
558
+ display: flex;
559
+ flex-direction: column;
560
+ gap: 2rem;
561
+ max-width: 500px;
562
+ }
563
+
564
+ .control-group {
565
+ display: flex;
566
+ flex-direction: column;
567
+ gap: 0.5rem;
568
+ }
569
+
570
+ .value-display {
571
+ font-weight: 500;
572
+ color: #666;
573
+ font-family: monospace;
574
+ }
575
+ </style>
576
+ ```
577
+
578
+ ## Interactive Features
579
+
580
+ ### HUD (Heads-Up Display)
581
+
582
+ - Value tooltips appear above thumbs when dragging
583
+ - Automatically hide after 500ms when interaction ends
584
+ - Show current rounded values for easy reading
585
+
586
+ ### Smart Thumb Selection
587
+
588
+ - Automatically selects the closest thumb when clicking on the track
589
+ - Handles overlapping thumbs intelligently
590
+ - Prevents min value from exceeding max value and vice versa
591
+
592
+ ### Touch Support
593
+
594
+ - Full touch device support with proper event handling
595
+ - Smooth dragging experience on mobile devices
596
+ - Prevents default touch behaviors for better control
597
+
598
+ ## Notes
599
+
600
+ - The component includes smooth animations and transitions
601
+ - HUD tooltips show rounded values for better readability
602
+ - Active thumb is visually highlighted and appears on top
603
+ - Tick marks are automatically generated based on the interval
604
+ - The component supports both light and dark themes
605
+ - All interactions are fully accessible with proper event handling
606
+ - The slider automatically constrains values within the min/max range
607
+ - Touch and mouse events are both supported for cross-platform compatibility
608
+ - The component uses percentage-based positioning for smooth value interpolation