flowbite-angular 1.3.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 +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/{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 -196
  163. package/badge/badge.theme.d.ts +0 -53
  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 -139
  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 -193
  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,893 +1,517 @@
1
- import { mergeTheme, CHEVRON_DOWN_SVG_ICON, createTheme, BARS_SVG_ICON } 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, contentChildren, untracked, contentChild } from '@angular/core';
3
+ import { InjectionToken, inject, input, booleanAttribute, computed, Directive, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
4
+ import { createStateToken, createStateProvider, createStateInjector, createState } from 'ng-primitives/state';
4
5
  import { twMerge } from 'tailwind-merge';
5
- import { BaseComponent, booleanToFlowbiteBoolean } from 'flowbite-angular';
6
- import { BadgeComponent } from 'flowbite-angular/badge';
7
- import { FlowbiteRouterLinkDirective } from 'flowbite-angular/router-link';
8
- import { FlowbiteRouterLinkActiveDirective } from 'flowbite-angular/router-link-active';
9
- import { SanitizeHtmlPipe } from 'flowbite-angular/sanitize-html';
10
- import { IconRegistry, IconComponent } from 'flowbite-angular/icon';
11
- import { DomSanitizer } from '@angular/platform-browser';
6
+ import * as i1 from 'flowbite-angular/button';
7
+ import { BaseButton } from 'flowbite-angular/button';
8
+ import { barsFromLeft } from 'flowbite-angular/icon/outline/general';
9
+ import { provideIcons } from '@ng-icons/core';
10
+ import * as i2 from 'ng-primitives/button';
11
+ import { NgpButton } from 'ng-primitives/button';
12
+ import * as i3 from 'ng-primitives/interactions';
13
+ import { NgpFocus } from 'ng-primitives/interactions';
12
14
 
13
- /**
14
- * `InjectionToken` used to import `SidebarItemGroupTheme` value
15
- *
16
- * @example
17
- * ```
18
- * var theme = inject(FLOWBITE_SIDEBAR_ITEM_GROUP_THEME_TOKEN)
19
- * ```
20
- */
21
- const FLOWBITE_SIDEBAR_ITEM_GROUP_THEME_TOKEN = new InjectionToken('FLOWBITE_SIDEBAR_ITEM_GROUP_THEME_TOKEN');
22
- class SidebarItemGroupThemeService {
23
- constructor() {
24
- this.baseTheme = inject(FLOWBITE_SIDEBAR_ITEM_GROUP_THEME_TOKEN);
25
- }
26
- getClasses(properties) {
27
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
28
- const output = {
29
- rootClass: twMerge(theme.root.base),
30
- spanClass: twMerge(theme.spanText.base, theme.spanText.color[properties.color]),
31
- };
32
- return output;
33
- }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemGroupThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
35
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemGroupThemeService, providedIn: 'root' }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemGroupThemeService, decorators: [{
38
- type: Injectable,
39
- args: [{
40
- providedIn: 'root',
41
- }]
42
- }] });
15
+ const flowbiteSidebarTheme = createTheme({
16
+ host: {
17
+ base: 'fixed inset-0 top-0 left-0 z-40 h-screen lg:w-64',
18
+ transition: '',
19
+ open: {
20
+ on: 'w-full backdrop-blur-sm',
21
+ off: 'w-0',
22
+ },
23
+ },
24
+ });
43
25
 
26
+ const defaultFlowbiteSidebarConfig = {
27
+ baseTheme: flowbiteSidebarTheme,
28
+ open: false,
29
+ color: 'default',
30
+ customTheme: {},
31
+ };
32
+ const FlowbiteSidebarConfigToken = new InjectionToken('FlowbiteSidebarConfigToken');
44
33
  /**
45
- * `InjectionToken` used to import `SidebarItemTheme` value
46
- *
47
- * @example
48
- * ```
49
- * var theme = inject(FLOWBITE_SIDEBAR_ITEM_THEME_TOKEN)
50
- * ```
34
+ * Provide the default Sidebar configuration
35
+ * @param config The Sidebar configuration
36
+ * @returns The provider
51
37
  */
52
- const FLOWBITE_SIDEBAR_ITEM_THEME_TOKEN = new InjectionToken('FLOWBITE_SIDEBAR_ITEM_THEME_TOKEN');
53
- class SidebarItemThemeService {
54
- constructor() {
55
- this.baseTheme = inject(FLOWBITE_SIDEBAR_ITEM_THEME_TOKEN);
56
- }
57
- getClasses(properties) {
58
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
59
- const output = {
60
- rootClass: twMerge(theme.root.base, theme.root.color[properties.color]),
61
- sidebarIconClass: twMerge(theme.icon.base),
62
- };
63
- return output;
64
- }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemThemeService, providedIn: 'root' }); }
67
- }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemThemeService, decorators: [{
69
- type: Injectable,
70
- args: [{
71
- providedIn: 'root',
72
- }]
73
- }] });
74
-
75
- const FLOWBITE_SIDEBAR_ITEM_ICON_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_ITEM_ICON_DEFAULT_VALUE');
76
- const FLOWBITE_SIDEBAR_ITEM_LABEL_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_ITEM_LABEL_DEFAULT_VALUE');
77
- const FLOWBITE_SIDEBAR_ITEM_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_ITEM_CUSTOM_STYLE_DEFAULT_VALUE');
78
- const sidebarItemDefaultValueProvider = makeEnvironmentProviders([
38
+ const provideFlowbiteSidebarConfig = (config) => [
79
39
  {
80
- provide: FLOWBITE_SIDEBAR_ITEM_ICON_DEFAULT_VALUE,
81
- useValue: undefined,
40
+ provide: FlowbiteSidebarConfigToken,
41
+ useValue: { ...defaultFlowbiteSidebarConfig, ...config },
82
42
  },
83
- {
84
- provide: FLOWBITE_SIDEBAR_ITEM_LABEL_DEFAULT_VALUE,
85
- useValue: undefined,
86
- },
87
- {
88
- provide: FLOWBITE_SIDEBAR_ITEM_CUSTOM_STYLE_DEFAULT_VALUE,
89
- useValue: {},
90
- },
91
- ]);
43
+ ];
92
44
  /**
93
- * @see https://flowbite.com/docs/components/sidebar/
45
+ * Inject the Sidebar configuration
46
+ * @see {@link defaultFlowbiteSidebarConfig}
47
+ * @returns The configuration
94
48
  */
95
- class SidebarItemComponent extends BaseComponent {
49
+ const injectFlowbiteSidebarConfig = () => inject(FlowbiteSidebarConfigToken, { optional: true }) ?? defaultFlowbiteSidebarConfig;
50
+
51
+ const FlowbiteSidebarStateToken = createStateToken('Flowbite Sidebar');
52
+ const provideFlowbiteSidebarState = createStateProvider(FlowbiteSidebarStateToken);
53
+ const injectFlowbiteSidebarState = createStateInjector(FlowbiteSidebarStateToken);
54
+ const flowbiteSidebarState = createState(FlowbiteSidebarStateToken);
55
+
56
+ class Sidebar {
96
57
  constructor() {
97
- super(...arguments);
98
- /**
99
- * Optional `FlowbiteRouterLinkDirective` injected
100
- */
101
- this.flowbiteRouterLink = inject(FlowbiteRouterLinkDirective, { optional: true });
102
- /**
103
- * Optional `FlowbiteRouterLinkActiveDirective` injected
104
- */
105
- this.flowbiteRouterLinkActive = inject(FlowbiteRouterLinkActiveDirective, {
106
- optional: true,
107
- });
108
- /**
109
- * Service injected used to generate class
110
- */
111
- this.themeService = inject(SidebarItemThemeService);
112
- /**
113
- * The optional parent `SidebarItemGroupComponent`
114
- */
115
- this.sidebarItemGroupComponent = inject(SidebarItemGroupComponent, { optional: true });
58
+ this.config = injectFlowbiteSidebarConfig();
116
59
  /**
117
- * The optional parent `SidebarMenuComponent`
60
+ * @see {@link injectFlowbiteSidebarConfig}
118
61
  */
119
- this.sidebarMenuComponent = inject(SidebarMenuComponent, { optional: true });
120
- //#region properties
62
+ this.open = input(this.config.open, { transform: booleanAttribute });
121
63
  /**
122
- * Set the sidebar item icon
123
- *
124
- * @default undefined
64
+ * @see {@link injectFlowbiteSidebarConfig}
125
65
  */
126
- this.icon = model(inject(FLOWBITE_SIDEBAR_ITEM_ICON_DEFAULT_VALUE));
66
+ this.color = input(this.config.color);
127
67
  /**
128
- * Set the sidebar item color
129
- *
130
- * @default `SidebarItemGroupComponent`'s color
131
- * @default `SidebarMenuComponent`'s color
68
+ * @see {@link injectFlowbiteSidebarConfig}
132
69
  */
133
- this.color = model((this.sidebarItemGroupComponent ?? this.sidebarMenuComponent).color());
134
- /**
135
- * Set the sidebar item label
136
- *
137
- * @default undefined
138
- */
139
- this.label = model(inject(FLOWBITE_SIDEBAR_ITEM_LABEL_DEFAULT_VALUE));
70
+ this.customTheme = input(this.config.customTheme);
71
+ this.theme = computed(() => {
72
+ const mergedTheme = mergeDeep(this.config.baseTheme, this.state.customTheme());
73
+ return {
74
+ host: {
75
+ root: twMerge(mergedTheme.host.base, mergedTheme.host.transition, mergedTheme.host.open[this.state.open() ? 'on' : 'off']),
76
+ },
77
+ };
78
+ });
140
79
  /**
141
- * Set the custom style for this sidebar item
80
+ * @internal
142
81
  */
143
- this.customStyle = model(inject(FLOWBITE_SIDEBAR_ITEM_CUSTOM_STYLE_DEFAULT_VALUE));
144
- }
145
- //#endregion
146
- //#region BaseComponent implementation
147
- fetchClass() {
148
- return this.themeService.getClasses({
149
- icon: this.icon(),
150
- color: this.color(),
151
- label: this.label(),
152
- customStyle: this.customStyle(),
153
- });
82
+ this.state = flowbiteSidebarState(this);
154
83
  }
155
- //#endregion
156
84
  /**
157
- * Toggle sidebar menu visibility
85
+ * @internal
158
86
  */
159
87
  onClick() {
160
- (this.sidebarMenuComponent || this.sidebarItemGroupComponent?.sidebarMenuComponent)?.closeAll();
161
- (this.sidebarMenuComponent || this.sidebarItemGroupComponent?.sidebarMenuComponent)?.sidebarComponent.toggleVisibility(false);
88
+ this.toggle();
162
89
  }
163
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
164
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.4", type: SidebarItemComponent, isStandalone: true, selector: "flowbite-sidebar-item", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, customStyle: { classPropertyName: "customStyle", publicName: "customStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { icon: "iconChange", color: "colorChange", label: "labelChange", customStyle: "customStyleChange" }, host: { listeners: { "click": "onClick()" } }, usesInheritance: true, ngImport: i0, template: `
165
- @if (icon()) {
166
- <span
167
- class="flex-shrink-0"
168
- [innerHTML]="icon()! | sanitizeHtml"></span>
169
- }
170
-
171
- <span
172
- [class]="contentClasses().sidebarIconClass"
173
- [class.ml-3]="icon()">
174
- <ng-content />
175
- </span>
176
- @if (label()) {
177
- <flowbite-badge>{{ label() }}</flowbite-badge>
90
+ /**
91
+ * @internal
92
+ */
93
+ toggle(newState) {
94
+ newState ??= !this.state.open();
95
+ this.state.open.set(newState);
178
96
  }
179
- `, isInline: true, dependencies: [{ kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "component", type: BadgeComponent, selector: "flowbite-badge", inputs: ["color", "hasBorder", "size", "isIconOnly", "isPill", "customStyle", "isDismissable", "onDismiss"], outputs: ["colorChange", "hasBorderChange", "sizeChange", "isIconOnlyChange", "isPillChange", "customStyleChange", "isDismissableChange", "onDismissChange"] }], 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: Sidebar, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
98
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.6", type: Sidebar, isStandalone: true, selector: "\n aside[flowbiteSidebar]\n ", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, customTheme: { classPropertyName: "customTheme", publicName: "customTheme", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "class": "theme().host.root" } }, providers: [provideFlowbiteSidebarState({ inherit: true })], exportAs: ["flowbiteSidebar"], ngImport: i0 }); }
180
99
  }
181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemComponent, decorators: [{
182
- type: Component,
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: Sidebar, decorators: [{
101
+ type: Directive,
183
102
  args: [{
184
103
  standalone: true,
185
- imports: [SanitizeHtmlPipe, BadgeComponent],
186
- selector: 'flowbite-sidebar-item',
187
- template: `
188
- @if (icon()) {
189
- <span
190
- class="flex-shrink-0"
191
- [innerHTML]="icon()! | sanitizeHtml"></span>
192
- }
193
-
194
- <span
195
- [class]="contentClasses().sidebarIconClass"
196
- [class.ml-3]="icon()">
197
- <ng-content />
198
- </span>
199
- @if (label()) {
200
- <flowbite-badge>{{ label() }}</flowbite-badge>
201
- }
104
+ selector: `
105
+ aside[flowbiteSidebar]
202
106
  `,
107
+ exportAs: 'flowbiteSidebar',
108
+ hostDirectives: [],
109
+ providers: [provideFlowbiteSidebarState({ inherit: true })],
203
110
  host: {
111
+ '[class]': `theme().host.root`,
204
112
  '(click)': 'onClick()',
205
113
  },
206
- encapsulation: ViewEncapsulation.None,
207
- changeDetection: ChangeDetectionStrategy.OnPush,
208
114
  }]
209
115
  }] });
210
116
 
211
- const FLOWBITE_SIDEBAR_ITEM_GROUP_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_ITEM_GROUP_CUSTOM_STYLE_DEFAULT_VALUE');
212
- const sidebarItemGroupDefaultValueProvider = makeEnvironmentProviders([
117
+ const flowbiteSidebarContentTheme = createTheme({
118
+ host: {
119
+ base: 'h-full overflow-y-auto border-r px-3 py-4 lg:translate-x-0 lg:border-0',
120
+ transition: '',
121
+ open: {
122
+ on: 'w-64 translate-x-0',
123
+ off: '-translate-x-full',
124
+ },
125
+ color: {
126
+ default: {
127
+ light: 'border-gray-200 bg-gray-100',
128
+ dark: 'dark:border-gray-800 dark:bg-gray-900',
129
+ },
130
+ info: {
131
+ light: 'border-blue-200 bg-gray-100',
132
+ dark: 'dark:border-blue-800 dark:bg-gray-900',
133
+ },
134
+ failure: {
135
+ light: 'border-red-200 bg-gray-100',
136
+ dark: 'dark:border-red-800 dark:bg-gray-900',
137
+ },
138
+ success: {
139
+ light: 'border-green-200 bg-gray-100',
140
+ dark: 'dark:border-green-800 dark:bg-gray-900',
141
+ },
142
+ warning: {
143
+ light: 'border-yellow-200 bg-gray-100',
144
+ dark: 'dark:border-yellow-800 dark:bg-gray-900',
145
+ },
146
+ primary: {
147
+ light: 'border-primary-200 bg-gray-100',
148
+ dark: 'dark:border-primary-800 dark:bg-gray-900',
149
+ },
150
+ },
151
+ },
152
+ container: {
153
+ base: 'space-y-2 font-medium',
154
+ },
155
+ });
156
+
157
+ const defaultFlowbiteSidebarContentConfig = {
158
+ baseTheme: flowbiteSidebarContentTheme,
159
+ customTheme: {},
160
+ };
161
+ const FlowbiteSidebarContentConfigToken = new InjectionToken('FlowbiteSidebarContentConfigToken');
162
+ /**
163
+ * Provide the default SidebarContent configuration
164
+ * @param config The SidebarContent configuration
165
+ * @returns The provider
166
+ */
167
+ const provideFlowbiteSidebarContentConfig = (config) => [
213
168
  {
214
- provide: FLOWBITE_SIDEBAR_ITEM_GROUP_CUSTOM_STYLE_DEFAULT_VALUE,
215
- useValue: {},
169
+ provide: FlowbiteSidebarContentConfigToken,
170
+ useValue: { ...defaultFlowbiteSidebarContentConfig, ...config },
216
171
  },
217
- ]);
172
+ ];
218
173
  /**
219
- * @see https://flowbite.com/docs/components/sidebar/
174
+ * Inject the SidebarContent configuration
175
+ * @see {@link defaultFlowbiteSidebarContentConfig}
176
+ * @returns The configuration
220
177
  */
221
- class SidebarItemGroupComponent extends BaseComponent {
178
+ const injectFlowbiteSidebarContentConfig = () => inject(FlowbiteSidebarContentConfigToken, { optional: true }) ??
179
+ defaultFlowbiteSidebarContentConfig;
180
+
181
+ const FlowbiteSidebarContentStateToken = createStateToken('Flowbite SidebarContent');
182
+ const provideFlowbiteSidebarContentState = createStateProvider(FlowbiteSidebarContentStateToken);
183
+ const injectFlowbiteSidebarContentState = createStateInjector(FlowbiteSidebarContentStateToken);
184
+ const flowbiteSidebarContentState = createState(FlowbiteSidebarContentStateToken);
185
+
186
+ class SidebarContent {
222
187
  constructor() {
223
- super(...arguments);
224
- /**
225
- * Service injecteed used to generate class
226
- */
227
- this.themeService = inject(SidebarItemGroupThemeService);
228
- /**
229
- * `IconRegistry` service
230
- */
231
- this.iconRegistry = inject(IconRegistry);
232
- /**
233
- * `DomSanitizer` service
234
- */
235
- this.domSanitizer = inject(DomSanitizer);
236
- /**
237
- * The parent `SidebarMenuComponent`
238
- */
239
- this.sidebarMenuComponent = inject(SidebarMenuComponent);
240
- /**
241
- * List of `SidebarItemComponent`
242
- */
243
- this.sidebarItemChildren = contentChildren(SidebarItemComponent);
244
- //#region properties
245
- /**
246
- * Set if the sidebar item group is open
247
- *
248
- * @default One of children is active
249
- * @default false
250
- */
251
- this.isOpen = model(this.sidebarItemChildren().some((x) => x.flowbiteRouterLinkActive?.isActive() ?? false));
252
- /**
253
- * Set the sidebar item group color
254
- *
255
- * @default `SidebarMenuComponent`'s color
256
- */
257
- this.color = model(this.sidebarMenuComponent.color());
258
- /**
259
- * Set the sidebar item group title
260
- */
261
- this.title = model.required();
188
+ this.config = injectFlowbiteSidebarContentConfig();
189
+ this.sidebarState = injectFlowbiteSidebarState();
190
+ /**
191
+ * @see {@link injectFlowbiteSidebarContentConfig}
192
+ */
193
+ this.customTheme = input(this.config.customTheme);
194
+ this.theme = computed(() => {
195
+ const mergedTheme = mergeDeep(this.config.baseTheme, this.state.customTheme());
196
+ return {
197
+ host: {
198
+ root: twMerge(mergedTheme.host.base, mergedTheme.host.transition, mergedTheme.host.open[this.sidebarState().open() ? 'on' : 'off'], colorToTheme(mergedTheme.host.color, this.sidebarState().color())),
199
+ },
200
+ container: {
201
+ root: twMerge(mergedTheme.container.base),
202
+ },
203
+ };
204
+ });
262
205
  /**
263
- * Set the custom style for this sidebar item group
206
+ * @internal
264
207
  */
265
- this.customStyle = model(inject(FLOWBITE_SIDEBAR_ITEM_GROUP_CUSTOM_STYLE_DEFAULT_VALUE));
266
- }
267
- //#endregion
268
- //#region BaseComponent implementation
269
- fetchClass() {
270
- return this.themeService.getClasses({
271
- color: this.color(),
272
- customStyle: this.customStyle(),
273
- });
274
- }
275
- init() {
276
- this.iconRegistry.addRawSvgIconInNamepsace('flowbite-angular', 'chevron-down', this.domSanitizer.bypassSecurityTrustHtml(CHEVRON_DOWN_SVG_ICON));
208
+ this.state = flowbiteSidebarContentState(this);
277
209
  }
278
- //#endregion
279
210
  /**
280
- * Toggle isOpen value
281
- *
282
- * @param isOpen If provided force isOpen value
211
+ * @internal
283
212
  */
284
- toggleVisibility(isOpen) {
285
- if (isOpen === undefined) {
286
- isOpen = untracked(() => !this.isOpen());
287
- }
288
- this.isOpen.set(isOpen);
213
+ onClick($event) {
214
+ $event.stopPropagation();
289
215
  }
290
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
291
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.4", type: SidebarItemGroupComponent, isStandalone: true, selector: "flowbite-sidebar-item-group", inputs: { isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, customStyle: { classPropertyName: "customStyle", publicName: "customStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange", color: "colorChange", title: "titleChange", customStyle: "customStyleChange" }, queries: [{ propertyName: "sidebarItemChildren", predicate: SidebarItemComponent, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
292
- <span
293
- [class]="contentClasses().spanClass"
294
- (click)="toggleVisibility()">
295
- <h4>{{ title() }}</h4>
296
- <flowbite-icon
297
- svgIcon="flowbite-angular:chevron-down"
298
- class="h-6 w-6 shrink-0 duration-200"
299
- [class.rotate-180]="!isOpen()" />
300
- </span>
301
- @if (isOpen()) {
216
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SidebarContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
217
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.6", type: SidebarContent, isStandalone: true, selector: "\n div[flowbiteSidebarContent]\n ", inputs: { customTheme: { classPropertyName: "customTheme", publicName: "customTheme", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)" }, properties: { "class": "theme().host.root" } }, providers: [provideFlowbiteSidebarContentState()], exportAs: ["flowbiteSidebarContent"], ngImport: i0, template: `
218
+ <ul [class]="theme().container.root">
302
219
  <ng-content />
303
- }
304
- `, isInline: true, dependencies: [{ kind: "component", type: IconComponent, selector: "flowbite-icon", inputs: ["svgIcon"], outputs: ["svgIconChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
220
+ </ul>
221
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
305
222
  }
306
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarItemGroupComponent, decorators: [{
223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SidebarContent, decorators: [{
307
224
  type: Component,
308
225
  args: [{
309
226
  standalone: true,
310
- imports: [IconComponent],
311
- selector: 'flowbite-sidebar-item-group',
227
+ selector: `
228
+ div[flowbiteSidebarContent]
229
+ `,
230
+ exportAs: 'flowbiteSidebarContent',
231
+ hostDirectives: [],
232
+ imports: [],
233
+ providers: [provideFlowbiteSidebarContentState()],
234
+ host: {
235
+ '[class]': `theme().host.root`,
236
+ '(click)': 'onClick($event)',
237
+ },
312
238
  template: `
313
- <span
314
- [class]="contentClasses().spanClass"
315
- (click)="toggleVisibility()">
316
- <h4>{{ title() }}</h4>
317
- <flowbite-icon
318
- svgIcon="flowbite-angular:chevron-down"
319
- class="h-6 w-6 shrink-0 duration-200"
320
- [class.rotate-180]="!isOpen()" />
321
- </span>
322
- @if (isOpen()) {
239
+ <ul [class]="theme().container.root">
323
240
  <ng-content />
324
- }
241
+ </ul>
325
242
  `,
326
243
  encapsulation: ViewEncapsulation.None,
327
244
  changeDetection: ChangeDetectionStrategy.OnPush,
328
245
  }]
329
246
  }] });
330
247
 
331
- /**
332
- * `InjectionToken` used to import `SidebarMenuTheme` value
333
- *
334
- * @example
335
- * ```
336
- * var theme = inject(FLOWBITE_SIDEBAR_MENU_THEME_TOKEN)
337
- * ```
338
- */
339
- const FLOWBITE_SIDEBAR_MENU_THEME_TOKEN = new InjectionToken('FLOWBITE_SIDEBAR_MENU_THEME_TOKEN');
340
- class SidebarMenuThemeService {
341
- constructor() {
342
- this.baseTheme = inject(FLOWBITE_SIDEBAR_MENU_THEME_TOKEN);
343
- }
344
- getClasses(properties) {
345
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
346
- const output = {
347
- rootClass: twMerge(theme.root.base, theme.root.isOpen[properties.isOpen], properties.isOpen === 'enabled' && theme.root.displayMode[properties.displayMode], theme.root.color[properties.color]),
348
- };
349
- return output;
350
- }
351
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarMenuThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
352
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarMenuThemeService, providedIn: 'root' }); }
353
- }
354
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarMenuThemeService, decorators: [{
355
- type: Injectable,
356
- args: [{
357
- providedIn: 'root',
358
- }]
359
- }] });
360
-
361
- const FLOWBITE_SIDEBAR_MENU_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_MENU_CUSTOM_STYLE_DEFAULT_VALUE');
362
- const sidebarMenuDefaultValueProvider = makeEnvironmentProviders([
363
- {
364
- provide: FLOWBITE_SIDEBAR_MENU_CUSTOM_STYLE_DEFAULT_VALUE,
365
- useValue: {},
248
+ const flowbiteSidebarToggleTheme = createTheme({
249
+ host: {
250
+ base: 'inline-flex h-10 w-10 cursor-pointer items-center justify-center rounded-lg p-2 text-sm lg:hidden',
251
+ transition: '',
252
+ focus: 'data-focus:ring-0 data-focus:outline-none data-focus-visible:ring-2 data-focus-visible:outline-none',
253
+ disabled: 'data-disabled:cursor-not-allowed data-disabled:opacity-50',
254
+ size: {},
255
+ pill: {},
256
+ color: {
257
+ default: {
258
+ light: 'text-gray-900',
259
+ dark: 'dark:text-gray-100',
260
+ },
261
+ info: {
262
+ light: 'text-blue-900',
263
+ dark: 'dark:text-blue-100',
264
+ },
265
+ failure: {
266
+ light: 'text-red-900',
267
+ dark: 'dark:text-red-100',
268
+ },
269
+ success: {
270
+ light: 'text-green-900',
271
+ dark: 'dark:text-green-100',
272
+ },
273
+ warning: {
274
+ light: 'text-yellow-900',
275
+ dark: 'dark:text-yellow-100',
276
+ },
277
+ primary: {
278
+ light: 'text-primary-900',
279
+ dark: 'dark:text-primary-100',
280
+ },
281
+ },
282
+ colorOutline: {},
366
283
  },
367
- ]);
368
- /**
369
- * @see https://flowbite.com/docs/components/sidebar/
370
- */
371
- class SidebarMenuComponent extends BaseComponent {
372
- constructor() {
373
- super(...arguments);
374
- /**
375
- * Service injected used to generate class
376
- */
377
- this.themeService = inject(SidebarMenuThemeService);
378
- /**
379
- * The parent `SidebarComponent`
380
- */
381
- this.sidebarComponent = inject(SidebarComponent);
382
- /**
383
- * List of `SidebarItemGroupComponent`
384
- */
385
- this.sidebarItemGroupChildren = contentChildren(SidebarItemGroupComponent);
386
- /**
387
- * List of `SidebarItemComponent`
388
- */
389
- this.sidebarItemChildren = contentChildren(SidebarItemComponent);
390
- //#region properties
391
- /**
392
- * Set the sidebar menu color
393
- *
394
- * @default `SidebarComponent`'s color
395
- */
396
- this.color = model(this.sidebarComponent.color());
397
- /**
398
- * Set the custom style for this sidebar menu
399
- */
400
- this.customStyle = model(inject(FLOWBITE_SIDEBAR_MENU_CUSTOM_STYLE_DEFAULT_VALUE));
401
- }
402
- //#endregion
403
- fetchClass() {
404
- return this.themeService.getClasses({
405
- isOpen: booleanToFlowbiteBoolean(this.sidebarComponent.isOpen()),
406
- color: this.color(),
407
- displayMode: this.sidebarComponent.displayMode(),
408
- customStyle: this.customStyle(),
409
- });
410
- }
411
- /**
412
- * Toggle visibility of ll children to false
413
- */
414
- closeAll() {
415
- this.sidebarItemGroupChildren().forEach((x) => x.toggleVisibility(false));
416
- }
417
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
418
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.4", type: SidebarMenuComponent, isStandalone: true, selector: "flowbite-sidebar-menu", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, customStyle: { classPropertyName: "customStyle", publicName: "customStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { color: "colorChange", customStyle: "customStyleChange" }, queries: [{ propertyName: "sidebarItemGroupChildren", predicate: SidebarItemGroupComponent, isSignal: true }, { propertyName: "sidebarItemChildren", predicate: SidebarItemComponent, isSignal: true }], usesInheritance: true, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
419
- }
420
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarMenuComponent, decorators: [{
421
- type: Component,
422
- args: [{
423
- standalone: true,
424
- selector: 'flowbite-sidebar-menu',
425
- template: '<ng-content />',
426
- encapsulation: ViewEncapsulation.None,
427
- changeDetection: ChangeDetectionStrategy.OnPush,
428
- }]
429
- }] });
284
+ });
430
285
 
286
+ const defaultFlowbiteSidebarToggleConfig = {
287
+ baseTheme: flowbiteSidebarToggleTheme,
288
+ customTheme: {},
289
+ };
290
+ const FlowbiteSidebarToggleConfigToken = new InjectionToken('FlowbiteSidebarToggleConfigToken');
431
291
  /**
432
- * `InjectionToken` used to import `SidebarPageContentTheme` value
433
- *
434
- * @example
435
- * ```
436
- * var theme = inject(FLOWBITE_SIDEBAR_PAGE_CONTENT_THEME_TOKEN)
437
- * ```
292
+ * Provide the default SidebarToggle configuration
293
+ * @param config The SidebarToggle configuration
294
+ * @returns The provider
438
295
  */
439
- const FLOWBITE_SIDEBAR_PAGE_CONTENT_THEME_TOKEN = new InjectionToken('FLOWBITE_SIDEBAR_PAGE_CONTENT_THEME_TOKEN');
440
- class SidebarPageContentThemeService {
441
- constructor() {
442
- this.baseTheme = inject(FLOWBITE_SIDEBAR_PAGE_CONTENT_THEME_TOKEN);
443
- }
444
- getClasses(properties) {
445
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
446
- const output = {
447
- rootClass: twMerge(theme.root.base, properties.isOpen === 'enabled' && theme.root.displayMode[properties.displayMode]),
448
- };
449
- return output;
450
- }
451
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarPageContentThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
452
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarPageContentThemeService, providedIn: 'root' }); }
453
- }
454
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarPageContentThemeService, decorators: [{
455
- type: Injectable,
456
- args: [{
457
- providedIn: 'root',
458
- }]
459
- }] });
460
-
461
- const FLOWBITE_SIDEBAR_PAGE_CONTENT_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_PAGE_CONTENT_CUSTOM_STYLE_DEFAULT_VALUE');
462
- const sidebarPageContentDefaultValueProvider = makeEnvironmentProviders([
296
+ const provideFlowbiteSidebarToggleConfig = (config) => [
463
297
  {
464
- provide: FLOWBITE_SIDEBAR_PAGE_CONTENT_CUSTOM_STYLE_DEFAULT_VALUE,
465
- useValue: {},
298
+ provide: FlowbiteSidebarToggleConfigToken,
299
+ useValue: { ...defaultFlowbiteSidebarToggleConfig, ...config },
466
300
  },
467
- ]);
301
+ ];
468
302
  /**
469
- * @see https://flowbite.com/docs/components/sidebar/
303
+ * Inject the SidebarToggle configuration
304
+ * @see {@link defaultFlowbiteSidebarToggleConfig}
305
+ * @returns The configuration
470
306
  */
471
- class SidebarPageContentComponent extends BaseComponent {
472
- constructor() {
473
- super(...arguments);
474
- /**
475
- * Service injected used to generate class
476
- */
477
- this.themeService = inject(SidebarPageContentThemeService);
478
- /**
479
- * The parent `SidebarComponent`
480
- */
481
- this.sidebarComponent = inject(SidebarComponent);
482
- //#region properties
483
- /**
484
- * Set the custom style for this sidebar page content
485
- */
486
- this.customStyle = model(inject(FLOWBITE_SIDEBAR_PAGE_CONTENT_CUSTOM_STYLE_DEFAULT_VALUE));
487
- }
488
- //endregion
489
- //region BaseComponent implementation
490
- fetchClass() {
491
- return this.themeService.getClasses({
492
- isOpen: booleanToFlowbiteBoolean(this.sidebarComponent.isOpen()),
493
- displayMode: this.sidebarComponent.displayMode(),
494
- customStyle: this.customStyle(),
495
- });
496
- }
497
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarPageContentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
498
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.4", type: SidebarPageContentComponent, isStandalone: true, selector: "flowbite-sidebar-page-content", 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 }); }
499
- }
500
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarPageContentComponent, decorators: [{
501
- type: Component,
502
- args: [{
503
- standalone: true,
504
- selector: 'flowbite-sidebar-page-content',
505
- template: `<ng-content />`,
506
- encapsulation: ViewEncapsulation.None,
507
- changeDetection: ChangeDetectionStrategy.OnPush,
508
- }]
509
- }] });
307
+ const injectFlowbiteSidebarToggleConfig = () => inject(FlowbiteSidebarToggleConfigToken, { optional: true }) ??
308
+ defaultFlowbiteSidebarToggleConfig;
510
309
 
511
- /**
512
- * `InjectionToken` used to import `SidebarTheme` value
513
- *
514
- * @example
515
- * ```
516
- * var theme = inject(FLOWBITE_SIDEBAR_THEME_TOKEN)
517
- * ```
518
- */
519
- const FLOWBITE_SIDEBAR_THEME_TOKEN = new InjectionToken('FLOWBITE_SIDEBAR_THEME_TOKEN');
520
- class SidebarThemeService {
521
- constructor() {
522
- this.baseTheme = inject(FLOWBITE_SIDEBAR_THEME_TOKEN);
523
- }
524
- getClasses(properties) {
525
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
526
- const output = {
527
- rootClass: twMerge(theme.root.base, theme.root.isRounded[properties.isRounded]),
528
- };
529
- return output;
530
- }
531
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
532
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarThemeService, providedIn: 'root' }); }
533
- }
534
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarThemeService, decorators: [{
535
- type: Injectable,
536
- args: [{
537
- providedIn: 'root',
538
- }]
539
- }] });
310
+ const FlowbiteSidebarToggleStateToken = createStateToken('Flowbite SidebarToggle');
311
+ const provideFlowbiteSidebarToggleState = createStateProvider(FlowbiteSidebarToggleStateToken);
312
+ const injectFlowbiteSidebarToggleState = createStateInjector(FlowbiteSidebarToggleStateToken);
313
+ const flowbiteSidebarToggleState = createState(FlowbiteSidebarToggleStateToken);
540
314
 
541
- const FLOWBITE_SIDEBAR_COLOR_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_COLOR_DEFAULT_VALUE');
542
- const FLOWBITE_SIDEBAR_DISPLAY_MODE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_DISPLAY_MODE_DEFAULT_VALUE');
543
- const FLOWBITE_SIDEBAR_IS_OPEN_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_IS_OPEN_DEFAULT_VALUE');
544
- const FLOWBITE_SIDEBAR_IS_ROUNDED_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_IS_ROUNDED_DEFAULT_VALUE');
545
- const FLOWBITE_SIDEBAR_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_CUSTOM_STYLE_DEFAULT_VALUE');
546
- const sidebarDefaultValueProvider = makeEnvironmentProviders([
547
- {
548
- provide: FLOWBITE_SIDEBAR_COLOR_DEFAULT_VALUE,
549
- useValue: 'primary',
550
- },
551
- {
552
- provide: FLOWBITE_SIDEBAR_DISPLAY_MODE_DEFAULT_VALUE,
553
- useValue: 'push',
554
- },
555
- {
556
- provide: FLOWBITE_SIDEBAR_IS_OPEN_DEFAULT_VALUE,
557
- useValue: false,
558
- },
559
- {
560
- provide: FLOWBITE_SIDEBAR_IS_ROUNDED_DEFAULT_VALUE,
561
- useValue: false,
562
- },
563
- {
564
- provide: FLOWBITE_SIDEBAR_CUSTOM_STYLE_DEFAULT_VALUE,
565
- useValue: {},
566
- },
567
- ]);
568
- /**
569
- * @see https://flowbite.com/docs/components/sidebar/
570
- */
571
- class SidebarComponent extends BaseComponent {
315
+ class SidebarToggle {
572
316
  constructor() {
573
- super(...arguments);
574
- /**
575
- * Service injected used to generate class
576
- */
577
- this.themeService = inject(SidebarThemeService);
578
- /**
579
- * The child `SidebarMenuComponent`
580
- */
581
- this.sidebarMenuChild = contentChild.required(SidebarMenuComponent);
582
- /**
583
- * The child `SidebarPageContentComponent`
584
- */
585
- this.sidebarPageContentChild = contentChild.required(SidebarPageContentComponent);
586
- //#region properties
587
- /**
588
- * Set the sidebar color
589
- *
590
- * @default primary
591
- */
592
- this.color = model(inject(FLOWBITE_SIDEBAR_COLOR_DEFAULT_VALUE));
593
- /**
594
- * Set the sidebar display mode
595
- *
596
- * @default push
597
- */
598
- this.displayMode = model(inject(FLOWBITE_SIDEBAR_DISPLAY_MODE_DEFAULT_VALUE));
599
- /**
600
- * Set is the sidebar is open
601
- *
602
- * @default false
603
- */
604
- this.isOpen = model(inject(FLOWBITE_SIDEBAR_IS_OPEN_DEFAULT_VALUE));
605
- /**
606
- * Set is the sidebar is rounded
607
- *
608
- * @default false
609
- */
610
- this.isRounded = model(inject(FLOWBITE_SIDEBAR_IS_ROUNDED_DEFAULT_VALUE));
317
+ this.config = injectFlowbiteSidebarToggleConfig();
318
+ this.sidebarState = injectFlowbiteSidebarState();
319
+ /**
320
+ * @see {@link injectFlowbiteSidebarToggleConfig}
321
+ */
322
+ this.customTheme = input(this.config.customTheme);
323
+ this.theme = computed(() => {
324
+ const mergedTheme = mergeDeep(this.config.baseTheme, this.state.customTheme());
325
+ return {
326
+ host: {
327
+ root: twMerge(mergedTheme.host.base, mergedTheme.host.transition, mergedTheme.host.focus, mergedTheme.host.disabled, colorToTheme(mergedTheme.host.color, this.sidebarState().color())),
328
+ },
329
+ };
330
+ });
611
331
  /**
612
- * Set the custom style for this sidebar
332
+ * @internal
613
333
  */
614
- this.customStyle = model(inject(FLOWBITE_SIDEBAR_CUSTOM_STYLE_DEFAULT_VALUE));
334
+ this.state = flowbiteSidebarToggleState(this);
615
335
  }
616
- //#endregion
617
- //#region BaseComponent implementation
618
- fetchClass() {
619
- return this.themeService.getClasses({
620
- displayMode: this.displayMode(),
621
- isRounded: booleanToFlowbiteBoolean(this.isRounded()),
622
- customStyle: this.customStyle(),
623
- });
336
+ /**
337
+ * @internal
338
+ */
339
+ onClick() {
340
+ this.toggleSidebar();
624
341
  }
625
- //#endregion
626
342
  /**
627
- * Toggle sidebar visibility
628
- *
629
- * @param isOpen If provided force isOpen value
343
+ * @internal
630
344
  */
631
- toggleVisibility(isOpen) {
632
- if (isOpen === undefined) {
633
- isOpen = untracked(() => !this.isOpen());
634
- }
635
- this.isOpen.set(isOpen);
345
+ toggleSidebar() {
346
+ this.sidebarState().toggle();
636
347
  }
637
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
638
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.4", type: SidebarComponent, isStandalone: true, selector: "flowbite-sidebar", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, displayMode: { classPropertyName: "displayMode", publicName: "displayMode", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, isRounded: { classPropertyName: "isRounded", publicName: "isRounded", isSignal: true, isRequired: false, transformFunction: null }, customStyle: { classPropertyName: "customStyle", publicName: "customStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { color: "colorChange", displayMode: "displayModeChange", isOpen: "isOpenChange", isRounded: "isRoundedChange", customStyle: "customStyleChange" }, queries: [{ propertyName: "sidebarMenuChild", first: true, predicate: SidebarMenuComponent, descendants: true, isSignal: true }, { propertyName: "sidebarPageContentChild", first: true, predicate: SidebarPageContentComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
348
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SidebarToggle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
349
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.6", type: SidebarToggle, isStandalone: true, selector: "\n button[flowbiteSidebarToggle]\n ", inputs: { customTheme: { classPropertyName: "customTheme", publicName: "customTheme", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "class": "theme().host.root" } }, providers: [provideFlowbiteSidebarToggleState(), provideIcons({ barsFromLeft })], exportAs: ["flowbiteSidebarToggle"], hostDirectives: [{ directive: i1.BaseButton }], ngImport: i0 }); }
639
350
  }
640
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarComponent, decorators: [{
641
- type: Component,
351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SidebarToggle, decorators: [{
352
+ type: Directive,
642
353
  args: [{
643
354
  standalone: true,
644
- selector: 'flowbite-sidebar',
645
- template: `<ng-content />`,
646
- encapsulation: ViewEncapsulation.None,
647
- changeDetection: ChangeDetectionStrategy.OnPush,
355
+ selector: `
356
+ button[flowbiteSidebarToggle]
357
+ `,
358
+ exportAs: 'flowbiteSidebarToggle',
359
+ hostDirectives: [
360
+ {
361
+ directive: BaseButton,
362
+ inputs: [],
363
+ outputs: [],
364
+ },
365
+ ],
366
+ providers: [provideFlowbiteSidebarToggleState(), provideIcons({ barsFromLeft })],
367
+ host: {
368
+ '[class]': `theme().host.root`,
369
+ '(click)': 'onClick()',
370
+ },
648
371
  }]
649
372
  }] });
650
373
 
651
- const sidebarTheme = createTheme({
652
- root: {
653
- base: 'flex flex-row min-h-full',
654
- isRounded: {
655
- enabled: 'rounded',
656
- disabled: '',
657
- },
658
- },
659
- });
660
-
661
- /**
662
- * Default theme for `SidebarItemComponent`
663
- */
664
- const sidebarItemTheme = createTheme({
665
- root: {
666
- base: 'group flex cursor-pointer items-center rounded-lg p-2 text-base font-normal text-gray-900 dark:text-white',
667
- color: {
668
- primary: 'aria-current:text-primary-500 dark:aria-current:text-primary-300 hover:bg-primary-200/35 dark:hover:bg-primary-700/35',
669
- dark: 'aria-current:text-gray-500 dark:aria-current:text-gray-300 hover:bg-gray-200/35 dark:hover:bg-gray-700/35',
670
- blue: 'aria-current:text-blue-500 dark:aria-current:text-blue-300 hover:bg-blue-200/35 dark:hover:bg-blue-700/35',
671
- red: 'aria-current:text-red-500 dark:aria-current:text-red-300 hover:bg-red-200/35 dark:hover:bg-red-700/35',
672
- green: 'aria-current:text-green-500 dark:aria-current:text-green-300 hover:bg-green-200/35 dark:hover:bg-green-700/35',
673
- yellow: 'aria-current:text-yellow-500 dark:aria-current:text-yellow-300 hover:bg-yellow-200/35 dark:hover:bg-yellow-700/35',
674
- },
675
- },
676
- icon: {
677
- base: 'flex-1 whitespace-nowrap',
678
- },
679
- });
680
-
681
- /**
682
- * Default theme for `SidebarItemGroupComponent`
683
- */
684
- const sidebarItemGroupTheme = createTheme({
685
- root: {
686
- base: 'flex flex-col py-2 font-semibold cursor-pointer',
687
- },
688
- spanText: {
689
- base: 'flex flex-row justify-between m-2',
374
+ const flowbiteSidebarItemTheme = createTheme({
375
+ host: {
376
+ base: 'm-0 flex cursor-pointer flex-row rounded-sm px-3 py-2',
377
+ transition: '',
378
+ focus: 'data-focus:ring-0 data-focus:outline-none data-focus-visible:ring-2 data-focus-visible:outline-none',
379
+ disabled: 'data-disabled:cursor-not-allowed data-disabled:opacity-50',
380
+ size: {},
381
+ pill: {},
690
382
  color: {
691
- primary: 'text-primary-600',
692
- dark: 'text-gray-600',
693
- blue: 'text-blue-600',
694
- red: 'text-red-600',
695
- green: 'text-green-600',
696
- yellow: 'text-yellow-600',
383
+ default: {
384
+ light: 'text-gray-800 data-hover:text-gray-900',
385
+ dark: 'dark:text-white dark:data-hover:text-gray-100',
386
+ },
387
+ info: {
388
+ light: 'text-gray-800 data-hover:text-blue-900',
389
+ dark: 'dark:text-white dark:data-hover:text-blue-100',
390
+ },
391
+ failure: {
392
+ light: 'text-gray-800 data-hover:text-red-900',
393
+ dark: 'dark:text-white dark:data-hover:text-red-100',
394
+ },
395
+ success: {
396
+ light: 'text-gray-800 data-hover:text-green-900',
397
+ dark: 'dark:text-white dark:data-hover:text-green-100',
398
+ },
399
+ warning: {
400
+ light: 'text-gray-800 data-hover:text-yellow-900',
401
+ dark: 'dark:text-white dark:data-hover:text-yellow-100',
402
+ },
403
+ primary: {
404
+ light: 'data-hover:text-primary-900 text-gray-800',
405
+ dark: 'dark:data-hover:text-primary-100 dark:text-white',
406
+ },
697
407
  },
408
+ colorOutline: {},
698
409
  },
699
410
  });
700
411
 
412
+ const defaultFlowbiteSidebarItemConfig = {
413
+ baseTheme: flowbiteSidebarItemTheme,
414
+ customTheme: {},
415
+ };
416
+ const FlowbiteSidebarItemConfigToken = new InjectionToken('FlowbiteSidebarItemConfigToken');
701
417
  /**
702
- * `InjectionToken` used to import `SidebarToggleTheme` value
703
- *
704
- * @example
705
- * ```
706
- * var theme = inject(FLOWBITE_SIDEBAR_TOGGLE_THEME_TOKEN)
707
- * ```
418
+ * Provide the default SidebarItem configuration
419
+ * @param config The SidebarItem configuration
420
+ * @returns The provider
708
421
  */
709
- const FLOWBITE_SIDEBAR_TOGGLE_THEME_TOKEN = new InjectionToken('FLOWBITE_TOGGLE_SIDEBAR_THEME_TOKEN');
710
- class SidebarToggleThemeService {
711
- constructor() {
712
- this.baseTheme = inject(FLOWBITE_SIDEBAR_TOGGLE_THEME_TOKEN);
713
- }
714
- getClasses(properties) {
715
- const theme = mergeTheme(this.baseTheme, properties.customStyle);
716
- const output = {
717
- rootClass: twMerge(theme.root.base, theme.root.color[properties.color], theme.root.size[properties.color]),
718
- };
719
- return output;
720
- }
721
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarToggleThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
722
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarToggleThemeService, providedIn: 'root' }); }
723
- }
724
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarToggleThemeService, decorators: [{
725
- type: Injectable,
726
- args: [{
727
- providedIn: 'root',
728
- }]
729
- }] });
730
-
731
- const FLOWBITE_SIDEBAR_TOGGLE_COLOR_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_TOGGLE_COLOR_DEFAULT_VALUE');
732
- const FLOWBITE_SIDEBAR_TOGGLE_SIZE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_TOGGLE_SIZE_DEFAULT_VALUE');
733
- const FLOWBITE_SIDEBAR_TOGGLE_CUSTOM_STYLE_DEFAULT_VALUE = new InjectionToken('FLOWBITE_SIDEBAR_TOGGLE_CUSTOM_STYLE_DEFAULT_VALUE');
734
- const sidebarToggleDefaultValueProvider = makeEnvironmentProviders([
422
+ const provideFlowbiteSidebarItemConfig = (config) => [
735
423
  {
736
- provide: FLOWBITE_SIDEBAR_TOGGLE_COLOR_DEFAULT_VALUE,
737
- useValue: 'primary',
424
+ provide: FlowbiteSidebarItemConfigToken,
425
+ useValue: { ...defaultFlowbiteSidebarItemConfig, ...config },
738
426
  },
739
- {
740
- provide: FLOWBITE_SIDEBAR_TOGGLE_SIZE_DEFAULT_VALUE,
741
- useValue: 'sm',
742
- },
743
- {
744
- provide: FLOWBITE_SIDEBAR_TOGGLE_CUSTOM_STYLE_DEFAULT_VALUE,
745
- useValue: {},
746
- },
747
- ]);
427
+ ];
748
428
  /**
749
- * @see https://flowbite.com/docs/components/sidebar/
429
+ * Inject the SidebarItem configuration
430
+ * @see {@link defaultFlowbiteSidebarItemConfig}
431
+ * @returns The configuration
750
432
  */
751
- class SidebarToggleComponent extends BaseComponent {
433
+ const injectFlowbiteSidebarItemConfig = () => inject(FlowbiteSidebarItemConfigToken, { optional: true }) ?? defaultFlowbiteSidebarItemConfig;
434
+
435
+ const FlowbiteSidebarItemStateToken = createStateToken('Flowbite SidebarItem');
436
+ const provideFlowbiteSidebarItemState = createStateProvider(FlowbiteSidebarItemStateToken);
437
+ const injectFlowbiteSidebarItemState = createStateInjector(FlowbiteSidebarItemStateToken);
438
+ const flowbiteSidebarItemState = createState(FlowbiteSidebarItemStateToken);
439
+
440
+ class SidebarItem {
752
441
  constructor() {
753
- super(...arguments);
754
- /**
755
- * Service injected used to generate class
756
- */
757
- this.themeService = inject(SidebarToggleThemeService);
758
- /**
759
- * `IconRegistry` service
760
- */
761
- this.iconRegistry = inject(IconRegistry);
762
- /**
763
- * `DomSanitizer` service
764
- */
765
- this.domSanitizer = inject(DomSanitizer);
766
- /**
767
- * The `SidebarComponent` to use
768
- *
769
- * @default The injected `SidebarComponent`
770
- */
771
- this.sidebarComponent = model(inject(SidebarComponent));
772
- //#region properties
773
- /**
774
- * Set the sidebar toggle color
775
- *
776
- * @default primary
777
- */
778
- this.color = model(inject(FLOWBITE_SIDEBAR_TOGGLE_COLOR_DEFAULT_VALUE));
779
- /**
780
- * Set the sidebar toggle size
781
- *
782
- * @default sm
783
- */
784
- this.size = model(inject(FLOWBITE_SIDEBAR_TOGGLE_SIZE_DEFAULT_VALUE));
442
+ this.config = injectFlowbiteSidebarItemConfig();
443
+ this.sidebarState = injectFlowbiteSidebarState();
444
+ /**
445
+ * @see {@link injectFlowbiteSidebarItemConfig}
446
+ */
447
+ this.customTheme = input(this.config.customTheme);
448
+ this.theme = computed(() => {
449
+ const mergedTheme = mergeDeep(this.config.baseTheme, this.state.customTheme());
450
+ return {
451
+ host: {
452
+ root: twMerge(mergedTheme.host.base, mergedTheme.host.transition, mergedTheme.host.focus, mergedTheme.host.disabled, colorToTheme(mergedTheme.host.color, this.sidebarState().color())),
453
+ },
454
+ };
455
+ });
785
456
  /**
786
- * Set the custom style for this sidebar toggle
457
+ * @internal
787
458
  */
788
- this.customStyle = model(inject(FLOWBITE_SIDEBAR_TOGGLE_CUSTOM_STYLE_DEFAULT_VALUE));
789
- }
790
- //#endregion
791
- //#region BaseComponent implementation
792
- fetchClass() {
793
- return this.themeService.getClasses({
794
- color: this.color(),
795
- size: this.size(),
796
- customStyle: this.customStyle(),
797
- });
798
- }
799
- init() {
800
- this.iconRegistry.addRawSvgIconInNamepsace('flowbite-angular', 'tabs', this.domSanitizer.bypassSecurityTrustHtml(BARS_SVG_ICON));
459
+ this.state = flowbiteSidebarItemState(this);
801
460
  }
802
- //#endregion
803
461
  /**
804
- * Toggle sidebar visibility
462
+ * @internal
805
463
  */
806
464
  onClick() {
807
- const isOpen = this.sidebarComponent().isOpen();
808
- this.sidebarComponent().isOpen.set(!isOpen);
465
+ this.toggleSidebar();
809
466
  }
810
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarToggleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
811
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.4", type: SidebarToggleComponent, isStandalone: true, selector: "flowbite-sidebar-toggle", inputs: { sidebarComponent: { classPropertyName: "sidebarComponent", publicName: "sidebarComponent", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, customStyle: { classPropertyName: "customStyle", publicName: "customStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sidebarComponent: "sidebarComponentChange", color: "colorChange", size: "sizeChange", customStyle: "customStyleChange" }, host: { listeners: { "click": "onClick()" } }, usesInheritance: true, ngImport: i0, template: `<flowbite-icon svgIcon="flowbite-angular:bars" />`, isInline: true, dependencies: [{ kind: "component", type: IconComponent, selector: "flowbite-icon", inputs: ["svgIcon"], outputs: ["svgIconChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
467
+ /**
468
+ * @internal
469
+ */
470
+ toggleSidebar() {
471
+ this.sidebarState().toggle();
472
+ }
473
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SidebarItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
474
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.6", type: SidebarItem, isStandalone: true, selector: "\n a[flowbiteSidebarItem],\n button[flowbiteSidebarItem]\n ", inputs: { customTheme: { classPropertyName: "customTheme", publicName: "customTheme", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "class": "theme().host.root" } }, providers: [provideFlowbiteSidebarItemState()], exportAs: ["flowbiteSidebarItem"], hostDirectives: [{ directive: i1.BaseButton }, { directive: i2.NgpButton, inputs: ["disabled", "disabled"] }, { directive: i3.NgpFocus, inputs: ["ngpFocusDisabled", "focusDisabled"], outputs: ["ngpFocus", "ngpFocus"] }], ngImport: i0 }); }
812
475
  }
813
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.4", ngImport: i0, type: SidebarToggleComponent, decorators: [{
814
- type: Component,
476
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SidebarItem, decorators: [{
477
+ type: Directive,
815
478
  args: [{
816
479
  standalone: true,
817
- imports: [IconComponent],
818
- selector: 'flowbite-sidebar-toggle',
819
- template: `<flowbite-icon svgIcon="flowbite-angular:bars" />`,
480
+ selector: `
481
+ a[flowbiteSidebarItem],
482
+ button[flowbiteSidebarItem]
483
+ `,
484
+ exportAs: 'flowbiteSidebarItem',
485
+ hostDirectives: [
486
+ {
487
+ directive: BaseButton,
488
+ inputs: [],
489
+ outputs: [],
490
+ },
491
+ {
492
+ directive: NgpButton,
493
+ inputs: ['disabled:disabled'],
494
+ outputs: [],
495
+ },
496
+ {
497
+ directive: NgpFocus,
498
+ inputs: ['ngpFocusDisabled:focusDisabled'],
499
+ outputs: ['ngpFocus'],
500
+ },
501
+ ],
502
+ providers: [provideFlowbiteSidebarItemState()],
820
503
  host: {
504
+ '[class]': `theme().host.root`,
821
505
  '(click)': 'onClick()',
822
506
  },
823
- encapsulation: ViewEncapsulation.None,
824
- changeDetection: ChangeDetectionStrategy.OnPush,
825
507
  }]
826
508
  }] });
827
509
 
828
- /**
829
- * Default theme for `SidebarToggleComponent`
830
- */
831
- const sidebarToggleTheme = createTheme({
832
- root: {
833
- base: 'cursor-pointer inline-flex items-center p-2 justify-center rounded-lg focus:outline-none focus:ring-2',
834
- color: {
835
- primary: 'text-primary-500 dark:text-primary-400 hover:bg-primary-100 dark:hover:bg-gray-700 focus:ring-primary-200 dark:focus:ring-primary-600',
836
- dark: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:ring-gray-200 dark:focus:ring-gray-600',
837
- blue: 'text-blue-500 dark:text-blue-400 hover:bg-blue-100 dark:hover:bg-blue-700 focus:ring-blue-200 dark:focus:ring-blue-600',
838
- red: 'text-red-500 dark:text-red-400 hover:bg-red-100 dark:hover:bg-red-700 focus:ring-red-200 dark:focus:ring-red-600',
839
- green: 'text-green-500 dark:text-green-400 hover:bg-green-100 dark:hover:bg-green-700 focus:ring-green-200 dark:focus:ring-green-600',
840
- yellow: 'text-yellow-500 dark:text-yellow-400 hover:bg-yellow-100 dark:hover:bg-yellow-700 focus:ring-yellow-200 dark:focus:ring-yellow-600',
841
- },
842
- size: {
843
- sm: 'text-sm',
844
- },
845
- },
846
- });
847
-
848
- /**
849
- * Default theme for `SidebarPageContentComponent`
850
- */
851
- const sidebarPageContentTheme = createTheme({
852
- root: {
853
- base: 'flex flex-1',
854
- displayMode: {
855
- push: '',
856
- over: '',
857
- backdrop: 'sticky left-0 right-0 z-30 bg-gray-500 bg-opacity-50 blur-md',
858
- },
859
- },
860
- });
861
-
862
- /**
863
- * Default theme for `SidebarMenuComponent`
864
- */
865
- const sidebarMenuTheme = createTheme({
866
- root: {
867
- base: 'flex-col min-h-full overflow-y-auto shrink-0 pr-1 border-r bg-white dark:bg-gray-800',
868
- displayMode: {
869
- push: '',
870
- over: 'sticky top-0 z-50',
871
- backdrop: 'sticky top-0 z-50',
872
- },
873
- isOpen: {
874
- enabled: 'flex',
875
- disabled: 'hidden',
876
- },
877
- color: {
878
- primary: 'border-primary-200 dark:border-primary-700',
879
- dark: 'border-gray-200 dark:border-gray-800',
880
- blue: 'border-blue-200 dark:border-blue-700',
881
- red: 'border-red-200 dark:border-red-700',
882
- green: 'border-green-200 dark:border-green-700',
883
- yellow: 'border-yellow-200 dark:border-yellow-700',
884
- },
885
- },
886
- });
510
+ /* Sidebar */
887
511
 
888
512
  /**
889
513
  * Generated bundle index. Do not edit.
890
514
  */
891
515
 
892
- export { FLOWBITE_SIDEBAR_COLOR_DEFAULT_VALUE, FLOWBITE_SIDEBAR_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_SIDEBAR_DISPLAY_MODE_DEFAULT_VALUE, FLOWBITE_SIDEBAR_IS_OPEN_DEFAULT_VALUE, FLOWBITE_SIDEBAR_IS_ROUNDED_DEFAULT_VALUE, FLOWBITE_SIDEBAR_ITEM_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_SIDEBAR_ITEM_GROUP_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_SIDEBAR_ITEM_GROUP_THEME_TOKEN, FLOWBITE_SIDEBAR_ITEM_ICON_DEFAULT_VALUE, FLOWBITE_SIDEBAR_ITEM_LABEL_DEFAULT_VALUE, FLOWBITE_SIDEBAR_ITEM_THEME_TOKEN, FLOWBITE_SIDEBAR_MENU_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_SIDEBAR_MENU_THEME_TOKEN, FLOWBITE_SIDEBAR_PAGE_CONTENT_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_SIDEBAR_PAGE_CONTENT_THEME_TOKEN, FLOWBITE_SIDEBAR_THEME_TOKEN, FLOWBITE_SIDEBAR_TOGGLE_COLOR_DEFAULT_VALUE, FLOWBITE_SIDEBAR_TOGGLE_CUSTOM_STYLE_DEFAULT_VALUE, FLOWBITE_SIDEBAR_TOGGLE_SIZE_DEFAULT_VALUE, FLOWBITE_SIDEBAR_TOGGLE_THEME_TOKEN, SidebarComponent, SidebarItemComponent, SidebarItemGroupComponent, SidebarItemGroupThemeService, SidebarItemThemeService, SidebarMenuComponent, SidebarMenuThemeService, SidebarPageContentComponent, SidebarPageContentThemeService, SidebarThemeService, SidebarToggleComponent, SidebarToggleThemeService, sidebarDefaultValueProvider, sidebarItemDefaultValueProvider, sidebarItemGroupDefaultValueProvider, sidebarItemGroupTheme, sidebarItemTheme, sidebarMenuDefaultValueProvider, sidebarMenuTheme, sidebarPageContentDefaultValueProvider, sidebarPageContentTheme, sidebarTheme, sidebarToggleDefaultValueProvider, sidebarToggleTheme };
516
+ export { FlowbiteSidebarConfigToken, FlowbiteSidebarContentConfigToken, FlowbiteSidebarContentStateToken, FlowbiteSidebarItemConfigToken, FlowbiteSidebarItemStateToken, FlowbiteSidebarStateToken, FlowbiteSidebarToggleConfigToken, FlowbiteSidebarToggleStateToken, Sidebar, SidebarContent, SidebarItem, SidebarToggle, defaultFlowbiteSidebarConfig, defaultFlowbiteSidebarContentConfig, defaultFlowbiteSidebarItemConfig, defaultFlowbiteSidebarToggleConfig, flowbiteSidebarContentState, flowbiteSidebarContentTheme, flowbiteSidebarItemState, flowbiteSidebarItemTheme, flowbiteSidebarState, flowbiteSidebarTheme, flowbiteSidebarToggleState, flowbiteSidebarToggleTheme, injectFlowbiteSidebarConfig, injectFlowbiteSidebarContentConfig, injectFlowbiteSidebarContentState, injectFlowbiteSidebarItemConfig, injectFlowbiteSidebarItemState, injectFlowbiteSidebarState, injectFlowbiteSidebarToggleConfig, injectFlowbiteSidebarToggleState, provideFlowbiteSidebarConfig, provideFlowbiteSidebarContentConfig, provideFlowbiteSidebarContentState, provideFlowbiteSidebarItemConfig, provideFlowbiteSidebarItemState, provideFlowbiteSidebarState, provideFlowbiteSidebarToggleConfig, provideFlowbiteSidebarToggleState };
893
517
  //# sourceMappingURL=flowbite-angular-sidebar.mjs.map