flowbite-angular 1.2.0 → 20.0.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 (308) 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 +340 -479
  15. package/fesm2022/flowbite-angular-accordion.mjs.map +1 -1
  16. package/fesm2022/flowbite-angular-alert.mjs +309 -240
  17. package/fesm2022/flowbite-angular-alert.mjs.map +1 -1
  18. package/fesm2022/flowbite-angular-badge.mjs +334 -136
  19. package/fesm2022/flowbite-angular-badge.mjs.map +1 -1
  20. package/fesm2022/flowbite-angular-breadcrumb.mjs +263 -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 +190 -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 +273 -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 +338 -486
  83. package/fesm2022/flowbite-angular-modal.mjs.map +1 -1
  84. package/fesm2022/flowbite-angular-navbar.mjs +601 -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 +403 -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/{alert → form}/README.md +2 -2
  99. package/form/index.d.ts +684 -0
  100. package/{breadcrumb → icon/brand}/README.md +2 -2
  101. package/icon/brand/index.d.ts +66 -0
  102. package/icon/index.d.ts +322 -5
  103. package/icon/outline/README.md +4 -0
  104. package/icon/outline/arrows/index.d.ts +46 -0
  105. package/icon/outline/e-commerce/index.d.ts +18 -0
  106. package/icon/outline/emoji/index.d.ts +8 -0
  107. package/icon/outline/files-folders/index.d.ts +37 -0
  108. package/icon/outline/general/index.d.ts +140 -0
  109. package/icon/outline/index.d.ts +2 -0
  110. package/icon/outline/media/index.d.ts +20 -0
  111. package/icon/outline/text/index.d.ts +15 -0
  112. package/icon/outline/user/index.d.ts +12 -0
  113. package/icon/outline/weather/index.d.ts +4 -0
  114. package/icon/solid/README.md +4 -0
  115. package/icon/solid/arrows/index.d.ts +12 -0
  116. package/icon/solid/brands/index.d.ts +28 -0
  117. package/icon/solid/e-commerce/index.d.ts +16 -0
  118. package/icon/solid/emoji/index.d.ts +8 -0
  119. package/icon/solid/files-folder/index.d.ts +37 -0
  120. package/icon/solid/general/index.d.ts +118 -0
  121. package/icon/solid/index.d.ts +2 -0
  122. package/icon/solid/media/index.d.ts +19 -0
  123. package/icon/solid/text/index.d.ts +6 -0
  124. package/icon/solid/user/index.d.ts +12 -0
  125. package/icon/solid/weather/index.d.ts +4 -0
  126. package/index.d.ts +126 -3
  127. package/indicator/index.d.ts +242 -4
  128. package/modal/index.d.ts +458 -16
  129. package/navbar/index.d.ts +1467 -24
  130. package/package.json +137 -42
  131. package/pagination/README.md +4 -0
  132. package/pagination/index.d.ts +1135 -0
  133. package/sidebar/index.d.ts +880 -24
  134. package/styles/flowbite-angular.css +8 -0
  135. package/styles/part/animation.css +0 -0
  136. package/styles/part/color.css +125 -0
  137. package/styles/part/font-size.css +67 -0
  138. package/styles/part/rounded.css +11 -0
  139. package/styles/part/shadow.css +9 -0
  140. package/styles/part/spacing.css +38 -0
  141. package/{badge → tab}/README.md +2 -2
  142. package/tab/index.d.ts +791 -0
  143. package/theme-toggle/README.md +4 -0
  144. package/theme-toggle/index.d.ts +342 -0
  145. package/{button → tooltip}/README.md +2 -2
  146. package/tooltip/index.d.ts +158 -0
  147. package/accordion/accordion-content.component.d.ts +0 -69
  148. package/accordion/accordion-content.theme.d.ts +0 -28
  149. package/accordion/accordion-content.theme.service.d.ts +0 -19
  150. package/accordion/accordion-panel.component.d.ts +0 -67
  151. package/accordion/accordion-panel.theme.d.ts +0 -23
  152. package/accordion/accordion-panel.theme.service.d.ts +0 -20
  153. package/accordion/accordion-title.component.d.ts +0 -106
  154. package/accordion/accordion-title.theme.d.ts +0 -35
  155. package/accordion/accordion-title.theme.service.d.ts +0 -19
  156. package/accordion/accordion.component.d.ts +0 -61
  157. package/accordion/accordion.theme.d.ts +0 -29
  158. package/accordion/accordion.theme.service.d.ts +0 -19
  159. package/alert/alert.component.d.ts +0 -150
  160. package/alert/alert.theme.d.ts +0 -39
  161. package/alert/alert.theme.service.d.ts +0 -19
  162. package/badge/badge.component.d.ts +0 -122
  163. package/badge/badge.theme.d.ts +0 -45
  164. package/badge/badge.theme.service.d.ts +0 -19
  165. package/base-component.directive.d.ts +0 -51
  166. package/breadcrumb/breadcrumb-item.component.d.ts +0 -84
  167. package/breadcrumb/breadcrumb-item.theme.d.ts +0 -33
  168. package/breadcrumb/breadcrumb-item.theme.service.d.ts +0 -19
  169. package/breadcrumb/breadcrumb.component.d.ts +0 -43
  170. package/breadcrumb/breadcrumb.theme.d.ts +0 -29
  171. package/breadcrumb/breadcrumb.theme.service.d.ts +0 -19
  172. package/button/button.component.d.ts +0 -250
  173. package/button/button.theme.d.ts +0 -79
  174. package/button/button.theme.service.d.ts +0 -19
  175. package/core/flowbite.theme.init.d.ts +0 -9
  176. package/core/index.d.ts +0 -1
  177. package/dark-theme-toggle/README.md +0 -4
  178. package/dark-theme-toggle/dark-theme-toggle.component.d.ts +0 -51
  179. package/dark-theme-toggle/dark-theme-toggle.theme.d.ts +0 -23
  180. package/dark-theme-toggle/dark-theme-toggle.theme.service.d.ts +0 -19
  181. package/dark-theme-toggle/index.d.ts +0 -3
  182. package/dropdown/README.md +0 -4
  183. package/dropdown/dropdown-divider.component.d.ts +0 -36
  184. package/dropdown/dropdown-divider.theme.d.ts +0 -23
  185. package/dropdown/dropdown-divider.theme.service.d.ts +0 -19
  186. package/dropdown/dropdown-header.component.d.ts +0 -42
  187. package/dropdown/dropdown-header.theme.d.ts +0 -28
  188. package/dropdown/dropdown-header.theme.service.d.ts +0 -19
  189. package/dropdown/dropdown-item.component.d.ts +0 -36
  190. package/dropdown/dropdown-item.theme.d.ts +0 -23
  191. package/dropdown/dropdown-item.theme.service.d.ts +0 -19
  192. package/dropdown/dropdown.component.d.ts +0 -136
  193. package/dropdown/dropdown.theme.d.ts +0 -56
  194. package/dropdown/dropdown.theme.service.d.ts +0 -19
  195. package/fesm2022/flowbite-angular-core.mjs +0 -322
  196. package/fesm2022/flowbite-angular-core.mjs.map +0 -1
  197. package/fesm2022/flowbite-angular-dark-theme-toggle.mjs +0 -138
  198. package/fesm2022/flowbite-angular-dark-theme-toggle.mjs.map +0 -1
  199. package/fesm2022/flowbite-angular-router-link-active.mjs +0 -68
  200. package/fesm2022/flowbite-angular-router-link-active.mjs.map +0 -1
  201. package/fesm2022/flowbite-angular-router-link.mjs +0 -73
  202. package/fesm2022/flowbite-angular-router-link.mjs.map +0 -1
  203. package/fesm2022/flowbite-angular-sanitize-html.mjs +0 -39
  204. package/fesm2022/flowbite-angular-sanitize-html.mjs.map +0 -1
  205. package/fesm2022/flowbite-angular-scroll-top.mjs +0 -192
  206. package/fesm2022/flowbite-angular-scroll-top.mjs.map +0 -1
  207. package/fesm2022/flowbite-angular-theme.mjs +0 -78
  208. package/fesm2022/flowbite-angular-theme.mjs.map +0 -1
  209. package/fesm2022/flowbite-angular-utils.mjs +0 -210
  210. package/fesm2022/flowbite-angular-utils.mjs.map +0 -1
  211. package/flowbite.theme.service.d.ts +0 -12
  212. package/icon/icon-registry.d.ts +0 -45
  213. package/icon/icon.component.d.ts +0 -22
  214. package/icon/trusted-types.d.ts +0 -15
  215. package/indicator/indicators.component.d.ts +0 -224
  216. package/indicator/indicators.theme.d.ts +0 -59
  217. package/indicator/indicators.theme.service.d.ts +0 -19
  218. package/modal/modal-body.component.d.ts +0 -36
  219. package/modal/modal-body.theme.d.ts +0 -23
  220. package/modal/modal-body.theme.service.d.ts +0 -19
  221. package/modal/modal-footer.component.d.ts +0 -36
  222. package/modal/modal-footer.theme.d.ts +0 -23
  223. package/modal/modal-footer.theme.service.d.ts +0 -19
  224. package/modal/modal-header.component.d.ts +0 -60
  225. package/modal/modal-header.theme.d.ts +0 -32
  226. package/modal/modal-header.theme.service.d.ts +0 -19
  227. package/modal/modal.component.d.ts +0 -146
  228. package/modal/modal.theme.d.ts +0 -35
  229. package/modal/modal.theme.service.d.ts +0 -19
  230. package/navbar/navbar-brand.component.d.ts +0 -36
  231. package/navbar/navbar-brand.theme.d.ts +0 -23
  232. package/navbar/navbar-brand.theme.service.d.ts +0 -19
  233. package/navbar/navbar-content.component.d.ts +0 -50
  234. package/navbar/navbar-content.theme.d.ts +0 -28
  235. package/navbar/navbar-content.theme.service.d.ts +0 -19
  236. package/navbar/navbar-icon-button.component.d.ts +0 -59
  237. package/navbar/navbar-icon-button.theme.d.ts +0 -26
  238. package/navbar/navbar-icon-button.theme.service.d.ts +0 -19
  239. package/navbar/navbar-item.component.d.ts +0 -67
  240. package/navbar/navbar-item.theme.d.ts +0 -26
  241. package/navbar/navbar-item.theme.service.d.ts +0 -19
  242. package/navbar/navbar-toggle.component.d.ts +0 -51
  243. package/navbar/navbar-toggle.theme.d.ts +0 -23
  244. package/navbar/navbar-toggle.theme.service.d.ts +0 -19
  245. package/navbar/navbar.component.d.ts +0 -121
  246. package/navbar/navbar.theme.d.ts +0 -21
  247. package/navbar/navbar.theme.service.d.ts +0 -19
  248. package/router-link/README.md +0 -4
  249. package/router-link/flowbite-router-link.directive.d.ts +0 -28
  250. package/router-link/index.d.ts +0 -1
  251. package/router-link-active/README.md +0 -4
  252. package/router-link-active/flowbite-router-link-active.directive.d.ts +0 -37
  253. package/router-link-active/index.d.ts +0 -1
  254. package/sanitize-html/README.md +0 -4
  255. package/sanitize-html/index.d.ts +0 -1
  256. package/sanitize-html/sanitize-html.pipe.d.ts +0 -20
  257. package/scroll-top/README.md +0 -4
  258. package/scroll-top/index.d.ts +0 -4
  259. package/scroll-top/scroll-top.component.d.ts +0 -114
  260. package/scroll-top/scroll-top.theme.d.ts +0 -39
  261. package/scroll-top/scroll-top.theme.service.d.ts +0 -19
  262. package/sidebar/sidebar-item-group.component.d.ts +0 -100
  263. package/sidebar/sidebar-item-group.theme.d.ts +0 -31
  264. package/sidebar/sidebar-item-group.theme.service.d.ts +0 -19
  265. package/sidebar/sidebar-item.component.d.ts +0 -101
  266. package/sidebar/sidebar-item.theme.d.ts +0 -33
  267. package/sidebar/sidebar-item.theme.service.d.ts +0 -19
  268. package/sidebar/sidebar-menu.component.d.ts +0 -93
  269. package/sidebar/sidebar-menu.theme.d.ts +0 -30
  270. package/sidebar/sidebar-menu.theme.service.d.ts +0 -19
  271. package/sidebar/sidebar-page-content.component.d.ts +0 -46
  272. package/sidebar/sidebar-page-content.theme.d.ts +0 -27
  273. package/sidebar/sidebar-page-content.theme.service.d.ts +0 -19
  274. package/sidebar/sidebar-toggle.component.d.ts +0 -95
  275. package/sidebar/sidebar-toggle.theme.d.ts +0 -34
  276. package/sidebar/sidebar-toggle.theme.service.d.ts +0 -19
  277. package/sidebar/sidebar.component.d.ts +0 -84
  278. package/sidebar/sidebar.theme.d.ts +0 -22
  279. package/sidebar/sidebar.theme.service.d.ts +0 -19
  280. package/tailwind.config.js +0 -303
  281. package/theme/README.md +0 -4
  282. package/theme/flowbite-theme.directive.d.ts +0 -36
  283. package/theme/index.d.ts +0 -1
  284. package/type-definitions/colors/flowbite.colors.d.ts +0 -19
  285. package/type-definitions/colors/flowbite.gradient-colors.d.ts +0 -11
  286. package/type-definitions/colors/flowbite.gradient-duo-tone-colors.d.ts +0 -12
  287. package/type-definitions/colors/index.d.ts +0 -3
  288. package/type-definitions/flowbite.boolean.d.ts +0 -14
  289. package/type-definitions/flowbite.class.d.ts +0 -6
  290. package/type-definitions/flowbite.combination.d.ts +0 -8
  291. package/type-definitions/flowbite.content-positions.d.ts +0 -6
  292. package/type-definitions/flowbite.deep-partial.d.ts +0 -6
  293. package/type-definitions/flowbite.heading-levels.d.ts +0 -4
  294. package/type-definitions/flowbite.positions.d.ts +0 -14
  295. package/type-definitions/flowbite.router-link-parameter.d.ts +0 -5
  296. package/type-definitions/flowbite.sizes.d.ts +0 -10
  297. package/type-definitions/flowbite.themes.d.ts +0 -4
  298. package/type-definitions/index.d.ts +0 -12
  299. package/utils/README.md +0 -4
  300. package/utils/icon.list.d.ts +0 -7
  301. package/utils/id.generator.d.ts +0 -59
  302. package/utils/index.d.ts +0 -8
  303. package/utils/theme/clone-deep.d.ts +0 -7
  304. package/utils/theme/create-class.d.ts +0 -7
  305. package/utils/theme/create-theme.d.ts +0 -7
  306. package/utils/theme/is-object.d.ts +0 -7
  307. package/utils/theme/merge-theme.d.ts +0 -8
  308. package/utils/theme/to-string.d.ts +0 -7
@@ -1,527 +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);
298
+ this.config = injectFlowbiteDropdownContentConfig();
299
+ this.dropdownState = injectFlowbiteDropdownState();
333
300
  /**
334
- * List of `DropdownHeaderComponent`
301
+ * @see {@link injectFlowbiteDropdownContentConfig}
335
302
  */
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));
354
- /**
355
- * Set the dropdown position
356
- *
357
- * @default bottom-center
358
- */
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));
315
+ this.state = flowbiteDropdownContentState(this);
364
316
  }
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());
384
- }
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
- imports: [IconComponent],
424
- selector: 'flowbite-dropdown',
425
- template: `
426
- <button
427
- type="button"
428
- [class]="contentClasses().dropdownClass"
429
- (click)="toggle()"
430
- #button>
431
- <span [class]="contentClasses().spanClass">
432
- {{ label() }}
433
- <flowbite-icon
434
- svgIcon="flowbite-angular:chevron-down"
435
- class="ml-2 h-4 w-4" />
436
- </span>
437
- </button>
438
- <div
439
- [class]="contentClasses().containerClass"
440
- #dropdown
441
- [style.display]="isOpen() ? 'block' : 'none'"
442
- [style.minWidth.px]="button.clientWidth">
443
- <div [class]="contentClasses().contentClass">
444
- <ul [class]="contentClasses().subContentClass">
445
- <ng-content />
446
- </ul>
447
- </div>
448
- </div>
323
+ standalone: true,
324
+ selector: `
325
+ ul[flowbiteDropdownContent]
449
326
  `,
450
- host: {
451
- '(document:click)': 'clickout($event)',
452
- },
453
- encapsulation: ViewEncapsulation.None,
454
- changeDetection: ChangeDetectionStrategy.OnPush,
327
+ exportAs: 'flowbiteDropdownContent',
328
+ hostDirectives: [],
329
+ providers: [provideFlowbiteDropdownContentState()],
330
+ host: { '[class]': `theme().host.root` },
455
331
  }]
456
332
  }] });
457
333
 
458
- /**
459
- * Default theme for `DropdownComponent`
460
- */
461
- const dropdownTheme = createTheme({
462
- root: {
463
- base: 'relative inline w-fit',
464
- },
465
- dropdown: {
466
- 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',
467
- },
468
- span: {
469
- base: 'flex items-center rounded-md text-sm px-4 py-2',
470
- },
471
- container: {
472
- base: 'z-10 bg-white divide-y divide-gray-100 rounded-lg shadow dark:bg-gray-700 min-w-fit absolute',
473
- isOpen: {
474
- enabled: 'block',
475
- disabled: 'hidden',
476
- },
477
- placement: {
478
- 'top-center': 'bottom-full mb-2.5 left-1/2 -translate-x-1/2',
479
- 'bottom-center': 'top-full mt-2.5 left-1/2 -translate-x-1/2',
480
- 'left-center': 'left-full ml-2.5 top-1/2 -translate-y-1/2',
481
- 'right-center': 'right-full mr-2.5 top-1/2 -translate-y-1/2',
482
- },
483
- },
484
- content: {
485
- base: 'py-1 text-sm text-gray-700 dark:text-gray-200 shadow-md',
486
- },
487
- subContent: {
488
- base: 'py-1',
489
- },
490
- });
491
-
492
- /**
493
- * Default theme value for `DropdownItemComponent`
494
- */
495
- const dropdownItemTheme = {
496
- root: {
497
- 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',
498
- },
499
- };
500
-
501
- /**
502
- * Default theme for `DropdownDividerComponent`
503
- */
504
- const dropdownDividerTheme = createTheme({
505
- root: {
506
- base: 'block my-1 h-px bg-gray-100 dark:bg-gray-600',
507
- },
508
- });
509
-
510
- /**
511
- * Default theme for `DropdownHeaderComponent`
512
- */
513
- const dropdownHeaderTheme = createTheme({
514
- root: {
515
- base: '',
516
- },
517
- content: {
518
- base: 'block py-2 px-4 text-sm text-gray-700 dark:text-gray-200',
519
- },
520
- });
334
+ /* Dropdown */
521
335
 
522
336
  /**
523
337
  * Generated bundle index. Do not edit.
524
338
  */
525
339
 
526
- 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 };
527
341
  //# sourceMappingURL=flowbite-angular-dropdown.mjs.map