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,86 @@
1
+ <script setup lang="ts">
2
+ import { computed } from 'vue'
3
+ import { type Size, useSizeMapping } from '../../../composables/useSizeProps'
4
+
5
+ const props = withDefaults(
6
+ defineProps<{
7
+ size?: Size
8
+ bordered?: boolean
9
+ dash?: boolean
10
+ side?: boolean
11
+ imageFull?: boolean
12
+ responsive?: boolean
13
+ title?: string
14
+ }>(),
15
+ {
16
+ size: 'default',
17
+ bordered: false,
18
+ dash: false,
19
+ side: false,
20
+ imageFull: false,
21
+ responsive: false,
22
+ title: '',
23
+ },
24
+ )
25
+
26
+ const { sizeClass } = useSizeMapping(props, 'card')
27
+
28
+ const borderedClass = computed(() => {
29
+ return props.bordered ? 'card-border' : ''
30
+ })
31
+
32
+ const dashClass = computed(() => {
33
+ return props.dash ? 'card-dash' : ''
34
+ })
35
+
36
+ const sideClass = computed(() => {
37
+ return props.side ? 'card-side' : ''
38
+ })
39
+
40
+ const responsiveClass = computed(() => {
41
+ return props.responsive ? 'card-compact sm:card-normal' : ''
42
+ })
43
+
44
+ const imageFullClass = computed(() => {
45
+ return props.imageFull ? 'image-full' : ''
46
+ })
47
+ </script>
48
+
49
+ <template>
50
+ <div
51
+ :class="[
52
+ 'card',
53
+ sizeClass,
54
+ borderedClass,
55
+ dashClass,
56
+ sideClass,
57
+ responsiveClass,
58
+ imageFullClass,
59
+ ]"
60
+ >
61
+ <slot name="figure"></slot>
62
+
63
+ <template v-if="$slots.body">
64
+ <slot name="body"></slot>
65
+ <slot name="default"></slot>
66
+ </template>
67
+
68
+ <div
69
+ v-else-if="$slots.title || $slots.actions || $slots.default || title"
70
+ class="card-body"
71
+ >
72
+ <h2 v-if="title || $slots.title" class="card-title flex-wrap">
73
+ <template v-if="title">{{ title }}</template>
74
+ <slot name="title"></slot>
75
+ </h2>
76
+
77
+ <slot></slot>
78
+
79
+ <div v-if="$slots.actions" class="card-actions">
80
+ <slot name="actions"></slot>
81
+ </div>
82
+ </div>
83
+
84
+ <slot name="content"></slot>
85
+ </div>
86
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ defineProps<{
3
+ id?: string
4
+ }>()
5
+ </script>
6
+
7
+ <template>
8
+ <div :id="id" class="carousel-item">
9
+ <slot></slot>
10
+ </div>
11
+ </template>
@@ -0,0 +1,15 @@
1
+ export const CAROUSEL_POSITIONS = [
2
+ 'carousel-start',
3
+ 'carousel-center',
4
+ 'carousel-end',
5
+ ] as const
6
+
7
+ export type CAROUSELPosition = (typeof CAROUSEL_POSITIONS)[number]
8
+
9
+ export interface CarouselItem {
10
+ id?: string
11
+ src?: string
12
+ alt?: string
13
+ content?: string
14
+ customClass?: string
15
+ }
@@ -0,0 +1,46 @@
1
+ <script setup lang="ts">
2
+ import { computed } from "vue"
3
+ import { type CarouselItem } from './du-carousel.types'
4
+ import DuCarouselItem from './du-carousel-item.vue'
5
+
6
+ const props = withDefaults(
7
+ defineProps<{
8
+ items?: CarouselItem[]
9
+ start?: boolean
10
+ center?: boolean
11
+ end?: boolean
12
+ vertical?: boolean
13
+ }>(),
14
+ {
15
+ items: undefined,
16
+ start: true,
17
+ center: false,
18
+ end: false,
19
+ vertical: false,
20
+ },
21
+ )
22
+
23
+ const positionClass = computed(() => {
24
+ if (props.center) return "carousel-center"
25
+ if (props.end) return "carousel-end"
26
+ if (props.start) return "carousel-start"
27
+ return null
28
+ })
29
+ </script>
30
+
31
+ <template>
32
+ <div :class="['carousel', positionClass, { 'carousel-vertical': vertical }]">
33
+ <template v-if="items && items.length">
34
+ <DuCarouselItem
35
+ v-for="(item, index) in items"
36
+ :key="item.id ?? index"
37
+ :id="item.id"
38
+ :class="item.customClass"
39
+ >
40
+ <img v-if="item.src" :src="item.src" :alt="item.alt ?? `Slide ${index + 1}`" />
41
+ <template v-else-if="item.content">{{ item.content }}</template>
42
+ </DuCarouselItem>
43
+ </template>
44
+ <slot v-else></slot>
45
+ </div>
46
+ </template>
@@ -0,0 +1,56 @@
1
+ <script setup lang="ts">
2
+ import { computed, inject } from "vue";
3
+ import { type Variant, useVariantMapping } from "../../../composables/useVariantProps";
4
+ import { type ChatPlacement } from "./du-chat.types";
5
+
6
+ interface ChatItemProps {
7
+ message?: string;
8
+ placement?: ChatPlacement;
9
+ variant?: Variant;
10
+ customClass?: string;
11
+ }
12
+
13
+ const props = withDefaults(
14
+ defineProps<ChatItemProps>(),
15
+ {
16
+ message: "",
17
+ placement: undefined,
18
+ variant: "default",
19
+ customClass: "",
20
+ },
21
+ );
22
+
23
+ const defaultPlacement = inject("defaultChatPlacement", "start");
24
+
25
+ const finalPlacement = computed(() => props.placement || defaultPlacement);
26
+
27
+ const { colorClass } = useVariantMapping(props, "chat-bubble");
28
+
29
+ const placementClass = computed(() => {
30
+ return finalPlacement.value === "end" ? "chat-end" : "chat-start";
31
+ });
32
+ </script>
33
+
34
+ <template>
35
+ <div :class="['chat', placementClass, customClass]">
36
+ <div v-if="$slots.image" class="chat-image avatar">
37
+ <div class="w-10 rounded-full">
38
+ <slot name="image"></slot>
39
+ </div>
40
+ </div>
41
+
42
+ <div v-if="$slots.header" class="chat-header">
43
+ <slot name="header"></slot>
44
+ </div>
45
+
46
+ <div :class="['chat-bubble', colorClass]">
47
+ <slot name="message">
48
+ {{ message }}
49
+ </slot>
50
+ </div>
51
+
52
+ <div v-if="$slots.footer" class="chat-footer">
53
+ <slot name="footer"></slot>
54
+ </div>
55
+ </div>
56
+ </template>
@@ -0,0 +1,31 @@
1
+ export const CHAT_COLORS = [
2
+ 'chat-bubble-primary',
3
+ 'chat-bubble-secondary',
4
+ 'chat-bubble-accent',
5
+ 'chat-bubble-neutral',
6
+ 'chat-bubble-info',
7
+ 'chat-bubble-success',
8
+ 'chat-bubble-warning',
9
+ 'chat-bubble-error',
10
+ ] as const
11
+
12
+ export type CHATColor = (typeof CHAT_COLORS)[number]
13
+
14
+ export const DU_CHAT_PLACEMENTS = ["start", "end"] as const;
15
+ export type ChatPlacement = (typeof DU_CHAT_PLACEMENTS)[number];
16
+
17
+ export interface ChatItem {
18
+ message?: string;
19
+ image?: string;
20
+ header?: string;
21
+ footer?: string;
22
+ placement?: ChatPlacement;
23
+ variant?: CHATColor;
24
+ customClass?: string;
25
+ }
26
+
27
+ export interface ChatProps {
28
+ items?: ChatItem[];
29
+ placement?: ChatPlacement;
30
+ customClass?: string;
31
+ }
@@ -0,0 +1,71 @@
1
+ <script setup lang="ts">
2
+ import { provide } from "vue";
3
+ import { type ChatProps } from './du-chat.types';
4
+
5
+ const props = withDefaults(
6
+ defineProps<ChatProps>(),
7
+ {
8
+ items: undefined,
9
+ placement: "start",
10
+ customClass: "",
11
+ },
12
+ );
13
+
14
+ provide("defaultChatPlacement", props.placement);
15
+
16
+ const getPlacementClass = (itemPlacement: string | undefined) => {
17
+ const finalPlacement = itemPlacement || props.placement;
18
+ return finalPlacement === "end" ? "chat-end" : "chat-start";
19
+ };
20
+ </script>
21
+
22
+ <template>
23
+ <!-- Dynamic items mode -->
24
+ <template v-if="items">
25
+ <div
26
+ v-for="(item, index) in items"
27
+ :key="index"
28
+ :class="[
29
+ 'chat',
30
+ getPlacementClass(item.placement),
31
+ item.customClass || customClass,
32
+ ]"
33
+ >
34
+ <div
35
+ v-if="item.image || $slots[`image-${index}`]"
36
+ class="chat-image avatar"
37
+ >
38
+ <div class="w-10 rounded-full">
39
+ <slot :name="`image-${index}`" :item="item" :index="index">
40
+ <img v-if="item.image" :src="item.image" alt="Chat avatar" />
41
+ </slot>
42
+ </div>
43
+ </div>
44
+
45
+ <div v-if="item.header || $slots[`header-${index}`]" class="chat-header">
46
+ <slot :name="`header-${index}`" :item="item" :index="index">
47
+ {{ item.header }}
48
+ </slot>
49
+ </div>
50
+
51
+ <div
52
+ :class="['chat-bubble', item.variant ? `chat-bubble-${item.variant}` : '']"
53
+ >
54
+ <slot :name="`message-${index}`" :item="item" :index="index">
55
+ {{ item.message }}
56
+ </slot>
57
+ </div>
58
+
59
+ <div v-if="item.footer || $slots[`footer-${index}`]" class="chat-footer">
60
+ <slot :name="`footer-${index}`" :item="item" :index="index">
61
+ {{ item.footer }}
62
+ </slot>
63
+ </div>
64
+ </div>
65
+ </template>
66
+
67
+ <!-- Manual mode -->
68
+ <template v-else>
69
+ <slot></slot>
70
+ </template>
71
+ </template>
@@ -0,0 +1,15 @@
1
+ export const COLLAPSE_MODIFIERS = [
2
+ 'collapse-arrow',
3
+ 'collapse-plus',
4
+ 'collapse-open',
5
+ 'collapse-close',
6
+ ] as const
7
+
8
+ export interface COLLAPSEItem {
9
+ title?: string
10
+ content?: string
11
+ open?: boolean
12
+ customClass?: string
13
+ }
14
+
15
+ export type COLLAPSEModifier = (typeof COLLAPSE_MODIFIERS)[number]
@@ -0,0 +1,59 @@
1
+ <script setup lang="ts">
2
+ import { computed, provide } from 'vue'
3
+ import { type COLLAPSEItem } from './du-collapse.types'
4
+
5
+ withDefaults(
6
+ defineProps<{
7
+ items?: COLLAPSEItem[]
8
+ modifier?:
9
+ | 'collapse-arrow'
10
+ | 'collapse-plus'
11
+ | 'collapse-open'
12
+ | 'collapse-close'
13
+ customClass?: string
14
+ }>(),
15
+ {
16
+ items: undefined,
17
+ modifier: undefined,
18
+ customClass: '',
19
+ },
20
+ )
21
+
22
+ const collapseId = computed(
23
+ () => `collapse-${Math.random().toString(36).substring(2, 9)}`,
24
+ )
25
+ provide('collapseId', collapseId.value)
26
+ </script>
27
+
28
+ <template>
29
+ <!-- Dynamic items mode -->
30
+ <template v-if="items">
31
+ <div
32
+ v-for="(item, index) in items"
33
+ :key="index"
34
+ :class="[
35
+ 'collapse',
36
+ 'bg-base-100 border border-base-300',
37
+ modifier,
38
+ item.customClass || customClass,
39
+ ]"
40
+ >
41
+ <input type="checkbox" :checked="item.open ?? false" />
42
+ <div class="collapse-title">
43
+ <slot :name="`title-${index}`" :item="item" :index="index">
44
+ {{ item.title }}
45
+ </slot>
46
+ </div>
47
+ <div class="collapse-content">
48
+ <slot :name="`content-${index}`" :item="item" :index="index">
49
+ {{ item.content }}
50
+ </slot>
51
+ </div>
52
+ </div>
53
+ </template>
54
+
55
+ <!-- Manual mode -->
56
+ <template v-else>
57
+ <slot></slot>
58
+ </template>
59
+ </template>
@@ -0,0 +1,88 @@
1
+ <script setup lang="ts">
2
+ import DuCountdown from "./du-countdown.vue"
3
+ import { type COUNTDOWNLabels } from './du-countdown.types'
4
+
5
+ withDefaults(
6
+ defineProps<{
7
+ targetDate?: Date
8
+ showDays?: boolean
9
+ showHours?: boolean
10
+ showMinutes?: boolean
11
+ showSeconds?: boolean
12
+ labels?: COUNTDOWNLabels
13
+ separator?: string
14
+ customClass?: string
15
+ }>(),
16
+ {
17
+ targetDate: undefined,
18
+ showDays: true,
19
+ showHours: true,
20
+ showMinutes: true,
21
+ showSeconds: true,
22
+ labels: () => ({
23
+ days: "days",
24
+ hours: "hours",
25
+ minutes: "min",
26
+ seconds: "sec",
27
+ }),
28
+ separator: ":",
29
+ customClass: "",
30
+ },
31
+ )
32
+
33
+ </script>
34
+
35
+ <template>
36
+ <div :class="['flex items-center gap-2', customClass]">
37
+ <div v-if="showDays" class="flex flex-col items-center">
38
+ <DuCountdown
39
+ :target-date="targetDate"
40
+ format="days"
41
+ :separator="separator"
42
+ />
43
+ <span class="text-xs mt-1">{{ labels.days }}</span>
44
+ </div>
45
+
46
+ <span
47
+ v-if="showDays && (showHours || showMinutes || showSeconds)"
48
+ class="text-xl"
49
+ >
50
+ {{ separator }}
51
+ </span>
52
+
53
+ <div v-if="showHours" class="flex flex-col items-center">
54
+ <DuCountdown
55
+ :target-date="targetDate"
56
+ format="hours"
57
+ :separator="separator"
58
+ />
59
+ <span class="text-xs mt-1">{{ labels.hours }}</span>
60
+ </div>
61
+
62
+ <span v-if="showHours && (showMinutes || showSeconds)" class="text-xl">
63
+ {{ separator }}
64
+ </span>
65
+
66
+ <div v-if="showMinutes" class="flex flex-col items-center">
67
+ <DuCountdown
68
+ :target-date="targetDate"
69
+ format="minutes"
70
+ :separator="separator"
71
+ />
72
+ <span class="text-xs mt-1">{{ labels.minutes }}</span>
73
+ </div>
74
+
75
+ <span v-if="showMinutes && showSeconds" class="text-xl">
76
+ {{ separator }}
77
+ </span>
78
+
79
+ <div v-if="showSeconds" class="flex flex-col items-center">
80
+ <DuCountdown
81
+ :target-date="targetDate"
82
+ format="seconds"
83
+ :separator="separator"
84
+ />
85
+ <span class="text-xs mt-1">{{ labels.seconds }}</span>
86
+ </div>
87
+ </div>
88
+ </template>
@@ -0,0 +1,15 @@
1
+ export const COUNTDOWN_FORMATS = [
2
+ 'days',
3
+ 'hours',
4
+ 'minutes',
5
+ 'seconds',
6
+ ] as const
7
+
8
+ export type COUNTDOWNFormat = (typeof COUNTDOWN_FORMATS)[number]
9
+
10
+ export interface COUNTDOWNLabels {
11
+ days?: string
12
+ hours?: string
13
+ minutes?: string
14
+ seconds?: string
15
+ }
@@ -0,0 +1,180 @@
1
+ <script setup lang="ts">
2
+ import { computed, ref, onMounted, onBeforeUnmount, watch } from "vue"
3
+ import { type COUNTDOWNFormat } from './du-countdown.types'
4
+
5
+ const props = withDefaults(
6
+ defineProps<{
7
+ value?: number
8
+ targetDate?: Date
9
+ format?: COUNTDOWNFormat
10
+ separator?: string
11
+ customClass?: string
12
+ autoStart?: boolean
13
+ }>(),
14
+ {
15
+ value: undefined,
16
+ targetDate: undefined,
17
+ format: "seconds",
18
+ separator: ":",
19
+ customClass: "",
20
+ autoStart: true,
21
+ },
22
+ )
23
+
24
+ const currentValue = ref(props.value !== undefined ? props.value : 0)
25
+ const intervalId = ref<number | null>(null)
26
+
27
+ const calculateTimeRemaining = () => {
28
+ if (!props.targetDate) return 0
29
+
30
+ const now = new Date().getTime()
31
+ const target = props.targetDate.getTime()
32
+ const difference = Math.max(0, target - now)
33
+
34
+ const calculators = {
35
+ days: () => Math.floor(difference / (1000 * 60 * 60 * 24)),
36
+ hours: () =>
37
+ Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),
38
+ minutes: () => Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60)),
39
+ seconds: () => Math.floor((difference % (1000 * 60)) / 1000),
40
+ }
41
+
42
+ return (calculators[props.format] || calculators.seconds)()
43
+ }
44
+
45
+ // Calculer le temps total restant en millisecondes
46
+ const getTotalTimeRemaining = () => {
47
+ if (!props.targetDate) return 0
48
+ const now = new Date().getTime()
49
+ const target = props.targetDate.getTime()
50
+ return Math.max(0, target - now)
51
+ }
52
+
53
+ // Mettre à jour la valeur en fonction de la date cible
54
+ const updateFromTargetDate = () => {
55
+ if (props.targetDate) {
56
+ currentValue.value = calculateTimeRemaining()
57
+ }
58
+ }
59
+
60
+ // Nombre de chiffres à afficher (2 ou 3)
61
+ const digits = computed(() => {
62
+ return currentValue.value > 99 ? 3 : 2
63
+ })
64
+
65
+ // Formater la valeur pour l'affichage
66
+ const formattedValue = computed(() => {
67
+ const value = Math.min(999, Math.max(0, currentValue.value))
68
+ return value.toString().padStart(digits.value, '0')
69
+ })
70
+
71
+ // Valeur pour l'attribut aria-label
72
+ const ariaLabel = computed(() => {
73
+ return `${currentValue.value} ${props.format}`
74
+ })
75
+
76
+ // Définir l'émetteur d'événements
77
+ const emit = defineEmits<{
78
+ (e: "end"): void
79
+ }>()
80
+
81
+ // Démarrer le compte à rebours
82
+ const startCountdown = () => {
83
+ if (intervalId.value !== null) return
84
+
85
+ updateFromTargetDate()
86
+
87
+ intervalId.value = window.setInterval(() => {
88
+ if (props.targetDate) {
89
+ updateFromTargetDate()
90
+ // Vérifier si le temps total restant est 0, pas juste la valeur affichée
91
+ if (getTotalTimeRemaining() === 0) {
92
+ emit("end")
93
+ stopCountdown()
94
+ }
95
+ } else if (currentValue.value > 0) {
96
+ currentValue.value--
97
+ if (currentValue.value === 0) {
98
+ emit("end")
99
+ stopCountdown()
100
+ }
101
+ } else {
102
+ stopCountdown()
103
+ }
104
+ }, 1000)
105
+ }
106
+
107
+ // Arrêter le compte à rebours
108
+ const stopCountdown = () => {
109
+ if (intervalId.value !== null) {
110
+ clearInterval(intervalId.value)
111
+ intervalId.value = null
112
+ }
113
+ }
114
+
115
+ // Réinitialiser le compte à rebours
116
+ const resetCountdown = () => {
117
+ stopCountdown()
118
+ if (props.value !== undefined) {
119
+ currentValue.value = props.value
120
+ } else if (props.targetDate) {
121
+ updateFromTargetDate()
122
+ } else {
123
+ currentValue.value = 0
124
+ }
125
+ }
126
+
127
+ // Exposer les méthodes pour le contrôle externe
128
+ defineExpose({
129
+ start: startCountdown,
130
+ stop: stopCountdown,
131
+ reset: resetCountdown,
132
+ })
133
+
134
+ // Surveiller les changements de props
135
+ watch(
136
+ () => props.value,
137
+ (newValue) => {
138
+ if (newValue !== undefined) {
139
+ currentValue.value = newValue
140
+ }
141
+ },
142
+ )
143
+
144
+ watch(
145
+ () => props.targetDate,
146
+ () => {
147
+ resetCountdown()
148
+ if (props.autoStart) {
149
+ startCountdown()
150
+ }
151
+ },
152
+ )
153
+
154
+ // Démarrer le compte à rebours au montage si autoStart est true
155
+ onMounted(() => {
156
+ if (props.autoStart) {
157
+ startCountdown()
158
+ }
159
+ })
160
+
161
+ // Nettoyer l'intervalle avant de démonter le composant
162
+ onBeforeUnmount(() => {
163
+ stopCountdown()
164
+ })
165
+
166
+ const cssVars = computed(() => ({
167
+ '--value': Math.min(999, Math.max(0, currentValue.value)),
168
+ '--digits': digits.value
169
+ }))
170
+ </script>
171
+
172
+ <template>
173
+ <span
174
+ :class="['countdown', customClass]"
175
+ aria-live="polite"
176
+ :aria-label="ariaLabel"
177
+ >
178
+ <span :style="cssVars">{{ formattedValue }}</span>
179
+ </span>
180
+ </template>
@@ -0,0 +1,9 @@
1
+ export const DIFF_ASPECT_RATIOS = [
2
+ 'aspect-16/9',
3
+ 'aspect-4/3',
4
+ 'aspect-1/1',
5
+ 'aspect-video',
6
+ 'aspect-square',
7
+ ] as const
8
+
9
+ export type DIFFAspectRatio = (typeof DIFF_ASPECT_RATIOS)[number]