blessing-ui 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 (633) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +21 -0
  3. package/README.md +359 -0
  4. package/dist/blessing-ui.css +412 -0
  5. package/dist/components/BlessAccordion.css +1 -0
  6. package/dist/components/BlessAccordion.js +6 -0
  7. package/dist/components/BlessAccordion.vue.d.ts +18 -0
  8. package/dist/components/BlessAccordion.vue_vue_type_script_setup_true_lang.js +14 -0
  9. package/dist/components/BlessAccordionItem.js +5 -0
  10. package/dist/components/BlessAccordionItem.vue.d.ts +27 -0
  11. package/dist/components/BlessAccordionItem.vue_vue_type_script_setup_true_lang.js +44 -0
  12. package/dist/components/BlessActionSheet.css +1 -0
  13. package/dist/components/BlessActionSheet.js +6 -0
  14. package/dist/components/BlessActionSheet.vue.d.ts +35 -0
  15. package/dist/components/BlessActionSheet.vue_vue_type_script_setup_true_lang.js +74 -0
  16. package/dist/components/BlessAlert.css +1 -0
  17. package/dist/components/BlessAlert.js +6 -0
  18. package/dist/components/BlessAlert.vue.d.ts +39 -0
  19. package/dist/components/BlessAlert.vue_vue_type_script_setup_true_lang.js +48 -0
  20. package/dist/components/BlessAlertDialog.css +1 -0
  21. package/dist/components/BlessAlertDialog.js +6 -0
  22. package/dist/components/BlessAlertDialog.vue.d.ts +38 -0
  23. package/dist/components/BlessAlertDialog.vue_vue_type_script_setup_true_lang.js +74 -0
  24. package/dist/components/BlessAspectRatio.css +1 -0
  25. package/dist/components/BlessAspectRatio.js +6 -0
  26. package/dist/components/BlessAspectRatio.vue.d.ts +22 -0
  27. package/dist/components/BlessAspectRatio.vue_vue_type_script_setup_true_lang.js +18 -0
  28. package/dist/components/BlessAttachment.css +1 -0
  29. package/dist/components/BlessAttachment.js +6 -0
  30. package/dist/components/BlessAttachment.vue.d.ts +40 -0
  31. package/dist/components/BlessAttachment.vue_vue_type_script_setup_true_lang.js +78 -0
  32. package/dist/components/BlessAudioPlayer.css +1 -0
  33. package/dist/components/BlessAudioPlayer.js +6 -0
  34. package/dist/components/BlessAudioPlayer.vue.d.ts +35 -0
  35. package/dist/components/BlessAudioPlayer.vue_vue_type_script_setup_true_lang.js +134 -0
  36. package/dist/components/BlessAvatar.css +1 -0
  37. package/dist/components/BlessAvatar.js +6 -0
  38. package/dist/components/BlessAvatar.vue.d.ts +26 -0
  39. package/dist/components/BlessAvatar.vue_vue_type_script_setup_true_lang.js +47 -0
  40. package/dist/components/BlessBackground.css +1 -0
  41. package/dist/components/BlessBackground.js +6 -0
  42. package/dist/components/BlessBackground.vue.d.ts +16 -0
  43. package/dist/components/BlessBackground.vue_vue_type_script_setup_true_lang.js +26 -0
  44. package/dist/components/BlessBadge.css +1 -0
  45. package/dist/components/BlessBadge.js +6 -0
  46. package/dist/components/BlessBadge.vue.d.ts +24 -0
  47. package/dist/components/BlessBadge.vue_vue_type_script_setup_true_lang.js +23 -0
  48. package/dist/components/BlessBlockUI.css +1 -0
  49. package/dist/components/BlessBlockUI.js +6 -0
  50. package/dist/components/BlessBlockUI.vue.d.ts +22 -0
  51. package/dist/components/BlessBlockUI.vue_vue_type_script_setup_true_lang.js +51 -0
  52. package/dist/components/BlessBottomTabs.css +1 -0
  53. package/dist/components/BlessBottomTabs.js +6 -0
  54. package/dist/components/BlessBottomTabs.vue.d.ts +47 -0
  55. package/dist/components/BlessBottomTabs.vue_vue_type_script_setup_true_lang.js +67 -0
  56. package/dist/components/BlessBreadcrumb.css +1 -0
  57. package/dist/components/BlessBreadcrumb.js +6 -0
  58. package/dist/components/BlessBreadcrumb.vue.d.ts +28 -0
  59. package/dist/components/BlessBreadcrumb.vue_vue_type_script_setup_true_lang.js +44 -0
  60. package/dist/components/BlessBubble.css +1 -0
  61. package/dist/components/BlessBubble.js +6 -0
  62. package/dist/components/BlessBubble.vue.d.ts +39 -0
  63. package/dist/components/BlessBubble.vue_vue_type_script_setup_true_lang.js +48 -0
  64. package/dist/components/BlessButton.css +1 -0
  65. package/dist/components/BlessButton.js +6 -0
  66. package/dist/components/BlessButton.vue.d.ts +40 -0
  67. package/dist/components/BlessButton.vue_vue_type_script_setup_true_lang.js +68 -0
  68. package/dist/components/BlessButtonGroup.css +1 -0
  69. package/dist/components/BlessButtonGroup.js +6 -0
  70. package/dist/components/BlessButtonGroup.vue.d.ts +19 -0
  71. package/dist/components/BlessButtonGroup.vue_vue_type_script_setup_true_lang.js +19 -0
  72. package/dist/components/BlessCalendar.css +1 -0
  73. package/dist/components/BlessCalendar.js +6 -0
  74. package/dist/components/BlessCalendar.vue.d.ts +26 -0
  75. package/dist/components/BlessCalendar.vue_vue_type_script_setup_true_lang.js +150 -0
  76. package/dist/components/BlessCard.css +1 -0
  77. package/dist/components/BlessCard.js +6 -0
  78. package/dist/components/BlessCard.vue.d.ts +34 -0
  79. package/dist/components/BlessCard.vue_vue_type_script_setup_true_lang.js +49 -0
  80. package/dist/components/BlessCarousel.css +1 -0
  81. package/dist/components/BlessCarousel.js +6 -0
  82. package/dist/components/BlessCarousel.vue.d.ts +52 -0
  83. package/dist/components/BlessCarousel.vue_vue_type_script_setup_true_lang.js +147 -0
  84. package/dist/components/BlessCascadeSelect.css +1 -0
  85. package/dist/components/BlessCascadeSelect.js +6 -0
  86. package/dist/components/BlessCascadeSelect.vue.d.ts +36 -0
  87. package/dist/components/BlessCascadeSelect.vue_vue_type_script_setup_true_lang.js +169 -0
  88. package/dist/components/BlessChart.css +1 -0
  89. package/dist/components/BlessChart.js +6 -0
  90. package/dist/components/BlessChart.vue.d.ts +28 -0
  91. package/dist/components/BlessChart.vue_vue_type_script_setup_true_lang.js +44 -0
  92. package/dist/components/BlessCheckbox.css +1 -0
  93. package/dist/components/BlessCheckbox.js +6 -0
  94. package/dist/components/BlessCheckbox.vue.d.ts +29 -0
  95. package/dist/components/BlessCheckbox.vue_vue_type_script_setup_true_lang.js +69 -0
  96. package/dist/components/BlessChip.css +1 -0
  97. package/dist/components/BlessChip.js +6 -0
  98. package/dist/components/BlessChip.vue.d.ts +30 -0
  99. package/dist/components/BlessChip.vue_vue_type_script_setup_true_lang.js +41 -0
  100. package/dist/components/BlessCircularProgress.css +1 -0
  101. package/dist/components/BlessCircularProgress.js +6 -0
  102. package/dist/components/BlessCircularProgress.vue.d.ts +33 -0
  103. package/dist/components/BlessCircularProgress.vue_vue_type_script_setup_true_lang.js +82 -0
  104. package/dist/components/BlessClientOnly.js +5 -0
  105. package/dist/components/BlessClientOnly.vue.d.ts +15 -0
  106. package/dist/components/BlessClientOnly.vue_vue_type_script_setup_true_lang.js +12 -0
  107. package/dist/components/BlessCollapsible.css +1 -0
  108. package/dist/components/BlessCollapsible.js +6 -0
  109. package/dist/components/BlessCollapsible.vue.d.ts +29 -0
  110. package/dist/components/BlessCollapsible.vue_vue_type_script_setup_true_lang.js +37 -0
  111. package/dist/components/BlessColorPicker.css +1 -0
  112. package/dist/components/BlessColorPicker.js +6 -0
  113. package/dist/components/BlessColorPicker.vue.d.ts +30 -0
  114. package/dist/components/BlessColorPicker.vue_vue_type_script_setup_true_lang.js +73 -0
  115. package/dist/components/BlessCombobox.css +1 -0
  116. package/dist/components/BlessCombobox.js +6 -0
  117. package/dist/components/BlessCombobox.vue.d.ts +42 -0
  118. package/dist/components/BlessCombobox.vue_vue_type_script_setup_true_lang.js +191 -0
  119. package/dist/components/BlessCommand.css +1 -0
  120. package/dist/components/BlessCommand.js +6 -0
  121. package/dist/components/BlessCommand.vue.d.ts +53 -0
  122. package/dist/components/BlessCommand.vue_vue_type_script_setup_true_lang.js +154 -0
  123. package/dist/components/BlessCompare.css +1 -0
  124. package/dist/components/BlessCompare.js +6 -0
  125. package/dist/components/BlessCompare.vue.d.ts +31 -0
  126. package/dist/components/BlessCompare.vue_vue_type_script_setup_true_lang.js +49 -0
  127. package/dist/components/BlessConfirmPopup.css +1 -0
  128. package/dist/components/BlessConfirmPopup.js +6 -0
  129. package/dist/components/BlessConfirmPopup.vue.d.ts +41 -0
  130. package/dist/components/BlessConfirmPopup.vue_vue_type_script_setup_true_lang.js +65 -0
  131. package/dist/components/BlessContainer.css +1 -0
  132. package/dist/components/BlessContainer.js +6 -0
  133. package/dist/components/BlessContainer.vue.d.ts +22 -0
  134. package/dist/components/BlessContainer.vue_vue_type_script_setup_true_lang.js +22 -0
  135. package/dist/components/BlessContextMenu.js +5 -0
  136. package/dist/components/BlessContextMenu.vue.d.ts +23 -0
  137. package/dist/components/BlessContextMenu.vue_vue_type_script_setup_true_lang.js +34 -0
  138. package/dist/components/BlessDash.css +1 -0
  139. package/dist/components/BlessDash.js +6 -0
  140. package/dist/components/BlessDash.vue.d.ts +8 -0
  141. package/dist/components/BlessDash.vue_vue_type_script_setup_true_lang.js +12 -0
  142. package/dist/components/BlessDataTable.css +1 -0
  143. package/dist/components/BlessDataTable.js +6 -0
  144. package/dist/components/BlessDataTable.vue.d.ts +82 -0
  145. package/dist/components/BlessDataTable.vue_vue_type_script_setup_true_lang.js +212 -0
  146. package/dist/components/BlessDataView.css +1 -0
  147. package/dist/components/BlessDataView.js +6 -0
  148. package/dist/components/BlessDataView.vue.d.ts +43 -0
  149. package/dist/components/BlessDataView.vue_vue_type_script_setup_true_lang.js +86 -0
  150. package/dist/components/BlessDatePicker.css +1 -0
  151. package/dist/components/BlessDatePicker.js +6 -0
  152. package/dist/components/BlessDatePicker.vue.d.ts +29 -0
  153. package/dist/components/BlessDatePicker.vue_vue_type_script_setup_true_lang.js +137 -0
  154. package/dist/components/BlessDeferredContent.js +5 -0
  155. package/dist/components/BlessDeferredContent.vue.d.ts +26 -0
  156. package/dist/components/BlessDeferredContent.vue_vue_type_script_setup_true_lang.js +30 -0
  157. package/dist/components/BlessDialogHost.css +1 -0
  158. package/dist/components/BlessDialogHost.js +6 -0
  159. package/dist/components/BlessDialogHost.vue.d.ts +3 -0
  160. package/dist/components/BlessDialogHost.vue_vue_type_script_setup_true_lang.js +36 -0
  161. package/dist/components/BlessDrawer.js +5 -0
  162. package/dist/components/BlessDrawer.vue.d.ts +34 -0
  163. package/dist/components/BlessDrawer.vue_vue_type_script_setup_true_lang.js +54 -0
  164. package/dist/components/BlessDropdownMenu.css +1 -0
  165. package/dist/components/BlessDropdownMenu.js +6 -0
  166. package/dist/components/BlessDropdownMenu.vue.d.ts +43 -0
  167. package/dist/components/BlessDropdownMenu.vue_vue_type_script_setup_true_lang.js +126 -0
  168. package/dist/components/BlessEditor.css +1 -0
  169. package/dist/components/BlessEditor.js +6 -0
  170. package/dist/components/BlessEditor.vue.d.ts +50 -0
  171. package/dist/components/BlessEditor.vue_vue_type_script_setup_true_lang.js +159 -0
  172. package/dist/components/BlessEmpty.css +1 -0
  173. package/dist/components/BlessEmpty.js +6 -0
  174. package/dist/components/BlessEmpty.vue.d.ts +27 -0
  175. package/dist/components/BlessEmpty.vue_vue_type_script_setup_true_lang.js +34 -0
  176. package/dist/components/BlessField.css +1 -0
  177. package/dist/components/BlessField.js +6 -0
  178. package/dist/components/BlessField.vue.d.ts +26 -0
  179. package/dist/components/BlessField.vue_vue_type_script_setup_true_lang.js +66 -0
  180. package/dist/components/BlessFieldset.css +1 -0
  181. package/dist/components/BlessFieldset.js +6 -0
  182. package/dist/components/BlessFieldset.vue.d.ts +30 -0
  183. package/dist/components/BlessFieldset.vue_vue_type_script_setup_true_lang.js +40 -0
  184. package/dist/components/BlessFileInput.css +1 -0
  185. package/dist/components/BlessFileInput.js +6 -0
  186. package/dist/components/BlessFileInput.vue.d.ts +38 -0
  187. package/dist/components/BlessFileInput.vue_vue_type_script_setup_true_lang.js +107 -0
  188. package/dist/components/BlessFloatLabel.css +1 -0
  189. package/dist/components/BlessFloatLabel.js +6 -0
  190. package/dist/components/BlessFloatLabel.vue.d.ts +22 -0
  191. package/dist/components/BlessFloatLabel.vue_vue_type_script_setup_true_lang.js +21 -0
  192. package/dist/components/BlessForm.css +1 -0
  193. package/dist/components/BlessForm.js +6 -0
  194. package/dist/components/BlessForm.vue.d.ts +27 -0
  195. package/dist/components/BlessForm.vue_vue_type_script_setup_true_lang.js +41 -0
  196. package/dist/components/BlessGallery.css +1 -0
  197. package/dist/components/BlessGallery.js +6 -0
  198. package/dist/components/BlessGallery.vue.d.ts +44 -0
  199. package/dist/components/BlessGallery.vue_vue_type_script_setup_true_lang.js +109 -0
  200. package/dist/components/BlessHoverCard.css +1 -0
  201. package/dist/components/BlessHoverCard.js +6 -0
  202. package/dist/components/BlessHoverCard.vue.d.ts +33 -0
  203. package/dist/components/BlessHoverCard.vue_vue_type_script_setup_true_lang.js +42 -0
  204. package/dist/components/BlessIcon.css +1 -0
  205. package/dist/components/BlessIcon.js +6 -0
  206. package/dist/components/BlessIcon.vue.d.ts +21 -0
  207. package/dist/components/BlessIcon.vue_vue_type_script_setup_true_lang.js +33 -0
  208. package/dist/components/BlessImg.css +1 -0
  209. package/dist/components/BlessImg.js +6 -0
  210. package/dist/components/BlessImg.vue.d.ts +31 -0
  211. package/dist/components/BlessImg.vue_vue_type_script_setup_true_lang.js +79 -0
  212. package/dist/components/BlessIndicator.css +1 -0
  213. package/dist/components/BlessIndicator.js +6 -0
  214. package/dist/components/BlessIndicator.vue.d.ts +28 -0
  215. package/dist/components/BlessIndicator.vue_vue_type_script_setup_true_lang.js +39 -0
  216. package/dist/components/BlessInfiniteScroll.css +1 -0
  217. package/dist/components/BlessInfiniteScroll.js +6 -0
  218. package/dist/components/BlessInfiniteScroll.vue.d.ts +40 -0
  219. package/dist/components/BlessInfiniteScroll.vue_vue_type_script_setup_true_lang.js +64 -0
  220. package/dist/components/BlessInplace.css +1 -0
  221. package/dist/components/BlessInplace.js +6 -0
  222. package/dist/components/BlessInplace.vue.d.ts +37 -0
  223. package/dist/components/BlessInplace.vue_vue_type_script_setup_true_lang.js +53 -0
  224. package/dist/components/BlessInput.css +1 -0
  225. package/dist/components/BlessInput.js +6 -0
  226. package/dist/components/BlessInput.vue.d.ts +40 -0
  227. package/dist/components/BlessInput.vue_vue_type_script_setup_true_lang.js +70 -0
  228. package/dist/components/BlessInputGroup.css +1 -0
  229. package/dist/components/BlessInputGroup.js +6 -0
  230. package/dist/components/BlessInputGroup.vue.d.ts +23 -0
  231. package/dist/components/BlessInputGroup.vue_vue_type_script_setup_true_lang.js +28 -0
  232. package/dist/components/BlessInputMask.js +5 -0
  233. package/dist/components/BlessInputMask.vue.d.ts +20 -0
  234. package/dist/components/BlessInputMask.vue_vue_type_script_setup_true_lang.js +42 -0
  235. package/dist/components/BlessInputNumber.css +1 -0
  236. package/dist/components/BlessInputNumber.js +6 -0
  237. package/dist/components/BlessInputNumber.vue.d.ts +34 -0
  238. package/dist/components/BlessInputNumber.vue_vue_type_script_setup_true_lang.js +132 -0
  239. package/dist/components/BlessInputOTP.css +1 -0
  240. package/dist/components/BlessInputOTP.js +6 -0
  241. package/dist/components/BlessInputOTP.vue.d.ts +32 -0
  242. package/dist/components/BlessInputOTP.vue_vue_type_script_setup_true_lang.js +117 -0
  243. package/dist/components/BlessInputTags.css +1 -0
  244. package/dist/components/BlessInputTags.js +6 -0
  245. package/dist/components/BlessInputTags.vue.d.ts +27 -0
  246. package/dist/components/BlessInputTags.vue_vue_type_script_setup_true_lang.js +107 -0
  247. package/dist/components/BlessItem.css +1 -0
  248. package/dist/components/BlessItem.js +6 -0
  249. package/dist/components/BlessItem.vue.d.ts +34 -0
  250. package/dist/components/BlessItem.vue_vue_type_script_setup_true_lang.js +51 -0
  251. package/dist/components/BlessKbd.css +1 -0
  252. package/dist/components/BlessKbd.js +6 -0
  253. package/dist/components/BlessKbd.vue.d.ts +17 -0
  254. package/dist/components/BlessKbd.vue_vue_type_script_setup_true_lang.js +19 -0
  255. package/dist/components/BlessKnob.css +1 -0
  256. package/dist/components/BlessKnob.js +6 -0
  257. package/dist/components/BlessKnob.vue.d.ts +32 -0
  258. package/dist/components/BlessKnob.vue_vue_type_script_setup_true_lang.js +99 -0
  259. package/dist/components/BlessLabel.css +1 -0
  260. package/dist/components/BlessLabel.js +6 -0
  261. package/dist/components/BlessLabel.vue.d.ts +21 -0
  262. package/dist/components/BlessLabel.vue_vue_type_script_setup_true_lang.js +31 -0
  263. package/dist/components/BlessLayout.css +1 -0
  264. package/dist/components/BlessLayout.js +6 -0
  265. package/dist/components/BlessLayout.vue.d.ts +47 -0
  266. package/dist/components/BlessLayout.vue_vue_type_script_setup_true_lang.js +107 -0
  267. package/dist/components/BlessList.css +1 -0
  268. package/dist/components/BlessList.js +6 -0
  269. package/dist/components/BlessList.vue.d.ts +18 -0
  270. package/dist/components/BlessList.vue_vue_type_script_setup_true_lang.js +18 -0
  271. package/dist/components/BlessListItem.css +1 -0
  272. package/dist/components/BlessListItem.js +6 -0
  273. package/dist/components/BlessListItem.vue.d.ts +24 -0
  274. package/dist/components/BlessListItem.vue_vue_type_script_setup_true_lang.js +43 -0
  275. package/dist/components/BlessListbox.css +1 -0
  276. package/dist/components/BlessListbox.js +6 -0
  277. package/dist/components/BlessListbox.vue.d.ts +38 -0
  278. package/dist/components/BlessListbox.vue_vue_type_script_setup_true_lang.js +131 -0
  279. package/dist/components/BlessLoadingBar.css +1 -0
  280. package/dist/components/BlessLoadingBar.js +6 -0
  281. package/dist/components/BlessLoadingBar.vue.d.ts +12 -0
  282. package/dist/components/BlessLoadingBar.vue_vue_type_script_setup_true_lang.js +33 -0
  283. package/dist/components/BlessMarker.css +1 -0
  284. package/dist/components/BlessMarker.js +6 -0
  285. package/dist/components/BlessMarker.vue.d.ts +25 -0
  286. package/dist/components/BlessMarker.vue_vue_type_script_setup_true_lang.js +27 -0
  287. package/dist/components/BlessMenuList.css +1 -0
  288. package/dist/components/BlessMenuList.js +6 -0
  289. package/dist/components/BlessMenuList.vue.d.ts +20 -0
  290. package/dist/components/BlessMenuList.vue_vue_type_script_setup_true_lang.js +148 -0
  291. package/dist/components/BlessMenubar.css +1 -0
  292. package/dist/components/BlessMenubar.js +6 -0
  293. package/dist/components/BlessMenubar.vue.d.ts +16 -0
  294. package/dist/components/BlessMenubar.vue_vue_type_script_setup_true_lang.js +38 -0
  295. package/dist/components/BlessMessage.css +1 -0
  296. package/dist/components/BlessMessage.js +6 -0
  297. package/dist/components/BlessMessage.vue.d.ts +36 -0
  298. package/dist/components/BlessMessage.vue_vue_type_script_setup_true_lang.js +51 -0
  299. package/dist/components/BlessMessageScroller.css +1 -0
  300. package/dist/components/BlessMessageScroller.js +6 -0
  301. package/dist/components/BlessMessageScroller.vue.d.ts +49 -0
  302. package/dist/components/BlessMessageScroller.vue_vue_type_script_setup_true_lang.js +83 -0
  303. package/dist/components/BlessMeterGroup.css +1 -0
  304. package/dist/components/BlessMeterGroup.js +6 -0
  305. package/dist/components/BlessMeterGroup.vue.d.ts +35 -0
  306. package/dist/components/BlessMeterGroup.vue_vue_type_script_setup_true_lang.js +64 -0
  307. package/dist/components/BlessMockup.css +1 -0
  308. package/dist/components/BlessMockup.js +6 -0
  309. package/dist/components/BlessMockup.vue.d.ts +23 -0
  310. package/dist/components/BlessMockup.vue_vue_type_script_setup_true_lang.js +37 -0
  311. package/dist/components/BlessModal.css +1 -0
  312. package/dist/components/BlessModal.js +6 -0
  313. package/dist/components/BlessModal.vue.d.ts +40 -0
  314. package/dist/components/BlessModal.vue_vue_type_script_setup_true_lang.js +85 -0
  315. package/dist/components/BlessNavigationMenu.css +1 -0
  316. package/dist/components/BlessNavigationMenu.js +6 -0
  317. package/dist/components/BlessNavigationMenu.vue.d.ts +42 -0
  318. package/dist/components/BlessNavigationMenu.vue_vue_type_script_setup_true_lang.js +116 -0
  319. package/dist/components/BlessOrderList.css +1 -0
  320. package/dist/components/BlessOrderList.js +6 -0
  321. package/dist/components/BlessOrderList.vue.d.ts +33 -0
  322. package/dist/components/BlessOrderList.vue_vue_type_script_setup_true_lang.js +114 -0
  323. package/dist/components/BlessOrgChart.css +1 -0
  324. package/dist/components/BlessOrgChart.js +6 -0
  325. package/dist/components/BlessOrgChart.vue.d.ts +33 -0
  326. package/dist/components/BlessOrgChart.vue_vue_type_script_setup_true_lang.js +41 -0
  327. package/dist/components/BlessOrgChartNode.js +5 -0
  328. package/dist/components/BlessOrgChartNode.vue.d.ts +25 -0
  329. package/dist/components/BlessOrgChartNode.vue_vue_type_script_setup_true_lang.js +57 -0
  330. package/dist/components/BlessPagination.css +1 -0
  331. package/dist/components/BlessPagination.js +6 -0
  332. package/dist/components/BlessPagination.vue.d.ts +26 -0
  333. package/dist/components/BlessPagination.vue_vue_type_script_setup_true_lang.js +99 -0
  334. package/dist/components/BlessPaletteToggle.css +1 -0
  335. package/dist/components/BlessPaletteToggle.js +6 -0
  336. package/dist/components/BlessPaletteToggle.vue.d.ts +11 -0
  337. package/dist/components/BlessPaletteToggle.vue_vue_type_script_setup_true_lang.js +38 -0
  338. package/dist/components/BlessPanel.css +1 -0
  339. package/dist/components/BlessPanel.js +6 -0
  340. package/dist/components/BlessPanel.vue.d.ts +37 -0
  341. package/dist/components/BlessPanel.vue_vue_type_script_setup_true_lang.js +56 -0
  342. package/dist/components/BlessParallax.css +1 -0
  343. package/dist/components/BlessParallax.js +6 -0
  344. package/dist/components/BlessParallax.vue.d.ts +25 -0
  345. package/dist/components/BlessParallax.vue_vue_type_script_setup_true_lang.js +39 -0
  346. package/dist/components/BlessPasswordInput.css +1 -0
  347. package/dist/components/BlessPasswordInput.js +6 -0
  348. package/dist/components/BlessPasswordInput.vue.d.ts +19 -0
  349. package/dist/components/BlessPasswordInput.vue_vue_type_script_setup_true_lang.js +44 -0
  350. package/dist/components/BlessPasswordMeter.css +1 -0
  351. package/dist/components/BlessPasswordMeter.js +6 -0
  352. package/dist/components/BlessPasswordMeter.vue.d.ts +21 -0
  353. package/dist/components/BlessPasswordMeter.vue_vue_type_script_setup_true_lang.js +74 -0
  354. package/dist/components/BlessPickList.css +1 -0
  355. package/dist/components/BlessPickList.js +6 -0
  356. package/dist/components/BlessPickList.vue.d.ts +29 -0
  357. package/dist/components/BlessPickList.vue_vue_type_script_setup_true_lang.js +120 -0
  358. package/dist/components/BlessPopover.css +1 -0
  359. package/dist/components/BlessPopover.js +6 -0
  360. package/dist/components/BlessPopover.vue.d.ts +46 -0
  361. package/dist/components/BlessPopover.vue_vue_type_script_setup_true_lang.js +84 -0
  362. package/dist/components/BlessProgress.css +1 -0
  363. package/dist/components/BlessProgress.js +6 -0
  364. package/dist/components/BlessProgress.vue.d.ts +18 -0
  365. package/dist/components/BlessProgress.vue_vue_type_script_setup_true_lang.js +53 -0
  366. package/dist/components/BlessPullToRefresh.css +1 -0
  367. package/dist/components/BlessPullToRefresh.js +6 -0
  368. package/dist/components/BlessPullToRefresh.vue.d.ts +38 -0
  369. package/dist/components/BlessPullToRefresh.vue_vue_type_script_setup_true_lang.js +55 -0
  370. package/dist/components/BlessQrCode.css +1 -0
  371. package/dist/components/BlessQrCode.js +6 -0
  372. package/dist/components/BlessQrCode.vue.d.ts +24 -0
  373. package/dist/components/BlessQrCode.vue_vue_type_script_setup_true_lang.js +51 -0
  374. package/dist/components/BlessQuestionnaire.css +1 -0
  375. package/dist/components/BlessQuestionnaire.js +6 -0
  376. package/dist/components/BlessQuestionnaire.vue.d.ts +33 -0
  377. package/dist/components/BlessQuestionnaire.vue_vue_type_script_setup_true_lang.js +195 -0
  378. package/dist/components/BlessRadio.css +1 -0
  379. package/dist/components/BlessRadio.js +6 -0
  380. package/dist/components/BlessRadio.vue.d.ts +19 -0
  381. package/dist/components/BlessRadio.vue_vue_type_script_setup_true_lang.js +58 -0
  382. package/dist/components/BlessRadioGroup.css +1 -0
  383. package/dist/components/BlessRadioGroup.js +6 -0
  384. package/dist/components/BlessRadioGroup.vue.d.ts +33 -0
  385. package/dist/components/BlessRadioGroup.vue_vue_type_script_setup_true_lang.js +48 -0
  386. package/dist/components/BlessRange.css +1 -0
  387. package/dist/components/BlessRange.js +6 -0
  388. package/dist/components/BlessRange.vue.d.ts +32 -0
  389. package/dist/components/BlessRange.vue_vue_type_script_setup_true_lang.js +111 -0
  390. package/dist/components/BlessRating.css +1 -0
  391. package/dist/components/BlessRating.js +6 -0
  392. package/dist/components/BlessRating.vue.d.ts +26 -0
  393. package/dist/components/BlessRating.vue_vue_type_script_setup_true_lang.js +62 -0
  394. package/dist/components/BlessResizable.css +1 -0
  395. package/dist/components/BlessResizable.js +6 -0
  396. package/dist/components/BlessResizable.vue.d.ts +38 -0
  397. package/dist/components/BlessResizable.vue_vue_type_script_setup_true_lang.js +78 -0
  398. package/dist/components/BlessScrollArea.css +1 -0
  399. package/dist/components/BlessScrollArea.js +6 -0
  400. package/dist/components/BlessScrollArea.vue.d.ts +25 -0
  401. package/dist/components/BlessScrollArea.vue_vue_type_script_setup_true_lang.js +30 -0
  402. package/dist/components/BlessScrollTop.css +1 -0
  403. package/dist/components/BlessScrollTop.js +6 -0
  404. package/dist/components/BlessScrollTop.vue.d.ts +25 -0
  405. package/dist/components/BlessScrollTop.vue_vue_type_script_setup_true_lang.js +41 -0
  406. package/dist/components/BlessSection.css +1 -0
  407. package/dist/components/BlessSection.js +6 -0
  408. package/dist/components/BlessSection.vue.d.ts +35 -0
  409. package/dist/components/BlessSection.vue_vue_type_script_setup_true_lang.js +40 -0
  410. package/dist/components/BlessSelect.css +1 -0
  411. package/dist/components/BlessSelect.js +6 -0
  412. package/dist/components/BlessSelect.vue.d.ts +35 -0
  413. package/dist/components/BlessSelect.vue_vue_type_script_setup_true_lang.js +78 -0
  414. package/dist/components/BlessSeparator.css +1 -0
  415. package/dist/components/BlessSeparator.js +6 -0
  416. package/dist/components/BlessSeparator.vue.d.ts +15 -0
  417. package/dist/components/BlessSeparator.vue_vue_type_script_setup_true_lang.js +35 -0
  418. package/dist/components/BlessSheet.css +1 -0
  419. package/dist/components/BlessSheet.js +6 -0
  420. package/dist/components/BlessSheet.vue.d.ts +40 -0
  421. package/dist/components/BlessSheet.vue_vue_type_script_setup_true_lang.js +97 -0
  422. package/dist/components/BlessSidebarNav.css +1 -0
  423. package/dist/components/BlessSidebarNav.js +6 -0
  424. package/dist/components/BlessSidebarNav.vue.d.ts +35 -0
  425. package/dist/components/BlessSidebarNav.vue_vue_type_script_setup_true_lang.js +54 -0
  426. package/dist/components/BlessSignaturePad.css +1 -0
  427. package/dist/components/BlessSignaturePad.js +6 -0
  428. package/dist/components/BlessSignaturePad.vue.d.ts +50 -0
  429. package/dist/components/BlessSignaturePad.vue_vue_type_script_setup_true_lang.js +80 -0
  430. package/dist/components/BlessSkeleton.css +1 -0
  431. package/dist/components/BlessSkeleton.js +6 -0
  432. package/dist/components/BlessSkeleton.vue.d.ts +14 -0
  433. package/dist/components/BlessSkeleton.vue_vue_type_script_setup_true_lang.js +36 -0
  434. package/dist/components/BlessSkew.css +1 -0
  435. package/dist/components/BlessSkew.js +6 -0
  436. package/dist/components/BlessSkew.vue.d.ts +25 -0
  437. package/dist/components/BlessSkew.vue_vue_type_script_setup_true_lang.js +19 -0
  438. package/dist/components/BlessSlideItem.css +1 -0
  439. package/dist/components/BlessSlideItem.js +6 -0
  440. package/dist/components/BlessSlideItem.vue.d.ts +37 -0
  441. package/dist/components/BlessSlideItem.vue_vue_type_script_setup_true_lang.js +57 -0
  442. package/dist/components/BlessSlideTransition.js +5 -0
  443. package/dist/components/BlessSlideTransition.vue.d.ts +20 -0
  444. package/dist/components/BlessSlideTransition.vue_vue_type_script_setup_true_lang.js +44 -0
  445. package/dist/components/BlessSlider.css +1 -0
  446. package/dist/components/BlessSlider.js +6 -0
  447. package/dist/components/BlessSlider.vue.d.ts +26 -0
  448. package/dist/components/BlessSlider.vue_vue_type_script_setup_true_lang.js +68 -0
  449. package/dist/components/BlessSpeedDial.css +1 -0
  450. package/dist/components/BlessSpeedDial.js +6 -0
  451. package/dist/components/BlessSpeedDial.vue.d.ts +45 -0
  452. package/dist/components/BlessSpeedDial.vue_vue_type_script_setup_true_lang.js +80 -0
  453. package/dist/components/BlessSpinner.css +1 -0
  454. package/dist/components/BlessSpinner.js +6 -0
  455. package/dist/components/BlessSpinner.vue.d.ts +13 -0
  456. package/dist/components/BlessSpinner.vue_vue_type_script_setup_true_lang.js +25 -0
  457. package/dist/components/BlessSplash.css +1 -0
  458. package/dist/components/BlessSplash.js +6 -0
  459. package/dist/components/BlessSplash.vue.d.ts +35 -0
  460. package/dist/components/BlessSplash.vue_vue_type_script_setup_true_lang.js +53 -0
  461. package/dist/components/BlessSplitButton.css +1 -0
  462. package/dist/components/BlessSplitButton.js +6 -0
  463. package/dist/components/BlessSplitButton.vue.d.ts +35 -0
  464. package/dist/components/BlessSplitButton.vue_vue_type_script_setup_true_lang.js +73 -0
  465. package/dist/components/BlessStack.css +1 -0
  466. package/dist/components/BlessStack.js +6 -0
  467. package/dist/components/BlessStack.vue.d.ts +28 -0
  468. package/dist/components/BlessStack.vue_vue_type_script_setup_true_lang.js +40 -0
  469. package/dist/components/BlessStage.css +1 -0
  470. package/dist/components/BlessStage.js +6 -0
  471. package/dist/components/BlessStage.vue.d.ts +34 -0
  472. package/dist/components/BlessStage.vue_vue_type_script_setup_true_lang.js +74 -0
  473. package/dist/components/BlessStepper.css +1 -0
  474. package/dist/components/BlessStepper.js +6 -0
  475. package/dist/components/BlessStepper.vue.d.ts +51 -0
  476. package/dist/components/BlessStepper.vue_vue_type_script_setup_true_lang.js +80 -0
  477. package/dist/components/BlessSteps.css +1 -0
  478. package/dist/components/BlessSteps.js +6 -0
  479. package/dist/components/BlessSteps.vue.d.ts +27 -0
  480. package/dist/components/BlessSteps.vue_vue_type_script_setup_true_lang.js +48 -0
  481. package/dist/components/BlessSwap.css +1 -0
  482. package/dist/components/BlessSwap.js +6 -0
  483. package/dist/components/BlessSwap.vue.d.ts +30 -0
  484. package/dist/components/BlessSwap.vue_vue_type_script_setup_true_lang.js +53 -0
  485. package/dist/components/BlessSwitch.css +1 -0
  486. package/dist/components/BlessSwitch.js +6 -0
  487. package/dist/components/BlessSwitch.vue.d.ts +27 -0
  488. package/dist/components/BlessSwitch.vue_vue_type_script_setup_true_lang.js +58 -0
  489. package/dist/components/BlessTabPanels.css +1 -0
  490. package/dist/components/BlessTabPanels.js +6 -0
  491. package/dist/components/BlessTabPanels.vue.d.ts +38 -0
  492. package/dist/components/BlessTabPanels.vue_vue_type_script_setup_true_lang.js +63 -0
  493. package/dist/components/BlessTable.css +1 -0
  494. package/dist/components/BlessTable.js +6 -0
  495. package/dist/components/BlessTable.vue.d.ts +46 -0
  496. package/dist/components/BlessTable.vue_vue_type_script_setup_true_lang.js +76 -0
  497. package/dist/components/BlessTabs.css +1 -0
  498. package/dist/components/BlessTabs.js +6 -0
  499. package/dist/components/BlessTabs.vue.d.ts +44 -0
  500. package/dist/components/BlessTabs.vue_vue_type_script_setup_true_lang.js +93 -0
  501. package/dist/components/BlessText.css +1 -0
  502. package/dist/components/BlessText.js +6 -0
  503. package/dist/components/BlessText.vue.d.ts +31 -0
  504. package/dist/components/BlessText.vue_vue_type_script_setup_true_lang.js +34 -0
  505. package/dist/components/BlessTextarea.css +1 -0
  506. package/dist/components/BlessTextarea.js +6 -0
  507. package/dist/components/BlessTextarea.vue.d.ts +28 -0
  508. package/dist/components/BlessTextarea.vue_vue_type_script_setup_true_lang.js +72 -0
  509. package/dist/components/BlessThemeToggle.css +1 -0
  510. package/dist/components/BlessThemeToggle.js +6 -0
  511. package/dist/components/BlessThemeToggle.vue.d.ts +22 -0
  512. package/dist/components/BlessThemeToggle.vue_vue_type_script_setup_true_lang.js +60 -0
  513. package/dist/components/BlessTimePicker.css +1 -0
  514. package/dist/components/BlessTimePicker.js +6 -0
  515. package/dist/components/BlessTimePicker.vue.d.ts +30 -0
  516. package/dist/components/BlessTimePicker.vue_vue_type_script_setup_true_lang.js +69 -0
  517. package/dist/components/BlessTimeline.css +1 -0
  518. package/dist/components/BlessTimeline.js +6 -0
  519. package/dist/components/BlessTimeline.vue.d.ts +36 -0
  520. package/dist/components/BlessTimeline.vue_vue_type_script_setup_true_lang.js +42 -0
  521. package/dist/components/BlessToaster.css +1 -0
  522. package/dist/components/BlessToaster.js +6 -0
  523. package/dist/components/BlessToaster.vue.d.ts +13 -0
  524. package/dist/components/BlessToaster.vue_vue_type_script_setup_true_lang.js +62 -0
  525. package/dist/components/BlessToggle.css +1 -0
  526. package/dist/components/BlessToggle.js +6 -0
  527. package/dist/components/BlessToggle.vue.d.ts +32 -0
  528. package/dist/components/BlessToggle.vue_vue_type_script_setup_true_lang.js +53 -0
  529. package/dist/components/BlessToggleGroup.css +1 -0
  530. package/dist/components/BlessToggleGroup.js +6 -0
  531. package/dist/components/BlessToggleGroup.vue.d.ts +28 -0
  532. package/dist/components/BlessToggleGroup.vue_vue_type_script_setup_true_lang.js +37 -0
  533. package/dist/components/BlessToolbar.css +1 -0
  534. package/dist/components/BlessToolbar.js +6 -0
  535. package/dist/components/BlessToolbar.vue.d.ts +26 -0
  536. package/dist/components/BlessToolbar.vue_vue_type_script_setup_true_lang.js +27 -0
  537. package/dist/components/BlessTooltip.css +1 -0
  538. package/dist/components/BlessTooltip.js +6 -0
  539. package/dist/components/BlessTooltip.vue.d.ts +24 -0
  540. package/dist/components/BlessTooltip.vue_vue_type_script_setup_true_lang.js +67 -0
  541. package/dist/components/BlessTour.css +1 -0
  542. package/dist/components/BlessTour.js +6 -0
  543. package/dist/components/BlessTour.vue.d.ts +39 -0
  544. package/dist/components/BlessTour.vue_vue_type_script_setup_true_lang.js +118 -0
  545. package/dist/components/BlessTree.css +1 -0
  546. package/dist/components/BlessTree.js +6 -0
  547. package/dist/components/BlessTree.vue.d.ts +20 -0
  548. package/dist/components/BlessTree.vue_vue_type_script_setup_true_lang.js +67 -0
  549. package/dist/components/BlessTreeItem.js +5 -0
  550. package/dist/components/BlessTreeItem.vue.d.ts +14 -0
  551. package/dist/components/BlessTreeItem.vue_vue_type_script_setup_true_lang.js +88 -0
  552. package/dist/components/BlessTreeSelect.css +1 -0
  553. package/dist/components/BlessTreeSelect.js +6 -0
  554. package/dist/components/BlessTreeSelect.vue.d.ts +32 -0
  555. package/dist/components/BlessTreeSelect.vue_vue_type_script_setup_true_lang.js +118 -0
  556. package/dist/components/BlessTreeTable.css +1 -0
  557. package/dist/components/BlessTreeTable.js +6 -0
  558. package/dist/components/BlessTreeTable.vue.d.ts +40 -0
  559. package/dist/components/BlessTreeTable.vue_vue_type_script_setup_true_lang.js +86 -0
  560. package/dist/components/BlessUploader.css +1 -0
  561. package/dist/components/BlessUploader.js +6 -0
  562. package/dist/components/BlessUploader.vue.d.ts +451 -0
  563. package/dist/components/BlessUploader.vue_vue_type_script_setup_true_lang.js +157 -0
  564. package/dist/components/BlessVideo.css +1 -0
  565. package/dist/components/BlessVideo.js +6 -0
  566. package/dist/components/BlessVideo.vue.d.ts +25 -0
  567. package/dist/components/BlessVideo.vue_vue_type_script_setup_true_lang.js +44 -0
  568. package/dist/components/BlessVirtualScroller.css +1 -0
  569. package/dist/components/BlessVirtualScroller.js +6 -0
  570. package/dist/components/BlessVirtualScroller.vue.d.ts +36 -0
  571. package/dist/components/BlessVirtualScroller.vue_vue_type_script_setup_true_lang.js +89 -0
  572. package/dist/components/BlessWatermark.css +1 -0
  573. package/dist/components/BlessWatermark.js +6 -0
  574. package/dist/components/BlessWatermark.vue.d.ts +9 -0
  575. package/dist/components/BlessWatermark.vue_vue_type_script_setup_true_lang.js +18 -0
  576. package/dist/components/BlessWatermarkOverlay.css +1 -0
  577. package/dist/components/BlessWatermarkOverlay.js +6 -0
  578. package/dist/components/BlessWatermarkOverlay.vue.d.ts +29 -0
  579. package/dist/components/BlessWatermarkOverlay.vue_vue_type_script_setup_true_lang.js +36 -0
  580. package/dist/components/accordion.d.ts +4 -0
  581. package/dist/components/accordion.js +4 -0
  582. package/dist/components/cascade.d.ts +6 -0
  583. package/dist/components/mask.d.ts +4 -0
  584. package/dist/components/mask.js +17 -0
  585. package/dist/components/menu.d.ts +42 -0
  586. package/dist/components/menu.js +4 -0
  587. package/dist/components/questionnaire.d.ts +16 -0
  588. package/dist/components/radio.d.ts +7 -0
  589. package/dist/components/radio.js +4 -0
  590. package/dist/components/select.d.ts +5 -0
  591. package/dist/components/table.d.ts +12 -0
  592. package/dist/components/toggle.d.ts +6 -0
  593. package/dist/components/toggle.js +4 -0
  594. package/dist/components/tree.d.ts +10 -0
  595. package/dist/composables/date.d.ts +7 -0
  596. package/dist/composables/date.js +7 -0
  597. package/dist/composables/rtl.d.ts +5 -0
  598. package/dist/composables/rtl.js +8 -0
  599. package/dist/composables/useAnimateOnScroll.d.ts +13 -0
  600. package/dist/composables/useAnimateOnScroll.js +17 -0
  601. package/dist/composables/useBrowser.d.ts +23 -0
  602. package/dist/composables/useBrowser.js +41 -0
  603. package/dist/composables/useDataTable.d.ts +46 -0
  604. package/dist/composables/useDataTable.js +60 -0
  605. package/dist/composables/useDialog.d.ts +26 -0
  606. package/dist/composables/useDialog.js +31 -0
  607. package/dist/composables/useFieldId.d.ts +28 -0
  608. package/dist/composables/useFieldId.js +36 -0
  609. package/dist/composables/useFloating.d.ts +25 -0
  610. package/dist/composables/useFloating.js +42 -0
  611. package/dist/composables/useGesture.d.ts +34 -0
  612. package/dist/composables/useGesture.js +57 -0
  613. package/dist/composables/useHash.d.ts +2 -0
  614. package/dist/composables/useHash.js +12 -0
  615. package/dist/composables/useLink.d.ts +16 -0
  616. package/dist/composables/useLink.js +22 -0
  617. package/dist/composables/useLoadingBar.d.ts +15 -0
  618. package/dist/composables/useLoadingBar.js +37 -0
  619. package/dist/composables/useMedia.d.ts +6 -0
  620. package/dist/composables/useMedia.js +13 -0
  621. package/dist/composables/useRovingFocus.d.ts +6 -0
  622. package/dist/composables/useRovingFocus.js +46 -0
  623. package/dist/composables/useScrollSpy.d.ts +11 -0
  624. package/dist/composables/useScrollSpy.js +18 -0
  625. package/dist/composables/useTheme.d.ts +16 -0
  626. package/dist/composables/useTheme.js +66 -0
  627. package/dist/composables/useToast.d.ts +61 -0
  628. package/dist/composables/useToast.js +58 -0
  629. package/dist/index.d.ts +194 -0
  630. package/dist/index.js +162 -0
  631. package/dist/style.css +1 -0
  632. package/package.json +97 -0
  633. package/tokens.css +348 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 — 2026-09-27
4
+
5
+ First public release.
6
+
7
+ - 144 Vue 3 components styled only through `--bless-*` custom properties, with `tokens.css` usable on its own
8
+ - Native platform first: `<dialog>`, Popover API, `<details>`, native form controls, `Intl` dates
9
+ - Accessible defaults, checked with axe on every docs page in light and dark themes, and end-to-end in Chromium, Firefox and WebKit
10
+ - ESM and tree-shakable, with CSS split per component; `vue` is the only required peer (`@tiptap/vue-3` optional, for `BlessEditor`)
11
+ - 16 copy-in blocks (sign in, dashboard, inbox, chat, settings and more) in the docs at [ui.blessing.id](https://ui.blessing.id)
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 DanceInTheFake
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,359 @@
1
+ <p align="center">
2
+ <img src="docs/public/logo.svg" width="96" height="96" alt="">
3
+ </p>
4
+
5
+ # Blessing UI
6
+
7
+ Vue 3 component library and design tokens. Grey-scale UI with one accent that appears only on what someone has chosen; square, upright plates that lean when you engage them; thin oversized watermark type; opacity-fade hovers. The rules come from a [design language](docs/design/index.md); the look was re-derived from one anime's official site, ideas only — the [story](docs/design/story.md) says which, what was kept, and what was not taken.
8
+
9
+ Docs, with every component live: **[ui.blessing.id](https://ui.blessing.id)**
10
+
11
+ - 144 components — from button to data table to chat — styled only through `--bless-*` custom properties, no Tailwind dependency
12
+ - Native platform first: `<dialog>`, Popover API, `<details>`, native form controls, `Intl` dates, scroll-snap — no positioning, date or table library
13
+ - Accessible defaults: focus rings, ARIA tablist/dialog/tables, `prefers-reduced-motion`
14
+ - ESM, tree-shakable, `vue` as the only required peer (`@tiptap/vue-3` optional, for `BlessEditor`). One component (`BlessButton`) costs ~1 KB gzip of JS and ~2.6 KB of CSS (tokens + its own styles); everything is ~64 KB + 27 KB. CSS is split per component and pulled in by the import, so you never pay for styles you don't use
15
+
16
+ ## Install
17
+
18
+ ```sh
19
+ pnpm add blessing-ui vue
20
+ ```
21
+
22
+ ```ts
23
+ import { BlessButton } from "blessing-ui";
24
+ ```
25
+
26
+ That's it — each component brings its own stylesheet, and the tokens come with the first import. To load all styles up front instead (no bundler, or a CDN):
27
+
28
+ ```ts
29
+ import "blessing-ui/style.css"; // tokens + every component's styles
30
+ ```
31
+
32
+ Fonts are not bundled. Load Roboto (100/300/400/700) and Noto Sans JP yourself, e.g.
33
+
34
+ ```html
35
+ <link
36
+ href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,700|Noto+Sans+JP:400,700&display=swap"
37
+ rel="stylesheet"
38
+ />
39
+ ```
40
+
41
+ Tokens only (no components):
42
+
43
+ ```css
44
+ @import "blessing-ui/tokens.css";
45
+ .tab[aria-selected="true"] {
46
+ background: var(--bless-color-accent); /* the accent marks what is chosen */
47
+ }
48
+ ```
49
+
50
+ ## Usage
51
+
52
+ ```vue
53
+ <script setup lang="ts">
54
+ import {
55
+ BlessStage,
56
+ BlessSidebarNav,
57
+ BlessSection,
58
+ BlessList,
59
+ BlessListItem,
60
+ BlessButton,
61
+ } from "blessing-ui";
62
+ </script>
63
+
64
+ <template>
65
+ <BlessStage>
66
+ <template #sidebar>
67
+ <BlessSidebarNav
68
+ :items="[{ label: 'News', href: '/news', meta: '04.04', badge: true }]"
69
+ active="/news"
70
+ />
71
+ </template>
72
+
73
+ <BlessSection title="News">
74
+ <BlessList>
75
+ <BlessListItem meta="2019.04.04" badge href="/news/1"
76
+ >Blu-ray Disc BOX 発売決定</BlessListItem
77
+ >
78
+ </BlessList>
79
+ <BlessButton href="/news">More</BlessButton>
80
+ </BlessSection>
81
+ </BlessStage>
82
+ </template>
83
+ ```
84
+
85
+ ## Components
86
+
87
+ 144 components across eight groups. Every one styles itself from `--bless-*` tokens and ships with a test and a docs page.
88
+
89
+ ### Primitives
90
+
91
+ | Component | Purpose | Key props / slots |
92
+ | ------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
93
+ | `BlessSkew` | Plate that leans on attention; its slot stays upright | `as`, `color` |
94
+ | `BlessButton` | Button or anchor | `variant` solid/outline/ghost, `color`, `size`, `href`, `disabled`, `loading`; `#prefix` `#suffix` |
95
+ | `BlessBadge` | Small label, ink by default | `color`, `scaled` |
96
+ | `BlessDash` | Inline 10×1px separator | `color` |
97
+ | `BlessSeparator` | `<hr>` / vertical rule, optional label | `orientation`, `decorative`, `color`, `label` |
98
+ | `BlessIcon` | SVG slot wrapper | `size`, `label` |
99
+ | `BlessText` | Typography helper | `as`, `size`, `weight`, `tracking`, `leading`, `muted`, `uppercase` |
100
+ | `BlessKbd` | Key combo | `keys[]` or slot |
101
+ | `BlessThemeToggle` | Light/dark switch or 3-way group | `mode` switch/group, `label`, `labels` |
102
+ | `BlessSpinner` | Loading indicator (`role=status`) | `size`, `color`, `label`; `BlessButton loading` uses it |
103
+ | `BlessEmpty` | Empty state | `title`, `description`, `variant` outline/plain; `#icon` `#title` `#description` default=actions |
104
+ | `BlessButtonGroup` | Joined buttons | `orientation`, `label` |
105
+ | `BlessIndicator` | Count / dot badge on any element | `value` number or true, `max`, `color`, `position` |
106
+ | `BlessTimeline` | Vertical rail of events | `items[{title,time,description,color}]`; `#default="{item}"` `#dot` |
107
+ | `BlessSwap` | Two-face toggle | `v-model`, `label`, `effect` fade/rotate/flip; `#on` `#off` |
108
+ | `BlessWatermarkOverlay` | Tiled text watermark over content | `text`, `gap`, `angle`, `fontSize`, `opacity`, `color` |
109
+ | `BlessCircularProgress` | Ring progress | `value` (omit = spinning), `max`, `size`, `thickness`, `color`, `showValue`, `format` |
110
+ | `BlessLoadingBar` + `useLoadingBar()` | Top-of-page progress | `height`, `position`, `color`; `start()` `stop()` `set(p)` `track(promise)` |
111
+ | `BlessSlideTransition` | Height 0 ↔ auto | `appear`; wrap one `v-if` element with `transition: height` |
112
+ | `BlessClientOnly` | Browser-only render | `#fallback` |
113
+ | `BlessChip` | Compact token, removable | `label`, `icon`, `image`, `removable`, `color`, `size`; emits `remove` |
114
+ | `BlessMeterGroup` | Multi-segment meter | `segments[{label,value,color}]`, `max`, `legend`, `format`, `orientation` |
115
+ | `BlessBlockUI` | Blocking overlay | `blocked`, `fullscreen`; `#indicator` |
116
+ | `BlessMockup` | Browser / window / phone frame | `type`, `title`, `dark` |
117
+ | `BlessItem` | Media + title + description + actions | `title`, `description`, `href`, `button`, `variant` plain/outline/surface, `size`; `#media` `#actions` |
118
+ | `BlessAvatar` | Image with initials fallback | `src`, `name`, `size`, `lean`, `color` |
119
+ | `BlessSkeleton` | Placeholder that breathes (no shimmer) | `width`, `height`, `lines`, `avatar` |
120
+ | `BlessAspectRatio` | Ratio box | `ratio` |
121
+ | `BlessProgress` | Bar, determinate or not | `value`, `max`, `label`, `showValue`, `color`, `size` |
122
+ | `BlessAlert` | Inline notice | `title`, `color`, `live`, `dismissible`, `v-model`; `#icon` `#title` |
123
+
124
+ ### Forms
125
+
126
+ | Component | Purpose | Key props / slots |
127
+ | ---------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
128
+ | `BlessLabel` | `<label>` with required mark and hint | `for`, `required`, `hint` |
129
+ | `BlessInput` | Text-like input | `v-model`, `type`, `size`, `invalid`, `description`, `error`; `#prefix` `#suffix` |
130
+ | `BlessInputGroup` | Shared surface: addons + any control | `size`, `disabled`; `#prefix` `#suffix` (text or `BlessButton`), default = `BlessInput`/`BlessSelect` |
131
+ | `BlessTextarea` | Auto-growing textarea | `v-model`, `rows`, `autogrow`, `maxlength`, `counter`, `error` |
132
+ | `BlessCheckbox` | Native checkbox | `v-model` (bool or array), `value`, `indeterminate`, `description` |
133
+ | `BlessRadioGroup` / `BlessRadio` | Native radios | group `v-model`, `label`, `orientation`; radio `value`, `description` |
134
+ | `BlessSwitch` | `role=switch` toggle | `v-model`, `size`, `labelPosition` |
135
+ | `BlessRating` | Star rating on native radios | `v-model`, `max`, `icon`, `size`, `readonly` |
136
+ | `BlessFileInput` | File input + drop zone | `v-model` File[], `accept`, `multiple`, `hint`, `list`, `invalid` |
137
+ | `BlessColorPicker` | `<input type=color>` + swatches | `v-model` hex, `swatches[]`, `showValue` |
138
+ | `BlessPasswordMeter` | Strength `<meter>` from rules | `value`, `rules[{label,test}]`, `labels`, `showRules` |
139
+ | `BlessListbox` | `role=listbox`, keyboard + typeahead | `v-model` (array when `multiple`), `options`, `rows`, `label`; `#default="{option, selected}"` |
140
+ | `BlessKnob` | Rotary dial on `<input type=range>` | `v-model`, `min`, `max`, `step`, `size`, `sweep`, `format`, `label` |
141
+ | `BlessSignaturePad` | Canvas signature | `v-model` data URL, `height`, `lineWidth`, `color`, `type`; emits `end`; exposes `clear()` `isEmpty()` |
142
+ | `BlessEditor` | Rich text toolbar for Tiptap | `editor` (from `useEditor`), `tools[]`, `minHeight`; default slot = `<EditorContent>`; `#toolbar` `#footer`. Optional peer `@tiptap/vue-3` |
143
+ | `BlessRange` | Two-thumb range | `v-model` [lo, hi], `min`, `max`, `step`, `gap`, `label`, `showValue`, `format` |
144
+ | `BlessTimePicker` | `<input type=time>` + datalist | `v-model` "HH:MM", `step` (minutes), `min`, `max`, `hour12`, `seconds`, `size` |
145
+ | `BlessUploader` | Upload queue | `url`, `field`, `headers`, `accept`, `multiple`, `auto`, `maxSize`; emits `upload(item, progress, done, fail)` `done` `error`; exposes `start()` `clear()` |
146
+ | `BlessInputNumber` | Number with ± and Intl format | `v-model` number, `min`, `max`, `step`, `buttons`, `prefix`, `suffix`, `format`, `locale` |
147
+ | `BlessPasswordInput` | Password + reveal + meter | `v-model`, `meter`; wraps `BlessInput` |
148
+ | `BlessInputTags` | Free-text tags | `v-model` string[], `separators`, `max`, `duplicates` |
149
+ | `BlessFloatLabel` | Floating / in-field label | `label`, `for`, `variant` over/in; wrap a control with `placeholder=" "` |
150
+ | `BlessFieldset` | `<fieldset>` + legend | `legend`, `toggleable`, `v-model:collapsed`, `disabled` |
151
+ | `BlessInplace` | Click to edit | `v-model:active`, `closable`; `#display` `#content="{close}"` |
152
+ | `BlessCompare` | Before / after slider | `v-model` 0–100, `orientation`; `#before` `#after` |
153
+ | `BlessCascadeSelect` | Nested options, one column per level | `v-model`, `options[{value,label,children}]`, `showPath`, `separator`, `size`; emits `select(option, path)` |
154
+ | `BlessTreeSelect` | Tree in a popover | `v-model` id or id[], `nodes`, `multiple`, `leafOnly`, `size`; emits `select` |
155
+ | `BlessInputMask` | Pattern-masked `BlessInput` | `v-model` masked, `mask` (`#` digit `A` letter `*` either), `placeholder`; emits `update:raw` |
156
+ | `BlessOrderList` | Reorderable list | `v-model` items, `rowKey`, `buttons`; drag, ↑↓, Alt+arrows; emits `move`; `#default="{item,index}"` |
157
+ | `BlessPickList` | Transfer between two listboxes | `v-model:source`, `v-model:target`, `sourceLabel`, `targetLabel`, `rows` |
158
+ | `BlessSelect` | Styled native `<select>` (picker styled too on Chrome 135+) | `v-model`, `options` (groups ok), `placeholder`, `size`, `error` |
159
+ | `BlessSlider` | Native range | `v-model`, `min`, `max`, `step`, `showValue`, `format` |
160
+ | `BlessToggle` / `BlessToggleGroup` | Pressed buttons | toggle `v-model:pressed`, `value`; group `v-model`, `type` single/multiple |
161
+ | `BlessCombobox` | Searchable select | `v-model`, `options`, `multiple`, `creatable` (emits `create`), `size` |
162
+ | `BlessDatePicker` | Calendar in a popover | `v-model` ISO string or `[start,end]`, `range`, `min`, `max`, `locale`, `nativeOnTouch` |
163
+ | `BlessCalendar` | Month grid | same as DatePicker plus `weekStart`, `disabledDates`, `month` |
164
+ | `BlessInputOTP` | One-time code cells | `v-model`, `length`, `numeric`, `separators`, `masked`; emits `complete` |
165
+ | `BlessForm` / `BlessField` | Constraint-API form + field wiring | form emits `submit(FormData)` / `invalid`; field `label`, `required`, `description`, `error`; `#default="{ id, error, describedby }"` |
166
+
167
+ ### Layout & navigation
168
+
169
+ | Component | Purpose | Key props / slots |
170
+ | ------------------------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
171
+ | `BlessStage` | Page shell, sidebar → drawer under 800px | `v-model:open`; `#sidebar` default `#footer` `#background` |
172
+ | `BlessSidebarNav` | Vertical nav list | `items`, `active`; emits `select`; `#item` |
173
+ | `BlessNavigationMenu` | Horizontal nav with panels | `items[{label,href,items[]}]`; emits `select`; `#panel` |
174
+ | `BlessMenubar` | Bar of `BlessDropdownMenu`s | `label` |
175
+ | `BlessSteps` | Stepper | `steps[{label,description}]`, `v-model` index, `orientation`, `clickable`; emits `select` |
176
+ | `BlessTree` / `BlessTreeItem` | Nested `<details>` tree | `nodes[{label,id,href,icon,children,open,disabled}]`, `v-model:selected`; emits `select` |
177
+ | `BlessContainer` | Centred max-width box | `size` sm/md/lg/full, `padded`, `as` |
178
+ | `BlessStack` | Flex row / column | `direction`, `gap` token, `align`, `justify`, `wrap`, `as` |
179
+ | `BlessScrollTop` | Back-to-top button | `threshold`, `target`, `position`, `label` |
180
+ | `BlessToolbar` | Start / center / end bar | `label`, `surface`; `#start` `#center` `#end` |
181
+ | `BlessPanel` | Titled box | `title`, `toggleable`, `v-model:collapsed`, `surface`; `#actions` `#footer` |
182
+ | `BlessStepper` | Steps + panels | `steps`, `v-model`, `orientation`, `labels`; `#default="{step,index,next,prev,last}"` `#actions`; emits `finish` |
183
+ | `BlessSplitButton` | Button + menu | `label`, `items`, `color`, `variant`, `size`; emits `click` `select` |
184
+ | `BlessDataView` | List / grid + pagination | `items`, `pageSize`, `columns`, `v-model:layout`, `rowKey`; `#default="{item,index,layout}"` `#header` `#empty` |
185
+ | `BlessDeferredContent` | Mount on scroll into view | `rootMargin`, `minHeight`; `#placeholder`; emits `load` |
186
+ | `BlessTreeTable` | Expandable rows | `rows` (with `children`), `columns`, `rowKey`, `treeColumn`, `v-model:expanded`, `defaultExpanded`; `#cell-*` pass through |
187
+ | `BlessOrgChart` / `BlessOrgChartNode` | Node tree with connectors | `nodes`, `v-model:selected`; `#node="{node, selected}"`; emits `select` |
188
+ | `BlessBottomTabs` | Mobile bottom nav / dock | `items[{label,value,icon,href,badge}]`, `v-model`, `variant` bar/dock, `inline`; emits `select` |
189
+ | `BlessSpeedDial` | FAB with fan-out actions | `actions[{label,value,icon,color}]`, `direction`, `color`, `v-model:open`, `inline`; emits `select` |
190
+ | `BlessVirtualScroller` | Windowed list (fixed row height) | `items`, `itemHeight`, `height`, `overscan`, `rowKey`; exposes `scrollTo(i)`; `#default="{item,index}"` |
191
+ | `BlessBreadcrumb` | Trail | `items[{label,href}]`, `separator`; `#item` |
192
+ | `BlessPagination` | Page list | `v-model`, `total`, `siblings`, `href(page)` |
193
+ | `BlessTabs` | ARIA tablist | `tabs`, `v-model`, `activation`, `color`; `#default="{tab}"` `#tab` |
194
+ | `BlessSection` / `BlessWatermark` | Titled block with a giant watermark word | `title`, `watermark`, `watermarkPosition`, `headingLevel` |
195
+ | `BlessBackground` | Tiled texture layer | `src`, `offset`, `mode`, `opacity` |
196
+ | `BlessCard` | Flat surface | `label`, `labelColor`, `surface`, `bordered`, `href`; `#media` `#footer` |
197
+ | `BlessList` / `BlessListItem` | Divided rows | item `meta`, `badge`, `href`; `#suffix` |
198
+ | `BlessCollapsible` / `BlessAccordion(Item)` | `<details>` based | `v-model:open`, `title`, `disabled`; accordion `type` single/multiple |
199
+ | `BlessScrollArea` | Thin scrollbar + fade | `axis`, `fade`, `height`, `width` |
200
+ | `BlessResizable` | Two-pane split | `v-model` (% of first pane), `direction`, `min`, `max`, `step`; `#a` `#b` |
201
+ | `BlessTable` | Typed table, stacks on mobile | `columns`, `rows`, `rowKey`, `caption`, `striped`, `stack`; `#cell-<key>` |
202
+ | `BlessDataTable` | Table + sort/search/select/paginate | `columns` (+`sortable`, `hideable`), `rows`, `rowKey`, `selectable`, `searchable`, `pageSize`; `#toolbar` `#cell-<key>` |
203
+
204
+ ### Overlays
205
+
206
+ | Component | Purpose | Key props / slots |
207
+ | --------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
208
+ | `BlessModal` | Native `<dialog>` | `v-model`, `title`, `hash` (deep link), `size`, `dismissible`; `#footer` |
209
+ | `BlessAlertDialog` | Confirm dialog | `v-model`, `title`, `description`, `confirmLabel`, `cancelLabel`, `color`, `loading`; emits `confirm` `cancel` |
210
+ | `BlessSheet` | Side panel | `v-model`, `side`, `title`, `size`, `handle`; `#footer` |
211
+ | `BlessDrawer` | Bottom sheet with swipe-to-close | `v-model`, `title` |
212
+ | `BlessPopover` | Popover API panel | `v-model:open`, `placement`, `trigger` click/hover/manual, `modal`; `#trigger` `#default="{close}"` |
213
+ | `BlessTooltip` | Hover/focus tip | `text`, `placement`, `delay`; `#content` |
214
+ | `BlessHoverCard` | Rich hover popover | `placement`, `openDelay`, `closeDelay`; `#trigger` |
215
+ | `BlessDropdownMenu` | ARIA menu | `items` (item/checkbox/radio/separator/label/sub), `placement`, `v-model:checked`, `v-model:radios`; emits `select`; `#trigger` |
216
+ | `BlessContextMenu` | Menu on right click | `items`; wraps its slot |
217
+ | `BlessCommand` | ⌘K palette | `v-model:open`, `items` (groups, keywords, shortcuts), `inline`, `hotkey`; emits `select`; `#footer` |
218
+ | `BlessGallery` | Thumb grid + lightbox | `items`, `v-model` index, `columns`, `loop` |
219
+ | `BlessConfirmPopup` | Confirm in a popover | `message`, `title`, `confirmLabel`, `cancelLabel`, `color`, `placement`, `v-model:open`; emits `confirm` `cancel` |
220
+ | `BlessDialogHost` + `useDialog()` | Programmatic modals | `open({ title, component, props, text, size, dismissible })` → Promise, `close(id, result)` |
221
+ | `BlessTour` | Spotlight walkthrough | `steps[{target,title,text,placement}]`, `v-model:open`, `v-model:step`, `spotlight`, `labels`; emits `finish` `skip` |
222
+ | `BlessToaster` + `useToast()` | Notifications | `position`; `toast()`, `success()`, `error()`, `warning()`, `info()`, `dismiss()` |
223
+ | `BlessSplash` | First-visit overlay | `once`, `duration`, `skipLabel`; emits `done` |
224
+
225
+ ### Conversation
226
+
227
+ | Component | Purpose | Key props / slots |
228
+ | ---------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
229
+ | `BlessMessage` | Avatar + header + content + footer row | `name`, `time`, `avatar`, `align` start/end, `compact`; `#avatar` `#header` `#footer` `#actions` |
230
+ | `BlessBubble` | Message bubble | `variant` surface/accent/outline/plain, `align`, `collapsible`, `lines`, `reactions[]`; emits `react` |
231
+ | `BlessMarker` | Inline status / note / separator / row | `variant` status/note/separator/border, `color`, `shimmer`; `#icon` |
232
+ | `BlessAttachment` | File / image chip | `name`, `description`, `src`, `href`, `state` idle/uploading/error, `progress`, `size`, `removable`; emits `remove` |
233
+ | `BlessMessageScroller` | Chat viewport | `height`, `initial`, `threshold`; emits `reach-top` `at-bottom`; exposes `scrollToBottom()` `scrollTo(id)` `loadHistory(fn)` |
234
+ | `BlessQuestionnaire` | Multi-step single/multiple/freeform | `questions[]`, `v-model` answers, `v-model:step`, `shortcuts`, `labels`; emits `submit` `skip` |
235
+
236
+ ### Chart
237
+
238
+ | Component | Purpose | Key props / slots |
239
+ | ------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
240
+ | `BlessChart` | Themed frame for any [Unovis](https://unovis.dev) chart | `title`, `description`, `height`, `legend[]`; `#header` `#legend` `#footer`, default = chart |
241
+ | `BlessQrCode` | QR SVG from a module matrix ([uqr](https://github.com/unjs/uqr)) | `matrix` boolean[][], `value`, `size`, `border`, `color`, `background`, `frame` |
242
+
243
+ Blessing does not bundle a chart library. `BlessChart` maps `--bless-color-chart-{1..5}`, type and dark mode onto Unovis' `--vis-*` variables, and adds a legend. Install Unovis yourself:
244
+
245
+ ```sh
246
+ pnpm add @unovis/vue @unovis/ts
247
+ ```
248
+
249
+ ```vue
250
+ <BlessChart title="Views" :legend="['S1', 'S2']">
251
+ <VisXYContainer :data>
252
+ <VisLine :x="(d) => d.x" :y="[(d) => d.a, (d) => d.b]" />
253
+ <VisAxis type="x" /><VisAxis type="y" />
254
+ <VisTooltip /><VisCrosshair />
255
+ </VisXYContainer>
256
+ </BlessChart>
257
+ ```
258
+
259
+ Any other SVG chart lib works too — read `var(--bless-color-chart-N)` for series colours.
260
+
261
+ ### Mobile
262
+
263
+ | Component | Purpose | Key props / slots |
264
+ | --------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
265
+ | `BlessLayout` | App shell | `v-model:left` / `v-model:right`, `breakpoint`, `reveal`, `leftWidth`, `rightWidth`, `swipe`; `#header` `#footer` `#left` `#right` default |
266
+ | `BlessPullToRefresh` | Drag down to reload | `threshold`, `max`, `scrollTarget`; emits `refresh(done)`; `#indicator="{ready,busy,pull}"` |
267
+ | `BlessSlideItem` | Swipe a row for actions | `threshold`, `sticky`; `#left` `#right="{reset}"`; emits `left(reset)` `right(reset)` `slide` |
268
+ | `BlessActionSheet` | Actions in a bottom drawer | `v-model:open`, `actions[{label,value,icon,description,danger}]`, `title`, `grid`, `cancel`; emits `select` `cancel` |
269
+ | `BlessTabPanels` | Swipeable panels | `v-model`, `panels[]`, `swipeable`, `loop`, `threshold`; `#default="{panel,index}"`; exposes `next()` `prev()` |
270
+ | `BlessInfiniteScroll` | Load more at the end | `disabled`, `offset`, `root`, `doneText`; emits `load(done)`; `#loading` `#done`; exposes `reset()` |
271
+
272
+ Gestures: `usePan(el, cb)` · `useSwipe(el, cb, { threshold, axis })` · `useLongPress(el, cb, { ms })` · `useTouchRepeat(el, cb, { delay, interval })`. Safe-area tokens `--bless-safe-{top,bottom,left,right}`.
273
+
274
+ ### Media
275
+
276
+ | Component | Purpose | Key props / slots |
277
+ | ------------------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------- |
278
+ | `BlessImg` | Lazy image | `src`, `alt`, `ratio`, `fit`, `loading`, `placeholder`, `srcset`, `sizes`; default slot = caption overlay; `#error` |
279
+ | `BlessVideo` | Responsive embed / video | `src`, `title`, `ratio`, `native`, `poster` |
280
+ | `BlessParallax` | Slow-scrolling background | `src`, `height`, `speed`; `#media` default |
281
+ | `BlessCarousel` | Scroll-snap slider | `v-model`, `perView`, `gap`, `loop`, `autoplay`, `dots`, `arrows` |
282
+ | `BlessAudioPlayer` | Track list player | `tracks`, `v-model` index, `color`; emits `play` `pause` `ended` |
283
+
284
+ ### Composables
285
+
286
+ `useMedia(query?)` · `reducedMotion()` / `scrollBehavior(b?)` · `useHash()` · `useScrollSpy(ids | selector, { rootMargin, root })` → `{ active }` · `useAnimateOnScroll(el, { threshold, rootMargin, once })` → `{ visible }` · `useDialog()` → `{ open, close }` · gestures (see Mobile) · `useResizeObserver(el)` · `useFullscreen(el?)` · `useVisibility()` · `useScroll(el?)` · `useLoadingBar()` · `applyMask(mask, input)` / `unmask(mask, masked)` · `useTheme()` → `{ theme, isDark, set, toggle, palette, setPalette }` · `useFloating(anchor, floating, active, { placement, offset, padding, boundary, arrow })` → `{ x, y, side, arrowX, arrowY, update }` · `useToast()` · `useDataTable(rows, { rowKey, pageSize, searchKeys, server, total })` · date helpers `toISO` `fromISO` `addDays` `addMonths` `isoToday`.
287
+
288
+ ### Types
289
+
290
+ `BlessNavItem`, `BlessNavMenuItem`, `BlessTab`, `BlessGalleryItem`, `BlessColumn<T>`, `BlessDataColumn<T>`, `BlessOption<T>`, `BlessTrack`, `BlessMenuItem`, `BlessCommandItem`, `BlessCrumb`, `BlessToastOptions`, `BlessTheme`, `BlessStep`, `BlessTimelineItem`, `BlessTreeNode`, `BlessPasswordRule`, `BlessBottomTab`, `BlessSpeedDialAction`, `BlessTourStep`, `BlessEditorTool`, `BlessMeterSegment`, `BlessCascadeOption`, `BlessDialogOptions`, `BlessAction`, `PanEvent`, `SwipeDirection`, `BlessUpload`, `BlessReaction`, `BlessQuestion`, `BlessQuestionChoice`, `BlessAnswers`, `Placement`, `DataTableState`.
291
+
292
+ ## Blocks
293
+
294
+ Finished sections — a news list, a sign-in form, a dashboard shell — shipped as source you copy into your project, not a package you import. Each is a folder (`index.vue`, optional `parts/`, `use<Name>.ts`, `domain.ts`, `api.ts` with an offline mock) that imports only from `blessing-ui` and itself. Browse them under **Blocks** in the docs; the contract is in `docs/blocks/README.md`.
295
+
296
+ ## Tokens
297
+
298
+ All styling reads `--bless-*` custom properties defined in `tokens.css`. Override on `:root` (or any subtree) to theme:
299
+
300
+ ```css
301
+ :root {
302
+ --bless-color-accent: #4090d0;
303
+ --bless-lean: -6deg;
304
+ }
305
+ ```
306
+
307
+ | Group | Props |
308
+ | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
309
+ | Colour | `--bless-color-{text,text-muted,bg,surface,surface-2,watermark,accent,accent-soft,accent-2,accent-text,danger,badge,warning,success,info,on-accent,on-text,on-light,border,rule,backdrop,media-bg,chart-1..5}` |
310
+ | Font | `--bless-font-sans`, `--bless-font-weight-{thin,light,normal,bold}` |
311
+ | Type scale | `--bless-text-{2xs,xs,sm,md,lg,xl,headline,display}` (fluid `clamp()`, 8→151px) |
312
+ | Leading / tracking | `--bless-leading-{none,tight,normal}`, `--bless-tracking-{tight,normal,wide,wider}` |
313
+ | Space | `--bless-space-{1,2,3,4,6,8,12,16}` (4px base) |
314
+ | Shape | `--bless-lean`, `--bless-skew`, `--bless-skew-counter`, `--bless-petal`, `--bless-radius-petal` (+`-lg`), `--bless-radius`, `--bless-radius-plate` (0, override points), `--bless-border-width`, `--bless-dash-width` |
315
+ | Elevation | `--bless-shadow-plate` (the 1px accent offset behind anything that floats), `--bless-shadow-{none,md}` |
316
+ | Motion | `--bless-duration-{fast,base,slow,slower}`, `--bless-ease-{in-out,out,linear}`, `--bless-hover-opacity`, `--bless-press-scale` |
317
+ | Layout | `--bless-sidebar-width`, `--bless-sidebar-inner`, `--bless-content-max`, `--bless-z-{bg,nav,modal}` |
318
+
319
+ ### Palettes
320
+
321
+ Megumi's pink is the default accent. Five more — `data-palette="utaha" | "izumi" | "michiru" | "eriri" | "tomoya"` on `<html>` — swap only the accent tokens; greys and dark mode are untouched. `BlessPaletteToggle` switches them; `useTheme().setPalette()` persists.
322
+
323
+ ### Dark mode
324
+
325
+ Greys invert, the accent family stays, and `--bless-font-weight-thin` steps 100→300 (hairlines read thinner light-on-dark). Follows `prefers-color-scheme` by default; set `data-theme="dark"` / `"light"` on `<html>` to force one. `useTheme()` persists the choice in `localStorage` (`bless-theme`) and applies the attribute; `BlessThemeToggle` is the ready-made control. Override the dark palette under `:root[data-theme="dark"]` and inside the `prefers-color-scheme: dark` block in `tokens.css`.
326
+
327
+ Durations collapse to `0s` under `prefers-reduced-motion`. Tailwind v4 users can map tokens in `@theme { --color-accent: var(--bless-color-accent); }`.
328
+
329
+ ## Conventions
330
+
331
+ - Components `Bless*`, CSS classes `bless-<component>__<part>` / `--<modifier>`, no scoped styles or shadow DOM so overrides are plain CSS.
332
+ - Colour/size props take token keys, never raw values.
333
+ - `v-model` for open/selected state. No router dependency: `app.provide(blessLinkKey, RouterLink)` once and every link-rendering component uses it for in-app paths; otherwise plain `<a>`.
334
+
335
+ ## Development
336
+
337
+ ```sh
338
+ mise install # node 24, pnpm 12
339
+ pnpm install
340
+ pnpm dev # docs site (VitePress) with live demos against src/ — http://localhost:5173
341
+ pnpm docs:meta # regenerate docs/.vitepress/meta.json from the components (vue-component-meta)
342
+ pnpm docs:pages # scaffold a docs page for any component that lacks one
343
+ pnpm e2e # cross-browser page-error sweep + axe (needs a running docs preview on :4173)
344
+ pnpm e2e:consumer # pack, install into e2e/consumer, strict type-check (no skipLibCheck), tree-shake size gate
345
+ pnpm test # vitest + jsdom
346
+ pnpm typecheck # vue-tsc
347
+ pnpm build # dist/blessing-ui.{js,css} + index.d.ts
348
+ pnpm format # oxfmt
349
+ ```
350
+
351
+ Design principles and roadmap: [DESIGN.md](./DESIGN.md).
352
+
353
+ ## License
354
+
355
+ Copyright © 2026 DanceInTheFake. Code and design are [MIT](LICENSE).
356
+
357
+ The name of the anime this project takes its look from, its characters and its artwork belong to their respective owners and are not covered by this licence. Blessing UI is an independent fan project — see the [story](docs/design/story.md).
358
+
359
+ Component coverage was checked against the lists of [shadcn/ui](https://ui.shadcn.com/) and [PrimeVue](https://primevue.org/); every component is an independent implementation and nothing from either project is used. Both names belong to their owners.