@youcan/celeste 0.6.3

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 (419) hide show
  1. package/LICENSE +9 -0
  2. package/dist/celeste.css +3564 -0
  3. package/dist/cjs/alert.js +111 -0
  4. package/dist/cjs/alpha-slider.js +3 -0
  5. package/dist/cjs/badge.js +55 -0
  6. package/dist/cjs/button.js +39 -0
  7. package/dist/cjs/checkbox.js +3 -0
  8. package/dist/cjs/chunks/_plugin-vue_export-helper.js +9 -0
  9. package/dist/cjs/chunks/alpha-slider.js +127 -0
  10. package/dist/cjs/chunks/checkbox.vue_vue_type_style_index_0_lang.js +38 -0
  11. package/dist/cjs/chunks/clsx.js +15 -0
  12. package/dist/cjs/chunks/content-divider.vue_vue_type_style_index_0_lang.js +52 -0
  13. package/dist/cjs/chunks/dropdown-menu-content.vue_vue_type_style_index_0_lang.js +51 -0
  14. package/dist/cjs/chunks/dropdown-menu-sub-content.vue_vue_type_style_index_0_lang.js +49 -0
  15. package/dist/cjs/chunks/dropdown-menu-sub-trigger.vue_vue_type_style_index_0_lang.js +32 -0
  16. package/dist/cjs/chunks/dropdown-menu-sub.js +25 -0
  17. package/dist/cjs/chunks/index.js +9056 -0
  18. package/dist/cjs/chunks/modal-close.js +22 -0
  19. package/dist/cjs/chunks/modal-trigger.js +22 -0
  20. package/dist/cjs/chunks/modal.js +26 -0
  21. package/dist/cjs/chunks/popover.js +26 -0
  22. package/dist/cjs/chunks/scroll-area.js +41 -0
  23. package/dist/cjs/chunks/select-group.js +22 -0
  24. package/dist/cjs/chunks/select.js +38 -0
  25. package/dist/cjs/chunks/slider.vue_vue_type_style_index_0_lang.js +52 -0
  26. package/dist/cjs/chunks/switch.vue_vue_type_style_index_0_lang.js +38 -0
  27. package/dist/cjs/chunks/use-color-model.js +992 -0
  28. package/dist/cjs/color-area.js +175 -0
  29. package/dist/cjs/color-picker.js +515 -0
  30. package/dist/cjs/color-swatch.js +59 -0
  31. package/dist/cjs/color.js +102 -0
  32. package/dist/cjs/command-group.js +41 -0
  33. package/dist/cjs/command-input.js +45 -0
  34. package/dist/cjs/command-item.js +34 -0
  35. package/dist/cjs/command-list.js +52 -0
  36. package/dist/cjs/command-root.js +45 -0
  37. package/dist/cjs/command-separator.js +32 -0
  38. package/dist/cjs/compact-button.js +42 -0
  39. package/dist/cjs/content-divider.js +3 -0
  40. package/dist/cjs/context-menu-item.js +134 -0
  41. package/dist/cjs/crypto.js +8 -0
  42. package/dist/cjs/dropdown-item.js +99 -0
  43. package/dist/cjs/dropdown-menu-content.js +3 -0
  44. package/dist/cjs/dropdown-menu-group.js +24 -0
  45. package/dist/cjs/dropdown-menu-item.js +68 -0
  46. package/dist/cjs/dropdown-menu-label.js +31 -0
  47. package/dist/cjs/dropdown-menu-separator.js +25 -0
  48. package/dist/cjs/dropdown-menu-sub-content.js +3 -0
  49. package/dist/cjs/dropdown-menu-sub-trigger.js +3 -0
  50. package/dist/cjs/dropdown-menu-sub.js +3 -0
  51. package/dist/cjs/dropdown-menu-trigger.js +26 -0
  52. package/dist/cjs/dropdown-menu.js +32 -0
  53. package/dist/cjs/dropdown.js +284 -0
  54. package/dist/cjs/fancy-button.js +38 -0
  55. package/dist/cjs/hint-text.js +36 -0
  56. package/dist/cjs/hue-slider.js +133 -0
  57. package/dist/cjs/index.js +190 -0
  58. package/dist/cjs/label.js +55 -0
  59. package/dist/cjs/link-button.js +44 -0
  60. package/dist/cjs/modal-body.js +22 -0
  61. package/dist/cjs/modal-close.js +3 -0
  62. package/dist/cjs/modal-content.js +48 -0
  63. package/dist/cjs/modal-footer.js +22 -0
  64. package/dist/cjs/modal-header.js +81 -0
  65. package/dist/cjs/modal-trigger.js +3 -0
  66. package/dist/cjs/modal.js +3 -0
  67. package/dist/cjs/popover-content.js +104 -0
  68. package/dist/cjs/popover-trigger.js +24 -0
  69. package/dist/cjs/popover.js +3 -0
  70. package/dist/cjs/scroll-area.js +3 -0
  71. package/dist/cjs/scroll-bar.js +39 -0
  72. package/dist/cjs/segmented-control-item.js +41 -0
  73. package/dist/cjs/segmented-control.js +40 -0
  74. package/dist/cjs/select-content.js +61 -0
  75. package/dist/cjs/select-group.js +3 -0
  76. package/dist/cjs/select-icon.js +25 -0
  77. package/dist/cjs/select-item.js +44 -0
  78. package/dist/cjs/select-label.js +32 -0
  79. package/dist/cjs/select-separator.js +26 -0
  80. package/dist/cjs/select-trigger.js +40 -0
  81. package/dist/cjs/select-value.js +31 -0
  82. package/dist/cjs/select.js +3 -0
  83. package/dist/cjs/shims.js +1 -0
  84. package/dist/cjs/slider.js +3 -0
  85. package/dist/cjs/social-button.js +45 -0
  86. package/dist/cjs/status-badge.js +49 -0
  87. package/dist/cjs/switch.js +3 -0
  88. package/dist/cjs/tab-menu-content.js +32 -0
  89. package/dist/cjs/tab-menu-item.js +44 -0
  90. package/dist/cjs/tab-menu-list.js +34 -0
  91. package/dist/cjs/tab-menu.js +32 -0
  92. package/dist/cjs/text-input-affix.js +28 -0
  93. package/dist/cjs/text-input-button.js +32 -0
  94. package/dist/cjs/text-input-icon.js +29 -0
  95. package/dist/cjs/text-input.js +41 -0
  96. package/dist/cjs/textarea.js +56 -0
  97. package/dist/cjs/tooltip.js +115 -0
  98. package/dist/cjs/use-color-model.js +6 -0
  99. package/dist/cjs/use-delegated-props.js +14 -0
  100. package/dist/cjs/use-user-select.js +39 -0
  101. package/dist/components/alert/alert.d.ts +30 -0
  102. package/dist/components/alert/index.d.ts +2 -0
  103. package/dist/components/badge/badge.d.ts +17 -0
  104. package/dist/components/badge/index.d.ts +4 -0
  105. package/dist/components/badge/status-badge.d.ts +13 -0
  106. package/dist/components/button/button.d.ts +22 -0
  107. package/dist/components/button/compact-button.d.ts +15 -0
  108. package/dist/components/button/fancy-button.d.ts +20 -0
  109. package/dist/components/button/index.d.ts +10 -0
  110. package/dist/components/button/link-button.d.ts +22 -0
  111. package/dist/components/button/social-button.d.ts +10 -0
  112. package/dist/components/checkbox/checkbox.d.ts +11 -0
  113. package/dist/components/checkbox/index.d.ts +2 -0
  114. package/dist/components/color-picker/alpha-slider.d.ts +15 -0
  115. package/dist/components/color-picker/color-area.d.ts +9 -0
  116. package/dist/components/color-picker/color-picker.d.ts +47 -0
  117. package/dist/components/color-picker/color-swatch.d.ts +19 -0
  118. package/dist/components/color-picker/composable/use-color-model.d.ts +7 -0
  119. package/dist/components/color-picker/composable/use-user-select.d.ts +8 -0
  120. package/dist/components/color-picker/hue-slider.d.ts +14 -0
  121. package/dist/components/color-picker/index.d.ts +10 -0
  122. package/dist/components/content-divider/content-divider.d.ts +10 -0
  123. package/dist/components/content-divider/index.d.ts +2 -0
  124. package/dist/components/dropdown/context-menu-item.d.ts +39 -0
  125. package/dist/components/dropdown/dropdown-item.d.ts +30 -0
  126. package/dist/components/dropdown/dropdown.d.ts +51 -0
  127. package/dist/components/dropdown/index.d.ts +6 -0
  128. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +36 -0
  129. package/dist/components/dropdown-menu/dropdown-menu-group.d.ts +18 -0
  130. package/dist/components/dropdown-menu/dropdown-menu-item.d.ts +26 -0
  131. package/dist/components/dropdown-menu/dropdown-menu-label.d.ts +22 -0
  132. package/dist/components/dropdown-menu/dropdown-menu-separator.d.ts +7 -0
  133. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +38 -0
  134. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +22 -0
  135. package/dist/components/dropdown-menu/dropdown-menu-sub.d.ts +22 -0
  136. package/dist/components/dropdown-menu/dropdown-menu-trigger.d.ts +18 -0
  137. package/dist/components/dropdown-menu/dropdown-menu.d.ts +18 -0
  138. package/dist/components/dropdown-menu/index.d.ts +20 -0
  139. package/dist/components/hint-text/hint-text.d.ts +11 -0
  140. package/dist/components/hint-text/index.d.ts +2 -0
  141. package/dist/components/index.d.ts +20 -0
  142. package/dist/components/label/index.d.ts +2 -0
  143. package/dist/components/label/label.d.ts +29 -0
  144. package/dist/components/modal/index.d.ts +14 -0
  145. package/dist/components/modal/modal-body.d.ts +21 -0
  146. package/dist/components/modal/modal-close.d.ts +18 -0
  147. package/dist/components/modal/modal-content.d.ts +37 -0
  148. package/dist/components/modal/modal-footer.d.ts +21 -0
  149. package/dist/components/modal/modal-header.d.ts +16 -0
  150. package/dist/components/modal/modal-trigger.d.ts +18 -0
  151. package/dist/components/modal/modal.d.ts +22 -0
  152. package/dist/components/popover/index.d.ts +6 -0
  153. package/dist/components/popover/popover-content.d.ts +41 -0
  154. package/dist/components/popover/popover-trigger.d.ts +18 -0
  155. package/dist/components/popover/popover.d.ts +22 -0
  156. package/dist/components/scroll-area/index.d.ts +2 -0
  157. package/dist/components/scroll-area/scroll-area.d.ts +22 -0
  158. package/dist/components/scroll-area/scroll-bar.d.ts +9 -0
  159. package/dist/components/segmented-control/index.d.ts +4 -0
  160. package/dist/components/segmented-control/segmented-control-item.d.ts +22 -0
  161. package/dist/components/segmented-control/segmented-control.d.ts +26 -0
  162. package/dist/components/select/index.d.ts +18 -0
  163. package/dist/components/select/select-content.d.ts +33 -0
  164. package/dist/components/select/select-group.d.ts +18 -0
  165. package/dist/components/select/select-icon.d.ts +21 -0
  166. package/dist/components/select/select-item.d.ts +22 -0
  167. package/dist/components/select/select-label.d.ts +22 -0
  168. package/dist/components/select/select-separator.d.ts +7 -0
  169. package/dist/components/select/select-trigger.d.ts +28 -0
  170. package/dist/components/select/select-value.d.ts +22 -0
  171. package/dist/components/select/select.d.ts +28 -0
  172. package/dist/components/slider/index.d.ts +2 -0
  173. package/dist/components/slider/slider.d.ts +13 -0
  174. package/dist/components/switch/index.d.ts +2 -0
  175. package/dist/components/switch/switch.d.ts +11 -0
  176. package/dist/components/tab-menu/index.d.ts +8 -0
  177. package/dist/components/tab-menu/tab-menu-content.d.ts +22 -0
  178. package/dist/components/tab-menu/tab-menu-item.d.ts +24 -0
  179. package/dist/components/tab-menu/tab-menu-list.d.ts +22 -0
  180. package/dist/components/tab-menu/tab-menu.d.ts +23 -0
  181. package/dist/components/text-input/index.d.ts +8 -0
  182. package/dist/components/text-input/text-input-affix.d.ts +26 -0
  183. package/dist/components/text-input/text-input-button.d.ts +23 -0
  184. package/dist/components/text-input/text-input-icon.d.ts +10 -0
  185. package/dist/components/text-input/text-input.d.ts +27 -0
  186. package/dist/components/textarea/index.d.ts +2 -0
  187. package/dist/components/textarea/textarea.d.ts +22 -0
  188. package/dist/components/tooltip/index.d.ts +2 -0
  189. package/dist/components/tooltip/tooltip.d.ts +29 -0
  190. package/dist/composables/use-delegated-props.d.ts +2 -0
  191. package/dist/es/alert.js +112 -0
  192. package/dist/es/alpha-slider.js +4 -0
  193. package/dist/es/badge.js +56 -0
  194. package/dist/es/button.js +40 -0
  195. package/dist/es/checkbox.js +4 -0
  196. package/dist/es/chunks/_plugin-vue_export-helper.js +10 -0
  197. package/dist/es/chunks/alpha-slider.js +128 -0
  198. package/dist/es/chunks/checkbox.vue_vue_type_style_index_0_lang.js +39 -0
  199. package/dist/es/chunks/clsx.js +16 -0
  200. package/dist/es/chunks/content-divider.vue_vue_type_style_index_0_lang.js +53 -0
  201. package/dist/es/chunks/dropdown-menu-content.vue_vue_type_style_index_0_lang.js +52 -0
  202. package/dist/es/chunks/dropdown-menu-sub-content.vue_vue_type_style_index_0_lang.js +50 -0
  203. package/dist/es/chunks/dropdown-menu-sub-trigger.vue_vue_type_style_index_0_lang.js +33 -0
  204. package/dist/es/chunks/dropdown-menu-sub.js +26 -0
  205. package/dist/es/chunks/index.js +9041 -0
  206. package/dist/es/chunks/modal-close.js +23 -0
  207. package/dist/es/chunks/modal-trigger.js +23 -0
  208. package/dist/es/chunks/modal.js +27 -0
  209. package/dist/es/chunks/popover.js +27 -0
  210. package/dist/es/chunks/scroll-area.js +42 -0
  211. package/dist/es/chunks/select-group.js +23 -0
  212. package/dist/es/chunks/select.js +39 -0
  213. package/dist/es/chunks/slider.vue_vue_type_style_index_0_lang.js +53 -0
  214. package/dist/es/chunks/switch.vue_vue_type_style_index_0_lang.js +39 -0
  215. package/dist/es/chunks/use-color-model.js +993 -0
  216. package/dist/es/color-area.js +176 -0
  217. package/dist/es/color-picker.js +516 -0
  218. package/dist/es/color-swatch.js +60 -0
  219. package/dist/es/color.js +102 -0
  220. package/dist/es/command-group.js +42 -0
  221. package/dist/es/command-input.js +46 -0
  222. package/dist/es/command-item.js +35 -0
  223. package/dist/es/command-list.js +53 -0
  224. package/dist/es/command-root.js +46 -0
  225. package/dist/es/command-separator.js +33 -0
  226. package/dist/es/compact-button.js +43 -0
  227. package/dist/es/content-divider.js +4 -0
  228. package/dist/es/context-menu-item.js +135 -0
  229. package/dist/es/crypto.js +8 -0
  230. package/dist/es/dropdown-item.js +100 -0
  231. package/dist/es/dropdown-menu-content.js +4 -0
  232. package/dist/es/dropdown-menu-group.js +25 -0
  233. package/dist/es/dropdown-menu-item.js +69 -0
  234. package/dist/es/dropdown-menu-label.js +32 -0
  235. package/dist/es/dropdown-menu-separator.js +26 -0
  236. package/dist/es/dropdown-menu-sub-content.js +4 -0
  237. package/dist/es/dropdown-menu-sub-trigger.js +4 -0
  238. package/dist/es/dropdown-menu-sub.js +4 -0
  239. package/dist/es/dropdown-menu-trigger.js +27 -0
  240. package/dist/es/dropdown-menu.js +33 -0
  241. package/dist/es/dropdown.js +285 -0
  242. package/dist/es/fancy-button.js +39 -0
  243. package/dist/es/hint-text.js +37 -0
  244. package/dist/es/hue-slider.js +134 -0
  245. package/dist/es/index.js +190 -0
  246. package/dist/es/label.js +56 -0
  247. package/dist/es/link-button.js +45 -0
  248. package/dist/es/modal-body.js +23 -0
  249. package/dist/es/modal-close.js +4 -0
  250. package/dist/es/modal-content.js +49 -0
  251. package/dist/es/modal-footer.js +23 -0
  252. package/dist/es/modal-header.js +82 -0
  253. package/dist/es/modal-trigger.js +4 -0
  254. package/dist/es/modal.js +4 -0
  255. package/dist/es/popover-content.js +105 -0
  256. package/dist/es/popover-trigger.js +25 -0
  257. package/dist/es/popover.js +4 -0
  258. package/dist/es/scroll-area.js +4 -0
  259. package/dist/es/scroll-bar.js +40 -0
  260. package/dist/es/segmented-control-item.js +42 -0
  261. package/dist/es/segmented-control.js +41 -0
  262. package/dist/es/select-content.js +62 -0
  263. package/dist/es/select-group.js +4 -0
  264. package/dist/es/select-icon.js +26 -0
  265. package/dist/es/select-item.js +45 -0
  266. package/dist/es/select-label.js +33 -0
  267. package/dist/es/select-separator.js +27 -0
  268. package/dist/es/select-trigger.js +41 -0
  269. package/dist/es/select-value.js +32 -0
  270. package/dist/es/select.js +4 -0
  271. package/dist/es/shims.js +1 -0
  272. package/dist/es/slider.js +4 -0
  273. package/dist/es/social-button.js +46 -0
  274. package/dist/es/status-badge.js +50 -0
  275. package/dist/es/switch.js +4 -0
  276. package/dist/es/tab-menu-content.js +33 -0
  277. package/dist/es/tab-menu-item.js +45 -0
  278. package/dist/es/tab-menu-list.js +35 -0
  279. package/dist/es/tab-menu.js +33 -0
  280. package/dist/es/text-input-affix.js +29 -0
  281. package/dist/es/text-input-button.js +33 -0
  282. package/dist/es/text-input-icon.js +30 -0
  283. package/dist/es/text-input.js +42 -0
  284. package/dist/es/textarea.js +57 -0
  285. package/dist/es/tooltip.js +116 -0
  286. package/dist/es/use-color-model.js +6 -0
  287. package/dist/es/use-delegated-props.js +14 -0
  288. package/dist/es/use-user-select.js +39 -0
  289. package/dist/index.d.ts +5 -0
  290. package/dist/utils/color.d.ts +26 -0
  291. package/dist/utils/crypto.d.ts +1 -0
  292. package/package.json +77 -0
  293. package/src/components/alert/alert.vue +312 -0
  294. package/src/components/alert/index.ts +2 -0
  295. package/src/components/alert/stories/alert.stories.ts +91 -0
  296. package/src/components/badge/badge.vue +131 -0
  297. package/src/components/badge/index.ts +5 -0
  298. package/src/components/badge/status-badge.vue +110 -0
  299. package/src/components/badge/stories/badge.stories.ts +33 -0
  300. package/src/components/badge/stories/status-badge.stories.ts +31 -0
  301. package/src/components/button/button.vue +281 -0
  302. package/src/components/button/compact-button.vue +126 -0
  303. package/src/components/button/fancy-button.vue +171 -0
  304. package/src/components/button/index.ts +14 -0
  305. package/src/components/button/link-button.vue +128 -0
  306. package/src/components/button/social-button.vue +130 -0
  307. package/src/components/button/stories/button.stories.ts +31 -0
  308. package/src/components/button/stories/compact-button.stories.ts +31 -0
  309. package/src/components/button/stories/fancy-button.stories.ts +31 -0
  310. package/src/components/button/stories/link-button.stories.ts +26 -0
  311. package/src/components/button/stories/social-button.stories.ts +29 -0
  312. package/src/components/checkbox/checkbox.vue +131 -0
  313. package/src/components/checkbox/index.ts +2 -0
  314. package/src/components/checkbox/stories/checkbox.stories.ts +102 -0
  315. package/src/components/color-picker/alpha-slider.vue +149 -0
  316. package/src/components/color-picker/color-area.vue +213 -0
  317. package/src/components/color-picker/color-picker.vue +642 -0
  318. package/src/components/color-picker/color-swatch.vue +98 -0
  319. package/src/components/color-picker/composable/use-color-model.ts +40 -0
  320. package/src/components/color-picker/composable/use-user-select.ts +51 -0
  321. package/src/components/color-picker/hue-slider.vue +156 -0
  322. package/src/components/color-picker/index.ts +14 -0
  323. package/src/components/color-picker/stories/color-picker.stories.ts +116 -0
  324. package/src/components/command/command-group.vue +42 -0
  325. package/src/components/command/command-input.vue +77 -0
  326. package/src/components/command/command-item.vue +45 -0
  327. package/src/components/command/command-list.vue +37 -0
  328. package/src/components/command/command-root.vue +45 -0
  329. package/src/components/command/command-separator.vue +31 -0
  330. package/src/components/content-divider/content-divider.vue +110 -0
  331. package/src/components/content-divider/index.ts +2 -0
  332. package/src/components/content-divider/stories/content-divider.stories.ts +37 -0
  333. package/src/components/dropdown/context-menu-item.vue +317 -0
  334. package/src/components/dropdown/dropdown-item.vue +184 -0
  335. package/src/components/dropdown/dropdown.vue +620 -0
  336. package/src/components/dropdown/index.ts +8 -0
  337. package/src/components/dropdown/stories/context-menu-item.stories.ts +51 -0
  338. package/src/components/dropdown/stories/dropdown-item.stories.ts +33 -0
  339. package/src/components/dropdown/stories/dropdown.stories.ts +53 -0
  340. package/src/components/dropdown-menu/dropdown-menu-content.vue +79 -0
  341. package/src/components/dropdown-menu/dropdown-menu-group.vue +19 -0
  342. package/src/components/dropdown-menu/dropdown-menu-item.vue +147 -0
  343. package/src/components/dropdown-menu/dropdown-menu-label.vue +33 -0
  344. package/src/components/dropdown-menu/dropdown-menu-separator.vue +27 -0
  345. package/src/components/dropdown-menu/dropdown-menu-sub-content.vue +72 -0
  346. package/src/components/dropdown-menu/dropdown-menu-sub-trigger.vue +70 -0
  347. package/src/components/dropdown-menu/dropdown-menu-sub.vue +19 -0
  348. package/src/components/dropdown-menu/dropdown-menu-trigger.vue +52 -0
  349. package/src/components/dropdown-menu/dropdown-menu.vue +23 -0
  350. package/src/components/dropdown-menu/index.ts +29 -0
  351. package/src/components/dropdown-menu/stories/dropdown-menu.stories.ts +107 -0
  352. package/src/components/hint-text/hint-text.vue +63 -0
  353. package/src/components/hint-text/index.ts +2 -0
  354. package/src/components/hint-text/stories/hint-text.stories.ts +28 -0
  355. package/src/components/index.ts +20 -0
  356. package/src/components/label/index.ts +2 -0
  357. package/src/components/label/label.vue +103 -0
  358. package/src/components/label/stories/label.stories.ts +127 -0
  359. package/src/components/modal/index.ts +20 -0
  360. package/src/components/modal/modal-body.vue +26 -0
  361. package/src/components/modal/modal-close.vue +11 -0
  362. package/src/components/modal/modal-content.vue +64 -0
  363. package/src/components/modal/modal-footer.vue +22 -0
  364. package/src/components/modal/modal-header.vue +165 -0
  365. package/src/components/modal/modal-trigger.vue +12 -0
  366. package/src/components/modal/modal.vue +15 -0
  367. package/src/components/modal/stories/modal.stories.ts +287 -0
  368. package/src/components/popover/index.ts +8 -0
  369. package/src/components/popover/popover-content.vue +254 -0
  370. package/src/components/popover/popover-trigger.vue +22 -0
  371. package/src/components/popover/popover.vue +17 -0
  372. package/src/components/popover/stories/popover.stories.ts +341 -0
  373. package/src/components/scroll-area/index.ts +2 -0
  374. package/src/components/scroll-area/scroll-area.vue +29 -0
  375. package/src/components/scroll-area/scroll-bar.vue +36 -0
  376. package/src/components/segmented-control/index.ts +5 -0
  377. package/src/components/segmented-control/segmented-control-item.vue +62 -0
  378. package/src/components/segmented-control/segmented-control.vue +38 -0
  379. package/src/components/segmented-control/stories/segmented-control.stories.ts +120 -0
  380. package/src/components/select/index.ts +26 -0
  381. package/src/components/select/select-content.vue +77 -0
  382. package/src/components/select/select-group.vue +11 -0
  383. package/src/components/select/select-icon.vue +29 -0
  384. package/src/components/select/select-item.vue +65 -0
  385. package/src/components/select/select-label.vue +27 -0
  386. package/src/components/select/select-separator.vue +25 -0
  387. package/src/components/select/select-trigger.vue +161 -0
  388. package/src/components/select/select-value.vue +37 -0
  389. package/src/components/select/select.vue +21 -0
  390. package/src/components/select/stories/select.stories.ts +428 -0
  391. package/src/components/slider/index.ts +2 -0
  392. package/src/components/slider/slider.vue +81 -0
  393. package/src/components/slider/stories/slider.stories.ts +30 -0
  394. package/src/components/switch/index.ts +2 -0
  395. package/src/components/switch/stories/switch.stories.ts +74 -0
  396. package/src/components/switch/switch.vue +92 -0
  397. package/src/components/tab-menu/index.ts +11 -0
  398. package/src/components/tab-menu/stories/tab-menu.stories.ts +239 -0
  399. package/src/components/tab-menu/tab-menu-content.vue +27 -0
  400. package/src/components/tab-menu/tab-menu-item.vue +108 -0
  401. package/src/components/tab-menu/tab-menu-list.vue +43 -0
  402. package/src/components/tab-menu/tab-menu.vue +29 -0
  403. package/src/components/text-input/index.ts +11 -0
  404. package/src/components/text-input/stories/text-input.stories.ts +244 -0
  405. package/src/components/text-input/text-input-affix.vue +58 -0
  406. package/src/components/text-input/text-input-button.vue +56 -0
  407. package/src/components/text-input/text-input-icon.vue +37 -0
  408. package/src/components/text-input/text-input.vue +187 -0
  409. package/src/components/textarea/index.ts +2 -0
  410. package/src/components/textarea/stories/textarea.stories.ts +27 -0
  411. package/src/components/textarea/textarea.vue +155 -0
  412. package/src/components/tooltip/index.ts +2 -0
  413. package/src/components/tooltip/stories/tooltip.stories.ts +138 -0
  414. package/src/components/tooltip/tooltip.vue +256 -0
  415. package/src/composables/use-delegated-props.ts +20 -0
  416. package/src/index.ts +13 -0
  417. package/src/shims.d.ts +6 -0
  418. package/src/utils/color.ts +131 -0
  419. package/src/utils/crypto.ts +6 -0
@@ -0,0 +1,642 @@
1
+ <script setup lang="ts">
2
+ import { useDelegatedProps } from '@/composables/use-delegated-props';
3
+ import { bumpColorValue, clamp, COLOR_NUMBER_VALIDATION_PATTERN, type ColorKey, getColorConstraints, HEX_VALIDATION_PATTERN, type HSBKey, type HSLKey, resolveArrowDirection, type RGBKey, truncColorValue } from '@/utils/color';
4
+ import { useForwardPropsEmits } from 'radix-vue';
5
+ import tinycolor from 'tinycolor2';
6
+ import { computed, type HTMLAttributes, ref, watch } from 'vue';
7
+ import { Button } from '../button';
8
+ import { Popover, PopoverContent, PopoverTrigger } from '../popover';
9
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../select';
10
+ import { TextInput } from '../text-input';
11
+ import { ColorArea, HueSlider } from './';
12
+ import AlphaSlider from './alpha-slider.vue';
13
+ import ColorSwatch from './color-swatch.vue';
14
+ import { defineColorModel } from './composable/use-color-model';
15
+
16
+ const props = withDefaults(defineProps<ColorPickerProps>(), {
17
+ modelValue: 'hsl(240, 100%, 50%)',
18
+ formats: () => ['hex', 'rgb', 'hsl', 'hsb'],
19
+ label: 'Pick Color',
20
+ });
21
+
22
+ const emit = defineEmits<ColorPickerEmits>();
23
+
24
+ const delegatedProps = useDelegatedProps(props, 'class');
25
+ const forwarded = useForwardPropsEmits(delegatedProps, emit);
26
+
27
+ const tinyColorRef = defineColorModel(props, emit);
28
+
29
+ const hueRef = ref(tinyColorRef.value.toHsl().h);
30
+ const currentColorFormat = ref(props.defaultFormat || 'hex');
31
+ const eyeDropper = ref<EyeDropper | null>(null);
32
+
33
+ const hex = computed({
34
+ get: () => tinyColorRef.value.toHexString().toUpperCase(),
35
+ set: () => {},
36
+ });
37
+
38
+ const rgb = computed(() => {
39
+ return tinyColorRef.value.toRgb();
40
+ });
41
+
42
+ const hsl = computed(() => {
43
+ const { h, s, l } = tinyColorRef.value.toHsl();
44
+
45
+ return {
46
+ h: `${h.toFixed()}°`,
47
+ s: `${(s * 100).toFixed()}%`,
48
+ l: `${(l * 100).toFixed()}%`,
49
+ a: tinyColorRef.value.getAlpha(),
50
+ };
51
+ });
52
+
53
+ const hsv = computed(() => {
54
+ const { h, s, v } = tinyColorRef.value.toHsv();
55
+ return {
56
+ h: `${h.toFixed()}°`,
57
+ s: `${(s * 100).toFixed()}%`,
58
+ v: `${(v * 100).toFixed()}%`,
59
+ };
60
+ });
61
+
62
+ watch(tinyColorRef, (tinyColorInstance) => {
63
+ const newHue = tinyColorInstance.toHsl().h;
64
+ const saturation = tinyColorInstance.toHsl().s;
65
+
66
+ // Preserve hue when color becomes grayscale (saturation is 0)
67
+ if (saturation === 0 && hueRef.value !== 0) {
68
+ return;
69
+ }
70
+
71
+ hueRef.value = newHue;
72
+ }, { immediate: true });
73
+
74
+ if (window.EyeDropper) {
75
+ eyeDropper.value = new window.EyeDropper();
76
+ }
77
+
78
+ function sipColor() {
79
+ if (!eyeDropper.value) {
80
+ return;
81
+ }
82
+
83
+ eyeDropper.value.open().then((result: any) => {
84
+ const newColor = tinycolor(result.sRGBHex);
85
+ tinyColorRef.value = newColor;
86
+ }).catch((e: Error) => {
87
+ // Do nothing, this prevents an error from being thrown if the user cancels the color selection.
88
+ });
89
+ }
90
+
91
+ function getCurrentColorValue(key: ColorKey) {
92
+ let currentValue = 0;
93
+
94
+ if (key === 'r' || key === 'g' || key === 'b') {
95
+ currentValue = rgb.value[key];
96
+ }
97
+ else if (key === 'h') {
98
+ currentValue = tinyColorRef.value.toHsl().h;
99
+ }
100
+ else if (key === 's' || key === 'l' || key === 'v') {
101
+ if (currentColorFormat.value === 'hsl') {
102
+ const currentHsl = tinyColorRef.value.toHsl();
103
+ currentValue = key === 's' ? currentHsl.s * 100 : currentHsl.l * 100;
104
+ }
105
+ else {
106
+ const currentHsv = tinyColorRef.value.toHsv();
107
+ currentValue = key === 's' ? currentHsv.s * 100 : currentHsv.v * 100;
108
+ }
109
+ }
110
+ else if (key === 'a') {
111
+ currentValue = tinyColorRef.value.getAlpha() * 100;
112
+ }
113
+
114
+ return currentValue;
115
+ }
116
+
117
+ function validateInput(event: Event) {
118
+ const input = event.target as HTMLInputElement;
119
+ const inputEvent = event as InputEvent;
120
+ const newValue = truncColorValue(input.value) + (inputEvent.data ?? '');
121
+
122
+ if (!COLOR_NUMBER_VALIDATION_PATTERN.test(newValue)) {
123
+ event.preventDefault();
124
+ }
125
+ }
126
+
127
+ function validateHexInput(event: Event) {
128
+ const input = event.target as HTMLInputElement;
129
+ const inputEvent = event as InputEvent;
130
+ const newValue = input.value + (inputEvent.data ?? '');
131
+
132
+ if (!HEX_VALIDATION_PATTERN.test(newValue)) {
133
+ event.preventDefault();
134
+ }
135
+ }
136
+
137
+ function inputChangeHex(event: Event) {
138
+ const colorInput = (event.target as HTMLInputElement)?.value;
139
+
140
+ if (!colorInput) {
141
+ return;
142
+ }
143
+
144
+ tinyColorRef.value = tinycolor(colorInput);
145
+ }
146
+
147
+ function inputChangeRGB(event: Event, key: RGBKey) {
148
+ const value = Number((event.target as HTMLInputElement)?.value);
149
+ const currentRgb = rgb.value;
150
+ const newRgb = { ...currentRgb, [key]: value };
151
+
152
+ tinyColorRef.value = tinycolor(newRgb);
153
+ }
154
+
155
+ function inputChangeHSL(event: Event, key: HSLKey) {
156
+ const HSLInput = (event.target as HTMLInputElement)?.value;
157
+ let newHSLValue = truncColorValue(HSLInput);
158
+
159
+ if (key === 's' || key === 'l') {
160
+ newHSLValue /= 100;
161
+ }
162
+
163
+ if (Number.isNaN(newHSLValue)) {
164
+ return;
165
+ }
166
+
167
+ const newHSL = { [key]: newHSLValue };
168
+
169
+ tinyColorRef.value = {
170
+ ...tinyColorRef.value.toHsl(),
171
+ ...newHSL,
172
+ };
173
+ }
174
+
175
+ function inputChangeHSB(event: Event, key: HSBKey) {
176
+ const HSBInput = (event.target as HTMLInputElement)?.value;
177
+ const HSBValue = truncColorValue(HSBInput);
178
+
179
+ if (Number.isNaN(HSBValue)) {
180
+ return;
181
+ }
182
+
183
+ const newHSB = { [key]: HSBValue };
184
+
185
+ tinyColorRef.value = {
186
+ ...tinyColorRef.value.toHsv(),
187
+ ...newHSB,
188
+ };
189
+ }
190
+
191
+ function inputChangeAlpha(event: Event) {
192
+ const alphaInput = (event.target as HTMLInputElement)?.value;
193
+ const alphaValue = truncColorValue(alphaInput) / 100;
194
+
195
+ if (Number.isNaN(alphaValue)) {
196
+ return;
197
+ }
198
+
199
+ tinyColorRef.value = tinyColorRef.value.setAlpha(Math.max(0, Math.min(1, alphaValue)));
200
+ }
201
+
202
+ function handleColorValueKeyDown(event: KeyboardEvent, key: ColorKey) {
203
+ const direction = resolveArrowDirection(event);
204
+ const currentValue = getCurrentColorValue(key);
205
+ const { min, max } = getColorConstraints(key);
206
+ const newValue = clamp(bumpColorValue(currentValue, direction), min, max);
207
+
208
+ if (key === 'r' || key === 'g' || key === 'b') {
209
+ const newColor = tinycolor({ ...rgb.value, [key]: newValue });
210
+ emit('update:modelValue', newColor.toString());
211
+ }
212
+ else if (key === 'h') {
213
+ if (currentColorFormat.value === 'hsl') {
214
+ const newColor = tinycolor({ ...tinyColorRef.value.toHsl(), h: newValue });
215
+ emit('update:modelValue', newColor.toString());
216
+ }
217
+ else {
218
+ const newColor = tinycolor({ ...tinyColorRef.value.toHsv(), h: newValue });
219
+ emit('update:modelValue', newColor.toString());
220
+ }
221
+ }
222
+ else if (key === 's' || key === 'l' || key === 'v') {
223
+ if (currentColorFormat.value === 'hsl') {
224
+ const newColor = tinycolor({ ...tinyColorRef.value.toHsl(), [key]: newValue / 100 });
225
+ emit('update:modelValue', newColor.toString());
226
+ }
227
+ else {
228
+ const currentHsv = tinyColorRef.value.toHsv();
229
+ const newColor = tinycolor({ ...currentHsv, [key]: newValue / 100 });
230
+ emit('update:modelValue', newColor.toString());
231
+ }
232
+ }
233
+ else if (key === 'a') {
234
+ const newColor = tinyColorRef.value.setAlpha(newValue / 100);
235
+ emit('update:modelValue', newColor.toString());
236
+ }
237
+ }
238
+ </script>
239
+
240
+ <script lang="ts">
241
+ export type ColorFormat = 'hex' | 'rgb' | 'hsl' | 'hsb';
242
+
243
+ export interface ColorPickerProps {
244
+ modelValue: string | tinycolor.ColorInput;
245
+ label?: string;
246
+ class?: HTMLAttributes['class'];
247
+ formats?: ColorFormat[];
248
+ defaultFormat?: ColorFormat;
249
+ }
250
+
251
+ export interface ColorPickerEmits {
252
+ 'update:modelValue': [value: string];
253
+ }
254
+
255
+ interface ColorSelectionOptions {
256
+ signal?: AbortSignal;
257
+ }
258
+
259
+ interface ColorSelectionResult {
260
+ sRGBHex: string;
261
+ }
262
+
263
+ interface EyeDropper {
264
+ open: (options?: ColorSelectionOptions) => Promise<ColorSelectionResult>;
265
+ }
266
+
267
+ interface EyeDropperConstructor {
268
+ new (): EyeDropper;
269
+ }
270
+
271
+ declare global {
272
+ interface Window {
273
+ EyeDropper?: EyeDropperConstructor | undefined;
274
+ }
275
+ }
276
+ </script>
277
+
278
+ <template>
279
+ <Popover>
280
+ <PopoverTrigger>
281
+ <Button
282
+ class="celeste-picker-trigger"
283
+ intent="neutral"
284
+ variant="stroke"
285
+ >
286
+ <span class="celeste-selected-color" />
287
+ {{ label }}
288
+ </Button>
289
+ </PopoverTrigger>
290
+ <PopoverContent :dismissible="false">
291
+ <div class="celeste-color-picker-wrapper" v-bind="forwarded">
292
+ <div class="celeste-color-picker">
293
+ <ColorArea
294
+ v-model="tinyColorRef"
295
+ :hue="hueRef"
296
+ />
297
+ <HueSlider v-model="hueRef" />
298
+ <AlphaSlider v-model="tinyColorRef" />
299
+ <div class="celeste-color-control-panel">
300
+ <Select v-model="currentColorFormat" name="color-format">
301
+ <SelectTrigger variant="inline">
302
+ <SelectValue placeholder="HEX" class="celeste-selected-color-format">
303
+ {{ currentColorFormat }}
304
+ </SelectValue>
305
+ </SelectTrigger>
306
+ <SelectContent width="fit">
307
+ <SelectItem
308
+ v-for="format in props.formats"
309
+ :key="format"
310
+ :value="format"
311
+ >
312
+ <span class="celeste-color-format">
313
+ {{ format }}
314
+ </span>
315
+ </SelectItem>
316
+ </SelectContent>
317
+ </Select>
318
+ <div
319
+ class="celeste-color-controls"
320
+ >
321
+ <Button
322
+ v-if="eyeDropper"
323
+ class="celeste-color-sip"
324
+ variant="stroke"
325
+ size="xxs"
326
+ intent="neutral"
327
+ @click="sipColor"
328
+ >
329
+ <i i-celeste-sip-line />
330
+ </Button>
331
+ <div class="celeste-color-format-inputs">
332
+ <template v-if="currentColorFormat === 'hex'">
333
+ <TextInput
334
+ v-model="hex"
335
+ autocomplete="off"
336
+ name="hex"
337
+ placeholder="#FFFFFF"
338
+ type="text"
339
+ class="color-input"
340
+ size="xs"
341
+ @beforeinput="validateHexInput"
342
+ @focusout="inputChangeHex"
343
+ @keydown.enter.prevent="inputChangeHex"
344
+ />
345
+ </template>
346
+ <template v-else-if="currentColorFormat === 'rgb'">
347
+ <TextInput
348
+ v-model="rgb.r"
349
+ autocomplete="off"
350
+ name="red"
351
+ type="text"
352
+ class="color-input"
353
+ size="xs"
354
+ @beforeinput="validateInput"
355
+ @focusout="e => inputChangeRGB(e, 'r')"
356
+ @keydown.enter.prevent="e => inputChangeRGB(e, 'r')"
357
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 'r')"
358
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 'r')"
359
+ />
360
+ <TextInput
361
+ v-model="rgb.g"
362
+ autocomplete="off"
363
+ name="green"
364
+ type="text"
365
+ class="color-input"
366
+ size="xs"
367
+ @beforeinput="validateInput"
368
+ @focusout="e => inputChangeRGB(e, 'g')"
369
+ @keydown.enter.prevent="e => inputChangeRGB(e, 'g')"
370
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 'g')"
371
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 'g')"
372
+ />
373
+ <TextInput
374
+ v-model="rgb.b"
375
+ autocomplete="off"
376
+ name="blue"
377
+ type="text"
378
+ class="color-input"
379
+ size="xs"
380
+ @beforeinput="validateInput"
381
+ @focusout="e => inputChangeRGB(e, 'b')"
382
+ @keydown.enter.prevent="e => inputChangeRGB(e, 'b')"
383
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 'b')"
384
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 'b')"
385
+ />
386
+ </template>
387
+ <template v-else-if="currentColorFormat === 'hsl'">
388
+ <TextInput
389
+ v-model="hsl.h"
390
+ autocomplete="off"
391
+ name="hue"
392
+ type="text"
393
+ class="color-input"
394
+ size="xs"
395
+ @beforeinput="validateInput"
396
+ @focusout="e => inputChangeHSL(e, 'h')"
397
+ @keydown.enter.prevent="e => inputChangeHSL(e, 'h')"
398
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 'h')"
399
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 'h')"
400
+ />
401
+ <TextInput
402
+ v-model="hsl.s"
403
+ autocomplete="off"
404
+ name="saturation"
405
+ type="text"
406
+ class="color-input"
407
+ size="xs"
408
+ @beforeinput="validateInput"
409
+ @focusout="e => inputChangeHSL(e, 's')"
410
+ @keydown.enter.prevent="e => inputChangeHSL(e, 's')"
411
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 's')"
412
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 's')"
413
+ />
414
+ <TextInput
415
+ v-model="hsl.l"
416
+ autocomplete="off"
417
+ name="lightness"
418
+ type="text"
419
+ class="color-input"
420
+ size="xs"
421
+ @beforeinput="validateInput"
422
+ @focusout="e => inputChangeHSL(e, 'l')"
423
+ @keydown.enter.prevent="e => inputChangeHSL(e, 'l')"
424
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 'l')"
425
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 'l')"
426
+ />
427
+ </template>
428
+ <template v-else-if="currentColorFormat === 'hsb'">
429
+ <TextInput
430
+ v-model="hsv.h"
431
+ autocomplete="off"
432
+ name="hue"
433
+ type="text"
434
+ class="color-input"
435
+ size="xs"
436
+ @beforeinput="validateInput"
437
+ @focusout="e => inputChangeHSB(e, 'h')"
438
+ @keydown.enter.prevent="e => inputChangeHSB(e, 'h')"
439
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 'h')"
440
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 'h')"
441
+ />
442
+ <TextInput
443
+ v-model="hsv.s"
444
+ autocomplete="off"
445
+ name="saturation"
446
+ type="text"
447
+ class="color-input"
448
+ size="xs"
449
+ @beforeinput="validateInput"
450
+ @focusout="e => inputChangeHSB(e, 's')"
451
+ @keydown.enter.prevent="e => inputChangeHSB(e, 's')"
452
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 's')"
453
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 's')"
454
+ />
455
+ <TextInput
456
+ v-model="hsv.v"
457
+ autocomplete="off"
458
+ name="brightness"
459
+ type="text"
460
+ class="color-input"
461
+ size="xs"
462
+ @beforeinput="validateInput"
463
+ @focusout="e => inputChangeHSB(e, 'v')"
464
+ @keydown.enter.prevent="e => inputChangeHSB(e, 'v')"
465
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 'v')"
466
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 'v')"
467
+ />
468
+ </template>
469
+ <TextInput
470
+ autocomplete="off"
471
+ name="alpha"
472
+ placeholder="100"
473
+ type="text"
474
+ class="color-input"
475
+ size="xs"
476
+ :value="`${(tinyColorRef.getAlpha() * 100).toFixed()}%`"
477
+ @beforeinput="validateInput"
478
+ @focusout="inputChangeAlpha"
479
+ @keydown.enter.prevent.stop="inputChangeAlpha"
480
+ @keydown.up.prevent.stop="e => handleColorValueKeyDown(e, 'a')"
481
+ @keydown.down.prevent.stop="e => handleColorValueKeyDown(e, 'a')"
482
+ />
483
+ </div>
484
+ </div>
485
+ </div>
486
+ </div>
487
+ <div class="celeste-color-swatches">
488
+ <slot v-if="$slots.swatches" name="swatches" />
489
+ <ColorSwatch
490
+ v-else
491
+ v-model="tinyColorRef"
492
+ :hue="hueRef"
493
+ />
494
+ </div>
495
+ </div>
496
+ </PopoverContent>
497
+ </Popover>
498
+ </template>
499
+
500
+ <style scoped lang="scss">
501
+ .celeste-picker-trigger {
502
+ gap: var(--spacing-12);
503
+
504
+ .celeste-selected-color {
505
+ --color-tile-size: 20px;
506
+
507
+ display: block;
508
+ width: var(--color-tile-size);
509
+ height: var(--color-tile-size);
510
+ border-radius: var(--radius-4);
511
+ background-color: v-bind(modelValue);
512
+ }
513
+ }
514
+
515
+ .celeste-color-picker-wrapper {
516
+ display: grid;
517
+ box-sizing: border-box;
518
+ width: 272px;
519
+
520
+ .celeste-color-picker {
521
+ display: flex;
522
+ flex-direction: column;
523
+ align-items: center;
524
+ justify-content: center;
525
+ padding: var(--spacing-16);
526
+ gap: var(--spacing-12);
527
+
528
+ & > * {
529
+ box-sizing: border-box;
530
+ }
531
+
532
+ .celeste-color-control-panel {
533
+ display: flex;
534
+ flex-direction: column;
535
+ width: 100%;
536
+ gap: var(--spacing-4);
537
+
538
+ .celeste-selected-color-format {
539
+ text-transform: uppercase;
540
+ }
541
+
542
+ .celeste-color-controls {
543
+ display: flex;
544
+ width: 100%;
545
+ height: 32px;
546
+
547
+ .celeste-color-sip {
548
+ border-start-end-radius: 0;
549
+ border-end-end-radius: 0;
550
+
551
+ &:focus-within {
552
+ z-index: 2;
553
+ }
554
+ }
555
+
556
+ & > * {
557
+ box-sizing: border-box;
558
+ height: 100%;
559
+ }
560
+
561
+ .celeste-color-format-inputs {
562
+ display: flex;
563
+
564
+ .color-input {
565
+ margin-inline-start: -1px;
566
+ border-radius: 0;
567
+
568
+ &:focus-within {
569
+ z-index: 2;
570
+ }
571
+
572
+ &:last-child {
573
+ border-start-end-radius: var(--radius-8);
574
+ border-end-end-radius: var(--radius-8);
575
+ }
576
+
577
+ &:first-child:nth-last-child(4),
578
+ &:first-child:nth-last-child(4) ~ * {
579
+ flex: 1;
580
+ }
581
+
582
+ &:first-child:nth-last-child(2) {
583
+ flex: 3;
584
+ }
585
+
586
+ &:last-child:nth-child(2) {
587
+ flex: 1;
588
+ }
589
+ }
590
+
591
+ &:first-child:last-child {
592
+ .color-input:first-child {
593
+ border-start-start-radius: var(--radius-8);
594
+ border-end-start-radius: var(--radius-8);
595
+ }
596
+ }
597
+ }
598
+ }
599
+ }
600
+ }
601
+
602
+ .celeste-color-swatches {
603
+ display: flex;
604
+ flex-direction: column;
605
+ padding: var(--radius-16);
606
+ border-block-start: 1px solid var(--color-stroke-soft-200);
607
+ }
608
+ }
609
+
610
+ :deep(.celeste-color-format) {
611
+ text-transform: uppercase;
612
+ }
613
+
614
+ :deep(.celeste-color-thumb) {
615
+ position: absolute;
616
+ width: 12px;
617
+ height: 12px;
618
+ transform: translate(-50%, -50%);
619
+ border-radius: 50%;
620
+ box-shadow:
621
+ 0 0 0 2px var(--color-bg-white-0),
622
+ var(--shadow-toggle-switch);
623
+ }
624
+
625
+ :deep(.celeste-color-slider) {
626
+ --track-height: 8px;
627
+
628
+ width: 100%;
629
+ padding-block: var(--spacing-4);
630
+
631
+ .slider-track {
632
+ position: relative;
633
+ width: 100%;
634
+ height: var(--track-height);
635
+ border-radius: calc(var(--track-height) / 2);
636
+
637
+ .celeste-color-thumb {
638
+ top: calc(var(--track-height) / 2);
639
+ }
640
+ }
641
+ }
642
+ </style>