flowbite-angular 1.3.0 → 20.0.2

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 (309) hide show
  1. package/README.md +30 -39
  2. package/accordion/index.d.ts +569 -16
  3. package/alert/index.d.ts +602 -4
  4. package/badge/index.d.ts +636 -4
  5. package/breadcrumb/index.d.ts +452 -8
  6. package/button/index.d.ts +335 -4
  7. package/button-group/README.md +4 -0
  8. package/button-group/index.d.ts +85 -0
  9. package/{core → card}/README.md +2 -2
  10. package/card/index.d.ts +640 -0
  11. package/{accordion → clipboard}/README.md +2 -2
  12. package/clipboard/index.d.ts +103 -0
  13. package/dropdown/index.d.ts +536 -16
  14. package/fesm2022/flowbite-angular-accordion.mjs +339 -479
  15. package/fesm2022/flowbite-angular-accordion.mjs.map +1 -1
  16. package/fesm2022/flowbite-angular-alert.mjs +308 -240
  17. package/fesm2022/flowbite-angular-alert.mjs.map +1 -1
  18. package/fesm2022/flowbite-angular-badge.mjs +332 -238
  19. package/fesm2022/flowbite-angular-badge.mjs.map +1 -1
  20. package/fesm2022/flowbite-angular-breadcrumb.mjs +262 -191
  21. package/fesm2022/flowbite-angular-breadcrumb.mjs.map +1 -1
  22. package/fesm2022/flowbite-angular-button-group.mjs +86 -0
  23. package/fesm2022/flowbite-angular-button-group.mjs.map +1 -0
  24. package/fesm2022/flowbite-angular-button.mjs +189 -270
  25. package/fesm2022/flowbite-angular-button.mjs.map +1 -1
  26. package/fesm2022/flowbite-angular-card.mjs +344 -0
  27. package/fesm2022/flowbite-angular-card.mjs.map +1 -0
  28. package/fesm2022/flowbite-angular-clipboard.mjs +174 -0
  29. package/fesm2022/flowbite-angular-clipboard.mjs.map +1 -0
  30. package/fesm2022/flowbite-angular-dropdown.mjs +272 -459
  31. package/fesm2022/flowbite-angular-dropdown.mjs.map +1 -1
  32. package/fesm2022/flowbite-angular-form.mjs +444 -0
  33. package/fesm2022/flowbite-angular-form.mjs.map +1 -0
  34. package/fesm2022/flowbite-angular-icon-brand.mjs +71 -0
  35. package/fesm2022/flowbite-angular-icon-brand.mjs.map +1 -0
  36. package/fesm2022/flowbite-angular-icon-outline-arrows.mjs +51 -0
  37. package/fesm2022/flowbite-angular-icon-outline-arrows.mjs.map +1 -0
  38. package/fesm2022/flowbite-angular-icon-outline-e-commerce.mjs +23 -0
  39. package/fesm2022/flowbite-angular-icon-outline-e-commerce.mjs.map +1 -0
  40. package/fesm2022/flowbite-angular-icon-outline-emoji.mjs +13 -0
  41. package/fesm2022/flowbite-angular-icon-outline-emoji.mjs.map +1 -0
  42. package/fesm2022/flowbite-angular-icon-outline-files-folders.mjs +42 -0
  43. package/fesm2022/flowbite-angular-icon-outline-files-folders.mjs.map +1 -0
  44. package/fesm2022/flowbite-angular-icon-outline-general.mjs +145 -0
  45. package/fesm2022/flowbite-angular-icon-outline-general.mjs.map +1 -0
  46. package/fesm2022/flowbite-angular-icon-outline-media.mjs +25 -0
  47. package/fesm2022/flowbite-angular-icon-outline-media.mjs.map +1 -0
  48. package/fesm2022/flowbite-angular-icon-outline-text.mjs +20 -0
  49. package/fesm2022/flowbite-angular-icon-outline-text.mjs.map +1 -0
  50. package/fesm2022/flowbite-angular-icon-outline-user.mjs +17 -0
  51. package/fesm2022/flowbite-angular-icon-outline-user.mjs.map +1 -0
  52. package/fesm2022/flowbite-angular-icon-outline-weather.mjs +9 -0
  53. package/fesm2022/flowbite-angular-icon-outline-weather.mjs.map +1 -0
  54. package/fesm2022/flowbite-angular-icon-outline.mjs +6 -0
  55. package/fesm2022/flowbite-angular-icon-outline.mjs.map +1 -0
  56. package/fesm2022/flowbite-angular-icon-solid-arrows.mjs +17 -0
  57. package/fesm2022/flowbite-angular-icon-solid-arrows.mjs.map +1 -0
  58. package/fesm2022/flowbite-angular-icon-solid-brands.mjs +33 -0
  59. package/fesm2022/flowbite-angular-icon-solid-brands.mjs.map +1 -0
  60. package/fesm2022/flowbite-angular-icon-solid-e-commerce.mjs +21 -0
  61. package/fesm2022/flowbite-angular-icon-solid-e-commerce.mjs.map +1 -0
  62. package/fesm2022/flowbite-angular-icon-solid-emoji.mjs +13 -0
  63. package/fesm2022/flowbite-angular-icon-solid-emoji.mjs.map +1 -0
  64. package/fesm2022/flowbite-angular-icon-solid-files-folder.mjs +42 -0
  65. package/fesm2022/flowbite-angular-icon-solid-files-folder.mjs.map +1 -0
  66. package/fesm2022/flowbite-angular-icon-solid-general.mjs +123 -0
  67. package/fesm2022/flowbite-angular-icon-solid-general.mjs.map +1 -0
  68. package/fesm2022/flowbite-angular-icon-solid-media.mjs +24 -0
  69. package/fesm2022/flowbite-angular-icon-solid-media.mjs.map +1 -0
  70. package/fesm2022/flowbite-angular-icon-solid-text.mjs +11 -0
  71. package/fesm2022/flowbite-angular-icon-solid-text.mjs.map +1 -0
  72. package/fesm2022/flowbite-angular-icon-solid-user.mjs +17 -0
  73. package/fesm2022/flowbite-angular-icon-solid-user.mjs.map +1 -0
  74. package/fesm2022/flowbite-angular-icon-solid-weather.mjs +9 -0
  75. package/fesm2022/flowbite-angular-icon-solid-weather.mjs.map +1 -0
  76. package/fesm2022/flowbite-angular-icon-solid.mjs +6 -0
  77. package/fesm2022/flowbite-angular-icon-solid.mjs.map +1 -0
  78. package/fesm2022/flowbite-angular-icon.mjs +318 -219
  79. package/fesm2022/flowbite-angular-icon.mjs.map +1 -1
  80. package/fesm2022/flowbite-angular-indicator.mjs +119 -231
  81. package/fesm2022/flowbite-angular-indicator.mjs.map +1 -1
  82. package/fesm2022/flowbite-angular-modal.mjs +337 -486
  83. package/fesm2022/flowbite-angular-modal.mjs.map +1 -1
  84. package/fesm2022/flowbite-angular-navbar.mjs +600 -604
  85. package/fesm2022/flowbite-angular-navbar.mjs.map +1 -1
  86. package/fesm2022/flowbite-angular-pagination.mjs +994 -0
  87. package/fesm2022/flowbite-angular-pagination.mjs.map +1 -0
  88. package/fesm2022/flowbite-angular-sidebar.mjs +400 -776
  89. package/fesm2022/flowbite-angular-sidebar.mjs.map +1 -1
  90. package/fesm2022/flowbite-angular-tab.mjs +465 -0
  91. package/fesm2022/flowbite-angular-tab.mjs.map +1 -0
  92. package/fesm2022/flowbite-angular-theme-toggle.mjs +263 -0
  93. package/fesm2022/flowbite-angular-theme-toggle.mjs.map +1 -0
  94. package/fesm2022/flowbite-angular-tooltip.mjs +117 -0
  95. package/fesm2022/flowbite-angular-tooltip.mjs.map +1 -0
  96. package/fesm2022/flowbite-angular.mjs +53 -66
  97. package/fesm2022/flowbite-angular.mjs.map +1 -1
  98. package/flowbite-angular.css +2 -0
  99. package/{alert → form}/README.md +2 -2
  100. package/form/index.d.ts +684 -0
  101. package/{breadcrumb → icon/brand}/README.md +2 -2
  102. package/icon/brand/index.d.ts +66 -0
  103. package/icon/index.d.ts +322 -5
  104. package/icon/outline/README.md +4 -0
  105. package/icon/outline/arrows/index.d.ts +46 -0
  106. package/icon/outline/e-commerce/index.d.ts +18 -0
  107. package/icon/outline/emoji/index.d.ts +8 -0
  108. package/icon/outline/files-folders/index.d.ts +37 -0
  109. package/icon/outline/general/index.d.ts +140 -0
  110. package/icon/outline/index.d.ts +2 -0
  111. package/icon/outline/media/index.d.ts +20 -0
  112. package/icon/outline/text/index.d.ts +15 -0
  113. package/icon/outline/user/index.d.ts +12 -0
  114. package/icon/outline/weather/index.d.ts +4 -0
  115. package/icon/solid/README.md +4 -0
  116. package/icon/solid/arrows/index.d.ts +12 -0
  117. package/icon/solid/brands/index.d.ts +28 -0
  118. package/icon/solid/e-commerce/index.d.ts +16 -0
  119. package/icon/solid/emoji/index.d.ts +8 -0
  120. package/icon/solid/files-folder/index.d.ts +37 -0
  121. package/icon/solid/general/index.d.ts +118 -0
  122. package/icon/solid/index.d.ts +2 -0
  123. package/icon/solid/media/index.d.ts +19 -0
  124. package/icon/solid/text/index.d.ts +6 -0
  125. package/icon/solid/user/index.d.ts +12 -0
  126. package/icon/solid/weather/index.d.ts +4 -0
  127. package/index.d.ts +126 -3
  128. package/indicator/index.d.ts +242 -4
  129. package/modal/index.d.ts +458 -16
  130. package/navbar/index.d.ts +1467 -24
  131. package/package.json +133 -38
  132. package/pagination/README.md +4 -0
  133. package/pagination/index.d.ts +1135 -0
  134. package/sidebar/index.d.ts +880 -24
  135. package/styles/flowbite-angular.css +8 -0
  136. package/styles/part/animation.css +0 -0
  137. package/styles/part/color.css +125 -0
  138. package/styles/part/font-size.css +67 -0
  139. package/styles/part/rounded.css +11 -0
  140. package/styles/part/shadow.css +9 -0
  141. package/styles/part/spacing.css +38 -0
  142. package/{badge → tab}/README.md +2 -2
  143. package/tab/index.d.ts +791 -0
  144. package/theme-toggle/README.md +4 -0
  145. package/theme-toggle/index.d.ts +342 -0
  146. package/{button → tooltip}/README.md +2 -2
  147. package/tooltip/index.d.ts +158 -0
  148. package/accordion/accordion-content.component.d.ts +0 -69
  149. package/accordion/accordion-content.theme.d.ts +0 -28
  150. package/accordion/accordion-content.theme.service.d.ts +0 -19
  151. package/accordion/accordion-panel.component.d.ts +0 -67
  152. package/accordion/accordion-panel.theme.d.ts +0 -23
  153. package/accordion/accordion-panel.theme.service.d.ts +0 -20
  154. package/accordion/accordion-title.component.d.ts +0 -106
  155. package/accordion/accordion-title.theme.d.ts +0 -35
  156. package/accordion/accordion-title.theme.service.d.ts +0 -19
  157. package/accordion/accordion.component.d.ts +0 -61
  158. package/accordion/accordion.theme.d.ts +0 -29
  159. package/accordion/accordion.theme.service.d.ts +0 -19
  160. package/alert/alert.component.d.ts +0 -150
  161. package/alert/alert.theme.d.ts +0 -39
  162. package/alert/alert.theme.service.d.ts +0 -19
  163. package/badge/badge.component.d.ts +0 -196
  164. package/badge/badge.theme.d.ts +0 -53
  165. package/badge/badge.theme.service.d.ts +0 -19
  166. package/base-component.directive.d.ts +0 -51
  167. package/breadcrumb/breadcrumb-item.component.d.ts +0 -84
  168. package/breadcrumb/breadcrumb-item.theme.d.ts +0 -33
  169. package/breadcrumb/breadcrumb-item.theme.service.d.ts +0 -19
  170. package/breadcrumb/breadcrumb.component.d.ts +0 -43
  171. package/breadcrumb/breadcrumb.theme.d.ts +0 -29
  172. package/breadcrumb/breadcrumb.theme.service.d.ts +0 -19
  173. package/button/button.component.d.ts +0 -250
  174. package/button/button.theme.d.ts +0 -79
  175. package/button/button.theme.service.d.ts +0 -19
  176. package/core/flowbite.theme.init.d.ts +0 -9
  177. package/core/index.d.ts +0 -1
  178. package/dark-theme-toggle/README.md +0 -4
  179. package/dark-theme-toggle/dark-theme-toggle.component.d.ts +0 -51
  180. package/dark-theme-toggle/dark-theme-toggle.theme.d.ts +0 -23
  181. package/dark-theme-toggle/dark-theme-toggle.theme.service.d.ts +0 -19
  182. package/dark-theme-toggle/index.d.ts +0 -3
  183. package/dropdown/README.md +0 -4
  184. package/dropdown/dropdown-divider.component.d.ts +0 -36
  185. package/dropdown/dropdown-divider.theme.d.ts +0 -23
  186. package/dropdown/dropdown-divider.theme.service.d.ts +0 -19
  187. package/dropdown/dropdown-header.component.d.ts +0 -42
  188. package/dropdown/dropdown-header.theme.d.ts +0 -28
  189. package/dropdown/dropdown-header.theme.service.d.ts +0 -19
  190. package/dropdown/dropdown-item.component.d.ts +0 -36
  191. package/dropdown/dropdown-item.theme.d.ts +0 -23
  192. package/dropdown/dropdown-item.theme.service.d.ts +0 -19
  193. package/dropdown/dropdown.component.d.ts +0 -136
  194. package/dropdown/dropdown.theme.d.ts +0 -56
  195. package/dropdown/dropdown.theme.service.d.ts +0 -19
  196. package/fesm2022/flowbite-angular-core.mjs +0 -322
  197. package/fesm2022/flowbite-angular-core.mjs.map +0 -1
  198. package/fesm2022/flowbite-angular-dark-theme-toggle.mjs +0 -139
  199. package/fesm2022/flowbite-angular-dark-theme-toggle.mjs.map +0 -1
  200. package/fesm2022/flowbite-angular-router-link-active.mjs +0 -68
  201. package/fesm2022/flowbite-angular-router-link-active.mjs.map +0 -1
  202. package/fesm2022/flowbite-angular-router-link.mjs +0 -73
  203. package/fesm2022/flowbite-angular-router-link.mjs.map +0 -1
  204. package/fesm2022/flowbite-angular-sanitize-html.mjs +0 -39
  205. package/fesm2022/flowbite-angular-sanitize-html.mjs.map +0 -1
  206. package/fesm2022/flowbite-angular-scroll-top.mjs +0 -193
  207. package/fesm2022/flowbite-angular-scroll-top.mjs.map +0 -1
  208. package/fesm2022/flowbite-angular-theme.mjs +0 -78
  209. package/fesm2022/flowbite-angular-theme.mjs.map +0 -1
  210. package/fesm2022/flowbite-angular-utils.mjs +0 -210
  211. package/fesm2022/flowbite-angular-utils.mjs.map +0 -1
  212. package/flowbite.theme.service.d.ts +0 -12
  213. package/icon/icon-registry.d.ts +0 -45
  214. package/icon/icon.component.d.ts +0 -22
  215. package/icon/trusted-types.d.ts +0 -15
  216. package/indicator/indicators.component.d.ts +0 -224
  217. package/indicator/indicators.theme.d.ts +0 -59
  218. package/indicator/indicators.theme.service.d.ts +0 -19
  219. package/modal/modal-body.component.d.ts +0 -36
  220. package/modal/modal-body.theme.d.ts +0 -23
  221. package/modal/modal-body.theme.service.d.ts +0 -19
  222. package/modal/modal-footer.component.d.ts +0 -36
  223. package/modal/modal-footer.theme.d.ts +0 -23
  224. package/modal/modal-footer.theme.service.d.ts +0 -19
  225. package/modal/modal-header.component.d.ts +0 -60
  226. package/modal/modal-header.theme.d.ts +0 -32
  227. package/modal/modal-header.theme.service.d.ts +0 -19
  228. package/modal/modal.component.d.ts +0 -146
  229. package/modal/modal.theme.d.ts +0 -35
  230. package/modal/modal.theme.service.d.ts +0 -19
  231. package/navbar/navbar-brand.component.d.ts +0 -36
  232. package/navbar/navbar-brand.theme.d.ts +0 -23
  233. package/navbar/navbar-brand.theme.service.d.ts +0 -19
  234. package/navbar/navbar-content.component.d.ts +0 -50
  235. package/navbar/navbar-content.theme.d.ts +0 -28
  236. package/navbar/navbar-content.theme.service.d.ts +0 -19
  237. package/navbar/navbar-icon-button.component.d.ts +0 -59
  238. package/navbar/navbar-icon-button.theme.d.ts +0 -26
  239. package/navbar/navbar-icon-button.theme.service.d.ts +0 -19
  240. package/navbar/navbar-item.component.d.ts +0 -67
  241. package/navbar/navbar-item.theme.d.ts +0 -26
  242. package/navbar/navbar-item.theme.service.d.ts +0 -19
  243. package/navbar/navbar-toggle.component.d.ts +0 -51
  244. package/navbar/navbar-toggle.theme.d.ts +0 -23
  245. package/navbar/navbar-toggle.theme.service.d.ts +0 -19
  246. package/navbar/navbar.component.d.ts +0 -121
  247. package/navbar/navbar.theme.d.ts +0 -21
  248. package/navbar/navbar.theme.service.d.ts +0 -19
  249. package/router-link/README.md +0 -4
  250. package/router-link/flowbite-router-link.directive.d.ts +0 -28
  251. package/router-link/index.d.ts +0 -1
  252. package/router-link-active/README.md +0 -4
  253. package/router-link-active/flowbite-router-link-active.directive.d.ts +0 -37
  254. package/router-link-active/index.d.ts +0 -1
  255. package/sanitize-html/README.md +0 -4
  256. package/sanitize-html/index.d.ts +0 -1
  257. package/sanitize-html/sanitize-html.pipe.d.ts +0 -20
  258. package/scroll-top/README.md +0 -4
  259. package/scroll-top/index.d.ts +0 -4
  260. package/scroll-top/scroll-top.component.d.ts +0 -114
  261. package/scroll-top/scroll-top.theme.d.ts +0 -39
  262. package/scroll-top/scroll-top.theme.service.d.ts +0 -19
  263. package/sidebar/sidebar-item-group.component.d.ts +0 -100
  264. package/sidebar/sidebar-item-group.theme.d.ts +0 -31
  265. package/sidebar/sidebar-item-group.theme.service.d.ts +0 -19
  266. package/sidebar/sidebar-item.component.d.ts +0 -101
  267. package/sidebar/sidebar-item.theme.d.ts +0 -33
  268. package/sidebar/sidebar-item.theme.service.d.ts +0 -19
  269. package/sidebar/sidebar-menu.component.d.ts +0 -93
  270. package/sidebar/sidebar-menu.theme.d.ts +0 -30
  271. package/sidebar/sidebar-menu.theme.service.d.ts +0 -19
  272. package/sidebar/sidebar-page-content.component.d.ts +0 -46
  273. package/sidebar/sidebar-page-content.theme.d.ts +0 -27
  274. package/sidebar/sidebar-page-content.theme.service.d.ts +0 -19
  275. package/sidebar/sidebar-toggle.component.d.ts +0 -95
  276. package/sidebar/sidebar-toggle.theme.d.ts +0 -34
  277. package/sidebar/sidebar-toggle.theme.service.d.ts +0 -19
  278. package/sidebar/sidebar.component.d.ts +0 -84
  279. package/sidebar/sidebar.theme.d.ts +0 -22
  280. package/sidebar/sidebar.theme.service.d.ts +0 -19
  281. package/tailwind.config.js +0 -303
  282. package/theme/README.md +0 -4
  283. package/theme/flowbite-theme.directive.d.ts +0 -36
  284. package/theme/index.d.ts +0 -1
  285. package/type-definitions/colors/flowbite.colors.d.ts +0 -19
  286. package/type-definitions/colors/flowbite.gradient-colors.d.ts +0 -11
  287. package/type-definitions/colors/flowbite.gradient-duo-tone-colors.d.ts +0 -12
  288. package/type-definitions/colors/index.d.ts +0 -3
  289. package/type-definitions/flowbite.boolean.d.ts +0 -14
  290. package/type-definitions/flowbite.class.d.ts +0 -6
  291. package/type-definitions/flowbite.combination.d.ts +0 -8
  292. package/type-definitions/flowbite.content-positions.d.ts +0 -6
  293. package/type-definitions/flowbite.deep-partial.d.ts +0 -6
  294. package/type-definitions/flowbite.heading-levels.d.ts +0 -4
  295. package/type-definitions/flowbite.positions.d.ts +0 -14
  296. package/type-definitions/flowbite.router-link-parameter.d.ts +0 -5
  297. package/type-definitions/flowbite.sizes.d.ts +0 -10
  298. package/type-definitions/flowbite.themes.d.ts +0 -4
  299. package/type-definitions/index.d.ts +0 -12
  300. package/utils/README.md +0 -4
  301. package/utils/icon.list.d.ts +0 -7
  302. package/utils/id.generator.d.ts +0 -59
  303. package/utils/index.d.ts +0 -8
  304. package/utils/theme/clone-deep.d.ts +0 -7
  305. package/utils/theme/create-class.d.ts +0 -7
  306. package/utils/theme/create-theme.d.ts +0 -7
  307. package/utils/theme/is-object.d.ts +0 -7
  308. package/utils/theme/merge-theme.d.ts +0 -8
  309. package/utils/theme/to-string.d.ts +0 -7
@@ -1,528 +1,341 @@
1
- import { mergeTheme, CHEVRON_DOWN_SVG_ICON, createTheme } from 'flowbite-angular/utils';
1
+ import { createTheme, mergeDeep, colorToTheme } from 'flowbite-angular';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, inject, Injectable, makeEnvironmentProviders, model, Component, ViewEncapsulation, ChangeDetectionStrategy, viewChild, contentChildren } from '@angular/core';
3
+ import { InjectionToken, inject, input, computed, Directive } from '@angular/core';
4
+ import { createStateToken, createStateProvider, createStateInjector, createState } from 'ng-primitives/state';
5
+ import * as i1 from 'ng-primitives/menu';
6
+ import { NgpMenu, NgpMenuItem } from 'ng-primitives/menu';
4
7
  import { twMerge } from 'tailwind-merge';
5
- import { BaseComponent, booleanToFlowbiteBoolean } from 'flowbite-angular';
6
- import { IconRegistry, IconComponent } from 'flowbite-angular/icon';
7
- import { DomSanitizer } from '@angular/platform-browser';
8
+ import * as i2 from 'ng-primitives/interactions';
9
+ import { NgpFocus } from 'ng-primitives/interactions';
8
10
 
9
- /**
10
- * `InjectionToken` used to import `DropdownDividerTheme` value
11
- *
12
- * @example
13
- * ```
14
- * var theme = inject(FLOWBITE_DROPDOWN_DIVIDER_THEME_TOKEN)
15
- * ```
16
- */
17
- const FLOWBITE_DROPDOWN_DIVIDER_THEME_TOKEN = new InjectionToken('FLOWBITE_DROPDOWN_DIVIDER_THEME_TOKEN');
18
- class DropdownDividerThemeService {
19
- constructor() {
20
- this.baseTheme = inject(FLOWBITE_DROPDOWN_DIVIDER_THEME_TOKEN);
21
- }
22
- getClasses(properties) {
23
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
24
- const output = {
25
- rootClass: twMerge(theme.root.base),
26
- };
27
- return output;
28
- }
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownDividerThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
30
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownDividerThemeService, providedIn: 'root' }); }
31
- }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownDividerThemeService, decorators: [{
33
- type: Injectable,
34
- args: [{
35
- providedIn: 'root',
36
- }]
37
- }] });
38
-
39
- const FLOWBITE_DROPDOWN_DIVIDER_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_DROPDOWN_DIVIDER_CUSTOM_STYLE_DEFAULT_VALUE');
40
- const dropdownDividerDefaultValueProvider = makeEnvironmentProviders([
41
- {
42
- provide: FLOWBITE_DROPDOWN_DIVIDER_CUSTOM_STYLE_DEFAULT_VALUE,
43
- useValue: {},
11
+ const flowbiteDropdownTheme = createTheme({
12
+ host: {
13
+ base: 'fixed z-10 w-max divide-y rounded-lg border shadow-sm',
14
+ transition: '',
15
+ color: {
16
+ default: {
17
+ light: 'divide-gray-200 border-gray-200 bg-white',
18
+ dark: 'dark:divide-gray-700 dark:border-gray-700 dark:bg-gray-800',
19
+ },
20
+ info: {
21
+ light: 'divide-blue-200 border-blue-200 bg-white',
22
+ dark: 'dark:divide-blue-700 dark:border-blue-700 dark:bg-gray-800',
23
+ },
24
+ failure: {
25
+ light: 'divide-red-200 border-red-200 bg-white',
26
+ dark: 'dark:divide-red-700 dark:border-red-700 dark:bg-gray-800',
27
+ },
28
+ success: {
29
+ light: 'divide-green-200 border-green-200 bg-white',
30
+ dark: 'dark:divide-green-700 dark:border-green-700 dark:bg-gray-800',
31
+ },
32
+ warning: {
33
+ light: 'divide-yellow-200 border-yellow-200 bg-white',
34
+ dark: 'dark:divide-yellow-700 dark:border-yellow-700 dark:bg-gray-800',
35
+ },
36
+ primary: {
37
+ light: 'divide-primary-200 border-primary-200 bg-white',
38
+ dark: 'dark:divide-primary-700 dark:border-primary-700 dark:bg-gray-800',
39
+ },
40
+ },
44
41
  },
45
- ]);
46
- /**
47
- * @see https://flowbite.com/docs/components/dropdowns/
48
- */
49
- class DropdownDividerComponent extends BaseComponent {
50
- constructor() {
51
- super(...arguments);
52
- /**
53
- * Service injected used to generate class
54
- */
55
- this.themeService = inject(DropdownDividerThemeService);
56
- /**
57
- * The parent `DropdownComponent`
58
- */
59
- this.dropdownComponent = inject(DropdownComponent);
60
- //#region properties
61
- /**
62
- * Set the custom style for this dropdown divider
63
- */
64
- this.customStyle = model(inject(FLOWBITE_DROPDOWN_DIVIDER_CUSTOM_STYLE_DEFAULT_VALUE));
65
- }
66
- //#endregion
67
- //#region BaseComponent implementation
68
- fetchClass() {
69
- return this.themeService.getClasses({
70
- customStyle: this.customStyle(),
71
- });
72
- }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownDividerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
74
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.4", type: DropdownDividerComponent, isStandalone: true, selector: "flowbite-dropdown-divider", inputs: { customStyle: { classPropertyName: "customStyle", publicName: "customStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { customStyle: "customStyleChange" }, usesInheritance: true, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
75
- }
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownDividerComponent, decorators: [{
77
- type: Component,
78
- args: [{
79
- standalone: true,
80
- selector: 'flowbite-dropdown-divider',
81
- template: ``,
82
- encapsulation: ViewEncapsulation.None,
83
- changeDetection: ChangeDetectionStrategy.OnPush,
84
- }]
85
- }] });
42
+ });
86
43
 
44
+ const defaultFlowbiteDropdownConfig = {
45
+ baseTheme: flowbiteDropdownTheme,
46
+ color: 'default',
47
+ customTheme: {},
48
+ };
49
+ const FlowbiteDropdownConfigToken = new InjectionToken('FlowbiteDropdownConfigToken');
87
50
  /**
88
- * `InjectionToken` used to import `DropdownHeaderTheme` value
89
- *
90
- * @example
91
- * ```
92
- * var theme = inject(FLOWBITE_DROPDOWN_HEADER_THEME_TOKEN)
93
- * ```
51
+ * Provide the default Dropdown configuration
52
+ * @param config The Dropdown configuration
53
+ * @returns The provider
94
54
  */
95
- const FLOWBITE_DROPDOWN_HEADER_THEME_TOKEN = new InjectionToken('FLOWBITE_DROPDOWN_HEADER_THEME_TOKEN');
96
- class DropdownHeaderThemeService {
97
- constructor() {
98
- this.baseTheme = inject(FLOWBITE_DROPDOWN_HEADER_THEME_TOKEN);
99
- }
100
- getClasses(properties) {
101
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
102
- const output = {
103
- rootClass: twMerge(theme.root.base),
104
- root: twMerge(theme.content.base),
105
- };
106
- return output;
107
- }
108
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownHeaderThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
109
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownHeaderThemeService, providedIn: 'root' }); }
110
- }
111
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownHeaderThemeService, decorators: [{
112
- type: Injectable,
113
- args: [{
114
- providedIn: 'root',
115
- }]
116
- }] });
117
-
118
- const FLOWBITE_DROPDOWN_HEADER_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_DROPDOWN_HEADER_CUSTOM_STYLE_DEFAULT_VALUE');
119
- const dropdownHeaderDefaultValueProvider = makeEnvironmentProviders([
55
+ const provideFlowbiteDropdownConfig = (config) => [
120
56
  {
121
- provide: FLOWBITE_DROPDOWN_HEADER_CUSTOM_STYLE_DEFAULT_VALUE,
122
- useValue: {},
57
+ provide: FlowbiteDropdownConfigToken,
58
+ useValue: { ...defaultFlowbiteDropdownConfig, ...config },
123
59
  },
124
- ]);
60
+ ];
125
61
  /**
126
- * @see https://flowbite.com/docs/components/dropdowns/
62
+ * Inject the Dropdown configuration
63
+ * @see {@link defaultFlowbiteDropdownConfig}
64
+ * @returns The configuration
127
65
  */
128
- class DropdownHeaderComponent extends BaseComponent {
66
+ const injectFlowbiteDropdownConfig = () => inject(FlowbiteDropdownConfigToken, { optional: true }) ?? defaultFlowbiteDropdownConfig;
67
+
68
+ const FlowbiteDropdownStateToken = createStateToken('Flowbite Dropdown');
69
+ const provideFlowbiteDropdownState = createStateProvider(FlowbiteDropdownStateToken);
70
+ const injectFlowbiteDropdownState = createStateInjector(FlowbiteDropdownStateToken);
71
+ const flowbiteDropdownState = createState(FlowbiteDropdownStateToken);
72
+
73
+ class Dropdown {
129
74
  constructor() {
130
- super(...arguments);
75
+ this.config = injectFlowbiteDropdownConfig();
131
76
  /**
132
- * Service injected used to generate class
77
+ * @see {@link injectFlowbiteDropdownConfig}
133
78
  */
134
- this.themeService = inject(DropdownHeaderThemeService);
79
+ this.color = input(this.config.color);
135
80
  /**
136
- * The parent `DropdownComponent`
81
+ * @see {@link injectFlowbiteDropdownConfig}
137
82
  */
138
- this.dropdownComponent = inject(DropdownComponent);
139
- //#region properties
83
+ this.customTheme = input(this.config.customTheme);
84
+ this.theme = computed(() => {
85
+ const mergedTheme = mergeDeep(this.config.baseTheme, this.state.customTheme());
86
+ return {
87
+ host: {
88
+ root: twMerge(mergedTheme.host.base, mergedTheme.host.transition, colorToTheme(mergedTheme.host.color, this.state.color())),
89
+ },
90
+ };
91
+ });
140
92
  /**
141
- * Set the custom style for this dropdown header
93
+ * @internal
142
94
  */
143
- this.customStyle = model(inject(FLOWBITE_DROPDOWN_HEADER_CUSTOM_STYLE_DEFAULT_VALUE));
144
- }
145
- //#endregion
146
- //#region BaseComponent implementation
147
- fetchClass() {
148
- return this.themeService.getClasses({
149
- customStyle: this.customStyle(),
150
- });
95
+ this.state = flowbiteDropdownState(this);
151
96
  }
152
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownHeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.4", type: DropdownHeaderComponent, isStandalone: true, selector: "flowbite-dropdown-header", inputs: { customStyle: { classPropertyName: "customStyle", publicName: "customStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { customStyle: "customStyleChange" }, usesInheritance: true, ngImport: i0, template: `
154
- <div [class]="contentClasses().root">
155
- <ng-content />
156
- </div>
157
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: Dropdown, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
98
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.6", type: Dropdown, isStandalone: true, selector: "\n div[flowbiteDropdown]\n ", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, customTheme: { classPropertyName: "customTheme", publicName: "customTheme", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "theme().host.root" } }, providers: [provideFlowbiteDropdownState()], exportAs: ["flowbiteDropdown"], hostDirectives: [{ directive: i1.NgpMenu }], ngImport: i0 }); }
158
99
  }
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownHeaderComponent, decorators: [{
160
- type: Component,
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: Dropdown, decorators: [{
101
+ type: Directive,
161
102
  args: [{
162
103
  standalone: true,
163
- selector: 'flowbite-dropdown-header',
164
- template: `
165
- <div [class]="contentClasses().root">
166
- <ng-content />
167
- </div>
104
+ selector: `
105
+ div[flowbiteDropdown]
168
106
  `,
169
- encapsulation: ViewEncapsulation.None,
170
- changeDetection: ChangeDetectionStrategy.OnPush,
107
+ exportAs: 'flowbiteDropdown',
108
+ hostDirectives: [
109
+ {
110
+ directive: NgpMenu,
111
+ inputs: [],
112
+ outputs: [],
113
+ },
114
+ ],
115
+ providers: [provideFlowbiteDropdownState()],
116
+ host: {
117
+ '[class]': `theme().host.root`,
118
+ },
171
119
  }]
172
120
  }] });
173
121
 
122
+ const flowbiteDropdownItemTheme = createTheme({
123
+ host: {
124
+ base: 'flex cursor-pointer items-center justify-between px-4 py-2 font-medium',
125
+ transition: '',
126
+ color: {
127
+ default: {
128
+ light: 'data-hover:bg-gray-100',
129
+ dark: 'dark:data-hover:bg-gray-700 dark:data-hover:text-white',
130
+ },
131
+ info: {
132
+ light: 'data-hover:bg-blue-100',
133
+ dark: 'dark:data-hover:bg-blue-700 dark:data-hover:text-white',
134
+ },
135
+ failure: {
136
+ light: 'data-hover:bg-red-100',
137
+ dark: 'dark:data-hover:bg-red-700 dark:data-hover:text-white',
138
+ },
139
+ success: {
140
+ light: 'data-hover:bg-green-100',
141
+ dark: 'dark:data-hover:bg-green-700 dark:data-hover:text-white',
142
+ },
143
+ warning: {
144
+ light: 'data-hover:bg-yellow-100',
145
+ dark: 'dark:data-hover:bg-yellow-700 dark:data-hover:text-white',
146
+ },
147
+ primary: {
148
+ light: 'data-hover:bg-primary-100',
149
+ dark: 'dark:data-hover:bg-primary-700 dark:data-hover:text-white',
150
+ },
151
+ },
152
+ },
153
+ });
154
+
155
+ const defaultFlowbiteDropdownItemConfig = {
156
+ baseTheme: flowbiteDropdownItemTheme,
157
+ customTheme: {},
158
+ };
159
+ const FlowbiteDropdownItemConfigToken = new InjectionToken('FlowbiteDropdownItemConfigToken');
174
160
  /**
175
- * `InjectionToken` used to import `DropdownItemTheme` value
176
- *
177
- * @example
178
- * ```
179
- * var theme = inject(FLOWBITE_DROPDOWN_ITEM_THEME_TOKEN)
180
- * ```
161
+ * Provide the default Dropdown Item configuration
162
+ * @param config The Dropdown Item configuration
163
+ * @returns The provider
181
164
  */
182
- const FLOWBITE_DROPDOWN_ITEM_THEME_TOKEN = new InjectionToken('FLOWBITE_DROPDOWN_ITEM_THEME_TOKEN');
183
- class DropdownItemThemeService {
184
- constructor() {
185
- this.baseTheme = inject(FLOWBITE_DROPDOWN_ITEM_THEME_TOKEN);
186
- }
187
- getClasses(properties) {
188
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
189
- const output = {
190
- rootClass: twMerge(theme.root.base),
191
- };
192
- return output;
193
- }
194
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownItemThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
195
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownItemThemeService, providedIn: 'root' }); }
196
- }
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownItemThemeService, decorators: [{
198
- type: Injectable,
199
- args: [{
200
- providedIn: 'root',
201
- }]
202
- }] });
203
-
204
- const FLOWBITE_DROPDOWN_ITEM_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_DROPDOWN_ITEM_CUSTOM_STYLE_DEFAULT_VALUE');
205
- const dropdownItemDefaultValueProvider = makeEnvironmentProviders([
165
+ const provideFlowbiteDropdownItemConfig = (config) => [
206
166
  {
207
- provide: FLOWBITE_DROPDOWN_ITEM_CUSTOM_STYLE_DEFAULT_VALUE,
208
- useValue: {},
167
+ provide: FlowbiteDropdownItemConfigToken,
168
+ useValue: { ...defaultFlowbiteDropdownItemConfig, ...config },
209
169
  },
210
- ]);
170
+ ];
211
171
  /**
212
- * @see https://flowbite.com/docs/components/dropdowns/
172
+ * Inject the Dropdown Item configuration
173
+ * @see {@link defaultFlowbiteDropdownItemConfig}
174
+ * @returns The configuration
213
175
  */
214
- class DropdownItemComponent extends BaseComponent {
176
+ const injectFlowbiteDropdownItemConfig = () => inject(FlowbiteDropdownItemConfigToken, { optional: true }) ?? defaultFlowbiteDropdownItemConfig;
177
+
178
+ const FlowbiteDropdownItemStateToken = createStateToken('Flowbite Dropdown Item');
179
+ const provideFlowbiteDropdownItemState = createStateProvider(FlowbiteDropdownItemStateToken);
180
+ const injectFlowbiteDropdownItemState = createStateInjector(FlowbiteDropdownItemStateToken);
181
+ const flowbiteDropdownItemState = createState(FlowbiteDropdownItemStateToken);
182
+
183
+ class DropdownItem {
215
184
  constructor() {
216
- super(...arguments);
217
- /**
218
- * Service injected used to generate class
219
- */
220
- this.themeService = inject(DropdownItemThemeService);
185
+ this.config = injectFlowbiteDropdownItemConfig();
186
+ this.dropdownState = injectFlowbiteDropdownState();
221
187
  /**
222
- * The parent `DropdownComponent`
188
+ * @see {@link injectFlowbiteDropdownItemConfig}
223
189
  */
224
- this.dropdownComponent = inject(DropdownComponent);
225
- //#region properties
190
+ this.customTheme = input(this.config.customTheme);
191
+ this.theme = computed(() => {
192
+ const mergedTheme = mergeDeep(this.config.baseTheme, this.state.customTheme());
193
+ return {
194
+ host: {
195
+ root: twMerge(mergedTheme.host.base, mergedTheme.host.transition, colorToTheme(mergedTheme.host.color, this.dropdownState().color())),
196
+ },
197
+ };
198
+ });
226
199
  /**
227
- * Set the custom style for this dropdown item
200
+ * @internal
228
201
  */
229
- this.customStyle = model(inject(FLOWBITE_DROPDOWN_ITEM_CUSTOM_STYLE_DEFAULT_VALUE));
230
- }
231
- //#endregion
232
- //#region BaseComponent implementation
233
- fetchClass() {
234
- return this.themeService.getClasses({
235
- customStyle: this.customStyle(),
236
- });
202
+ this.state = flowbiteDropdownItemState(this);
237
203
  }
238
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
239
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.4", type: DropdownItemComponent, isStandalone: true, selector: "flowbite-dropdown-item", inputs: { customStyle: { classPropertyName: "customStyle", publicName: "customStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { customStyle: "customStyleChange" }, usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
204
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DropdownItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
205
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.6", type: DropdownItem, isStandalone: true, selector: "\n li[flowbiteDropdownItem]\n ", inputs: { customTheme: { classPropertyName: "customTheme", publicName: "customTheme", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "theme().host.root" } }, providers: [provideFlowbiteDropdownItemState()], exportAs: ["flowbiteDropdownItem"], hostDirectives: [{ directive: i1.NgpMenuItem }, { directive: i2.NgpFocus }], ngImport: i0 }); }
240
206
  }
241
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownItemComponent, decorators: [{
242
- type: Component,
207
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DropdownItem, decorators: [{
208
+ type: Directive,
243
209
  args: [{
244
210
  standalone: true,
245
- selector: 'flowbite-dropdown-item',
246
- template: `<ng-content />`,
247
- encapsulation: ViewEncapsulation.None,
248
- changeDetection: ChangeDetectionStrategy.OnPush,
211
+ selector: `
212
+ li[flowbiteDropdownItem]
213
+ `,
214
+ exportAs: 'flowbiteDropdownItem',
215
+ hostDirectives: [
216
+ {
217
+ directive: NgpMenuItem,
218
+ inputs: [],
219
+ outputs: [],
220
+ },
221
+ {
222
+ directive: NgpFocus,
223
+ inputs: [],
224
+ outputs: [],
225
+ },
226
+ ],
227
+ providers: [provideFlowbiteDropdownItemState()],
228
+ host: {
229
+ '[class]': `theme().host.root`,
230
+ },
249
231
  }]
250
232
  }] });
251
233
 
234
+ const flowbiteDropdownContentTheme = createTheme({
235
+ host: {
236
+ base: 'py-2 text-sm',
237
+ transition: '',
238
+ color: {
239
+ default: {
240
+ light: 'text-gray-700',
241
+ dark: 'dark:text-gray-200',
242
+ },
243
+ info: {
244
+ light: 'text-gray-700',
245
+ dark: 'dark:text-gray-200',
246
+ },
247
+ failure: {
248
+ light: 'text-gray-700',
249
+ dark: 'dark:text-gray-200',
250
+ },
251
+ success: {
252
+ light: 'text-gray-700',
253
+ dark: 'dark:text-gray-200',
254
+ },
255
+ warning: {
256
+ light: 'text-gray-700',
257
+ dark: 'dark:text-gray-200',
258
+ },
259
+ primary: {
260
+ light: 'text-gray-700',
261
+ dark: 'dark:text-gray-200',
262
+ },
263
+ },
264
+ },
265
+ });
266
+
267
+ const defaultFlowbiteDropdownContentConfig = {
268
+ baseTheme: flowbiteDropdownContentTheme,
269
+ customTheme: {},
270
+ };
271
+ const FlowbiteDropdownContentConfigToken = new InjectionToken('FlowbiteDropdownContentConfigToken');
252
272
  /**
253
- * `InjectionToken` used to import `DropdownTheme` value
254
- *
255
- * @example
256
- * ```
257
- * var theme = inject(FLOWBITE_DROPDOWN_THEME_TOKEN)
258
- * ```
273
+ * Provide the default DropdownContent configuration
274
+ * @param config The DropdownContent configuration
275
+ * @returns The provider
259
276
  */
260
- const FLOWBITE_DROPDOWN_THEME_TOKEN = new InjectionToken('FLOWBITE_DROPDOWN_THEME_TOKEN');
261
- class DropdownThemeService {
262
- constructor() {
263
- this.baseTheme = inject(FLOWBITE_DROPDOWN_THEME_TOKEN);
264
- }
265
- getClasses(properties) {
266
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
267
- const output = {
268
- rootClass: twMerge(theme.root.base),
269
- dropdownClass: twMerge(theme.dropdown.base),
270
- spanClass: twMerge(theme.span.base),
271
- containerClass: twMerge(theme.container.base, theme.container.isOpen[properties.isOpen], theme.container.placement[properties.placement]),
272
- contentClass: twMerge(theme.content.base),
273
- subContentClass: twMerge(theme.subContent.base),
274
- };
275
- return output;
276
- }
277
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
278
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownThemeService, providedIn: 'root' }); }
279
- }
280
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownThemeService, decorators: [{
281
- type: Injectable,
282
- args: [{
283
- providedIn: 'root',
284
- }]
285
- }] });
286
-
287
- const FLOWBITE_DROPDOWN_LABEL_DEFAULT_VALUE = new InjectionToken('FLOWBITE_DROPDOWN_LABEL_DEFAULT_VALUE');
288
- const FLOWBITE_DROPDOWN_IS_OPEN_DEFAULT_VALUE = new InjectionToken('FLOWBITE_DROPDOWN_IS_OPEN_DEFAULT_VALUE');
289
- const FLOWBITE_DROPDOWN_POSITION_DEFAULT_VALUE = new InjectionToken('FLOWBITE_DROPDOWN_POSITION_DEFAULT_VALUE');
290
- const FLOWBITE_DROPDOWN_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_DROPDOWN_CUSTOM_STYLE_DEFAULT_VALUE');
291
- const dropdownDefaultValueProvider = makeEnvironmentProviders([
277
+ const provideFlowbiteDropdownContentConfig = (config) => [
292
278
  {
293
- provide: FLOWBITE_DROPDOWN_LABEL_DEFAULT_VALUE,
294
- useValue: 'Dropdown',
279
+ provide: FlowbiteDropdownContentConfigToken,
280
+ useValue: { ...defaultFlowbiteDropdownContentConfig, ...config },
295
281
  },
296
- {
297
- provide: FLOWBITE_DROPDOWN_IS_OPEN_DEFAULT_VALUE,
298
- useValue: false,
299
- },
300
- {
301
- provide: FLOWBITE_DROPDOWN_POSITION_DEFAULT_VALUE,
302
- useValue: 'bottom-center',
303
- },
304
- {
305
- provide: FLOWBITE_DROPDOWN_CUSTOM_STYLE_DEFAULT_VALUE,
306
- useValue: {},
307
- },
308
- ]);
282
+ ];
309
283
  /**
310
- * @see https://flowbite.com/docs/components/dropdowns/
284
+ * Inject the DropdownContent configuration
285
+ * @see {@link defaultFlowbiteDropdownContentConfig}
286
+ * @returns The configuration
311
287
  */
312
- class DropdownComponent extends BaseComponent {
288
+ const injectFlowbiteDropdownContentConfig = () => inject(FlowbiteDropdownContentConfigToken, { optional: true }) ??
289
+ defaultFlowbiteDropdownContentConfig;
290
+
291
+ const FlowbiteDropdownContentStateToken = createStateToken('Flowbite DropdownContent');
292
+ const provideFlowbiteDropdownContentState = createStateProvider(FlowbiteDropdownContentStateToken);
293
+ const injectFlowbiteDropdownContentState = createStateInjector(FlowbiteDropdownContentStateToken);
294
+ const flowbiteDropdownContentState = createState(FlowbiteDropdownContentStateToken);
295
+
296
+ class DropdownContent {
313
297
  constructor() {
314
- super(...arguments);
315
- this.dropdown = viewChild.required('dropdown');
316
- this.button = viewChild.required('button');
317
- /**
318
- * Service injected used to generate class
319
- */
320
- this.themeService = inject(DropdownThemeService);
321
- /**
322
- * `IconRegistry` service
323
- */
324
- this.iconRegistry = inject(IconRegistry);
325
- /**
326
- * `DomSanitizer` service
327
- */
328
- this.domSanitizer = inject(DomSanitizer);
329
- /**
330
- * List of `DropdownItemComponent`
331
- */
332
- this.dropdownItemChildren = contentChildren(DropdownItemComponent);
333
- /**
334
- * List of `DropdownHeaderComponent`
335
- */
336
- this.dropdownHeaderChildren = contentChildren(DropdownHeaderComponent);
337
- /**
338
- * List of `DropdownDividerComponent`
339
- */
340
- this.dropdownDividerChildren = contentChildren(DropdownDividerComponent);
341
- //#region properties
342
- /**
343
- * Set the dropdown label
344
- *
345
- * @default Dropdown
346
- */
347
- this.label = model(inject(FLOWBITE_DROPDOWN_LABEL_DEFAULT_VALUE));
348
- /**
349
- * Set if the dropdown is open
350
- *
351
- * @default false
352
- */
353
- this.isOpen = model(inject(FLOWBITE_DROPDOWN_IS_OPEN_DEFAULT_VALUE));
298
+ this.config = injectFlowbiteDropdownContentConfig();
299
+ this.dropdownState = injectFlowbiteDropdownState();
354
300
  /**
355
- * Set the dropdown position
356
- *
357
- * @default bottom-center
301
+ * @see {@link injectFlowbiteDropdownContentConfig}
358
302
  */
359
- this.position = model(inject(FLOWBITE_DROPDOWN_POSITION_DEFAULT_VALUE));
303
+ this.customTheme = input(this.config.customTheme);
304
+ this.theme = computed(() => {
305
+ const mergedTheme = mergeDeep(this.config.baseTheme, this.state.customTheme());
306
+ return {
307
+ host: {
308
+ root: twMerge(mergedTheme.host.base, mergedTheme.host.transition, colorToTheme(mergedTheme.host.color, this.dropdownState().color())),
309
+ },
310
+ };
311
+ });
360
312
  /**
361
- * Set the custom style for this dropdown
313
+ * @internal
362
314
  */
363
- this.customStyle = model(inject(FLOWBITE_DROPDOWN_CUSTOM_STYLE_DEFAULT_VALUE));
364
- }
365
- //#endregion
366
- //#region BaseComponent implementation
367
- fetchClass() {
368
- return this.themeService.getClasses({
369
- label: this.label(),
370
- isOpen: booleanToFlowbiteBoolean(this.isOpen()),
371
- placement: this.position(),
372
- customStyle: this.customStyle(),
373
- });
374
- }
375
- init() {
376
- this.iconRegistry.addRawSvgIconInNamepsace('flowbite-angular', 'chevron-down', this.domSanitizer.bypassSecurityTrustHtml(CHEVRON_DOWN_SVG_ICON));
377
- }
378
- //#endregion
379
- /**
380
- * Toggle dropdown isOpen
381
- */
382
- toggle() {
383
- this.isOpen.set(!this.isOpen());
315
+ this.state = flowbiteDropdownContentState(this);
384
316
  }
385
- // Onclick outside the dropdown, close it
386
- clickout(event) {
387
- if (!this.dropdown().nativeElement.contains(event.target) &&
388
- this.isOpen() &&
389
- !this.button().nativeElement.contains(event.target)) {
390
- this.isOpen.set(false);
391
- }
392
- }
393
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
394
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.4", type: DropdownComponent, isStandalone: true, selector: "flowbite-dropdown", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, customStyle: { classPropertyName: "customStyle", publicName: "customStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { label: "labelChange", isOpen: "isOpenChange", position: "positionChange", customStyle: "customStyleChange" }, host: { listeners: { "document:click": "clickout($event)" } }, queries: [{ propertyName: "dropdownItemChildren", predicate: DropdownItemComponent, isSignal: true }, { propertyName: "dropdownHeaderChildren", predicate: DropdownHeaderComponent, isSignal: true }, { propertyName: "dropdownDividerChildren", predicate: DropdownDividerComponent, isSignal: true }], viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true, isSignal: true }, { propertyName: "button", first: true, predicate: ["button"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
395
- <button
396
- type="button"
397
- [class]="contentClasses().dropdownClass"
398
- (click)="toggle()"
399
- #button>
400
- <span [class]="contentClasses().spanClass">
401
- {{ label() }}
402
- <flowbite-icon
403
- svgIcon="flowbite-angular:chevron-down"
404
- class="ml-2 h-4 w-4" />
405
- </span>
406
- </button>
407
- <div
408
- [class]="contentClasses().containerClass"
409
- #dropdown
410
- [style.display]="isOpen() ? 'block' : 'none'"
411
- [style.minWidth.px]="button.clientWidth">
412
- <div [class]="contentClasses().contentClass">
413
- <ul [class]="contentClasses().subContentClass">
414
- <ng-content />
415
- </ul>
416
- </div>
417
- </div>
418
- `, isInline: true, dependencies: [{ kind: "component", type: IconComponent, selector: "flowbite-icon", inputs: ["svgIcon"], outputs: ["svgIconChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
317
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DropdownContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
318
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.6", type: DropdownContent, isStandalone: true, selector: "\n ul[flowbiteDropdownContent]\n ", inputs: { customTheme: { classPropertyName: "customTheme", publicName: "customTheme", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "theme().host.root" } }, providers: [provideFlowbiteDropdownContentState()], exportAs: ["flowbiteDropdownContent"], ngImport: i0 }); }
419
319
  }
420
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: DropdownComponent, decorators: [{
421
- type: Component,
320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DropdownContent, decorators: [{
321
+ type: Directive,
422
322
  args: [{
423
323
  standalone: true,
424
- imports: [IconComponent],
425
- selector: 'flowbite-dropdown',
426
- template: `
427
- <button
428
- type="button"
429
- [class]="contentClasses().dropdownClass"
430
- (click)="toggle()"
431
- #button>
432
- <span [class]="contentClasses().spanClass">
433
- {{ label() }}
434
- <flowbite-icon
435
- svgIcon="flowbite-angular:chevron-down"
436
- class="ml-2 h-4 w-4" />
437
- </span>
438
- </button>
439
- <div
440
- [class]="contentClasses().containerClass"
441
- #dropdown
442
- [style.display]="isOpen() ? 'block' : 'none'"
443
- [style.minWidth.px]="button.clientWidth">
444
- <div [class]="contentClasses().contentClass">
445
- <ul [class]="contentClasses().subContentClass">
446
- <ng-content />
447
- </ul>
448
- </div>
449
- </div>
324
+ selector: `
325
+ ul[flowbiteDropdownContent]
450
326
  `,
451
- host: {
452
- '(document:click)': 'clickout($event)',
453
- },
454
- encapsulation: ViewEncapsulation.None,
455
- changeDetection: ChangeDetectionStrategy.OnPush,
327
+ exportAs: 'flowbiteDropdownContent',
328
+ hostDirectives: [],
329
+ providers: [provideFlowbiteDropdownContentState()],
330
+ host: { '[class]': `theme().host.root` },
456
331
  }]
457
332
  }] });
458
333
 
459
- /**
460
- * Default theme for `DropdownComponent`
461
- */
462
- const dropdownTheme = createTheme({
463
- root: {
464
- base: 'relative inline w-fit',
465
- },
466
- dropdown: {
467
- base: 'text-white bg-blue-700 border border-transparent hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 disabled:hover:bg-blue-700 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800 dark:disabled:hover:bg-blue-600 group flex h-min items-center justify-center p-0.5 text-center font-medium focus:z-10 rounded-lg',
468
- },
469
- span: {
470
- base: 'flex items-center rounded-md text-sm px-4 py-2',
471
- },
472
- container: {
473
- base: 'z-10 bg-white divide-y divide-gray-100 rounded-lg shadow dark:bg-gray-700 min-w-fit absolute',
474
- isOpen: {
475
- enabled: 'block',
476
- disabled: 'hidden',
477
- },
478
- placement: {
479
- 'top-center': 'bottom-full mb-2.5 left-1/2 -translate-x-1/2',
480
- 'bottom-center': 'top-full mt-2.5 left-1/2 -translate-x-1/2',
481
- 'left-center': 'left-full ml-2.5 top-1/2 -translate-y-1/2',
482
- 'right-center': 'right-full mr-2.5 top-1/2 -translate-y-1/2',
483
- },
484
- },
485
- content: {
486
- base: 'py-1 text-sm text-gray-700 dark:text-gray-200 shadow-md',
487
- },
488
- subContent: {
489
- base: 'py-1',
490
- },
491
- });
492
-
493
- /**
494
- * Default theme value for `DropdownItemComponent`
495
- */
496
- const dropdownItemTheme = {
497
- root: {
498
- base: 'flex items-center justify-start py-2 px-4 text-sm text-gray-700 cursor-pointer hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-600 dark:hover:text-white',
499
- },
500
- };
501
-
502
- /**
503
- * Default theme for `DropdownDividerComponent`
504
- */
505
- const dropdownDividerTheme = createTheme({
506
- root: {
507
- base: 'block my-1 h-px bg-gray-100 dark:bg-gray-600',
508
- },
509
- });
510
-
511
- /**
512
- * Default theme for `DropdownHeaderComponent`
513
- */
514
- const dropdownHeaderTheme = createTheme({
515
- root: {
516
- base: '',
517
- },
518
- content: {
519
- base: 'block py-2 px-4 text-sm text-gray-700 dark:text-gray-200',
520
- },
521
- });
334
+ /* Dropdown */
522
335
 
523
336
  /**
524
337
  * Generated bundle index. Do not edit.
525
338
  */
526
339
 
527
- export { DropdownComponent, DropdownDividerComponent, DropdownDividerThemeService, DropdownHeaderComponent, DropdownHeaderThemeService, DropdownItemComponent, DropdownItemThemeService, DropdownThemeService, FLOWBITE_DROPDOWN_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_DROPDOWN_DIVIDER_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_DROPDOWN_DIVIDER_THEME_TOKEN, FLOWBITE_DROPDOWN_HEADER_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_DROPDOWN_HEADER_THEME_TOKEN, FLOWBITE_DROPDOWN_IS_OPEN_DEFAULT_VALUE, FLOWBITE_DROPDOWN_ITEM_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_DROPDOWN_ITEM_THEME_TOKEN, FLOWBITE_DROPDOWN_LABEL_DEFAULT_VALUE, FLOWBITE_DROPDOWN_POSITION_DEFAULT_VALUE, FLOWBITE_DROPDOWN_THEME_TOKEN, dropdownDefaultValueProvider, dropdownDividerDefaultValueProvider, dropdownDividerTheme, dropdownHeaderDefaultValueProvider, dropdownHeaderTheme, dropdownItemDefaultValueProvider, dropdownItemTheme, dropdownTheme };
340
+ export { Dropdown, DropdownContent, DropdownItem, FlowbiteDropdownConfigToken, FlowbiteDropdownContentConfigToken, FlowbiteDropdownContentStateToken, FlowbiteDropdownItemConfigToken, FlowbiteDropdownItemStateToken, FlowbiteDropdownStateToken, defaultFlowbiteDropdownConfig, defaultFlowbiteDropdownContentConfig, defaultFlowbiteDropdownItemConfig, flowbiteDropdownContentState, flowbiteDropdownContentTheme, flowbiteDropdownItemState, flowbiteDropdownItemTheme, flowbiteDropdownState, flowbiteDropdownTheme, injectFlowbiteDropdownConfig, injectFlowbiteDropdownContentConfig, injectFlowbiteDropdownContentState, injectFlowbiteDropdownItemConfig, injectFlowbiteDropdownItemState, injectFlowbiteDropdownState, provideFlowbiteDropdownConfig, provideFlowbiteDropdownContentConfig, provideFlowbiteDropdownContentState, provideFlowbiteDropdownItemConfig, provideFlowbiteDropdownItemState, provideFlowbiteDropdownState };
528
341
  //# sourceMappingURL=flowbite-angular-dropdown.mjs.map