cornet-ui 0.1.0-beta.1

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 (383) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/components/Actions/du-button/du-button.types.ts +14 -0
  4. package/components/Actions/du-button/du-button.vue +149 -0
  5. package/components/Actions/du-dropdown/du-dropdown.types.ts +15 -0
  6. package/components/Actions/du-dropdown/du-dropdown.vue +75 -0
  7. package/components/Actions/du-fab/du-fab.types.ts +28 -0
  8. package/components/Actions/du-fab/du-fab.vue +270 -0
  9. package/components/Actions/du-modal/du-modal.types.ts +10 -0
  10. package/components/Actions/du-modal/du-modal.vue +123 -0
  11. package/components/Actions/du-swap/du-swap.types.ts +3 -0
  12. package/components/Actions/du-swap/du-swap.vue +68 -0
  13. package/components/DataDisplay/du-accordion/du-accordion-item.vue +37 -0
  14. package/components/DataDisplay/du-accordion/du-accordion.types.ts +15 -0
  15. package/components/DataDisplay/du-accordion/du-accordion.vue +73 -0
  16. package/components/DataDisplay/du-avatar/du-avatar.types.ts +59 -0
  17. package/components/DataDisplay/du-avatar/du-avatar.vue +139 -0
  18. package/components/DataDisplay/du-badge/du-badge.types.ts +21 -0
  19. package/components/DataDisplay/du-badge/du-badge.vue +81 -0
  20. package/components/DataDisplay/du-card/du-card.types.ts +18 -0
  21. package/components/DataDisplay/du-card/du-card.vue +86 -0
  22. package/components/DataDisplay/du-carousel/du-carousel-item.vue +11 -0
  23. package/components/DataDisplay/du-carousel/du-carousel.types.ts +15 -0
  24. package/components/DataDisplay/du-carousel/du-carousel.vue +46 -0
  25. package/components/DataDisplay/du-chat/du-chat-item.vue +56 -0
  26. package/components/DataDisplay/du-chat/du-chat.types.ts +31 -0
  27. package/components/DataDisplay/du-chat/du-chat.vue +71 -0
  28. package/components/DataDisplay/du-collapse/du-collapse.types.ts +15 -0
  29. package/components/DataDisplay/du-collapse/du-collapse.vue +59 -0
  30. package/components/DataDisplay/du-countdown/du-countdown-group.vue +88 -0
  31. package/components/DataDisplay/du-countdown/du-countdown.types.ts +15 -0
  32. package/components/DataDisplay/du-countdown/du-countdown.vue +180 -0
  33. package/components/DataDisplay/du-diff/du-diff.types.ts +9 -0
  34. package/components/DataDisplay/du-diff/du-diff.vue +44 -0
  35. package/components/DataDisplay/du-kbd/du-kbd.types.ts +9 -0
  36. package/components/DataDisplay/du-kbd/du-kbd.vue +21 -0
  37. package/components/DataDisplay/du-list/du-list-row.vue +12 -0
  38. package/components/DataDisplay/du-list/du-list.types.ts +3 -0
  39. package/components/DataDisplay/du-list/du-list.vue +11 -0
  40. package/components/DataDisplay/du-stat/du-stat.types.ts +12 -0
  41. package/components/DataDisplay/du-stat/du-stat.vue +28 -0
  42. package/components/DataDisplay/du-stats/du-stats.types.ts +3 -0
  43. package/components/DataDisplay/du-stats/du-stats.vue +91 -0
  44. package/components/DataDisplay/du-status/du-status.types.ts +21 -0
  45. package/components/DataDisplay/du-status/du-status.vue +51 -0
  46. package/components/DataDisplay/du-table/du-table-item.types.ts +6 -0
  47. package/components/DataDisplay/du-table/du-table-item.vue +24 -0
  48. package/components/DataDisplay/du-table/du-table.types.ts +26 -0
  49. package/components/DataDisplay/du-table/du-table.vue +125 -0
  50. package/components/DataDisplay/du-timeline/du-timeline-item.vue +85 -0
  51. package/components/DataDisplay/du-timeline/du-timeline.types.ts +22 -0
  52. package/components/DataDisplay/du-timeline/du-timeline.vue +138 -0
  53. package/components/DataInput/du-checkbox/du-checkbox.types.ts +17 -0
  54. package/components/DataInput/du-checkbox/du-checkbox.vue +40 -0
  55. package/components/DataInput/du-fieldset/du-fieldset.types.ts +4 -0
  56. package/components/DataInput/du-fieldset/du-fieldset.vue +16 -0
  57. package/components/DataInput/du-file-input/du-file-input.types.ts +29 -0
  58. package/components/DataInput/du-file-input/du-file-input.vue +31 -0
  59. package/components/DataInput/du-filter/du-filter.types.ts +30 -0
  60. package/components/DataInput/du-filter/du-filter.vue +47 -0
  61. package/components/DataInput/du-input-field/du-input-field.types.ts +43 -0
  62. package/components/DataInput/du-input-field/du-input-field.vue +47 -0
  63. package/components/DataInput/du-label/du-label.types.ts +3 -0
  64. package/components/DataInput/du-label/du-label.vue +28 -0
  65. package/components/DataInput/du-label-input-validator/du-label-input-validator.types.ts +7 -0
  66. package/components/DataInput/du-label-input-validator/du-label-input-validator.vue +51 -0
  67. package/components/DataInput/du-radio/du-radio.types.ts +15 -0
  68. package/components/DataInput/du-radio/du-radio.vue +27 -0
  69. package/components/DataInput/du-range/du-range.types.ts +18 -0
  70. package/components/DataInput/du-range/du-range.vue +60 -0
  71. package/components/DataInput/du-rating/du-rating-item.vue +65 -0
  72. package/components/DataInput/du-rating/du-rating.types.ts +46 -0
  73. package/components/DataInput/du-rating/du-rating.vue +127 -0
  74. package/components/DataInput/du-search/du-search.types.ts +44 -0
  75. package/components/DataInput/du-search/du-search.vue +425 -0
  76. package/components/DataInput/du-select/du-select.types.ts +31 -0
  77. package/components/DataInput/du-select/du-select.vue +384 -0
  78. package/components/DataInput/du-text-area/du-text-area.types.ts +11 -0
  79. package/components/DataInput/du-text-area/du-text-area.vue +41 -0
  80. package/components/Feedback/du-alert/du-alert.types.ts +16 -0
  81. package/components/Feedback/du-alert/du-alert.vue +113 -0
  82. package/components/Feedback/du-loading/du-loading.types.ts +11 -0
  83. package/components/Feedback/du-loading/du-loading.vue +33 -0
  84. package/components/Feedback/du-progress/du-progress.types.ts +8 -0
  85. package/components/Feedback/du-progress/du-progress.vue +23 -0
  86. package/components/Feedback/du-radial-progress/du-radial-progress.types.ts +9 -0
  87. package/components/Feedback/du-radial-progress/du-radial-progress.vue +64 -0
  88. package/components/Feedback/du-skeleton/du-skeleton.types.ts +3 -0
  89. package/components/Feedback/du-skeleton/du-skeleton.vue +11 -0
  90. package/components/Feedback/du-toast/du-toast.types.ts +11 -0
  91. package/components/Feedback/du-toast/du-toast.vue +54 -0
  92. package/components/Feedback/du-tooltip/du-tooltip.types.ts +12 -0
  93. package/components/Feedback/du-tooltip/du-tooltip.vue +55 -0
  94. package/components/Layout/du-drawer/du-drawer.types.ts +27 -0
  95. package/components/Layout/du-drawer/du-drawer.vue +224 -0
  96. package/components/Layout/du-join/du-join.types.ts +7 -0
  97. package/components/Layout/du-join/du-join.vue +31 -0
  98. package/components/Navigation/du-breadcrumbs/du-breadcrumbs.types.ts +13 -0
  99. package/components/Navigation/du-breadcrumbs/du-breadcrumbs.vue +79 -0
  100. package/components/Navigation/du-button-link/du-button-link.types.ts +17 -0
  101. package/components/Navigation/du-button-link/du-button-link.vue +77 -0
  102. package/components/Navigation/du-dock/du-dock.types.ts +19 -0
  103. package/components/Navigation/du-dock/du-dock.vue +73 -0
  104. package/components/Navigation/du-link/du-link.types.ts +7 -0
  105. package/components/Navigation/du-link/du-link.vue +25 -0
  106. package/components/Navigation/du-menu/du-menu-item.vue +160 -0
  107. package/components/Navigation/du-menu/du-menu.types.ts +33 -0
  108. package/components/Navigation/du-menu/du-menu.vue +87 -0
  109. package/components/Navigation/du-navbar/du-navbar.types.ts +3 -0
  110. package/components/Navigation/du-navbar/du-navbar.vue +21 -0
  111. package/components/Navigation/du-pagination/du-pagination.types.ts +30 -0
  112. package/components/Navigation/du-pagination/du-pagination.vue +186 -0
  113. package/components/Navigation/du-step-item/du-step-item.types.ts +9 -0
  114. package/components/Navigation/du-step-item/du-step-item.vue +46 -0
  115. package/components/Navigation/du-steps/du-steps.types.ts +20 -0
  116. package/components/Navigation/du-steps/du-steps.vue +85 -0
  117. package/components/Navigation/du-tabs/du-tabs.types.ts +25 -0
  118. package/components/Navigation/du-tabs/du-tabs.vue +96 -0
  119. package/composables/useSizeProps.ts +26 -0
  120. package/composables/useVariantProps.ts +18 -0
  121. package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
  122. package/dist/components/Actions/du-button/du-button.js +5 -0
  123. package/dist/components/Actions/du-button/du-button.types.d.ts +4 -0
  124. package/dist/components/Actions/du-button/du-button.vue.d.ts +58 -0
  125. package/dist/components/Actions/du-button/du-button.vue_vue_type_script_setup_true_lang.js +98 -0
  126. package/dist/components/Actions/du-dropdown/du-dropdown.js +5 -0
  127. package/dist/components/Actions/du-dropdown/du-dropdown.types.d.ts +4 -0
  128. package/dist/components/Actions/du-dropdown/du-dropdown.vue.d.ts +33 -0
  129. package/dist/components/Actions/du-dropdown/du-dropdown.vue_vue_type_script_setup_true_lang.js +53 -0
  130. package/dist/components/Actions/du-fab/du-fab.js +5 -0
  131. package/dist/components/Actions/du-fab/du-fab.types.d.ts +24 -0
  132. package/dist/components/Actions/du-fab/du-fab.vue.d.ts +87 -0
  133. package/dist/components/Actions/du-fab/du-fab.vue_vue_type_script_setup_true_lang.js +204 -0
  134. package/dist/components/Actions/du-modal/du-modal.js +5 -0
  135. package/dist/components/Actions/du-modal/du-modal.types.d.ts +2 -0
  136. package/dist/components/Actions/du-modal/du-modal.vue.d.ts +48 -0
  137. package/dist/components/Actions/du-modal/du-modal.vue_vue_type_script_setup_true_lang.js +92 -0
  138. package/dist/components/Actions/du-swap/du-swap.js +5 -0
  139. package/dist/components/Actions/du-swap/du-swap.types.d.ts +2 -0
  140. package/dist/components/Actions/du-swap/du-swap.vue.d.ts +36 -0
  141. package/dist/components/Actions/du-swap/du-swap.vue_vue_type_script_setup_true_lang.js +61 -0
  142. package/dist/components/DataDisplay/du-accordion/du-accordion-item.js +5 -0
  143. package/dist/components/DataDisplay/du-accordion/du-accordion-item.vue.d.ts +24 -0
  144. package/dist/components/DataDisplay/du-accordion/du-accordion-item.vue_vue_type_script_setup_true_lang.js +31 -0
  145. package/dist/components/DataDisplay/du-accordion/du-accordion.js +5 -0
  146. package/dist/components/DataDisplay/du-accordion/du-accordion.types.d.ts +8 -0
  147. package/dist/components/DataDisplay/du-accordion/du-accordion.vue.d.ts +45 -0
  148. package/dist/components/DataDisplay/du-accordion/du-accordion.vue_vue_type_script_setup_true_lang.js +45 -0
  149. package/dist/components/DataDisplay/du-avatar/du-avatar.js +7 -0
  150. package/dist/components/DataDisplay/du-avatar/du-avatar.types.d.ts +12 -0
  151. package/dist/components/DataDisplay/du-avatar/du-avatar.vue.d.ts +38 -0
  152. package/dist/components/DataDisplay/du-avatar/du-avatar.vue_vue_type_script_setup_true_lang.js +57 -0
  153. package/dist/components/DataDisplay/du-avatar/du-avatar.vue_vue_type_style_index_0_scoped_fdc61ebe_lang.css +1 -0
  154. package/dist/components/DataDisplay/du-badge/du-badge.js +5 -0
  155. package/dist/components/DataDisplay/du-badge/du-badge.types.d.ts +4 -0
  156. package/dist/components/DataDisplay/du-badge/du-badge.vue.d.ts +32 -0
  157. package/dist/components/DataDisplay/du-badge/du-badge.vue_vue_type_script_setup_true_lang.js +54 -0
  158. package/dist/components/DataDisplay/du-card/du-card.js +5 -0
  159. package/dist/components/DataDisplay/du-card/du-card.types.d.ts +4 -0
  160. package/dist/components/DataDisplay/du-card/du-card.vue.d.ts +43 -0
  161. package/dist/components/DataDisplay/du-card/du-card.vue_vue_type_script_setup_true_lang.js +61 -0
  162. package/dist/components/DataDisplay/du-carousel/du-carousel-item.js +5 -0
  163. package/dist/components/DataDisplay/du-carousel/du-carousel-item.vue.d.ts +16 -0
  164. package/dist/components/DataDisplay/du-carousel/du-carousel-item.vue_vue_type_script_setup_true_lang.js +14 -0
  165. package/dist/components/DataDisplay/du-carousel/du-carousel.js +5 -0
  166. package/dist/components/DataDisplay/du-carousel/du-carousel.types.d.ts +9 -0
  167. package/dist/components/DataDisplay/du-carousel/du-carousel.vue.d.ts +27 -0
  168. package/dist/components/DataDisplay/du-carousel/du-carousel.vue_vue_type_script_setup_true_lang.js +46 -0
  169. package/dist/components/DataDisplay/du-chat/du-chat-item.js +5 -0
  170. package/dist/components/DataDisplay/du-chat/du-chat-item.vue.d.ts +32 -0
  171. package/dist/components/DataDisplay/du-chat/du-chat-item.vue_vue_type_script_setup_true_lang.js +36 -0
  172. package/dist/components/DataDisplay/du-chat/du-chat.js +5 -0
  173. package/dist/components/DataDisplay/du-chat/du-chat.types.d.ts +18 -0
  174. package/dist/components/DataDisplay/du-chat/du-chat.vue.d.ts +38 -0
  175. package/dist/components/DataDisplay/du-chat/du-chat.vue_vue_type_script_setup_true_lang.js +55 -0
  176. package/dist/components/DataDisplay/du-collapse/du-collapse.js +5 -0
  177. package/dist/components/DataDisplay/du-collapse/du-collapse.types.d.ts +8 -0
  178. package/dist/components/DataDisplay/du-collapse/du-collapse.vue.d.ts +33 -0
  179. package/dist/components/DataDisplay/du-collapse/du-collapse.vue_vue_type_script_setup_true_lang.js +36 -0
  180. package/dist/components/DataDisplay/du-countdown/du-countdown-group.js +5 -0
  181. package/dist/components/DataDisplay/du-countdown/du-countdown-group.vue.d.ts +23 -0
  182. package/dist/components/DataDisplay/du-countdown/du-countdown-group.vue_vue_type_script_setup_true_lang.js +83 -0
  183. package/dist/components/DataDisplay/du-countdown/du-countdown.js +5 -0
  184. package/dist/components/DataDisplay/du-countdown/du-countdown.types.d.ts +8 -0
  185. package/dist/components/DataDisplay/du-countdown/du-countdown.vue.d.ts +27 -0
  186. package/dist/components/DataDisplay/du-countdown/du-countdown.vue_vue_type_script_setup_true_lang.js +67 -0
  187. package/dist/components/DataDisplay/du-diff/du-diff.js +5 -0
  188. package/dist/components/DataDisplay/du-diff/du-diff.types.d.ts +2 -0
  189. package/dist/components/DataDisplay/du-diff/du-diff.vue.d.ts +25 -0
  190. package/dist/components/DataDisplay/du-diff/du-diff.vue_vue_type_script_setup_true_lang.js +33 -0
  191. package/dist/components/DataDisplay/du-kbd/du-kbd.js +5 -0
  192. package/dist/components/DataDisplay/du-kbd/du-kbd.types.d.ts +2 -0
  193. package/dist/components/DataDisplay/du-kbd/du-kbd.vue.d.ts +19 -0
  194. package/dist/components/DataDisplay/du-kbd/du-kbd.vue_vue_type_script_setup_true_lang.js +13 -0
  195. package/dist/components/DataDisplay/du-list/du-list-row.js +5 -0
  196. package/dist/components/DataDisplay/du-list/du-list-row.vue.d.ts +17 -0
  197. package/dist/components/DataDisplay/du-list/du-list-row.vue_vue_type_script_setup_true_lang.js +22 -0
  198. package/dist/components/DataDisplay/du-list/du-list.js +5 -0
  199. package/dist/components/DataDisplay/du-list/du-list.types.d.ts +3 -0
  200. package/dist/components/DataDisplay/du-list/du-list.vue.d.ts +14 -0
  201. package/dist/components/DataDisplay/du-list/du-list.vue_vue_type_script_setup_true_lang.js +12 -0
  202. package/dist/components/DataDisplay/du-stat/du-stat.js +5 -0
  203. package/dist/components/DataDisplay/du-stat/du-stat.types.d.ts +12 -0
  204. package/dist/components/DataDisplay/du-stat/du-stat.vue.d.ts +27 -0
  205. package/dist/components/DataDisplay/du-stat/du-stat.vue_vue_type_script_setup_true_lang.js +37 -0
  206. package/dist/components/DataDisplay/du-stats/du-stats.js +7 -0
  207. package/dist/components/DataDisplay/du-stats/du-stats.types.d.ts +2 -0
  208. package/dist/components/DataDisplay/du-stats/du-stats.vue.d.ts +40 -0
  209. package/dist/components/DataDisplay/du-stats/du-stats.vue_vue_type_script_setup_true_lang.js +67 -0
  210. package/dist/components/DataDisplay/du-stats/du-stats.vue_vue_type_style_index_0_scoped_db955aa9_lang.css +1 -0
  211. package/dist/components/DataDisplay/du-status/du-status.js +5 -0
  212. package/dist/components/DataDisplay/du-status/du-status.types.d.ts +4 -0
  213. package/dist/components/DataDisplay/du-status/du-status.vue.d.ts +16 -0
  214. package/dist/components/DataDisplay/du-status/du-status.vue_vue_type_script_setup_true_lang.js +54 -0
  215. package/dist/components/DataDisplay/du-table/du-table-item.js +5 -0
  216. package/dist/components/DataDisplay/du-table/du-table-item.types.d.ts +6 -0
  217. package/dist/components/DataDisplay/du-table/du-table-item.vue.d.ts +19 -0
  218. package/dist/components/DataDisplay/du-table/du-table-item.vue_vue_type_script_setup_true_lang.js +30 -0
  219. package/dist/components/DataDisplay/du-table/du-table.js +5 -0
  220. package/dist/components/DataDisplay/du-table/du-table.types.d.ts +23 -0
  221. package/dist/components/DataDisplay/du-table/du-table.vue.d.ts +42 -0
  222. package/dist/components/DataDisplay/du-table/du-table.vue_vue_type_script_setup_true_lang.js +75 -0
  223. package/dist/components/DataDisplay/du-timeline/du-timeline-item.js +5 -0
  224. package/dist/components/DataDisplay/du-timeline/du-timeline-item.vue.d.ts +34 -0
  225. package/dist/components/DataDisplay/du-timeline/du-timeline-item.vue_vue_type_script_setup_true_lang.js +51 -0
  226. package/dist/components/DataDisplay/du-timeline/du-timeline.js +5 -0
  227. package/dist/components/DataDisplay/du-timeline/du-timeline.types.d.ts +12 -0
  228. package/dist/components/DataDisplay/du-timeline/du-timeline.vue.d.ts +61 -0
  229. package/dist/components/DataDisplay/du-timeline/du-timeline.vue_vue_type_script_setup_true_lang.js +75 -0
  230. package/dist/components/DataInput/du-checkbox/du-checkbox.js +5 -0
  231. package/dist/components/DataInput/du-checkbox/du-checkbox.types.d.ts +14 -0
  232. package/dist/components/DataInput/du-checkbox/du-checkbox.vue.d.ts +19 -0
  233. package/dist/components/DataInput/du-checkbox/du-checkbox.vue_vue_type_script_setup_true_lang.js +47 -0
  234. package/dist/components/DataInput/du-fieldset/du-fieldset.js +5 -0
  235. package/dist/components/DataInput/du-fieldset/du-fieldset.types.d.ts +4 -0
  236. package/dist/components/DataInput/du-fieldset/du-fieldset.vue.d.ts +14 -0
  237. package/dist/components/DataInput/du-fieldset/du-fieldset.vue_vue_type_script_setup_true_lang.js +21 -0
  238. package/dist/components/DataInput/du-file-input/du-file-input.js +5 -0
  239. package/dist/components/DataInput/du-file-input/du-file-input.types.d.ts +10 -0
  240. package/dist/components/DataInput/du-file-input/du-file-input.vue.d.ts +9 -0
  241. package/dist/components/DataInput/du-file-input/du-file-input.vue_vue_type_script_setup_true_lang.js +34 -0
  242. package/dist/components/DataInput/du-filter/du-filter.js +5 -0
  243. package/dist/components/DataInput/du-filter/du-filter.types.d.ts +27 -0
  244. package/dist/components/DataInput/du-filter/du-filter.vue.d.ts +17 -0
  245. package/dist/components/DataInput/du-filter/du-filter.vue_vue_type_script_setup_true_lang.js +28 -0
  246. package/dist/components/DataInput/du-input-field/du-input-field.js +5 -0
  247. package/dist/components/DataInput/du-input-field/du-input-field.types.d.ts +26 -0
  248. package/dist/components/DataInput/du-input-field/du-input-field.vue.d.ts +21 -0
  249. package/dist/components/DataInput/du-input-field/du-input-field.vue_vue_type_script_setup_true_lang.js +76 -0
  250. package/dist/components/DataInput/du-label/du-label.js +5 -0
  251. package/dist/components/DataInput/du-label/du-label.types.d.ts +3 -0
  252. package/dist/components/DataInput/du-label/du-label.vue.d.ts +14 -0
  253. package/dist/components/DataInput/du-label/du-label.vue_vue_type_script_setup_true_lang.js +19 -0
  254. package/dist/components/DataInput/du-label-input-validator/du-label-input-validator.js +5 -0
  255. package/dist/components/DataInput/du-label-input-validator/du-label-input-validator.types.d.ts +5 -0
  256. package/dist/components/DataInput/du-label-input-validator/du-label-input-validator.vue.d.ts +37 -0
  257. package/dist/components/DataInput/du-label-input-validator/du-label-input-validator.vue_vue_type_script_setup_true_lang.js +90 -0
  258. package/dist/components/DataInput/du-radio/du-radio.js +5 -0
  259. package/dist/components/DataInput/du-radio/du-radio.types.d.ts +12 -0
  260. package/dist/components/DataInput/du-radio/du-radio.vue.d.ts +9 -0
  261. package/dist/components/DataInput/du-radio/du-radio.vue_vue_type_script_setup_true_lang.js +34 -0
  262. package/dist/components/DataInput/du-range/du-range.js +5 -0
  263. package/dist/components/DataInput/du-range/du-range.types.d.ts +15 -0
  264. package/dist/components/DataInput/du-range/du-range.vue.d.ts +20 -0
  265. package/dist/components/DataInput/du-range/du-range.vue_vue_type_script_setup_true_lang.js +52 -0
  266. package/dist/components/DataInput/du-rating/du-rating-item.js +5 -0
  267. package/dist/components/DataInput/du-rating/du-rating-item.vue.d.ts +15 -0
  268. package/dist/components/DataInput/du-rating/du-rating-item.vue_vue_type_script_setup_true_lang.js +57 -0
  269. package/dist/components/DataInput/du-rating/du-rating.js +5 -0
  270. package/dist/components/DataInput/du-rating/du-rating.types.d.ts +38 -0
  271. package/dist/components/DataInput/du-rating/du-rating.vue.d.ts +34 -0
  272. package/dist/components/DataInput/du-rating/du-rating.vue_vue_type_script_setup_true_lang.js +100 -0
  273. package/dist/components/DataInput/du-search/du-search.js +5 -0
  274. package/dist/components/DataInput/du-search/du-search.types.d.ts +40 -0
  275. package/dist/components/DataInput/du-search/du-search.vue.d.ts +52 -0
  276. package/dist/components/DataInput/du-search/du-search.vue_vue_type_script_setup_true_lang.js +270 -0
  277. package/dist/components/DataInput/du-select/du-select.js +7 -0
  278. package/dist/components/DataInput/du-select/du-select.types.d.ts +28 -0
  279. package/dist/components/DataInput/du-select/du-select.vue.d.ts +60 -0
  280. package/dist/components/DataInput/du-select/du-select.vue_vue_type_script_setup_true_lang.js +321 -0
  281. package/dist/components/DataInput/du-select/du-select.vue_vue_type_style_index_0_scoped_2bcf0acd_lang.css +1 -0
  282. package/dist/components/DataInput/du-text-area/du-text-area.js +5 -0
  283. package/dist/components/DataInput/du-text-area/du-text-area.types.d.ts +10 -0
  284. package/dist/components/DataInput/du-text-area/du-text-area.vue.d.ts +15 -0
  285. package/dist/components/DataInput/du-text-area/du-text-area.vue_vue_type_script_setup_true_lang.js +46 -0
  286. package/dist/components/Feedback/du-alert/du-alert.js +5 -0
  287. package/dist/components/Feedback/du-alert/du-alert.types.d.ts +14 -0
  288. package/dist/components/Feedback/du-alert/du-alert.vue.d.ts +25 -0
  289. package/dist/components/Feedback/du-alert/du-alert.vue_vue_type_script_setup_true_lang.js +94 -0
  290. package/dist/components/Feedback/du-loading/du-loading.js +5 -0
  291. package/dist/components/Feedback/du-loading/du-loading.types.d.ts +9 -0
  292. package/dist/components/Feedback/du-loading/du-loading.vue.d.ts +8 -0
  293. package/dist/components/Feedback/du-loading/du-loading.vue_vue_type_script_setup_true_lang.js +30 -0
  294. package/dist/components/Feedback/du-progress/du-progress.js +5 -0
  295. package/dist/components/Feedback/du-progress/du-progress.types.d.ts +7 -0
  296. package/dist/components/Feedback/du-progress/du-progress.vue.d.ts +9 -0
  297. package/dist/components/Feedback/du-progress/du-progress.vue_vue_type_script_setup_true_lang.js +29 -0
  298. package/dist/components/Feedback/du-radial-progress/du-radial-progress.js +7 -0
  299. package/dist/components/Feedback/du-radial-progress/du-radial-progress.types.d.ts +8 -0
  300. package/dist/components/Feedback/du-radial-progress/du-radial-progress.vue.d.ts +19 -0
  301. package/dist/components/Feedback/du-radial-progress/du-radial-progress.vue_vue_type_script_setup_true_lang.js +31 -0
  302. package/dist/components/Feedback/du-radial-progress/du-radial-progress.vue_vue_type_style_index_0_scoped_4d489040_lang.css +1 -0
  303. package/dist/components/Feedback/du-skeleton/du-skeleton.js +5 -0
  304. package/dist/components/Feedback/du-skeleton/du-skeleton.types.d.ts +3 -0
  305. package/dist/components/Feedback/du-skeleton/du-skeleton.vue.d.ts +14 -0
  306. package/dist/components/Feedback/du-skeleton/du-skeleton.vue_vue_type_script_setup_true_lang.js +12 -0
  307. package/dist/components/Feedback/du-toast/du-toast.js +5 -0
  308. package/dist/components/Feedback/du-toast/du-toast.types.d.ts +9 -0
  309. package/dist/components/Feedback/du-toast/du-toast.vue.d.ts +20 -0
  310. package/dist/components/Feedback/du-toast/du-toast.vue_vue_type_script_setup_true_lang.js +45 -0
  311. package/dist/components/Feedback/du-tooltip/du-tooltip.js +5 -0
  312. package/dist/components/Feedback/du-tooltip/du-tooltip.types.d.ts +10 -0
  313. package/dist/components/Feedback/du-tooltip/du-tooltip.vue.d.ts +22 -0
  314. package/dist/components/Feedback/du-tooltip/du-tooltip.vue_vue_type_script_setup_true_lang.js +44 -0
  315. package/dist/components/Layout/du-drawer/du-drawer.js +5 -0
  316. package/dist/components/Layout/du-drawer/du-drawer.types.d.ts +23 -0
  317. package/dist/components/Layout/du-drawer/du-drawer.vue.d.ts +58 -0
  318. package/dist/components/Layout/du-drawer/du-drawer.vue_vue_type_script_setup_true_lang.js +129 -0
  319. package/dist/components/Layout/du-join/du-join.js +5 -0
  320. package/dist/components/Layout/du-join/du-join.types.d.ts +6 -0
  321. package/dist/components/Layout/du-join/du-join.vue.d.ts +17 -0
  322. package/dist/components/Layout/du-join/du-join.vue_vue_type_script_setup_true_lang.js +24 -0
  323. package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.js +7 -0
  324. package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.types.d.ts +11 -0
  325. package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.vue.d.ts +6 -0
  326. package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.vue_vue_type_script_setup_true_lang.js +42 -0
  327. package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.vue_vue_type_style_index_0_scoped_9364edec_lang.css +1 -0
  328. package/dist/components/Navigation/du-button-link/du-button-link.js +5 -0
  329. package/dist/components/Navigation/du-button-link/du-button-link.types.d.ts +16 -0
  330. package/dist/components/Navigation/du-button-link/du-button-link.vue.d.ts +27 -0
  331. package/dist/components/Navigation/du-button-link/du-button-link.vue_vue_type_script_setup_true_lang.js +71 -0
  332. package/dist/components/Navigation/du-dock/du-dock.js +5 -0
  333. package/dist/components/Navigation/du-dock/du-dock.types.d.ts +16 -0
  334. package/dist/components/Navigation/du-dock/du-dock.vue.d.ts +59 -0
  335. package/dist/components/Navigation/du-dock/du-dock.vue_vue_type_script_setup_true_lang.js +56 -0
  336. package/dist/components/Navigation/du-link/du-link.js +5 -0
  337. package/dist/components/Navigation/du-link/du-link.types.d.ts +6 -0
  338. package/dist/components/Navigation/du-link/du-link.vue.d.ts +18 -0
  339. package/dist/components/Navigation/du-link/du-link.vue_vue_type_script_setup_true_lang.js +28 -0
  340. package/dist/components/Navigation/du-menu/du-menu-item.js +5 -0
  341. package/dist/components/Navigation/du-menu/du-menu-item.vue.d.ts +17 -0
  342. package/dist/components/Navigation/du-menu/du-menu-item.vue_vue_type_script_setup_true_lang.js +186 -0
  343. package/dist/components/Navigation/du-menu/du-menu.js +6 -0
  344. package/dist/components/Navigation/du-menu/du-menu.types.d.ts +29 -0
  345. package/dist/components/Navigation/du-menu/du-menu.vue.d.ts +26 -0
  346. package/dist/components/Navigation/du-menu/du-menu.vue_vue_type_script_setup_true_lang.js +57 -0
  347. package/dist/components/Navigation/du-menu/du-menu.vue_vue_type_style_index_0_lang.css +1 -0
  348. package/dist/components/Navigation/du-navbar/du-navbar.js +5 -0
  349. package/dist/components/Navigation/du-navbar/du-navbar.types.d.ts +2 -0
  350. package/dist/components/Navigation/du-navbar/du-navbar.vue.d.ts +20 -0
  351. package/dist/components/Navigation/du-navbar/du-navbar.vue_vue_type_script_setup_true_lang.js +24 -0
  352. package/dist/components/Navigation/du-pagination/du-pagination.js +7 -0
  353. package/dist/components/Navigation/du-pagination/du-pagination.types.d.ts +29 -0
  354. package/dist/components/Navigation/du-pagination/du-pagination.vue.d.ts +51 -0
  355. package/dist/components/Navigation/du-pagination/du-pagination.vue_vue_type_script_setup_true_lang.js +156 -0
  356. package/dist/components/Navigation/du-pagination/du-pagination.vue_vue_type_style_index_0_scoped_7407b690_lang.css +1 -0
  357. package/dist/components/Navigation/du-step-item/du-step-item.js +5 -0
  358. package/dist/components/Navigation/du-step-item/du-step-item.types.d.ts +8 -0
  359. package/dist/components/Navigation/du-step-item/du-step-item.vue.d.ts +24 -0
  360. package/dist/components/Navigation/du-step-item/du-step-item.vue_vue_type_script_setup_true_lang.js +27 -0
  361. package/dist/components/Navigation/du-steps/du-steps.js +5 -0
  362. package/dist/components/Navigation/du-steps/du-steps.types.d.ts +17 -0
  363. package/dist/components/Navigation/du-steps/du-steps.vue.d.ts +40 -0
  364. package/dist/components/Navigation/du-steps/du-steps.vue_vue_type_script_setup_true_lang.js +44 -0
  365. package/dist/components/Navigation/du-tabs/du-tabs.js +5 -0
  366. package/dist/components/Navigation/du-tabs/du-tabs.types.d.ts +22 -0
  367. package/dist/components/Navigation/du-tabs/du-tabs.vue.d.ts +50 -0
  368. package/dist/components/Navigation/du-tabs/du-tabs.vue_vue_type_script_setup_true_lang.js +76 -0
  369. package/dist/composables/useSizeProps.d.ts +15 -0
  370. package/dist/composables/useSizeProps.js +22 -0
  371. package/dist/composables/useVariantProps.d.ts +14 -0
  372. package/dist/composables/useVariantProps.js +7 -0
  373. package/dist/index.d.ts +66 -0
  374. package/dist/index.js +65 -0
  375. package/dist/plugin-vite.d.ts +64 -0
  376. package/dist/plugin-vite.js +137 -0
  377. package/dist/types/index.d.ts +58 -0
  378. package/index.css +5 -0
  379. package/index.ts +69 -0
  380. package/package.json +99 -0
  381. package/plugin-vite.ts +286 -0
  382. package/types/index.ts +59 -0
  383. package/types/types.sh +80 -0
@@ -0,0 +1,31 @@
1
+ import { type Size } from "../../../composables/useSizeProps"
2
+ import { type Variant } from "../../../composables/useVariantProps"
3
+
4
+ export const SELECT_VARIANTS = ['default', 'select-primary', 'select-secondary', 'select-accent', 'select-info', 'select-success', 'select-warning', 'select-error'] as const
5
+ export const SELECT_SIZES = ['default', 'select-xs', 'select-sm', 'select-md', 'select-lg', 'select-xl'] as const
6
+
7
+ export type SELECTVariant = (typeof SELECT_VARIANTS)[number]
8
+ export type SELECTSize = (typeof SELECT_SIZES)[number]
9
+
10
+ export interface SELECTProps {
11
+ ghost?: boolean
12
+ variant?: Variant
13
+ size?: Size
14
+ disabled?: boolean
15
+ multiple?: boolean
16
+ modelValue?: any
17
+ placeholder?: string
18
+ search?: boolean
19
+ searchPlaceholder?: string
20
+ searchNoResultsText?: string
21
+ options?: any[]
22
+ searchable?: boolean
23
+ searchableInside?: boolean
24
+ checkboxes?: boolean
25
+ closeOnSelect?: boolean
26
+ trackBy?: string
27
+ labelBy?: string
28
+ returnObject?: boolean
29
+ clearable?: boolean
30
+ removeItemLabel?: string
31
+ }
@@ -0,0 +1,384 @@
1
+ <script setup lang="ts">
2
+ import { ref, computed, watch, onMounted, onBeforeUnmount, nextTick, inject } from 'vue'
3
+ import { useSizeMapping } from "../../../composables/useSizeProps"
4
+ import { useVariantMapping } from "../../../composables/useVariantProps"
5
+ import type { SELECTProps } from './du-select.types'
6
+
7
+ const props = withDefaults(defineProps<SELECTProps>(), {
8
+ options: () => [],
9
+ multiple: false,
10
+ placeholder: 'Select...',
11
+ searchable: false,
12
+ searchableInside: false,
13
+ searchPlaceholder: 'Search...',
14
+ searchNoResultsText: 'No options found',
15
+ checkboxes: false,
16
+ closeOnSelect: true,
17
+ trackBy: 'id',
18
+ labelBy: 'name',
19
+ returnObject: false,
20
+ clearable: false,
21
+ ghost: false,
22
+ variant: 'default',
23
+ size: 'default',
24
+ disabled: false,
25
+ search: false,
26
+ removeItemLabel: 'Remove',
27
+ })
28
+
29
+ const emit = defineEmits<{
30
+ 'update:modelValue': [value: any]
31
+ select: [option: any]
32
+ remove: [option: any]
33
+ open: []
34
+ close: []
35
+ }>()
36
+
37
+ const { colorClass } = useVariantMapping(props, "select")
38
+ const { sizeClass: inputSizeClass } = useSizeMapping(props, "input")
39
+ const { sizeClass: subMenuSizeClass } = useSizeMapping(props, "menu")
40
+ const ghostClass = computed(() => (props.ghost ? "select-ghost" : ""))
41
+
42
+ const isInLabel = inject("isInLabel", false);
43
+
44
+ const root = ref<HTMLElement | null>(null)
45
+ const searchInput = ref<HTMLInputElement | null>(null)
46
+ const searchInputInside = ref<HTMLInputElement | null>(null)
47
+ const open = ref(false)
48
+ const query = ref('')
49
+ const highlightedIndex = ref(-1)
50
+ const listId = `du-select-list-${Math.random().toString(36).slice(2, 9)}`
51
+
52
+ function optionValue(opt: any): any {
53
+ if (opt && typeof opt === 'object') return opt[props.trackBy] ?? opt.value ?? opt.id ?? opt
54
+ return opt
55
+ }
56
+ function optionLabel(opt: any): string {
57
+ if (opt && typeof opt === 'object') return opt[props.labelBy] ?? opt.label ?? opt.name ?? String(opt)
58
+ return String(opt)
59
+ }
60
+ function labelFromOption(opt: any): string { return optionLabel(opt) }
61
+ function labelFromValue(val: any): string {
62
+ const o = props.options.find(o => optionValue(o) === val)
63
+ return o ? optionLabel(o) : String(val)
64
+ }
65
+ function keyForOption(opt: any, i: number): string {
66
+ const v = optionValue(opt)
67
+ return `${String(v)}__${i}`
68
+ }
69
+ function valKey(val: any, idx: number): string { return `${String(val)}__${idx}` }
70
+
71
+ const selectedValues = ref<any[]>([])
72
+ const selectedSingle = ref<any>(null)
73
+
74
+ function syncFromModel() {
75
+ if (props.multiple) {
76
+ if (Array.isArray(props.modelValue)) {
77
+ selectedValues.value = props.modelValue.map(v => (v && typeof v === 'object' ? optionValue(v) : v))
78
+ } else {
79
+ selectedValues.value = []
80
+ }
81
+ } else {
82
+ if (props.modelValue && typeof props.modelValue === 'object') {
83
+ selectedSingle.value = optionValue(props.modelValue)
84
+ } else {
85
+ selectedSingle.value = props.modelValue
86
+ }
87
+ }
88
+ }
89
+
90
+ watch(() => props.modelValue, () => syncFromModel(), { immediate: true })
91
+
92
+ const filteredOptions = computed(() => {
93
+ const q = query.value?.toString().trim().toLowerCase()
94
+ if (!q) return props.options
95
+ return props.options.filter(o => optionLabel(o).toString().toLowerCase().includes(q))
96
+ })
97
+
98
+ function isSelected(opt: any): boolean {
99
+ const v = optionValue(opt)
100
+ if (props.multiple) return selectedValues.value.includes(v)
101
+ return selectedSingle.value === v
102
+ }
103
+
104
+ function optionFromValue(v: any): any {
105
+ return props.options.find(o => optionValue(o) === v) ?? v
106
+ }
107
+
108
+ function emitModelForMultiple() {
109
+ const out = props.returnObject ? selectedValues.value.map(v => optionFromValue(v)) : [...selectedValues.value]
110
+ emit('update:modelValue', out)
111
+ }
112
+ function emitModelForSingle(val: any) {
113
+ const out = props.returnObject ? optionFromValue(val) : val
114
+ emit('update:modelValue', out)
115
+ }
116
+
117
+ function toggleOption(opt: any) {
118
+ const v = optionValue(opt)
119
+ if (props.multiple) {
120
+ const idx = selectedValues.value.indexOf(v)
121
+ if (idx === -1) {
122
+ selectedValues.value.push(v)
123
+ emit('select', optionFromValue(v))
124
+ } else {
125
+ selectedValues.value.splice(idx, 1)
126
+ emit('remove', optionFromValue(v))
127
+ }
128
+ emitModelForMultiple()
129
+ } else {
130
+ if (props.clearable && selectedSingle.value === v) {
131
+ selectedSingle.value = null
132
+ emit('update:modelValue', null)
133
+ close()
134
+ } else {
135
+ selectedSingle.value = v
136
+ emit('select', optionFromValue(v))
137
+ emitModelForSingle(v)
138
+ if (props.closeOnSelect) close()
139
+ }
140
+ }
141
+ }
142
+
143
+ function handleOptionClick(opt: any) {
144
+ toggleOption(opt)
145
+ }
146
+
147
+ function removeValue(val: any) {
148
+ if (!props.multiple) return
149
+ const idx = selectedValues.value.indexOf(val)
150
+ if (idx > -1) {
151
+ selectedValues.value.splice(idx, 1)
152
+ emit('remove', optionFromValue(val))
153
+ emitModelForMultiple()
154
+ }
155
+ }
156
+
157
+ function openDropdown() {
158
+ open.value = true
159
+ emit('open')
160
+ highlightedIndex.value = 0
161
+ nextTick(() => {
162
+ if (props.searchable && (props.searchableInside || props.multiple)) {
163
+ // focus internal search if present
164
+ if (searchInput.value) searchInput.value.focus()
165
+ if (searchInputInside.value) searchInputInside.value.focus()
166
+ }
167
+ })
168
+ }
169
+ function close() {
170
+ open.value = false
171
+ query.value = ''
172
+ highlightedIndex.value = -1
173
+ emit('close')
174
+ }
175
+ function toggle() {
176
+ if (open.value) close()
177
+ else openDropdown()
178
+ }
179
+ function focusToggle() {
180
+ if (!open.value) openDropdown()
181
+ else {
182
+ // focus search input if there
183
+ nextTick(() => {
184
+ if (searchInput.value) searchInput.value.focus()
185
+ if (searchInputInside.value) searchInputInside.value.focus()
186
+ })
187
+ }
188
+ }
189
+
190
+ function onQuery() {
191
+ highlightedIndex.value = 0
192
+ }
193
+
194
+ function onKeydown(e: KeyboardEvent) {
195
+ if (!open.value && ['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(e.key)) {
196
+ openDropdown()
197
+ e.preventDefault()
198
+ return
199
+ }
200
+ const len = filteredOptions.value.length
201
+ if (e.key === 'ArrowDown') {
202
+ highlightedIndex.value = (highlightedIndex.value + 1 + len) % len
203
+ scrollHighlightedIntoView()
204
+ e.preventDefault()
205
+ } else if (e.key === 'ArrowUp') {
206
+ highlightedIndex.value = (highlightedIndex.value - 1 + len) % len
207
+ scrollHighlightedIntoView()
208
+ e.preventDefault()
209
+ } else if (e.key === 'Enter') {
210
+ if (highlightedIndex.value >= 0 && highlightedIndex.value < len) {
211
+ toggleOption(filteredOptions.value[highlightedIndex.value])
212
+ }
213
+ e.preventDefault()
214
+ } else if (e.key === 'Escape') {
215
+ close()
216
+ e.preventDefault()
217
+ } else if (e.key === 'Backspace' && props.multiple && query.value === '') {
218
+ // remove last tag
219
+ const last = selectedValues.value[selectedValues.value.length - 1]
220
+ if (last !== undefined) removeValue(last)
221
+ }
222
+ }
223
+
224
+ function scrollHighlightedIntoView() {
225
+ nextTick(() => {
226
+ const list = root.value?.querySelector(`#${listId}`)
227
+ const active = list?.querySelectorAll('li')[highlightedIndex.value]
228
+ if (active && active.scrollIntoView) active.scrollIntoView({ block: 'nearest' })
229
+ })
230
+ }
231
+
232
+ function onClickOutside(e: Event) {
233
+ if (!root.value) return
234
+ if (!root.value.contains(e.target as Node)) close()
235
+ }
236
+
237
+ function onFocusOut(_e: FocusEvent) {
238
+ setTimeout(() => {
239
+ if (!root.value) return
240
+
241
+ // Check if the new focus target is outside our component
242
+ const activeElement = document.activeElement
243
+ if (!activeElement || !root.value.contains(activeElement)) {
244
+ close()
245
+ }
246
+ }, 0)
247
+ }
248
+
249
+ function onFocus(_e: FocusEvent) {
250
+ if (!open.value) {
251
+ openDropdown()
252
+ }
253
+ }
254
+
255
+ onMounted(() => {
256
+ document.addEventListener('click', onClickOutside)
257
+ root.value?.addEventListener('focusout', onFocusOut)
258
+ })
259
+ onBeforeUnmount(() => {
260
+ document.removeEventListener('click', onClickOutside)
261
+ root.value?.removeEventListener('focusout', onFocusOut)
262
+ })
263
+
264
+ const selectedOption = computed(() => optionFromValue(selectedSingle.value))
265
+
266
+ </script>
267
+
268
+ <template>
269
+ <div class="relative" :class="[isInLabel && 'w-full']" ref="root" @keydown="onKeydown">
270
+ <div class="input input-bordered flex items-center gap-2 cursor-text w-full overflow-x-clip"
271
+ :class="[colorClass, inputSizeClass, ghostClass, { 'input-disabled': disabled }, { 'outline-none rounded-l-none border-x-0': isInLabel }]" tabindex="0" role="combobox"
272
+ :aria-expanded="open" :aria-controls="listId" @click="focusToggle" @focus="onFocus">
273
+ <template v-if="multiple">
274
+ <template v-for="(val, idx) in selectedValues" :key="valKey(val, idx)">
275
+ <slot name="tag" :value="optionFromValue(val)" :index="idx">
276
+ <label class="badge badge-sm badge-neutral mr-1 flex items-center gap-2 cursor-pointer">
277
+ {{ labelFromValue(val) }}
278
+ <button class="btn btn-ghost btn-circle btn-xs p-0" @click.stop="removeValue(val)"
279
+ :aria-label="removeItemLabel">✕</button>
280
+ </label>
281
+ </slot>
282
+ </template>
283
+
284
+ <input v-if="searchable" ref="searchInput" v-model="query" @focus="open = true" @input="onQuery"
285
+ class="input input-ghost flex-1 w-full !outline-none pl-0"
286
+ :class="{ ' placeholder:!text-base-content': selectedValues.length }"
287
+ :placeholder="selectedValues.length ? '' : placeholder" aria-autocomplete="list" />
288
+
289
+ <span v-else class="flex-1" :class="{ 'text-gray-400': !selectedValues.length }">
290
+ {{ !selectedValues.length ? placeholder : '' }}
291
+ </span>
292
+ </template>
293
+
294
+ <template v-else>
295
+ <template v-if="searchable">
296
+ <input ref="searchInput" v-model="query" @focus="open = true" @input="onQuery"
297
+ class="input input-ghost flex-1 min-w-[6rem] !outline-none pl-0"
298
+ :class="{ ' placeholder:!text-base-content': selectedOption }"
299
+ :placeholder="selectedOption ? labelFromOption(selectedOption) : placeholder"
300
+ aria-autocomplete="list" />
301
+ </template>
302
+ <template v-else>
303
+ <slot name="selected" :selected="selectedOption">
304
+ <span class="flex-1">{{ selectedOption ? labelFromOption(selectedOption) : placeholder }}</span>
305
+ </slot>
306
+ </template>
307
+ </template>
308
+
309
+ <div class="btn btn-ghost btn-sm outline-none! h-4/5" type="button" @click.stop="toggle">
310
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none"
311
+ stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
312
+ <polyline points="6 9 12 15 18 9"></polyline>
313
+ </svg>
314
+ </div>
315
+ </div>
316
+
317
+ <transition enter-active-class="transition ease-out duration-100" enter-from-class="opacity-0 scale-95"
318
+ enter-to-class="opacity-100 scale-100" leave-active-class="transition ease-in duration-75"
319
+ leave-from-class="opacity-100 scale-100" leave-to-class="opacity-0 scale-95">
320
+ <div v-if="open"
321
+ class="absolute dropdown-content menu flex-nowrap bg-base-100 rounded-box shadow mt-1 w-full z-50 p-0"
322
+ role="listbox" :id="listId" :class="[subMenuSizeClass]">
323
+ <!-- optional internal search at top of dropdown -->
324
+ <div v-if="searchable && searchableInside" class="p-2">
325
+ <input v-model="query" ref="searchInputInside" class="input input-bordered w-full"
326
+ :placeholder="searchPlaceholder" @input="onQuery" />
327
+ </div>
328
+
329
+ <div class="block max-h-72 overflow-auto">
330
+ <ul class="block m-0 p-2">
331
+ <li v-for="(opt, i) in filteredOptions" :key="keyForOption(opt, i)"
332
+ class="block w-full rounded-box"
333
+ :class="[{ 'bg-primary text-primary-content': isSelected(opt), 'bg-base-300': i === highlightedIndex, 'bg-primary/75': isSelected(opt) && i === highlightedIndex }, 'cursor-pointer']"
334
+ role="option" :aria-selected="isSelected(opt)" @mousedown.prevent="handleOptionClick(opt)"
335
+ @mouseover.prevent="highlightedIndex = i">
336
+ <a class="flex items-center gap-3 py-2 px-3 text-balance! bg-transparent">
337
+ <input v-if="checkboxes" type="checkbox" class="checkbox checkbox-sm"
338
+ :checked="isSelected(opt)" @change.stop.prevent="toggleOption(opt)" tabindex="-1" />
339
+ <slot name="option" :option="opt" :index="i">
340
+ {{ labelFromOption(opt) }}
341
+ </slot>
342
+ <span v-if="clearable && isSelected(opt)" class="ml-auto opacity-60 hover:opacity-100" aria-hidden="true">✕</span>
343
+ </a>
344
+ </li>
345
+
346
+ <li v-if="filteredOptions.length === 0" class="p-2 text-sm text-gray-500">
347
+ <slot name="no-options">{{ searchNoResultsText }}</slot>
348
+ </li>
349
+ </ul>
350
+ </div>
351
+
352
+
353
+ </div>
354
+ </transition>
355
+ </div>
356
+ </template>
357
+
358
+ <style scoped>
359
+ .dropdown-content.menu {
360
+ @supports (scrollbar-color: auto) {
361
+
362
+ *,
363
+ *:hover {
364
+ scrollbar-width: thin;
365
+ }
366
+ }
367
+
368
+ @supports (scrollbar-width: none) {
369
+
370
+ *,
371
+ *:hover {
372
+ scrollbar-width: thin;
373
+ }
374
+ }
375
+
376
+ & ul {
377
+ display: block;
378
+ }
379
+
380
+ & li a {
381
+ white-space: nowrap;
382
+ }
383
+ }
384
+ </style>
@@ -0,0 +1,11 @@
1
+ import { type Variant } from "../../../composables/useVariantProps"
2
+ import { type Size } from "../../../composables/useSizeProps"
3
+
4
+ export interface TEXTAREAProps {
5
+ modelValue?: string
6
+ placeholder?: string
7
+ disabled?: boolean
8
+ variant?: Variant
9
+ size?: Size
10
+ ghost?: boolean
11
+ }
@@ -0,0 +1,41 @@
1
+ <script setup lang="ts">
2
+ import { type TEXTAREAProps } from './du-text-area.types'
3
+ import { useVariantMapping } from "../../../composables/useVariantProps"
4
+ import { useSizeMapping } from "../../../composables/useSizeProps"
5
+ import { computed } from "vue"
6
+
7
+ const props = withDefaults(
8
+ defineProps<TEXTAREAProps>(),
9
+ {
10
+ modelValue: "",
11
+ placeholder: "",
12
+ disabled: false,
13
+ variant: "default",
14
+ size: "default",
15
+ ghost: false,
16
+ },
17
+ )
18
+
19
+ const emit = defineEmits<{
20
+ (e: "update:modelValue", value: string): void
21
+ }>()
22
+
23
+ const ghostClass = computed(() => (props.ghost ? "textarea-ghost" : ""))
24
+ const { colorClass } = useVariantMapping(props, "textarea")
25
+ const { sizeClass } = useSizeMapping(props, "textarea")
26
+
27
+ const handleInput = (event: Event) => {
28
+ const value = (event.target as HTMLTextAreaElement).value
29
+ emit("update:modelValue", value)
30
+ }
31
+ </script>
32
+
33
+ <template>
34
+ <textarea
35
+ :value="modelValue"
36
+ :placeholder="placeholder"
37
+ :disabled="disabled"
38
+ @input="handleInput"
39
+ :class="['textarea', ghostClass, colorClass, sizeClass]"
40
+ />
41
+ </template>
@@ -0,0 +1,16 @@
1
+ export const DU_ALERT_VARIANTS = ["default", "success", "error", "warning", "info"] as const;
2
+ export type AlertVariant = (typeof DU_ALERT_VARIANTS)[number];
3
+
4
+ export const DU_ALERT_DIRECTIONS = ["default", "vertical", "horizontal", "responsive"] as const;
5
+ export type AlertDirection = (typeof DU_ALERT_DIRECTIONS)[number];
6
+
7
+ export interface AlertProps {
8
+ variant?: AlertVariant;
9
+ direction?: AlertDirection;
10
+ soft?: boolean;
11
+ outline?: boolean;
12
+ dash?: boolean;
13
+ dismissible?: boolean;
14
+ autoDismissible?: boolean;
15
+ icon?: boolean;
16
+ }
@@ -0,0 +1,113 @@
1
+ <script setup lang="ts">
2
+ import { computed, onMounted, ref } from "vue";
3
+ import { type AlertProps } from "./du-alert.types";
4
+
5
+
6
+ const props = withDefaults(
7
+ defineProps<AlertProps>(),
8
+ {
9
+ variant: "default",
10
+ direction: "default",
11
+ soft: false,
12
+ outline: false,
13
+ dash: false,
14
+ dismissible: false,
15
+ autoDismissible: false,
16
+ icon: true,
17
+ },
18
+ );
19
+
20
+ // Détermine si l'alerte est visible
21
+ const visible = ref(true);
22
+
23
+ const onClick = () => {
24
+ visible.value = false;
25
+ };
26
+
27
+ onMounted(() => {
28
+ if (props.autoDismissible) {
29
+ setTimeout(() => {
30
+ visible.value = false;
31
+ }, 5000);
32
+ }
33
+ });
34
+
35
+ // Détermine la classe CSS en fonction du type d'alerte
36
+ const alertColorClass = computed(() => {
37
+ return {
38
+ default: "",
39
+ success: "alert-success",
40
+ error: "alert-error",
41
+ warning: "alert-warning",
42
+ info: "alert-info",
43
+ }[props.variant];
44
+ });
45
+
46
+ const directionClass = computed(() => {
47
+ return {
48
+ default: "",
49
+ vertical: "alert-vertical",
50
+ horizontal: "alert-horizontal",
51
+ responsive: "alert-vertical sm:alert-horizontal",
52
+ }[props.direction];
53
+ });
54
+
55
+ const softClass = computed(() => {
56
+ return props.soft ? "alert-soft" : "";
57
+ });
58
+
59
+ const outlineClass = computed(() => {
60
+ return props.outline ? "alert-outline" : "";
61
+ });
62
+
63
+ const dashClass = computed(() => {
64
+ return props.dash ? "alert-dash" : "";
65
+ });
66
+
67
+ // SVG en fonction du type d'alerte
68
+ const svgIcons = {
69
+ default: `
70
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="stroke-info h-6 w-6 shrink-0">
71
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
72
+ </svg>`,
73
+ success: `
74
+ <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 shrink-0 stroke-current" fill="none" viewBox="0 0 24 24">
75
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
76
+ </svg>`,
77
+ error: `
78
+ <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 shrink-0 stroke-current" fill="none" viewBox="0 0 24 24">
79
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" />
80
+ </svg>`,
81
+ warning: `
82
+ <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 shrink-0 stroke-current" fill="none" viewBox="0 0 24 24">
83
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
84
+ </svg>`,
85
+ info: `
86
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="h-6 w-6 shrink-0 stroke-current">
87
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
88
+ </svg>`,
89
+ };
90
+ </script>
91
+
92
+ <template>
93
+ <div role="alert" v-if="visible" :class="[
94
+ 'alert',
95
+ alertColorClass,
96
+ softClass,
97
+ outlineClass,
98
+ dashClass,
99
+ directionClass,
100
+ ]">
101
+ <template v-if="icon"><span v-html="svgIcons[variant]"></span></template>
102
+ <slot>Default alert</slot>
103
+ <div v-if="$slots.actions || dismissible">
104
+ <slot name="actions"></slot>
105
+ <button v-if="dismissible" @click="onClick" class="btn btn-sm btn-square btn-ghost">
106
+ <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
107
+ <path fill="currentColor"
108
+ d="M3.64 2.27L7.5 6.13l3.84-3.84A.92.92 0 0 1 12 2a1 1 0 0 1 1 1a.9.9 0 0 1-.27.66L8.84 7.5l3.89 3.89A.9.9 0 0 1 13 12a1 1 0 0 1-1 1a.92.92 0 0 1-.69-.27L7.5 8.87l-3.85 3.85A.92.92 0 0 1 3 13a1 1 0 0 1-1-1a.9.9 0 0 1 .27-.66L6.16 7.5L2.27 3.61A.9.9 0 0 1 2 3a1 1 0 0 1 1-1c.24.003.47.1.64.27" />
109
+ </svg>
110
+ </button>
111
+ </div>
112
+ </div>
113
+ </template>
@@ -0,0 +1,11 @@
1
+ import { type Variant } from "../../../composables/useVariantProps";
2
+ import { type Size } from "../../../composables/useSizeProps";
3
+
4
+ export const DU_LOADING_ANIMATIONS = ["spinner", "dots", "ring", "ball", "bars", "infinity"] as const;
5
+ export type LoadingAnimation = (typeof DU_LOADING_ANIMATIONS)[number];
6
+
7
+ export interface LoadingProps {
8
+ animation?: LoadingAnimation;
9
+ size?: Size;
10
+ variant?: Variant;
11
+ }
@@ -0,0 +1,33 @@
1
+ <script setup lang="ts">
2
+ import { computed } from "vue";
3
+ import { useVariantMapping } from "../../../composables/useVariantProps";
4
+ import { useSizeMapping } from "../../../composables/useSizeProps";
5
+ import { type LoadingProps } from "./du-loading.types";
6
+
7
+ const props = withDefaults(
8
+ defineProps<LoadingProps>(),
9
+ {
10
+ animation: "spinner",
11
+ size: "default",
12
+ variant: "default",
13
+ },
14
+ );
15
+
16
+ const animationClass = computed(() => {
17
+ return {
18
+ spinner: "loading-spinner",
19
+ dots: "loading-dots",
20
+ ring: "loading-ring",
21
+ ball: "loading-ball",
22
+ bars: "loading-bars",
23
+ infinity: "loading-infinity",
24
+ }[props.animation];
25
+ });
26
+
27
+ const { sizeClass } = useSizeMapping(props, "loading");
28
+ const { colorClass } = useVariantMapping(props, "text");
29
+ </script>
30
+
31
+ <template>
32
+ <span :class="['loading', sizeClass, animationClass, colorClass]"></span>
33
+ </template>
@@ -0,0 +1,8 @@
1
+ import { type Variant } from "../../../composables/useVariantProps";
2
+
3
+ export interface ProgressProps {
4
+ value?: number;
5
+ max?: number;
6
+ indeterminate?: boolean;
7
+ variant?: Variant;
8
+ }
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import { useVariantMapping } from "../../../composables/useVariantProps";
3
+ import { type ProgressProps } from "./du-progress.types";
4
+
5
+ const props = withDefaults(
6
+ defineProps<ProgressProps>(),
7
+ {
8
+ variant: "default",
9
+ value: 0,
10
+ max: 100,
11
+ indeterminate: false,
12
+ },
13
+ );
14
+ const { colorClass } = useVariantMapping(props, "progress");
15
+ </script>
16
+
17
+ <template>
18
+ <progress
19
+ :class="['progress', 'w-56', colorClass]"
20
+ :value="!indeterminate ? value : undefined"
21
+ :max="!indeterminate ? max : undefined"
22
+ ></progress>
23
+ </template>