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